Compare commits
7 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 5a59d50be5 | |||
| 9464fc7caa | |||
| 9e57641a75 | |||
| bb2b2ace06 | |||
| 585c2302d6 | |||
| 7ab78aa57f | |||
| 4d10f4e9d7 |
@@ -13,22 +13,28 @@ public partial class CueHandlerInspectorPlugin : EditorInspectorPlugin
|
|||||||
public override bool _CanHandle(GodotObject @object)
|
public override bool _CanHandle(GodotObject @object)
|
||||||
{
|
{
|
||||||
// Find out if its an implementation of CueHandler without having to add [Tool] attribute to them.
|
// Find out if its an implementation of CueHandler without having to add [Tool] attribute to them.
|
||||||
if (@object?.GetScript().As<CSharpScript>() is CSharpScript script)
|
try
|
||||||
{
|
{
|
||||||
StringName className = script.GetGlobalName();
|
if (@object?.GetScript().As<CSharpScript>() is null)
|
||||||
|
return false;
|
||||||
Type baseType = typeof(ForgeCueHandler);
|
}
|
||||||
System.Reflection.Assembly assembly = baseType.Assembly;
|
catch (Exception e)
|
||||||
|
{
|
||||||
Type? implementationType =
|
return false;
|
||||||
Array.Find(assembly.GetTypes(), x =>
|
|
||||||
x.Name == className &&
|
|
||||||
baseType.IsAssignableFrom(x));
|
|
||||||
|
|
||||||
return implementationType is not null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
var script = @object?.GetScript().As<CSharpScript>();
|
||||||
|
StringName className = script.GetGlobalName();
|
||||||
|
|
||||||
|
Type baseType = typeof(ForgeCueHandler);
|
||||||
|
System.Reflection.Assembly assembly = baseType.Assembly;
|
||||||
|
|
||||||
|
Type? implementationType =
|
||||||
|
Array.Find(assembly.GetTypes(), x =>
|
||||||
|
x.Name == className &&
|
||||||
|
baseType.IsAssignableFrom(x));
|
||||||
|
|
||||||
|
return implementationType is not null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override bool _ParseProperty(
|
public override bool _ParseProperty(
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ namespace Gamesmiths.Forge.Godot.Nodes;
|
|||||||
public partial class ForgeEntity : Node, IForgeEntity
|
public partial class ForgeEntity : Node, IForgeEntity
|
||||||
{
|
{
|
||||||
[Export]
|
[Export]
|
||||||
public ForgeTagContainer BaseTags { get; set; } = new();
|
public ForgeTagContainer BaseTags { get; set; }
|
||||||
|
|
||||||
[Export]
|
[Export]
|
||||||
public ForgeSharedVariableSet? SharedVariableDefinitions { get; set; }
|
public ForgeSharedVariableSet? SharedVariableDefinitions { get; set; }
|
||||||
|
|||||||
@@ -2,5 +2,4 @@
|
|||||||
|
|
||||||
[node name="BackgroundMusicPlayer" type="AudioStreamPlayer" unique_id=676077136]
|
[node name="BackgroundMusicPlayer" type="AudioStreamPlayer" unique_id=676077136]
|
||||||
process_mode = 3
|
process_mode = 3
|
||||||
autoplay = true
|
|
||||||
bus = &"Music"
|
bus = &"Music"
|
||||||
|
|||||||
@@ -24,6 +24,8 @@ var _initial_focus_control
|
|||||||
var _scene_tree : SceneTree
|
var _scene_tree : SceneTree
|
||||||
|
|
||||||
func _exit_tree() -> void:
|
func _exit_tree() -> void:
|
||||||
|
if Engine.is_editor_hint(): return
|
||||||
|
|
||||||
GUIDE.disable_mapping_context(menu_context)
|
GUIDE.disable_mapping_context(menu_context)
|
||||||
for previous_context in previous_mapping_contexts:
|
for previous_context in previous_mapping_contexts:
|
||||||
GUIDE.enable_mapping_context(previous_context)
|
GUIDE.enable_mapping_context(previous_context)
|
||||||
|
|||||||
0
docs/.gdignore
Normal file
0
docs/.gdignore
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 151 KiB |
@@ -10,17 +10,17 @@ namespace Movementtests.forge.abilities;
|
|||||||
|
|
||||||
public class EffectApplicationBehavior(EffectData effectData) : IAbilityBehavior
|
public class EffectApplicationBehavior(EffectData effectData) : IAbilityBehavior
|
||||||
{
|
{
|
||||||
|
private Effect? _effect;
|
||||||
private ActiveEffectHandle? _effectHandle;
|
private ActiveEffectHandle? _effectHandle;
|
||||||
public void OnStarted(AbilityBehaviorContext context)
|
public void OnStarted(AbilityBehaviorContext context)
|
||||||
{
|
{
|
||||||
GD.Print("This is applying the periodic effect to the flying weapon");
|
_effect = new Effect(effectData, new EffectOwnership(context.Owner, context.Owner));
|
||||||
_effectHandle = context.Owner.EffectsManager.ApplyEffect(new Effect(effectData, new EffectOwnership(context.Owner, context.Owner)));
|
_effectHandle = context.Owner.EffectsManager.ApplyEffect(_effect);
|
||||||
context.AbilityHandle.CommitAbility();
|
context.AbilityHandle.CommitAbility();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void OnEnded(AbilityBehaviorContext context)
|
public void OnEnded(AbilityBehaviorContext context)
|
||||||
{
|
{
|
||||||
GD.Print("This is removing the periodic effect from the flying weapon");
|
|
||||||
if (_effectHandle is not null)
|
if (_effectHandle is not null)
|
||||||
context.Owner.EffectsManager.RemoveEffect(_effectHandle);
|
context.Owner.EffectsManager.RemoveEffect(_effectHandle);
|
||||||
context.InstanceHandle.End();
|
context.InstanceHandle.End();
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ using Godot;
|
|||||||
|
|
||||||
namespace Movementtests.forge.abilities;
|
namespace Movementtests.forge.abilities;
|
||||||
|
|
||||||
public class ExplodingSwordBehavior(PackedScene explosion) : IAbilityBehavior
|
public class ExplodingSwordBehavior(PackedScene explosion, float radius) : IAbilityBehavior
|
||||||
{
|
{
|
||||||
public void OnStarted(AbilityBehaviorContext context)
|
public void OnStarted(AbilityBehaviorContext context)
|
||||||
{
|
{
|
||||||
@@ -16,7 +16,7 @@ public class ExplodingSwordBehavior(PackedScene explosion) : IAbilityBehavior
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (explosion.Instantiate() is not Explosion explosion1)
|
if (explosion.Instantiate() is not Explosion explo)
|
||||||
{
|
{
|
||||||
GD.Print("Cannot instantiate");
|
GD.Print("Cannot instantiate");
|
||||||
context.InstanceHandle.End();
|
context.InstanceHandle.End();
|
||||||
@@ -28,13 +28,10 @@ public class ExplodingSwordBehavior(PackedScene explosion) : IAbilityBehavior
|
|||||||
context.InstanceHandle.End();
|
context.InstanceHandle.End();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
explo.Radius = radius;
|
||||||
GD.Print("EXPLOSION");
|
|
||||||
|
|
||||||
explosion1.Radius = 6f;
|
|
||||||
|
|
||||||
owner.GetTree().GetRoot().CallDeferred(Node.MethodName.AddChild, explosion1);
|
owner.GetTree().GetRoot().CallDeferred(Node.MethodName.AddChild, explo);
|
||||||
explosion1.CallDeferred(Node3D.MethodName.SetGlobalPosition, owner.GlobalPosition);
|
explo.CallDeferred(Node3D.MethodName.SetGlobalPosition, owner.GlobalPosition);
|
||||||
|
|
||||||
context.AbilityHandle.CommitAbility();
|
context.AbilityHandle.CommitAbility();
|
||||||
context.InstanceHandle.End();
|
context.InstanceHandle.End();
|
||||||
@@ -49,11 +46,10 @@ public class ExplodingSwordBehavior(PackedScene explosion) : IAbilityBehavior
|
|||||||
[GlobalClass]
|
[GlobalClass]
|
||||||
public partial class ForgeExplodingSwordBehavior : ForgeAbilityBehavior
|
public partial class ForgeExplodingSwordBehavior : ForgeAbilityBehavior
|
||||||
{
|
{
|
||||||
[Export] public PackedScene? Explosion { get; set; }
|
[Export] public PackedScene Explosion { get; set; }
|
||||||
|
[Export] public float Radius { get; set; } = 5f;
|
||||||
public override IAbilityBehavior GetBehavior()
|
public override IAbilityBehavior GetBehavior()
|
||||||
{
|
{
|
||||||
if (Explosion == null)
|
return new ExplodingSwordBehavior(Explosion, Radius);
|
||||||
throw new System.ArgumentException("Explosion is null");
|
|
||||||
return new ExplodingSwordBehavior(Explosion);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -20,15 +20,8 @@ public class RaiseEventTagExecution(TagContainer eventTags) : CustomExecution
|
|||||||
{
|
{
|
||||||
public override ModifierEvaluatedData[] EvaluateExecution(Effect effect, IForgeEntity target, EffectEvaluatedData? effectEvaluatedData)
|
public override ModifierEvaluatedData[] EvaluateExecution(Effect effect, IForgeEntity target, EffectEvaluatedData? effectEvaluatedData)
|
||||||
{
|
{
|
||||||
GD.Print("Custom execution executed");
|
|
||||||
var owner = effect.Ownership.Owner;
|
var owner = effect.Ownership.Owner;
|
||||||
if (owner == null) return [];
|
if (owner == null) return [];
|
||||||
|
|
||||||
GD.Print(eventTags.Tags.Count);
|
|
||||||
foreach (var tag in eventTags.Tags)
|
|
||||||
{
|
|
||||||
GD.Print(tag);
|
|
||||||
}
|
|
||||||
|
|
||||||
owner.Events.Raise(new EventData
|
owner.Events.Raise(new EventData
|
||||||
{
|
{
|
||||||
@@ -42,10 +35,11 @@ public class RaiseEventTagExecution(TagContainer eventTags) : CustomExecution
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
[Tool]
|
||||||
[GlobalClass]
|
[GlobalClass]
|
||||||
public partial class ForgeRaiseEventTagExecution : ForgeCustomExecution
|
public partial class ForgeRaiseEventTagExecution : ForgeCustomExecution
|
||||||
{
|
{
|
||||||
[Export] ForgeTagContainer EventTags { get; set; } = new();
|
[Export] ForgeTagContainer EventTags { get; set; }
|
||||||
|
|
||||||
public override CustomExecution GetExecutionClass()
|
public override CustomExecution GetExecutionClass()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -39,6 +39,7 @@
|
|||||||
[ext_resource type="Resource" uid="uid://brswsknpgwal2" path="res://inputs/base_mode/move_front.tres" id="34_rvpjj"]
|
[ext_resource type="Resource" uid="uid://brswsknpgwal2" path="res://inputs/base_mode/move_front.tres" id="34_rvpjj"]
|
||||||
[ext_resource type="Resource" uid="uid://ca68r7n3bwba3" path="res://inputs/base_mode/toolbox.tres" id="34_s8kjn"]
|
[ext_resource type="Resource" uid="uid://ca68r7n3bwba3" path="res://inputs/base_mode/toolbox.tres" id="34_s8kjn"]
|
||||||
[ext_resource type="Resource" uid="uid://f3vs6l4m623s" path="res://inputs/base_mode/move_left.tres" id="35_s8kjn"]
|
[ext_resource type="Resource" uid="uid://f3vs6l4m623s" path="res://inputs/base_mode/move_left.tres" id="35_s8kjn"]
|
||||||
|
[ext_resource type="Resource" uid="uid://7ne5mdytlidm" path="res://inputs/base_mode/inventory.tres" id="36_4uwbh"]
|
||||||
[ext_resource type="Resource" uid="uid://t612lts1wi1s" path="res://inputs/base_mode/move_right.tres" id="36_vibkn"]
|
[ext_resource type="Resource" uid="uid://t612lts1wi1s" path="res://inputs/base_mode/move_right.tres" id="36_vibkn"]
|
||||||
|
|
||||||
[sub_resource type="Resource" id="Resource_vkvga"]
|
[sub_resource type="Resource" id="Resource_vkvga"]
|
||||||
@@ -487,16 +488,16 @@ action = ExtResource("29_q86qg")
|
|||||||
input_mappings = Array[ExtResource("3_yp12v")]([SubResource("Resource_ai85f"), SubResource("Resource_1ycft")])
|
input_mappings = Array[ExtResource("3_yp12v")]([SubResource("Resource_ai85f"), SubResource("Resource_1ycft")])
|
||||||
metadata/_guide_input_mappings_collapsed = false
|
metadata/_guide_input_mappings_collapsed = false
|
||||||
|
|
||||||
[sub_resource type="Resource" id="Resource_8e1uk"]
|
[sub_resource type="Resource" id="Resource_qd4lk"]
|
||||||
script = ExtResource("19_qkgmj")
|
script = ExtResource("19_qkgmj")
|
||||||
button = 4
|
button = 11
|
||||||
|
|
||||||
[sub_resource type="Resource" id="Resource_k8i2y"]
|
[sub_resource type="Resource" id="Resource_k8i2y"]
|
||||||
script = ExtResource("15_fykw6")
|
script = ExtResource("15_fykw6")
|
||||||
|
|
||||||
[sub_resource type="Resource" id="Resource_ilhhf"]
|
[sub_resource type="Resource" id="Resource_ilhhf"]
|
||||||
script = ExtResource("3_yp12v")
|
script = ExtResource("3_yp12v")
|
||||||
input = SubResource("Resource_8e1uk")
|
input = SubResource("Resource_qd4lk")
|
||||||
triggers = Array[ExtResource("8_2tfaw")]([SubResource("Resource_k8i2y")])
|
triggers = Array[ExtResource("8_2tfaw")]([SubResource("Resource_k8i2y")])
|
||||||
|
|
||||||
[sub_resource type="Resource" id="Resource_qrtf1"]
|
[sub_resource type="Resource" id="Resource_qrtf1"]
|
||||||
@@ -516,6 +517,35 @@ script = ExtResource("1_qmhk6")
|
|||||||
action = ExtResource("34_s8kjn")
|
action = ExtResource("34_s8kjn")
|
||||||
input_mappings = Array[ExtResource("3_yp12v")]([SubResource("Resource_ilhhf"), SubResource("Resource_4uwbh")])
|
input_mappings = Array[ExtResource("3_yp12v")]([SubResource("Resource_ilhhf"), SubResource("Resource_4uwbh")])
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_g1qol"]
|
||||||
|
script = ExtResource("19_qkgmj")
|
||||||
|
button = 4
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_xmmrk"]
|
||||||
|
script = ExtResource("15_fykw6")
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_oq22i"]
|
||||||
|
script = ExtResource("3_yp12v")
|
||||||
|
input = SubResource("Resource_g1qol")
|
||||||
|
triggers = Array[ExtResource("8_2tfaw")]([SubResource("Resource_xmmrk")])
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_krlhw"]
|
||||||
|
script = ExtResource("30_cvxqo")
|
||||||
|
key = 4194306
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_gpvxe"]
|
||||||
|
script = ExtResource("15_fykw6")
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_0nktr"]
|
||||||
|
script = ExtResource("3_yp12v")
|
||||||
|
input = SubResource("Resource_krlhw")
|
||||||
|
triggers = Array[ExtResource("8_2tfaw")]([SubResource("Resource_gpvxe")])
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_u35df"]
|
||||||
|
script = ExtResource("1_qmhk6")
|
||||||
|
action = ExtResource("36_4uwbh")
|
||||||
|
input_mappings = Array[ExtResource("3_yp12v")]([SubResource("Resource_oq22i"), SubResource("Resource_0nktr")])
|
||||||
|
|
||||||
[sub_resource type="Resource" id="Resource_kcylj"]
|
[sub_resource type="Resource" id="Resource_kcylj"]
|
||||||
script = ExtResource("30_cvxqo")
|
script = ExtResource("30_cvxqo")
|
||||||
key = 83
|
key = 83
|
||||||
@@ -570,5 +600,5 @@ input_mappings = Array[ExtResource("3_yp12v")]([SubResource("Resource_7io5e")])
|
|||||||
|
|
||||||
[resource]
|
[resource]
|
||||||
script = ExtResource("23_llfhp")
|
script = ExtResource("23_llfhp")
|
||||||
mappings = Array[ExtResource("1_qmhk6")]([SubResource("Resource_88x08"), SubResource("Resource_tgr2g"), SubResource("Resource_iarn8"), SubResource("Resource_cvxqo"), SubResource("Resource_tb8ii"), SubResource("Resource_iihs4"), SubResource("Resource_vibkn"), SubResource("Resource_2hs2y"), SubResource("Resource_d2r0d"), SubResource("Resource_xt1x5"), SubResource("Resource_ew1hw"), SubResource("Resource_3frwi"), SubResource("Resource_0qat1"), SubResource("Resource_vtk18"), SubResource("Resource_weyro"), SubResource("Resource_o5fur"), SubResource("Resource_fjku4"), SubResource("Resource_odnhd"), SubResource("Resource_0eff7"), SubResource("Resource_gt77e")])
|
mappings = Array[ExtResource("1_qmhk6")]([SubResource("Resource_88x08"), SubResource("Resource_tgr2g"), SubResource("Resource_iarn8"), SubResource("Resource_cvxqo"), SubResource("Resource_tb8ii"), SubResource("Resource_iihs4"), SubResource("Resource_vibkn"), SubResource("Resource_2hs2y"), SubResource("Resource_d2r0d"), SubResource("Resource_xt1x5"), SubResource("Resource_ew1hw"), SubResource("Resource_3frwi"), SubResource("Resource_0qat1"), SubResource("Resource_vtk18"), SubResource("Resource_weyro"), SubResource("Resource_o5fur"), SubResource("Resource_u35df"), SubResource("Resource_fjku4"), SubResource("Resource_odnhd"), SubResource("Resource_0eff7"), SubResource("Resource_gt77e")])
|
||||||
metadata/_custom_type_script = "uid://dsa1dnifd6w32"
|
metadata/_custom_type_script = "uid://dsa1dnifd6w32"
|
||||||
|
|||||||
7
inputs/base_mode/inventory.tres
Normal file
7
inputs/base_mode/inventory.tres
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
[gd_resource type="Resource" script_class="GUIDEAction" format=3 uid="uid://7ne5mdytlidm"]
|
||||||
|
|
||||||
|
[ext_resource type="Script" uid="uid://cluhc11vixkf1" path="res://addons/guide/guide_action.gd" id="1_48ulw"]
|
||||||
|
|
||||||
|
[resource]
|
||||||
|
script = ExtResource("1_48ulw")
|
||||||
|
metadata/_custom_type_script = "uid://cluhc11vixkf1"
|
||||||
@@ -257,6 +257,9 @@ script = ExtResource("1_5g5a0")
|
|||||||
[node name="GuideDebugger" parent="DebugLayer" unique_id=636020765 instance=ExtResource("10_gm8ij")]
|
[node name="GuideDebugger" parent="DebugLayer" unique_id=636020765 instance=ExtResource("10_gm8ij")]
|
||||||
visible = false
|
visible = false
|
||||||
|
|
||||||
|
[node name="InventoryLayer" type="CanvasLayer" parent="." unique_id=406590925]
|
||||||
|
layer = 10
|
||||||
|
|
||||||
[node name="BackgroundMusicPlayer" parent="." unique_id=879496303 instance=ExtResource("2_roiv2")]
|
[node name="BackgroundMusicPlayer" parent="." unique_id=879496303 instance=ExtResource("2_roiv2")]
|
||||||
stream = ExtResource("3_boadi")
|
stream = ExtResource("3_boadi")
|
||||||
|
|
||||||
@@ -285,7 +288,6 @@ libraries/ = SubResource("AnimationLibrary_nyvgt")
|
|||||||
|
|
||||||
[node name="Player" parent="." unique_id=1309399929 instance=ExtResource("17_clkha")]
|
[node name="Player" parent="." unique_id=1309399929 instance=ExtResource("17_clkha")]
|
||||||
transform = Transform3D(0.99999994, 0, 0, 0, 1, 0, 0, 0, 0.99999994, 0, 0, 0)
|
transform = Transform3D(0.99999994, 0, 0, 0, 1, 0, 0, 0, 0.99999994, 0, 0, 0)
|
||||||
TutorialDone = true
|
|
||||||
AccelerationAir = 1.5
|
AccelerationAir = 1.5
|
||||||
|
|
||||||
[node name="ShaderComp-Explosion" parent="Player" unique_id=1876014452 instance=ExtResource("9_r1bdn")]
|
[node name="ShaderComp-Explosion" parent="Player" unique_id=1876014452 instance=ExtResource("9_r1bdn")]
|
||||||
|
|||||||
55
menus/scenes/components/AbilitySelection.cs
Normal file
55
menus/scenes/components/AbilitySelection.cs
Normal file
@@ -0,0 +1,55 @@
|
|||||||
|
using System;
|
||||||
|
using Godot;
|
||||||
|
using Movementtests.systems;
|
||||||
|
|
||||||
|
[Tool, GlobalClass]
|
||||||
|
public partial class AbilitySelection : Control
|
||||||
|
{
|
||||||
|
[Signal] public delegate void AbilityAddedEventHandler(WeaponSystem.WeaponEvent forEvent, string abilityName);
|
||||||
|
|
||||||
|
[Export] public WeaponSystem.WeaponEvent ForEvent { get; set; } = WeaponSystem.WeaponEvent.StartedFlying;
|
||||||
|
|
||||||
|
private string _title = string.Empty;
|
||||||
|
[Export] public string Title {
|
||||||
|
get => _title;
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_title = value;
|
||||||
|
TitleChanged();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[Export] public PackedScene AbilitySelectionItem { get; set; }
|
||||||
|
|
||||||
|
private VBoxContainer _abilities;
|
||||||
|
private MenuButton _addAbility;
|
||||||
|
private PopupMenu _addAbilityMenu;
|
||||||
|
|
||||||
|
public override void _Ready()
|
||||||
|
{
|
||||||
|
_abilities = GetNode<VBoxContainer>("%SelectedAbilities");
|
||||||
|
_addAbility = GetNode<MenuButton>("%AddAbility");
|
||||||
|
_addAbilityMenu = _addAbility.GetPopup();
|
||||||
|
|
||||||
|
_addAbilityMenu.IdPressed += AddAbilityMenuOnIdPressed;
|
||||||
|
_addAbilityMenu.IndexPressed += AddAbilityMenuOnIndexPressed;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void AddAbilityMenuOnIndexPressed(long index)
|
||||||
|
{
|
||||||
|
var indexInt = Convert.ToInt32(index);
|
||||||
|
var metadata = _addAbilityMenu.GetItemMetadata(indexInt);
|
||||||
|
var name = _addAbilityMenu.GetItemText(indexInt);
|
||||||
|
EmitSignalAbilityAdded(ForEvent, name);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void AddAbilityMenuOnIdPressed(long id)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public void TitleChanged()
|
||||||
|
{
|
||||||
|
var titleLabel = GetNode<Label>("%TitleLabel");
|
||||||
|
titleLabel.Text = Title;
|
||||||
|
}
|
||||||
|
}
|
||||||
1
menus/scenes/components/AbilitySelection.cs.uid
Normal file
1
menus/scenes/components/AbilitySelection.cs.uid
Normal file
@@ -0,0 +1 @@
|
|||||||
|
uid://5emed8iegtui
|
||||||
45
menus/scenes/components/ability_selection.tscn
Normal file
45
menus/scenes/components/ability_selection.tscn
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
[gd_scene format=3 uid="uid://dmv685sskgh3l"]
|
||||||
|
|
||||||
|
[ext_resource type="Script" uid="uid://5emed8iegtui" path="res://menus/scenes/components/AbilitySelection.cs" id="1_fcxyu"]
|
||||||
|
[ext_resource type="Texture2D" uid="uid://by5v33lu8v1fm" path="res://assets/ui/input-prompts/Flairs/Vector/flair_plus.svg" id="2_uf3m5"]
|
||||||
|
[ext_resource type="Texture2D" uid="uid://c2akxlg7tdb67" path="res://assets/ui/IconGodotNode/node/icon_projectile.png" id="3_41pdy"]
|
||||||
|
|
||||||
|
[node name="AbilitySelection" type="MarginContainer" unique_id=1373426933]
|
||||||
|
size_flags_horizontal = 3
|
||||||
|
theme_override_constants/margin_left = 4
|
||||||
|
theme_override_constants/margin_top = 4
|
||||||
|
theme_override_constants/margin_right = 4
|
||||||
|
theme_override_constants/margin_bottom = 4
|
||||||
|
script = ExtResource("1_fcxyu")
|
||||||
|
|
||||||
|
[node name="HBoxContainer" type="VBoxContainer" parent="." unique_id=364343452]
|
||||||
|
layout_mode = 2
|
||||||
|
|
||||||
|
[node name="TitleLabel" type="Label" parent="HBoxContainer" unique_id=8350369]
|
||||||
|
unique_name_in_owner = true
|
||||||
|
layout_mode = 2
|
||||||
|
|
||||||
|
[node name="SelectedAbilities" type="VBoxContainer" parent="HBoxContainer" unique_id=1173689490]
|
||||||
|
unique_name_in_owner = true
|
||||||
|
layout_mode = 2
|
||||||
|
|
||||||
|
[node name="MarginContainer" type="MarginContainer" parent="HBoxContainer" unique_id=51872459]
|
||||||
|
layout_mode = 2
|
||||||
|
theme_override_constants/margin_left = 4
|
||||||
|
theme_override_constants/margin_top = 4
|
||||||
|
theme_override_constants/margin_right = 4
|
||||||
|
theme_override_constants/margin_bottom = 4
|
||||||
|
|
||||||
|
[node name="PanelContainer" type="PanelContainer" parent="HBoxContainer/MarginContainer" unique_id=886085404]
|
||||||
|
layout_mode = 2
|
||||||
|
|
||||||
|
[node name="AddAbility" type="MenuButton" parent="HBoxContainer/MarginContainer/PanelContainer" unique_id=1898027483]
|
||||||
|
unique_name_in_owner = true
|
||||||
|
layout_mode = 2
|
||||||
|
focus_mode = 2
|
||||||
|
text = "Add ability"
|
||||||
|
icon = ExtResource("2_uf3m5")
|
||||||
|
item_count = 1
|
||||||
|
popup/item_0/text = "Weapon explosion"
|
||||||
|
popup/item_0/icon = ExtResource("3_41pdy")
|
||||||
|
popup/item_0/id = 0
|
||||||
28
menus/scenes/overlaid_menus/Inventory.cs
Normal file
28
menus/scenes/overlaid_menus/Inventory.cs
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
using Godot;
|
||||||
|
using Movementtests.systems;
|
||||||
|
|
||||||
|
[Tool, GlobalClass, Icon("res://assets/ui/IconGodotNode/control/icon_crate.png")]
|
||||||
|
public partial class Inventory : Control
|
||||||
|
{
|
||||||
|
public PlayerController? Player { get; set; }
|
||||||
|
|
||||||
|
private AbilitySelection _startedFlyingSelection;
|
||||||
|
private AbilitySelection _whileFlyingSelection;
|
||||||
|
private AbilitySelection _stoppedFlyingSelection;
|
||||||
|
public override void _Ready()
|
||||||
|
{
|
||||||
|
_startedFlyingSelection = GetNode<AbilitySelection>("%StartedFlying");
|
||||||
|
_whileFlyingSelection = GetNode<AbilitySelection>("%WhileFlying");
|
||||||
|
_stoppedFlyingSelection = GetNode<AbilitySelection>("%StoppedFlying");
|
||||||
|
|
||||||
|
_startedFlyingSelection.AbilityAdded += AddAbilityForEvent;
|
||||||
|
_whileFlyingSelection.AbilityAdded += AddAbilityForEvent;
|
||||||
|
_stoppedFlyingSelection.AbilityAdded += AddAbilityForEvent;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void AddAbilityForEvent(WeaponSystem.WeaponEvent forEvent, string abilityName)
|
||||||
|
{
|
||||||
|
if (Player is null) return;
|
||||||
|
Player.GrantWeaponExplosionAbilityForEvent(forEvent, abilityName);
|
||||||
|
}
|
||||||
|
}
|
||||||
1
menus/scenes/overlaid_menus/Inventory.cs.uid
Normal file
1
menus/scenes/overlaid_menus/Inventory.cs.uid
Normal file
@@ -0,0 +1 @@
|
|||||||
|
uid://7yil0fiftvaf
|
||||||
95
menus/scenes/overlaid_menus/inventory.tscn
Normal file
95
menus/scenes/overlaid_menus/inventory.tscn
Normal file
@@ -0,0 +1,95 @@
|
|||||||
|
[gd_scene format=3 uid="uid://oq1jjvjs4qga"]
|
||||||
|
|
||||||
|
[ext_resource type="Script" uid="uid://vu5kh5amnta" path="res://menus/scenes/overlaid_menus/inventory_wrapper.gd" id="1_yst23"]
|
||||||
|
[ext_resource type="Script" uid="uid://1nf36h0gms3q" path="res://addons/maaacks_game_template/base/scripts/capture_focus.gd" id="2_ijoei"]
|
||||||
|
[ext_resource type="Script" uid="uid://7yil0fiftvaf" path="res://menus/scenes/overlaid_menus/Inventory.cs" id="2_sb1gh"]
|
||||||
|
[ext_resource type="PackedScene" uid="uid://dmv685sskgh3l" path="res://menus/scenes/components/ability_selection.tscn" id="3_ijoei"]
|
||||||
|
|
||||||
|
[node name="InventoryWrapper" type="Control" unique_id=1853168495]
|
||||||
|
process_mode = 3
|
||||||
|
top_level = true
|
||||||
|
layout_mode = 3
|
||||||
|
anchors_preset = 15
|
||||||
|
anchor_right = 1.0
|
||||||
|
anchor_bottom = 1.0
|
||||||
|
grow_horizontal = 2
|
||||||
|
grow_vertical = 2
|
||||||
|
script = ExtResource("1_yst23")
|
||||||
|
pauses_game = true
|
||||||
|
|
||||||
|
[node name="Inventory" type="MarginContainer" parent="." unique_id=1581374847]
|
||||||
|
unique_name_in_owner = true
|
||||||
|
layout_mode = 1
|
||||||
|
anchors_preset = 9
|
||||||
|
anchor_bottom = 1.0
|
||||||
|
offset_right = 1920.0
|
||||||
|
grow_vertical = 2
|
||||||
|
theme_override_constants/margin_left = 256
|
||||||
|
theme_override_constants/margin_top = 32
|
||||||
|
theme_override_constants/margin_right = 256
|
||||||
|
theme_override_constants/margin_bottom = 32
|
||||||
|
script = ExtResource("2_sb1gh")
|
||||||
|
|
||||||
|
[node name="MenuPanelContainer" type="PanelContainer" parent="Inventory" unique_id=494302799]
|
||||||
|
unique_name_in_owner = true
|
||||||
|
process_mode = 3
|
||||||
|
layout_mode = 2
|
||||||
|
|
||||||
|
[node name="MarginContainer" type="MarginContainer" parent="Inventory/MenuPanelContainer" unique_id=890844332]
|
||||||
|
layout_mode = 2
|
||||||
|
theme_override_constants/margin_left = 128
|
||||||
|
theme_override_constants/margin_top = 16
|
||||||
|
theme_override_constants/margin_right = 128
|
||||||
|
theme_override_constants/margin_bottom = 16
|
||||||
|
|
||||||
|
[node name="BoxContainer" type="BoxContainer" parent="Inventory/MenuPanelContainer/MarginContainer" unique_id=1551508149]
|
||||||
|
layout_mode = 2
|
||||||
|
vertical = true
|
||||||
|
|
||||||
|
[node name="TitleMargin" type="MarginContainer" parent="Inventory/MenuPanelContainer/MarginContainer/BoxContainer" unique_id=1278279788]
|
||||||
|
layout_mode = 2
|
||||||
|
|
||||||
|
[node name="TitleLabel" type="Label" parent="Inventory/MenuPanelContainer/MarginContainer/BoxContainer/TitleMargin" unique_id=1966063657]
|
||||||
|
layout_mode = 2
|
||||||
|
theme_override_font_sizes/font_size = 24
|
||||||
|
text = "Inventory"
|
||||||
|
horizontal_alignment = 1
|
||||||
|
|
||||||
|
[node name="PlayerSectionMargin" type="MarginContainer" parent="Inventory/MenuPanelContainer/MarginContainer/BoxContainer" unique_id=461792371]
|
||||||
|
layout_mode = 2
|
||||||
|
theme_override_constants/margin_top = 16
|
||||||
|
theme_override_constants/margin_bottom = 16
|
||||||
|
|
||||||
|
[node name="PlayerSection" type="BoxContainer" parent="Inventory/MenuPanelContainer/MarginContainer/BoxContainer/PlayerSectionMargin" unique_id=469432036]
|
||||||
|
custom_minimum_size = Vector2(128, 0)
|
||||||
|
layout_mode = 2
|
||||||
|
size_flags_vertical = 3
|
||||||
|
theme_override_constants/separation = 16
|
||||||
|
vertical = true
|
||||||
|
|
||||||
|
[node name="PlayerSectionLabel" type="Label" parent="Inventory/MenuPanelContainer/MarginContainer/BoxContainer/PlayerSectionMargin/PlayerSection" unique_id=1100827847]
|
||||||
|
layout_mode = 2
|
||||||
|
text = "Weapon abilities"
|
||||||
|
horizontal_alignment = 1
|
||||||
|
|
||||||
|
[node name="HBoxContainer" type="HBoxContainer" parent="Inventory/MenuPanelContainer/MarginContainer/BoxContainer/PlayerSectionMargin/PlayerSection" unique_id=75337901]
|
||||||
|
layout_mode = 2
|
||||||
|
script = ExtResource("2_ijoei")
|
||||||
|
search_depth = 10
|
||||||
|
|
||||||
|
[node name="StartedFlying" parent="Inventory/MenuPanelContainer/MarginContainer/BoxContainer/PlayerSectionMargin/PlayerSection/HBoxContainer" unique_id=1373426933 instance=ExtResource("3_ijoei")]
|
||||||
|
unique_name_in_owner = true
|
||||||
|
layout_mode = 2
|
||||||
|
Title = "Started flying"
|
||||||
|
|
||||||
|
[node name="WhileFlying" parent="Inventory/MenuPanelContainer/MarginContainer/BoxContainer/PlayerSectionMargin/PlayerSection/HBoxContainer" unique_id=1771285257 instance=ExtResource("3_ijoei")]
|
||||||
|
unique_name_in_owner = true
|
||||||
|
layout_mode = 2
|
||||||
|
ForEvent = 2
|
||||||
|
Title = "While flying"
|
||||||
|
|
||||||
|
[node name="StoppedFlying" parent="Inventory/MenuPanelContainer/MarginContainer/BoxContainer/PlayerSectionMargin/PlayerSection/HBoxContainer" unique_id=324047638 instance=ExtResource("3_ijoei")]
|
||||||
|
unique_name_in_owner = true
|
||||||
|
layout_mode = 2
|
||||||
|
ForEvent = 1
|
||||||
|
Title = "Stopped flying"
|
||||||
15
menus/scenes/overlaid_menus/inventory_wrapper.gd
Normal file
15
menus/scenes/overlaid_menus/inventory_wrapper.gd
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
@tool
|
||||||
|
@icon("res://assets/ui/IconGodotNode/control/icon_crate_02.png")
|
||||||
|
class_name InventoryWrapper
|
||||||
|
extends OverlaidMenu
|
||||||
|
|
||||||
|
@export var player: PlayerController
|
||||||
|
|
||||||
|
@onready var inventory: Control = %Inventory
|
||||||
|
|
||||||
|
func _ready() -> void:
|
||||||
|
if Engine.is_editor_hint(): return
|
||||||
|
inventory.Player = player
|
||||||
|
|
||||||
|
func _on_close_button_pressed() -> void:
|
||||||
|
close()
|
||||||
1
menus/scenes/overlaid_menus/inventory_wrapper.gd.uid
Normal file
1
menus/scenes/overlaid_menus/inventory_wrapper.gd.uid
Normal file
@@ -0,0 +1 @@
|
|||||||
|
uid://vu5kh5amnta
|
||||||
@@ -15,7 +15,7 @@ warnings/check_invalid_track_paths=false
|
|||||||
[application]
|
[application]
|
||||||
|
|
||||||
config/name="Movement tests"
|
config/name="Movement tests"
|
||||||
run/main_scene="uid://dwo50456dv6va"
|
run/main_scene="uid://cgi7qekk387cf"
|
||||||
config/features=PackedStringArray("4.6", "C#", "Forward Plus")
|
config/features=PackedStringArray("4.6", "C#", "Forward Plus")
|
||||||
config/icon="res://icon.svg"
|
config/icon="res://icon.svg"
|
||||||
|
|
||||||
|
|||||||
@@ -8,6 +8,7 @@
|
|||||||
[ext_resource type="Script" uid="uid://bjwrpv3jpsc1e" path="res://scenes/components/health/CHealth.cs" id="4_ys4jv"]
|
[ext_resource type="Script" uid="uid://bjwrpv3jpsc1e" path="res://scenes/components/health/CHealth.cs" id="4_ys4jv"]
|
||||||
[ext_resource type="Script" uid="uid://8uj04dfe8oql" path="res://addons/forge/nodes/ForgeEntity.cs" id="6_wxisp"]
|
[ext_resource type="Script" uid="uid://8uj04dfe8oql" path="res://addons/forge/nodes/ForgeEntity.cs" id="6_wxisp"]
|
||||||
[ext_resource type="Script" uid="uid://cxihb42t2mfqi" path="res://addons/forge/nodes/ForgeAttributeSet.cs" id="7_2digf"]
|
[ext_resource type="Script" uid="uid://cxihb42t2mfqi" path="res://addons/forge/nodes/ForgeAttributeSet.cs" id="7_2digf"]
|
||||||
|
[ext_resource type="Script" uid="uid://cw525n4mjqgw0" path="res://addons/forge/resources/ForgeTagContainer.cs" id="7_46wn3"]
|
||||||
[ext_resource type="PackedScene" uid="uid://dmw5ibwrb483f" path="res://scenes/components/movement/CFlyingMovement.tscn" id="7_vaeds"]
|
[ext_resource type="PackedScene" uid="uid://dmw5ibwrb483f" path="res://scenes/components/movement/CFlyingMovement.tscn" id="7_vaeds"]
|
||||||
[ext_resource type="PackedScene" uid="uid://bwx2um43k0ou4" path="res://scenes/components/health/CHealthbar.tscn" id="7_ykkxn"]
|
[ext_resource type="PackedScene" uid="uid://bwx2um43k0ou4" path="res://scenes/components/health/CHealthbar.tscn" id="7_ykkxn"]
|
||||||
[ext_resource type="Script" uid="uid://ccovd5i0wr3kk" path="res://addons/forge/editor/attributes/AttributeValues.cs" id="8_46wn3"]
|
[ext_resource type="Script" uid="uid://ccovd5i0wr3kk" path="res://addons/forge/editor/attributes/AttributeValues.cs" id="8_46wn3"]
|
||||||
@@ -16,23 +17,28 @@
|
|||||||
[ext_resource type="PackedScene" uid="uid://bctpe34ddamg5" path="res://scenes/components/knockback/CKnockback.tscn" id="10_dejyg"]
|
[ext_resource type="PackedScene" uid="uid://bctpe34ddamg5" path="res://scenes/components/knockback/CKnockback.tscn" id="10_dejyg"]
|
||||||
[ext_resource type="Resource" uid="uid://dt7a1io5o0b8s" path="res://scenes/enemies/flying_enemy/flying_enemy_knockback.tres" id="11_mpa2u"]
|
[ext_resource type="Resource" uid="uid://dt7a1io5o0b8s" path="res://scenes/enemies/flying_enemy/flying_enemy_knockback.tres" id="11_mpa2u"]
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_vfi88"]
|
||||||
|
script = ExtResource("7_46wn3")
|
||||||
|
ContainerTags = Array[String](["character.enemy"])
|
||||||
|
metadata/_custom_type_script = "uid://cw525n4mjqgw0"
|
||||||
|
|
||||||
[sub_resource type="Resource" id="Resource_oj1ws"]
|
[sub_resource type="Resource" id="Resource_oj1ws"]
|
||||||
script = ExtResource("8_46wn3")
|
script = ExtResource("8_46wn3")
|
||||||
Default = 50
|
Default = 50
|
||||||
Max = 100
|
Max = 100
|
||||||
|
|
||||||
[sub_resource type="Resource" id="Resource_yk4hc"]
|
|
||||||
script = ExtResource("8_46wn3")
|
|
||||||
Default = 1
|
|
||||||
Min = 1
|
|
||||||
Max = 100
|
|
||||||
|
|
||||||
[sub_resource type="Resource" id="Resource_wxisp"]
|
[sub_resource type="Resource" id="Resource_wxisp"]
|
||||||
script = ExtResource("8_46wn3")
|
script = ExtResource("8_46wn3")
|
||||||
Default = 2
|
Default = 2
|
||||||
Min = 1
|
Min = 1
|
||||||
Max = 100
|
Max = 100
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_yk4hc"]
|
||||||
|
script = ExtResource("8_46wn3")
|
||||||
|
Default = 1
|
||||||
|
Min = 1
|
||||||
|
Max = 100
|
||||||
|
|
||||||
[sub_resource type="ViewportTexture" id="ViewportTexture_hf6k8"]
|
[sub_resource type="ViewportTexture" id="ViewportTexture_hf6k8"]
|
||||||
viewport_path = NodePath("SubViewport")
|
viewport_path = NodePath("SubViewport")
|
||||||
|
|
||||||
@@ -84,6 +90,7 @@ RMovement = ExtResource("4_dejyg")
|
|||||||
|
|
||||||
[node name="ForgeEntity" type="Node" parent="." unique_id=622209781]
|
[node name="ForgeEntity" type="Node" parent="." unique_id=622209781]
|
||||||
script = ExtResource("6_wxisp")
|
script = ExtResource("6_wxisp")
|
||||||
|
BaseTags = SubResource("Resource_vfi88")
|
||||||
metadata/_custom_type_script = "uid://8uj04dfe8oql"
|
metadata/_custom_type_script = "uid://8uj04dfe8oql"
|
||||||
|
|
||||||
[node name="ForgeAttributeSet" type="Node" parent="ForgeEntity" unique_id=1840910245]
|
[node name="ForgeAttributeSet" type="Node" parent="ForgeEntity" unique_id=1840910245]
|
||||||
|
|||||||
@@ -10,30 +10,36 @@
|
|||||||
[ext_resource type="Script" uid="uid://cxihb42t2mfqi" path="res://addons/forge/nodes/ForgeAttributeSet.cs" id="6_yk4hc"]
|
[ext_resource type="Script" uid="uid://cxihb42t2mfqi" path="res://addons/forge/nodes/ForgeAttributeSet.cs" id="6_yk4hc"]
|
||||||
[ext_resource type="Script" uid="uid://b0u23nkpaimyc" path="res://scenes/components/damage/CDamageable.cs" id="7_1tw73"]
|
[ext_resource type="Script" uid="uid://b0u23nkpaimyc" path="res://scenes/components/damage/CDamageable.cs" id="7_1tw73"]
|
||||||
[ext_resource type="PackedScene" uid="uid://bwx2um43k0ou4" path="res://scenes/components/health/CHealthbar.tscn" id="7_18xwy"]
|
[ext_resource type="PackedScene" uid="uid://bwx2um43k0ou4" path="res://scenes/components/health/CHealthbar.tscn" id="7_18xwy"]
|
||||||
|
[ext_resource type="Script" uid="uid://cw525n4mjqgw0" path="res://addons/forge/resources/ForgeTagContainer.cs" id="7_f22p3"]
|
||||||
[ext_resource type="PackedScene" uid="uid://dbr7ioio158ew" path="res://scenes/components/movement/CGroundedMovement.tscn" id="7_qyswd"]
|
[ext_resource type="PackedScene" uid="uid://dbr7ioio158ew" path="res://scenes/components/movement/CGroundedMovement.tscn" id="7_qyswd"]
|
||||||
[ext_resource type="Script" uid="uid://ccovd5i0wr3kk" path="res://addons/forge/editor/attributes/AttributeValues.cs" id="7_x50ya"]
|
[ext_resource type="Script" uid="uid://ccovd5i0wr3kk" path="res://addons/forge/editor/attributes/AttributeValues.cs" id="7_x50ya"]
|
||||||
[ext_resource type="Script" uid="uid://dtpxijlnb2c5" path="res://scenes/components/movement/RMovement.cs" id="8_6d4gl"]
|
[ext_resource type="Script" uid="uid://dtpxijlnb2c5" path="res://scenes/components/movement/RMovement.cs" id="8_6d4gl"]
|
||||||
[ext_resource type="PackedScene" uid="uid://bctpe34ddamg5" path="res://scenes/components/knockback/CKnockback.tscn" id="10_jqqi6"]
|
[ext_resource type="PackedScene" uid="uid://bctpe34ddamg5" path="res://scenes/components/knockback/CKnockback.tscn" id="10_jqqi6"]
|
||||||
[ext_resource type="Resource" uid="uid://cektf6waf4s04" path="res://scenes/enemies/grounded_enemy/grounded_enemy_knockback.tres" id="11_8k3xb"]
|
[ext_resource type="Resource" uid="uid://cektf6waf4s04" path="res://scenes/enemies/grounded_enemy/grounded_enemy_knockback.tres" id="11_8k3xb"]
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_4jf2q"]
|
||||||
|
script = ExtResource("7_f22p3")
|
||||||
|
ContainerTags = Array[String](["character.enemy"])
|
||||||
|
metadata/_custom_type_script = "uid://cw525n4mjqgw0"
|
||||||
|
|
||||||
[sub_resource type="Resource" id="Resource_f22p3"]
|
[sub_resource type="Resource" id="Resource_f22p3"]
|
||||||
script = ExtResource("7_x50ya")
|
script = ExtResource("7_x50ya")
|
||||||
Default = 100
|
Default = 100
|
||||||
Max = 100
|
Max = 100
|
||||||
|
|
||||||
[sub_resource type="Resource" id="Resource_yk4hc"]
|
|
||||||
script = ExtResource("7_x50ya")
|
|
||||||
Default = 1
|
|
||||||
Min = 1
|
|
||||||
Max = 100
|
|
||||||
|
|
||||||
[sub_resource type="Resource" id="Resource_x50ya"]
|
[sub_resource type="Resource" id="Resource_x50ya"]
|
||||||
script = ExtResource("7_x50ya")
|
script = ExtResource("7_x50ya")
|
||||||
Default = 1
|
Default = 1
|
||||||
Min = 1
|
Min = 1
|
||||||
Max = 100
|
Max = 100
|
||||||
|
|
||||||
[sub_resource type="ViewportTexture" id="ViewportTexture_0mf3g"]
|
[sub_resource type="Resource" id="Resource_yk4hc"]
|
||||||
|
script = ExtResource("7_x50ya")
|
||||||
|
Default = 1
|
||||||
|
Min = 1
|
||||||
|
Max = 100
|
||||||
|
|
||||||
|
[sub_resource type="ViewportTexture" id="ViewportTexture_ub34u"]
|
||||||
viewport_path = NodePath("SubViewport")
|
viewport_path = NodePath("SubViewport")
|
||||||
|
|
||||||
[sub_resource type="Resource" id="Resource_qj0ob"]
|
[sub_resource type="Resource" id="Resource_qj0ob"]
|
||||||
@@ -84,6 +90,7 @@ RMovement = ExtResource("4_na24f")
|
|||||||
|
|
||||||
[node name="ForgeEntity" type="Node" parent="." unique_id=432521027]
|
[node name="ForgeEntity" type="Node" parent="." unique_id=432521027]
|
||||||
script = ExtResource("6_x50ya")
|
script = ExtResource("6_x50ya")
|
||||||
|
BaseTags = SubResource("Resource_4jf2q")
|
||||||
metadata/_custom_type_script = "uid://8uj04dfe8oql"
|
metadata/_custom_type_script = "uid://8uj04dfe8oql"
|
||||||
|
|
||||||
[node name="ForgeAttributeSet" type="Node" parent="ForgeEntity" unique_id=804252284]
|
[node name="ForgeAttributeSet" type="Node" parent="ForgeEntity" unique_id=804252284]
|
||||||
@@ -103,7 +110,7 @@ metadata/_custom_type_script = "uid://bjwrpv3jpsc1e"
|
|||||||
|
|
||||||
[node name="CHealthBar" parent="." unique_id=1278247727 instance=ExtResource("7_18xwy")]
|
[node name="CHealthBar" parent="." unique_id=1278247727 instance=ExtResource("7_18xwy")]
|
||||||
transform = Transform3D(0.4, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.2, 0)
|
transform = Transform3D(0.4, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.2, 0)
|
||||||
texture = SubResource("ViewportTexture_0mf3g")
|
texture = SubResource("ViewportTexture_ub34u")
|
||||||
|
|
||||||
[node name="CDamageable" type="Node" parent="." unique_id=1601518000]
|
[node name="CDamageable" type="Node" parent="." unique_id=1601518000]
|
||||||
script = ExtResource("7_1tw73")
|
script = ExtResource("7_1tw73")
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
[ext_resource type="Script" uid="uid://bbbrf5ckydfna" path="res://scenes/player_controller/scripts/PlayerController.cs" id="1_poq2x"]
|
[ext_resource type="Script" uid="uid://bbbrf5ckydfna" path="res://scenes/player_controller/scripts/PlayerController.cs" id="1_poq2x"]
|
||||||
[ext_resource type="PackedScene" uid="uid://cf3rrgr1imvv4" path="res://scenes/path/path.tscn" id="2_6lejt"]
|
[ext_resource type="PackedScene" uid="uid://cf3rrgr1imvv4" path="res://scenes/path/path.tscn" id="2_6lejt"]
|
||||||
|
[ext_resource type="Script" uid="uid://cw525n4mjqgw0" path="res://addons/forge/resources/ForgeTagContainer.cs" id="2_u8yay"]
|
||||||
[ext_resource type="Script" uid="uid://jitubgv6judn" path="res://scenes/components/damage/RDamage.cs" id="2_x835q"]
|
[ext_resource type="Script" uid="uid://jitubgv6judn" path="res://scenes/components/damage/RDamage.cs" id="2_x835q"]
|
||||||
[ext_resource type="Script" uid="uid://b44cse62qru7j" path="res://scenes/components/knockback/RKnockback.cs" id="3_cb2lu"]
|
[ext_resource type="Script" uid="uid://b44cse62qru7j" path="res://scenes/components/knockback/RKnockback.cs" id="3_cb2lu"]
|
||||||
[ext_resource type="Resource" uid="uid://bl5crtu1gkrtr" path="res://inputs/base_mode/base_mode.tres" id="3_cresl"]
|
[ext_resource type="Resource" uid="uid://bl5crtu1gkrtr" path="res://inputs/base_mode/base_mode.tres" id="3_cresl"]
|
||||||
@@ -13,6 +14,7 @@
|
|||||||
[ext_resource type="Resource" uid="uid://ccrb5xsnphc8" path="res://inputs/base_mode/rotate_floorplane.tres" id="5_4u7i3"]
|
[ext_resource type="Resource" uid="uid://ccrb5xsnphc8" path="res://inputs/base_mode/rotate_floorplane.tres" id="5_4u7i3"]
|
||||||
[ext_resource type="PackedScene" uid="uid://hpsg4fqwrx1u" path="res://scenes/components/damage/CDamageable.tscn" id="5_jb43f"]
|
[ext_resource type="PackedScene" uid="uid://hpsg4fqwrx1u" path="res://scenes/components/damage/CDamageable.tscn" id="5_jb43f"]
|
||||||
[ext_resource type="Resource" uid="uid://f3vs6l4m623s" path="res://inputs/base_mode/move_left.tres" id="5_q14ux"]
|
[ext_resource type="Resource" uid="uid://f3vs6l4m623s" path="res://inputs/base_mode/move_left.tres" id="5_q14ux"]
|
||||||
|
[ext_resource type="Resource" uid="uid://ifeavnlps7hy" path="res://scenes/player_controller/resources/forge/exploding_sword.tres" id="5_u8yay"]
|
||||||
[ext_resource type="PackedScene" uid="uid://duju3atqgltkg" path="res://scenes/explosion/explosion.tscn" id="5_ue7xq"]
|
[ext_resource type="PackedScene" uid="uid://duju3atqgltkg" path="res://scenes/explosion/explosion.tscn" id="5_ue7xq"]
|
||||||
[ext_resource type="Resource" uid="uid://dyru7mxo121w6" path="res://scenes/player_controller/resources/player_normal_damage_mod.tres" id="6_cmijs"]
|
[ext_resource type="Resource" uid="uid://dyru7mxo121w6" path="res://scenes/player_controller/resources/player_normal_damage_mod.tres" id="6_cmijs"]
|
||||||
[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"]
|
||||||
@@ -53,12 +55,16 @@
|
|||||||
[ext_resource type="Script" uid="uid://cf1nsco3w0mf6" path="res://addons/godot_state_charts/transition.gd" id="28_n7qhm"]
|
[ext_resource type="Script" uid="uid://cf1nsco3w0mf6" path="res://addons/godot_state_charts/transition.gd" id="28_n7qhm"]
|
||||||
[ext_resource type="PackedScene" uid="uid://ckm3d6k08a72u" path="res://scenes/player_controller/components/weapon/weapon.tscn" id="29_wv70j"]
|
[ext_resource type="PackedScene" uid="uid://ckm3d6k08a72u" path="res://scenes/player_controller/components/weapon/weapon.tscn" id="29_wv70j"]
|
||||||
[ext_resource type="Script" uid="uid://bhuwv2nlcrunt" path="res://scenes/player_controller/PlayerUi.cs" id="30_2ghaa"]
|
[ext_resource type="Script" uid="uid://bhuwv2nlcrunt" path="res://scenes/player_controller/PlayerUi.cs" id="30_2ghaa"]
|
||||||
[ext_resource type="Texture2D" uid="uid://bnwj7ltdfximr" path="res://icon.svg" id="30_h23go"]
|
|
||||||
[ext_resource type="Texture2D" uid="uid://chvt6g0xn5c2m" path="res://scenes/player_controller/components/dash/light-ring.jpg" id="32_lgpc8"]
|
[ext_resource type="Texture2D" uid="uid://chvt6g0xn5c2m" path="res://scenes/player_controller/components/dash/light-ring.jpg" id="32_lgpc8"]
|
||||||
[ext_resource type="Script" uid="uid://b4dwolbvt8our" path="res://addons/godot_state_charts/history_state.gd" id="41_ruloh"]
|
[ext_resource type="Script" uid="uid://b4dwolbvt8our" path="res://addons/godot_state_charts/history_state.gd" id="41_ruloh"]
|
||||||
[ext_resource type="Texture2D" uid="uid://c40orhfdgsim" path="res://assets/ui/IconGodotNode/white/icon_circle.png" id="45_u8rdp"]
|
[ext_resource type="Texture2D" uid="uid://c40orhfdgsim" path="res://assets/ui/IconGodotNode/white/icon_circle.png" id="45_u8rdp"]
|
||||||
[ext_resource type="PackedScene" uid="uid://cyw8p0p6a78tl" path="res://scenes/ui/healthbar/healthbar.tscn" id="47_76kmc"]
|
[ext_resource type="PackedScene" uid="uid://cyw8p0p6a78tl" path="res://scenes/ui/healthbar/healthbar.tscn" id="47_76kmc"]
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_mpigw"]
|
||||||
|
script = ExtResource("2_u8yay")
|
||||||
|
ContainerTags = Array[String](["character.player"])
|
||||||
|
metadata/_custom_type_script = "uid://cw525n4mjqgw0"
|
||||||
|
|
||||||
[sub_resource type="Resource" id="Resource_5gbhg"]
|
[sub_resource type="Resource" id="Resource_5gbhg"]
|
||||||
script = ExtResource("11_u8yay")
|
script = ExtResource("11_u8yay")
|
||||||
Tag = "events.player.empowered_action_used"
|
Tag = "events.player.empowered_action_used"
|
||||||
@@ -148,8 +154,10 @@ bg_color = Color(0.15869555, 0.64034444, 0.906125, 1)
|
|||||||
[node name="Player" type="CharacterBody3D" unique_id=709076448]
|
[node name="Player" type="CharacterBody3D" unique_id=709076448]
|
||||||
collision_mask = 272
|
collision_mask = 272
|
||||||
script = ExtResource("1_poq2x")
|
script = ExtResource("1_poq2x")
|
||||||
|
BaseTags = SubResource("Resource_mpigw")
|
||||||
EmpoweredActionUsed = SubResource("Resource_5gbhg")
|
EmpoweredActionUsed = SubResource("Resource_5gbhg")
|
||||||
EmpoweredActionAbility = ExtResource("10_2rkt1")
|
EmpoweredActionAbility = ExtResource("10_2rkt1")
|
||||||
|
WeaponExplosionBehavior = ExtResource("5_u8yay")
|
||||||
DefaultPermanentEffects = [ExtResource("5_2rkt1")]
|
DefaultPermanentEffects = [ExtResource("5_2rkt1")]
|
||||||
EmpoweredActionEffects = [ExtResource("6_u8yay")]
|
EmpoweredActionEffects = [ExtResource("6_u8yay")]
|
||||||
AimAssistStrength = 0.3
|
AimAssistStrength = 0.3
|
||||||
@@ -182,7 +190,8 @@ MaxNumberOfEmpoweredActions = 3
|
|||||||
SimpleDashStrength = 18.0
|
SimpleDashStrength = 18.0
|
||||||
SimpleDashTime = 0.2
|
SimpleDashTime = 0.2
|
||||||
AimedDashTime = 0.2
|
AimedDashTime = 0.2
|
||||||
PostDashSpeed = 30.0
|
PostDashSpeed = 25.0
|
||||||
|
TimeScaleAimInAir = 0.08
|
||||||
SlamSpeed = 80.0
|
SlamSpeed = 80.0
|
||||||
FlatGroundSlideSpeedLossRate = 0.996
|
FlatGroundSlideSpeedLossRate = 0.996
|
||||||
GroundSlideJumpMultiplier = 0.1
|
GroundSlideJumpMultiplier = 0.1
|
||||||
@@ -460,10 +469,6 @@ one_shot = true
|
|||||||
[node name="AirborneDashCooldown" type="Timer" parent="." unique_id=976335884]
|
[node name="AirborneDashCooldown" type="Timer" parent="." unique_id=976335884]
|
||||||
one_shot = true
|
one_shot = true
|
||||||
|
|
||||||
[node name="PowerCooldown" type="Timer" parent="." unique_id=1091679675]
|
|
||||||
wait_time = 2.0
|
|
||||||
one_shot = true
|
|
||||||
|
|
||||||
[node name="TimeScaleAimInAir" type="Timer" parent="." unique_id=1346687662]
|
[node name="TimeScaleAimInAir" type="Timer" parent="." unique_id=1346687662]
|
||||||
wait_time = 5.0
|
wait_time = 5.0
|
||||||
one_shot = true
|
one_shot = true
|
||||||
@@ -487,50 +492,6 @@ grow_vertical = 2
|
|||||||
mouse_filter = 1
|
mouse_filter = 1
|
||||||
script = ExtResource("30_2ghaa")
|
script = ExtResource("30_2ghaa")
|
||||||
|
|
||||||
[node name="MarginContainer" type="MarginContainer" parent="UI" unique_id=256626576]
|
|
||||||
layout_mode = 1
|
|
||||||
anchors_preset = 15
|
|
||||||
anchor_right = 1.0
|
|
||||||
anchor_bottom = 1.0
|
|
||||||
grow_horizontal = 2
|
|
||||||
grow_vertical = 2
|
|
||||||
mouse_filter = 2
|
|
||||||
theme_override_constants/margin_left = 50
|
|
||||||
theme_override_constants/margin_top = 50
|
|
||||||
theme_override_constants/margin_right = 50
|
|
||||||
theme_override_constants/margin_bottom = 50
|
|
||||||
|
|
||||||
[node name="VBoxContainer" type="VBoxContainer" parent="UI/MarginContainer" unique_id=74238183]
|
|
||||||
layout_mode = 2
|
|
||||||
size_flags_horizontal = 0
|
|
||||||
size_flags_vertical = 0
|
|
||||||
|
|
||||||
[node name="DashesLabel" type="Label" parent="UI/MarginContainer/VBoxContainer" unique_id=245851052]
|
|
||||||
layout_mode = 2
|
|
||||||
text = "Empowered actions"
|
|
||||||
|
|
||||||
[node name="HBoxContainer" type="HBoxContainer" parent="UI/MarginContainer/VBoxContainer" unique_id=81461575]
|
|
||||||
custom_minimum_size = Vector2(0, 30)
|
|
||||||
layout_mode = 2
|
|
||||||
|
|
||||||
[node name="Dash1" type="TextureRect" parent="UI/MarginContainer/VBoxContainer/HBoxContainer" unique_id=108366179]
|
|
||||||
unique_name_in_owner = true
|
|
||||||
layout_mode = 2
|
|
||||||
texture = ExtResource("30_h23go")
|
|
||||||
expand_mode = 2
|
|
||||||
|
|
||||||
[node name="Dash2" type="TextureRect" parent="UI/MarginContainer/VBoxContainer/HBoxContainer" unique_id=140491034]
|
|
||||||
unique_name_in_owner = true
|
|
||||||
layout_mode = 2
|
|
||||||
texture = ExtResource("30_h23go")
|
|
||||||
expand_mode = 2
|
|
||||||
|
|
||||||
[node name="Dash3" type="TextureRect" parent="UI/MarginContainer/VBoxContainer/HBoxContainer" unique_id=1447308392]
|
|
||||||
unique_name_in_owner = true
|
|
||||||
layout_mode = 2
|
|
||||||
texture = ExtResource("30_h23go")
|
|
||||||
expand_mode = 2
|
|
||||||
|
|
||||||
[node name="CenterContainer" type="CenterContainer" parent="UI" unique_id=1479818685]
|
[node name="CenterContainer" type="CenterContainer" parent="UI" unique_id=1479818685]
|
||||||
custom_minimum_size = Vector2(1920, 1080)
|
custom_minimum_size = Vector2(1920, 1080)
|
||||||
layout_mode = 1
|
layout_mode = 1
|
||||||
@@ -549,24 +510,6 @@ layout_mode = 2
|
|||||||
texture = ExtResource("32_lgpc8")
|
texture = ExtResource("32_lgpc8")
|
||||||
expand_mode = 1
|
expand_mode = 1
|
||||||
|
|
||||||
[node name="CenterContainer2" type="CenterContainer" parent="UI" unique_id=1912042835]
|
|
||||||
layout_mode = 1
|
|
||||||
anchors_preset = 15
|
|
||||||
anchor_right = 1.0
|
|
||||||
anchor_bottom = 1.0
|
|
||||||
grow_horizontal = 2
|
|
||||||
grow_vertical = 2
|
|
||||||
mouse_filter = 2
|
|
||||||
|
|
||||||
[node name="MarginContainer" type="MarginContainer" parent="UI/CenterContainer2" unique_id=812091083]
|
|
||||||
layout_mode = 2
|
|
||||||
theme_override_constants/margin_top = 50
|
|
||||||
|
|
||||||
[node name="DashCooldownIndicator" type="ColorRect" parent="UI/CenterContainer2/MarginContainer" unique_id=1946930017]
|
|
||||||
unique_name_in_owner = true
|
|
||||||
custom_minimum_size = Vector2(100, 10)
|
|
||||||
layout_mode = 2
|
|
||||||
|
|
||||||
[node name="EnemyTarget" type="TextureRect" parent="UI" unique_id=1113835926]
|
[node name="EnemyTarget" type="TextureRect" parent="UI" unique_id=1113835926]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
modulate = Color(0, 0.61278194, 0.56044877, 1)
|
modulate = Color(0, 0.61278194, 0.56044877, 1)
|
||||||
@@ -654,43 +597,6 @@ delay_in_seconds = "0.0"
|
|||||||
[node name="Canceled" type="Node" parent="StateChart/Root/Aim" unique_id=623373725]
|
[node name="Canceled" type="Node" parent="StateChart/Root/Aim" unique_id=623373725]
|
||||||
script = ExtResource("27_34snm")
|
script = ExtResource("27_34snm")
|
||||||
|
|
||||||
[node name="PowerReserve" type="Node" parent="StateChart/Root" unique_id=240635144]
|
|
||||||
script = ExtResource("26_infe6")
|
|
||||||
initial_state = NodePath("Full")
|
|
||||||
|
|
||||||
[node name="ToExpired" type="Node" parent="StateChart/Root/PowerReserve" unique_id=1254755786]
|
|
||||||
script = ExtResource("28_n7qhm")
|
|
||||||
to = NodePath("../Expired")
|
|
||||||
event = &"expired"
|
|
||||||
delay_in_seconds = "0.0"
|
|
||||||
|
|
||||||
[node name="Recharge" type="Node" parent="StateChart/Root/PowerReserve" unique_id=832143267]
|
|
||||||
script = ExtResource("28_n7qhm")
|
|
||||||
to = NodePath("../AtLeastOneCharge")
|
|
||||||
event = &"recharge"
|
|
||||||
delay_in_seconds = "0.0"
|
|
||||||
|
|
||||||
[node name="ToFull" type="Node" parent="StateChart/Root/PowerReserve" unique_id=984127202]
|
|
||||||
script = ExtResource("28_n7qhm")
|
|
||||||
to = NodePath("../Full")
|
|
||||||
event = &"fully_charged"
|
|
||||||
delay_in_seconds = "0.0"
|
|
||||||
|
|
||||||
[node name="Expired" type="Node" parent="StateChart/Root/PowerReserve" unique_id=1558500638]
|
|
||||||
script = ExtResource("27_34snm")
|
|
||||||
|
|
||||||
[node name="AtLeastOneCharge" type="Node" parent="StateChart/Root/PowerReserve" unique_id=10506240]
|
|
||||||
script = ExtResource("27_34snm")
|
|
||||||
|
|
||||||
[node name="Full" type="Node" parent="StateChart/Root/PowerReserve" unique_id=1559116737]
|
|
||||||
script = ExtResource("27_34snm")
|
|
||||||
|
|
||||||
[node name="PowerUsed" type="Node" parent="StateChart/Root/PowerReserve/Full" unique_id=397112501]
|
|
||||||
script = ExtResource("28_n7qhm")
|
|
||||||
to = NodePath("../../AtLeastOneCharge")
|
|
||||||
event = &"power_used"
|
|
||||||
delay_in_seconds = "0.0"
|
|
||||||
|
|
||||||
[node name="Attack" type="Node" parent="StateChart/Root" unique_id=808083793]
|
[node name="Attack" type="Node" parent="StateChart/Root" unique_id=808083793]
|
||||||
script = ExtResource("26_infe6")
|
script = ExtResource("26_infe6")
|
||||||
initial_state = NodePath("Ready")
|
initial_state = NodePath("Ready")
|
||||||
|
|||||||
@@ -10,7 +10,6 @@ using Movementtests.tools;
|
|||||||
[GlobalClass, Icon("res://assets/ui/IconGodotNode/control/icon_text_panel.png")]
|
[GlobalClass, Icon("res://assets/ui/IconGodotNode/control/icon_text_panel.png")]
|
||||||
public partial class PlayerUi : Control, ICueHandler
|
public partial class PlayerUi : Control, ICueHandler
|
||||||
{
|
{
|
||||||
internal TextureRect[] DashIcons = new TextureRect[3];
|
|
||||||
private TextureRect _enemyTarget = null!;
|
private TextureRect _enemyTarget = null!;
|
||||||
private Healthbar _healthbar = null!;
|
private Healthbar _healthbar = null!;
|
||||||
private Healthbar _manabar = null!;
|
private Healthbar _manabar = null!;
|
||||||
@@ -31,10 +30,6 @@ public partial class PlayerUi : Control, ICueHandler
|
|||||||
|
|
||||||
public override void _Ready()
|
public override void _Ready()
|
||||||
{
|
{
|
||||||
DashIcons[0] = GetNode<TextureRect>("%Dash1");
|
|
||||||
DashIcons[1] = GetNode<TextureRect>("%Dash2");
|
|
||||||
DashIcons[2] = GetNode<TextureRect>("%Dash3");
|
|
||||||
|
|
||||||
_enemyTarget = GetNode<TextureRect>("%EnemyTarget");
|
_enemyTarget = GetNode<TextureRect>("%EnemyTarget");
|
||||||
_healthbar = GetNode<Healthbar>("%Healthbar");
|
_healthbar = GetNode<Healthbar>("%Healthbar");
|
||||||
_manabar = GetNode<Healthbar>("%Manabar");
|
_manabar = GetNode<Healthbar>("%Manabar");
|
||||||
@@ -67,17 +62,6 @@ public partial class PlayerUi : Control, ICueHandler
|
|||||||
_enemyTarget.SetModulate(modulation);
|
_enemyTarget.SetModulate(modulation);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public void SetNumberOfDashesLeft(int numberOfDashes)
|
|
||||||
{
|
|
||||||
int index = 1;
|
|
||||||
foreach (var dashIcon in DashIcons)
|
|
||||||
{
|
|
||||||
dashIcon.SetVisible(index <= numberOfDashes);
|
|
||||||
index++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void OnHealthChanged(IHealthable healthable, HealthChangedRecord healthChanged)
|
public void OnHealthChanged(IHealthable healthable, HealthChangedRecord healthChanged)
|
||||||
{
|
{
|
||||||
_healthbar.CurrentHealth = healthChanged.CurrentHealth;
|
_healthbar.CurrentHealth = healthChanged.CurrentHealth;
|
||||||
|
|||||||
@@ -40,13 +40,12 @@ public partial class WeaponSystem : RigidBody3D, IDamageDealer, IForgeEntity
|
|||||||
public delegate void WeaponRetrievedEventHandler();
|
public delegate void WeaponRetrievedEventHandler();
|
||||||
|
|
||||||
[Export]
|
[Export]
|
||||||
public ForgeTagContainer BaseTags { get; set; } = new();
|
public ForgeTagContainer BaseTags { get; set; }
|
||||||
[Export] public ForgeAbilityData[] WeaponAbilities { get; set; } = Array.Empty<ForgeAbilityData>();
|
[Export] public ForgeAbilityData FlyingTickAbility { get; set; }
|
||||||
[Export] public ForgeAbilityData FlyingTickAbility { get; set; } = new();
|
|
||||||
|
|
||||||
[Export]
|
[Export]
|
||||||
public RDamage RDamage { get; set; }
|
public RDamage RDamage { get; set; }
|
||||||
[Export(PropertyHint.Range, "0,100,1,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;
|
||||||
@@ -167,25 +166,6 @@ public partial class WeaponSystem : RigidBody3D, IDamageDealer, IForgeEntity
|
|||||||
// TODO: Waiting on bug resolve
|
// TODO: Waiting on bug resolve
|
||||||
_weaponFlyingAbility = Abilities.GrantAbilityPermanently(FlyingTickAbility.GetAbilityData(), 1, LevelComparison.None, this);
|
_weaponFlyingAbility = Abilities.GrantAbilityPermanently(FlyingTickAbility.GetAbilityData(), 1, LevelComparison.None, this);
|
||||||
|
|
||||||
foreach (var ability in WeaponAbilities)
|
|
||||||
{
|
|
||||||
var leftGrantAbilityConfig = new GrantAbilityConfig(
|
|
||||||
ability.GetAbilityData(),
|
|
||||||
ScalableLevel: new ScalableInt(1),
|
|
||||||
RemovalPolicy: AbilityDeactivationPolicy.CancelImmediately,
|
|
||||||
InhibitionPolicy: AbilityDeactivationPolicy.CancelImmediately,
|
|
||||||
TryActivateOnGrant: false,
|
|
||||||
TryActivateOnEnable: false,
|
|
||||||
LevelOverridePolicy: LevelComparison.Higher);
|
|
||||||
|
|
||||||
var leftGrantComponent = new GrantAbilityEffectComponent([leftGrantAbilityConfig]);
|
|
||||||
var leftGrantEffect = new EffectData(
|
|
||||||
"Grant Weapon Ability",
|
|
||||||
new DurationData(DurationType.Infinite),
|
|
||||||
effectComponents: [leftGrantComponent]);
|
|
||||||
EffectsManager.ApplyEffect(new Effect(leftGrantEffect, new EffectOwnership(this, this)));
|
|
||||||
}
|
|
||||||
|
|
||||||
BodyEntered += OnThrownWeaponReachesGround;
|
BodyEntered += OnThrownWeaponReachesGround;
|
||||||
|
|
||||||
InHandState.StateExited += WeaponLeft;
|
InHandState.StateExited += WeaponLeft;
|
||||||
@@ -257,13 +237,62 @@ public partial class WeaponSystem : RigidBody3D, IDamageDealer, IForgeEntity
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
Events.Subscribe(WeaponStoppedFlyingEventTag, data =>
|
Events.Subscribe(WeaponStoppedFlyingEventTag, _ => { _weaponFlyingAbility.Cancel(); });
|
||||||
{
|
|
||||||
// TODO: Waiting on bug resolve
|
|
||||||
_weaponFlyingAbility.Cancel();
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private List<ActiveEffectHandle> _grantedWeaponStartedFlyingAbilities = new List<ActiveEffectHandle>();
|
||||||
|
private List<ActiveEffectHandle> _grantedWeaponStoppedFlyingAbilities = new List<ActiveEffectHandle>();
|
||||||
|
private List<ActiveEffectHandle> _grantedWeaponFlyingTickAbilities = new List<ActiveEffectHandle>();
|
||||||
|
|
||||||
|
public enum WeaponEvent
|
||||||
|
{
|
||||||
|
StartedFlying,
|
||||||
|
StoppedFlying,
|
||||||
|
FlyingTick
|
||||||
|
}
|
||||||
|
|
||||||
|
public void GrantNewAbilityForEvent(WeaponEvent forEvent, ForgeAbilityBehavior abilityBehavior)
|
||||||
|
{
|
||||||
|
var abilitiesMap = new Dictionary<WeaponEvent, List<ActiveEffectHandle>>
|
||||||
|
{
|
||||||
|
{ WeaponEvent.StartedFlying, _grantedWeaponStartedFlyingAbilities },
|
||||||
|
{ WeaponEvent.StoppedFlying, _grantedWeaponStoppedFlyingAbilities },
|
||||||
|
{ WeaponEvent.FlyingTick, _grantedWeaponFlyingTickAbilities },
|
||||||
|
};
|
||||||
|
|
||||||
|
var eventTagsMap = new Dictionary<WeaponEvent, Tag>
|
||||||
|
{
|
||||||
|
{ WeaponEvent.StartedFlying, WeaponStartedFlyingEventTag },
|
||||||
|
{ WeaponEvent.StoppedFlying, WeaponStoppedFlyingEventTag },
|
||||||
|
{ WeaponEvent.FlyingTick, WeaponFlyingTickEventTag },
|
||||||
|
};
|
||||||
|
|
||||||
|
var ability = new AbilityData(
|
||||||
|
"Ability",
|
||||||
|
behaviorFactory: abilityBehavior.GetBehavior,
|
||||||
|
abilityTriggerData: AbilityTriggerData.ForEvent(eventTagsMap[forEvent]));
|
||||||
|
|
||||||
|
var leftGrantAbilityConfig = new GrantAbilityConfig(
|
||||||
|
ability,
|
||||||
|
ScalableLevel: new ScalableInt(1),
|
||||||
|
RemovalPolicy: AbilityDeactivationPolicy.CancelImmediately,
|
||||||
|
InhibitionPolicy: AbilityDeactivationPolicy.CancelImmediately,
|
||||||
|
TryActivateOnGrant: false,
|
||||||
|
TryActivateOnEnable: false,
|
||||||
|
LevelOverridePolicy: LevelComparison.Higher);
|
||||||
|
|
||||||
|
var leftGrantComponent = new GrantAbilityEffectComponent([leftGrantAbilityConfig]);
|
||||||
|
var leftGrantEffect = new EffectData(
|
||||||
|
"Grant Weapon Ability",
|
||||||
|
new DurationData(DurationType.Infinite),
|
||||||
|
effectComponents: [leftGrantComponent]);
|
||||||
|
var effectHandle = EffectsManager.ApplyEffect(new Effect(leftGrantEffect, new EffectOwnership(this, this)));
|
||||||
|
if (effectHandle == null) return;
|
||||||
|
|
||||||
|
abilitiesMap[forEvent].Add(effectHandle);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public void WeaponLeft()
|
public void WeaponLeft()
|
||||||
{
|
{
|
||||||
Visible = true;
|
Visible = true;
|
||||||
@@ -377,9 +406,12 @@ public partial class WeaponSystem : RigidBody3D, IDamageDealer, IForgeEntity
|
|||||||
|
|
||||||
public override void _Process(double delta)
|
public override void _Process(double delta)
|
||||||
{
|
{
|
||||||
|
EffectsManager.UpdateEffects(delta);
|
||||||
|
|
||||||
if (!FlyingState.Active) return;
|
if (!FlyingState.Active) return;
|
||||||
|
|
||||||
WeaponMesh.Rotation = new Vector3(WeaponMesh.Rotation.X, WeaponMesh.Rotation.Y + (float) delta * 100, WeaponMesh.Rotation.Z);
|
WeaponMesh.Rotation = new Vector3(WeaponMesh.Rotation.X, WeaponMesh.Rotation.Y + (float) delta * 100, WeaponMesh.Rotation.Z);
|
||||||
|
//GD.Print(Attributes["WeaponAttributeSet.Level"].CurrentValue);
|
||||||
//LookAt(GlobalTransform.Origin + LinearVelocity.Normalized(), Vector3.Up, false);
|
//LookAt(GlobalTransform.Origin + LinearVelocity.Normalized(), Vector3.Up, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,19 +1,22 @@
|
|||||||
[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="Script" uid="uid://cw525n4mjqgw0" path="res://addons/forge/resources/ForgeTagContainer.cs" id="2_l1xlx"]
|
||||||
[ext_resource type="Script" uid="uid://jitubgv6judn" path="res://scenes/components/damage/RDamage.cs" id="2_m0v1h"]
|
[ext_resource type="Script" uid="uid://jitubgv6judn" path="res://scenes/components/damage/RDamage.cs" id="2_m0v1h"]
|
||||||
[ext_resource type="Resource" uid="uid://cu0685gspk2fk" path="res://scenes/player_controller/resources/forge/exploding_sword_weapon_land.tres" id="2_pgbtr"]
|
|
||||||
[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://busdbvfi3jiic" path="res://scenes/player_controller/resources/forge/exploding_sword_weapon_left.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://bl0mng4kl1xy8" path="res://scenes/player_controller/resources/forge/exploding_sword_weapon_flight.tres" id="4_2wsgo"]
|
|
||||||
[ext_resource type="Resource" uid="uid://btnnpqann3ktp" path="res://scenes/player_controller/resources/forge/weapon_flying_tick_ability.tres" id="4_7bruw"]
|
[ext_resource type="Resource" uid="uid://btnnpqann3ktp" path="res://scenes/player_controller/resources/forge/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"]
|
||||||
[ext_resource type="Script" uid="uid://jk2jm1g6q853" path="res://addons/godot_state_charts/compound_state.gd" id="4_svc06"]
|
[ext_resource type="Script" uid="uid://jk2jm1g6q853" path="res://addons/godot_state_charts/compound_state.gd" id="4_svc06"]
|
||||||
[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"]
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_06gln"]
|
||||||
|
script = ExtResource("2_l1xlx")
|
||||||
|
ContainerTags = Array[String](["weapon"])
|
||||||
|
metadata/_custom_type_script = "uid://cw525n4mjqgw0"
|
||||||
|
|
||||||
[sub_resource type="Resource" id="Resource_jpdh0"]
|
[sub_resource type="Resource" id="Resource_jpdh0"]
|
||||||
script = ExtResource("2_m0v1h")
|
script = ExtResource("2_m0v1h")
|
||||||
DamageDealt = 2.0
|
DamageDealt = 2.0
|
||||||
@@ -60,7 +63,7 @@ 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")
|
||||||
WeaponAbilities = [ExtResource("2_pgbtr"), ExtResource("3_7bruw"), ExtResource("4_2wsgo")]
|
BaseTags = SubResource("Resource_06gln")
|
||||||
FlyingTickAbility = ExtResource("4_7bruw")
|
FlyingTickAbility = ExtResource("4_7bruw")
|
||||||
RDamage = SubResource("Resource_jpdh0")
|
RDamage = SubResource("Resource_jpdh0")
|
||||||
|
|
||||||
|
|||||||
@@ -104,7 +104,7 @@ script = ExtResource("4_5fdax")
|
|||||||
|
|
||||||
[sub_resource type="Resource" id="Resource_uv4a1"]
|
[sub_resource type="Resource" id="Resource_uv4a1"]
|
||||||
script = ExtResource("4_5fdax")
|
script = ExtResource("4_5fdax")
|
||||||
BaseValue = -30.0
|
BaseValue = -50.0
|
||||||
metadata/_custom_type_script = "uid://cn3b4ya15fg7e"
|
metadata/_custom_type_script = "uid://cn3b4ya15fg7e"
|
||||||
|
|
||||||
[sub_resource type="Resource" id="Resource_dhni4"]
|
[sub_resource type="Resource" id="Resource_dhni4"]
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
[gd_resource type="Resource" script_class="ForgeAbilityData" format=3 uid="uid://cu0685gspk2fk"]
|
[gd_resource type="Resource" script_class="ForgeAbilityData" format=3 uid="uid://cu0685gspk2fk"]
|
||||||
|
|
||||||
[ext_resource type="Resource" uid="uid://ifeavnlps7hy" path="res://scenes/player_controller/resources/forge/exploding_sword.tres" id="1_l4v7e"]
|
[ext_resource type="Resource" uid="uid://ifeavnlps7hy" path="res://scenes/player_controller/resources/forge/exploding_sword.tres" id="1_6c3kr"]
|
||||||
[ext_resource type="Script" uid="uid://cw525n4mjqgw0" path="res://addons/forge/resources/ForgeTagContainer.cs" id="2_6c3kr"]
|
[ext_resource type="Script" uid="uid://cw525n4mjqgw0" path="res://addons/forge/resources/ForgeTagContainer.cs" id="2_6c3kr"]
|
||||||
[ext_resource type="Script" uid="uid://dpakv7agvir6y" path="res://addons/forge/resources/ForgeTag.cs" id="2_l4v7e"]
|
[ext_resource type="Script" uid="uid://dpakv7agvir6y" path="res://addons/forge/resources/ForgeTag.cs" id="2_l4v7e"]
|
||||||
[ext_resource type="Script" uid="uid://dhxfbxh54pyxp" path="res://addons/forge/resources/abilities/ForgeAbilityData.cs" id="3_ixeut"]
|
[ext_resource type="Script" uid="uid://dhxfbxh54pyxp" path="res://addons/forge/resources/abilities/ForgeAbilityData.cs" id="3_ixeut"]
|
||||||
@@ -19,7 +19,7 @@ metadata/_custom_type_script = "uid://dpakv7agvir6y"
|
|||||||
script = ExtResource("3_ixeut")
|
script = ExtResource("3_ixeut")
|
||||||
Name = "Exploding Sword on Weapon Land"
|
Name = "Exploding Sword on Weapon Land"
|
||||||
CooldownEffects = []
|
CooldownEffects = []
|
||||||
AbilityBehavior = ExtResource("1_l4v7e")
|
AbilityBehavior = ExtResource("1_6c3kr")
|
||||||
TriggerSource = 1
|
TriggerSource = 1
|
||||||
TriggerTag = SubResource("Resource_6c3kr")
|
TriggerTag = SubResource("Resource_6c3kr")
|
||||||
AbilityTags = SubResource("Resource_ixeut")
|
AbilityTags = SubResource("Resource_ixeut")
|
||||||
|
|||||||
@@ -0,0 +1,9 @@
|
|||||||
|
[gd_resource type="Resource" script_class="ForgeEffectApplicationBehavior" format=3 uid="uid://1tmxayi3nygi"]
|
||||||
|
|
||||||
|
[ext_resource type="Resource" uid="uid://bvidrwyuoos4g" path="res://scenes/player_controller/resources/forge/raise_flying_tick_event_periodically.tres" id="1_hlq5f"]
|
||||||
|
[ext_resource type="Script" uid="uid://cl5hudinl1rex" path="res://forge/abilities/ForgeEffectApplicationBehavior.cs" id="2_f5qgs"]
|
||||||
|
|
||||||
|
[resource]
|
||||||
|
script = ExtResource("2_f5qgs")
|
||||||
|
EffectData = ExtResource("1_hlq5f")
|
||||||
|
metadata/_custom_type_script = "uid://cl5hudinl1rex"
|
||||||
@@ -39,7 +39,7 @@ script = ExtResource("3_fp8ou")
|
|||||||
|
|
||||||
[sub_resource type="Resource" id="Resource_mbpss"]
|
[sub_resource type="Resource" id="Resource_mbpss"]
|
||||||
script = ExtResource("3_fp8ou")
|
script = ExtResource("3_fp8ou")
|
||||||
BaseValue = 1.0
|
BaseValue = 2.0
|
||||||
metadata/_custom_type_script = "uid://cn3b4ya15fg7e"
|
metadata/_custom_type_script = "uid://cn3b4ya15fg7e"
|
||||||
|
|
||||||
[sub_resource type="Resource" id="Resource_exi3e"]
|
[sub_resource type="Resource" id="Resource_exi3e"]
|
||||||
|
|||||||
@@ -0,0 +1,34 @@
|
|||||||
|
[gd_resource type="Resource" script_class="ForgeEffectData" format=3 uid="uid://bvidrwyuoos4g"]
|
||||||
|
|
||||||
|
[ext_resource type="Resource" uid="uid://oe2suroa1klj" path="res://scenes/player_controller/resources/forge/raise_flying_tick_event.tres" id="1_cd13a"]
|
||||||
|
[ext_resource type="Script" uid="uid://1hgogislo1l6" path="res://addons/forge/resources/magnitudes/ForgeScalableInt.cs" id="2_yyxtw"]
|
||||||
|
[ext_resource type="Script" uid="uid://cn3b4ya15fg7e" path="res://addons/forge/resources/magnitudes/ForgeScalableFloat.cs" id="3_skmyt"]
|
||||||
|
[ext_resource type="Script" uid="uid://b83hf13nj37k3" path="res://addons/forge/resources/ForgeEffectData.cs" id="4_7ma6b"]
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_dgkld"]
|
||||||
|
script = ExtResource("2_yyxtw")
|
||||||
|
BaseValue = 1
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_1ften"]
|
||||||
|
script = ExtResource("3_skmyt")
|
||||||
|
BaseValue = 0.2
|
||||||
|
metadata/_custom_type_script = "uid://cn3b4ya15fg7e"
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_l278c"]
|
||||||
|
script = ExtResource("2_yyxtw")
|
||||||
|
BaseValue = 1
|
||||||
|
|
||||||
|
[resource]
|
||||||
|
script = ExtResource("4_7ma6b")
|
||||||
|
Name = "Call Flying Tick Event Periodically"
|
||||||
|
Modifiers = []
|
||||||
|
Components = []
|
||||||
|
Executions = Array[Object]([ExtResource("1_cd13a")])
|
||||||
|
DurationType = 1
|
||||||
|
HasPeriodicApplication = true
|
||||||
|
Period = SubResource("Resource_1ften")
|
||||||
|
ExecuteOnApplication = true
|
||||||
|
StackLimit = SubResource("Resource_l278c")
|
||||||
|
InitialStack = SubResource("Resource_dgkld")
|
||||||
|
Cues = []
|
||||||
|
metadata/_custom_type_script = "uid://b83hf13nj37k3"
|
||||||
@@ -1,46 +1,9 @@
|
|||||||
[gd_resource type="Resource" script_class="ForgeAbilityData" format=3 uid="uid://btnnpqann3ktp"]
|
[gd_resource type="Resource" script_class="ForgeAbilityData" format=3 uid="uid://btnnpqann3ktp"]
|
||||||
|
|
||||||
[ext_resource type="Resource" uid="uid://oe2suroa1klj" path="res://scenes/player_controller/resources/forge/raise_flying_tick_event.tres" id="1_pdt6v"]
|
[ext_resource type="Resource" uid="uid://1tmxayi3nygi" path="res://scenes/player_controller/resources/forge/flying tick application ability behavior.tres" id="1_twa0w"]
|
||||||
[ext_resource type="Script" uid="uid://dhxfbxh54pyxp" path="res://addons/forge/resources/abilities/ForgeAbilityData.cs" id="1_vh0wp"]
|
[ext_resource type="Script" uid="uid://dhxfbxh54pyxp" path="res://addons/forge/resources/abilities/ForgeAbilityData.cs" id="1_vh0wp"]
|
||||||
[ext_resource type="Script" uid="uid://1hgogislo1l6" path="res://addons/forge/resources/magnitudes/ForgeScalableInt.cs" id="2_xkoyb"]
|
|
||||||
[ext_resource type="Script" uid="uid://cn3b4ya15fg7e" path="res://addons/forge/resources/magnitudes/ForgeScalableFloat.cs" id="3_j2gem"]
|
|
||||||
[ext_resource type="Script" uid="uid://b83hf13nj37k3" path="res://addons/forge/resources/ForgeEffectData.cs" id="4_e2sm2"]
|
|
||||||
[ext_resource type="Script" uid="uid://cl5hudinl1rex" path="res://forge/abilities/ForgeEffectApplicationBehavior.cs" id="5_trglf"]
|
|
||||||
[ext_resource type="Script" uid="uid://dpakv7agvir6y" path="res://addons/forge/resources/ForgeTag.cs" id="6_napws"]
|
[ext_resource type="Script" uid="uid://dpakv7agvir6y" path="res://addons/forge/resources/ForgeTag.cs" id="6_napws"]
|
||||||
|
|
||||||
[sub_resource type="Resource" id="Resource_dgkld"]
|
|
||||||
script = ExtResource("2_xkoyb")
|
|
||||||
BaseValue = 1
|
|
||||||
|
|
||||||
[sub_resource type="Resource" id="Resource_1ften"]
|
|
||||||
script = ExtResource("3_j2gem")
|
|
||||||
BaseValue = 0.2
|
|
||||||
metadata/_custom_type_script = "uid://cn3b4ya15fg7e"
|
|
||||||
|
|
||||||
[sub_resource type="Resource" id="Resource_l278c"]
|
|
||||||
script = ExtResource("2_xkoyb")
|
|
||||||
BaseValue = 1
|
|
||||||
|
|
||||||
[sub_resource type="Resource" id="Resource_esyoj"]
|
|
||||||
script = ExtResource("4_e2sm2")
|
|
||||||
Name = "Call Flying Tick Event Periodically"
|
|
||||||
Modifiers = []
|
|
||||||
Components = []
|
|
||||||
Executions = Array[Object]([ExtResource("1_pdt6v")])
|
|
||||||
DurationType = 1
|
|
||||||
HasPeriodicApplication = true
|
|
||||||
Period = SubResource("Resource_1ften")
|
|
||||||
ExecuteOnApplication = true
|
|
||||||
StackLimit = SubResource("Resource_l278c")
|
|
||||||
InitialStack = SubResource("Resource_dgkld")
|
|
||||||
Cues = []
|
|
||||||
metadata/_custom_type_script = "uid://b83hf13nj37k3"
|
|
||||||
|
|
||||||
[sub_resource type="Resource" id="Resource_0xegy"]
|
|
||||||
script = ExtResource("5_trglf")
|
|
||||||
EffectData = SubResource("Resource_esyoj")
|
|
||||||
metadata/_custom_type_script = "uid://cl5hudinl1rex"
|
|
||||||
|
|
||||||
[sub_resource type="Resource" id="Resource_4aw8y"]
|
[sub_resource type="Resource" id="Resource_4aw8y"]
|
||||||
script = ExtResource("6_napws")
|
script = ExtResource("6_napws")
|
||||||
Tag = "events.weapon.startedflying"
|
Tag = "events.weapon.startedflying"
|
||||||
@@ -49,8 +12,9 @@ metadata/_custom_type_script = "uid://dpakv7agvir6y"
|
|||||||
[resource]
|
[resource]
|
||||||
script = ExtResource("1_vh0wp")
|
script = ExtResource("1_vh0wp")
|
||||||
Name = "Weapon Flying Tick"
|
Name = "Weapon Flying Tick"
|
||||||
|
RetriggerInstancedAbility = true
|
||||||
CooldownEffects = []
|
CooldownEffects = []
|
||||||
AbilityBehavior = SubResource("Resource_0xegy")
|
AbilityBehavior = ExtResource("1_twa0w")
|
||||||
TriggerSource = 1
|
TriggerSource = 1
|
||||||
TriggerTag = SubResource("Resource_4aw8y")
|
TriggerTag = SubResource("Resource_4aw8y")
|
||||||
metadata/_custom_type_script = "uid://dhxfbxh54pyxp"
|
metadata/_custom_type_script = "uid://dhxfbxh54pyxp"
|
||||||
|
|||||||
@@ -85,8 +85,6 @@ public partial class PlayerController : CharacterBody3D,
|
|||||||
public WeaponSystem WeaponSystem = null!;
|
public WeaponSystem WeaponSystem = null!;
|
||||||
public WallHugSystem WallHugSystem = null!;
|
public WallHugSystem WallHugSystem = null!;
|
||||||
public PlayerUi PlayerUi = null!;
|
public PlayerUi PlayerUi = null!;
|
||||||
public TextureRect DashIndicator = null!;
|
|
||||||
public ColorRect PowerCooldownIndicator = null!;
|
|
||||||
public Node3D DashIndicatorNode = null!;
|
public Node3D DashIndicatorNode = null!;
|
||||||
public MeshInstance3D DashIndicatorMesh = null!;
|
public MeshInstance3D DashIndicatorMesh = null!;
|
||||||
public CylinderMesh DashIndicatorMeshCylinder = null!;
|
public CylinderMesh DashIndicatorMeshCylinder = null!;
|
||||||
@@ -108,8 +106,6 @@ public partial class PlayerController : CharacterBody3D,
|
|||||||
public Variables SharedVariables { get; }
|
public Variables SharedVariables { get; }
|
||||||
|
|
||||||
// Inspector stuff
|
// Inspector stuff
|
||||||
[Export] public Marker3D TutorialWeaponTarget = null!;
|
|
||||||
[Export] public bool TutorialDone { get; set; }
|
|
||||||
[Export] public bool HasSword { get; set; } = true;
|
[Export] public bool HasSword { get; set; } = true;
|
||||||
[Export] public bool HasParry { get; set; } = true;
|
[Export] public bool HasParry { get; set; } = true;
|
||||||
|
|
||||||
@@ -117,15 +113,16 @@ public partial class PlayerController : CharacterBody3D,
|
|||||||
[ExportCategory("Forge")]
|
[ExportCategory("Forge")]
|
||||||
[ExportGroup("General")]
|
[ExportGroup("General")]
|
||||||
[Export]
|
[Export]
|
||||||
public ForgeTagContainer BaseTags { get; set; } = new();
|
public ForgeTagContainer BaseTags { get; set; }
|
||||||
[Export] public ForgeTag EmpoweredActionUsed;
|
[Export] public ForgeTag EmpoweredActionUsed;
|
||||||
|
|
||||||
[ExportGroup("Abilities")]
|
[ExportGroup("Abilities")]
|
||||||
[ExportSubgroup("Common and defaults")]
|
[ExportSubgroup("Common and defaults")]
|
||||||
[Export] public ForgeAbilityData EmpoweredActionAbility = null!;
|
[Export] public ForgeAbilityData EmpoweredActionAbility = null!;
|
||||||
[Export] public ForgeAbilityData[] DefaultPermanentAbilities = [];
|
[Export] public ForgeAbilityData[] DefaultPermanentAbilities = [];
|
||||||
[ExportSubgroup("WeaponThrow")]
|
|
||||||
[Export] public ForgeAbilityData[] AbilityLoadout = [];
|
[ExportSubgroup("WeaponThrow")] [Export]
|
||||||
|
public ForgeAbilityBehavior WeaponExplosionBehavior;
|
||||||
|
|
||||||
[ExportGroup("Effects")]
|
[ExportGroup("Effects")]
|
||||||
[ExportSubgroup("Common and defaults")]
|
[ExportSubgroup("Common and defaults")]
|
||||||
@@ -350,16 +347,6 @@ public partial class PlayerController : CharacterBody3D,
|
|||||||
private Vector3 _dashDirection = Vector3.Zero;
|
private Vector3 _dashDirection = Vector3.Zero;
|
||||||
private Vector3 _postDashThroughPosition = Vector3.Zero;
|
private Vector3 _postDashThroughPosition = Vector3.Zero;
|
||||||
private Vector3 _preDashVelocity = Vector3.Zero;
|
private Vector3 _preDashVelocity = Vector3.Zero;
|
||||||
private int _empoweredActionsLeft;
|
|
||||||
public int EmpoweredActionsLeft
|
|
||||||
{
|
|
||||||
get => _empoweredActionsLeft;
|
|
||||||
set
|
|
||||||
{
|
|
||||||
_empoweredActionsLeft = value;
|
|
||||||
PlayerUi.SetNumberOfDashesLeft(value);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Settings
|
// Settings
|
||||||
private float _lookSensitivityMultiplier = 1.0f;
|
private float _lookSensitivityMultiplier = 1.0f;
|
||||||
@@ -373,7 +360,6 @@ public partial class PlayerController : CharacterBody3D,
|
|||||||
private Timer _weaponThrowUncatchableTimer = null!;
|
private Timer _weaponThrowUncatchableTimer = null!;
|
||||||
private Timer _simpleDashCooldownTimer = null!;
|
private Timer _simpleDashCooldownTimer = null!;
|
||||||
private Timer _airborneDashCooldownTimer = null!;
|
private Timer _airborneDashCooldownTimer = null!;
|
||||||
private Timer _powerCooldownTimer = null!;
|
|
||||||
private Timer _invincibilityTimer = null!;
|
private Timer _invincibilityTimer = null!;
|
||||||
private Timer _attackCooldown = null!;
|
private Timer _attackCooldown = null!;
|
||||||
|
|
||||||
@@ -381,9 +367,6 @@ public partial class PlayerController : CharacterBody3D,
|
|||||||
private StateChart _playerState = null!;
|
private StateChart _playerState = null!;
|
||||||
|
|
||||||
private StateChartState _aiming = null!;
|
private StateChartState _aiming = null!;
|
||||||
private StateChartState _powerExpired = null!;
|
|
||||||
private StateChartState _powerRecharging = null!;
|
|
||||||
private StateChartState _powerFull = null!;
|
|
||||||
|
|
||||||
private StateChartState _grounded = null!;
|
private StateChartState _grounded = null!;
|
||||||
private StateChartState _airborne = null!;
|
private StateChartState _airborne = null!;
|
||||||
@@ -510,9 +493,6 @@ public partial class PlayerController : CharacterBody3D,
|
|||||||
}
|
}
|
||||||
|
|
||||||
// DashIndicator = GetNode<TextureRect>("%DashIndicator");
|
// DashIndicator = GetNode<TextureRect>("%DashIndicator");
|
||||||
PowerCooldownIndicator = GetNode<ColorRect>("%DashCooldownIndicator");
|
|
||||||
PowerCooldownIndicator.Visible = false;
|
|
||||||
EmpoweredActionsLeft = MaxNumberOfEmpoweredActions;
|
|
||||||
TargetSpeed = WalkSpeed;
|
TargetSpeed = WalkSpeed;
|
||||||
DashIndicatorNode = GetNode<Node3D>("DashIndicator");
|
DashIndicatorNode = GetNode<Node3D>("DashIndicator");
|
||||||
DashIndicatorMesh = GetNode<MeshInstance3D>("DashIndicator/DashIndicatorMesh");
|
DashIndicatorMesh = GetNode<MeshInstance3D>("DashIndicator/DashIndicatorMesh");
|
||||||
@@ -596,9 +576,6 @@ public partial class PlayerController : CharacterBody3D,
|
|||||||
_onGroundSlideJump = Transition.Of(GetNode("StateChart/Root/Movement/Sliding/GroundSlide/OnJump"));
|
_onGroundSlideJump = Transition.Of(GetNode("StateChart/Root/Movement/Sliding/GroundSlide/OnJump"));
|
||||||
_onAirGlideDoubleJump = Transition.Of(GetNode("StateChart/Root/Movement/Sliding/AirGlideDoubleJumpEnabled/OnJump"));
|
_onAirGlideDoubleJump = Transition.Of(GetNode("StateChart/Root/Movement/Sliding/AirGlideDoubleJumpEnabled/OnJump"));
|
||||||
// _actionHanging = StateChartState.Of(GetNode("StateChart/Root/Actions/Hanging"));
|
// _actionHanging = StateChartState.Of(GetNode("StateChart/Root/Actions/Hanging"));
|
||||||
_powerExpired = StateChartState.Of(GetNode("StateChart/Root/PowerReserve/Expired"));
|
|
||||||
_powerRecharging = StateChartState.Of(GetNode("StateChart/Root/PowerReserve/AtLeastOneCharge"));
|
|
||||||
_powerFull = StateChartState.Of(GetNode("StateChart/Root/PowerReserve/Full"));
|
|
||||||
|
|
||||||
_grounded = StateChartState.Of(GetNode("StateChart/Root/Movement/Grounded"));
|
_grounded = StateChartState.Of(GetNode("StateChart/Root/Movement/Grounded"));
|
||||||
_airborne = StateChartState.Of(GetNode("StateChart/Root/Movement/Airborne"));
|
_airborne = StateChartState.Of(GetNode("StateChart/Root/Movement/Airborne"));
|
||||||
@@ -625,7 +602,6 @@ public partial class PlayerController : CharacterBody3D,
|
|||||||
_parryDash = StateChartState.Of(GetNode("StateChart/Root/Attack/DashParry"));
|
_parryDash = StateChartState.Of(GetNode("StateChart/Root/Attack/DashParry"));
|
||||||
|
|
||||||
// State timers
|
// State timers
|
||||||
_powerCooldownTimer = GetNode<Timer>("PowerCooldown");
|
|
||||||
_weaponThrowUncatchableTimer = GetNode<Timer>("WeaponThrowUncatchable");
|
_weaponThrowUncatchableTimer = GetNode<Timer>("WeaponThrowUncatchable");
|
||||||
_timeScaleAimInAirTimer = GetNode<Timer>("TimeScaleAimInAir");
|
_timeScaleAimInAirTimer = GetNode<Timer>("TimeScaleAimInAir");
|
||||||
_simpleDashCooldownTimer = GetNode<Timer>("DashCooldown");
|
_simpleDashCooldownTimer = GetNode<Timer>("DashCooldown");
|
||||||
@@ -653,8 +629,6 @@ public partial class PlayerController : CharacterBody3D,
|
|||||||
WeaponSystem.Init();
|
WeaponSystem.Init();
|
||||||
WallHugSystem.Init();
|
WallHugSystem.Init();
|
||||||
|
|
||||||
EmpoweredActionsLeft = MaxNumberOfEmpoweredActions;
|
|
||||||
|
|
||||||
// if (!TutorialDone)
|
// if (!TutorialDone)
|
||||||
// PlaceWeaponForTutorial();
|
// PlaceWeaponForTutorial();
|
||||||
|
|
||||||
@@ -680,13 +654,6 @@ public partial class PlayerController : CharacterBody3D,
|
|||||||
_coyoteEnabled.StateEntered += StartCoyoteTime;
|
_coyoteEnabled.StateEntered += StartCoyoteTime;
|
||||||
_timeScaleAimInAirTimer.Timeout += ResetTimeScale;
|
_timeScaleAimInAirTimer.Timeout += ResetTimeScale;
|
||||||
|
|
||||||
_powerFull.StateEntered += StopPowerCooldown;
|
|
||||||
_powerFull.StateExited += StartPowerCooldown;
|
|
||||||
_powerRecharging.StateEntered += StartPowerCooldown;
|
|
||||||
_powerCooldownTimer.Timeout += PowerCooldownExpired;
|
|
||||||
_powerRecharging.StateProcessing += PowerRecharging;
|
|
||||||
_powerExpired.StateProcessing += PowerRecharging;
|
|
||||||
|
|
||||||
_simpleJump.StateEntered += OnSimpleJumpStarted;
|
_simpleJump.StateEntered += OnSimpleJumpStarted;
|
||||||
_simpleJump.StatePhysicsProcessing += HandleSimpleJump;
|
_simpleJump.StatePhysicsProcessing += HandleSimpleJump;
|
||||||
|
|
||||||
@@ -747,25 +714,7 @@ public partial class PlayerController : CharacterBody3D,
|
|||||||
_attackDash.StateEntered += OnDashAttackStarted;
|
_attackDash.StateEntered += OnDashAttackStarted;
|
||||||
_parryStandard.StateEntered += OnStandardParryStarted;
|
_parryStandard.StateEntered += OnStandardParryStarted;
|
||||||
_parryDash.StateEntered += OnDashParryStarted;
|
_parryDash.StateEntered += OnDashParryStarted;
|
||||||
|
|
||||||
foreach (var weaponLandAbility in AbilityLoadout)
|
|
||||||
{
|
|
||||||
var leftGrantAbilityConfig = new GrantAbilityConfig(
|
|
||||||
weaponLandAbility.GetAbilityData(),
|
|
||||||
ScalableLevel: new ScalableInt(1),
|
|
||||||
RemovalPolicy: AbilityDeactivationPolicy.CancelImmediately,
|
|
||||||
InhibitionPolicy: AbilityDeactivationPolicy.CancelImmediately,
|
|
||||||
TryActivateOnGrant: false,
|
|
||||||
TryActivateOnEnable: false,
|
|
||||||
LevelOverridePolicy: LevelComparison.Higher);
|
|
||||||
|
|
||||||
var leftGrantComponent = new GrantAbilityEffectComponent([leftGrantAbilityConfig]);
|
|
||||||
var leftGrantEffect = new EffectData(
|
|
||||||
"Grant Weapon Left Ability",
|
|
||||||
new DurationData(DurationType.Infinite),
|
|
||||||
effectComponents: [leftGrantComponent]);
|
|
||||||
EffectsManager.ApplyEffect(new Effect(leftGrantEffect, new EffectOwnership(this, this)));
|
|
||||||
}
|
|
||||||
// Forge events
|
// Forge events
|
||||||
var weaponLeftToken = WeaponSystem.Events.Subscribe(WeaponSystem.WeaponStartedFlyingEventTag, OnWeaponLeft);
|
var weaponLeftToken = WeaponSystem.Events.Subscribe(WeaponSystem.WeaponStartedFlyingEventTag, OnWeaponLeft);
|
||||||
var weaponLandedToken = WeaponSystem.Events.Subscribe(WeaponSystem.WeaponStoppedFlyingEventTag, OnWeaponLanded);
|
var weaponLandedToken = WeaponSystem.Events.Subscribe(WeaponSystem.WeaponStoppedFlyingEventTag, OnWeaponLanded);
|
||||||
@@ -780,7 +729,7 @@ public partial class PlayerController : CharacterBody3D,
|
|||||||
if (weaponLeftTag == null) return;
|
if (weaponLeftTag == null) return;
|
||||||
Abilities.TryActivateAbilitiesByTag(weaponLeftTag, target, out var landedFailures);
|
Abilities.TryActivateAbilitiesByTag(weaponLeftTag, target, out var landedFailures);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void OnWeaponLanded(EventData data)
|
public void OnWeaponLanded(EventData data)
|
||||||
{
|
{
|
||||||
var source = data.Source;
|
var source = data.Source;
|
||||||
@@ -797,6 +746,11 @@ public partial class PlayerController : CharacterBody3D,
|
|||||||
target,
|
target,
|
||||||
out var failures);
|
out var failures);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void GrantWeaponExplosionAbilityForEvent(WeaponSystem.WeaponEvent forEvent, string abilityName)
|
||||||
|
{
|
||||||
|
WeaponSystem.GrantNewAbilityForEvent(forEvent, WeaponExplosionBehavior);
|
||||||
|
}
|
||||||
|
|
||||||
///////////////////////////
|
///////////////////////////
|
||||||
// Settings & tutorial //
|
// Settings & tutorial //
|
||||||
@@ -832,21 +786,6 @@ public partial class PlayerController : CharacterBody3D,
|
|||||||
_fovChangeMultiplier = (float) config.GetValue("InputSettings", "FovChangeWithSpeed", 1.0f);
|
_fovChangeMultiplier = (float) config.GetValue("InputSettings", "FovChangeWithSpeed", 1.0f);
|
||||||
_aimAssistMultiplier = (float) config.GetValue("InputSettings", "AimAssist", 1.0f);
|
_aimAssistMultiplier = (float) config.GetValue("InputSettings", "AimAssist", 1.0f);
|
||||||
}
|
}
|
||||||
public void OnTutorialDone(Node3D _)
|
|
||||||
{
|
|
||||||
TutorialDone = true;
|
|
||||||
}
|
|
||||||
public void PlaceWeaponForTutorial()
|
|
||||||
{
|
|
||||||
if (TutorialDone)
|
|
||||||
return;
|
|
||||||
|
|
||||||
RemoveChild(WeaponSystem);
|
|
||||||
GetTree().GetRoot().CallDeferred(Node.MethodName.AddChild, WeaponSystem);
|
|
||||||
WeaponSystem.CallDeferred(Node3D.MethodName.SetGlobalPosition, TutorialWeaponTarget.GlobalPosition);
|
|
||||||
WeaponSystem.CallDeferred(WeaponSystem.MethodName.PlaceWeaponForTutorial, TutorialWeaponTarget.GlobalPosition);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
///////////////////////////
|
///////////////////////////
|
||||||
// Toolbox Utils //
|
// Toolbox Utils //
|
||||||
@@ -2009,55 +1948,19 @@ public partial class PlayerController : CharacterBody3D,
|
|||||||
///////////////////////////
|
///////////////////////////
|
||||||
// Empowerement management //
|
// Empowerement management //
|
||||||
///////////////////////////
|
///////////////////////////
|
||||||
public void PowerRecharging(float delta)
|
|
||||||
{
|
|
||||||
var progress = (float) (_powerCooldownTimer.TimeLeft / _powerCooldownTimer.WaitTime);
|
|
||||||
PowerCooldownIndicator.SetCustomMinimumSize(new Vector2(100 * progress, 10));
|
|
||||||
}
|
|
||||||
public void StartPowerCooldown()
|
|
||||||
{
|
|
||||||
_powerCooldownTimer.Start();
|
|
||||||
PowerCooldownIndicator.Visible = true;
|
|
||||||
}
|
|
||||||
public void StopPowerCooldown()
|
|
||||||
{
|
|
||||||
_powerCooldownTimer.Stop();
|
|
||||||
PowerCooldownIndicator.Visible = false;
|
|
||||||
}
|
|
||||||
public void PowerCooldownExpired()
|
|
||||||
{
|
|
||||||
EmpoweredActionsLeft += 1;
|
|
||||||
var eventToSend = EmpoweredActionsLeft == MaxNumberOfEmpoweredActions ? "fully_charged" : "recharge";
|
|
||||||
_playerState.SendEvent(eventToSend);
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool CanPerformEmpoweredAction()
|
public bool CanPerformEmpoweredAction()
|
||||||
{
|
{
|
||||||
if(_empoweredActionHandle == null) return false;
|
if(_empoweredActionHandle == null) return false;
|
||||||
var cooldowns = _empoweredActionHandle.GetCooldownData();
|
// var cooldowns = _empoweredActionHandle.GetCooldownData();
|
||||||
foreach (var cd in cooldowns)
|
// var costs = _empoweredActionHandle.GetCostData();
|
||||||
{
|
|
||||||
//GD.Print($"Cooldown remaining: {cd.RemainingTime}");
|
|
||||||
}
|
|
||||||
var costs = _empoweredActionHandle.GetCostData();
|
|
||||||
foreach (var cost in costs)
|
|
||||||
{
|
|
||||||
// Assuming you want to check Mana costs
|
|
||||||
if (cost.Attribute == "PlayerAttributeSet.Mana")
|
|
||||||
{
|
|
||||||
//GD.Print($"Mana Cost: {cost.Cost}");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
var canActivate = _empoweredActionHandle.CanActivate(out var failures);
|
var canActivate = _empoweredActionHandle.CanActivate(out var failures);
|
||||||
if (!canActivate)
|
if (!canActivate)
|
||||||
{
|
{
|
||||||
GD.PrintErr($"Cannot activate empowered action: {failures}");
|
|
||||||
if (failures.HasFlag(AbilityActivationFailures.Cooldown)) GD.PrintErr("In Cooldown");
|
if (failures.HasFlag(AbilityActivationFailures.Cooldown)) GD.PrintErr("In Cooldown");
|
||||||
if (failures.HasFlag(AbilityActivationFailures.InsufficientResources)) GD.PrintErr("Not Enough Mana");
|
if (failures.HasFlag(AbilityActivationFailures.InsufficientResources)) GD.PrintErr("Not Enough Mana");
|
||||||
}
|
}
|
||||||
return canActivate;
|
return canActivate;
|
||||||
return EmpoweredActionsLeft > 0 && TutorialDone;
|
|
||||||
}
|
}
|
||||||
public void PerformEmpoweredAction()
|
public void PerformEmpoweredAction()
|
||||||
{
|
{
|
||||||
@@ -2066,24 +1969,13 @@ public partial class PlayerController : CharacterBody3D,
|
|||||||
var canActivate = _empoweredActionHandle.Activate(out var failures);
|
var canActivate = _empoweredActionHandle.Activate(out var failures);
|
||||||
if (!canActivate)
|
if (!canActivate)
|
||||||
{
|
{
|
||||||
GD.PrintErr($"Cannot activate empowered action: {failures}");
|
|
||||||
if (failures.HasFlag(AbilityActivationFailures.Cooldown)) GD.PrintErr("In Cooldown");
|
if (failures.HasFlag(AbilityActivationFailures.Cooldown)) GD.PrintErr("In Cooldown");
|
||||||
if (failures.HasFlag(AbilityActivationFailures.InsufficientResources)) GD.PrintErr("Not Enough Mana");
|
if (failures.HasFlag(AbilityActivationFailures.InsufficientResources)) GD.PrintErr("Not Enough Mana");
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
GD.Print($"Remaining mana: {Attributes["PlayerAttributeSet.Mana"].CurrentValue}");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Inhibit Mana Regeneration for a while after using an empowered action
|
|
||||||
// TODO: Use Forge events instead of relying on direct referencing
|
|
||||||
// _manaRegenEffectHandle!.SetInhibit(true);
|
|
||||||
// GetTree().CreateTimer(EmpoweredAction.ManaRegenPause).Timeout += () => {_manaRegenEffectHandle!.SetInhibit(false);};
|
|
||||||
|
|
||||||
_isWallJumpAvailable = true;
|
_isWallJumpAvailable = true;
|
||||||
_canDashAirborne = true;
|
_canDashAirborne = true;
|
||||||
EmpoweredActionsLeft--;
|
|
||||||
_playerState.SendEvent(EmpoweredActionsLeft <= 0 ? "expired" : "power_used");
|
|
||||||
|
|
||||||
Events.Raise(new EventData<EmpoweredActionPayload>
|
Events.Raise(new EventData<EmpoweredActionPayload>
|
||||||
{
|
{
|
||||||
@@ -2411,13 +2303,7 @@ public partial class PlayerController : CharacterBody3D,
|
|||||||
{
|
{
|
||||||
// Manage head and camera movement
|
// Manage head and camera movement
|
||||||
LookAround(delta);
|
LookAround(delta);
|
||||||
|
|
||||||
EffectsManager.UpdateEffects(delta);
|
EffectsManager.UpdateEffects(delta);
|
||||||
// TODO: change for actual Cue
|
|
||||||
// var currentMana = Attributes["PlayerAttributeSet.Mana"].CurrentValue;
|
|
||||||
// if (Mathf.Abs(currentMana - _oldMana) > Mathf.Epsilon)
|
|
||||||
// PlayerUi.OnManaChanged(currentMana);
|
|
||||||
// _oldMana = currentMana;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
///////////////////////////
|
///////////////////////////
|
||||||
|
|||||||
@@ -94,22 +94,6 @@ public class PlayerControllerUnitTest
|
|||||||
AssertFloat(_player.CHealth.CurrentHealth).IsEqual(75.0f);
|
AssertFloat(_player.CHealth.CurrentHealth).IsEqual(75.0f);
|
||||||
}
|
}
|
||||||
|
|
||||||
[TestCase]
|
|
||||||
public void TestEmpoweredActionsLeft()
|
|
||||||
{
|
|
||||||
var mockUi = new PlayerUi();
|
|
||||||
var dashIcons = new TextureRect[3] { new TextureRect(), new TextureRect(), new TextureRect() };
|
|
||||||
mockUi.DashIcons = dashIcons;
|
|
||||||
|
|
||||||
_player.PlayerUi = mockUi;
|
|
||||||
|
|
||||||
_player.EmpoweredActionsLeft = 2;
|
|
||||||
AssertInt(_player.EmpoweredActionsLeft).IsEqual(2);
|
|
||||||
AssertBool(dashIcons[0].Visible).IsTrue();
|
|
||||||
AssertBool(dashIcons[1].Visible).IsTrue();
|
|
||||||
AssertBool(dashIcons[2].Visible).IsFalse();
|
|
||||||
}
|
|
||||||
|
|
||||||
[TestCase]
|
[TestCase]
|
||||||
public void TestDashCooldownTimeout()
|
public void TestDashCooldownTimeout()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -9,22 +9,26 @@ extends Node
|
|||||||
@export_group("Overlaid")
|
@export_group("Overlaid")
|
||||||
@export var lost_menu_scene : PackedScene = preload("uid://ciyq8eiv1mtie")
|
@export var lost_menu_scene : PackedScene = preload("uid://ciyq8eiv1mtie")
|
||||||
@export var toolbox_scene : PackedScene = preload("uid://bcn582q8qd4ns")
|
@export var toolbox_scene : PackedScene = preload("uid://bcn582q8qd4ns")
|
||||||
|
@export var inventory_scene : PackedScene = preload("uid://oq1jjvjs4qga")
|
||||||
|
|
||||||
@export_category("Others")
|
@export_category("Others")
|
||||||
@export var focused_viewport : Viewport
|
@export var focused_viewport : Viewport
|
||||||
@export var toolbox_action:GUIDEAction = preload("uid://ca68r7n3bwba3")
|
@export var toolbox_action:GUIDEAction = preload("uid://ca68r7n3bwba3")
|
||||||
|
@export var inventory_action:GUIDEAction = preload("uid://7ne5mdytlidm")
|
||||||
|
|
||||||
# Debug
|
# Debug
|
||||||
@onready var debug_layer: CanvasLayer = $"../DebugLayer"
|
@onready var debug_layer: CanvasLayer = $"../DebugLayer"
|
||||||
|
@onready var inventory_layer: CanvasLayer = $"../InventoryLayer"
|
||||||
@onready var player: PlayerController = $"../Player"
|
@onready var player: PlayerController = $"../Player"
|
||||||
|
|
||||||
func _ready() -> void:
|
func _ready() -> void:
|
||||||
toolbox_action.triggered.connect(open_toolbox)
|
toolbox_action.triggered.connect(open_toolbox)
|
||||||
|
inventory_action.triggered.connect(open_inventory)
|
||||||
|
|
||||||
func open_overlaid_menu(menu: PackedScene) -> Node:
|
func open_overlaid_menu(menu: PackedScene) -> Node:
|
||||||
if not focused_viewport:
|
if not focused_viewport:
|
||||||
focused_viewport = get_viewport()
|
focused_viewport = get_viewport()
|
||||||
var _initial_focus_control = focused_viewport.gui_get_focus_owner()
|
var _initial_focus_control: Control = focused_viewport.gui_get_focus_owner()
|
||||||
return menu.instantiate()
|
return menu.instantiate()
|
||||||
|
|
||||||
func open_toolbox() -> void:
|
func open_toolbox() -> void:
|
||||||
@@ -32,6 +36,11 @@ func open_toolbox() -> void:
|
|||||||
toolbox.player = player
|
toolbox.player = player
|
||||||
debug_layer.call_deferred("add_child", toolbox)
|
debug_layer.call_deferred("add_child", toolbox)
|
||||||
|
|
||||||
|
func open_inventory() -> void:
|
||||||
|
var inventory: Control = open_overlaid_menu(inventory_scene)
|
||||||
|
inventory.player = player
|
||||||
|
inventory_layer.call_deferred("add_child", inventory)
|
||||||
|
|
||||||
func on_player_died() -> void:
|
func on_player_died() -> void:
|
||||||
var lost_menu: LevelLostMenu = open_overlaid_menu(lost_menu_scene)
|
var lost_menu: LevelLostMenu = open_overlaid_menu(lost_menu_scene)
|
||||||
get_tree().current_scene.call_deferred("add_child", lost_menu)
|
get_tree().current_scene.call_deferred("add_child", lost_menu)
|
||||||
|
|||||||
Reference in New Issue
Block a user