about summary refs log tree commit diff
path: root/src/game/collision.h
diff options
context:
space:
mode:
authorMagnus Auvinen <magnus.auvinen@gmail.com>2010-05-29 07:25:38 +0000
committerMagnus Auvinen <magnus.auvinen@gmail.com>2010-05-29 07:25:38 +0000
commit72c06a258940696093f255fb1061beb58e1cdd0b (patch)
tree36b9a7712eec2d4f07837eab9c38ef1c5af85319 /src/game/collision.h
parente56feb597bc743677633432f77513b02907fd169 (diff)
downloadzcatch-72c06a258940696093f255fb1061beb58e1cdd0b.tar.gz
zcatch-72c06a258940696093f255fb1061beb58e1cdd0b.zip
copied refactor to trunk
Diffstat (limited to 'src/game/collision.h')
-rw-r--r--src/game/collision.h37
1 files changed, 37 insertions, 0 deletions
diff --git a/src/game/collision.h b/src/game/collision.h
new file mode 100644
index 00000000..66603890
--- /dev/null
+++ b/src/game/collision.h
@@ -0,0 +1,37 @@
+#ifndef GAME_COLLISION_H
+#define GAME_COLLISION_H
+
+#include <base/vmath.h>
+
+class CCollision
+{
+	class CTile *m_pTiles;
+	int m_Width;
+	int m_Height;
+	class CLayers *m_pLayers;
+
+	bool IsTileSolid(int x, int y);
+	int GetTile(int x, int y);
+
+public:
+	enum
+	{
+		COLFLAG_SOLID=1,
+		COLFLAG_DEATH=2,
+		COLFLAG_NOHOOK=4,
+	};
+
+	CCollision();
+	void Init(class CLayers *pLayers);
+	bool CheckPoint(float x, float y) { return IsTileSolid(round(x), round(y)); }
+	bool CheckPoint(vec2 p) { return CheckPoint(p.x, p.y); }
+	int GetCollisionAt(float x, float y) { return GetTile(round(x), round(y)); }
+	int GetWidth() { return m_Width; };
+	int GetHeight() { return m_Height; };
+	int IntersectLine(vec2 Pos0, vec2 Pos1, vec2 *pOutCollision, vec2 *pOutBeforeCollision);
+	void MovePoint(vec2 *pInoutPos, vec2 *pInoutVel, float Elasticity, int *Bpounces);
+	void MoveBox(vec2 *pInoutPos, vec2 *pInoutVel, vec2 Size, float Elasticity);
+	bool TestBox(vec2 Pos, vec2 Size);
+};
+
+#endif