File: MoveMath.h

package info (click to toggle)
spring 0.81.2.1%2Bdfsg1-6
  • links: PTS, VCS
  • area: main
  • in suites: squeeze
  • size: 28,496 kB
  • ctags: 37,096
  • sloc: cpp: 238,659; ansic: 13,784; java: 12,175; awk: 3,428; python: 1,159; xml: 738; perl: 405; sh: 297; makefile: 267; pascal: 228; objc: 192
file content (46 lines) | stat: -rw-r--r-- 1,890 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#ifndef MOVEMATH_H
#define MOVEMATH_H

#include "Sim/MoveTypes/MoveInfo.h"
#include "float3.h"
#include "Sim/Objects/SolidObject.h"

class CMoveMath {
	CR_DECLARE(CMoveMath);
public:
	// Block-check-options
	// Note: options are hierarchical, with CHECK_STRUCTURE as the first check.
	const static int BLOCK_MOVING = 1;
	const static int BLOCK_MOBILE = 2;
	const static int BLOCK_MOBILE_BUSY = 4;
	const static int BLOCK_STRUCTURE = 8;
	const static int BLOCK_TERRAIN = 16;

	// returns a speed-multiplier for given position or data
	float SpeedMod(const MoveData& moveData, float3 pos);
	float SpeedMod(const MoveData& moveData, int xSquare, int zSquare);
	virtual float SpeedMod(const MoveData& moveData, float height, float slope) = 0;
	float SpeedMod(const MoveData& moveData, float3 pos,const float3& moveDir);
	float SpeedMod(const MoveData& moveData, int xSquare, int zSquare,const float3& moveDir);
	virtual float SpeedMod(const MoveData& moveData, float height, float slope,float moveSlope) = 0;

	// tells whether a position is blocked (inaccessable for a given object's movedata)
	int IsBlocked(const MoveData& moveData, float3 pos, bool fromEst = false);
	int IsBlocked(const MoveData& moveData, int xSquare, int zSquare, bool fromEst = false);
	int IsBlocked2(const MoveData& moveData, int xSquare, int zSquare, bool fromEst = false);

	// tells whether a given object is blocking the given movedata
	bool CrushResistant(const MoveData& moveData, const CSolidObject* object);
	bool IsNonBlocking(const MoveData& moveData, const CSolidObject* object);

	// gives the y-coordinate the unit will "stand on"
	virtual float yLevel(const float3& pos);
	virtual float yLevel(int xSquare, int Square) = 0;

	// returns the block-status of a single quare
	int SquareIsBlocked(const MoveData& moveData, int xSquare, int zSquare, bool fromEst = false);

	virtual ~CMoveMath();
};

#endif