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); }
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; } } }
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); }
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); }
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); }