changeset 10017 | de822cd3df3a |
parent 9998 | 736015b847e3 |
child 10108 | c68cf030eded |
10015:4feced261c68 | 10017:de822cd3df3a |
---|---|
27 implementation |
27 implementation |
28 uses uConsts, uFloat, uCollisions, uVariables, uGearsList, uSound, uGearsUtils, |
28 uses uConsts, uFloat, uCollisions, uVariables, uGearsList, uSound, uGearsUtils, |
29 uAmmos, uDebug, uUtils, uGearsHedgehog, uGearsRender; |
29 uAmmos, uDebug, uUtils, uGearsHedgehog, uGearsRender; |
30 |
30 |
31 procedure doStepRopeAfterAttack(Gear: PGear); |
31 procedure doStepRopeAfterAttack(Gear: PGear); |
32 var |
32 var |
33 HHGear: PGear; |
33 HHGear: PGear; |
34 tX: hwFloat; |
34 tX: hwFloat; |
35 begin |
35 begin |
36 HHGear := Gear^.Hedgehog^.Gear; |
36 HHGear := Gear^.Hedgehog^.Gear; |
37 tX:= HHGear^.X; |
37 tX:= HHGear^.X; |
38 if WorldWrap(HHGear) and (WorldEdge = weWrap) and |
38 if WorldWrap(HHGear) and (WorldEdge = weWrap) and |
39 ((TestCollisionXwithGear(HHGear, 1) <> 0) or (TestCollisionXwithGear(HHGear, -1) <> 0)) then |
39 ((TestCollisionXwithGear(HHGear, 1) <> 0) or (TestCollisionXwithGear(HHGear, -1) <> 0)) then |
40 begin |
40 begin |
41 HHGear^.X:= tX; |
41 HHGear^.X:= tX; |
42 HHGear^.dX.isNegative:= hwRound(tX) > LongInt(leftX) + HHGear^.Radius * 2 |
42 HHGear^.dX.isNegative:= hwRound(tX) > LongInt(leftX) + HHGear^.Radius * 2 |
43 end; |
43 end; |
68 if HHGear^.dY.isNegative and (TestCollisionYwithGear(HHGear, -1) <> 0) then |
68 if HHGear^.dY.isNegative and (TestCollisionYwithGear(HHGear, -1) <> 0) then |
69 HHGear^.dY := _0; |
69 HHGear^.dY := _0; |
70 HHGear^.X := HHGear^.X + HHGear^.dX; |
70 HHGear^.X := HHGear^.X + HHGear^.dX; |
71 HHGear^.Y := HHGear^.Y + HHGear^.dY; |
71 HHGear^.Y := HHGear^.Y + HHGear^.dY; |
72 HHGear^.dY := HHGear^.dY + cGravity; |
72 HHGear^.dY := HHGear^.dY + cGravity; |
73 |
73 |
74 if (GameFlags and gfMoreWind) <> 0 then |
74 if (GameFlags and gfMoreWind) <> 0 then |
75 HHGear^.dX := HHGear^.dX + cWindSpeed / HHGear^.Density; |
75 HHGear^.dX := HHGear^.dX + cWindSpeed / HHGear^.Density; |
76 |
76 |
77 if (Gear^.Message and gmAttack) <> 0 then |
77 if (Gear^.Message and gmAttack) <> 0 then |
78 begin |
78 begin |
111 Gear^.Elasticity := _0; |
111 Gear^.Elasticity := _0; |
112 Gear^.doStep := @doStepRopeAfterAttack |
112 Gear^.doStep := @doStepRopeAfterAttack |
113 end; |
113 end; |
114 |
114 |
115 procedure doStepRopeWork(Gear: PGear); |
115 procedure doStepRopeWork(Gear: PGear); |
116 var |
116 var |
117 HHGear: PGear; |
117 HHGear: PGear; |
118 len, tx, ty, nx, ny, ropeDx, ropeDy, mdX, mdY: hwFloat; |
118 len, tx, ty, nx, ny, ropeDx, ropeDy, mdX, mdY: hwFloat; |
119 lx, ly, cd: LongInt; |
119 lx, ly, cd: LongInt; |
120 haveCollision, |
120 haveCollision, |
121 haveDivided: boolean; |
121 haveDivided: boolean; |
124 if GameTicks mod 4 <> 0 then exit; |
124 if GameTicks mod 4 <> 0 then exit; |
125 |
125 |
126 HHGear := Gear^.Hedgehog^.Gear; |
126 HHGear := Gear^.Hedgehog^.Gear; |
127 |
127 |
128 tX:= HHGear^.X; |
128 tX:= HHGear^.X; |
129 if WorldWrap(HHGear) and (WorldEdge = weWrap) and |
129 if WorldWrap(HHGear) and (WorldEdge = weWrap) and |
130 ((TestCollisionXwithGear(HHGear, 1) <> 0) or (TestCollisionXwithGear(HHGear, -1) <> 0)) then |
130 ((TestCollisionXwithGear(HHGear, 1) <> 0) or (TestCollisionXwithGear(HHGear, -1) <> 0)) then |
131 begin |
131 begin |
132 PlaySound(sndRopeRelease); |
132 PlaySound(sndRopeRelease); |
133 RopeDeleteMe(Gear, HHGear); |
133 RopeDeleteMe(Gear, HHGear); |
134 HHGear^.X:= tX; |
134 HHGear^.X:= tX; |
403 end; |
403 end; |
404 ApplyAmmoChanges(HHGear^.Hedgehog^) |
404 ApplyAmmoChanges(HHGear^.Hedgehog^) |
405 end; |
405 end; |
406 |
406 |
407 procedure doStepRopeAttach(Gear: PGear); |
407 procedure doStepRopeAttach(Gear: PGear); |
408 var |
408 var |
409 HHGear: PGear; |
409 HHGear: PGear; |
410 tx, ty, tt: hwFloat; |
410 tx, ty, tt: hwFloat; |
411 begin |
411 begin |
412 Gear^.X := Gear^.X - Gear^.dX; |
412 Gear^.X := Gear^.X - Gear^.dX; |
413 Gear^.Y := Gear^.Y - Gear^.dY; |
413 Gear^.Y := Gear^.Y - Gear^.dY; |