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