More weapon events and abilities
This commit is contained in:
@@ -4,4 +4,4 @@
|
|||||||
|
|
||||||
[resource]
|
[resource]
|
||||||
script = ExtResource("1_l686n")
|
script = ExtResource("1_l686n")
|
||||||
RegisteredTags = Array[String](["character.player", "character.enemy", "weapon", "status.stunned", "status.burning", "status.frozen", "abilities.weapon.land", "abilities.weapon.flying", "abilities.weapon.left", "events.combat.damage", "events.combat.hit", "events.weapon.flyingTick", "events.weapon.startedFlying", "events.weapon.stoppedFlying", "events.weapon.handToFlying", "events.weapon.flyingToHand", "events.weapon.plantedToHand", "events.weapon.plantedToFlying", "events.weapon.planted", "cooldown.empoweredAction", "cooldown.empoweredSwordThrow", "cues.resources.mana", "events.player.empowered_action_used", "cues.resources.mana.inhibited", "cues.resources.health", "cooldown.enemy.hit", "events.combat.death", "cooldown.hit", "events.player.hit", "cues.enemy.health", "immunity.damage", "status", "traits.damageable", "traits.knockbackable", "events.combat.knockback_dealt", "events.combat.knockback_received"])
|
RegisteredTags = Array[String](["character.player", "character.enemy", "weapon", "status.stunned", "status.burning", "status.frozen", "abilities.weapon.land", "abilities.weapon.flying", "abilities.weapon.left", "events.combat.damage", "events.combat.hit", "events.weapon.flyingTick", "events.weapon.startedFlying", "events.weapon.stoppedFlying", "events.weapon.handToFlying", "events.weapon.flyingToHand", "events.weapon.plantedToHand", "events.weapon.plantedToFlying", "events.weapon.planted", "cooldown.empoweredAction", "cooldown.empoweredSwordThrow", "cues.resources.mana", "events.player.empowered_action_used", "cues.resources.mana.inhibited", "cues.resources.health", "cooldown.enemy.hit", "events.combat.death", "cooldown.hit", "events.player.hit", "cues.enemy.health", "immunity.damage", "status", "traits.damageable", "traits.knockbackable", "events.combat.knockback_dealt", "events.combat.knockback_received", "events.weapon.plantedtick", "events.weapon.unplanted", "abilities.weapon.planted"])
|
||||||
|
|||||||
@@ -1,78 +1,18 @@
|
|||||||
[gd_resource type="Resource" script_class="ForgeAbilityData" format=3 uid="uid://dgjsi1my7nlnk"]
|
[gd_resource type="Resource" script_class="ForgeAbilityData" format=3 uid="uid://dgjsi1my7nlnk"]
|
||||||
|
|
||||||
|
[ext_resource type="Resource" uid="uid://bn1getr10b4dx" path="res://forge/resources/effect_datas/simple_player_hit.tres" id="1_c4wry"]
|
||||||
[ext_resource type="Script" uid="uid://1hgogislo1l6" path="res://addons/forge/resources/magnitudes/ForgeScalableInt.cs" id="1_l0l1a"]
|
[ext_resource type="Script" uid="uid://1hgogislo1l6" path="res://addons/forge/resources/magnitudes/ForgeScalableInt.cs" id="1_l0l1a"]
|
||||||
[ext_resource type="Script" uid="uid://n6efm5o4uxvr" path="res://forge/abilities/ForgeSimpleHitBehavior.cs" id="1_n2s8d"]
|
[ext_resource type="Script" uid="uid://n6efm5o4uxvr" path="res://forge/abilities/ForgeSimpleHitBehavior.cs" id="1_n2s8d"]
|
||||||
[ext_resource type="Resource" uid="uid://bpovqvlqv5bs5" path="res://forge/resources/effect_components/damageable.tres" id="1_r7waw"]
|
|
||||||
[ext_resource type="Script" uid="uid://cw525n4mjqgw0" path="res://addons/forge/resources/ForgeTagContainer.cs" id="1_w1wo0"]
|
[ext_resource type="Script" uid="uid://cw525n4mjqgw0" path="res://addons/forge/resources/ForgeTagContainer.cs" id="1_w1wo0"]
|
||||||
[ext_resource type="Script" uid="uid://b83hf13nj37k3" path="res://addons/forge/resources/ForgeEffectData.cs" id="2_5vjbv"]
|
[ext_resource type="Script" uid="uid://b83hf13nj37k3" path="res://addons/forge/resources/ForgeEffectData.cs" id="2_5vjbv"]
|
||||||
[ext_resource type="Script" uid="uid://dngf30hxy5go4" path="res://addons/forge/resources/components/ModifierTags.cs" id="2_jwyed"]
|
[ext_resource type="Script" uid="uid://dngf30hxy5go4" path="res://addons/forge/resources/components/ModifierTags.cs" id="2_jwyed"]
|
||||||
[ext_resource type="Resource" uid="uid://4rkwr10pc6tp" path="res://forge/resources/custom_executions/physical_damage_calculator.tres" id="2_l5emy"]
|
|
||||||
[ext_resource type="Script" uid="uid://bdfcavbjyhxxa" path="res://addons/forge/resources/ForgeModifier.cs" id="3_c4wry"]
|
|
||||||
[ext_resource type="Resource" uid="uid://cc1qrmbp12fk8" path="res://forge/resources/custom_executions/player_hit_knoback_calculation.tres" id="3_l5emy"]
|
|
||||||
[ext_resource type="Script" uid="uid://dhxfbxh54pyxp" path="res://addons/forge/resources/abilities/ForgeAbilityData.cs" id="3_w1wo0"]
|
[ext_resource type="Script" uid="uid://dhxfbxh54pyxp" path="res://addons/forge/resources/abilities/ForgeAbilityData.cs" id="3_w1wo0"]
|
||||||
[ext_resource type="Script" uid="uid://cn3b4ya15fg7e" path="res://addons/forge/resources/magnitudes/ForgeScalableFloat.cs" id="4_c4wry"]
|
[ext_resource type="Script" uid="uid://cn3b4ya15fg7e" path="res://addons/forge/resources/magnitudes/ForgeScalableFloat.cs" id="4_c4wry"]
|
||||||
[ext_resource type="Script" uid="uid://2gm1hdhi8u08" path="res://addons/forge/resources/magnitudes/ForgeModifierMagnitude.cs" id="5_0cyim"]
|
[ext_resource type="Script" uid="uid://2gm1hdhi8u08" path="res://addons/forge/resources/magnitudes/ForgeModifierMagnitude.cs" id="5_0cyim"]
|
||||||
|
|
||||||
[sub_resource type="Resource" id="Resource_0cyim"]
|
|
||||||
script = ExtResource("1_l0l1a")
|
|
||||||
BaseValue = 1
|
|
||||||
|
|
||||||
[sub_resource type="Resource" id="Resource_h8gc3"]
|
|
||||||
script = ExtResource("4_c4wry")
|
|
||||||
BaseValue = 1.0
|
|
||||||
|
|
||||||
[sub_resource type="Resource" id="Resource_ewmvj"]
|
|
||||||
script = ExtResource("4_c4wry")
|
|
||||||
|
|
||||||
[sub_resource type="Resource" id="Resource_8wvcn"]
|
|
||||||
script = ExtResource("4_c4wry")
|
|
||||||
|
|
||||||
[sub_resource type="Resource" id="Resource_no8t2"]
|
|
||||||
script = ExtResource("4_c4wry")
|
|
||||||
BaseValue = 1.0
|
|
||||||
|
|
||||||
[sub_resource type="Resource" id="Resource_vioyh"]
|
|
||||||
script = ExtResource("4_c4wry")
|
|
||||||
|
|
||||||
[sub_resource type="Resource" id="Resource_m6xnn"]
|
|
||||||
script = ExtResource("4_c4wry")
|
|
||||||
|
|
||||||
[sub_resource type="Resource" id="Resource_uinv8"]
|
|
||||||
script = ExtResource("4_c4wry")
|
|
||||||
BaseValue = 40.0
|
|
||||||
metadata/_custom_type_script = "uid://cn3b4ya15fg7e"
|
|
||||||
|
|
||||||
[sub_resource type="Resource" id="Resource_04hqa"]
|
|
||||||
script = ExtResource("3_c4wry")
|
|
||||||
Attribute = "MetaAttributeSet.IncomingDamage"
|
|
||||||
Operation = 2
|
|
||||||
ScalableFloat = SubResource("Resource_uinv8")
|
|
||||||
Coefficient = SubResource("Resource_no8t2")
|
|
||||||
PreMultiplyAdditiveValue = SubResource("Resource_m6xnn")
|
|
||||||
PostMultiplyAdditiveValue = SubResource("Resource_vioyh")
|
|
||||||
CalculatorCoefficient = SubResource("Resource_h8gc3")
|
|
||||||
CalculatorPreMultiplyAdditiveValue = SubResource("Resource_8wvcn")
|
|
||||||
CalculatorPostMultiplyAdditiveValue = SubResource("Resource_ewmvj")
|
|
||||||
metadata/_custom_type_script = "uid://bdfcavbjyhxxa"
|
|
||||||
|
|
||||||
[sub_resource type="Resource" id="Resource_8fbeq"]
|
|
||||||
script = ExtResource("1_l0l1a")
|
|
||||||
BaseValue = 1
|
|
||||||
|
|
||||||
[sub_resource type="Resource" id="Resource_ees2v"]
|
|
||||||
script = ExtResource("2_5vjbv")
|
|
||||||
Name = "Player Hit Effect"
|
|
||||||
Modifiers = Array[Object]([SubResource("Resource_04hqa")])
|
|
||||||
Components = Array[Object]([ExtResource("1_r7waw")])
|
|
||||||
Executions = Array[Object]([ExtResource("2_l5emy"), ExtResource("3_l5emy")])
|
|
||||||
StackLimit = SubResource("Resource_8fbeq")
|
|
||||||
InitialStack = SubResource("Resource_0cyim")
|
|
||||||
Cues = []
|
|
||||||
metadata/_custom_type_script = "uid://b83hf13nj37k3"
|
|
||||||
|
|
||||||
[sub_resource type="Resource" id="Resource_r7waw"]
|
[sub_resource type="Resource" id="Resource_r7waw"]
|
||||||
script = ExtResource("1_n2s8d")
|
script = ExtResource("1_n2s8d")
|
||||||
DamageEffect = SubResource("Resource_ees2v")
|
DamageEffect = ExtResource("1_c4wry")
|
||||||
Name = "PlayerHitEffect"
|
Name = "PlayerHitEffect"
|
||||||
Description = "Effect applied to target on player hit"
|
Description = "Effect applied to target on player hit"
|
||||||
metadata/_custom_type_script = "uid://n6efm5o4uxvr"
|
metadata/_custom_type_script = "uid://n6efm5o4uxvr"
|
||||||
|
|||||||
@@ -0,0 +1,63 @@
|
|||||||
|
[gd_resource type="Resource" script_class="ForgeAbilityData" format=3 uid="uid://0oo3na61ot1o"]
|
||||||
|
|
||||||
|
[ext_resource type="Resource" uid="uid://bk3rv5jrutfjw" path="res://forge/resources/tag_containers/on_weapon_plantedtick.tres" id="1_4dvtr"]
|
||||||
|
[ext_resource type="Script" uid="uid://br7ut4lbau66w" path="res://forge/calculators/ForgeRaiseEventTagExecution.cs" id="2_oo2u8"]
|
||||||
|
[ext_resource type="Script" uid="uid://dpakv7agvir6y" path="res://addons/forge/resources/ForgeTag.cs" id="2_wolay"]
|
||||||
|
[ext_resource type="Script" uid="uid://1hgogislo1l6" path="res://addons/forge/resources/magnitudes/ForgeScalableInt.cs" id="3_cykp3"]
|
||||||
|
[ext_resource type="Script" uid="uid://dhxfbxh54pyxp" path="res://addons/forge/resources/abilities/ForgeAbilityData.cs" id="3_mqsqr"]
|
||||||
|
[ext_resource type="Script" uid="uid://b83hf13nj37k3" path="res://addons/forge/resources/ForgeEffectData.cs" id="4_4348y"]
|
||||||
|
[ext_resource type="Script" uid="uid://cn3b4ya15fg7e" path="res://addons/forge/resources/magnitudes/ForgeScalableFloat.cs" id="4_oo2u8"]
|
||||||
|
[ext_resource type="Script" uid="uid://cl5hudinl1rex" path="res://forge/abilities/ForgeEffectApplicationBehavior.cs" id="5_drdls"]
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_l3tir"]
|
||||||
|
script = ExtResource("2_oo2u8")
|
||||||
|
EventTags = ExtResource("1_4dvtr")
|
||||||
|
metadata/_custom_type_script = "uid://br7ut4lbau66w"
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_yc0gp"]
|
||||||
|
script = ExtResource("3_cykp3")
|
||||||
|
BaseValue = 1
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_cykp3"]
|
||||||
|
script = ExtResource("4_oo2u8")
|
||||||
|
BaseValue = 0.5
|
||||||
|
metadata/_custom_type_script = "uid://cn3b4ya15fg7e"
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_rvogu"]
|
||||||
|
script = ExtResource("3_cykp3")
|
||||||
|
BaseValue = 1
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_hgeae"]
|
||||||
|
script = ExtResource("4_4348y")
|
||||||
|
Name = "Raise Planted Tick Periodically"
|
||||||
|
Modifiers = null
|
||||||
|
Components = null
|
||||||
|
Executions = Array[Object]([SubResource("Resource_l3tir")])
|
||||||
|
DurationType = 1
|
||||||
|
HasPeriodicApplication = true
|
||||||
|
Period = SubResource("Resource_cykp3")
|
||||||
|
ExecuteOnApplication = true
|
||||||
|
StackLimit = SubResource("Resource_rvogu")
|
||||||
|
InitialStack = SubResource("Resource_yc0gp")
|
||||||
|
Cues = null
|
||||||
|
metadata/_custom_type_script = "uid://b83hf13nj37k3"
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_jiqxq"]
|
||||||
|
script = ExtResource("5_drdls")
|
||||||
|
EffectData = SubResource("Resource_hgeae")
|
||||||
|
metadata/_custom_type_script = "uid://cl5hudinl1rex"
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_4aw8y"]
|
||||||
|
script = ExtResource("2_wolay")
|
||||||
|
Tag = "events.weapon.planted"
|
||||||
|
metadata/_custom_type_script = "uid://dpakv7agvir6y"
|
||||||
|
|
||||||
|
[resource]
|
||||||
|
script = ExtResource("3_mqsqr")
|
||||||
|
Name = "Weapon Planted Tick"
|
||||||
|
RetriggerInstancedAbility = true
|
||||||
|
CooldownEffects = []
|
||||||
|
AbilityBehavior = SubResource("Resource_jiqxq")
|
||||||
|
TriggerSource = 1
|
||||||
|
TriggerTag = SubResource("Resource_4aw8y")
|
||||||
|
metadata/_custom_type_script = "uid://dhxfbxh54pyxp"
|
||||||
@@ -6,5 +6,5 @@
|
|||||||
[resource]
|
[resource]
|
||||||
script = ExtResource("2_f5qgs")
|
script = ExtResource("2_f5qgs")
|
||||||
EffectData = ExtResource("1_hlq5f")
|
EffectData = ExtResource("1_hlq5f")
|
||||||
Name = "Flying tick application"
|
Name = "Planted tick application"
|
||||||
metadata/_custom_type_script = "uid://cl5hudinl1rex"
|
metadata/_custom_type_script = "uid://cl5hudinl1rex"
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ BaseValue = 1
|
|||||||
|
|
||||||
[resource]
|
[resource]
|
||||||
script = ExtResource("4_7ma6b")
|
script = ExtResource("4_7ma6b")
|
||||||
Name = "Call Flying Tick Event Periodically"
|
Name = "Call Planted Tick Event Periodically"
|
||||||
Modifiers = []
|
Modifiers = []
|
||||||
Components = []
|
Components = []
|
||||||
Executions = Array[Object]([ExtResource("1_cd13a")])
|
Executions = Array[Object]([ExtResource("1_cd13a")])
|
||||||
|
|||||||
66
forge/resources/effect_datas/simple_player_hit.tres
Normal file
66
forge/resources/effect_datas/simple_player_hit.tres
Normal file
@@ -0,0 +1,66 @@
|
|||||||
|
[gd_resource type="Resource" script_class="ForgeEffectData" format=3 uid="uid://bn1getr10b4dx"]
|
||||||
|
|
||||||
|
[ext_resource type="Resource" uid="uid://bpovqvlqv5bs5" path="res://forge/resources/effect_components/damageable.tres" id="1_uev3b"]
|
||||||
|
[ext_resource type="Resource" uid="uid://4rkwr10pc6tp" path="res://forge/resources/custom_executions/physical_damage_calculator.tres" id="2_o3goh"]
|
||||||
|
[ext_resource type="Resource" uid="uid://cc1qrmbp12fk8" path="res://forge/resources/custom_executions/player_hit_knoback_calculation.tres" id="3_bydif"]
|
||||||
|
[ext_resource type="Script" uid="uid://1hgogislo1l6" path="res://addons/forge/resources/magnitudes/ForgeScalableInt.cs" id="4_sd5hm"]
|
||||||
|
[ext_resource type="Script" uid="uid://cn3b4ya15fg7e" path="res://addons/forge/resources/magnitudes/ForgeScalableFloat.cs" id="5_l6rea"]
|
||||||
|
[ext_resource type="Script" uid="uid://bdfcavbjyhxxa" path="res://addons/forge/resources/ForgeModifier.cs" id="6_juqkp"]
|
||||||
|
[ext_resource type="Script" uid="uid://b83hf13nj37k3" path="res://addons/forge/resources/ForgeEffectData.cs" id="7_njbpb"]
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_0cyim"]
|
||||||
|
script = ExtResource("4_sd5hm")
|
||||||
|
BaseValue = 1
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_h8gc3"]
|
||||||
|
script = ExtResource("5_l6rea")
|
||||||
|
BaseValue = 1.0
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_ewmvj"]
|
||||||
|
script = ExtResource("5_l6rea")
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_8wvcn"]
|
||||||
|
script = ExtResource("5_l6rea")
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_no8t2"]
|
||||||
|
script = ExtResource("5_l6rea")
|
||||||
|
BaseValue = 1.0
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_vioyh"]
|
||||||
|
script = ExtResource("5_l6rea")
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_m6xnn"]
|
||||||
|
script = ExtResource("5_l6rea")
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_uinv8"]
|
||||||
|
script = ExtResource("5_l6rea")
|
||||||
|
BaseValue = 40.0
|
||||||
|
metadata/_custom_type_script = "uid://cn3b4ya15fg7e"
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_04hqa"]
|
||||||
|
script = ExtResource("6_juqkp")
|
||||||
|
Attribute = "MetaAttributeSet.IncomingDamage"
|
||||||
|
Operation = 2
|
||||||
|
ScalableFloat = SubResource("Resource_uinv8")
|
||||||
|
Coefficient = SubResource("Resource_no8t2")
|
||||||
|
PreMultiplyAdditiveValue = SubResource("Resource_m6xnn")
|
||||||
|
PostMultiplyAdditiveValue = SubResource("Resource_vioyh")
|
||||||
|
CalculatorCoefficient = SubResource("Resource_h8gc3")
|
||||||
|
CalculatorPreMultiplyAdditiveValue = SubResource("Resource_8wvcn")
|
||||||
|
CalculatorPostMultiplyAdditiveValue = SubResource("Resource_ewmvj")
|
||||||
|
metadata/_custom_type_script = "uid://bdfcavbjyhxxa"
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_8fbeq"]
|
||||||
|
script = ExtResource("4_sd5hm")
|
||||||
|
BaseValue = 1
|
||||||
|
|
||||||
|
[resource]
|
||||||
|
script = ExtResource("7_njbpb")
|
||||||
|
Name = "Player Hit Effect"
|
||||||
|
Modifiers = Array[Object]([SubResource("Resource_04hqa")])
|
||||||
|
Components = Array[Object]([ExtResource("1_uev3b")])
|
||||||
|
Executions = Array[Object]([ExtResource("2_o3goh"), ExtResource("3_bydif")])
|
||||||
|
StackLimit = SubResource("Resource_8fbeq")
|
||||||
|
InitialStack = SubResource("Resource_0cyim")
|
||||||
|
Cues = []
|
||||||
|
metadata/_custom_type_script = "uid://b83hf13nj37k3"
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
[gd_resource type="Resource" script_class="ForgeTagContainer" format=3 uid="uid://bk3rv5jrutfjw"]
|
||||||
|
|
||||||
|
[ext_resource type="Script" uid="uid://cw525n4mjqgw0" path="res://addons/forge/resources/ForgeTagContainer.cs" id="1_gt2iq"]
|
||||||
|
|
||||||
|
[resource]
|
||||||
|
script = ExtResource("1_gt2iq")
|
||||||
|
ContainerTags = Array[String](["events.weapon.plantedtick"])
|
||||||
|
metadata/_custom_type_script = "uid://cw525n4mjqgw0"
|
||||||
@@ -9,59 +9,69 @@ using Movementtests.systems;
|
|||||||
|
|
||||||
namespace Movementtests.managers;
|
namespace Movementtests.managers;
|
||||||
|
|
||||||
public partial class WeaponEventAbilityData(WeaponSystem.WeaponEvent forEvent, ForgeAbilityBehavior ability)
|
|
||||||
: RefCounted
|
|
||||||
{
|
|
||||||
public WeaponSystem.WeaponEvent ForEvent { get; private set; } = forEvent;
|
|
||||||
public ForgeAbilityBehavior Ability { get; private set; } = ability;
|
|
||||||
}
|
|
||||||
|
|
||||||
[GlobalClass, Meta(typeof(IAutoNode))]
|
[GlobalClass, Meta(typeof(IAutoNode))]
|
||||||
public partial class InventoryManager : Node, IDisposable
|
public partial class InventoryManager : Node, IDisposable
|
||||||
{
|
{
|
||||||
public override void _Notification(int what) => this.Notify(what);
|
public override void _Notification(int what) => this.Notify(what);
|
||||||
|
|
||||||
#region Signals
|
|
||||||
|
|
||||||
[Signal]
|
|
||||||
public delegate void WeaponEventAbilityAddedEventHandler(WeaponEventAbilityData data);
|
|
||||||
[Signal]
|
|
||||||
public delegate void WeaponEventAbilityRemovedEventHandler(WeaponEventAbilityData data);
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
private AutoSet<ForgeAbilityBehavior> _startedFlyingAbilities = new();
|
private AutoSet<ForgeAbilityBehavior> _startedFlyingAbilities = new();
|
||||||
private AutoSet<ForgeAbilityBehavior> _flyingTickAbilities = new();
|
private AutoSet<ForgeAbilityBehavior> _flyingTickAbilities = new();
|
||||||
private AutoSet<ForgeAbilityBehavior> _stoppedFlyingAbilities = new();
|
private AutoSet<ForgeAbilityBehavior> _stoppedFlyingAbilities = new();
|
||||||
|
|
||||||
|
private AutoSet<ForgeAbilityBehavior> _startedPlantedAbilities = new();
|
||||||
|
private AutoSet<ForgeAbilityBehavior> _plantedTickAbilities = new();
|
||||||
|
private AutoSet<ForgeAbilityBehavior> _stoppedPlantedAbilities = new();
|
||||||
|
|
||||||
public IAutoSet<ForgeAbilityBehavior> StartedFlyingAbilities => _startedFlyingAbilities;
|
public IAutoSet<ForgeAbilityBehavior> StartedFlyingAbilities => _startedFlyingAbilities;
|
||||||
public IAutoSet<ForgeAbilityBehavior> FlyingTickAbilities => _flyingTickAbilities;
|
public IAutoSet<ForgeAbilityBehavior> FlyingTickAbilities => _flyingTickAbilities;
|
||||||
public IAutoSet<ForgeAbilityBehavior> StoppedFlyingAbilities => _stoppedFlyingAbilities;
|
public IAutoSet<ForgeAbilityBehavior> StoppedFlyingAbilities => _stoppedFlyingAbilities;
|
||||||
|
|
||||||
|
public IAutoSet<ForgeAbilityBehavior> StartedPlantedAbilities => _startedPlantedAbilities;
|
||||||
|
public IAutoSet<ForgeAbilityBehavior> PlantedTickAbilities => _plantedTickAbilities;
|
||||||
|
public IAutoSet<ForgeAbilityBehavior> StoppedPlantedAbilities => _stoppedPlantedAbilities;
|
||||||
|
|
||||||
private readonly AutoMap<WeaponSystem.WeaponEvent, AutoSet<ForgeAbilityBehavior>> _weaponEventsInventory = new();
|
private readonly AutoMap<WeaponSystem.WeaponEvent, AutoSet<ForgeAbilityBehavior>> _weaponEventsInventory = new();
|
||||||
public IAutoMap<WeaponSystem.WeaponEvent, AutoSet<ForgeAbilityBehavior>> WeaponEventsInventory => _weaponEventsInventory;
|
public IAutoMap<WeaponSystem.WeaponEvent, AutoSet<ForgeAbilityBehavior>> WeaponEventsInventory => _weaponEventsInventory;
|
||||||
|
|
||||||
|
public Dictionary<WeaponSystem.WeaponEvent, AutoSet<ForgeAbilityBehavior>> GetEventElements()
|
||||||
|
{
|
||||||
|
return new Dictionary<WeaponSystem.WeaponEvent, AutoSet<ForgeAbilityBehavior>>
|
||||||
|
{
|
||||||
|
{ WeaponSystem.WeaponEvent.StartedFlying, _startedFlyingAbilities },
|
||||||
|
{ WeaponSystem.WeaponEvent.StoppedFlying, _stoppedFlyingAbilities},
|
||||||
|
{ WeaponSystem.WeaponEvent.FlyingTick, _flyingTickAbilities },
|
||||||
|
|
||||||
|
{ WeaponSystem.WeaponEvent.StartedPlanted, _startedPlantedAbilities },
|
||||||
|
{ WeaponSystem.WeaponEvent.StoppedPlanted, _stoppedPlantedAbilities },
|
||||||
|
{ WeaponSystem.WeaponEvent.PlantedTick, _plantedTickAbilities },
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
public void OnReady()
|
public void OnReady()
|
||||||
{
|
{
|
||||||
_weaponEventsInventory[WeaponSystem.WeaponEvent.StartedFlying] = _startedFlyingAbilities;
|
foreach (var (forEvent, behaviorSet) in GetEventElements())
|
||||||
_weaponEventsInventory[WeaponSystem.WeaponEvent.FlyingTick] = _flyingTickAbilities;
|
{
|
||||||
_weaponEventsInventory[WeaponSystem.WeaponEvent.StoppedFlying] = _stoppedFlyingAbilities;
|
_weaponEventsInventory[forEvent] = behaviorSet;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void InitializeFromResource(WeaponInventory inventory)
|
public void InitializeFromResource(WeaponInventory inventory)
|
||||||
{
|
{
|
||||||
_startedFlyingAbilities = new AutoSet<ForgeAbilityBehavior>(inventory.OnWeaponStartedFlyingAbilities);
|
var elements = GetEventElements();
|
||||||
_flyingTickAbilities = new AutoSet<ForgeAbilityBehavior>(inventory.OnWeaponFlyingTickAbilities);
|
foreach (var forEvent in elements.Keys)
|
||||||
_stoppedFlyingAbilities = new AutoSet<ForgeAbilityBehavior>(inventory.OnWeaponStoppedFlyingAbilities);
|
{
|
||||||
|
elements[forEvent] = new AutoSet<ForgeAbilityBehavior>(inventory.EventMap[forEvent]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public new void Dispose()
|
public new void Dispose()
|
||||||
{
|
{
|
||||||
GC.SuppressFinalize(this);
|
GC.SuppressFinalize(this);
|
||||||
|
|
||||||
_startedFlyingAbilities.Dispose();
|
foreach (var element in GetEventElements().Values)
|
||||||
_flyingTickAbilities.Dispose();
|
element.Dispose();
|
||||||
_stoppedFlyingAbilities.Dispose();
|
|
||||||
_weaponEventsInventory.Dispose();
|
_weaponEventsInventory.Dispose();
|
||||||
|
|
||||||
base.Dispose();
|
base.Dispose();
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using Gamesmiths.Forge.Godot.Resources.Abilities;
|
using Gamesmiths.Forge.Godot.Resources.Abilities;
|
||||||
using Godot;
|
using Godot;
|
||||||
|
using Movementtests.systems;
|
||||||
|
|
||||||
namespace Movementtests.managers;
|
namespace Movementtests.managers;
|
||||||
|
|
||||||
@@ -8,9 +9,13 @@ namespace Movementtests.managers;
|
|||||||
public partial class WeaponInventory(
|
public partial class WeaponInventory(
|
||||||
ForgeAbilityBehavior[] onWeaponStartedFlyingAbilities,
|
ForgeAbilityBehavior[] onWeaponStartedFlyingAbilities,
|
||||||
ForgeAbilityBehavior[] onWeaponFlyingTickAbilities,
|
ForgeAbilityBehavior[] onWeaponFlyingTickAbilities,
|
||||||
ForgeAbilityBehavior[] onWeaponStoppedFlyingAbilities
|
ForgeAbilityBehavior[] onWeaponStoppedFlyingAbilities,
|
||||||
|
ForgeAbilityBehavior[] onWeaponStartedPlantedAbilities,
|
||||||
|
ForgeAbilityBehavior[] onWeaponPlantedTickAbilities,
|
||||||
|
ForgeAbilityBehavior[] onWeaponStoppedPlantedAbilities
|
||||||
) : Resource
|
) : Resource
|
||||||
{
|
{
|
||||||
|
[ExportGroup("Flying abilities")]
|
||||||
[Export]
|
[Export]
|
||||||
public ForgeAbilityBehavior[] OnWeaponStartedFlyingAbilities { get; set; } = onWeaponStartedFlyingAbilities;
|
public ForgeAbilityBehavior[] OnWeaponStartedFlyingAbilities { get; set; } = onWeaponStartedFlyingAbilities;
|
||||||
[Export]
|
[Export]
|
||||||
@@ -18,5 +23,27 @@ public partial class WeaponInventory(
|
|||||||
[Export]
|
[Export]
|
||||||
public ForgeAbilityBehavior[] OnWeaponStoppedFlyingAbilities { get; set; } = onWeaponStoppedFlyingAbilities;
|
public ForgeAbilityBehavior[] OnWeaponStoppedFlyingAbilities { get; set; } = onWeaponStoppedFlyingAbilities;
|
||||||
|
|
||||||
public WeaponInventory() : this([], [], []) {}
|
[ExportGroup("Planted abilities")]
|
||||||
|
[Export]
|
||||||
|
public ForgeAbilityBehavior[] OnWeaponStartedPlantedAbilities { get; set; } = onWeaponStartedPlantedAbilities;
|
||||||
|
[Export]
|
||||||
|
public ForgeAbilityBehavior[] OnWeaponPlantedTickAbilities { get; set; } = onWeaponPlantedTickAbilities;
|
||||||
|
[Export]
|
||||||
|
public ForgeAbilityBehavior[] OnWeaponStoppedPlantedAbilities { get; set; } = onWeaponStoppedPlantedAbilities;
|
||||||
|
|
||||||
|
public Dictionary<WeaponSystem.WeaponEvent, ForgeAbilityBehavior[]> EventMap { get; private set; } = [];
|
||||||
|
|
||||||
|
public WeaponInventory() : this([], [], [], [], [], [])
|
||||||
|
{
|
||||||
|
EventMap = new Dictionary<WeaponSystem.WeaponEvent, ForgeAbilityBehavior[]>
|
||||||
|
{
|
||||||
|
{ WeaponSystem.WeaponEvent.StartedFlying, OnWeaponStartedFlyingAbilities },
|
||||||
|
{ WeaponSystem.WeaponEvent.StoppedFlying, OnWeaponStoppedFlyingAbilities },
|
||||||
|
{ WeaponSystem.WeaponEvent.FlyingTick, OnWeaponFlyingTickAbilities },
|
||||||
|
|
||||||
|
{ WeaponSystem.WeaponEvent.StartedPlanted, OnWeaponStartedPlantedAbilities },
|
||||||
|
{ WeaponSystem.WeaponEvent.StoppedPlanted, OnWeaponStoppedPlantedAbilities },
|
||||||
|
{ WeaponSystem.WeaponEvent.PlantedTick, OnWeaponPlantedTickAbilities },
|
||||||
|
};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -15,6 +15,11 @@ public partial class InventoryUi : Control, IDisposable
|
|||||||
{
|
{
|
||||||
public override void _Notification(int what) => this.Notify(what);
|
public override void _Notification(int what) => this.Notify(what);
|
||||||
|
|
||||||
|
public record struct EventElements(
|
||||||
|
AbilitySelection AbilitySelection,
|
||||||
|
AutoSet<ForgeAbilityBehavior>.Binding Binding,
|
||||||
|
IAutoSet<ForgeAbilityBehavior> Inventory);
|
||||||
|
|
||||||
#region Dependencies
|
#region Dependencies
|
||||||
[Dependency]
|
[Dependency]
|
||||||
public InventoryManager InventoryManager => this.DependOn<InventoryManager>();
|
public InventoryManager InventoryManager => this.DependOn<InventoryManager>();
|
||||||
@@ -27,53 +32,67 @@ public partial class InventoryUi : Control, IDisposable
|
|||||||
public required AbilitySelection WhileFlying { get; set; }
|
public required AbilitySelection WhileFlying { get; set; }
|
||||||
[Node]
|
[Node]
|
||||||
public required AbilitySelection StoppedFlying { get; set; }
|
public required AbilitySelection StoppedFlying { get; set; }
|
||||||
|
|
||||||
|
[Node]
|
||||||
|
public required AbilitySelection StartedPlanted { get; set; }
|
||||||
|
[Node]
|
||||||
|
public required AbilitySelection WhilePlanted { get; set; }
|
||||||
|
[Node]
|
||||||
|
public required AbilitySelection StoppedPlanted { get; set; }
|
||||||
#endregion Nodes
|
#endregion Nodes
|
||||||
|
|
||||||
public AutoSet<ForgeAbilityBehavior>.Binding StartedFlyingBinding { get; set; }
|
public required AutoSet<ForgeAbilityBehavior>.Binding StartedFlyingBinding { get; set; }
|
||||||
public AutoSet<ForgeAbilityBehavior>.Binding FlyingTickBinding { get; set; }
|
public required AutoSet<ForgeAbilityBehavior>.Binding FlyingTickBinding { get; set; }
|
||||||
public AutoSet<ForgeAbilityBehavior>.Binding StoppedFlyingBinding { get; set; }
|
public required AutoSet<ForgeAbilityBehavior>.Binding StoppedFlyingBinding { get; set; }
|
||||||
|
|
||||||
|
public required AutoSet<ForgeAbilityBehavior>.Binding StartedPlantedBinding { get; set; }
|
||||||
|
public required AutoSet<ForgeAbilityBehavior>.Binding PlantedTickBinding { get; set; }
|
||||||
|
public required AutoSet<ForgeAbilityBehavior>.Binding StoppedPlantedBinding { get; set; }
|
||||||
|
|
||||||
|
public Dictionary<WeaponSystem.WeaponEvent, EventElements> EventElementsMap { get; private set; } = [];
|
||||||
|
|
||||||
public void OnReady()
|
public void OnReady()
|
||||||
{
|
{
|
||||||
StartedFlying.AbilityAdded += AddAbilityForEvent;
|
|
||||||
WhileFlying.AbilityAdded += AddAbilityForEvent;
|
|
||||||
StoppedFlying.AbilityAdded += AddAbilityForEvent;
|
|
||||||
|
|
||||||
StartedFlying.AbilityRemoved += RemoveAbilityForEvent;
|
|
||||||
WhileFlying.AbilityRemoved += RemoveAbilityForEvent;
|
|
||||||
StoppedFlying.AbilityRemoved += RemoveAbilityForEvent;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void OnResolved()
|
public void OnResolved()
|
||||||
{
|
{
|
||||||
StartedFlying.Initialize(InventoryManager.WeaponEventsInventory[WeaponSystem.WeaponEvent.StartedFlying]);
|
EventElementsMap = new Dictionary<WeaponSystem.WeaponEvent, EventElements>
|
||||||
WhileFlying.Initialize(InventoryManager.WeaponEventsInventory[WeaponSystem.WeaponEvent.FlyingTick]);
|
{
|
||||||
StoppedFlying.Initialize(InventoryManager.WeaponEventsInventory[WeaponSystem.WeaponEvent.StoppedFlying]);
|
{ WeaponSystem.WeaponEvent.StartedFlying, new EventElements(StartedFlying, StartedFlyingBinding, InventoryManager.StartedFlyingAbilities) },
|
||||||
|
{ WeaponSystem.WeaponEvent.StoppedFlying, new EventElements(StoppedFlying, StoppedFlyingBinding, InventoryManager.StoppedFlyingAbilities)},
|
||||||
|
{ WeaponSystem.WeaponEvent.FlyingTick, new EventElements(WhileFlying, FlyingTickBinding, InventoryManager.FlyingTickAbilities) },
|
||||||
|
|
||||||
StartedFlyingBinding = InventoryManager.StartedFlyingAbilities.Bind();
|
{ WeaponSystem.WeaponEvent.StartedPlanted, new EventElements(StartedPlanted, StartedPlantedBinding, InventoryManager.StartedPlantedAbilities) },
|
||||||
StartedFlyingBinding
|
{ WeaponSystem.WeaponEvent.StoppedPlanted, new EventElements(StoppedPlanted, StoppedPlantedBinding, InventoryManager.StoppedPlantedAbilities) },
|
||||||
.OnAdd(behavior => OnWeaponEventInventoryAdded(WeaponSystem.WeaponEvent.StartedFlying, behavior))
|
{ WeaponSystem.WeaponEvent.PlantedTick, new EventElements(WhilePlanted, PlantedTickBinding, InventoryManager.PlantedTickAbilities) },
|
||||||
.OnRemove(behavior => OnWeaponEventInventoryRemoved(WeaponSystem.WeaponEvent.StartedFlying, behavior))
|
};
|
||||||
.OnClear(() => OnWeaponEventInventoryCleared(WeaponSystem.WeaponEvent.StartedFlying));
|
|
||||||
FlyingTickBinding = InventoryManager.FlyingTickAbilities.Bind();
|
foreach (var (forEvent, element) in EventElementsMap)
|
||||||
FlyingTickBinding
|
{
|
||||||
.OnAdd(behavior => OnWeaponEventInventoryAdded(WeaponSystem.WeaponEvent.FlyingTick, behavior))
|
element.AbilitySelection.AbilityAdded += AddAbilityForEvent;
|
||||||
.OnRemove(behavior => OnWeaponEventInventoryRemoved(WeaponSystem.WeaponEvent.FlyingTick, behavior))
|
element.AbilitySelection.AbilityRemoved += RemoveAbilityForEvent;
|
||||||
.OnClear(() => OnWeaponEventInventoryCleared(WeaponSystem.WeaponEvent.FlyingTick));
|
|
||||||
StoppedFlyingBinding = InventoryManager.StoppedFlyingAbilities.Bind();
|
var elem = EventElementsMap[forEvent];
|
||||||
StoppedFlyingBinding
|
elem.AbilitySelection.Initialize(InventoryManager.WeaponEventsInventory[forEvent]);
|
||||||
.OnAdd(behavior => OnWeaponEventInventoryAdded(WeaponSystem.WeaponEvent.StoppedFlying, behavior))
|
elem.Binding = element.Inventory.Bind();
|
||||||
.OnRemove(behavior => OnWeaponEventInventoryRemoved(WeaponSystem.WeaponEvent.StoppedFlying, behavior))
|
elem.Binding
|
||||||
.OnClear(() => OnWeaponEventInventoryCleared(WeaponSystem.WeaponEvent.StoppedFlying));
|
.OnAdd(behavior => OnWeaponEventInventoryAdded(forEvent, behavior))
|
||||||
|
.OnRemove(behavior => OnWeaponEventInventoryRemoved(forEvent, behavior))
|
||||||
|
.OnClear(() => OnWeaponEventInventoryCleared(forEvent));
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach (var forEvent in EventElementsMap.Keys)
|
||||||
|
{
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public new void Dispose()
|
public new void Dispose()
|
||||||
{
|
{
|
||||||
GC.SuppressFinalize(this);
|
GC.SuppressFinalize(this);
|
||||||
|
|
||||||
StartedFlying.Dispose();
|
foreach (var element in EventElementsMap.Values)
|
||||||
WhileFlying.Dispose();
|
element.Binding.Dispose();
|
||||||
StoppedFlying.Dispose();
|
|
||||||
|
|
||||||
base.Dispose();
|
base.Dispose();
|
||||||
}
|
}
|
||||||
@@ -108,13 +127,6 @@ public partial class InventoryUi : Control, IDisposable
|
|||||||
|
|
||||||
public AbilitySelection GetAbilitySelection(WeaponSystem.WeaponEvent forEvent)
|
public AbilitySelection GetAbilitySelection(WeaponSystem.WeaponEvent forEvent)
|
||||||
{
|
{
|
||||||
var abilitiesSelectionsMap = new Dictionary<WeaponSystem.WeaponEvent, AbilitySelection>
|
return EventElementsMap[forEvent].AbilitySelection;
|
||||||
{
|
|
||||||
{ WeaponSystem.WeaponEvent.StartedFlying, StartedFlying },
|
|
||||||
{ WeaponSystem.WeaponEvent.StoppedFlying, StoppedFlying },
|
|
||||||
{ WeaponSystem.WeaponEvent.FlyingTick, WhileFlying },
|
|
||||||
};
|
|
||||||
|
|
||||||
return abilitiesSelectionsMap[forEvent];
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -72,24 +72,47 @@ layout_mode = 2
|
|||||||
text = "Weapon abilities"
|
text = "Weapon abilities"
|
||||||
horizontal_alignment = 1
|
horizontal_alignment = 1
|
||||||
|
|
||||||
[node name="HBoxContainer" type="HBoxContainer" parent="Inventory/MenuPanelContainer/MarginContainer/BoxContainer/PlayerSectionMargin/PlayerSection" unique_id=75337901]
|
[node name="FlyingHBoxContainer" type="HBoxContainer" parent="Inventory/MenuPanelContainer/MarginContainer/BoxContainer/PlayerSectionMargin/PlayerSection" unique_id=75337901]
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
script = ExtResource("2_ijoei")
|
script = ExtResource("2_ijoei")
|
||||||
search_depth = 10
|
search_depth = 10
|
||||||
|
|
||||||
[node name="StartedFlying" parent="Inventory/MenuPanelContainer/MarginContainer/BoxContainer/PlayerSectionMargin/PlayerSection/HBoxContainer" unique_id=1373426933 instance=ExtResource("3_ijoei")]
|
[node name="StartedFlying" parent="Inventory/MenuPanelContainer/MarginContainer/BoxContainer/PlayerSectionMargin/PlayerSection/FlyingHBoxContainer" unique_id=1373426933 instance=ExtResource("3_ijoei")]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
Title = "Started flying"
|
Title = "Started flying"
|
||||||
|
|
||||||
[node name="WhileFlying" parent="Inventory/MenuPanelContainer/MarginContainer/BoxContainer/PlayerSectionMargin/PlayerSection/HBoxContainer" unique_id=1771285257 instance=ExtResource("3_ijoei")]
|
[node name="WhileFlying" parent="Inventory/MenuPanelContainer/MarginContainer/BoxContainer/PlayerSectionMargin/PlayerSection/FlyingHBoxContainer" unique_id=1771285257 instance=ExtResource("3_ijoei")]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
ForEvent = 2
|
ForEvent = 2
|
||||||
Title = "While flying"
|
Title = "While flying"
|
||||||
|
|
||||||
[node name="StoppedFlying" parent="Inventory/MenuPanelContainer/MarginContainer/BoxContainer/PlayerSectionMargin/PlayerSection/HBoxContainer" unique_id=324047638 instance=ExtResource("3_ijoei")]
|
[node name="StoppedFlying" parent="Inventory/MenuPanelContainer/MarginContainer/BoxContainer/PlayerSectionMargin/PlayerSection/FlyingHBoxContainer" unique_id=324047638 instance=ExtResource("3_ijoei")]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
ForEvent = 1
|
ForEvent = 1
|
||||||
Title = "Stopped flying"
|
Title = "Stopped flying"
|
||||||
|
|
||||||
|
[node name="PlantedHBoxContainer" type="HBoxContainer" parent="Inventory/MenuPanelContainer/MarginContainer/BoxContainer/PlayerSectionMargin/PlayerSection" unique_id=1198840955]
|
||||||
|
layout_mode = 2
|
||||||
|
script = ExtResource("2_ijoei")
|
||||||
|
search_depth = 10
|
||||||
|
|
||||||
|
[node name="StartedPlanted" parent="Inventory/MenuPanelContainer/MarginContainer/BoxContainer/PlayerSectionMargin/PlayerSection/PlantedHBoxContainer" unique_id=1231817717 instance=ExtResource("3_ijoei")]
|
||||||
|
unique_name_in_owner = true
|
||||||
|
layout_mode = 2
|
||||||
|
ForEvent = 3
|
||||||
|
Title = "On weapon planted"
|
||||||
|
|
||||||
|
[node name="WhilePlanted" parent="Inventory/MenuPanelContainer/MarginContainer/BoxContainer/PlayerSectionMargin/PlayerSection/PlantedHBoxContainer" unique_id=1222663623 instance=ExtResource("3_ijoei")]
|
||||||
|
unique_name_in_owner = true
|
||||||
|
layout_mode = 2
|
||||||
|
ForEvent = 5
|
||||||
|
Title = "While planted"
|
||||||
|
|
||||||
|
[node name="StoppedPlanted" parent="Inventory/MenuPanelContainer/MarginContainer/BoxContainer/PlayerSectionMargin/PlayerSection/PlantedHBoxContainer" unique_id=2136675723 instance=ExtResource("3_ijoei")]
|
||||||
|
unique_name_in_owner = true
|
||||||
|
layout_mode = 2
|
||||||
|
ForEvent = 4
|
||||||
|
Title = "On weapon unplanted"
|
||||||
|
|||||||
@@ -49,7 +49,10 @@ public partial class WeaponSystem : RigidBody3D, IForgeEntity
|
|||||||
{
|
{
|
||||||
StartedFlying,
|
StartedFlying,
|
||||||
StoppedFlying,
|
StoppedFlying,
|
||||||
FlyingTick
|
FlyingTick,
|
||||||
|
StartedPlanted,
|
||||||
|
StoppedPlanted,
|
||||||
|
PlantedTick
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
@@ -70,6 +73,10 @@ public partial class WeaponSystem : RigidBody3D, IForgeEntity
|
|||||||
private readonly Dictionary<ForgeAbilityBehavior, ActiveEffectHandle> _grantedWeaponStoppedFlyingAbilities = new();
|
private readonly Dictionary<ForgeAbilityBehavior, ActiveEffectHandle> _grantedWeaponStoppedFlyingAbilities = new();
|
||||||
private readonly Dictionary<ForgeAbilityBehavior, ActiveEffectHandle> _grantedWeaponFlyingTickAbilities = new();
|
private readonly Dictionary<ForgeAbilityBehavior, ActiveEffectHandle> _grantedWeaponFlyingTickAbilities = new();
|
||||||
|
|
||||||
|
private readonly Dictionary<ForgeAbilityBehavior, ActiveEffectHandle> _grantedWeaponStartedPlantedAbilities = new();
|
||||||
|
private readonly Dictionary<ForgeAbilityBehavior, ActiveEffectHandle> _grantedWeaponStoppedPlantedAbilities = new();
|
||||||
|
private readonly Dictionary<ForgeAbilityBehavior, ActiveEffectHandle> _grantedWeaponPlantedTickAbilities = new();
|
||||||
|
|
||||||
public Tag WeaponFlyingTickEventTag;
|
public Tag WeaponFlyingTickEventTag;
|
||||||
public Tag WeaponStartedFlyingEventTag;
|
public Tag WeaponStartedFlyingEventTag;
|
||||||
public Tag WeaponStoppedFlyingEventTag;
|
public Tag WeaponStoppedFlyingEventTag;
|
||||||
@@ -78,25 +85,32 @@ public partial class WeaponSystem : RigidBody3D, IForgeEntity
|
|||||||
public Tag WeaponPlantedToHandEventTag;
|
public Tag WeaponPlantedToHandEventTag;
|
||||||
public Tag WeaponPlantedToFlyingEventTag;
|
public Tag WeaponPlantedToFlyingEventTag;
|
||||||
public Tag WeaponPlantedEventTag;
|
public Tag WeaponPlantedEventTag;
|
||||||
|
public Tag WeaponPlantedTickEventTag;
|
||||||
|
public Tag WeaponUnplantedEventTag;
|
||||||
|
|
||||||
public Tag WeaponInHandStatusTag;
|
public Tag WeaponInHandStatusTag;
|
||||||
public Tag WeaponFlyingStatusTag;
|
public Tag WeaponFlyingStatusTag;
|
||||||
public Tag WeaponPlantedStatusTag;
|
public Tag WeaponPlantedStatusTag;
|
||||||
|
|
||||||
public Tag WeaponFlyingAbilityTag;
|
public Tag WeaponFlyingAbilityTag;
|
||||||
|
public Tag WeaponPlantedAbilityTag;
|
||||||
|
|
||||||
private AbilityHandle? _weaponFlyingAbility;
|
private AbilityHandle? _weaponFlyingAbility;
|
||||||
|
private AbilityHandle? _weaponPlantedAbility;
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Inspector
|
#region Inspector
|
||||||
[Export] public ForgeAbilityData? FlyingTickAbility { get; set; }
|
[ExportGroup("Throwing")]
|
||||||
|
|
||||||
[Export(PropertyHint.Range, "0,2,0.01,or_greater")]
|
[Export(PropertyHint.Range, "0,2,0.01,or_greater")]
|
||||||
public float ThrowForce { get; set; } = 1f;
|
public float ThrowForce { get; set; } = 1f;
|
||||||
[Export(PropertyHint.Range, "0,0.2,0.01,or_greater")]
|
[Export(PropertyHint.Range, "0,0.2,0.01,or_greater")]
|
||||||
public float StraightThrowDuration { get; set; } = 0.1f;
|
public float StraightThrowDuration { get; set; } = 0.1f;
|
||||||
|
|
||||||
|
[ExportGroup("Tick raising abilities")]
|
||||||
|
[Export] public ForgeAbilityData? FlyingTickAbility { get; set; }
|
||||||
|
[Export] public ForgeAbilityData? PlantedTickAbility { get; set; }
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region IForgeEntity
|
#region IForgeEntity
|
||||||
@@ -169,6 +183,9 @@ public partial class WeaponSystem : RigidBody3D, IForgeEntity
|
|||||||
|
|
||||||
private Vector3 _throwDirection;
|
private Vector3 _throwDirection;
|
||||||
|
|
||||||
|
private IForgeEntity? _plantedEntity;
|
||||||
|
private AbilityHandle? _plantedInEnemyHandle;
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
public void OnReady()
|
public void OnReady()
|
||||||
@@ -208,22 +225,33 @@ public partial class WeaponSystem : RigidBody3D, IForgeEntity
|
|||||||
WeaponPlantedToHandEventTag = Tag.RequestTag(TagsManager, "events.weapon.plantedToHand");
|
WeaponPlantedToHandEventTag = Tag.RequestTag(TagsManager, "events.weapon.plantedToHand");
|
||||||
WeaponPlantedToFlyingEventTag = Tag.RequestTag(TagsManager, "events.weapon.plantedToFlying");
|
WeaponPlantedToFlyingEventTag = Tag.RequestTag(TagsManager, "events.weapon.plantedToFlying");
|
||||||
WeaponPlantedEventTag = Tag.RequestTag(TagsManager, "events.weapon.planted");
|
WeaponPlantedEventTag = Tag.RequestTag(TagsManager, "events.weapon.planted");
|
||||||
|
WeaponPlantedTickEventTag = Tag.RequestTag(TagsManager, "events.weapon.plantedtick");
|
||||||
|
WeaponUnplantedEventTag = Tag.RequestTag(TagsManager, "events.weapon.unplanted");
|
||||||
|
|
||||||
// WeaponInHandStatusTag = Tag.RequestTag(TagsManager, "status.weapon.inHand");
|
// WeaponInHandStatusTag = Tag.RequestTag(TagsManager, "status.weapon.inHand");
|
||||||
// WeaponFlyingStatusTag = Tag.RequestTag(TagsManager, "status.weapon.flying");
|
// WeaponFlyingStatusTag = Tag.RequestTag(TagsManager, "status.weapon.flying");
|
||||||
// WeaponPlantedStatusTag = Tag.RequestTag(TagsManager, "status.weapon.planted");
|
// WeaponPlantedStatusTag = Tag.RequestTag(TagsManager, "status.weapon.planted");
|
||||||
|
|
||||||
// Manage weapon flying tick raising ability
|
// Manage weapon tick raising abilities
|
||||||
WeaponFlyingAbilityTag = Tag.RequestTag(TagsManager,"abilities.weapon.flying");
|
if (FlyingTickAbility != null)
|
||||||
_weaponFlyingAbility = Abilities.GrantAbilityPermanently(FlyingTickAbility.GetAbilityData(), 1, LevelComparison.None, this);
|
{
|
||||||
Events.Subscribe(WeaponStoppedFlyingEventTag, _ => { _weaponFlyingAbility.Cancel(); });
|
WeaponFlyingAbilityTag = Tag.RequestTag(TagsManager,"abilities.weapon.flying");
|
||||||
|
_weaponFlyingAbility = Abilities.GrantAbilityPermanently(FlyingTickAbility.GetAbilityData(), 1, LevelComparison.None, this);
|
||||||
|
Events.Subscribe(WeaponStoppedFlyingEventTag, _ => { _weaponFlyingAbility.Cancel(); });
|
||||||
|
}
|
||||||
|
if (PlantedTickAbility != null)
|
||||||
|
{
|
||||||
|
WeaponPlantedAbilityTag = Tag.RequestTag(TagsManager,"abilities.weapon.planted");
|
||||||
|
_weaponPlantedAbility = Abilities.GrantAbilityPermanently(PlantedTickAbility.GetAbilityData(), 1, LevelComparison.None, this);
|
||||||
|
Events.Subscribe(WeaponUnplantedEventTag, _ => { _weaponPlantedAbility.Cancel(); });
|
||||||
|
}
|
||||||
|
|
||||||
|
#region EventRaising
|
||||||
|
|
||||||
BodyEntered += OnThrownWeaponReachesGround;
|
BodyEntered += OnThrownWeaponReachesGround;
|
||||||
InHandState.StateExited += WeaponLeft;
|
InHandState.StateExited += WeaponLeft;
|
||||||
InHandState.StateEntered += WeaponBack;
|
InHandState.StateEntered += WeaponBack;
|
||||||
|
|
||||||
#region EventRaising
|
|
||||||
|
|
||||||
_handToFlying.Taken += () =>
|
_handToFlying.Taken += () =>
|
||||||
{
|
{
|
||||||
Events.Raise(new EventData
|
Events.Raise(new EventData
|
||||||
@@ -257,7 +285,15 @@ public partial class WeaponSystem : RigidBody3D, IForgeEntity
|
|||||||
Events.Raise(new EventData
|
Events.Raise(new EventData
|
||||||
{
|
{
|
||||||
EventTags = WeaponPlantedToHandEventTag.GetSingleTagContainer()!,
|
EventTags = WeaponPlantedToHandEventTag.GetSingleTagContainer()!,
|
||||||
Source = this
|
Source = this,
|
||||||
|
Target = _plantedEntity
|
||||||
|
});
|
||||||
|
|
||||||
|
Events.Raise(new EventData
|
||||||
|
{
|
||||||
|
EventTags = WeaponUnplantedEventTag.GetSingleTagContainer()!,
|
||||||
|
Source = this,
|
||||||
|
Target = _plantedEntity
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -273,6 +309,12 @@ public partial class WeaponSystem : RigidBody3D, IForgeEntity
|
|||||||
EventTags = WeaponStartedFlyingEventTag.GetSingleTagContainer()!,
|
EventTags = WeaponStartedFlyingEventTag.GetSingleTagContainer()!,
|
||||||
Source = this
|
Source = this
|
||||||
});
|
});
|
||||||
|
Events.Raise(new EventData
|
||||||
|
{
|
||||||
|
EventTags = WeaponUnplantedEventTag.GetSingleTagContainer()!,
|
||||||
|
Source = this,
|
||||||
|
Target = _plantedEntity
|
||||||
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
_toPlanted.Taken += () =>
|
_toPlanted.Taken += () =>
|
||||||
@@ -303,6 +345,9 @@ public partial class WeaponSystem : RigidBody3D, IForgeEntity
|
|||||||
{ WeaponEvent.StartedFlying, WeaponStartedFlyingEventTag },
|
{ WeaponEvent.StartedFlying, WeaponStartedFlyingEventTag },
|
||||||
{ WeaponEvent.StoppedFlying, WeaponStoppedFlyingEventTag },
|
{ WeaponEvent.StoppedFlying, WeaponStoppedFlyingEventTag },
|
||||||
{ WeaponEvent.FlyingTick, WeaponFlyingTickEventTag },
|
{ WeaponEvent.FlyingTick, WeaponFlyingTickEventTag },
|
||||||
|
{ WeaponEvent.StartedPlanted, WeaponPlantedEventTag },
|
||||||
|
{ WeaponEvent.StoppedPlanted, WeaponUnplantedEventTag },
|
||||||
|
{ WeaponEvent.PlantedTick, WeaponPlantedTickEventTag },
|
||||||
};
|
};
|
||||||
|
|
||||||
var ability = new AbilityData(
|
var ability = new AbilityData(
|
||||||
@@ -362,6 +407,10 @@ public partial class WeaponSystem : RigidBody3D, IForgeEntity
|
|||||||
{ WeaponEvent.StartedFlying, _grantedWeaponStartedFlyingAbilities },
|
{ WeaponEvent.StartedFlying, _grantedWeaponStartedFlyingAbilities },
|
||||||
{ WeaponEvent.StoppedFlying, _grantedWeaponStoppedFlyingAbilities },
|
{ WeaponEvent.StoppedFlying, _grantedWeaponStoppedFlyingAbilities },
|
||||||
{ WeaponEvent.FlyingTick, _grantedWeaponFlyingTickAbilities },
|
{ WeaponEvent.FlyingTick, _grantedWeaponFlyingTickAbilities },
|
||||||
|
|
||||||
|
{ WeaponEvent.StartedPlanted, _grantedWeaponStartedPlantedAbilities },
|
||||||
|
{ WeaponEvent.StoppedPlanted, _grantedWeaponStoppedPlantedAbilities },
|
||||||
|
{ WeaponEvent.PlantedTick, _grantedWeaponPlantedTickAbilities },
|
||||||
};
|
};
|
||||||
|
|
||||||
return abilitiesMap[forEvent];
|
return abilitiesMap[forEvent];
|
||||||
@@ -409,7 +458,6 @@ public partial class WeaponSystem : RigidBody3D, IForgeEntity
|
|||||||
tween.Finished += ThrowWeaponOnCurve;
|
tween.Finished += ThrowWeaponOnCurve;
|
||||||
}
|
}
|
||||||
|
|
||||||
private IForgeEntity? _plantedEntity;
|
|
||||||
public void PlantInEnemy(Node3D enemy)
|
public void PlantInEnemy(Node3D enemy)
|
||||||
{
|
{
|
||||||
GetTree().GetRoot().CallDeferred(Node.MethodName.RemoveChild, this);
|
GetTree().GetRoot().CallDeferred(Node.MethodName.RemoveChild, this);
|
||||||
@@ -417,11 +465,6 @@ public partial class WeaponSystem : RigidBody3D, IForgeEntity
|
|||||||
|
|
||||||
if (enemy is IForgeEntity victim) _plantedEntity = victim;
|
if (enemy is IForgeEntity victim) _plantedEntity = victim;
|
||||||
else _plantedEntity = null;
|
else _plantedEntity = null;
|
||||||
|
|
||||||
// if (enemy is IDamageable damageable)
|
|
||||||
// {
|
|
||||||
// damageable.TakeDamage(new DamageRecord(GlobalPosition, RDamage));
|
|
||||||
// }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void RethrowWeapon()
|
public void RethrowWeapon()
|
||||||
@@ -471,11 +514,9 @@ public partial class WeaponSystem : RigidBody3D, IForgeEntity
|
|||||||
{
|
{
|
||||||
base._IntegrateForces(state);
|
base._IntegrateForces(state);
|
||||||
|
|
||||||
if (!Freeze && state.GetContactCount() > 0)
|
if (Freeze || state.GetContactCount() <= 0) return;
|
||||||
{
|
PlantLocation = state.GetContactLocalPosition(0);
|
||||||
PlantLocation = state.GetContactLocalPosition(0);
|
PlantNormal = state.GetContactLocalNormal(0);
|
||||||
PlantNormal = state.GetContactLocalNormal(0);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void _Process(double delta)
|
public override void _Process(double delta)
|
||||||
|
|||||||
@@ -1,9 +1,11 @@
|
|||||||
[gd_scene format=3 uid="uid://ckm3d6k08a72u"]
|
[gd_scene format=3 uid="uid://ckm3d6k08a72u"]
|
||||||
|
|
||||||
[ext_resource type="Script" uid="uid://iii3wfto4t5b" path="res://scenes/player_controller/components/weapon/WeaponSystem.cs" id="1_csqwk"]
|
[ext_resource type="Script" uid="uid://iii3wfto4t5b" path="res://scenes/player_controller/components/weapon/WeaponSystem.cs" id="1_csqwk"]
|
||||||
|
[ext_resource type="Resource" uid="uid://dgjsi1my7nlnk" path="res://forge/resources/ability_datas/player_hit.tres" id="2_2wsgo"]
|
||||||
[ext_resource type="Script" uid="uid://cw525n4mjqgw0" path="res://addons/forge/resources/ForgeTagContainer.cs" id="2_l1xlx"]
|
[ext_resource type="Script" uid="uid://cw525n4mjqgw0" path="res://addons/forge/resources/ForgeTagContainer.cs" id="2_l1xlx"]
|
||||||
[ext_resource type="Script" uid="uid://cxihb42t2mfqi" path="res://addons/forge/nodes/ForgeAttributeSet.cs" id="3_3xjpi"]
|
[ext_resource type="Script" uid="uid://cxihb42t2mfqi" path="res://addons/forge/nodes/ForgeAttributeSet.cs" id="3_3xjpi"]
|
||||||
[ext_resource type="Script" uid="uid://couw105c3bde4" path="res://addons/godot_state_charts/state_chart.gd" id="3_5owyf"]
|
[ext_resource type="Script" uid="uid://couw105c3bde4" path="res://addons/godot_state_charts/state_chart.gd" id="3_5owyf"]
|
||||||
|
[ext_resource type="Resource" uid="uid://0oo3na61ot1o" path="res://forge/resources/ability_datas/weapon_planted_tick_ability.tres" id="3_7bruw"]
|
||||||
[ext_resource type="ArrayMesh" uid="uid://cho5fixitrbds" path="res://assets/meshes/swords/resources/sword23.tres" id="3_svc06"]
|
[ext_resource type="ArrayMesh" uid="uid://cho5fixitrbds" path="res://assets/meshes/swords/resources/sword23.tres" id="3_svc06"]
|
||||||
[ext_resource type="Resource" uid="uid://btnnpqann3ktp" path="res://forge/resources/ability_datas/weapon_flying_tick_ability.tres" id="4_7bruw"]
|
[ext_resource type="Resource" uid="uid://btnnpqann3ktp" path="res://forge/resources/ability_datas/weapon_flying_tick_ability.tres" id="4_7bruw"]
|
||||||
[ext_resource type="Script" uid="uid://ccovd5i0wr3kk" path="res://addons/forge/editor/attributes/AttributeValues.cs" id="4_q6xv7"]
|
[ext_resource type="Script" uid="uid://ccovd5i0wr3kk" path="res://addons/forge/editor/attributes/AttributeValues.cs" id="4_q6xv7"]
|
||||||
@@ -11,6 +13,15 @@
|
|||||||
[ext_resource type="Script" uid="uid://rpcbb54q4atx" path="res://forge/ForgeEntityNode.cs" id="5_7bruw"]
|
[ext_resource type="Script" uid="uid://rpcbb54q4atx" path="res://forge/ForgeEntityNode.cs" id="5_7bruw"]
|
||||||
[ext_resource type="Script" uid="uid://cytafq8i1y8qm" path="res://addons/godot_state_charts/atomic_state.gd" id="5_m0v1h"]
|
[ext_resource type="Script" uid="uid://cytafq8i1y8qm" path="res://addons/godot_state_charts/atomic_state.gd" id="5_m0v1h"]
|
||||||
[ext_resource type="Script" uid="uid://cf1nsco3w0mf6" path="res://addons/godot_state_charts/transition.gd" id="6_jpdh0"]
|
[ext_resource type="Script" uid="uid://cf1nsco3w0mf6" path="res://addons/godot_state_charts/transition.gd" id="6_jpdh0"]
|
||||||
|
[ext_resource type="Script" uid="uid://dps0oef50noil" path="res://addons/forge/nodes/ForgeEffect.cs" id="9_vs841"]
|
||||||
|
[ext_resource type="Resource" uid="uid://bn1getr10b4dx" path="res://forge/resources/effect_datas/simple_player_hit.tres" id="10_fyov3"]
|
||||||
|
[ext_resource type="Script" uid="uid://1hgogislo1l6" path="res://addons/forge/resources/magnitudes/ForgeScalableInt.cs" id="10_rgbou"]
|
||||||
|
[ext_resource type="Script" uid="uid://b83hf13nj37k3" path="res://addons/forge/resources/ForgeEffectData.cs" id="11_fyov3"]
|
||||||
|
[ext_resource type="Script" uid="uid://n6efm5o4uxvr" path="res://forge/abilities/ForgeSimpleHitBehavior.cs" id="12_2o32x"]
|
||||||
|
[ext_resource type="Script" uid="uid://dpakv7agvir6y" path="res://addons/forge/resources/ForgeTag.cs" id="12_fyov3"]
|
||||||
|
[ext_resource type="Script" uid="uid://dhxfbxh54pyxp" path="res://addons/forge/resources/abilities/ForgeAbilityData.cs" id="13_i0iid"]
|
||||||
|
[ext_resource type="Script" uid="uid://72kj3n4lm1em" path="res://addons/forge/resources/components/ForgeGrantAbilityConfig.cs" id="14_i0jsb"]
|
||||||
|
[ext_resource type="Script" uid="uid://b3wo2uge4ddnj" path="res://addons/forge/resources/components/GrantAbility.cs" id="15_a8u16"]
|
||||||
|
|
||||||
[sub_resource type="Resource" id="Resource_7bruw"]
|
[sub_resource type="Resource" id="Resource_7bruw"]
|
||||||
script = ExtResource("2_l1xlx")
|
script = ExtResource("2_l1xlx")
|
||||||
@@ -23,6 +34,62 @@ Default = 1
|
|||||||
Min = 1
|
Min = 1
|
||||||
Max = 100
|
Max = 100
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_weq0w"]
|
||||||
|
script = ExtResource("12_2o32x")
|
||||||
|
DamageEffect = ExtResource("10_fyov3")
|
||||||
|
Name = "On planted simple hit"
|
||||||
|
Description = "Causes hit on enemy planted"
|
||||||
|
metadata/_custom_type_script = "uid://n6efm5o4uxvr"
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_2o32x"]
|
||||||
|
script = ExtResource("12_fyov3")
|
||||||
|
Tag = "events.weapon.planted"
|
||||||
|
metadata/_custom_type_script = "uid://dpakv7agvir6y"
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_bua0c"]
|
||||||
|
script = ExtResource("13_i0iid")
|
||||||
|
Name = "On Planted in Enemy"
|
||||||
|
InstancingPolicy = 1
|
||||||
|
CooldownEffects = []
|
||||||
|
AbilityBehavior = SubResource("Resource_weq0w")
|
||||||
|
TriggerSource = 1
|
||||||
|
TriggerTag = SubResource("Resource_2o32x")
|
||||||
|
metadata/_custom_type_script = "uid://dhxfbxh54pyxp"
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_xhc8e"]
|
||||||
|
script = ExtResource("10_rgbou")
|
||||||
|
BaseValue = 1
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_hnni7"]
|
||||||
|
script = ExtResource("14_i0jsb")
|
||||||
|
AbilityData = SubResource("Resource_bua0c")
|
||||||
|
AbilityLevel = SubResource("Resource_xhc8e")
|
||||||
|
metadata/_custom_type_script = "uid://72kj3n4lm1em"
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_rr8s3"]
|
||||||
|
script = ExtResource("15_a8u16")
|
||||||
|
GrantAbilityConfigs = [SubResource("Resource_hnni7")]
|
||||||
|
metadata/_custom_type_script = "uid://b3wo2uge4ddnj"
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_8jrha"]
|
||||||
|
script = ExtResource("10_rgbou")
|
||||||
|
BaseValue = 1
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_l026a"]
|
||||||
|
script = ExtResource("10_rgbou")
|
||||||
|
BaseValue = 1
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_x33lk"]
|
||||||
|
script = ExtResource("11_fyov3")
|
||||||
|
Name = "Grant abilities"
|
||||||
|
Modifiers = []
|
||||||
|
Components = Array[Object]([SubResource("Resource_rr8s3")])
|
||||||
|
Executions = []
|
||||||
|
StackLimit = SubResource("Resource_l026a")
|
||||||
|
InitialStack = SubResource("Resource_8jrha")
|
||||||
|
Cues = []
|
||||||
|
metadata/_custom_type_script = "uid://b83hf13nj37k3"
|
||||||
|
|
||||||
[sub_resource type="CylinderShape3D" id="CylinderShape3D_avini"]
|
[sub_resource type="CylinderShape3D" id="CylinderShape3D_avini"]
|
||||||
height = 1.0
|
height = 1.0
|
||||||
radius = 0.1
|
radius = 0.1
|
||||||
@@ -58,7 +125,9 @@ continuous_cd = true
|
|||||||
contact_monitor = true
|
contact_monitor = true
|
||||||
max_contacts_reported = 1
|
max_contacts_reported = 1
|
||||||
script = ExtResource("1_csqwk")
|
script = ExtResource("1_csqwk")
|
||||||
|
OnPlantedInEnemy = ExtResource("2_2wsgo")
|
||||||
FlyingTickAbility = ExtResource("4_7bruw")
|
FlyingTickAbility = ExtResource("4_7bruw")
|
||||||
|
PlantedTickAbility = ExtResource("3_7bruw")
|
||||||
|
|
||||||
[node name="ForgeEntityNode" type="Node3D" parent="." unique_id=1798885192]
|
[node name="ForgeEntityNode" type="Node3D" parent="." unique_id=1798885192]
|
||||||
script = ExtResource("5_7bruw")
|
script = ExtResource("5_7bruw")
|
||||||
@@ -73,6 +142,11 @@ InitialAttributeValues = Dictionary[String, ExtResource("4_q6xv7")]({
|
|||||||
})
|
})
|
||||||
metadata/_custom_type_script = "uid://cxihb42t2mfqi"
|
metadata/_custom_type_script = "uid://cxihb42t2mfqi"
|
||||||
|
|
||||||
|
[node name="GrantAbilities" type="Node" parent="ForgeEntityNode" unique_id=180593118]
|
||||||
|
script = ExtResource("9_vs841")
|
||||||
|
EffectData = SubResource("Resource_x33lk")
|
||||||
|
metadata/_custom_type_script = "uid://dps0oef50noil"
|
||||||
|
|
||||||
[node name="WeaponFlyingTick" type="Timer" parent="." unique_id=656309486]
|
[node name="WeaponFlyingTick" type="Timer" parent="." unique_id=656309486]
|
||||||
wait_time = 0.2
|
wait_time = 0.2
|
||||||
|
|
||||||
|
|||||||
@@ -60,6 +60,10 @@ public partial class PlayerController : CharacterBody3D, IForgeEntity, ICueHandl
|
|||||||
MantleDash
|
MantleDash
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public record struct EventElements(
|
||||||
|
AutoSet<ForgeAbilityBehavior>.Binding Binding,
|
||||||
|
IAutoSet<ForgeAbilityBehavior> Inventory);
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Forge
|
#region Forge
|
||||||
@@ -111,6 +115,16 @@ public partial class PlayerController : CharacterBody3D, IForgeEntity, ICueHandl
|
|||||||
public required EventManager Events { get; set; }
|
public required EventManager Events { get; set; }
|
||||||
public required Variables SharedVariables { get; set; }
|
public required Variables SharedVariables { get; set; }
|
||||||
|
|
||||||
|
public Dictionary<WeaponSystem.WeaponEvent, EventElements> EventElementsMap { get; private set; } = [];
|
||||||
|
|
||||||
|
public AutoSet<ForgeAbilityBehavior>.Binding StartedFlyingBinding { get; set; }
|
||||||
|
public AutoSet<ForgeAbilityBehavior>.Binding FlyingTickBinding { get; set; }
|
||||||
|
public AutoSet<ForgeAbilityBehavior>.Binding StoppedFlyingBinding { get; set; }
|
||||||
|
|
||||||
|
public AutoSet<ForgeAbilityBehavior>.Binding StartedPlantedBinding { get; set; }
|
||||||
|
public AutoSet<ForgeAbilityBehavior>.Binding PlantedTickBinding { get; set; }
|
||||||
|
public AutoSet<ForgeAbilityBehavior>.Binding StoppedPlantedBinding { get; set; }
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Inspector
|
#region Inspector
|
||||||
@@ -729,37 +743,34 @@ public partial class PlayerController : CharacterBody3D, IForgeEntity, ICueHandl
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Inventory changes signal binding
|
// Inventory changes signal binding
|
||||||
StartedFlyingBinding = InventoryManager.StartedFlyingAbilities.Bind();
|
EventElementsMap = new Dictionary<WeaponSystem.WeaponEvent, EventElements>
|
||||||
StartedFlyingBinding
|
{
|
||||||
.OnAdd(behavior => WeaponSystem.GrantNewAbilityForEvent(WeaponSystem.WeaponEvent.StartedFlying, behavior))
|
{ WeaponSystem.WeaponEvent.StartedFlying, new EventElements(StartedFlyingBinding, InventoryManager.StartedFlyingAbilities) },
|
||||||
.OnRemove(behavior => WeaponSystem.RemoveAbilityForEvent(WeaponSystem.WeaponEvent.StartedFlying, behavior))
|
{ WeaponSystem.WeaponEvent.StoppedFlying, new EventElements(StoppedFlyingBinding, InventoryManager.StoppedFlyingAbilities)},
|
||||||
.OnClear(() => WeaponSystem.RemoveAbilitiesForEvent(WeaponSystem.WeaponEvent.StartedFlying));
|
{ WeaponSystem.WeaponEvent.FlyingTick, new EventElements(FlyingTickBinding, InventoryManager.FlyingTickAbilities) },
|
||||||
FlyingTickBinding = InventoryManager.FlyingTickAbilities.Bind();
|
|
||||||
FlyingTickBinding
|
|
||||||
.OnAdd(behavior => WeaponSystem.GrantNewAbilityForEvent(WeaponSystem.WeaponEvent.FlyingTick, behavior))
|
|
||||||
.OnRemove(behavior => WeaponSystem.RemoveAbilityForEvent(WeaponSystem.WeaponEvent.FlyingTick, behavior))
|
|
||||||
.OnClear(() => WeaponSystem.RemoveAbilitiesForEvent(WeaponSystem.WeaponEvent.FlyingTick));
|
|
||||||
StoppedFlyingBinding = InventoryManager.StoppedFlyingAbilities.Bind();
|
|
||||||
StoppedFlyingBinding
|
|
||||||
.OnAdd(behavior => WeaponSystem.GrantNewAbilityForEvent(WeaponSystem.WeaponEvent.StoppedFlying, behavior))
|
|
||||||
.OnRemove(behavior => WeaponSystem.RemoveAbilityForEvent(WeaponSystem.WeaponEvent.StoppedFlying, behavior))
|
|
||||||
.OnClear(() => WeaponSystem.RemoveAbilitiesForEvent(WeaponSystem.WeaponEvent.StoppedFlying));
|
|
||||||
|
|
||||||
// InventoryManager.WeaponEventAbilityAdded += OnWeaponEventAbilityAdded;
|
{ WeaponSystem.WeaponEvent.StartedPlanted, new EventElements(StartedPlantedBinding, InventoryManager.StartedPlantedAbilities) },
|
||||||
// InventoryManager.WeaponEventAbilityRemoved += OnWeaponEventAbilityRemoved;
|
{ WeaponSystem.WeaponEvent.StoppedPlanted, new EventElements(StoppedPlantedBinding, InventoryManager.StoppedPlantedAbilities) },
|
||||||
|
{ WeaponSystem.WeaponEvent.PlantedTick, new EventElements(PlantedTickBinding, InventoryManager.PlantedTickAbilities) },
|
||||||
|
};
|
||||||
|
|
||||||
|
foreach (var forEvent in EventElementsMap.Keys)
|
||||||
|
{
|
||||||
|
var element = EventElementsMap[forEvent];
|
||||||
|
element.Binding = element.Inventory.Bind();
|
||||||
|
element.Binding
|
||||||
|
.OnAdd(behavior => WeaponSystem.GrantNewAbilityForEvent(forEvent, behavior))
|
||||||
|
.OnRemove(behavior => WeaponSystem.RemoveAbilityForEvent(forEvent, behavior))
|
||||||
|
.OnClear(() => WeaponSystem.RemoveAbilitiesForEvent(forEvent));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public AutoSet<ForgeAbilityBehavior>.Binding StartedFlyingBinding { get; set; }
|
|
||||||
public AutoSet<ForgeAbilityBehavior>.Binding FlyingTickBinding { get; set; }
|
|
||||||
public AutoSet<ForgeAbilityBehavior>.Binding StoppedFlyingBinding { get; set; }
|
|
||||||
|
|
||||||
public new void Dispose()
|
public new void Dispose()
|
||||||
{
|
{
|
||||||
GC.SuppressFinalize(this);
|
GC.SuppressFinalize(this);
|
||||||
|
|
||||||
StartedFlyingBinding.Dispose();
|
foreach (var element in EventElementsMap.Values)
|
||||||
FlyingTickBinding.Dispose();
|
element.Binding.Dispose();
|
||||||
StoppedFlyingBinding.Dispose();
|
|
||||||
|
|
||||||
base.Dispose();
|
base.Dispose();
|
||||||
}
|
}
|
||||||
@@ -801,16 +812,6 @@ public partial class PlayerController : CharacterBody3D, IForgeEntity, ICueHandl
|
|||||||
out var failures);
|
out var failures);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void OnWeaponEventAbilityAdded(WeaponEventAbilityData data)
|
|
||||||
{
|
|
||||||
WeaponSystem.GrantNewAbilityForEvent(data.ForEvent, data.Ability);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void OnWeaponEventAbilityRemoved(WeaponEventAbilityData data)
|
|
||||||
{
|
|
||||||
WeaponSystem.RemoveAbilityForEvent(data.ForEvent, data.Ability);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Settings
|
#region Settings
|
||||||
|
|||||||
Reference in New Issue
Block a user