fysxasteroids/asteroids/View.h

82 lines
1.9 KiB
C
Raw Normal View History

2010-04-05 23:38:59 +02:00
#ifndef _VIEW_H
#define _VIEW_H
#include "ViewBase.h"
#include "OverlayBase.h"
2010-04-05 23:38:59 +02:00
#include "mathlib.h"
#include "Sprite.h"
#include "EntityBase.h"
#include "SimpleConsoleOverlay.h"
2010-04-05 23:38:59 +02:00
namespace asteroids {
struct ShipEntity;
struct AsteroidEntity;
struct RocketEntity;
struct BackgroundStar {
vector3d position;
};
/** \brief Performs the actual drawing based on Camera and Model
*/
class View : public Engine::ViewBase {
public:
virtual ~View() {};
2010-04-05 23:38:59 +02:00
protected:
/** \brief Initializes the system */
virtual int OnInit (int argc, char* argv[]);
virtual void OnDestroy ();
2010-04-05 23:38:59 +02:00
/** \brief Updates the camera for further drawing */
virtual void UpdateCamera ();
private:
virtual void DrawWorld ();
void DrawStars ();
void DrawEntity (Engine::EntityBase *entity);
void DrawShip (ShipEntity *ship);
void DrawAsteroid (AsteroidEntity *asteroid);
void DrawRocket (RocketEntity *asteroid);
void DrawShipPart (Engine::EntityBase *entity);
// boost::shared_ptr<MenuOverlay> mMenuOverlay;
// boost::shared_ptr<Engine::SimpleConsoleOverlay> mConsoleOverlay;
2010-04-05 23:38:59 +02:00
std::vector<BackgroundStar> mBackgroundStars;
std::vector<unsigned int> mShipPartsEntityIds;
Engine::Sprite mAsteroidSprite;
Engine::Sprite mShipSprite;
Engine::Sprite mShipThrustSprite;
Engine::Sprite mShipPartsSprite;
class AccelerateEventHandler : public Engine::EventListenerBase {
public:
explicit AccelerateEventHandler (View *view) : mView (view) {};
virtual bool HandleEvent (const Engine::EventBasePtr &event) const;
private:
View *mView;
};
class ShipExplodeEventHandler : public Engine::EventListenerBase {
public:
explicit ShipExplodeEventHandler (View *view) : mView (view) {};
virtual bool HandleEvent (const Engine::EventBasePtr &event) const;
private:
View *mView;
};
AccelerateEventHandler *mAccelerateEventHandler;
ShipExplodeEventHandler *mShipExplodeEventHandler;
friend class AccelerateEventHandler;
};
}
#endif // _VIEW_H