-/*
- * MapState.h
- *
- * Created on: Sep 29, 2012
- * Author: holy
- */
-
#ifndef MAP_MAPSTATE_H_
#define MAP_MAPSTATE_H_
#include "fwd.h"
#include "../app/State.h"
#include "../common/fwd.h"
+#include "../common/ScriptHost.h"
+#include "../common/ScriptRunner.h"
#include "../geometry/Vector.h"
#include "../graphics/Camera.h"
namespace map {
+/// Shows a map and its entities an optionally control a single entity.
class MapState
-: public app::State {
+: public app::State
+, public common::ScriptHost {
public:
explicit MapState(common::GameConfig *, Map *);
virtual ~MapState() { }
public:
- virtual void EnterState(app::Application &ctrl, SDL_Surface *screen);
- virtual void ExitState(app::Application &ctrl, SDL_Surface *screen);
- virtual void ResumeState(app::Application &ctrl, SDL_Surface *screen);
- virtual void PauseState(app::Application &ctrl, SDL_Surface *screen);
- virtual void Resize(int width, int height);
-
virtual void HandleEvents(const app::Input &);
virtual void UpdateWorld(float deltaT);
virtual void Render(SDL_Surface *);
void Transition(Map *, const geometry::Vector<int> &coordinates);
+ virtual void HandleSyscall(common::ScriptRunner &);
+
+private:
+ virtual void OnEnterState(SDL_Surface *screen);
+ virtual void OnExitState(SDL_Surface *screen);
+ virtual void OnResumeState(SDL_Surface *screen);
+ virtual void OnPauseState(SDL_Surface *screen);
+
+ virtual void OnResize(int width, int height);
+
private:
static bool ZCompare(const Entity *lhs, const Entity *rhs);
void LockEntities();
bool CheckMonster();
- bool CheckTrigger();
+
+ bool CheckLockTrigger();
+ bool CheckMoveTrigger();
+ void RunTrigger(Trigger &);
+
+ enum Syscalls {
+ TRANSITION = 1,
+ WARP = 2,
+ };
private:
common::GameConfig *game;
- app::Application *ctrl;
Map *map;
Entity *controlled;
Entity *pushed;
+ common::ScriptRunner runner;
app::Timer<float> moveTimer;
- geometry::Vector<float> tempTarget;
geometry::Vector<int> lastLock;
graphics::Camera camera;
std::vector<Entity *> entities;