# HG changeset patch # User unc0rr # Date 1189861304 0 # Node ID 5ee863f2f5688fd8b90e3c195425c7b009c2adc6 # Parent 221ffeb92f3010ce491c82f4d309fb4d533cdd1b Triggers PoC: targets are spawned right after the previous damaged diff -r 221ffeb92f30 -r 5ee863f2f568 QTfrontend/game.cpp --- a/QTfrontend/game.cpp Sat Sep 15 10:27:34 2007 +0000 +++ b/QTfrontend/game.cpp Sat Sep 15 13:01:44 2007 +0000 @@ -139,7 +139,11 @@ HWProto::addStringListToBuffer(teamscfg, team2.TeamGameConfig(100)); - HWProto::addStringToBuffer(teamscfg, "eaddtrig 2147483649"); +// HWProto::addStringToBuffer(teamscfg, "eaddtrig 2147483649"); + HWProto::addStringToBuffer(teamscfg, "eaddtrig s2147483649 1 1 33 1100 -100 1"); + HWProto::addStringToBuffer(teamscfg, "eaddtrig s1 1 1 33 1200 -100 2"); + HWProto::addStringToBuffer(teamscfg, "eaddtrig s2 1 1 33 1300 -100 3"); + HWProto::addStringToBuffer(teamscfg, "eaddtrig s3 1 1 33 1400 -100 0"); RawSendIPC(teamscfg); } diff -r 221ffeb92f30 -r 5ee863f2f568 hedgewars/CCHandlers.inc --- a/hedgewars/CCHandlers.inc Sat Sep 15 10:27:34 2007 +0000 +++ b/hedgewars/CCHandlers.inc Sat Sep 15 13:01:44 2007 +0000 @@ -466,8 +466,30 @@ end; procedure chAddTrigger(var s: shortstring); -var t: LongWord; +var ttype, gt, geartrig, Ticks, Lives: LongWord; + X, Y: LongInt; + c: char; + tmp: shortstring; begin -val(s, t); -AddTrigger(t, 1, 2) +c:= s[1]; +Delete(s, 1, 1); +case c of + 's': begin // s12345 1 1 33 0 0 123456 + SplitBySpace(s, tmp); + val(s, ttype); + SplitBySpace(tmp, s); + val(tmp, Ticks); + SplitBySpace(s, tmp); + val(s, Lives); + SplitBySpace(tmp, s); + val(tmp, gt); + SplitBySpace(s, tmp); + val(s, X); + SplitBySpace(tmp, s); + val(tmp, Y); + SplitBySpace(s, tmp); + val(s, geartrig); + AddTriggerSpawner(ttype, Ticks, Lives, X, Y, TGearType(gt), geartrig); + end; + end end; diff -r 221ffeb92f30 -r 5ee863f2f568 hedgewars/uGears.pas --- a/hedgewars/uGears.pas Sat Sep 15 10:27:34 2007 +0000 +++ b/hedgewars/uGears.pas Sat Sep 15 13:01:44 2007 +0000 @@ -49,6 +49,7 @@ Surf: PSDL_Surface; Z: Longword; IntersectGear: PGear; + TriggerId: Longword; end; function AddGear(X, Y: LongInt; Kind: TGearType; State: Longword; dX, dY: hwFloat; Timer: LongWord): PGear; @@ -332,6 +333,7 @@ RecountTeamHealth(team); end; {$IFDEF DEBUGFILE}AddFileLog('DeleteGear');{$ENDIF} +if Gear^.TriggerId <> 0 then TickTrigger(Gear^.TriggerId); if CurAmmoGear = Gear then CurAmmoGear:= nil; if FollowGear = Gear then FollowGear:= nil; RemoveGearFromList(Gear); diff -r 221ffeb92f30 -r 5ee863f2f568 hedgewars/uTriggers.pas --- a/hedgewars/uTriggers.pas Sat Sep 15 10:27:34 2007 +0000 +++ b/hedgewars/uTriggers.pas Sat Sep 15 13:01:44 2007 +0000 @@ -23,7 +23,9 @@ {$INCLUDE options.inc} const trigTurns = $80000001; -procedure AddTrigger(id, Ticks, Lives: Longword); +type TTrigAction = (taSpawnGear); + +procedure AddTriggerSpawner(id, Ticks, Lives: Longword; X, Y: LongInt; GearType: TGearType; GearTriggerId: Longword); procedure TickTrigger(id: Longword); implementation @@ -34,29 +36,41 @@ Ticks: Longword; Lives: Longword; TicksPerLife: LongWord; + Action: TTrigAction; + X, Y: LongInt; + SpawnGearType: TGearType; + SpawnGearTriggerId: Longword; Next: PTrigger; end; var TriggerList: PTrigger = nil; -procedure AddTrigger(id, Ticks, Lives: Longword); +procedure AddTriggerSpawner(id, Ticks, Lives: Longword; X, Y: LongInt; GearType: TGearType; GearTriggerId: Longword); var tmp: PTrigger; begin if (Ticks = 0) or (Lives = 0) then exit; -{$IFDEF DEBUGFILE}AddFileLog('Add trigger: ' + inttostr(id));{$ENDIF} +{$IFDEF DEBUGFILE}AddFileLog('Add spawner trigger: ' + inttostr(id) + ', gear triggers ' + inttostr(GearTriggerId));{$ENDIF} new(tmp); -FillChar(tmp^, sizeof(TGear), 0); +FillChar(tmp^, sizeof(TTrigger), 0); tmp^.id:= id; tmp^.Ticks:= Ticks; tmp^.TicksPerLife:= Ticks; tmp^.Lives:= Lives; +tmp^.Action:= taSpawnGear; +tmp^.X:= X; +tmp^.Y:= Y; +tmp^.SpawnGearType:= GearType; +tmp^.SpawnGearTriggerId:= GearTriggerId; if TriggerList <> nil then tmp^.Next:= TriggerList; TriggerList:= tmp end; procedure TickTriggerT(Trigger: PTrigger); begin -AddGear(1024, -140, gtTarget, 0, _0, _0, 0) +with Trigger^ do + case Action of + taSpawnGear: AddGear(X, Y, SpawnGearType, 0, _0, _0, 0)^.TriggerId:= SpawnGearTriggerId; + end end; procedure TickTrigger(id: Longword);