예제 #1
0
	HandleType  Mesh::NextHandle(HandleType h, ElementType etype) const 
	{
		integer num = GetHandleElementNum(h), id = GetHandleID(h);
		++id;
		while( num < 5 )
		{
			while(id < static_cast<integer>(links[num].size()) && (links[num][id] == -1)) ++id;
			if( id == static_cast<integer>(links[num].size()) ) 
			{
				bool stop = true;
				for(integer q = num+1; q < 5; q++)
				{
					if( etype & (1 << q) )
					{
						id = 0;
						num = q;
						stop = false;
						break;
					}
				}
				if( stop ) break;
			}
			else break;
		}
		if( num == 5 && id > 0 ) id = 1;
		return ComposeHandleNum(num,id);
	}
예제 #2
0
 void InputGamepadTask::onDeviceRemoved(Gamepad_device * device)
 {
     CONSOLE << "handleID[" << InputGamepad::createHandleID(device->vendorID, device->productID) << "] " << "removed" << std::endl;
     for (auto itr = member->gamepads.cbegin(); itr != member->gamepads.cend();)
     {
         if (itr->GetHandleID() == InputGamepad::createHandleID(device->vendorID, device->productID))
         {
             itr = member->gamepads.erase(itr);
             continue;
         }
         else
         {
             ++itr;
         }
     }
 }
예제 #3
0
	HandleType  Mesh::PrevHandle(HandleType h, ElementType etype) const 
	{
		integer num = GetHandleElementNum(h), id = GetHandleID(h);
		--id;
		if( num == 5 ) 
		{
			if( id < 0 )
			{
				bool stop = true;
				for(integer q = 4; q >= 0; q--)
				{
					if( etype & (1 << q) )
					{
						
						num = q;
						id = static_cast<integer>(links[num].size())-1;
						stop = false;
						break;
					}
				}
				if( stop ) return InvalidHandle();
			}
			else return ComposeHandleNum(ElementNum(MESH),0);
		}
		while( num >= 0 )
		{
			while(id >= 0 && (links[num][id] == -1)) --id;
			if( id == -1 ) 
			{
				bool stop = true;
				for(integer q = num-1; q >= 0; q--)
				{
					if( etype & (1 << q) )
					{
						num = q;
						id = static_cast<integer>(links[num].size())-1;
						stop = false;
						break;
					}
				}
				if( stop ) return InvalidHandle();
			}
			else break;
		}
		if( num < 0 ) return InvalidHandle();
		return ComposeHandleNum(num,id);
	}
예제 #4
0
	HandleType  Mesh::NextHandle(HandleType h) const 
	{
		integer num = GetHandleElementNum(h), id = GetHandleID(h);
		++id;
		while( num < 5 )
		{
			while(id < static_cast<integer>(links[num].size()) && (links[num][id] == -1)) ++id;
			if( id == static_cast<integer>(links[num].size()) ) 
			{
				id = 0;
				++num;
			}
			else break;
		}
		if( num == 5 && id > 0 ) id = 1;
		return ComposeHandleNum(num,id);
	}
예제 #5
0
	HandleType  Mesh::PrevHandle(HandleType h) const 
	{
		integer num = GetHandleElementNum(h), id = GetHandleID(h);
		--id;
		if( num == 5 ) 
		{
			if( id < 0 )
				num = 4;
			else return ComposeHandleNum(ElementNum(MESH),0);
		}
		while( num >= 0 )
		{
			while(id >= 0 && (links[num][id] == -1)) --id;
			if( id == -1 ) 
			{
				--num;
				if( num > 0 ) id = static_cast<integer>(links[num].size())-1;
			}
			else break;
		}
		if( num < 0 ) return InvalidHandle();
		return ComposeHandleNum(num,id);
	}