TORCS
1.3.9
The Open Racing Car Simulator
racestate.cpp
Go to the documentation of this file.
1
/***************************************************************************
2
3
file : racestate.cpp
4
created : Sat Nov 16 12:00:42 CET 2002
5
copyright : (C) 2002-2014 by Eric Espie, Bernhard Wymann
6
email : eric.espie@torcs.org
7
version : $Id$
8
9
***************************************************************************/
10
11
/***************************************************************************
12
* *
13
* This program is free software; you can redistribute it and/or modify *
14
* it under the terms of the GNU General Public License as published by *
15
* the Free Software Foundation; either version 2 of the License, or *
16
* (at your option) any later version. *
17
* *
18
***************************************************************************/
19
26
/* The Race Engine State Automaton */
27
28
#include <stdlib.h>
29
#include <stdio.h>
30
#include <
tgfclient.h
>
31
#include <
raceman.h
>
32
#include <
racescreens.h
>
33
34
#include "
racemain.h
"
35
#include "
raceinit.h
"
36
#include "
raceengine.h
"
37
#include "
racegl.h
"
38
#include "
raceresults.h
"
39
#include "
racemanmenu.h
"
40
41
#include "
racestate.h
"
42
43
static
void
*
mainMenu
;
44
45
/* State Automaton Init */
46
void
47
ReStateInit
(
void
*prevMenu)
48
{
49
mainMenu
= prevMenu;
50
}
51
52
53
/* State Automaton Management */
54
/* Called when a race menu is entered */
55
void
56
ReStateManage
(
void
)
57
{
58
int
mode =
RM_SYNC
|
RM_NEXT_STEP
;
59
60
do
{
61
switch
(
ReInfo
->_reState) {
62
case
RE_STATE_CONFIG
:
63
GfOut
(
"RaceEngine: state = RE_STATE_CONFIG\n"
);
64
/* Display the race specific menu */
65
mode =
ReRacemanMenu
();
66
if
(mode &
RM_NEXT_STEP
) {
67
ReInfo
->_reState =
RE_STATE_EVENT_INIT
;
68
}
69
break
;
70
71
case
RE_STATE_EVENT_INIT
:
72
GfOut
(
"RaceEngine: state = RE_STATE_EVENT_INIT\n"
);
73
/* Load the event description (track and drivers list) */
74
mode =
ReRaceEventInit
();
75
if
(mode &
RM_NEXT_STEP
) {
76
ReInfo
->_reState =
RE_STATE_PRE_RACE
;
77
}
78
break
;
79
80
case
RE_STATE_PRE_RACE
:
81
GfOut
(
"RaceEngine: state = RE_STATE_PRE_RACE\n"
);
82
mode =
RePreRace
();
83
if
(mode &
RM_NEXT_STEP
) {
84
ReInfo
->_reState =
RE_STATE_RACE_START
;
85
}
86
break
;
87
88
case
RE_STATE_RACE_START
:
89
GfOut
(
"RaceEngine: state = RE_STATE_RACE_START\n"
);
90
mode =
ReRaceStart
();
91
if
(mode &
RM_NEXT_STEP
) {
92
ReInfo
->_reState =
RE_STATE_RACE
;
93
}
94
break
;
95
96
case
RE_STATE_RACE
:
97
mode =
ReUpdate
();
98
if
(
ReInfo
->
s
->_raceState ==
RM_RACE_ENDED
) {
99
/* race finished */
100
ReInfo
->_reState =
RE_STATE_RACE_END
;
101
}
else
if
(mode &
RM_END_RACE
) {
102
/* interrupt by player */
103
ReInfo
->_reState =
RE_STATE_RACE_STOP
;
104
}
105
break
;
106
107
case
RE_STATE_RACE_STOP
:
108
GfOut
(
"RaceEngine: state = RE_STATE_RACE_STOP\n"
);
109
/* Interrupted by player */
110
mode =
ReRaceStop
();
111
if
(mode &
RM_NEXT_STEP
) {
112
ReInfo
->_reState =
RE_STATE_RACE_END
;
113
}
114
break
;
115
116
case
RE_STATE_RACE_END
:
117
GfOut
(
"RaceEngine: state = RE_STATE_RACE_END\n"
);
118
mode =
ReRaceEnd
();
119
if
(mode &
RM_NEXT_STEP
) {
120
ReInfo
->_reState =
RE_STATE_POST_RACE
;
121
}
else
if
(mode &
RM_NEXT_RACE
) {
122
ReInfo
->_reState =
RE_STATE_RACE_START
;
123
}
124
break
;
125
126
case
RE_STATE_POST_RACE
:
127
GfOut
(
"RaceEngine: state = RE_STATE_POST_RACE\n"
);
128
mode =
RePostRace
();
129
if
(mode &
RM_NEXT_STEP
) {
130
ReInfo
->_reState =
RE_STATE_EVENT_SHUTDOWN
;
131
}
else
if
(mode &
RM_NEXT_RACE
) {
132
ReInfo
->_reState =
RE_STATE_PRE_RACE
;
133
}
134
break
;
135
136
case
RE_STATE_EVENT_SHUTDOWN
:
137
GfOut
(
"RaceEngine: state = RE_STATE_EVENT_SHUTDOWN\n"
);
138
mode =
ReEventShutdown
();
139
if
(mode &
RM_NEXT_STEP
) {
140
ReInfo
->_reState =
RE_STATE_SHUTDOWN
;
141
}
else
if
(mode &
RM_NEXT_RACE
) {
142
ReInfo
->_reState =
RE_STATE_EVENT_INIT
;
143
}
144
break
;
145
146
case
RE_STATE_SHUTDOWN
:
147
if
(
ReInfo
->_displayMode ==
RM_DISP_MODE_CONSOLE
) {
148
return
;
149
}
150
case
RE_STATE_ERROR
:
151
GfOut
(
"RaceEngine: state = RE_STATE_SHUTDOWN\n"
);
152
/* Back to race menu */
153
ReInfo
->_reState =
RE_STATE_CONFIG
;
154
mode =
RM_SYNC
;
155
break
;
156
157
case
RE_STATE_EXIT
:
158
GfScrShutdown
();
159
exit (0);
/* brutal isn't it ? */
160
break
;
161
}
162
163
}
while
((mode & (
RM_SYNC
|
RM_QUIT
)) ==
RM_SYNC
);
164
165
if
(mode &
RM_QUIT
) {
166
GfScrShutdown
();
167
exit (0);
/* brutal isn't it ? */
168
}
169
170
if
(mode &
RM_ACTIVGAMESCR
) {
171
GfuiScreenActivate
(
ReInfo
->_reGameScreen);
172
}
173
}
174
175
/* Change and Execute a New State */
176
void
177
ReStateApply
(
void
*vstate)
178
{
179
long
state = (long)vstate;
180
181
ReInfo
->_reState = (int)state;
182
ReStateManage
();
183
}
RM_END_RACE
#define RM_END_RACE
Definition:
raceman.h:45
RE_STATE_EXIT
#define RE_STATE_EXIT
Definition:
raceman.h:112
ReStateManage
void ReStateManage(void)
Definition:
racestate.cpp:56
mainMenu
static void * mainMenu
Definition:
racestate.cpp:43
ReRaceStop
int ReRaceStop(void)
Definition:
racemain.cpp:533
RE_STATE_RACE
#define RE_STATE_RACE
Definition:
raceman.h:105
RE_STATE_EVENT_SHUTDOWN
#define RE_STATE_EVENT_SHUTDOWN
Definition:
raceman.h:109
RM_NEXT_STEP
#define RM_NEXT_STEP
Definition:
raceman.h:48
RE_STATE_RACE_END
#define RE_STATE_RACE_END
Definition:
raceman.h:107
ReStateInit
void ReStateInit(void *prevMenu)
Definition:
racestate.cpp:47
RM_SYNC
#define RM_SYNC
Definition:
raceman.h:42
raceresults.h
RE_STATE_PRE_RACE
#define RE_STATE_PRE_RACE
Definition:
raceman.h:103
racescreens.h
racemanmenu.h
RmInfo::s
tSituation * s
Situation during race.
Definition:
raceman.h:221
racegl.h
tgfclient.h
The Gaming Framework API (client part).
RE_STATE_SHUTDOWN
#define RE_STATE_SHUTDOWN
Definition:
raceman.h:110
ReEventShutdown
int ReEventShutdown(void)
Definition:
racemain.cpp:617
RM_ACTIVGAMESCR
#define RM_ACTIVGAMESCR
Definition:
raceman.h:52
RM_NEXT_RACE
#define RM_NEXT_RACE
Definition:
raceman.h:49
RePostRace
int RePostRace(void)
Definition:
racemain.cpp:596
ReInfo
tRmInfo * ReInfo
Definition:
raceengine.cpp:45
ReRaceEnd
int ReRaceEnd(void)
Definition:
racemain.cpp:573
RE_STATE_POST_RACE
#define RE_STATE_POST_RACE
Definition:
raceman.h:108
RE_STATE_RACE_STOP
#define RE_STATE_RACE_STOP
Definition:
raceman.h:106
ReUpdate
int ReUpdate(void)
Definition:
raceengine.cpp:711
GfOut
#define GfOut
Definition:
tgf.h:373
RE_STATE_RACE_START
#define RE_STATE_RACE_START
Definition:
raceman.h:104
ReRaceEventInit
int ReRaceEventInit(void)
Definition:
racemain.cpp:107
RE_STATE_ERROR
#define RE_STATE_ERROR
Definition:
raceman.h:111
raceman.h
This is the race information structures.
RE_STATE_EVENT_INIT
#define RE_STATE_EVENT_INIT
Definition:
raceman.h:102
ReRaceStart
int ReRaceStart(void)
Definition:
racemain.cpp:368
GfuiScreenActivate
void GfuiScreenActivate(void *screen)
Activate a screen and make it current.
Definition:
gui.cpp:467
raceinit.h
RM_RACE_ENDED
#define RM_RACE_ENDED
Definition:
raceman.h:66
RM_QUIT
#define RM_QUIT
Definition:
raceman.h:53
RM_DISP_MODE_CONSOLE
#define RM_DISP_MODE_CONSOLE
Definition:
raceman.h:149
ReRacemanMenu
int ReRacemanMenu(void)
Definition:
racemanmenu.cpp:245
raceengine.h
RePreRace
int RePreRace(void)
Definition:
racemain.cpp:196
RE_STATE_CONFIG
#define RE_STATE_CONFIG
Definition:
raceman.h:101
racemain.h
GfScrShutdown
void GfScrShutdown(void)
Shutdown the screen.
Definition:
screen.cpp:442
ReStateApply
void ReStateApply(void *vstate)
Definition:
racestate.cpp:177
racestate.h
src
libs
raceengineclient
racestate.cpp
Generated by
1.8.14