From 00653c5aa40edc4c8b3d70c7b9f42cec2022dd58 Mon Sep 17 00:00:00 2001 From: Alex Noir Date: Sun, 10 Dec 2017 13:39:00 +0300 Subject: [PATCH 1/4] 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); } } From 1d6d1a066f2149def47a86639a65adb857722553 Mon Sep 17 00:00:00 2001 From: Alex Noir Date: Sun, 10 Dec 2017 13:45:12 +0300 Subject: [PATCH 2/4] realised half way through that I don't even need a new action type, oops --- .../Source/Characters/StatusEffect.cs | 12 +------- .../Source/Items/CharacterInventory.cs | 5 ++-- .../Source/Items/Components/ItemComponent.cs | 7 ----- .../BarotraumaShared/Source/Items/Item.cs | 30 +------------------ 4 files changed, 4 insertions(+), 50 deletions(-) diff --git a/Barotrauma/BarotraumaShared/Source/Characters/StatusEffect.cs b/Barotrauma/BarotraumaShared/Source/Characters/StatusEffect.cs index d615243ad..a1d6cc4b0 100644 --- a/Barotrauma/BarotraumaShared/Source/Characters/StatusEffect.cs +++ b/Barotrauma/BarotraumaShared/Source/Characters/StatusEffect.cs @@ -41,7 +41,6 @@ namespace Barotrauma private readonly float duration; private readonly bool useItem; - private readonly bool hudUseItem; public readonly ActionType type; @@ -167,11 +166,9 @@ 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); @@ -261,13 +258,6 @@ 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 8d6dce863..b25a8e34a 100644 --- a/Barotrauma/BarotraumaShared/Source/Items/CharacterInventory.cs +++ b/Barotrauma/BarotraumaShared/Source/Items/CharacterInventory.cs @@ -36,7 +36,6 @@ 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) { @@ -47,10 +46,10 @@ namespace Barotrauma if (GameMain.Server != null) { - GameMain.Server.CreateEntityEvent(Items[slotIndex], new object[] { NetEntityEvent.Type.ApplyStatusEffect, ActionType.OnHudUse, character.ID }); + GameMain.Server.CreateEntityEvent(Items[slotIndex], new object[] { NetEntityEvent.Type.ApplyStatusEffect, ActionType.OnUse, character.ID }); } - Items[slotIndex].ApplyStatusEffects(ActionType.OnHudUse, 1.0f, character); + Items[slotIndex].ApplyStatusEffects(ActionType.OnUse, 1.0f, character); return true; } diff --git a/Barotrauma/BarotraumaShared/Source/Items/Components/ItemComponent.cs b/Barotrauma/BarotraumaShared/Source/Items/Components/ItemComponent.cs index 1e7096266..970d7d23f 100644 --- a/Barotrauma/BarotraumaShared/Source/Items/Components/ItemComponent.cs +++ b/Barotrauma/BarotraumaShared/Source/Items/Components/ItemComponent.cs @@ -290,13 +290,6 @@ 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 Aim(float deltaTime, Character character = null) { } diff --git a/Barotrauma/BarotraumaShared/Source/Items/Item.cs b/Barotrauma/BarotraumaShared/Source/Items/Item.cs index 8f1d82837..2da3079f7 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, OnHudUse, OnAim, + Always, OnPicked, OnUse, OnAim, OnWearing, OnContaining, OnContained, OnActive, OnFailure, OnBroken, OnFire, InWater, @@ -800,7 +800,6 @@ namespace Barotrauma if (!ic.WasUsed) { ic.StopSounds(ActionType.OnUse); - ic.StopSounds(ActionType.OnHudUse); } #endif ic.WasUsed = false; @@ -1166,33 +1165,6 @@ namespace Barotrauma if (remove) Remove(); } - 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) { From 231a38f71dc2bc542feed514366feca96ba4daef Mon Sep 17 00:00:00 2001 From: Alex Noir Date: Sun, 10 Dec 2017 15:00:52 +0300 Subject: [PATCH 3/4] roll back name change from "Aim" to "SecondaryUse" Expand SecondaryUse to have similar properties to normal Use so it can apply SecondaryUse-related status effects Make Throwable great again --- .../Source/Characters/AI/HumanAIController.cs | 2 +- .../Source/Characters/Character.cs | 4 ++-- .../Source/Items/Components/DockingPort.cs | 2 +- .../Items/Components/Holdable/Throwable.cs | 15 ++++-------- .../Source/Items/Components/ItemComponent.cs | 5 +++- .../Items/Components/Machines/Controller.cs | 2 +- .../Source/Items/Components/Rope.cs | 7 +++--- .../Source/Items/Components/Signal/Wire.cs | 3 ++- .../BarotraumaShared/Source/Items/Item.cs | 23 +++++++++++++++++-- 9 files changed, 41 insertions(+), 22 deletions(-) diff --git a/Barotrauma/BarotraumaShared/Source/Characters/AI/HumanAIController.cs b/Barotrauma/BarotraumaShared/Source/Characters/AI/HumanAIController.cs index b3a3c7d38..33e67d60d 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.Aim(deltaTime, Character); + if (Character.SelectedConstruction != null) Character.SelectedConstruction.SecondaryUse(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 9834a756a..a506e62d1 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].Aim(deltaTime, this); + if (IsKeyDown(InputType.Aim) && selectedItems[i] != null) selectedItems[i].SecondaryUse(deltaTime, this); } if (selectedConstruction != null) { if (IsKeyDown(InputType.Use)) selectedConstruction.Use(deltaTime, this); - if (selectedConstruction != null && IsKeyDown(InputType.Aim)) selectedConstruction.Aim(deltaTime, this); + if (selectedConstruction != null && IsKeyDown(InputType.Aim)) selectedConstruction.SecondaryUse(deltaTime, this); } if (SelectedCharacter != null) diff --git a/Barotrauma/BarotraumaShared/Source/Items/Components/DockingPort.cs b/Barotrauma/BarotraumaShared/Source/Items/Components/DockingPort.cs index 7d78d1897..1b33e369a 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.OnAim, item.WorldPosition); + PlaySound(ActionType.OnSecondaryUse, 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 909be1fdf..bf5cc7835 100644 --- a/Barotrauma/BarotraumaShared/Source/Items/Components/Holdable/Throwable.cs +++ b/Barotrauma/BarotraumaShared/Source/Items/Components/Holdable/Throwable.cs @@ -27,18 +27,13 @@ namespace Barotrauma.Items.Components public override bool Use(float deltaTime, Character character = null) { - if (character == null) return false; - if (!character.IsKeyDown(InputType.Aim) || throwing) return false; - - throwing = true; - - IsActive = true; - return true; + return true; //We do the actual throwing in Aim because Use might be used by chems } - public override void Aim(float deltaTime, Character character = null) + public override bool SecondaryUse(float deltaTime, Character character = null) { - if (throwing) return; + if (!throwing) return false; //This should only be triggered + return true; } public override void Drop(Character dropper) @@ -103,7 +98,7 @@ namespace Barotrauma.Items.Components Limb rightHand = ac.GetLimb(LimbType.RightHand); item.body.AngularVelocity = rightHand.body.AngularVelocity; - + ApplyStatusEffects(ActionType.OnSecondaryUse, deltaTime, picker); //Stun grenades, flares, etc. all have their throw-related things handled in "onSecondaryUse" throwing = false; } } diff --git a/Barotrauma/BarotraumaShared/Source/Items/Components/ItemComponent.cs b/Barotrauma/BarotraumaShared/Source/Items/Components/ItemComponent.cs index 970d7d23f..f6d7cb494 100644 --- a/Barotrauma/BarotraumaShared/Source/Items/Components/ItemComponent.cs +++ b/Barotrauma/BarotraumaShared/Source/Items/Components/ItemComponent.cs @@ -291,7 +291,10 @@ namespace Barotrauma.Items.Components } //called when the item is equipped and right mouse button is pressed - public virtual void Aim(float deltaTime, Character character = null) { } + public virtual bool SecondaryUse(float deltaTime, Character character = null) + { + return false; + } //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 63aa5c5ab..ae4b7dde7 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 Aim(float deltaTime, Character character = null) + public override bool SecondaryUse(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 f1cbdd3ec..feb13df8a 100644 --- a/Barotrauma/BarotraumaShared/Source/Items/Components/Rope.cs +++ b/Barotrauma/BarotraumaShared/Source/Items/Components/Rope.cs @@ -118,9 +118,9 @@ namespace Barotrauma.Items.Components } - public override void Aim(float deltaTime, Character character = null) + public override bool SecondaryUse(float deltaTime, Character character = null) { - if (reload > 0.0f) return; + if (reload > 0.0f) return false; bool first = true; for (int i = 0; i < ropeBodies.Length - 1; i++) @@ -157,7 +157,8 @@ namespace Barotrauma.Items.Components //ropeBodies[i + 1].ApplyForce(dist / length * pullForce * 0.1f); } - } + } + return true; } private void NextSection(int i) diff --git a/Barotrauma/BarotraumaShared/Source/Items/Components/Signal/Wire.cs b/Barotrauma/BarotraumaShared/Source/Items/Components/Signal/Wire.cs index 5c8a34551..99cd54835 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 Aim(float deltaTime, Character character = null) + public override bool SecondaryUse(float deltaTime, Character character = null) { if (nodes.Count > 1) { @@ -251,6 +251,7 @@ namespace Barotrauma.Items.Components } Drawable = IsActive || sections.Count > 0; + return true; } public override bool Pick(Character picker) diff --git a/Barotrauma/BarotraumaShared/Source/Items/Item.cs b/Barotrauma/BarotraumaShared/Source/Items/Item.cs index 2da3079f7..822a6ffe7 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, OnAim, + Always, OnPicked, OnUse, OnSecondaryUse, OnWearing, OnContaining, OnContained, OnActive, OnFailure, OnBroken, OnFire, InWater, @@ -800,6 +800,7 @@ namespace Barotrauma if (!ic.WasUsed) { ic.StopSounds(ActionType.OnUse); + ic.StopSounds(ActionType.OnSecondaryUse); } #endif ic.WasUsed = false; @@ -1165,12 +1166,30 @@ namespace Barotrauma if (remove) Remove(); } + public void SecondaryUse(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; - ic.Aim(deltaTime, character); + if (ic.Use(deltaTime, character)) + { + ic.WasUsed = true; + +#if CLIENT + ic.PlaySound(ActionType.OnSecondaryUse, WorldPosition); +#endif + + ic.ApplyStatusEffects(ActionType.OnSecondaryUse, deltaTime, character); + + if (ic.DeleteOnUse) remove = true; + } } + + if (remove) Remove(); } public List GetHUDTexts(Character character) From 55dd58579fbdfaaef7779510200efe309d73d373 Mon Sep 17 00:00:00 2001 From: Alex Noir Date: Sun, 10 Dec 2017 15:56:34 +0300 Subject: [PATCH 4/4] I DID IT HOLY SHIT I GONE AND DONE IT OnSecondaryUse is what throwing uses for doing things SPECIFICALLY on throw. This way, you can theoretically have grenades on which you'll have to pull the pin before throwing. This also lets flares be used without the need to throw them. did i mention my brain hurts --- .../BarotraumaShared/Content/Items/Door/doors.xml | 4 ++-- .../Content/Items/Weapons/weapons.xml | 4 ++-- .../Source/Items/Components/Holdable/Throwable.cs | 14 ++++++++++++-- .../Source/Items/Components/Machines/Controller.cs | 8 +++++--- Barotrauma/BarotraumaShared/Source/Items/Item.cs | 2 +- 5 files changed, 22 insertions(+), 10 deletions(-) diff --git a/Barotrauma/BarotraumaShared/Content/Items/Door/doors.xml b/Barotrauma/BarotraumaShared/Content/Items/Door/doors.xml index 5a9ee8cf4..120365d6c 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/Content/Items/Weapons/weapons.xml b/Barotrauma/BarotraumaShared/Content/Items/Weapons/weapons.xml index 454ed82e2..37854344d 100644 --- a/Barotrauma/BarotraumaShared/Content/Items/Weapons/weapons.xml +++ b/Barotrauma/BarotraumaShared/Content/Items/Weapons/weapons.xml @@ -117,7 +117,7 @@ - + @@ -134,7 +134,7 @@ - + diff --git a/Barotrauma/BarotraumaShared/Source/Items/Components/Holdable/Throwable.cs b/Barotrauma/BarotraumaShared/Source/Items/Components/Holdable/Throwable.cs index bf5cc7835..968ece938 100644 --- a/Barotrauma/BarotraumaShared/Source/Items/Components/Holdable/Throwable.cs +++ b/Barotrauma/BarotraumaShared/Source/Items/Components/Holdable/Throwable.cs @@ -11,6 +11,7 @@ namespace Barotrauma.Items.Components float throwPos; bool throwing; + bool throwDone; [Serialize(1.0f, false)] public float ThrowForce @@ -32,7 +33,8 @@ namespace Barotrauma.Items.Components public override bool SecondaryUse(float deltaTime, Character character = null) { - if (!throwing) return false; //This should only be triggered + if (!throwDone) return false; //This should only be triggered in update + throwDone = false; return true; } @@ -52,7 +54,14 @@ namespace Barotrauma.Items.Components public override void Update(float deltaTime, Camera cam) { if (!item.body.Enabled) return; - if (!picker.HasSelectedItem(item)) IsActive = false; + if (!picker.HasSelectedItem(item)) + { + IsActive = false; + return; + } + + if (picker.IsKeyDown(InputType.Aim) && picker.IsKeyHit(InputType.Use)) + throwing = true; if (!picker.IsKeyDown(InputType.Aim) && !throwing) throwPos = 0.0f; @@ -98,6 +107,7 @@ namespace Barotrauma.Items.Components Limb rightHand = ac.GetLimb(LimbType.RightHand); item.body.AngularVelocity = rightHand.body.AngularVelocity; + throwDone = true; ApplyStatusEffects(ActionType.OnSecondaryUse, deltaTime, picker); //Stun grenades, flares, etc. all have their throw-related things handled in "onSecondaryUse" throwing = false; } diff --git a/Barotrauma/BarotraumaShared/Source/Items/Components/Machines/Controller.cs b/Barotrauma/BarotraumaShared/Source/Items/Components/Machines/Controller.cs index ae4b7dde7..3dbd1799a 100644 --- a/Barotrauma/BarotraumaShared/Source/Items/Components/Machines/Controller.cs +++ b/Barotrauma/BarotraumaShared/Source/Items/Components/Machines/Controller.cs @@ -165,15 +165,15 @@ namespace Barotrauma.Items.Components if (this.character == null || this.character != character || this.character.SelectedConstruction != item || !character.CanInteractWith(item)) { character = null; - return; + return false; } - if (character == null) return; + if (character == null) return false; Entity focusTarget = GetFocusTarget(); if (focusTarget == null) { item.SendSignal(0, XMLExtensions.Vector2ToString(character.CursorWorldPosition), "position_out", character); - return; + return false; } character.ViewTarget = focusTarget; @@ -191,6 +191,8 @@ namespace Barotrauma.Items.Components { item.SendSignal(0, XMLExtensions.Vector2ToString(character.CursorWorldPosition), "position_out", character); } + + return true; } private Item GetFocusTarget() diff --git a/Barotrauma/BarotraumaShared/Source/Items/Item.cs b/Barotrauma/BarotraumaShared/Source/Items/Item.cs index 822a6ffe7..d6c4d2aad 100644 --- a/Barotrauma/BarotraumaShared/Source/Items/Item.cs +++ b/Barotrauma/BarotraumaShared/Source/Items/Item.cs @@ -1175,7 +1175,7 @@ namespace Barotrauma foreach (ItemComponent ic in components) { if (!ic.HasRequiredContainedItems(character == Character.Controlled)) continue; - if (ic.Use(deltaTime, character)) + if (ic.SecondaryUse(deltaTime, character)) { ic.WasUsed = true;