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