equal
deleted
inserted
replaced
60 function CalcSlopeBelowGear(Gear: PGear): hwFloat; |
60 function CalcSlopeBelowGear(Gear: PGear): hwFloat; |
61 function CalcSlopeNearGear(Gear: PGear; dirX, dirY: LongInt): hwFloat; |
61 function CalcSlopeNearGear(Gear: PGear; dirX, dirY: LongInt): hwFloat; |
62 function CalcSlopeTangent(Gear: PGear; collisionX, collisionY: LongInt; var outDeltaX, outDeltaY: LongInt; TestWord: LongWord): boolean; |
62 function CalcSlopeTangent(Gear: PGear; collisionX, collisionY: LongInt; var outDeltaX, outDeltaY: LongInt; TestWord: LongWord): boolean; |
63 |
63 |
64 implementation |
64 implementation |
65 uses uConsts, uLandGraphics, uVariables, uDebug; |
65 uses uConsts, uLandGraphics, uVariables; |
66 |
66 |
67 type TCollisionEntry = record |
67 type TCollisionEntry = record |
68 X, Y, Radius: LongInt; |
68 X, Y, Radius: LongInt; |
69 cGear: PGear; |
69 cGear: PGear; |
70 end; |
70 end; |
74 cinfos: array[0..MAXRECTSINDEX] of TCollisionEntry; |
74 cinfos: array[0..MAXRECTSINDEX] of TCollisionEntry; |
75 ga: TGearArray; |
75 ga: TGearArray; |
76 |
76 |
77 procedure AddCI(Gear: PGear); |
77 procedure AddCI(Gear: PGear); |
78 begin |
78 begin |
79 if (Gear^.CollisionIndex >= 0) or |
79 if (Gear^.CollisionIndex >= 0) or (Count > MAXRECTSINDEX) or |
80 ((Count > MAXRECTSINDEX-200) and ((Gear^.Kind = gtMine) or (Gear^.Kind = gtSMine) or (Gear^.Kind = gtKnife))) then |
80 ((Count > MAXRECTSINDEX-200) and ((Gear^.Kind = gtMine) or (Gear^.Kind = gtSMine) or (Gear^.Kind = gtKnife))) then |
81 exit; |
81 exit; |
82 TryDo(Count <= MAXRECTSINDEX, 'Collision rects array overflow', true); |
82 |
83 with cinfos[Count] do |
83 with cinfos[Count] do |
84 begin |
84 begin |
85 X:= hwRound(Gear^.X); |
85 X:= hwRound(Gear^.X); |
86 Y:= hwRound(Gear^.Y); |
86 Y:= hwRound(Gear^.Y); |
87 Radius:= Gear^.Radius; |
87 Radius:= Gear^.Radius; |