From 4e46c44d51f14d9ee0c4844ec5e69753c389f64b Mon Sep 17 00:00:00 2001 From: Regalis Date: Tue, 9 Feb 2016 20:00:53 +0200 Subject: [PATCH] Show item IDs in inventory tooltips if debugdraw is enabled, itemspawner sync bugfix, characters can be revived (atm only through the debug console) --- Subsurface/Source/Characters/Character.cs | 40 +++++++++++++++--- Subsurface/Source/DebugConsole.cs | 11 +++++ Subsurface/Source/GameSession/CrewManager.cs | 11 +++++ Subsurface/Source/GameSession/GameSession.cs | 5 +++ Subsurface/Source/Items/CharacterInventory.cs | 10 ++++- Subsurface/Source/Items/Inventory.cs | 2 +- Subsurface/Source/Items/ItemSpawner.cs | 2 +- Subsurface/Source/Map/Hull.cs | 4 +- Subsurface_Solution.v12.suo | Bin 914432 -> 925184 bytes 9 files changed, 76 insertions(+), 9 deletions(-) diff --git a/Subsurface/Source/Characters/Character.cs b/Subsurface/Source/Characters/Character.cs index 44ab1ae9c..0f3ceae21 100644 --- a/Subsurface/Source/Characters/Character.cs +++ b/Subsurface/Source/Characters/Character.cs @@ -296,6 +296,14 @@ namespace Barotrauma public bool IsDead { get { return isDead; } + //set + //{ + // if (isDead == value) return; + // if (isDead) + // { + // Revive(false); + // } + //} } public CauseOfDeath CauseOfDeath @@ -1234,7 +1242,7 @@ namespace Barotrauma //CoroutineManager.StartCoroutine(DeathAnim(GameMain.GameScreen.Cam)); - health = 0.0f; + //health = 0.0f; isDead = true; this.causeOfDeath = causeOfDeath; @@ -1245,9 +1253,13 @@ namespace Barotrauma { if (selectedItems[i] != null) selectedItems[i].Drop(this); } - - aiTarget.Remove(); - aiTarget = null; + + if (aiTarget!=null) + { + aiTarget.Remove(); + aiTarget = null; + } + foreach (Limb limb in AnimController.Limbs) { @@ -1258,7 +1270,6 @@ namespace Barotrauma foreach (RevoluteJoint joint in AnimController.limbJoints) { joint.MotorEnabled = false; - joint.MaxMotorTorque = 0.0f; } if (GameMain.GameSession != null) @@ -1267,6 +1278,25 @@ namespace Barotrauma } } + public void Revive(bool isNetworkMessage) + { + isDead = false; + + aiTarget = new AITarget(this); + + health = Math.Max(maxHealth * 0.1f, health); + + foreach (RevoluteJoint joint in AnimController.limbJoints) + { + joint.MotorEnabled = true; + } + + if (GameMain.GameSession != null) + { + GameMain.GameSession.ReviveCharacter(this); + } + } + public override bool FillNetworkData(NetworkEventType type, NetBuffer message, object data) { switch (type) diff --git a/Subsurface/Source/DebugConsole.cs b/Subsurface/Source/DebugConsole.cs index 887db9015..0e0ee524d 100644 --- a/Subsurface/Source/DebugConsole.cs +++ b/Subsurface/Source/DebugConsole.cs @@ -266,6 +266,11 @@ namespace Barotrauma case "godmode": Submarine.Loaded.GodMode = !Submarine.Loaded.GodMode; break; + case "dumpids": + int count = commands.Length < 2 ? 10 : int.Parse(commands[1]); + + Entity.DumpIds(count); + break; case "heal": if (Character.Controlled != null) { @@ -274,6 +279,12 @@ namespace Barotrauma Character.Controlled.Bleeding = 0.0f; } break; + case "revive": + if (Character.Controlled != null) + { + Character.Controlled.Revive(false); + } + break; case "freecamera": case "freecam": Character.Controlled = null; diff --git a/Subsurface/Source/GameSession/CrewManager.cs b/Subsurface/Source/GameSession/CrewManager.cs index 3ffdd680e..8a9722687 100644 --- a/Subsurface/Source/GameSession/CrewManager.cs +++ b/Subsurface/Source/GameSession/CrewManager.cs @@ -181,6 +181,17 @@ namespace Barotrauma if (crewFrameOpen) crewFrame.Update(deltaTime); } + public void ReviveCharacter(Character revivedCharacter) + { + GUIComponent characterBlock = listBox.GetChild(revivedCharacter) as GUIComponent; + if (characterBlock != null) characterBlock.Color = Color.Transparent; + + if (revivedCharacter is AICharacter) + { + commander.UpdateCharacters(); + } + } + public void KillCharacter(Character killedCharacter) { GUIComponent characterBlock = listBox.GetChild(killedCharacter) as GUIComponent; diff --git a/Subsurface/Source/GameSession/GameSession.cs b/Subsurface/Source/GameSession/GameSession.cs index d16c47c3e..dcc2b0f54 100644 --- a/Subsurface/Source/GameSession/GameSession.cs +++ b/Subsurface/Source/GameSession/GameSession.cs @@ -173,6 +173,11 @@ namespace Barotrauma CrewManager.KillCharacter(character); } + public void ReviveCharacter(Character character) + { + CrewManager.ReviveCharacter(character); + } + public bool LoadPrevious(GUIButton button, object obj) { SaveUtil.LoadGame(saveFile); diff --git a/Subsurface/Source/Items/CharacterInventory.cs b/Subsurface/Source/Items/CharacterInventory.cs index f1a64b3cd..71a9c912d 100644 --- a/Subsurface/Source/Items/CharacterInventory.cs +++ b/Subsurface/Source/Items/CharacterInventory.cs @@ -266,7 +266,15 @@ namespace Barotrauma if (Items[i] != null && slotRect.Contains(PlayerInput.MousePosition)) { - toolTip = string.IsNullOrEmpty(Items[i].Description) ? Items[i].Name : Items[i].Name + '\n' + Items[i].Description; + if (GameMain.DebugDraw) + { + toolTip = Items[i].ToString(); + } + else + { + toolTip = string.IsNullOrEmpty(Items[i].Description) ? Items[i].Name : Items[i].Name + '\n' + Items[i].Description; + } + highlightedSlot = slotRect; } diff --git a/Subsurface/Source/Items/Inventory.cs b/Subsurface/Source/Items/Inventory.cs index 30b6dc69d..e5f74a5d3 100644 --- a/Subsurface/Source/Items/Inventory.cs +++ b/Subsurface/Source/Items/Inventory.cs @@ -199,7 +199,7 @@ namespace Barotrauma if (slotRect.Contains(PlayerInput.MousePosition) && Items[i] != null) { highlightedSlot = slotRect; - toolTip = Items[i].Name; + toolTip = GameMain.DebugDraw ? Items[i].ToString() : Items[i].Name; } } diff --git a/Subsurface/Source/Items/ItemSpawner.cs b/Subsurface/Source/Items/ItemSpawner.cs index 9ee491204..4dea7017d 100644 --- a/Subsurface/Source/Items/ItemSpawner.cs +++ b/Subsurface/Source/Items/ItemSpawner.cs @@ -88,7 +88,7 @@ namespace Barotrauma message.Write(items[i].Prefab.Name); message.Write(items[i].ID); - message.Write(inventories[i].Owner == null ? 0 : inventories[i].Owner.ID); + message.Write((inventories[i]==null || inventories[i].Owner == null) ? (ushort)0 : inventories[i].Owner.ID); } } diff --git a/Subsurface/Source/Map/Hull.cs b/Subsurface/Source/Map/Hull.cs index 15b34b0cd..ab62b1e4e 100644 --- a/Subsurface/Source/Map/Hull.cs +++ b/Subsurface/Source/Map/Hull.cs @@ -407,12 +407,14 @@ namespace Barotrauma public override void Draw(SpriteBatch spriteBatch, bool editing, bool back = true) { + if (back) return; + if (!ShowHulls && !GameMain.DebugDraw) return; if (!editing && !GameMain.DebugDraw) return; Rectangle drawRect = - Submarine == null ? rect : new Rectangle((int)(Submarine.DrawPosition.X + rect.X), (int)(Submarine.DrawPosition.Y + rect.Y), rect.Width, rect.Height); + Submarine == null ? rect : new Rectangle((int)(Submarine.DrawPosition.X + rect.X), (int)(Submarine.DrawPosition.Y + rect.Y), rect.Width, rect.Height); GUI.DrawRectangle(spriteBatch, new Vector2(drawRect.X, -drawRect.Y), diff --git a/Subsurface_Solution.v12.suo b/Subsurface_Solution.v12.suo index 355cb5e2a8bdb194e555f16ae63835f5d5cf1995..d7b626fe7353cdea15923df6309110c79c8520e2 100644 GIT binary patch delta 11639 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