// // I_EnumerateGamePads // // Enumerate all gamepads. // void I_EnumerateGamePads() { // Have all supported drivers enumerate their gamepads halpaddriveritem_t *item = halPadDriverTable; while(item->name) { if(item->driver && item->isInit) item->driver->enumerateDevices(); ++item; } // build the master pad directory masterGamePadList.clear(); item = halPadDriverTable; while(item->name) { if(item->driver) { PODCollection<HALGamePad *> &pads = item->driver->devices; for(auto itr = pads.begin(); itr != pads.end(); itr++) masterGamePadList.add(*itr); } ++item; } }
// // MN_initMetaDeaths // // haleyjd 01/22/12: Pull all meta death states out of the player class // object's metatable. // static void MN_initMetaDeaths() { playerclass_t *pclass = players[consoleplayer].pclass; MetaTable *meta = mobjinfo[pclass->type]->meta; MetaState *state = NULL; skview_metadeaths.clear(); while((state = meta->getNextTypeEx(state))) { // NB: also matches XDeath implicitly. if(M_StrCaseStr(state->getKey(), "Death.")) skview_metadeaths.add(state); } }
// // MN_SkinResponder // // The skin viewer widget responder function. Sorta long and // hackish, but cool. // static bool MN_SkinResponder(event_t *ev, int action) { // only interested in keydown events if(ev->type != ev_keydown) return false; if(action == ka_menu_toggle || action == ka_menu_previous) { // kill the widget skview_metadeaths.clear(); S_StartInterfaceSound(GameModeInfo->menuSounds[MN_SND_DEACTIVATE]); MN_PopWidget(); return true; } if(action == ka_menu_left) { // rotate sprite left if(skview_rot == 7) skview_rot = 0; else skview_rot++; return true; } if(action == ka_menu_right) { // rotate sprite right if(skview_rot == 0) skview_rot = 7; else skview_rot--; return true; } if(action == ka_menu_up) { // increase light level if(skview_light != 0) --skview_light; return true; } if(action == ka_menu_down) { // decrease light level if(skview_light != 31) ++skview_light; return true; } switch(ev->data1) { case KEYD_RCTRL: // attack! if(skview_action == SKV_WALKING) { S_StartInterfaceSound(GameModeInfo->skvAtkSound); MN_SkinSetState(states[skview_atkstate2]); skview_action = SKV_FIRING; } break; case 'p': case 'P': // act hurt if(skview_action == SKV_WALKING) { MN_SkinSetState(states[mobjinfo[skview_typenum]->painstate]); skview_action = SKV_PAIN; } break; case 'd': case 'D': // die normally if(skview_action != SKV_DEAD) { MN_SkinSetState(states[mobjinfo[skview_typenum]->deathstate]); skview_action = SKV_DEAD; } break; case 'm': case 'M': // "meta" death (elemental death states) if(skview_action != SKV_DEAD && !skview_metadeaths.isEmpty()) { skview_metadeath = skview_metadeaths.wrapIterator(); MN_SkinSetState(skview_metadeath->state); skview_action = SKV_DEAD; } break; case 'x': case 'X': // gib if(skview_action != SKV_DEAD) { skview_gibbed = true; MN_SkinSetState(states[mobjinfo[skview_typenum]->xdeathstate]); skview_action = SKV_DEAD; } break; case 'h': case 'H': // toggle half-speed animation skview_halfspeed ^= true; break; case ' ': // "respawn" the player if dead if(skview_action == SKV_DEAD) { S_StartInterfaceSound(GameModeInfo->teleSound); MN_SkinSetState(states[mobjinfo[skview_typenum]->seestate]); skview_action = SKV_WALKING; } break; default: return false; } return true; }