1 //Author: Daniel Zeligman

    2 //Loads the environment and overall system, handles world based events, updates subsystems

    3 #pragma once

    4 #include "Hikari.h"

    5 #include <Ogre.h>

    6 #include <OIS/OIS.h>

    7 #include <map>

    8 #include <vector>

    9 #include "InputManager.h"

   10 #include "EventListener.h"

   11 #include "Fader.h"

   12 

   13 class GameObject;

   14 class GameObjectManager;

   15 class PhysicsSubSystem;

   16 class RenderSubSystem;

   17 class MeshSubSystem;

   18 class BehaviorSubSystem;

   19 class AnimationSubSystem;

   20 class SoundSubSystem;

   21 class TriggerSubSystem;

   22 class LifeSubSystem;

   23 

   24 

   25 class Level : public EventListener

   26 {

   27 public:

   28     Level(const std::string& name,const std::string& desc,Ogre::Camera* camera,Ogre::SceneManager* sceneMgr,Ogre::Viewport* viewPort);

   29     ~Level();

   30 

   31     void initialize();

   32 

   33     //update our subsystems and the player's input

   34     void preFrameTick(const Ogre::FrameEvent& evt);

   35     void postFrameTick(const Ogre::FrameEvent& evt);

   36 

   37     void stop();

   38 

   39     /**

   40     * Called on any key being Pressed

   41     * @param e the OIS::KeyEvent

   42     */

   43     void keyPressed( const OIS::KeyEvent &e );

   44 

   45     /**

   46     * Called on any key being Released

   47     * @param e the OIS::KeyEvent

   48     */

   49     void keyReleased( const OIS::KeyEvent &e );

   50 

   51     /**

   52     * Called on any mouse movement

   53     * @param e the OIS::MouseEvent

   54     */

   55     void mouseMoved( const OIS::MouseEvent &e );

   56 

   57     /**

   58     * Called on any mouse movement

   59     * @param e the OIS::MouseEvent

   60     * @param id OIS::MouseButtonID

   61     */

   62     void mousePressed( const OIS::MouseEvent &e, OIS::MouseButtonID id );

   63 

   64     /**

   65     * Called on any mouse click release

   66     * @param e the OIS::MouseEvent

   67     * @param id OIS::MouseButtonID

   68     */

   69     void mouseReleased( const OIS::MouseEvent &e, OIS::MouseButtonID id );

   70 

   71     void handleEvent(Event* event);

   72 

   73 private:

   74     void loadInitialObjects();

   75 

   76     void loadTemplates();

   77 

   78     void createCamera();

   79 

   80     void initializeSubSystems();

   81 

   82     void setupHikari();

   83 

   84     void respawnPlayer();

   85 

   86     //our gui

   87     Hikari::HikariManager* hikariMgr;

   88     Hikari::FlashControl *acorn_count,*fps,*lifebar;

   89 

   90     //ogre specifics

   91     Ogre::SceneManager* mSceneMgr;

   92     Ogre::Viewport* mViewport;

   93     Ogre::Camera* mCamera;

   94     Ogre::OverlayManager *mOverlayMgr;

   95     Ogre::Overlay*    mMouseOverlay;

   96 

   97     //subsystems

   98     PhysicsSubSystem* physicsSubSystem;

   99     RenderSubSystem* renderSubSystem;

  100     MeshSubSystem* meshSubSystem;

  101     BehaviorSubSystem* behaviorSubSystem;

  102     AnimationSubSystem* animationSubSystem;

  103     SoundSubSystem*        soundSubSystem;

  104     TriggerSubSystem*    triggerSubSystem;

  105     LifeSubSystem*        lifeSubSystem;

  106 

  107     int mObjectCount;

  108 

  109     //level name/desc

  110     const Ogre::String mName;

  111     const Ogre::String mDesc;

  112     //key mapping player input

  113     Ogre::Vector3 mKeyDirection;

  114     //fade screen controls

  115     float mFadingTimer;

  116     Fader* mFader;

  117     bool fading;

  118 

  119     float mPlayerHitpoints;

  120 

  121 };