Simplify Energy Stuff
This commit is contained in:
2
Slimepire.csproj.DotSettings
Normal file
2
Slimepire.csproj.DotSettings
Normal file
@@ -0,0 +1,2 @@
|
||||
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
|
||||
<s:Boolean x:Key="/Default/CodeInspection/NamespaceProvider/NamespaceFoldersToSkip/=src_005Cgameplay_005Ccomponents_005Cenergy/@EntryIndexedValue">True</s:Boolean></wpf:ResourceDictionary>
|
||||
@@ -1,44 +0,0 @@
|
||||
using Godot;
|
||||
using Slimepire.Gameplay.Components;
|
||||
|
||||
namespace Slimepire.Core;
|
||||
|
||||
[Singleton]
|
||||
public partial class EnergyManager
|
||||
{
|
||||
private List<EnergyProducer> _energyProducers = [];
|
||||
private List<EnergyStorage> _energyStorages = [];
|
||||
|
||||
public void RegisterEnergyProducer(EnergyProducer energyProducer)
|
||||
{
|
||||
_energyProducers.Add(energyProducer);
|
||||
}
|
||||
|
||||
public void RemoveEnergyProducer(EnergyProducer energyProducer)
|
||||
{
|
||||
_energyProducers.Remove(energyProducer);
|
||||
}
|
||||
|
||||
public void RegisterEnergyStorage(EnergyStorage energyStorage)
|
||||
{
|
||||
_energyStorages.Add(energyStorage);
|
||||
}
|
||||
|
||||
public void RemoveEnergyStorage(EnergyStorage energyStorage)
|
||||
{
|
||||
_energyStorages.Remove(energyStorage);
|
||||
}
|
||||
|
||||
public void TransferEnergy(float energy)
|
||||
{
|
||||
foreach (var energyStorage in _energyStorages)
|
||||
{
|
||||
if (energyStorage.Energy + energy <= energyStorage.MaxEnergy)
|
||||
{
|
||||
energyStorage.AcceptEnergy(energy);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void RequestEnergy(float energy) { }
|
||||
}
|
||||
@@ -1 +0,0 @@
|
||||
uid://boaiqjlh7qq3o
|
||||
17
src/Gameplay/Components/Energy/EnergyProducer.cs
Normal file
17
src/Gameplay/Components/Energy/EnergyProducer.cs
Normal file
@@ -0,0 +1,17 @@
|
||||
using Godot;
|
||||
|
||||
namespace Slimepire.Gameplay.Components;
|
||||
|
||||
public partial class EnergyProducer : Node
|
||||
{
|
||||
[Export]
|
||||
public EnergyStorage EnergyStorage = null!;
|
||||
|
||||
[Export]
|
||||
public float ProductionRate = 1;
|
||||
|
||||
public override void _Process(double delta)
|
||||
{
|
||||
EnergyStorage.Energy += ProductionRate * (float)delta;
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
[gd_scene format=3 uid="uid://t0gdf172f65v"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://bku1vey63ew65" path="res://src/Gameplay/Components/EnergyProducer.cs" id="1_4q7h4"]
|
||||
[ext_resource type="Script" uid="uid://bku1vey63ew65" path="res://src/Gameplay/Components/Energy/EnergyProducer.cs" id="1_4q7h4"]
|
||||
|
||||
[node name="EnergyProducer" type="Node" unique_id=1184182162]
|
||||
script = ExtResource("1_4q7h4")
|
||||
47
src/Gameplay/Components/Energy/EnergyStorage.cs
Normal file
47
src/Gameplay/Components/Energy/EnergyStorage.cs
Normal file
@@ -0,0 +1,47 @@
|
||||
using Godot;
|
||||
|
||||
namespace Slimepire.Gameplay.Components;
|
||||
|
||||
[GlobalClass]
|
||||
public partial class EnergyStorage : Node
|
||||
{
|
||||
[Export]
|
||||
public Label EnergyLabel = null!;
|
||||
|
||||
[Export]
|
||||
public float MaxEnergy = 100;
|
||||
|
||||
public float Energy
|
||||
{
|
||||
get;
|
||||
set
|
||||
{
|
||||
if (field + value > MaxEnergy)
|
||||
{
|
||||
field = MaxEnergy;
|
||||
}
|
||||
else
|
||||
{
|
||||
field += value;
|
||||
}
|
||||
|
||||
field = value;
|
||||
UpdateLabel();
|
||||
}
|
||||
}
|
||||
|
||||
public override void _Ready()
|
||||
{
|
||||
UpdateLabel();
|
||||
}
|
||||
|
||||
public override void _ExitTree()
|
||||
{
|
||||
// EnergyManager.Instance.RemoveEnergyStorage(this);
|
||||
}
|
||||
|
||||
private void UpdateLabel()
|
||||
{
|
||||
EnergyLabel.Text = $"{Energy:0}/{MaxEnergy}";
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
[gd_scene format=3 uid="uid://by6iw05ovnhq8"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://dgkeo1wsicv13" path="res://src/Gameplay/Components/EnergyStorage.cs" id="1_vetx7"]
|
||||
[ext_resource type="Script" uid="uid://dgkeo1wsicv13" path="res://src/Gameplay/Components/Energy/EnergyStorage.cs" id="1_vetx7"]
|
||||
|
||||
[node name="EnergyStorage" type="Node" unique_id=1765924301]
|
||||
script = ExtResource("1_vetx7")
|
||||
@@ -1,32 +0,0 @@
|
||||
using Godot;
|
||||
using Slimepire.Core;
|
||||
|
||||
namespace Slimepire.Gameplay.Components;
|
||||
|
||||
public partial class EnergyProducer : Node
|
||||
{
|
||||
[Export]
|
||||
public float ProductionRate = 1;
|
||||
|
||||
private float _energy;
|
||||
|
||||
public override void _Ready()
|
||||
{
|
||||
EnergyManager.Instance.RegisterEnergyProducer(this);
|
||||
}
|
||||
|
||||
public override void _Process(double delta)
|
||||
{
|
||||
_energy += ProductionRate * (float)delta;
|
||||
if (_energy > 1)
|
||||
{
|
||||
EnergyManager.Instance.TransferEnergy(_energy);
|
||||
_energy = 0;
|
||||
}
|
||||
}
|
||||
|
||||
public override void _ExitTree()
|
||||
{
|
||||
EnergyManager.Instance.RemoveEnergyProducer(this);
|
||||
}
|
||||
}
|
||||
@@ -1,28 +0,0 @@
|
||||
using Godot;
|
||||
using Slimepire.Core;
|
||||
|
||||
namespace Slimepire.Gameplay.Components;
|
||||
|
||||
public partial class EnergyStorage : Node
|
||||
{
|
||||
[Export]
|
||||
public float MaxEnergy = 100;
|
||||
|
||||
public float Energy { get; private set; }
|
||||
|
||||
public override void _Ready()
|
||||
{
|
||||
EnergyManager.Instance.RegisterEnergyStorage(this);
|
||||
}
|
||||
|
||||
public override void _ExitTree()
|
||||
{
|
||||
EnergyManager.Instance.RemoveEnergyStorage(this);
|
||||
}
|
||||
|
||||
public float AcceptEnergy(float energy)
|
||||
{
|
||||
Energy += energy;
|
||||
return Energy;
|
||||
}
|
||||
}
|
||||
@@ -37,19 +37,11 @@ animations = [{
|
||||
"speed": 2.0
|
||||
}]
|
||||
|
||||
[sub_resource type="LabelSettings" id="LabelSettings_x44k2"]
|
||||
font_size = 12
|
||||
outline_size = 3
|
||||
outline_color = Color(0, 0, 0, 1)
|
||||
shadow_size = 3
|
||||
shadow_color = Color(0, 0, 0, 1)
|
||||
|
||||
[node name="BasicNodule" type="Node2D" unique_id=1637542829 node_paths=PackedStringArray("_tubeConnectionArea", "_gfx", "_energyLabel")]
|
||||
[node name="BasicNodule" type="Node2D" unique_id=1637542829 node_paths=PackedStringArray("_tubeConnectionArea", "_gfx")]
|
||||
z_index = 1
|
||||
script = ExtResource("1_wbqr8")
|
||||
_tubeConnectionArea = NodePath("TubeConnectionArea")
|
||||
_gfx = NodePath("Gfx")
|
||||
_energyLabel = NodePath("EnergyLabel")
|
||||
|
||||
[node name="TubeConnectionArea" parent="." unique_id=1821668398 instance=ExtResource("2_dehe6")]
|
||||
|
||||
@@ -64,18 +56,3 @@ texture_filter = 1
|
||||
sprite_frames = SubResource("SpriteFrames_xyjsl")
|
||||
autoplay = "default"
|
||||
frame_progress = 0.120879106
|
||||
|
||||
[node name="EnergyLabel" type="Label" parent="." unique_id=466024399]
|
||||
unique_name_in_owner = true
|
||||
anchors_preset = 5
|
||||
anchor_left = 0.5
|
||||
anchor_right = 0.5
|
||||
offset_left = -20.0
|
||||
offset_top = 14.0
|
||||
offset_right = 20.0
|
||||
offset_bottom = 31.0
|
||||
grow_horizontal = 2
|
||||
text = "5"
|
||||
label_settings = SubResource("LabelSettings_x44k2")
|
||||
horizontal_alignment = 1
|
||||
vertical_alignment = 1
|
||||
|
||||
@@ -11,9 +11,6 @@ public partial class Nodule : Node2D
|
||||
[Export]
|
||||
private AnimatedSprite2D _gfx = null!;
|
||||
|
||||
[Export]
|
||||
private Label _energyLabel = null!;
|
||||
|
||||
public List<Nodule> Connections { get; } = [];
|
||||
|
||||
protected AnimatedSprite2D Gfx => _gfx;
|
||||
|
||||
@@ -2,6 +2,8 @@
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://bjesfu1mfx8l5" path="res://src/Gameplay/Components/TubeConnectionArea.tscn" id="1_b03xe"]
|
||||
[ext_resource type="Script" uid="uid://y4cpi50hsaj4" path="res://src/Gameplay/Nodules/RootNodule/RootNodule.cs" id="1_root"]
|
||||
[ext_resource type="PackedScene" uid="uid://t0gdf172f65v" path="res://src/Gameplay/Components/Energy/EnergyProducer.tscn" id="2_cy5pc"]
|
||||
[ext_resource type="PackedScene" uid="uid://by6iw05ovnhq8" path="res://src/Gameplay/Components/Energy/EnergyStorage.tscn" id="2_gke5o"]
|
||||
[ext_resource type="PackedScene" uid="uid://3x5pqm4t5cbl" path="res://src/Gameplay/Components/GrowArea.tscn" id="2_tg6hi"]
|
||||
[ext_resource type="Texture2D" uid="uid://tomd3kojw0qy" path="res://assets/root_nodule.png" id="3_b03xe"]
|
||||
|
||||
@@ -26,12 +28,17 @@ outline_color = Color(0, 0, 0, 1)
|
||||
shadow_size = 3
|
||||
shadow_color = Color(0, 0, 0, 1)
|
||||
|
||||
[node name="RootNodule" type="Node2D" unique_id=1797926942 node_paths=PackedStringArray("_tubeConnectionArea", "_gfx", "_energyLabel")]
|
||||
[node name="RootNodule" type="Node2D" unique_id=1797926942 node_paths=PackedStringArray("_tubeConnectionArea", "_gfx")]
|
||||
z_index = 1
|
||||
script = ExtResource("1_root")
|
||||
_tubeConnectionArea = NodePath("TubeConnectionArea")
|
||||
_gfx = NodePath("Gfx")
|
||||
_energyLabel = NodePath("EnergyLabel")
|
||||
|
||||
[node name="EnergyProducer" parent="." unique_id=1184182162 node_paths=PackedStringArray("EnergyStorage") instance=ExtResource("2_cy5pc")]
|
||||
EnergyStorage = NodePath("../EnergyStorage")
|
||||
|
||||
[node name="EnergyStorage" parent="." unique_id=1765924301 node_paths=PackedStringArray("EnergyLabel") instance=ExtResource("2_gke5o")]
|
||||
EnergyLabel = NodePath("../EnergyLabel")
|
||||
|
||||
[node name="TubeConnectionArea" parent="." unique_id=1821668398 instance=ExtResource("1_b03xe")]
|
||||
|
||||
|
||||
Reference in New Issue
Block a user