From 00653c5aa40edc4c8b3d70c7b9f42cec2022dd58 Mon Sep 17 00:00:00 2001 From: Alex Noir Date: Sun, 10 Dec 2017 13:39:00 +0300 Subject: [PATCH] Renames "OnSecondaryUse" to "OnAim" for more sense adds new "OnHudUse" to separate normal and self use --- .../Content/Items/Door/doors.xml | 4 +-- .../Source/Characters/AI/HumanAIController.cs | 2 +- .../Source/Characters/Character.cs | 4 +-- .../Source/Characters/StatusEffect.cs | 12 ++++++- .../Source/Items/CharacterInventory.cs | 5 +-- .../Source/Items/Components/DockingPort.cs | 2 +- .../Items/Components/Holdable/Throwable.cs | 2 +- .../Source/Items/Components/ItemComponent.cs | 9 ++++- .../Items/Components/Machines/Controller.cs | 2 +- .../Source/Items/Components/Rope.cs | 2 +- .../Source/Items/Components/Signal/Wire.cs | 2 +- .../BarotraumaShared/Source/Items/Item.cs | 33 +++++++++++++++++-- 12 files changed, 62 insertions(+), 17 deletions(-) diff --git a/Barotrauma/BarotraumaShared/Content/Items/Door/doors.xml b/Barotrauma/BarotraumaShared/Content/Items/Door/doors.xml index 120365d6c..5a9ee8cf4 100644 --- a/Barotrauma/BarotraumaShared/Content/Items/Door/doors.xml +++ b/Barotrauma/BarotraumaShared/Content/Items/Door/doors.xml @@ -96,7 +96,7 @@ - + @@ -127,7 +127,7 @@ - + diff --git a/Barotrauma/BarotraumaShared/Source/Characters/AI/HumanAIController.cs b/Barotrauma/BarotraumaShared/Source/Characters/AI/HumanAIController.cs index 33e67d60d..b3a3c7d38 100644 --- a/Barotrauma/BarotraumaShared/Source/Characters/AI/HumanAIController.cs +++ b/Barotrauma/BarotraumaShared/Source/Characters/AI/HumanAIController.cs @@ -128,7 +128,7 @@ namespace Barotrauma Character.AnimController.TargetDir = Direction.Left; } - if (Character.SelectedConstruction != null) Character.SelectedConstruction.SecondaryUse(deltaTime, Character); + if (Character.SelectedConstruction != null) Character.SelectedConstruction.Aim(deltaTime, Character); } else if (Math.Abs(Character.AnimController.TargetMovement.X) > 0.1f && !Character.AnimController.InWater) diff --git a/Barotrauma/BarotraumaShared/Source/Characters/Character.cs b/Barotrauma/BarotraumaShared/Source/Characters/Character.cs index a506e62d1..9834a756a 100644 --- a/Barotrauma/BarotraumaShared/Source/Characters/Character.cs +++ b/Barotrauma/BarotraumaShared/Source/Characters/Character.cs @@ -932,13 +932,13 @@ namespace Barotrauma if (i == 1 && selectedItems[0] == selectedItems[1]) continue; if (IsKeyDown(InputType.Use)) selectedItems[i].Use(deltaTime, this); - if (IsKeyDown(InputType.Aim) && selectedItems[i] != null) selectedItems[i].SecondaryUse(deltaTime, this); + if (IsKeyDown(InputType.Aim) && selectedItems[i] != null) selectedItems[i].Aim(deltaTime, this); } if (selectedConstruction != null) { if (IsKeyDown(InputType.Use)) selectedConstruction.Use(deltaTime, this); - if (selectedConstruction != null && IsKeyDown(InputType.Aim)) selectedConstruction.SecondaryUse(deltaTime, this); + if (selectedConstruction != null && IsKeyDown(InputType.Aim)) selectedConstruction.Aim(deltaTime, this); } if (SelectedCharacter != null) diff --git a/Barotrauma/BarotraumaShared/Source/Characters/StatusEffect.cs b/Barotrauma/BarotraumaShared/Source/Characters/StatusEffect.cs index a1d6cc4b0..d615243ad 100644 --- a/Barotrauma/BarotraumaShared/Source/Characters/StatusEffect.cs +++ b/Barotrauma/BarotraumaShared/Source/Characters/StatusEffect.cs @@ -41,6 +41,7 @@ namespace Barotrauma private readonly float duration; private readonly bool useItem; + private readonly bool hudUseItem; public readonly ActionType type; @@ -166,9 +167,11 @@ namespace Barotrauma FireSize = subElement.GetAttributeFloat("size",10.0f); break; case "use": - case "useitem": useItem = true; break; + case "huduse": + hudUseItem = true; + break; case "requireditem": case "requireditems": RelatedItem newRequiredItem = RelatedItem.Load(subElement); @@ -258,6 +261,13 @@ namespace Barotrauma item.Use(deltaTime, targets.FirstOrDefault(t => t is Character) as Character); } } + if (hudUseItem) + { + foreach (Item item in targets.FindAll(t => t is Item).Cast()) + { + item.HudUse(deltaTime, targets.FirstOrDefault(t => t is Character) as Character); + } + } foreach (ISerializableEntity target in targets) { diff --git a/Barotrauma/BarotraumaShared/Source/Items/CharacterInventory.cs b/Barotrauma/BarotraumaShared/Source/Items/CharacterInventory.cs index b25a8e34a..8d6dce863 100644 --- a/Barotrauma/BarotraumaShared/Source/Items/CharacterInventory.cs +++ b/Barotrauma/BarotraumaShared/Source/Items/CharacterInventory.cs @@ -36,6 +36,7 @@ namespace Barotrauma { if (Items[slotIndex] == null) return false; +//Isn't this useless? Client isn't handling status effects. Plus, this doesn't send the ActionType so it can be wrong even. #if CLIENT if (GameMain.Client != null) { @@ -46,10 +47,10 @@ namespace Barotrauma if (GameMain.Server != null) { - GameMain.Server.CreateEntityEvent(Items[slotIndex], new object[] { NetEntityEvent.Type.ApplyStatusEffect, ActionType.OnUse, character.ID }); + GameMain.Server.CreateEntityEvent(Items[slotIndex], new object[] { NetEntityEvent.Type.ApplyStatusEffect, ActionType.OnHudUse, character.ID }); } - Items[slotIndex].ApplyStatusEffects(ActionType.OnUse, 1.0f, character); + Items[slotIndex].ApplyStatusEffects(ActionType.OnHudUse, 1.0f, character); return true; } diff --git a/Barotrauma/BarotraumaShared/Source/Items/Components/DockingPort.cs b/Barotrauma/BarotraumaShared/Source/Items/Components/DockingPort.cs index 1b33e369a..7d78d1897 100644 --- a/Barotrauma/BarotraumaShared/Source/Items/Components/DockingPort.cs +++ b/Barotrauma/BarotraumaShared/Source/Items/Components/DockingPort.cs @@ -255,7 +255,7 @@ namespace Barotrauma.Items.Components dockingTarget.dockingDir = -dockingDir; #if CLIENT - PlaySound(ActionType.OnSecondaryUse, item.WorldPosition); + PlaySound(ActionType.OnAim, item.WorldPosition); #endif ConnectWireBetweenPorts(); diff --git a/Barotrauma/BarotraumaShared/Source/Items/Components/Holdable/Throwable.cs b/Barotrauma/BarotraumaShared/Source/Items/Components/Holdable/Throwable.cs index 751a14836..909be1fdf 100644 --- a/Barotrauma/BarotraumaShared/Source/Items/Components/Holdable/Throwable.cs +++ b/Barotrauma/BarotraumaShared/Source/Items/Components/Holdable/Throwable.cs @@ -36,7 +36,7 @@ namespace Barotrauma.Items.Components return true; } - public override void SecondaryUse(float deltaTime, Character character = null) + public override void Aim(float deltaTime, Character character = null) { if (throwing) return; } diff --git a/Barotrauma/BarotraumaShared/Source/Items/Components/ItemComponent.cs b/Barotrauma/BarotraumaShared/Source/Items/Components/ItemComponent.cs index 26bb3f2ad..1e7096266 100644 --- a/Barotrauma/BarotraumaShared/Source/Items/Components/ItemComponent.cs +++ b/Barotrauma/BarotraumaShared/Source/Items/Components/ItemComponent.cs @@ -290,8 +290,15 @@ namespace Barotrauma.Items.Components return false; } + //called when the item is used via the HUD button + //returns true if the item was used succesfully (not out of ammo, reloading, etc) + public virtual bool HudUse(float deltaTime, Character character = null) + { + return false; + } + //called when the item is equipped and right mouse button is pressed - public virtual void SecondaryUse(float deltaTime, Character character = null) { } + public virtual void Aim(float deltaTime, Character character = null) { } //called when the item is placed in a "limbslot" public virtual void Equip(Character character) { } diff --git a/Barotrauma/BarotraumaShared/Source/Items/Components/Machines/Controller.cs b/Barotrauma/BarotraumaShared/Source/Items/Components/Machines/Controller.cs index b75f1eb4b..63aa5c5ab 100644 --- a/Barotrauma/BarotraumaShared/Source/Items/Components/Machines/Controller.cs +++ b/Barotrauma/BarotraumaShared/Source/Items/Components/Machines/Controller.cs @@ -160,7 +160,7 @@ namespace Barotrauma.Items.Components return true; } - public override void SecondaryUse(float deltaTime, Character character = null) + public override void Aim(float deltaTime, Character character = null) { if (this.character == null || this.character != character || this.character.SelectedConstruction != item || !character.CanInteractWith(item)) { diff --git a/Barotrauma/BarotraumaShared/Source/Items/Components/Rope.cs b/Barotrauma/BarotraumaShared/Source/Items/Components/Rope.cs index db4f8068d..f1cbdd3ec 100644 --- a/Barotrauma/BarotraumaShared/Source/Items/Components/Rope.cs +++ b/Barotrauma/BarotraumaShared/Source/Items/Components/Rope.cs @@ -118,7 +118,7 @@ namespace Barotrauma.Items.Components } - public override void SecondaryUse(float deltaTime, Character character = null) + public override void Aim(float deltaTime, Character character = null) { if (reload > 0.0f) return; diff --git a/Barotrauma/BarotraumaShared/Source/Items/Components/Signal/Wire.cs b/Barotrauma/BarotraumaShared/Source/Items/Components/Signal/Wire.cs index 086df16b3..5c8a34551 100644 --- a/Barotrauma/BarotraumaShared/Source/Items/Components/Signal/Wire.cs +++ b/Barotrauma/BarotraumaShared/Source/Items/Components/Signal/Wire.cs @@ -242,7 +242,7 @@ namespace Barotrauma.Items.Components return true; } - public override void SecondaryUse(float deltaTime, Character character = null) + public override void Aim(float deltaTime, Character character = null) { if (nodes.Count > 1) { diff --git a/Barotrauma/BarotraumaShared/Source/Items/Item.cs b/Barotrauma/BarotraumaShared/Source/Items/Item.cs index 5405a9816..8f1d82837 100644 --- a/Barotrauma/BarotraumaShared/Source/Items/Item.cs +++ b/Barotrauma/BarotraumaShared/Source/Items/Item.cs @@ -16,7 +16,7 @@ namespace Barotrauma { public enum ActionType { - Always, OnPicked, OnUse, OnSecondaryUse, + Always, OnPicked, OnUse, OnHudUse, OnAim, OnWearing, OnContaining, OnContained, OnActive, OnFailure, OnBroken, OnFire, InWater, @@ -800,6 +800,7 @@ namespace Barotrauma if (!ic.WasUsed) { ic.StopSounds(ActionType.OnUse); + ic.StopSounds(ActionType.OnHudUse); } #endif ic.WasUsed = false; @@ -1165,12 +1166,38 @@ namespace Barotrauma if (remove) Remove(); } - public void SecondaryUse(float deltaTime, Character character = null) + public void HudUse(float deltaTime, Character character = null) + { + if (condition == 0.0f) return; + + bool remove = false; + + foreach (ItemComponent ic in components) + { + if (!ic.HasRequiredContainedItems(character == Character.Controlled)) continue; + if (ic.HudUse(deltaTime, character)) + { + ic.WasUsed = true; + +#if CLIENT + ic.PlaySound(ActionType.OnHudUse, WorldPosition); +#endif + + ic.ApplyStatusEffects(ActionType.OnHudUse, deltaTime, character); + + if (ic.DeleteOnUse) remove = true; + } + } + + if (remove) Remove(); + } + + public void Aim(float deltaTime, Character character = null) { foreach (ItemComponent ic in components) { if (!ic.HasRequiredContainedItems(character == Character.Controlled)) continue; - ic.SecondaryUse(deltaTime, character); + ic.Aim(deltaTime, character); } }