TORCS
1.3.10
The Open Racing Car Simulator
Loading...
Searching...
No Matches
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-2026 by Eric Espie, Bernhard Wymann
6
email : berniw@bluewin.ch
7
8
***************************************************************************/
9
10
/***************************************************************************
11
* *
12
* This program is free software; you can redistribute it and/or modify *
13
* it under the terms of the GNU General Public License as published by *
14
* the Free Software Foundation; either version 2 of the License, or *
15
* (at your option) any later version. *
16
* *
17
***************************************************************************/
18
21
22
/* The Race Engine State Automaton */
23
24
#include <stdlib.h>
25
#include <stdio.h>
26
#include <tgfclient.h>
27
#include <raceman.h>
28
#include <racescreens.h>
29
30
#include "
racemain.h
"
31
#include "
raceinit.h
"
32
#include "
raceengine.h
"
33
#include "
racegl.h
"
34
#include "
raceresults.h
"
35
#include "
racemanmenu.h
"
36
37
#include "
racestate.h
"
38
39
static
void
*
mainMenu
;
40
41
/* State Automaton Init */
42
void
43
ReStateInit
(
void
*prevMenu)
44
{
45
mainMenu
= prevMenu;
46
}
47
48
49
/* State Automaton Management */
50
/* Called when a race menu is entered */
51
void
52
ReStateManage
(
void
)
53
{
54
int
mode =
RM_SYNC
|
RM_NEXT_STEP
;
55
56
do
{
57
switch
(
ReInfo
->_reState) {
58
case
RE_STATE_CONFIG
:
59
GfOut
(
"RaceEngine: state = RE_STATE_CONFIG\n"
);
60
/* Display the race specific menu */
61
mode =
ReRacemanMenu
();
62
if
(mode &
RM_NEXT_STEP
) {
63
ReInfo
->_reState =
RE_STATE_EVENT_INIT
;
64
}
65
break
;
66
67
case
RE_STATE_EVENT_INIT
:
68
GfOut
(
"RaceEngine: state = RE_STATE_EVENT_INIT\n"
);
69
/* Load the event description (track and drivers list) */
70
mode =
ReRaceEventInit
();
71
if
(mode &
RM_NEXT_STEP
) {
72
ReInfo
->_reState =
RE_STATE_PRE_RACE
;
73
}
74
break
;
75
76
case
RE_STATE_PRE_RACE
:
77
GfOut
(
"RaceEngine: state = RE_STATE_PRE_RACE\n"
);
78
mode =
RePreRace
();
79
if
(mode &
RM_NEXT_STEP
) {
80
ReInfo
->_reState =
RE_STATE_RACE_START
;
81
}
82
break
;
83
84
case
RE_STATE_RACE_START
:
85
GfOut
(
"RaceEngine: state = RE_STATE_RACE_START\n"
);
86
mode =
ReRaceStart
();
87
if
(mode &
RM_NEXT_STEP
) {
88
ReInfo
->_reState =
RE_STATE_RACE
;
89
}
90
break
;
91
92
case
RE_STATE_RACE
:
93
mode =
ReUpdate
();
94
if
(
ReInfo
->s->_raceState ==
RM_RACE_ENDED
) {
95
/* race finished */
96
ReInfo
->_reState =
RE_STATE_RACE_END
;
97
}
else
if
(mode &
RM_END_RACE
) {
98
/* interrupt by player */
99
ReInfo
->_reState =
RE_STATE_RACE_STOP
;
100
}
101
break
;
102
103
case
RE_STATE_RACE_STOP
:
104
GfOut
(
"RaceEngine: state = RE_STATE_RACE_STOP\n"
);
105
/* Interrupted by player */
106
mode =
ReRaceStop
();
107
if
(mode &
RM_NEXT_STEP
) {
108
ReInfo
->_reState =
RE_STATE_RACE_END
;
109
}
110
break
;
111
112
case
RE_STATE_RACE_END
:
113
GfOut
(
"RaceEngine: state = RE_STATE_RACE_END\n"
);
114
mode =
ReRaceEnd
();
115
if
(mode &
RM_NEXT_STEP
) {
116
ReInfo
->_reState =
RE_STATE_POST_RACE
;
117
}
else
if
(mode &
RM_NEXT_RACE
) {
118
ReInfo
->_reState =
RE_STATE_RACE_START
;
119
}
120
break
;
121
122
case
RE_STATE_POST_RACE
:
123
GfOut
(
"RaceEngine: state = RE_STATE_POST_RACE\n"
);
124
mode =
RePostRace
();
125
if
(mode &
RM_NEXT_STEP
) {
126
ReInfo
->_reState =
RE_STATE_EVENT_SHUTDOWN
;
127
}
else
if
(mode &
RM_NEXT_RACE
) {
128
ReInfo
->_reState =
RE_STATE_PRE_RACE
;
129
}
130
break
;
131
132
case
RE_STATE_EVENT_SHUTDOWN
:
133
GfOut
(
"RaceEngine: state = RE_STATE_EVENT_SHUTDOWN\n"
);
134
mode =
ReEventShutdown
();
135
if
(mode &
RM_NEXT_STEP
) {
136
ReInfo
->_reState =
RE_STATE_SHUTDOWN
;
137
}
else
if
(mode &
RM_NEXT_RACE
) {
138
ReInfo
->_reState =
RE_STATE_EVENT_INIT
;
139
}
140
break
;
141
142
case
RE_STATE_SHUTDOWN
:
143
if
(
ReInfo
->_displayMode ==
RM_DISP_MODE_CONSOLE
) {
144
return
;
145
}
146
case
RE_STATE_ERROR
:
147
GfOut
(
"RaceEngine: state = RE_STATE_SHUTDOWN\n"
);
148
/* Back to race menu */
149
ReInfo
->_reState =
RE_STATE_CONFIG
;
150
mode =
RM_SYNC
;
151
break
;
152
153
case
RE_STATE_EXIT
:
154
GfScrShutdown
();
155
exit (0);
/* brutal isn't it ? */
156
break
;
157
}
158
159
}
while
((mode & (
RM_SYNC
|
RM_QUIT
)) ==
RM_SYNC
);
160
161
if
(mode &
RM_QUIT
) {
162
GfScrShutdown
();
163
exit (0);
/* brutal isn't it ? */
164
}
165
166
if
(mode &
RM_ACTIVGAMESCR
) {
167
GfuiScreenActivate
(
ReInfo
->_reGameScreen);
168
}
169
}
170
171
/* Change and Execute a New State */
172
void
173
ReStateApply
(
int
state)
174
{
175
ReInfo
->_reState = (int)state;
176
ReStateManage
();
177
}
GfuiScreenActivate
void GfuiScreenActivate(void *screen)
Activate a screen and make it current.
Definition
gui.cpp:508
GfScrShutdown
void GfScrShutdown(void)
Shutdown the screen.
Definition
screen.cpp:501
ReUpdate
int ReUpdate(void)
Definition
raceengine.cpp:745
ReInfo
tRmInfo * ReInfo
Definition
raceengine.cpp:42
raceengine.h
racegl.h
raceinit.h
ReRaceStart
int ReRaceStart(void)
Definition
racemain.cpp:408
RePostRace
int RePostRace(void)
Definition
racemain.cpp:636
ReRaceEventInit
int ReRaceEventInit(void)
Initialize the current race event before pre-race setup.
Definition
racemain.cpp:128
ReRaceEnd
int ReRaceEnd(void)
Definition
racemain.cpp:613
ReEventShutdown
int ReEventShutdown(void)
Definition
racemain.cpp:657
RePreRace
int RePreRace(void)
Definition
racemain.cpp:232
ReRaceStop
int ReRaceStop(void)
Definition
racemain.cpp:573
racemain.h
RM_ACTIVGAMESCR
#define RM_ACTIVGAMESCR
Definition
raceman.h:50
RE_STATE_RACE_END
#define RE_STATE_RACE_END
Definition
raceman.h:107
RE_STATE_SHUTDOWN
#define RE_STATE_SHUTDOWN
Definition
raceman.h:110
RM_END_RACE
#define RM_END_RACE
Definition
raceman.h:43
RE_STATE_EXIT
#define RE_STATE_EXIT
Definition
raceman.h:112
RE_STATE_PRE_RACE
#define RE_STATE_PRE_RACE
Definition
raceman.h:103
RM_NEXT_RACE
#define RM_NEXT_RACE
Definition
raceman.h:47
RM_NEXT_STEP
#define RM_NEXT_STEP
Definition
raceman.h:46
RE_STATE_POST_RACE
#define RE_STATE_POST_RACE
Definition
raceman.h:108
RE_STATE_RACE_START
#define RE_STATE_RACE_START
Definition
raceman.h:104
RE_STATE_RACE
#define RE_STATE_RACE
Definition
raceman.h:105
RE_STATE_RACE_STOP
#define RE_STATE_RACE_STOP
Definition
raceman.h:106
RE_STATE_EVENT_SHUTDOWN
#define RE_STATE_EVENT_SHUTDOWN
Definition
raceman.h:109
RE_STATE_EVENT_INIT
#define RE_STATE_EVENT_INIT
Definition
raceman.h:102
RE_STATE_ERROR
#define RE_STATE_ERROR
Definition
raceman.h:111
RM_QUIT
#define RM_QUIT
Definition
raceman.h:51
RM_DISP_MODE_CONSOLE
#define RM_DISP_MODE_CONSOLE
Definition
raceman.h:150
RM_SYNC
#define RM_SYNC
Definition
raceman.h:40
RE_STATE_CONFIG
#define RE_STATE_CONFIG
Definition
raceman.h:101
RM_RACE_ENDED
#define RM_RACE_ENDED
Definition
raceman.h:65
ReRacemanMenu
int ReRacemanMenu(void)
Definition
racemanmenu.cpp:275
racemanmenu.h
raceresults.h
ReStateManage
void ReStateManage(void)
Definition
racestate.cpp:52
ReStateApply
void ReStateApply(int state)
Definition
racestate.cpp:173
ReStateInit
void ReStateInit(void *prevMenu)
Definition
racestate.cpp:43
mainMenu
static void * mainMenu
Definition
racestate.cpp:39
racestate.h
GfOut
#define GfOut
Definition
tgf.h:372
C:
Users
berni
Development
torcs_git
torcs-code
torcs
torcs
src
libs
raceengineclient
racestate.cpp
Generated by
1.14.0