DEADSOFTWARE

fixed texture trigger bug
authorfgsfds <pvt.fgsfds@gmail.com>
Tue, 6 Feb 2018 20:35:42 +0000 (23:35 +0300)
committerfgsfds <pvt.fgsfds@gmail.com>
Tue, 6 Feb 2018 20:35:42 +0000 (23:35 +0300)
src/game/g_map.pas
src/game/g_netmsg.pas
src/game/g_panel.pas

index 1ddbffdd052253d446f2163e1f4597294dd445ff..c4e818fe319d289a38fe4f908cc609d89e085811 100644 (file)
@@ -1338,6 +1338,7 @@ end;
 function CreateTrigger (amapIdx: Integer; Trigger: TDynRecord; atpanid, atrigpanid: Integer): Integer;
 var
   _trigger: TTrigger;
+  tp: TPanel;
 begin
   result := -1;
   if g_Game_IsClient and not (Trigger.TriggerType in [TRIGGER_SOUND, TRIGGER_MUSIC]) then Exit;
@@ -1356,6 +1357,12 @@ begin
     ActivateType := Trigger.ActivateType;
     Keys := Trigger.Keys;
     trigPanelGUID := atrigpanid;
+    // HACK: used in TPanel.CanChangeTexture. maybe there's a better way?
+    if TexturePanelGUID <> -1 then
+    begin
+      tp := g_Map_PanelByGUID(TexturePanelGUID);
+      if (tp <> nil) then tp.hasTexTrigger := True;
+    end;
   end;
 
   result := Integer(g_Triggers_Create(_trigger, Trigger));
index 29e9223af93c0994aa62eab83b0b70c4a03893a7..ce4238a69d454b185a3fc0f57a08ec292a865e30 100644 (file)
@@ -644,7 +644,7 @@ procedure MH_SEND_Everything(CreatePlayers: Boolean = False; ID: Integer = NET_E
   begin
     result := false; // don't stop
     MH_SEND_PanelState(pan.guid, ID); // anyway, to sync mplats
-    if (pan.GetTextureCount > 1) then MH_SEND_PanelTexture(pan.guid, pan.LastAnimLoop, ID);
+    if (pan.CanChangeTexture) then MH_SEND_PanelTexture(pan.guid, pan.LastAnimLoop, ID);
   end;
 
 var
index e88db6b18c7f715304e23662957e504e8984af35..d0eb1ce7dc3ed2ec7e4b5f0e6ac6f12b96a6fccc 100644 (file)
@@ -110,6 +110,7 @@ type
     tag:              Integer; // used in coldets and such; sorry; see g_map.GridTagXXX
     proxyId:          Integer; // proxy id in map grid (DO NOT USE!)
     mapId:            AnsiString; // taken directly from map file; dunno why it is here
+    hasTexTrigger:    Boolean; // HACK: true when there's a trigger than can change my texture
 
     constructor Create(PanelRec: TDynRecord;
                        AddTextures: TAddTextureArray;
@@ -125,6 +126,7 @@ type
     procedure   SetTexture(ID: Integer; AnimLoop: Byte = 0);
     function    GetTextureID(): Cardinal;
     function    GetTextureCount(): Integer;
+    function    CanChangeTexture(): Boolean;
 
     procedure   SaveState (st: TStream);
     procedure   LoadState (st: TStream);
@@ -259,6 +261,7 @@ begin
   Enabled := True;
   Door := False;
   LiftType := 0;
+  hasTexTrigger := False;
 
   case PanelType of
     PANEL_OPENDOOR: begin Enabled := False; Door := True; end;
@@ -1015,6 +1018,10 @@ begin
        Result := Result + 100;
 end;
 
+function TPanel.CanChangeTexture(): Boolean;
+begin
+  Result := (GetTextureCount() > 1) or hasTexTrigger;
+end;
 
 const
   PAN_SAVE_VERSION = 1;