topical media & game development

talk show tell print

lib-game-delta3d-demos-fireFighter-inputcomponent.h / h



  /* -*-c++-*-
   * Delta3D Open Source Game and Simulation Engine
   * Copyright (C) 2006, Alion Science and Technology, BMH Operation
   *
   * This library is free software; you can redistribute it and/or modify it under
   * the terms of the GNU Lesser General Public License as published by the Free
   * Software Foundation; either version 2.1 of the License, or (at your option)
   * any later version.
   *
   * This library is distributed in the hope that it will be useful, but WITHOUT
   * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
   * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
   * details.
   *
   * You should have received a copy of the GNU Lesser General Public License
   * along with this library; if not, write to the Free Software Foundation, Inc.,
   * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
   *
   * William E. Johnson II
   */
  
  ifndef DELTA_FIRE_FIGHTER_INPUT_COMPONENT
  define DELTA_FIRE_FIGHTER_INPUT_COMPONENT
  
  include <dtGame/baseinputcomponent.h>
  include <fireFighter/export.h>
  include <fireFighter/exception.h>
  
  // Forward declarations
  class GameState;
  class GameItemActor;
  class PlayerActor;
  
  namespace dtCore
  {
     class CollisionMotionModel;
  }
  
  namespace dtAudio
  {
     class Sound;
  }
  
  namespace dtActors
  {
     class TaskActorOrderedProxy;
  }
  
  class FIRE_FIGHTER_EXPORT InputComponent : public dtGame::BaseInputComponent
  {
     public:
  
        static const std::string NAME;
  
  
Constructor InputComponent(const std::string& name = NAME);

        
Handles key presses

  
        virtual bool HandleKeyPressed(const dtCore::Keyboard* keyboard, int key);
  
        
Handles key releases

  
        virtual bool HandleKeyReleased(const dtCore::Keyboard* keyboard, int key);
  
        
Handles button presses

  
        virtual bool HandleButtonPressed(const dtCore::Mouse* mouse,
                                         dtCore::Mouse::MouseButton button);
  
        
Handles button releases

  
        virtual bool HandleButtonReleased(const dtCore::Mouse* mouse,
           dtCore::Mouse::MouseButton button);
  
        
Handles incoming messages

  
        virtual void ProcessMessage(const dtGame::Message& message);
  
        
Returns the current state the game is in
returns: mCurrentState

  
        GameState& GetCurrentGameState() { return *mCurrentState; }
  
        
const overload Returns the current state the game is in
returns: mCurrentState

  
        const GameState& GetCurrentGameState() const { return *mCurrentState; }
  
        
Called when this component is added to the game manager

  
        virtual void OnAddedToGM();
  
        
Called immediately after a component is removed from the GM.

  
        virtual void OnRemovedFromGM();
  
        
Accessor to the player actor
returns: mPlayer

  
        const PlayerActor& GetPlayerActor() const { return *mPlayer; }
  
        
Accessor to the player actor
returns: mPlayer

  
        PlayerActor& GetPlayerActor() { return *mPlayer; }
  
     protected:
  
  
Destructor virtual ~InputComponent();

     private:
  
        
Helper method to quickly build and send game state changed messages
parameter: oldState the old state
parameter: newState the new state

  
        void SendGameStateChangedMessage(GameState& oldState, GameState& newState);
  
        
Helper method to initialize the scene for the intro @note These methods help us to ensure that initialization can happen in one set place after all messages have been processed

  
        void OnIntro();
  
        
Helper method to initialize the scene for the game

  
        void OnGame();
  
        
Helper method to be called when the game is over

  
        void OnDebrief();
  
        
Help method called when we change state to the menu

  
        void OnMenu();
  
        
Helper method to stop any sounds that are playing

  
        void StopSounds();
  
        
This function determines is an actor of specified type is located in the game map and throws and exception if not.
parameter: actor A pointer to the actor to find
parameter: throwException True if you want the function to throw an exception if the actor is not found in the map @throws MISSING_REQUIRED_ACTOR_EXCEPTION

  
        template <class T>
        void IsActorInGameMap(T*& actor, bool throwException = true);
  
        
Helper method to update the motion model when the player crouches or stands up
parameter: newHeight The new height of the player actor

  
        void UpdateCollider(float newHeight);
  
        
Helper method to link tasks in the map

  
        void SetupTasks();
  
        
Helper method to go through the list of tasks and send a message if a task has failed

  
        void ProcessTasks();
  
        GameState* mCurrentState;
        PlayerActor* mPlayer;
  
        dtCore::RefPtr<dtCore::CollisionMotionModel> mMotionModel;
  
        dtAudio::Sound* mBellSound;
        dtAudio::Sound* mDebriefSound;
        dtAudio::Sound* mWalkSound;
        dtAudio::Sound* mRunSound;
        dtAudio::Sound* mCrouchSound;
        GameItemActor* mCurrentIntersectedItem;
        float mRadius, mTheta, mK;
        dtCore::RefPtr<dtActors::TaskActorOrderedProxy> mMission;
        bool mTasksSetup;
  };
  
  template<class T>
  void InputComponent::IsActorInGameMap(T*& actor, bool throwException)
  {
     std::vector<dtGame::GameActorProxy*> proxies;
     GetGameManager()->GetAllGameActors(proxies);
  
     for (unsigned int i = 0; i < proxies.size(); i++)
     {
        actor = dynamic_cast<T*>(proxies[i]->GetActor());
        if (actor != NULL)
        {
           break;
        }
     }
     if (actor == NULL && throwException)
     {
        throw dtUtil::Exception(ExceptionEnum::MISSING_REQUIRED_ACTOR_EXCEPTION,
           std::string("Failed to find the actor: ") + typeid(actor).name(), __FILE__, __LINE__);
     }
  }
  
  endif
  


(C) Æliens 04/09/2009

You may not copy or print any of this material without explicit permission of the author or the publisher. In case of other copyright issues, contact the author.