示例#1
0
//
// 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;
   }
}
示例#2
0
//
// 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);
   }
}
示例#3
0
//
// 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;
}