hedgewars/uGears.pas
changeset 3963 6090d2a2472e
parent 3957 25b0a62e08de
child 3976 abaf741a4e21
equal deleted inserted replaced
3962:e9ee2bd51e08 3963:6090d2a2472e
    60             ImpactSound: TSound; // first sound, others have to be after it in the sounds def.
    60             ImpactSound: TSound; // first sound, others have to be after it in the sounds def.
    61             nImpactSounds: Word; // count of ImpactSounds
    61             nImpactSounds: Word; // count of ImpactSounds
    62             SoundChannel: LongInt;
    62             SoundChannel: LongInt;
    63             PortalCounter: LongWord  // Hopefully temporary, but avoids infinite portal loops in a guaranteed fashion.
    63             PortalCounter: LongWord  // Hopefully temporary, but avoids infinite portal loops in a guaranteed fashion.
    64         end;
    64         end;
       
    65     TPGearArray = Array of PGear;
    65 
    66 
    66 var AllInactive: boolean;
    67 var AllInactive: boolean;
    67     PrvInactive: boolean;
    68     PrvInactive: boolean;
    68     CurAmmoGear: PGear;
    69     CurAmmoGear: PGear;
    69     GearsList: PGear;
    70     GearsList: PGear;
   118 procedure DeleteGear(Gear: PGear); forward;
   119 procedure DeleteGear(Gear: PGear); forward;
   119 procedure doMakeExplosion(X, Y, Radius: LongInt; Mask: LongWord); forward;
   120 procedure doMakeExplosion(X, Y, Radius: LongInt; Mask: LongWord); forward;
   120 procedure doMakeExplosion(X, Y, Radius: LongInt; Mask, Tint: LongWord); forward;
   121 procedure doMakeExplosion(X, Y, Radius: LongInt; Mask, Tint: LongWord); forward;
   121 procedure AmmoShove(Ammo: PGear; Damage, Power: LongInt); forward;
   122 procedure AmmoShove(Ammo: PGear; Damage, Power: LongInt); forward;
   122 //procedure AmmoFlameWork(Ammo: PGear); forward;
   123 //procedure AmmoFlameWork(Ammo: PGear); forward;
       
   124 function GearsNear(Gear: PGear; Kind: TGearType; r: LongInt): TPGearArray; forward;
   123 function  CheckGearNear(Gear: PGear; Kind: TGearType; rX, rY: LongInt): PGear; forward;
   125 function  CheckGearNear(Gear: PGear; Kind: TGearType; rX, rY: LongInt): PGear; forward;
   124 procedure SpawnBoxOfSmth; forward;
   126 procedure SpawnBoxOfSmth; forward;
   125 procedure AfterAttack; forward;
   127 procedure AfterAttack; forward;
   126 procedure HedgehogStep(Gear: PGear); forward;
   128 procedure HedgehogStep(Gear: PGear); forward;
   127 procedure doStepHedgehogMoving(Gear: PGear); forward;
   129 procedure doStepHedgehogMoving(Gear: PGear); forward;
   204             @doStepSineGunShot,
   206             @doStepSineGunShot,
   205             @doStepFlamethrower,
   207             @doStepFlamethrower,
   206             @doStepSMine,
   208             @doStepSMine,
   207             @doStepPoisonCloud,
   209             @doStepPoisonCloud,
   208             @doStepHammer,
   210             @doStepHammer,
   209             @doStepHammerHit
   211             @doStepHammerHit,
       
   212             @doStepResurrector
   210             );
   213             );
   211 
   214 
   212 procedure InsertGearToList(Gear: PGear);
   215 procedure InsertGearToList(Gear: PGear);
   213 var tmp, ptmp: PGear;
   216 var tmp, ptmp: PGear;
   214 begin
   217 begin
   531                 end;
   534                 end;
   532  gtPoisonCloud: begin
   535  gtPoisonCloud: begin
   533                 gear^.Timer:= 5000;
   536                 gear^.Timer:= 5000;
   534                 gear^.dY:= int2hwfloat((-4 + getRandom(8))) / 1000;
   537                 gear^.dY:= int2hwfloat((-4 + getRandom(8))) / 1000;
   535                 end;
   538                 end;
   536      end;
   539  gtResurrector: begin
       
   540                 gear^.Radius := 100;
       
   541                 end;
       
   542     end;
       
   543 
   537 InsertGearToList(gear);
   544 InsertGearToList(gear);
   538 AddGear:= gear;
   545 AddGear:= gear;
   539 
   546 
   540 ScriptCall('onGearAdd', gear^.uid);
   547 ScriptCall('onGearAdd', gear^.uid);
   541 end;
   548 end;
  1510         dec(Count)
  1517         dec(Count)
  1511         end
  1518         end
  1512     end
  1519     end
  1513 end;
  1520 end;
  1514 
  1521 
       
  1522 function GearsNear(Gear: PGear; Kind: TGearType; r: LongInt): TPGearArray;
       
  1523 var
       
  1524     t: PGear;
       
  1525 begin
       
  1526     GearsNear := nil;
       
  1527     t := GearsList;
       
  1528     while t <> nil do begin
       
  1529         if (t <> Gear) and (t^.Kind = Kind) then begin
       
  1530             if (Gear^.X - t^.X)*(Gear^.X - t^.X) + (Gear^.Y -
       
  1531                    t^.Y)*(Gear^.Y-t^.Y) < int2hwFloat(r)*int2hwFloat(r) then
       
  1532             begin
       
  1533                 SetLength(GearsNear, Length(GearsNear)+1);
       
  1534                 GearsNear[High(GearsNear)] := t;
       
  1535             end;
       
  1536         end;
       
  1537         t := t^.NextGear;
       
  1538     end;
       
  1539 end;
       
  1540 
  1515 function CheckGearNear(Gear: PGear; Kind: TGearType; rX, rY: LongInt): PGear;
  1541 function CheckGearNear(Gear: PGear; Kind: TGearType; rX, rY: LongInt): PGear;
  1516 var t: PGear;
  1542 var t: PGear;
  1517 begin
  1543 begin
  1518 t:= GearsList;
  1544 t:= GearsList;
  1519 rX:= sqr(rX);
  1545 rX:= sqr(rX);