empowered action as a forge ability
This commit is contained in:
@@ -125,6 +125,7 @@
|
|||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Folder Include="addons\" />
|
<Folder Include="addons\" />
|
||||||
|
<Folder Include="forge\" />
|
||||||
<Folder Include="tests\" />
|
<Folder Include="tests\" />
|
||||||
<Folder Include="tools\" />
|
<Folder Include="tools\" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|||||||
@@ -1,56 +0,0 @@
|
|||||||
using Gamesmiths.Forge.Abilities;
|
|
||||||
using Gamesmiths.Forge.Effects;
|
|
||||||
using Gamesmiths.Forge.Effects.Components;
|
|
||||||
using Gamesmiths.Forge.Effects.Duration;
|
|
||||||
using Gamesmiths.Forge.Effects.Magnitudes;
|
|
||||||
using Gamesmiths.Forge.Effects.Modifiers;
|
|
||||||
using Gamesmiths.Forge.Tags;
|
|
||||||
|
|
||||||
namespace Movementtests.forge.abilities;
|
|
||||||
|
|
||||||
public class EmpoweredAction(TagsManager tagsManager)
|
|
||||||
{
|
|
||||||
public EffectData EmpoweredActionCostEffect = new(
|
|
||||||
"Empowered Action Mana Cost",
|
|
||||||
new DurationData(DurationType.Instant),
|
|
||||||
new[] {
|
|
||||||
new Modifier(
|
|
||||||
"PlayerAttributeSet.Mana",
|
|
||||||
ModifierOperation.FlatBonus,
|
|
||||||
new ModifierMagnitude(
|
|
||||||
MagnitudeCalculationType.ScalableFloat,
|
|
||||||
new ScalableFloat(-20)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
});
|
|
||||||
|
|
||||||
public EffectData EmpoweredActionCooldown = new(
|
|
||||||
"Empowered Action Cooldown",
|
|
||||||
new DurationData(
|
|
||||||
DurationType.HasDuration,
|
|
||||||
new ModifierMagnitude(
|
|
||||||
MagnitudeCalculationType.ScalableFloat,
|
|
||||||
new ScalableFloat(1.0f))),
|
|
||||||
effectComponents: new[] {
|
|
||||||
new ModifierTagsEffectComponent(
|
|
||||||
tagsManager.RequestTagContainer(new[] { "cooldown.empoweredAction" })
|
|
||||||
)
|
|
||||||
});
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public class EmpoweredActionBehavior : IAbilityBehavior
|
|
||||||
{
|
|
||||||
public void OnStarted(AbilityBehaviorContext context)
|
|
||||||
{
|
|
||||||
// Apply costs and cooldowns
|
|
||||||
context.AbilityHandle.CommitAbility();
|
|
||||||
context.InstanceHandle.End();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void OnEnded(AbilityBehaviorContext context)
|
|
||||||
{
|
|
||||||
// Do any necessary cleanups
|
|
||||||
}
|
|
||||||
}
|
|
||||||
75
forge/abilities/REmpoweredAction.cs
Normal file
75
forge/abilities/REmpoweredAction.cs
Normal file
@@ -0,0 +1,75 @@
|
|||||||
|
using Gamesmiths.Forge.Abilities;
|
||||||
|
using Gamesmiths.Forge.Effects;
|
||||||
|
using Gamesmiths.Forge.Effects.Components;
|
||||||
|
using Gamesmiths.Forge.Effects.Duration;
|
||||||
|
using Gamesmiths.Forge.Effects.Magnitudes;
|
||||||
|
using Gamesmiths.Forge.Effects.Modifiers;
|
||||||
|
using Gamesmiths.Forge.Tags;
|
||||||
|
using Godot;
|
||||||
|
|
||||||
|
namespace Movementtests.forge.abilities;
|
||||||
|
|
||||||
|
[GlobalClass, Icon("res://assets/ui/IconGodotNode/white/icon_animation.png")]
|
||||||
|
public partial class REmpoweredAction(float cost, float cooldown) : Resource
|
||||||
|
{
|
||||||
|
[Export(PropertyHint.Range, "0,100,1,or_greater")]
|
||||||
|
public float Cost { get; set; } = cost;
|
||||||
|
|
||||||
|
[Export(PropertyHint.Range, "0,10,0.1,or_greater")]
|
||||||
|
public float Cooldown { get; set; } = cooldown;
|
||||||
|
|
||||||
|
public REmpoweredAction() : this(20.0f, 1.0f)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public EffectData CostEffect()
|
||||||
|
{
|
||||||
|
return new(
|
||||||
|
"Empowered Action Mana Cost",
|
||||||
|
new DurationData(DurationType.Instant),
|
||||||
|
new[]
|
||||||
|
{
|
||||||
|
new Modifier(
|
||||||
|
"PlayerAttributeSet.Mana",
|
||||||
|
ModifierOperation.FlatBonus,
|
||||||
|
new ModifierMagnitude(
|
||||||
|
MagnitudeCalculationType.ScalableFloat,
|
||||||
|
new ScalableFloat(-Cost)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public EffectData CooldownEffect(TagsManager tagsManager)
|
||||||
|
{
|
||||||
|
return new(
|
||||||
|
"Empowered Action Cooldown",
|
||||||
|
new DurationData(
|
||||||
|
DurationType.HasDuration,
|
||||||
|
new ModifierMagnitude(
|
||||||
|
MagnitudeCalculationType.ScalableFloat,
|
||||||
|
new ScalableFloat(Cooldown))),
|
||||||
|
effectComponents: new[]
|
||||||
|
{
|
||||||
|
new ModifierTagsEffectComponent(
|
||||||
|
tagsManager.RequestTagContainer(new[] { "cooldown.empoweredAction" })
|
||||||
|
)
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public class EmpoweredActionBehavior : IAbilityBehavior
|
||||||
|
{
|
||||||
|
public void OnStarted(AbilityBehaviorContext context)
|
||||||
|
{
|
||||||
|
// Apply costs and cooldowns
|
||||||
|
context.AbilityHandle.CommitAbility();
|
||||||
|
context.InstanceHandle.End();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void OnEnded(AbilityBehaviorContext context)
|
||||||
|
{
|
||||||
|
// Do any necessary cleanups
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -3,14 +3,10 @@ using System;
|
|||||||
using Movementtests.interfaces;
|
using Movementtests.interfaces;
|
||||||
|
|
||||||
[GlobalClass, Icon("res://assets/ui/IconGodotNode/white/icon_heart.png")]
|
[GlobalClass, Icon("res://assets/ui/IconGodotNode/white/icon_heart.png")]
|
||||||
public partial class RHealth : Resource
|
public partial class RHealth(float startingHealth) : Resource
|
||||||
{
|
{
|
||||||
[Export]
|
[Export]
|
||||||
public float StartingHealth { get; set;}
|
public float StartingHealth { get; set;} = startingHealth;
|
||||||
|
|
||||||
public RHealth() : this(100.0f) {}
|
public RHealth() : this(100.0f) {}
|
||||||
public RHealth(float startingHealth)
|
|
||||||
{
|
|
||||||
StartingHealth = startingHealth;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,6 +17,7 @@
|
|||||||
[ext_resource type="Resource" uid="uid://t612lts1wi1s" path="res://inputs/base_mode/move_right.tres" id="6_q7bng"]
|
[ext_resource type="Resource" uid="uid://t612lts1wi1s" path="res://inputs/base_mode/move_right.tres" id="6_q7bng"]
|
||||||
[ext_resource type="Script" uid="uid://cwbvxlfvmocc1" path="res://scenes/player_controller/scripts/StairsSystem.cs" id="7_bmt5a"]
|
[ext_resource type="Script" uid="uid://cwbvxlfvmocc1" path="res://scenes/player_controller/scripts/StairsSystem.cs" id="7_bmt5a"]
|
||||||
[ext_resource type="Resource" uid="uid://brswsknpgwal2" path="res://inputs/base_mode/move_front.tres" id="7_m8gvy"]
|
[ext_resource type="Resource" uid="uid://brswsknpgwal2" path="res://inputs/base_mode/move_front.tres" id="7_m8gvy"]
|
||||||
|
[ext_resource type="Resource" uid="uid://7dpkk5rk3di5" path="res://scenes/player_controller/resources/forge_empowered_action.tres" id="7_qheee"]
|
||||||
[ext_resource type="PackedScene" uid="uid://bctpe34ddamg5" path="res://scenes/components/knockback/CKnockback.tscn" id="7_x835q"]
|
[ext_resource type="PackedScene" uid="uid://bctpe34ddamg5" path="res://scenes/components/knockback/CKnockback.tscn" id="7_x835q"]
|
||||||
[ext_resource type="Resource" uid="uid://s1l0n1iitc6m" path="res://inputs/base_mode/move_back.tres" id="8_jb43f"]
|
[ext_resource type="Resource" uid="uid://s1l0n1iitc6m" path="res://inputs/base_mode/move_back.tres" id="8_jb43f"]
|
||||||
[ext_resource type="Resource" uid="uid://j1o5ud0plk4" path="res://inputs/base_mode/aim_release.tres" id="8_lhb11"]
|
[ext_resource type="Resource" uid="uid://j1o5ud0plk4" path="res://inputs/base_mode/aim_release.tres" id="8_lhb11"]
|
||||||
@@ -162,6 +163,7 @@ MinimumWallRunUpwardSpeed = 4.0
|
|||||||
MinimumWallRunHorizontalSpeed = 8.0
|
MinimumWallRunHorizontalSpeed = 8.0
|
||||||
WallRunAltitudeLossSpeed = 8.0
|
WallRunAltitudeLossSpeed = 8.0
|
||||||
WallRunSpeedThreshold = 1.0
|
WallRunSpeedThreshold = 1.0
|
||||||
|
EmpoweredAction = ExtResource("7_qheee")
|
||||||
|
|
||||||
[node name="CHealth" parent="." unique_id=1244478698 instance=ExtResource("3_q7bng")]
|
[node name="CHealth" parent="." unique_id=1244478698 instance=ExtResource("3_q7bng")]
|
||||||
RHealth = ExtResource("4_m8gvy")
|
RHealth = ExtResource("4_m8gvy")
|
||||||
|
|||||||
@@ -0,0 +1,9 @@
|
|||||||
|
[gd_resource type="Resource" script_class="REmpoweredAction" format=3 uid="uid://7dpkk5rk3di5"]
|
||||||
|
|
||||||
|
[ext_resource type="Script" uid="uid://d0l07gcx1ef18" path="res://forge/abilities/REmpoweredAction.cs" id="1_1rxoq"]
|
||||||
|
|
||||||
|
[resource]
|
||||||
|
script = ExtResource("1_1rxoq")
|
||||||
|
Cost = 50.0
|
||||||
|
Cooldown = 1.0
|
||||||
|
metadata/_custom_type_script = "uid://d0l07gcx1ef18"
|
||||||
@@ -409,6 +409,8 @@ public partial class PlayerController : CharacterBody3D,
|
|||||||
|
|
||||||
private AbilityHandle? _empoweredActionHandle;
|
private AbilityHandle? _empoweredActionHandle;
|
||||||
|
|
||||||
|
[Export] public REmpoweredAction EmpoweredAction = null!;
|
||||||
|
|
||||||
public override void _Ready()
|
public override void _Ready()
|
||||||
{
|
{
|
||||||
LoadSettings();
|
LoadSettings();
|
||||||
@@ -439,11 +441,10 @@ public partial class PlayerController : CharacterBody3D,
|
|||||||
Abilities = new(this);
|
Abilities = new(this);
|
||||||
Events = new();
|
Events = new();
|
||||||
|
|
||||||
var empoweredAction = new EmpoweredAction(forgeManager.TagsManager);
|
|
||||||
var empoweredActionData = new AbilityData(
|
var empoweredActionData = new AbilityData(
|
||||||
name: "Empowered Action",
|
name: "Empowered Action",
|
||||||
costEffect: empoweredAction.EmpoweredActionCostEffect,
|
costEffect: EmpoweredAction.CostEffect(),
|
||||||
cooldownEffects: [empoweredAction.EmpoweredActionCooldown],
|
cooldownEffects: [EmpoweredAction.CooldownEffect(forgeManager.TagsManager)],
|
||||||
instancingPolicy: AbilityInstancingPolicy.PerEntity,
|
instancingPolicy: AbilityInstancingPolicy.PerEntity,
|
||||||
behaviorFactory: () => new EmpoweredActionBehavior());
|
behaviorFactory: () => new EmpoweredActionBehavior());
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user