42 Timer: Longword; |
42 Timer: Longword; |
43 Angle, dAngle: real; |
43 Angle, dAngle: real; |
44 Kind: TVisualGearType; |
44 Kind: TVisualGearType; |
45 doStep: TVGearStepProcedure; |
45 doStep: TVGearStepProcedure; |
46 Tex: PTexture; |
46 Tex: PTexture; |
|
47 Hedgehog: pointer; |
|
48 Text: shortstring |
47 end; |
49 end; |
48 |
50 |
49 function AddVisualGear(X, Y: LongInt; Kind: TVisualGearType): PVisualGear; |
51 function AddVisualGear(X, Y: LongInt; Kind: TVisualGearType): PVisualGear; |
50 procedure ProcessVisualGears(Steps: Longword); |
52 procedure ProcessVisualGears(Steps: Longword); |
51 procedure DrawVisualGears(Layer: LongWord); |
53 procedure DrawVisualGears(Layer: LongWord); |
238 Gear^.doStep:= @doStepTeamHealthSorterWork; |
240 Gear^.doStep:= @doStepTeamHealthSorterWork; |
239 currsorter:= Gear; |
241 currsorter:= Gear; |
240 //doStepTeamHealthSorterWork(Gear, Steps) |
242 //doStepTeamHealthSorterWork(Gear, Steps) |
241 end; |
243 end; |
242 |
244 |
|
245 procedure doStepSpeechBubbleWork(Gear: PVisualGear; Steps: Longword); |
|
246 var t: LongWord; |
|
247 begin |
|
248 for t:= 1 to Steps do |
|
249 begin |
|
250 dec(Gear^.Timer); |
|
251 |
|
252 if (PHedgehog(Gear^.Hedgehog)^.Gear <> nil) then |
|
253 begin |
|
254 Gear^.X:= PHedgehog(Gear^.Hedgehog)^.Gear^.X+int2hwFloat(Gear^.Tex^.w div 2 - Gear^.FrameTicks); |
|
255 Gear^.Y:= PHedgehog(Gear^.Hedgehog)^.Gear^.Y-int2hwFloat(16+Gear^.Tex^.h); |
|
256 end; |
|
257 |
|
258 if Gear^.Timer = 0 then |
|
259 begin |
|
260 CurrentHedgehog^.SpeechGear:= nil; |
|
261 DeleteVisualGear(Gear) |
|
262 end; |
|
263 end |
|
264 end; |
|
265 |
|
266 procedure doStepSpeechBubble(Gear: PVisualGear; Steps: Longword); |
|
267 begin |
|
268 if (CurrentHedgehog^.SpeechGear <> nil) then DeleteVisualGear(CurrentHedgehog^.SpeechGear); |
|
269 CurrentHedgehog^.SpeechGear:= Gear; |
|
270 |
|
271 Gear^.Timer:= max(Length(Gear^.Text)*150,3000); |
|
272 |
|
273 Gear^.Tex:= RenderSpeechBubbleTex(Gear^.Text, Gear^.FrameTicks, fnt16); |
|
274 |
|
275 case Gear^.FrameTicks of |
|
276 1: Gear^.FrameTicks:= SpritesData[sprSpeechTail].Width-28; |
|
277 2: Gear^.FrameTicks:= SpritesData[sprThoughtTail].Width-20; |
|
278 3: Gear^.FrameTicks:= SpritesData[sprShoutTail].Width-10; |
|
279 end; |
|
280 |
|
281 Gear^.doStep:= @doStepSpeechBubbleWork; |
|
282 |
|
283 Gear^.Y:= Gear^.Y - int2hwFloat(Gear^.Tex^.h) |
|
284 end; |
|
285 |
243 // ================================================================== |
286 // ================================================================== |
244 const doStepHandlers: array[TVisualGearType] of TVGearStepProcedure = |
287 const doStepHandlers: array[TVisualGearType] of TVGearStepProcedure = |
245 ( |
288 ( |
246 @doStepFlake, |
289 @doStepFlake, |
247 @doStepCloud, |
290 @doStepCloud, |
248 @doStepExpl, |
291 @doStepExpl, |
249 @doStepExpl, |
292 @doStepExpl, |
250 @doStepFire, |
293 @doStepFire, |
251 @doStepSmallDamage, |
294 @doStepSmallDamage, |
252 @doStepTeamHealthSorter |
295 @doStepTeamHealthSorter, |
|
296 @doStepSpeechBubble |
253 ); |
297 ); |
254 |
298 |
255 function AddVisualGear(X, Y: LongInt; Kind: TVisualGearType): PVisualGear; |
299 function AddVisualGear(X, Y: LongInt; Kind: TVisualGearType): PVisualGear; |
256 var Result: PVisualGear; |
300 var Result: PVisualGear; |
257 t: Longword; |
301 t: Longword; |
380 case Gear^.Kind of |
424 case Gear^.Kind of |
381 vgtExplPart: DrawSprite(sprExplPart, hwRound(Gear^.X) + WorldDx, hwRound(Gear^.Y) + WorldDy, 7 - Gear^.Frame); |
425 vgtExplPart: DrawSprite(sprExplPart, hwRound(Gear^.X) + WorldDx, hwRound(Gear^.Y) + WorldDy, 7 - Gear^.Frame); |
382 vgtExplPart2: DrawSprite(sprExplPart2, hwRound(Gear^.X) + WorldDx, hwRound(Gear^.Y) + WorldDy, 7 - Gear^.Frame); |
426 vgtExplPart2: DrawSprite(sprExplPart2, hwRound(Gear^.X) + WorldDx, hwRound(Gear^.Y) + WorldDy, 7 - Gear^.Frame); |
383 vgtFire: DrawSprite(sprFlame, hwRound(Gear^.X) + WorldDx, hwRound(Gear^.Y) + WorldDy, (RealTicks div 64 + Gear^.Frame) mod 8); |
427 vgtFire: DrawSprite(sprFlame, hwRound(Gear^.X) + WorldDx, hwRound(Gear^.Y) + WorldDy, (RealTicks div 64 + Gear^.Frame) mod 8); |
384 vgtSmallDamageTag: DrawCentered(hwRound(Gear^.X) + WorldDx, hwRound(Gear^.Y) + WorldDy, Gear^.Tex); |
428 vgtSmallDamageTag: DrawCentered(hwRound(Gear^.X) + WorldDx, hwRound(Gear^.Y) + WorldDy, Gear^.Tex); |
|
429 vgtSpeechBubble: if Gear^.Tex <> nil then DrawCentered(hwRound(Gear^.X) + WorldDx, hwRound(Gear^.Y) + WorldDy, Gear^.Tex); |
385 end; |
430 end; |
386 Gear:= Gear^.NextGear |
431 Gear:= Gear^.NextGear |
387 end |
432 end |
388 end |
433 end |
389 end; |
434 end; |