]> git.localhorst.tv Git - l2e.git/blobdiff - src/map/MapState.h
switched geometric scalars from floating to fixed
[l2e.git] / src / map / MapState.h
index dc352f69522636e5f2248076f6cddb59bea2a804..89d235ddd631e22e0e99e93ac0d9d1b43031f950 100644 (file)
@@ -1,48 +1,51 @@
-/*
- * MapState.h
- *
- *  Created on: Sep 29, 2012
- *      Author: holy
- */
-
 #ifndef MAP_MAPSTATE_H_
 #define MAP_MAPSTATE_H_
 
 #include "Entity.h"
 #include "fwd.h"
 #include "../app/State.h"
-#include "../geometry/Vector.h"
+#include "../common/fwd.h"
+#include "../common/ScriptHost.h"
+#include "../common/ScriptRunner.h"
+#include "../math/Fixed.h"
+#include "../math/Vector.h"
 #include "../graphics/Camera.h"
 
 #include <vector>
 
 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(Map *);
+       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 UpdateWorld(Uint32 deltaT);
        virtual void Render(SDL_Surface *);
 
 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 SetWalkingSpeed(math::Fixed<8> s) { walkingSpeed = s; }
+
+       void Transition(Map *, const math::Vector<int> &coordinates);
+
+       virtual void HandleSyscall(common::ScriptRunner &);
 
-       void Transition(Map *, const geometry::Vector<int> &coordinates);
+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);
@@ -50,32 +53,43 @@ private:
        void UnloadMap();
        void LoadMap(Map *);
 
-       bool CheckBlocking() const;
+       bool CheckBlocking();
+       bool CheckBlocking(const math::Vector<int> &position, Entity::Orientation direction) const;
 
        void OnTileLock();
-       void OnGridLock();
+       bool OnGridLock();
        void OnMove(bool);
 
        void UpdateFollower(Entity &);
        void StopFollowers(Entity &);
 
        void LockEntities();
-       void CheckMonster();
-       void CheckTrigger();
+       bool CheckMonster();
+
+       bool CheckLockTrigger();
+       bool CheckMoveTrigger();
+       void RunTrigger(Trigger &);
+
+       enum Syscalls {
+               TRANSITION = 1,
+               WARP = 2,
+       };
 
 private:
-       app::Application *ctrl;
+       common::GameConfig *game;
        Map *map;
        Entity *controlled;
-       app::Timer<float> moveTimer;
-       geometry::Vector<float> tempTarget;
-       geometry::Vector<int> lastLock;
+       Entity *pushed;
+       common::ScriptRunner runner;
+       app::Timer<Uint32> moveTimer;
+       math::Vector<int> lastLock;
        graphics::Camera camera;
        std::vector<Entity *> entities;
-       float walkingSpeed;
+       math::Fixed<8> walkingSpeed;
        int nextDirection;
        bool afterLock;
        bool skipLock;
+       bool pushing;
        bool debug;
 
 };