+public:
+ void AddEntity(Entity *e) { entities.push_back(e); }
+ void ControlEntity(Entity *e) { controlled = e; camera.SetTarget(&e->Position()); }
+
+ void SetWalkingSpeed(float s) { walkingSpeed = s; }
+
+ 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 UnloadMap();
+ void LoadMap(Map *);
+
+ bool CheckBlocking();
+ bool CheckBlocking(const geometry::Vector<int> &position, Entity::Orientation direction) const;
+
+ void OnTileLock();
+ bool OnGridLock();
+ void OnMove(bool);
+
+ void UpdateFollower(Entity &);
+ void StopFollowers(Entity &);
+
+ void LockEntities();
+ bool CheckMonster();
+
+ bool CheckLockTrigger();
+ bool CheckMoveTrigger();
+ void RunTrigger(Trigger &);
+
+ enum Syscalls {
+ TRANSITION = 1,
+ WARP = 2,
+ };
+