DEADSOFTWARE

trigger loading now works; map loading code cleanup
[d2df-sdl.git] / src / game / g_triggers.pas
index be680ecb8e9f7e4698e3d0648b135d4b737c3d54..064b3b6cebba673302668005eb580130f48e1789 100644 (file)
@@ -27,7 +27,9 @@ type
     UID:     Word;
     TimeOut: Word;
   end;
+  PTrigger = ^TTrigger;
   TTrigger = record
+  public
     ID:               DWORD;
     ClientID:         DWORD;
     TriggerType:      Byte;
@@ -60,11 +62,18 @@ type
     ShotAmmoCount:    Word;
     ShotReloadTime:   Integer;
 
-    trigShotPanelId: Integer;
+    mapId: AnsiString; // trigger id, from map
+    //trigShotPanelId: Integer;
     trigPanelId: Integer;
 
     //TrigData:             TTriggerData;
     trigData: TDynRecord; // triggerdata; owned by trigger
+
+  public
+    function trigCenter (): TDFPoint; inline;
+
+  public
+    property trigShotPanelId: Integer read trigPanelId write trigPanelId;
   end;
 
 function g_Triggers_Create(Trigger: TTrigger): DWORD;
@@ -111,6 +120,13 @@ const
   TRIGGER_SIGNATURE = $52475254; // 'TRGR'
   TRAP_DAMAGE = 1000;
 
+
+function TTrigger.trigCenter (): TDFPoint; inline;
+begin
+  result := TDFPoint.Create(x+width div 2, y+height div 2);
+end;
+
+
 function FindTrigger(): DWORD;
 var
   i: Integer;
@@ -1195,7 +1211,7 @@ begin
 
       TRIGGER_TEXTURE:
         begin
-          if ByteBool(trigData.trigActivateOnce) then
+          if trigData.trigActivateOnce then
             begin
               Enabled := False;
               TriggerType := TRIGGER_NONE;
@@ -1819,7 +1835,7 @@ begin
 
       TRIGGER_MESSAGE:
         begin
-          Result := tr_Message(trigData.trigMessageKind, trigData.trigMessageText, 
+          Result := tr_Message(trigData.trigMessageKind, trigData.trigMessageText,
                                trigData.trigMessageSendTo, trigData.trigMessageTime,
                                ActivateUID);
           TimeOut := 18;
@@ -2104,6 +2120,19 @@ begin
   find_id := FindTrigger();
   gTriggers[find_id] := Trigger;
 
+  {
+  writeln('trigger #', find_id, ': pos=(', Trigger.x, ',', Trigger.y, ')-(', Trigger.width, 'x', Trigger.height, ')',
+    '; TexturePanel=', Trigger.TexturePanel,
+    '; TexturePanelType=', Trigger.TexturePanelType,
+    '; ShotPanelType=', Trigger.ShotPanelType,
+    '; TriggerType=', Trigger.TriggerType,
+    '; ActivateType=', Trigger.ActivateType,
+    '; Keys=', Trigger.Keys,
+    '; trigPanelId=', Trigger.trigPanelId,
+    '; trigShotPanelId=', Trigger.trigShotPanelId
+    );
+  }
+
   with gTriggers[find_id] do
   begin
     ID := find_id;
@@ -2653,7 +2682,6 @@ var
 begin
   for a := 0 to High(gTriggers) do
   begin
-    gTriggers[a].trigData.Free();
     if (gTriggers[a].TriggerType = TRIGGER_SOUND) then
     begin
       if g_Sound_Exists(gTriggers[a].trigData.trigSoundName) then
@@ -2666,6 +2694,7 @@ begin
     begin
       SetLength(gTriggers[a].Activators, 0);
     end;
+    gTriggers[a].trigData.Free();
   end;
 
   gTriggers := nil;