diff --git a/Barotrauma/BarotraumaShared/Source/Items/Components/Door.cs b/Barotrauma/BarotraumaShared/Source/Items/Components/Door.cs index 50de362ac..43dc9e2b5 100644 --- a/Barotrauma/BarotraumaShared/Source/Items/Components/Door.cs +++ b/Barotrauma/BarotraumaShared/Source/Items/Components/Door.cs @@ -170,14 +170,14 @@ namespace Barotrauma.Items.Components get; set; } - + public Door(Item item, XElement element) : base(item, element) { IsHorizontal = element.GetAttributeBool("horizontal", false); canBePicked = element.GetAttributeBool("canbepicked", false); autoOrientGap = element.GetAttributeBool("autoorientgap", false); - + foreach (XElement subElement in element.Elements()) { string texturePath = subElement.GetAttributeString("texture", ""); @@ -401,6 +401,18 @@ namespace Barotrauma.Items.Components #endif } + public override void OnScaleChanged() + { +#if CLIENT + UpdateConvexHulls(); +#endif + if (linkedGap != null) + { + RefreshLinkedGap(); + linkedGap.Rect = item.Rect; + } + } + protected override void RemoveComponentSpecific() { base.RemoveComponentSpecific(); diff --git a/Barotrauma/BarotraumaShared/Source/Items/Components/ItemComponent.cs b/Barotrauma/BarotraumaShared/Source/Items/Components/ItemComponent.cs index bd6d56c53..39df86e4c 100644 --- a/Barotrauma/BarotraumaShared/Source/Items/Components/ItemComponent.cs +++ b/Barotrauma/BarotraumaShared/Source/Items/Components/ItemComponent.cs @@ -693,6 +693,8 @@ namespace Barotrauma.Items.Components /// public virtual void OnItemLoaded() { } + public virtual void OnScaleChanged() { } + // TODO: Consider using generics, interfaces, or inheritance instead of reflection -> would be easier to debug when something changes/goes wrong. // For example, currently we can edit the constructors but they will fail in runtime because the parameters are not changed here. // It's also painful to find where the constructors are used, because the references exist only at runtime. diff --git a/Barotrauma/BarotraumaShared/Source/Items/Item.cs b/Barotrauma/BarotraumaShared/Source/Items/Item.cs index 49400fd62..b2da749cd 100644 --- a/Barotrauma/BarotraumaShared/Source/Items/Item.cs +++ b/Barotrauma/BarotraumaShared/Source/Items/Item.cs @@ -217,6 +217,14 @@ namespace Barotrauma int newHeight = ResizeVertical ? rect.Height : (int)(defaultRect.Height * relativeScale); Rect = new Rectangle(rect.X, rect.Y, newWidth, newHeight); } + + if (components != null) + { + foreach (ItemComponent component in components) + { + component.OnScaleChanged(); + } + } } } diff --git a/Barotrauma/BarotraumaShared/Source/Map/MapEntity.cs b/Barotrauma/BarotraumaShared/Source/Map/MapEntity.cs index 83600423c..97e93dd95 100644 --- a/Barotrauma/BarotraumaShared/Source/Map/MapEntity.cs +++ b/Barotrauma/BarotraumaShared/Source/Map/MapEntity.cs @@ -207,20 +207,22 @@ namespace Barotrauma //clone links between the entities for (int i = 0; i < clones.Count; i++) { - if (entitiesToClone[i].linkedTo == null) continue; + if (entitiesToClone[i].linkedTo == null) { continue; } foreach (MapEntity linked in entitiesToClone[i].linkedTo) { - if (!entitiesToClone.Contains(linked)) continue; - + if (!entitiesToClone.Contains(linked)) { continue; } clones[i].linkedTo.Add(clones[entitiesToClone.IndexOf(linked)]); } } - //connect clone wires to the clone items + //connect clone wires to the clone items and refresh links between doors and gaps for (int i = 0; i < clones.Count; i++) { var cloneItem = clones[i] as Item; - if (cloneItem == null) continue; + if (cloneItem == null) { continue; } + + var door = cloneItem.GetComponent(); + if (door != null) { door.RefreshLinkedGap(); } var cloneWire = cloneItem.GetComponent(); if (cloneWire == null) continue; @@ -231,7 +233,7 @@ namespace Barotrauma for (int n = 0; n < 2; n++) { - if (originalWire.Connections[n] == null) continue; + if (originalWire.Connections[n] == null) { continue; } var connectedItem = originalWire.Connections[n].Item; if (connectedItem == null) continue;