hedgewars/uCollisions.pas
changeset 11532 bf86c6cb9341
parent 11077 1fb80cd8ba7b
child 11589 c453620cc6d6
equal deleted inserted replaced
11531:d1cf1ff6cabb 11532:bf86c6cb9341
    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;