equal
deleted
inserted
replaced
34 |
34 |
35 var VGCounter: LongWord; |
35 var VGCounter: LongWord; |
36 VisualGearLayers: array[0..6] of PVisualGear; |
36 VisualGearLayers: array[0..6] of PVisualGear; |
37 |
37 |
38 implementation |
38 implementation |
39 uses uCollisions, uFloat, uVariables, uConsts, uTextures, uVisualGearsHandlers; |
39 uses uCollisions, uFloat, uVariables, uConsts, uTextures, uVisualGearsHandlers, uScript; |
40 |
40 |
41 function AddVisualGear(X, Y: LongInt; Kind: TVisualGearType): PVisualGear; inline; |
41 function AddVisualGear(X, Y: LongInt; Kind: TVisualGearType): PVisualGear; inline; |
42 begin |
42 begin |
43 // adjust some visual gear types if underwater |
43 // adjust some visual gear types if underwater |
44 if CheckCoordInWater(X, Y) and ((Kind = vgtBeeTrace) or (Kind = vgtSmokeTrace) or (Kind = vgtEvilTrace)) then |
44 if CheckCoordInWater(X, Y) and ((Kind = vgtBeeTrace) or (Kind = vgtSmokeTrace) or (Kind = vgtEvilTrace)) then |
228 Scale:= 0.75; |
228 Scale:= 0.75; |
229 Timer:= 1; |
229 Timer:= 1; |
230 end; |
230 end; |
231 vgtDroplet: |
231 vgtDroplet: |
232 begin |
232 begin |
233 dx:= 0.001 * (random(180) - 90); |
233 // old dx & dy calcs |
234 dy:= -0.001 * (random(160) + 40); |
234 // dx:= 0.001 * (random(180) - 90); |
|
235 // dy:= -0.001 * (random(160) + 40); |
|
236 // => min speed ~ 0.098, max speed ~ 0.218, speed range ~ 0.120 |
|
237 // => min angle(4096) ~ 129, max angle ~ 1919, angle range ~ 1790 |
|
238 dx:= 0.001 * (98 + random(121)); // speed |
|
239 Frame:= 129 + random(1791); // angle |
|
240 dy:= -dx * hwFloat2Float(AngleSin(Frame)); |
|
241 // divide by 2 to create an eliptic shape |
|
242 dx:= dx * hwFloat2Float(AngleCos(Frame)) / 2; |
235 FrameTicks:= 250 + random(1751); |
243 FrameTicks:= 250 + random(1751); |
236 Frame:= random(3) |
244 Frame:= random(3) |
237 end; |
245 end; |
238 vgtBeeTrace: |
246 vgtBeeTrace: |
239 begin |
247 begin |
339 |
347 |
340 if State <> 0 then |
348 if State <> 0 then |
341 gear^.State:= State; |
349 gear^.State:= State; |
342 |
350 |
343 case Gear^.Kind of |
351 case Gear^.Kind of |
344 vgtFlake: if cFlattenFlakes then |
352 vgtFlake: |
345 gear^.Layer:= 0 |
353 if random(3) = 0 then |
346 else if random(3) = 0 then |
|
347 begin |
354 begin |
348 gear^.Scale:= 0.5; |
355 gear^.Scale:= 0.5; |
349 gear^.Layer:= 0 // 33% - far back |
356 gear^.Layer:= 0 // 33% - far back |
350 end |
357 end |
351 else if random(3) = 0 then |
358 else if random(3) = 0 then |
353 gear^.Scale:= 0.8; |
360 gear^.Scale:= 0.8; |
354 gear^.Layer:= 4 // 22% - mid-distance |
361 gear^.Layer:= 4 // 22% - mid-distance |
355 end |
362 end |
356 else if random(3) <> 0 then |
363 else if random(3) <> 0 then |
357 gear^.Layer:= 5 // 30% - just behind land |
364 gear^.Layer:= 5 // 30% - just behind land |
358 else if random(2) = 0 then |
365 else if (not cFlattenFlakes) and (random(2) = 0) then |
359 gear^.Layer:= 6 // 7% - just in front of land |
366 gear^.Layer:= 6 // 7% - just in front of land |
360 else |
367 else if not cFlattenFlakes then |
361 begin |
368 begin |
362 gear^.Scale:= 1.5; |
369 gear^.Scale:= 1.5; |
363 gear^.Layer:= 2; // 7% - close up |
370 gear^.Layer:= 2 // 7% - close up |
364 end; |
371 end |
|
372 else begin |
|
373 gear^.Layer:= 0; |
|
374 gear^.Scale:= 0.5 |
|
375 end; |
365 |
376 |
366 vgtCloud: if cFlattenClouds then gear^.Layer:= 5 |
377 vgtCloud: if cFlattenClouds then gear^.Layer:= 5 |
367 else if random(3) = 0 then |
378 else if random(3) = 0 then |
368 begin |
379 begin |
369 gear^.Scale:= 0.25; |
380 gear^.Scale:= 0.25; |
427 gear^.NextGear:= VisualGearLayers[gear^.Layer] |
438 gear^.NextGear:= VisualGearLayers[gear^.Layer] |
428 end; |
439 end; |
429 VisualGearLayers[gear^.Layer]:= gear; |
440 VisualGearLayers[gear^.Layer]:= gear; |
430 |
441 |
431 AddVisualGear:= gear; |
442 AddVisualGear:= gear; |
|
443 ScriptCall('onVisualGearAdd', gear^.uid); |
432 end; |
444 end; |
433 |
445 |
434 procedure DeleteVisualGear(Gear: PVisualGear); |
446 procedure DeleteVisualGear(Gear: PVisualGear); |
435 begin |
447 begin |
|
448 ScriptCall('onVisualGearDelete', Gear^.uid); |
436 FreeAndNilTexture(Gear^.Tex); |
449 FreeAndNilTexture(Gear^.Tex); |
437 |
450 |
438 if Gear^.NextGear <> nil then |
451 if Gear^.NextGear <> nil then |
439 Gear^.NextGear^.PrevGear:= Gear^.PrevGear; |
452 Gear^.NextGear^.PrevGear:= Gear^.PrevGear; |
440 if Gear^.PrevGear <> nil then |
453 if Gear^.PrevGear <> nil then |