summaryrefslogtreecommitdiffstats
path: root/src/object/brain.h
blob: 988a3cc6849c09db6c7915e415cae296e5a8db95 (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
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
// * This file is part of the COLOBOT source code
// * Copyright (C) 2001-2008, Daniel ROUX & EPSITEC SA, www.epsitec.ch
// *
// * This program is free software: you can redistribute it and/or modify
// * it under the terms of the GNU General Public License as published by
// * the Free Software Foundation, either version 3 of the License, or
// * (at your option) any later version.
// *
// * This program is distributed in the hope that it will be useful,
// * but WITHOUT ANY WARRANTY; without even the implied warranty of
// * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// * GNU General Public License for more details.
// *
// * You should have received a copy of the GNU General Public License
// * along with this program. If not, see  http://www.gnu.org/licenses/.

// brain.h

#ifndef _BRAIN_H_
#define	_BRAIN_H_


#include "misc.h"
#include "event.h"
#include "object.h"
#include "taskmanip.h"
#include "taskflag.h"
#include "taskshield.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;


#define BRAINMAXSCRIPT		10



enum TraceOper
{
	TO_STOP			= 0,	// stop
	TO_ADVANCE		= 1,	// advance
	TO_RECEDE		= 2,	// back
	TO_TURN			= 3,	// rotate
	TO_PEN			= 4,	// color change
};

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;		// rank of the selected script
	int			m_program;		// rank of the executed program / ​​-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_