Refactor Player class to use components, also use components in Enemy class types and fiddle with boss structure
This commit is contained in:
@@ -5,7 +5,6 @@ using Godot;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using Zennysoft.Ma.Adapter;
|
||||
using static Zennysoft.Game.Ma.AudioManager;
|
||||
|
||||
namespace Zennysoft.Game.Ma;
|
||||
|
||||
@@ -39,16 +38,9 @@ public partial class InventoryMenu : Control, IInventoryMenu
|
||||
|
||||
private int _currentIndex = 0;
|
||||
|
||||
private IItemSlot[] ItemSlots => ItemsPage.GetChildren().OfType<IItemSlot>().ToArray();
|
||||
private IItemSlot[] ItemSlots => [.. ItemsPage.GetChildren().OfType<IItemSlot>()];
|
||||
|
||||
#region Control Nodes
|
||||
[Node] public Label FloorLabel { get; set; } = default!;
|
||||
[Node] public Label CurrentLevelLabel { get; set; } = default!;
|
||||
[Node] public Label EXPValue { get; set; } = default!;
|
||||
[Node] public Label HPValue { get; set; } = default!;
|
||||
[Node] public Label HPBonusLabel { get; set; } = default!;
|
||||
[Node] public Label VTValue { get; set; } = default!;
|
||||
[Node] public Label VTBonusLabel { get; set; } = default!;
|
||||
[Node] public Label ATKValue { get; set; } = default!;
|
||||
[Node] public Label ATKBonusLabel { get; set; } = default!;
|
||||
[Node] public Label DEFValue { get; set; } = default!;
|
||||
@@ -77,9 +69,25 @@ public partial class InventoryMenu : Control, IInventoryMenu
|
||||
DropButton.Pressed += DropButtonPressed;
|
||||
}
|
||||
|
||||
public void OnExitTree()
|
||||
{
|
||||
Player.AttackComponent.CurrentAttack.Sync -= AttackSync;
|
||||
Player.AttackComponent.MaximumAttack.Sync -= AttackSync;
|
||||
Player.AttackComponent.BonusAttack.Sync -= BonusAttack_Sync;
|
||||
Player.DefenseComponent.CurrentDefense.Sync -= DefenseSync;
|
||||
Player.DefenseComponent.MaximumDefense.Sync -= DefenseSync;
|
||||
Player.DefenseComponent.BonusDefense.Sync -= BonusDefense_Sync;
|
||||
}
|
||||
|
||||
public void OnResolved()
|
||||
{
|
||||
SetProcessInput(false);
|
||||
Player.AttackComponent.CurrentAttack.Sync += AttackSync;
|
||||
Player.AttackComponent.MaximumAttack.Sync += AttackSync;
|
||||
Player.AttackComponent.BonusAttack.Sync += BonusAttack_Sync;
|
||||
Player.DefenseComponent.CurrentDefense.Sync += DefenseSync;
|
||||
Player.DefenseComponent.MaximumDefense.Sync += DefenseSync;
|
||||
Player.DefenseComponent.BonusDefense.Sync += BonusDefense_Sync;
|
||||
}
|
||||
|
||||
public async Task DisplayMessage(string message)
|
||||
@@ -93,56 +101,17 @@ public partial class InventoryMenu : Control, IInventoryMenu
|
||||
SetProcessInput(true);
|
||||
}
|
||||
|
||||
private void BonusAttack_Sync(int bonus)
|
||||
{
|
||||
ATKBonusLabel.Text = $"{bonus:+0;-#;\\.\\.\\.}";
|
||||
DEFBonusLabel.Text = $"{Player.Stats.BonusDefense.Value:+0;-#;\\.\\.\\.}";
|
||||
}
|
||||
private void AttackSync(int obj) => ATKValue.Text = $"{Player.AttackComponent.CurrentAttack.Value}/{Player.AttackComponent.MaximumAttack.Value}";
|
||||
|
||||
private void BonusDefense_Sync(int bonus)
|
||||
{
|
||||
ATKBonusLabel.Text = $"{Player.Stats.BonusAttack.Value:+0;-#;\\.\\.\\.}";
|
||||
DEFBonusLabel.Text = $"{bonus:+0;-#;\\.\\.\\.}";
|
||||
}
|
||||
private void BonusAttack_Sync(int bonus) => ATKBonusLabel.Text = $"{bonus:+0;-#;\\.\\.\\.}";
|
||||
|
||||
private void CurrentLevel_Sync(int obj) => CurrentLevelLabel.Text = $"Level {obj:D2}";
|
||||
private void DefenseSync(int obj) => DEFValue.Text = $"{Player.DefenseComponent.CurrentDefense.Value}/{Player.DefenseComponent.MaximumDefense.Value}";
|
||||
|
||||
private void ExpToNextLevel_Sync(int obj) => EXPValue.Text = $"{Player.Stats.CurrentExp.Value}/{obj}";
|
||||
private void BonusDefense_Sync(int bonus) => DEFBonusLabel.Text = $"{bonus:+0;-#;\\.\\.\\.}";
|
||||
|
||||
private void CurrentExp_Sync(double obj) => EXPValue.Text = $"{obj}/{Player.Stats.ExpToNextLevel.Value}";
|
||||
|
||||
private void MaxDefense_Sync(int obj) => DEFValue.Text = $"{Player.Stats.CurrentDefense.Value}/{obj}";
|
||||
|
||||
private void CurrentDefense_Sync(int obj) => DEFValue.Text = $"{obj}/{Player.Stats.MaxDefense.Value}";
|
||||
|
||||
private void MaxAttack_Sync(int obj) => ATKValue.Text = $"{Player.Stats.CurrentAttack.Value}/{obj}";
|
||||
|
||||
private void CurrentAttack_Sync(int obj) => ATKValue.Text = $"{obj}/{Player.Stats.MaxAttack.Value}";
|
||||
|
||||
private void MaximumVT_Sync(int obj) => VTValue.Text = $"{Player.Stats.CurrentVT.Value}/{obj}";
|
||||
|
||||
private void CurrentVT_Sync(int obj) => VTValue.Text = $"{obj}/{Player.Stats.MaximumVT.Value}";
|
||||
|
||||
private void MaximumHP_Sync(int obj) => HPValue.Text = $"{Player.Stats.CurrentHP.Value}/{obj}";
|
||||
|
||||
private void CurrentHP_Sync(int obj) => HPValue.Text = $"{obj}/{Player.Stats.MaximumHP.Value}";
|
||||
|
||||
public async Task RefreshInventoryScreen()
|
||||
{
|
||||
Player.Stats.CurrentHP.Sync += CurrentHP_Sync;
|
||||
Player.Stats.MaximumHP.Sync += MaximumHP_Sync;
|
||||
Player.Stats.CurrentVT.Sync += CurrentVT_Sync;
|
||||
Player.Stats.MaximumVT.Sync += MaximumVT_Sync;
|
||||
Player.Stats.CurrentAttack.Sync += CurrentAttack_Sync;
|
||||
Player.Stats.MaxAttack.Sync += MaxAttack_Sync;
|
||||
Player.Stats.CurrentDefense.Sync += CurrentDefense_Sync;
|
||||
Player.Stats.MaxDefense.Sync += MaxDefense_Sync;
|
||||
Player.Stats.CurrentExp.Sync += CurrentExp_Sync;
|
||||
Player.Stats.ExpToNextLevel.Sync += ExpToNextLevel_Sync;
|
||||
Player.Stats.CurrentLevel.Sync += CurrentLevel_Sync;
|
||||
Player.Stats.BonusAttack.Sync += BonusAttack_Sync;
|
||||
Player.Stats.BonusDefense.Sync += BonusDefense_Sync;
|
||||
|
||||
await ClearItems();
|
||||
PopulateInventory();
|
||||
PopulatePlayerInfo();
|
||||
@@ -165,19 +134,6 @@ public partial class InventoryMenu : Control, IInventoryMenu
|
||||
}
|
||||
else
|
||||
{
|
||||
Player.Stats.CurrentHP.Sync -= CurrentHP_Sync;
|
||||
Player.Stats.MaximumHP.Sync -= MaximumHP_Sync;
|
||||
Player.Stats.CurrentVT.Sync -= CurrentVT_Sync;
|
||||
Player.Stats.MaximumVT.Sync -= MaximumVT_Sync;
|
||||
Player.Stats.CurrentAttack.Sync -= CurrentAttack_Sync;
|
||||
Player.Stats.MaxAttack.Sync -= MaxAttack_Sync;
|
||||
Player.Stats.CurrentDefense.Sync -= CurrentDefense_Sync;
|
||||
Player.Stats.MaxDefense.Sync -= MaxDefense_Sync;
|
||||
Player.Stats.CurrentExp.Sync -= CurrentExp_Sync;
|
||||
Player.Stats.ExpToNextLevel.Sync -= ExpToNextLevel_Sync;
|
||||
Player.Stats.CurrentLevel.Sync -= CurrentLevel_Sync;
|
||||
Player.Stats.BonusAttack.Sync -= BonusAttack_Sync;
|
||||
Player.Stats.BonusDefense.Sync -= BonusDefense_Sync;
|
||||
Autoload.AudioManager.Play(SoundEffect.Cancel);
|
||||
_gameRepo.CloseInventory();
|
||||
}
|
||||
@@ -261,8 +217,6 @@ public partial class InventoryMenu : Control, IInventoryMenu
|
||||
|
||||
private void PopulatePlayerInfo()
|
||||
{
|
||||
FloorLabel.Text = $"Floor {_map.CurrentFloorNumber:D2}";
|
||||
|
||||
if (ItemSlots.Length != 0)
|
||||
{
|
||||
var item = ItemSlots.ElementAt(_currentIndex).Item;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
[gd_scene load_steps=35 format=3 uid="uid://dlj8qdg1c5048"]
|
||||
[gd_scene load_steps=29 format=3 uid="uid://dlj8qdg1c5048"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://cmtet15hi5oiy" path="res://src/ui/inventory_menu/InventoryMenu.cs" id="1_l64wl"]
|
||||
[ext_resource type="Shader" uid="uid://cnphwvmr05hp1" path="res://src/ui/inventory_menu/InventoryMenu.gdshader" id="2_0fvsh"]
|
||||
@@ -36,36 +36,6 @@ font = ExtResource("3_lm4o1")
|
||||
font_size = 80
|
||||
font_color = Color(0.737255, 0.705882, 0.690196, 1)
|
||||
|
||||
[sub_resource type="LabelSettings" id="LabelSettings_q0afw"]
|
||||
font = ExtResource("3_lm4o1")
|
||||
font_size = 48
|
||||
font_color = Color(0.737255, 0.705882, 0.690196, 1)
|
||||
|
||||
[sub_resource type="LabelSettings" id="LabelSettings_yw3yo"]
|
||||
font = ExtResource("3_lm4o1")
|
||||
font_size = 64
|
||||
font_color = Color(0.737255, 0.705882, 0.690196, 1)
|
||||
|
||||
[sub_resource type="LabelSettings" id="LabelSettings_xxgnh"]
|
||||
font = ExtResource("4_rg5yb")
|
||||
font_size = 46
|
||||
font_color = Color(0.737255, 0.705882, 0.690196, 1)
|
||||
|
||||
[sub_resource type="LabelSettings" id="LabelSettings_biilt"]
|
||||
font = ExtResource("5_2qnnx")
|
||||
font_size = 40
|
||||
font_color = Color(0.737255, 0.705882, 0.690196, 1)
|
||||
|
||||
[sub_resource type="LabelSettings" id="LabelSettings_dot3k"]
|
||||
font = ExtResource("4_rg5yb")
|
||||
font_size = 46
|
||||
font_color = Color(0.737255, 0.705882, 0.690196, 1)
|
||||
|
||||
[sub_resource type="LabelSettings" id="LabelSettings_th0sm"]
|
||||
font = ExtResource("4_rg5yb")
|
||||
font_size = 40
|
||||
font_color = Color(0.737255, 0.705882, 0.690196, 1)
|
||||
|
||||
[sub_resource type="LabelSettings" id="LabelSettings_ankkq"]
|
||||
font = ExtResource("4_rg5yb")
|
||||
font_size = 46
|
||||
@@ -247,97 +217,6 @@ layout_mode = 2
|
||||
layout_mode = 2
|
||||
theme_override_constants/separation = 20
|
||||
|
||||
[node name="FloorBox" type="HBoxContainer" parent="InventoryInfo/HBoxContainer/PlayerInfo"]
|
||||
visible = false
|
||||
layout_mode = 2
|
||||
|
||||
[node name="ReferenceRect2" type="ReferenceRect" parent="InventoryInfo/HBoxContainer/PlayerInfo/FloorBox"]
|
||||
custom_minimum_size = Vector2(50, 0)
|
||||
layout_mode = 2
|
||||
|
||||
[node name="FloorLabel" type="Label" parent="InventoryInfo/HBoxContainer/PlayerInfo/FloorBox"]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 2
|
||||
text = "FLOOR 00"
|
||||
label_settings = SubResource("LabelSettings_q0afw")
|
||||
|
||||
[node name="LevelBox" type="HBoxContainer" parent="InventoryInfo/HBoxContainer/PlayerInfo"]
|
||||
visible = false
|
||||
layout_mode = 2
|
||||
|
||||
[node name="ReferenceRect2" type="ReferenceRect" parent="InventoryInfo/HBoxContainer/PlayerInfo/LevelBox"]
|
||||
custom_minimum_size = Vector2(50, 0)
|
||||
layout_mode = 2
|
||||
|
||||
[node name="CurrentLevelLabel" type="Label" parent="InventoryInfo/HBoxContainer/PlayerInfo/LevelBox"]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 2
|
||||
text = "LEVEL 0"
|
||||
label_settings = SubResource("LabelSettings_yw3yo")
|
||||
|
||||
[node name="ReferenceRect2" type="ReferenceRect" parent="InventoryInfo/HBoxContainer/PlayerInfo"]
|
||||
custom_minimum_size = Vector2(0, 12)
|
||||
layout_mode = 2
|
||||
|
||||
[node name="EXPBox" type="HBoxContainer" parent="InventoryInfo/HBoxContainer/PlayerInfo"]
|
||||
visible = false
|
||||
layout_mode = 2
|
||||
|
||||
[node name="ReferenceRect2" type="ReferenceRect" parent="InventoryInfo/HBoxContainer/PlayerInfo/EXPBox"]
|
||||
custom_minimum_size = Vector2(50, 0)
|
||||
layout_mode = 2
|
||||
|
||||
[node name="EXPLabel" type="Label" parent="InventoryInfo/HBoxContainer/PlayerInfo/EXPBox"]
|
||||
custom_minimum_size = Vector2(50, 0)
|
||||
layout_mode = 2
|
||||
text = "EXP"
|
||||
label_settings = SubResource("LabelSettings_xxgnh")
|
||||
|
||||
[node name="ReferenceRect" type="ReferenceRect" parent="InventoryInfo/HBoxContainer/PlayerInfo/EXPBox"]
|
||||
custom_minimum_size = Vector2(50, 0)
|
||||
layout_mode = 2
|
||||
|
||||
[node name="EXPValue" type="Label" parent="InventoryInfo/HBoxContainer/PlayerInfo/EXPBox"]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 2
|
||||
text = "444/888"
|
||||
label_settings = SubResource("LabelSettings_biilt")
|
||||
|
||||
[node name="HPBox" type="HBoxContainer" parent="InventoryInfo/HBoxContainer/PlayerInfo"]
|
||||
visible = false
|
||||
layout_mode = 2
|
||||
|
||||
[node name="ReferenceRect2" type="ReferenceRect" parent="InventoryInfo/HBoxContainer/PlayerInfo/HPBox"]
|
||||
custom_minimum_size = Vector2(50, 0)
|
||||
layout_mode = 2
|
||||
|
||||
[node name="HPLabel" type="Label" parent="InventoryInfo/HBoxContainer/PlayerInfo/HPBox"]
|
||||
custom_minimum_size = Vector2(100, 0)
|
||||
layout_mode = 2
|
||||
text = "HP"
|
||||
label_settings = SubResource("LabelSettings_dot3k")
|
||||
|
||||
[node name="ReferenceRect" type="ReferenceRect" parent="InventoryInfo/HBoxContainer/PlayerInfo/HPBox"]
|
||||
custom_minimum_size = Vector2(50, 0)
|
||||
layout_mode = 2
|
||||
|
||||
[node name="HPValue" type="Label" parent="InventoryInfo/HBoxContainer/PlayerInfo/HPBox"]
|
||||
unique_name_in_owner = true
|
||||
custom_minimum_size = Vector2(200, 0)
|
||||
layout_mode = 2
|
||||
text = "222/222"
|
||||
label_settings = SubResource("LabelSettings_th0sm")
|
||||
|
||||
[node name="ReferenceRect3" type="ReferenceRect" parent="InventoryInfo/HBoxContainer/PlayerInfo/HPBox"]
|
||||
custom_minimum_size = Vector2(18, 0)
|
||||
layout_mode = 2
|
||||
|
||||
[node name="HPBonusLabel" type="Label" parent="InventoryInfo/HBoxContainer/PlayerInfo/HPBox"]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 2
|
||||
text = "..."
|
||||
label_settings = ExtResource("6_tmdno")
|
||||
|
||||
[node name="VTBox" type="HBoxContainer" parent="InventoryInfo/HBoxContainer/PlayerInfo"]
|
||||
visible = false
|
||||
layout_mode = 2
|
||||
@@ -374,7 +253,6 @@ text = "..."
|
||||
label_settings = ExtResource("6_tmdno")
|
||||
|
||||
[node name="ATKBox" type="HBoxContainer" parent="InventoryInfo/HBoxContainer/PlayerInfo"]
|
||||
visible = false
|
||||
layout_mode = 2
|
||||
|
||||
[node name="ReferenceRect2" type="ReferenceRect" parent="InventoryInfo/HBoxContainer/PlayerInfo/ATKBox"]
|
||||
@@ -409,7 +287,6 @@ text = "..."
|
||||
label_settings = ExtResource("6_tmdno")
|
||||
|
||||
[node name="DEFBox" type="HBoxContainer" parent="InventoryInfo/HBoxContainer/PlayerInfo"]
|
||||
visible = false
|
||||
layout_mode = 2
|
||||
|
||||
[node name="ReferenceRect2" type="ReferenceRect" parent="InventoryInfo/HBoxContainer/PlayerInfo/DEFBox"]
|
||||
@@ -419,8 +296,7 @@ layout_mode = 2
|
||||
[node name="DEFLabel" type="Label" parent="InventoryInfo/HBoxContainer/PlayerInfo/DEFBox"]
|
||||
custom_minimum_size = Vector2(100, 0)
|
||||
layout_mode = 2
|
||||
text = "DEF
|
||||
"
|
||||
text = "DEF"
|
||||
label_settings = SubResource("LabelSettings_ankkq")
|
||||
|
||||
[node name="ReferenceRect" type="ReferenceRect" parent="InventoryInfo/HBoxContainer/PlayerInfo/DEFBox"]
|
||||
|
||||
@@ -37,15 +37,15 @@ public partial class PlayerInfoUI : Control, IPlayerInfoUI
|
||||
|
||||
public void Activate()
|
||||
{
|
||||
Player.Stats.CurrentHP.Sync += CurrentHP_Sync;
|
||||
Player.Stats.MaximumHP.Sync += MaximumHP_Sync;
|
||||
Player.HealthComponent.CurrentHP.Sync += HPSync;
|
||||
Player.HealthComponent.MaximumHP.Sync += HPSync;
|
||||
|
||||
Player.Stats.CurrentVT.Sync += CurrentVT_Sync;
|
||||
Player.Stats.MaximumVT.Sync += MaximumVT_Sync;
|
||||
Player.VTComponent.CurrentVT.Sync += VTSync;
|
||||
Player.VTComponent.MaximumVT.Sync += VTSync;
|
||||
|
||||
Player.Stats.CurrentLevel.Sync += CurrentLevel_Sync;
|
||||
Player.Stats.CurrentExp.Sync += CurrentExp_Sync;
|
||||
Player.Stats.ExpToNextLevel.Sync += ExpToNextLevel_Sync;
|
||||
Player.ExperiencePointsComponent.Level.Sync += CurrentLevel_Sync;
|
||||
Player.ExperiencePointsComponent.CurrentExp.Sync += ExpSync;
|
||||
Player.ExperiencePointsComponent.ExpToNextLevel.Sync += ExpSync;
|
||||
}
|
||||
|
||||
private void CurrentLevel_Sync(int obj)
|
||||
@@ -53,36 +53,22 @@ public partial class PlayerInfoUI : Control, IPlayerInfoUI
|
||||
LevelNumber.Text = $"{obj}";
|
||||
}
|
||||
|
||||
private void MaximumVT_Sync(int obj)
|
||||
private void VTSync(int obj)
|
||||
{
|
||||
VTNumber.Text = $"{Player.Stats.CurrentVT.Value}/{obj}";
|
||||
VTProgressBar.MaxValue = obj;
|
||||
VTNumber.Text = $"{Player.VTComponent.CurrentVT.Value}/{Player.VTComponent.MaximumVT.Value}";
|
||||
VTProgressBar.Value = Player.VTComponent.CurrentVT.Value;
|
||||
VTProgressBar.MaxValue = Player.VTComponent.MaximumVT.Value;
|
||||
}
|
||||
|
||||
private void CurrentVT_Sync(int obj)
|
||||
private void HPSync(int obj)
|
||||
{
|
||||
VTNumber.Text = $"{obj}/{Player.Stats.MaximumVT.Value}";
|
||||
VTProgressBar.Value = obj;
|
||||
HPNumber.Text = $"{Player.HealthComponent.CurrentHP.Value}/{Player.HealthComponent.MaximumHP.Value}";
|
||||
HPProgressBar.Value = Player.HealthComponent.CurrentHP.Value;
|
||||
HPProgressBar.MaxValue = Player.HealthComponent.MaximumHP.Value;
|
||||
}
|
||||
|
||||
private void MaximumHP_Sync(int obj)
|
||||
private void ExpSync(int obj)
|
||||
{
|
||||
HPNumber.Text = $"{Player.Stats.CurrentHP.Value}/{obj}";
|
||||
HPProgressBar.MaxValue = obj;
|
||||
}
|
||||
|
||||
private void CurrentHP_Sync(int obj)
|
||||
{
|
||||
HPNumber.Text = $"{obj}/{Player.Stats.MaximumHP.Value}";
|
||||
HPProgressBar.Value = obj;
|
||||
}
|
||||
|
||||
private void CurrentExp_Sync(double obj)
|
||||
{
|
||||
EXPNumber.Text = $"{(int)obj}/{Player.Stats.ExpToNextLevel.Value}";
|
||||
}
|
||||
private void ExpToNextLevel_Sync(int obj)
|
||||
{
|
||||
EXPNumber.Text = $"{Player.Stats.CurrentExp.Value}/{obj}";
|
||||
EXPNumber.Text = $"{Player.ExperiencePointsComponent.CurrentExp.Value}/{Player.ExperiencePointsComponent.ExpToNextLevel.Value}";
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user