25
25
26
26
namespace Unity {
27
27
28
- SpritePlayer::SpritePlayer (const char *filename, Object *par, UnityEngine *vm) : parent (par), _vm(vm) {
29
- spriteStream = vm->data .openFile (filename);
30
- sprite = new Sprite (spriteStream );
31
- current_entry = ~0 ;
32
- current_sprite = NULL ;
33
- current_speechsprite = NULL ;
34
- current_palette = NULL ;
35
- wait_target = 0 ;
36
-
37
- normal .xpos = normal .ypos = 0 ;
38
- normal .xadjust = normal .yadjust = 0 ;
39
- speech .xpos = speech .ypos = 0 ;
40
- speech .xadjust = speech .yadjust = 0 ;
41
-
42
- was_speech = false ;
43
- was_marked = false ;
28
+ SpritePlayer::SpritePlayer (const char *filename, Object *par, UnityEngine *vm) : _parent (par), _vm(vm) {
29
+ _spriteStream = vm->data .openFile (filename);
30
+ _sprite = new Sprite (_spriteStream );
31
+ _currentEntry = ~0 ;
32
+ _currentSprite = NULL ;
33
+ _currentSpeechSprite = NULL ;
34
+ _currentPalette = NULL ;
35
+ _waitTarget = 0 ;
36
+
37
+ _normal .xpos = _normal .ypos = 0 ;
38
+ _normal .xadjust = _normal .yadjust = 0 ;
39
+ _speech .xpos = _speech .ypos = 0 ;
40
+ _speech .xadjust = _speech .yadjust = 0 ;
41
+
42
+ _wasSpeech = false ;
43
+ _wasMarked = false ;
44
44
}
45
45
46
46
SpritePlayer::~SpritePlayer () {
47
- delete sprite ;
48
- delete spriteStream ;
47
+ delete _sprite ;
48
+ delete _spriteStream ;
49
49
}
50
50
51
51
void SpritePlayer::resetState () {
52
- normal .xadjust = normal .yadjust = 0 ;
53
- speech .xadjust = speech .yadjust = 0 ;
52
+ _normal .xadjust = _normal .yadjust = 0 ;
53
+ _speech .xadjust = _speech .yadjust = 0 ;
54
54
55
- wait_target = 0 ;
55
+ _waitTarget = 0 ;
56
56
}
57
57
58
58
void SpritePlayer::startAnim (unsigned int a) {
59
- if (a >= sprite ->getNumAnims ()) {
60
- error (" animation %d is too high (only %d animation(s))" , a, sprite ->getNumAnims ());
59
+ if (a >= _sprite ->getNumAnims ()) {
60
+ error (" animation %d is too high (only %d animation(s))" , a, _sprite ->getNumAnims ());
61
61
}
62
62
63
- current_entry = sprite ->getIndexFor (a);
64
- assert (current_entry != (unsigned int )~0 );
63
+ _currentEntry = _sprite ->getIndexFor (a);
64
+ assert (_currentEntry != (unsigned int )~0 );
65
65
66
66
resetState ();
67
67
}
68
68
69
69
unsigned int SpritePlayer::getCurrentWidth () {
70
- assert (current_sprite );
71
- return current_sprite ->width ;
70
+ assert (_currentSprite );
71
+ return _currentSprite ->width ;
72
72
}
73
73
74
74
unsigned int SpritePlayer::getCurrentHeight () {
75
- assert (current_sprite );
76
- return current_sprite ->height ;
75
+ assert (_currentSprite );
76
+ return _currentSprite ->height ;
77
77
}
78
78
79
79
byte *SpritePlayer::getCurrentData () {
80
- assert (current_sprite );
81
- return current_sprite ->data ;
80
+ assert (_currentSprite );
81
+ return _currentSprite ->data ;
82
82
}
83
83
84
84
bool SpritePlayer::speaking () {
85
- return current_speechsprite != NULL ;
85
+ return _currentSpeechSprite != NULL ;
86
86
}
87
87
88
88
unsigned int SpritePlayer::getSpeechWidth () {
89
- assert (current_speechsprite );
90
- return current_speechsprite ->width ;
89
+ assert (_currentSpeechSprite );
90
+ return _currentSpeechSprite ->width ;
91
91
}
92
92
93
93
unsigned int SpritePlayer::getSpeechHeight () {
94
- assert (current_speechsprite );
95
- return current_speechsprite ->height ;
94
+ assert (_currentSpeechSprite );
95
+ return _currentSpeechSprite ->height ;
96
96
}
97
97
98
98
byte *SpritePlayer::getSpeechData () {
99
- assert (current_speechsprite );
100
- return current_speechsprite ->data ;
99
+ assert (_currentSpeechSprite );
100
+ return _currentSpeechSprite ->data ;
101
101
}
102
102
103
103
byte *SpritePlayer::getPalette () {
104
- if (!current_palette) return NULL ;
104
+ if (!_currentPalette)
105
+ return NULL ;
105
106
106
- byte *palette = current_palette ->palette ;
107
- current_palette = NULL ;
107
+ byte *palette = _currentPalette ->palette ;
108
+ _currentPalette = NULL ;
108
109
return palette;
109
110
}
110
111
111
112
bool SpritePlayer::playing () {
112
- SpriteEntry *e = sprite ->getEntry (current_entry );
113
+ SpriteEntry *e = _sprite ->getEntry (_currentEntry );
113
114
assert (e);
114
115
return !(e->type == se_Pause || e->type == se_Exit);
115
116
}
116
117
117
118
void SpritePlayer::update () {
118
- unsigned int old_entry = ~0 ;
119
+ unsigned int oldEntry = ~0 ;
119
120
while (true ) {
120
- SpriteEntry *e = sprite ->getEntry (current_entry );
121
+ SpriteEntry *e = _sprite ->getEntry (_currentEntry );
121
122
assert (e);
122
123
switch (e->type ) {
123
124
case se_None:
124
- current_entry ++;
125
+ _currentEntry ++;
125
126
break ;
126
127
127
128
case se_Sprite:
128
- current_sprite = (SpriteEntrySprite *)e;
129
+ _currentSprite = (SpriteEntrySprite *)e;
129
130
// XXX: don't understand how this works either
130
- was_speech = false ;
131
- current_speechsprite = NULL ;
131
+ _wasSpeech = false ;
132
+ _currentSpeechSprite = NULL ;
132
133
133
- current_entry ++;
134
+ _currentEntry ++;
134
135
135
- e = sprite->getEntry (current_entry);
136
- if (e->type == se_Sprite || e->type == se_SpeechSprite) return ;
136
+ e = _sprite->getEntry (_currentEntry);
137
+ if (e->type == se_Sprite || e->type == se_SpeechSprite)
138
+ return ;
137
139
break ;
138
140
139
141
case se_SpeechSprite:
140
- if (!was_marked ) {
142
+ if (!_wasMarked ) {
141
143
error (" no marked data during sprite playback" );
142
144
}
143
145
144
- current_speechsprite = (SpriteEntrySprite *)e;
146
+ _currentSpeechSprite = (SpriteEntrySprite *)e;
145
147
// XXX: don't understand how this works :(
146
- if (!was_speech ) {
147
- speech = marked ;
148
+ if (!_wasSpeech ) {
149
+ _speech = _marked ;
148
150
}
149
- was_speech = true ;
151
+ _wasSpeech = true ;
150
152
151
- current_entry++;
152
- e = sprite->getEntry (current_entry);
153
- if (e->type == se_Sprite || e->type == se_SpeechSprite) return ;
153
+ _currentEntry++;
154
+ e = _sprite->getEntry (_currentEntry);
155
+ if (e->type == se_Sprite || e->type == se_SpeechSprite)
156
+ return ;
154
157
break ;
155
158
156
159
case se_Palette:
157
- current_palette = (SpriteEntryPalette *)e;
158
- current_entry ++;
160
+ _currentPalette = (SpriteEntryPalette *)e;
161
+ _currentEntry ++;
159
162
break ;
160
163
161
164
case se_Position:
162
165
{
163
166
SpriteEntryPosition *p = (SpriteEntryPosition *)e;
164
- if (was_speech ) {
165
- speech .xpos = p->newx ;
166
- speech .ypos = p->newy ;
167
+ if (_wasSpeech ) {
168
+ _speech .xpos = p->newx ;
169
+ _speech .ypos = p->newy ;
167
170
} else {
168
- normal .xpos = p->newx ;
169
- normal .ypos = p->newy ;
171
+ _normal .xpos = p->newx ;
172
+ _normal .ypos = p->newy ;
170
173
}
171
174
}
172
- current_entry ++;
175
+ _currentEntry ++;
173
176
break ;
174
177
175
178
case se_RelPos:
176
179
{
177
180
SpriteEntryRelPos *p = (SpriteEntryRelPos *)e;
178
- if (was_speech ) {
179
- speech .xadjust = p->adjustx ;
180
- speech .yadjust = p->adjusty ;
181
+ if (_wasSpeech ) {
182
+ _speech .xadjust = p->adjustx ;
183
+ _speech .yadjust = p->adjusty ;
181
184
} else {
182
- normal .xadjust = p->adjustx ;
183
- normal .yadjust = p->adjusty ;
185
+ _normal .xadjust = p->adjustx ;
186
+ _normal .yadjust = p->adjusty ;
184
187
}
185
188
}
186
- current_entry ++;
189
+ _currentEntry ++;
187
190
break ;
188
191
189
192
case se_MouthPos:
@@ -192,7 +195,7 @@ void SpritePlayer::update() {
192
195
// TODO: okay, this isn't MouthPos :-) what is it?
193
196
// set on characters, drones, cable, welds..
194
197
}
195
- current_entry ++;
198
+ _currentEntry ++;
196
199
break ;
197
200
198
201
case se_Pause:
@@ -201,79 +204,79 @@ void SpritePlayer::update() {
201
204
202
205
case se_Mark:
203
206
// XXX: do something here
204
- was_marked = true ;
205
- marked = normal ;
206
- current_entry ++;
207
+ _wasMarked = true ;
208
+ _marked = _normal ;
209
+ _currentEntry ++;
207
210
break ;
208
211
209
212
case se_Mask:
210
213
warning (" sprite mask mode not implemented" );
211
- current_entry ++;
214
+ _currentEntry ++;
212
215
break ;
213
216
214
217
case se_Static:
215
218
warning (" sprite static mode not implemented" );
216
- current_entry ++;
219
+ _currentEntry ++;
217
220
break ;
218
221
219
222
case se_RandomWait:
220
- if (!wait_target ) {
223
+ if (!_waitTarget ) {
221
224
unsigned int wait = _vm->_rnd ->getRandomNumberRng (0 ,
222
225
((SpriteEntryRandomWait *)e)->rand_amt );
223
226
// TODO: is /6 correct? see below
224
- wait_target = g_system->getMillis () + ((SpriteEntryRandomWait *)e)->base /6 + wait/6 ;
227
+ _waitTarget = g_system->getMillis () + ((SpriteEntryRandomWait *)e)->base /6 + wait/6 ;
225
228
return ;
226
229
}
227
230
// fall through
228
231
case se_Wait:
229
- if (!wait_target ) {
232
+ if (!_waitTarget ) {
230
233
// TODO: is /6 correct? just a guess, so almost certainly not
231
234
// example values are 388, 777, 4777, 288, 666, 3188, 2188, 700, 200000, 1088, 272..
232
- wait_target = g_system->getMillis () + ((SpriteEntryWait *)e)->wait /6 ;
235
+ _waitTarget = g_system->getMillis () + ((SpriteEntryWait *)e)->wait /6 ;
233
236
return ;
234
237
}
235
- if (wait_target < g_system->getMillis ()) {
236
- wait_target = 0 ;
237
- current_entry ++;
238
+ if (_waitTarget < g_system->getMillis ()) {
239
+ _waitTarget = 0 ;
240
+ _currentEntry ++;
238
241
continue ;
239
242
}
240
243
return ;
241
244
242
245
case se_Jump:
243
- current_entry = sprite ->getIndexFor (((SpriteEntryJump *)e)->target );
244
- assert (current_entry != (unsigned int )~0 );
245
- if (old_entry == current_entry ) {
246
+ _currentEntry = _sprite ->getIndexFor (((SpriteEntryJump *)e)->target );
247
+ assert (_currentEntry != (unsigned int )~0 );
248
+ if (oldEntry == _currentEntry ) {
246
249
// XXX: work out why this happens: missing handling?
247
250
error (" sprite file in infinite loop" );
248
251
}
249
- old_entry = current_entry ;
252
+ oldEntry = _currentEntry ;
250
253
resetState ();
251
254
break ;
252
255
253
256
case se_Audio:
254
257
_vm->_snd ->playAudioBuffer (((SpriteEntryAudio *)e)->length ,
255
258
((SpriteEntryAudio *)e)->data );
256
- current_entry ++;
259
+ _currentEntry ++;
257
260
break ;
258
261
259
262
case se_WaitForSound:
260
263
warning (" sprite waiting for sound not implemented" );
261
- current_entry ++;
264
+ _currentEntry ++;
262
265
break ;
263
266
264
267
case se_Silent:
265
268
warning (" sprite silencing not implemented" );
266
- current_entry ++;
269
+ _currentEntry ++;
267
270
break ;
268
271
269
272
case se_StateSet:
270
273
warning (" sprite state setting not implemented" );
271
- current_entry ++;
274
+ _currentEntry ++;
272
275
break ;
273
276
274
277
case se_SetFlag:
275
278
warning (" flag setting not implemented" );
276
- current_entry ++;
279
+ _currentEntry ++;
277
280
break ;
278
281
279
282
default :
0 commit comments