summaryrefslogtreecommitdiffstats
path: root/src/brain.h
blob: 071c4b14c9cff58854eed85f2420df4c78bc6139 (plain)
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
// brain.h

#ifndef _BRAIN_H_
#define	_BRAIN_H_


class CInstanceManager;
class CD3DEngine;
class CTerrain;
class CWater;
class CCamera;
class CObject;
class CPhysics;
class CMotion;
class CTaskManager;
class CInterface;
class CWindow;
class CDisplayText;
class CScript;
class CRobotMain;
class CStudio;
class CSound;
class CParticule;

enum ObjectType;
enum TaskManipOrder;
enum TaskManipArm;
enum TaskFlagOrder;
enum TaskShieldMode;


#define BRAINMAXSCRIPT		10



enum TraceOper
{
	TO_STOP			= 0,	// arr�t
	TO_ADVANCE		= 1,	// avance
	TO_RECEDE		= 2,	// recule
	TO_TURN			= 3,	// tourne
	TO_PEN			= 4,	// changement de couleur
};

typedef struct
{
	TraceOper	oper;
	float		param;
}
TraceRecord;



class CBrain
{
public:
	CBrain(CInstanceManager* iMan, CObject* object);
	~CBrain();

	void		DeleteObject(BOOL bAll=FALSE);

	void		SetPhysics(CPhysics* physics);
	void		SetMotion(CMotion* motion);

	BOOL		EventProcess(const Event &event);
	BOOL		CreateInterface(BOOL bSelect);

	BOOL		Write(char *line);
	BOOL		Read(char *line);

	BOOL		IsBusy();
	void		SetActivity(BOOL bMode);
	BOOL		RetActivity();
	BOOL		IsProgram();
	BOOL		ProgramExist(int rank);
	void		RunProgram(int rank);
	int			FreeProgram();
	int			RetProgram();
	void		StopProgram();
	void		StopTask();

	BOOL		IntroduceVirus();
	void		SetActiveVirus(BOOL bActive);
	BOOL		RetActiveVirus();

	void		SetScriptRun(int rank);
	int			RetScriptRun();
	void		SetScriptName(int rank, char *name);
	char*		RetScriptName(int rank);
	void		SetSoluceName(char *name);
	char*		RetSoluceName();

	BOOL		ReadSoluce(char* filename);
	BOOL		ReadProgram(int rank, char* filename);
	BOOL		RetCompile(int rank);
	BOOL		WriteProgram(int rank, char* filename);
	BOOL		ReadStack(FILE *file);
	BOOL		WriteStack(FILE *file);

	Error		StartTaskTake();
	Error		StartTaskManip(TaskManipOrder order, TaskManipArm arm);
	Error		StartTaskFlag(TaskFlagOrder order, int rank);
	Error		StartTaskBuild(ObjectType type);
	Error		StartTaskSearch();
	Error		StartTaskTerraform();
	Error		StartTaskPen(BOOL bDown, int color);
	Error		StartTaskRecover();
	Error		StartTaskShield(TaskShieldMode mode);
	Error		StartTaskFire(float delay);
	Error		StartTaskFireAnt(D3DVECTOR impact);
	Error		StartTaskGunGoal(float dirV, float dirH);
	Error		StartTaskReset(D3DVECTOR goal, D3DVECTOR angle);

	void		UpdateInterface(float rTime);
	void		UpdateInterface();

protected:
	BOOL		EventFrame(const Event &event);

	void		StartEditScript(int rank, char* name);
	void		StopEditScript(BOOL bCancel);

	Error		EndedTask();

	void		GroundFlat();
	void		ColorFlag(int color);

	void		UpdateScript(CWindow *pw);
	int			RetSelScript();
	void		BlinkScript(BOOL bEnable);

	void		CheckInterface(CWindow *pw, EventMsg event, BOOL bState);
	void		EnableInterface(CWindow *pw, EventMsg event, BOOL bState);
	void		DeadInterface(CWindow *pw, EventMsg event, BOOL bState);
	void		DefaultEnter(CWindow *pw, EventMsg event, BOOL bState=TRUE);

	void		TraceRecordStart();
	void		TraceRecordFrame();
	void		TraceRecordStop();
	BOOL		TraceRecordOper(TraceOper oper, float param);
	BOOL		TraceRecordPut(char *buffer, int max, TraceOper oper, float param);

protected:
	CInstanceManager* m_iMan;
	CD3DEngine*		m_engine;
	CTerrain*		m_terrain;
	CWater*			m_water;
	CCamera*		m_camera;
	CObject*		m_object;
	CPhysics*		m_physics;
	CMotion*		m_motion;
	CInterface*		m_interface;
	CDisplayText*	m_displayText;
	CRobotMain*		m_main;
	CStudio*		m_studio;
	CSound*			m_sound;
	CParticule*		m_particule;
	CTaskManager*	m_primaryTask;
	CTaskManager*	m_secondaryTask;

	CScript*	m_script[BRAINMAXSCRIPT];
	int			m_selScript;		// rang du script s�lectionn�
	int			m_program;			// rang du programme ex�cut� / -1
	BOOL		m_bActivity;
	BOOL		m_bBurn;
	BOOL		m_bActiveVirus;

	int			m_scriptRun;
	char		m_scriptName[BRAINMAXSCRIPT][50];
	char		m_soluceName[50];

	EventMsg	m_buttonAxe;
	EventMsg	m_manipStyle;
	EventMsg	m_defaultEnter;
	EventMsg	m_interfaceEvent[100];

	CObject*	m_antTarget;
	CObject*	m_beeBullet;
	float		m_beeBulletSpeed;
	D3DVECTOR	m_startPos;
	float		m_time;
	float		m_burnTime;
	float		m_lastUpdateTime;
	float		m_lastHumanTime;
	float		m_lastSpiderTime;
	float		m_lastWormTime;
	float		m_lastBulletTime;
	float		m_lastAlarmTime;
	int			m_soundChannelAlarm;
	int			m_flagColor;

	BOOL		m_bTraceRecord;
	TraceOper	m_traceOper;
	D3DVECTOR	m_tracePos;
	float		m_traceAngle;
	int			m_traceColor;
	int			m_traceRecordIndex;
	TraceRecord* m_traceRecordBuffer;
};


#endif //_BRAIN_H_