Compare commits
5 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| f9ca56e34a | |||
| 5a59d50be5 | |||
| 9464fc7caa | |||
| 9e57641a75 | |||
| bb2b2ace06 |
@@ -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(
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -13,8 +13,7 @@ public class EffectApplicationBehavior(EffectData effectData) : IAbilityBehavior
|
|||||||
private Effect? _effect;
|
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));
|
_effect = new Effect(effectData, new EffectOwnership(context.Owner, context.Owner));
|
||||||
_effectHandle = context.Owner.EffectsManager.ApplyEffect(_effect);
|
_effectHandle = context.Owner.EffectsManager.ApplyEffect(_effect);
|
||||||
context.AbilityHandle.CommitAbility();
|
context.AbilityHandle.CommitAbility();
|
||||||
@@ -22,7 +21,6 @@ public class EffectApplicationBehavior(EffectData effectData) : IAbilityBehavior
|
|||||||
|
|
||||||
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)
|
||||||
{
|
{
|
||||||
@@ -28,10 +28,7 @@ public class ExplodingSwordBehavior(PackedScene explosion) : IAbilityBehavior
|
|||||||
context.InstanceHandle.End();
|
context.InstanceHandle.End();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
explo.Radius = radius;
|
||||||
GD.Print("EXPLOSION");
|
|
||||||
|
|
||||||
explo.Radius = 6f;
|
|
||||||
|
|
||||||
owner.GetTree().GetRoot().CallDeferred(Node.MethodName.AddChild, explo);
|
owner.GetTree().GetRoot().CallDeferred(Node.MethodName.AddChild, explo);
|
||||||
explo.CallDeferred(Node3D.MethodName.SetGlobalPosition, owner.GlobalPosition);
|
explo.CallDeferred(Node3D.MethodName.SetGlobalPosition, owner.GlobalPosition);
|
||||||
@@ -50,8 +47,9 @@ public class ExplodingSwordBehavior(PackedScene explosion) : IAbilityBehavior
|
|||||||
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()
|
||||||
{
|
{
|
||||||
return new ExplodingSwordBehavior(Explosion);
|
return new ExplodingSwordBehavior(Explosion, Radius);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -22,10 +22,6 @@ public class RaiseEventTagExecution(TagContainer eventTags) : CustomExecution
|
|||||||
{
|
{
|
||||||
var owner = effect.Ownership.Owner;
|
var owner = effect.Ownership.Owner;
|
||||||
if (owner == null) return [];
|
if (owner == null) return [];
|
||||||
foreach (var tag in eventTags.Tags)
|
|
||||||
{
|
|
||||||
GD.Print(tag);
|
|
||||||
}
|
|
||||||
|
|
||||||
owner.Events.Raise(new EventData
|
owner.Events.Raise(new EventData
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -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://vm22i5sv3p3s"
|
||||||
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"
|
||||||
|
|
||||||
|
|||||||
@@ -14,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"]
|
||||||
@@ -54,7 +55,6 @@
|
|||||||
[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"]
|
||||||
@@ -157,6 +157,7 @@ script = ExtResource("1_poq2x")
|
|||||||
BaseTags = SubResource("Resource_mpigw")
|
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
|
||||||
@@ -189,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
|
||||||
@@ -467,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
|
||||||
@@ -494,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
|
||||||
@@ -556,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)
|
||||||
@@ -661,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;
|
||||||
|
|||||||
@@ -41,13 +41,11 @@ public partial class WeaponSystem : RigidBody3D, IDamageDealer, IForgeEntity
|
|||||||
|
|
||||||
[Export]
|
[Export]
|
||||||
public ForgeTagContainer BaseTags { get; set; }
|
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; }
|
||||||
[Export] public ForgeEffectData[] PermanentEffects { get; set; } = Array.Empty<ForgeEffectData>();
|
|
||||||
|
|
||||||
[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;
|
||||||
@@ -168,30 +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)));
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach (var effect in PermanentEffects)
|
|
||||||
{
|
|
||||||
EffectsManager.ApplyEffect(new Effect(effect.GetEffectData(), new EffectOwnership(this, this)));
|
|
||||||
}
|
|
||||||
|
|
||||||
BodyEntered += OnThrownWeaponReachesGround;
|
BodyEntered += OnThrownWeaponReachesGround;
|
||||||
|
|
||||||
InHandState.StateExited += WeaponLeft;
|
InHandState.StateExited += WeaponLeft;
|
||||||
@@ -263,18 +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();
|
|
||||||
});
|
|
||||||
|
|
||||||
Events.Subscribe(Tag.RequestTag(tagsManager, "events.weapon.flyingtick"), data =>
|
|
||||||
{
|
|
||||||
GD.Print("Weapon tick triggered!");
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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;
|
||||||
|
|||||||
@@ -3,11 +3,9 @@
|
|||||||
[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://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="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"]
|
||||||
@@ -66,7 +64,6 @@ contact_monitor = true
|
|||||||
max_contacts_reported = 1
|
max_contacts_reported = 1
|
||||||
script = ExtResource("1_csqwk")
|
script = ExtResource("1_csqwk")
|
||||||
BaseTags = SubResource("Resource_06gln")
|
BaseTags = SubResource("Resource_06gln")
|
||||||
WeaponAbilities = [ExtResource("2_pgbtr"), ExtResource("4_2wsgo")]
|
|
||||||
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"]
|
||||||
|
|||||||
@@ -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"]
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|
||||||
@@ -124,8 +120,9 @@ public partial class PlayerController : CharacterBody3D,
|
|||||||
[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;
|
||||||
|
|
||||||
@@ -748,24 +715,6 @@ public partial class PlayerController : CharacterBody3D,
|
|||||||
_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);
|
||||||
@@ -798,6 +747,11 @@ public partial class PlayerController : CharacterBody3D,
|
|||||||
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 //
|
||||||
@@ -1267,7 +1206,7 @@ public partial class PlayerController : CharacterBody3D,
|
|||||||
_currentInputBufferFrames = InputBufferFrames;
|
_currentInputBufferFrames = InputBufferFrames;
|
||||||
_bufferedAction = _mantling.Active ? BufferedActions.MantleDash : BufferedActions.Dash;
|
_bufferedAction = _mantling.Active ? BufferedActions.MantleDash : BufferedActions.Dash;
|
||||||
|
|
||||||
if (_airborne.Active)
|
if (_airborne.Active || _jumping.Active)
|
||||||
{
|
{
|
||||||
if (!_canDashAirborne)
|
if (!_canDashAirborne)
|
||||||
return;
|
return;
|
||||||
@@ -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