diff --git a/assets/sprites/gui/ChooseYourSeeds/FrameField.tres b/assets/sprites/gui/ChooseYourSeeds/FrameField.tres new file mode 100644 index 0000000..8dd131a --- /dev/null +++ b/assets/sprites/gui/ChooseYourSeeds/FrameField.tres @@ -0,0 +1,7 @@ +[gd_resource type="AtlasTexture" load_steps=2 format=3 uid="uid://dycdvvgmgmfu6"] + +[ext_resource type="Texture2D" uid="uid://dvldjlg0nr355" path="res://assets/sprites/atlases/atlas1.png" id="1_es82j"] + +[resource] +atlas = ExtResource("1_es82j") +region = Rect2(115, 300, 65, 65) diff --git a/assets/sprites/gui/ChooseYourSeeds/Grabber.tres b/assets/sprites/gui/ChooseYourSeeds/Grabber.tres new file mode 100644 index 0000000..8770209 --- /dev/null +++ b/assets/sprites/gui/ChooseYourSeeds/Grabber.tres @@ -0,0 +1,7 @@ +[gd_resource type="AtlasTexture" load_steps=2 format=3 uid="uid://b5skdm3q7tkh3"] + +[ext_resource type="Texture2D" uid="uid://dvldjlg0nr355" path="res://assets/sprites/atlases/atlas1.png" id="1_bv8ko"] + +[resource] +atlas = ExtResource("1_bv8ko") +region = Rect2(113, 414, 15, 32) diff --git a/assets/sprites/gui/ChooseYourSeeds/InnerPanel.tres b/assets/sprites/gui/ChooseYourSeeds/InnerPanel.tres new file mode 100644 index 0000000..7f72826 --- /dev/null +++ b/assets/sprites/gui/ChooseYourSeeds/InnerPanel.tres @@ -0,0 +1,7 @@ +[gd_resource type="AtlasTexture" load_steps=2 format=3 uid="uid://bj5fouwjk3kum"] + +[ext_resource type="Texture2D" uid="uid://dvldjlg0nr355" path="res://assets/sprites/atlases/atlas1.png" id="1_vi2yj"] + +[resource] +atlas = ExtResource("1_vi2yj") +region = Rect2(113, 402, 14, 12) diff --git a/assets/sprites/gui/ChooseYourSeeds/LevelRun.tres b/assets/sprites/gui/ChooseYourSeeds/LevelRun.tres new file mode 100644 index 0000000..4f75580 --- /dev/null +++ b/assets/sprites/gui/ChooseYourSeeds/LevelRun.tres @@ -0,0 +1,7 @@ +[gd_resource type="AtlasTexture" load_steps=2 format=3 uid="uid://rpnw5lxm3ksb"] + +[ext_resource type="Texture2D" uid="uid://dvldjlg0nr355" path="res://assets/sprites/atlases/atlas1.png" id="1_wytrb"] + +[resource] +atlas = ExtResource("1_wytrb") +region = Rect2(87, 382, 41, 20) diff --git a/assets/sprites/gui/ChooseYourSeeds/Panel.tres b/assets/sprites/gui/ChooseYourSeeds/Panel.tres new file mode 100644 index 0000000..63b22d1 --- /dev/null +++ b/assets/sprites/gui/ChooseYourSeeds/Panel.tres @@ -0,0 +1,7 @@ +[gd_resource type="AtlasTexture" load_steps=2 format=3 uid="uid://ci1a150qo2op2"] + +[ext_resource type="Texture2D" uid="uid://dvldjlg0nr355" path="res://assets/sprites/atlases/atlas1.png" id="1_ugykr"] + +[resource] +atlas = ExtResource("1_ugykr") +region = Rect2(87, 402, 26, 27) diff --git a/assets/sprites/gui/ChooseYourSeeds/PlantFrame.tres b/assets/sprites/gui/ChooseYourSeeds/PlantFrame.tres new file mode 100644 index 0000000..45d5200 --- /dev/null +++ b/assets/sprites/gui/ChooseYourSeeds/PlantFrame.tres @@ -0,0 +1,7 @@ +[gd_resource type="AtlasTexture" load_steps=2 format=3 uid="uid://dr8a0rx42o3qy"] + +[ext_resource type="Texture2D" uid="uid://dvldjlg0nr355" path="res://assets/sprites/atlases/atlas1.png" id="1_44qhk"] + +[resource] +atlas = ExtResource("1_44qhk") +region = Rect2(38, 300, 77, 77) diff --git a/assets/sprites/gui/ChooseYourSeeds/Slider.tres b/assets/sprites/gui/ChooseYourSeeds/Slider.tres new file mode 100644 index 0000000..fe971a7 --- /dev/null +++ b/assets/sprites/gui/ChooseYourSeeds/Slider.tres @@ -0,0 +1,7 @@ +[gd_resource type="AtlasTexture" load_steps=2 format=3 uid="uid://cv255d4s0qopj"] + +[ext_resource type="Texture2D" uid="uid://dvldjlg0nr355" path="res://assets/sprites/atlases/atlas1.png" id="1_auh61"] + +[resource] +atlas = ExtResource("1_auh61") +region = Rect2(129, 401, 13, 13) diff --git a/scenes/debug_lvl.tscn b/scenes/debug_lvl.tscn index 256510a..b495aed 100644 --- a/scenes/debug_lvl.tscn +++ b/scenes/debug_lvl.tscn @@ -3,11 +3,11 @@ [ext_resource type="Script" path="res://scripts/components/level/RuntimeLevelData.cs" id="1_i3bf5"] [ext_resource type="Texture2D" uid="uid://b0tb2hjum40aw" path="res://assets/sprites/summertime_saga.png" id="2_vmxhy"] [ext_resource type="PackedScene" uid="uid://cg8713v6c5w15" path="res://scenes/pools.tscn" id="3_jv7x4"] +[ext_resource type="PackedScene" uid="uid://dpxxjfd5lv5sv" path="res://scenes/gui/choose_your_seeds.tscn" id="5_5e78h"] [ext_resource type="PackedScene" uid="uid://devn21c7luf45" path="res://scenes/level components/field_controller.tscn" id="5_lwpg6"] [ext_resource type="PackedScene" uid="uid://cfnmspei3k4p7" path="res://scenes/gui/runtime_gui.tscn" id="6_0baou"] [ext_resource type="PackedScene" uid="uid://bpekho7leatr5" path="res://scenes/sun.tscn" id="6_ay12k"] [ext_resource type="Script" path="res://scripts/components/level/SunSpawner.cs" id="6_lkguy"] -[ext_resource type="PackedScene" uid="uid://co11v3w8hbwgf" path="res://scenes/entities/Zombies/zombie.tscn" id="8_uxcm5"] [node name="debug_lvl" type="Node2D"] @@ -32,6 +32,8 @@ layer = 10 [node name="RuntimeGUI" parent="GuiLayer" instance=ExtResource("6_0baou")] metadata/_edit_lock_ = true +[node name="ChooseYourSeeds" parent="GuiLayer" instance=ExtResource("5_5e78h")] + [node name="Overlay" type="CanvasLayer" parent="."] layer = 6 follow_viewport_enabled = true @@ -46,8 +48,4 @@ SunScene = ExtResource("6_ay12k") wait_time = 5.0 autostart = true -[node name="Zombie" parent="." instance=ExtResource("8_uxcm5")] -position = Vector2(730, 190) -_line = 2 - [connection signal="timeout" from="SunSpawner/Timer" to="SunSpawner" method="Spawn"] diff --git a/scenes/gui/choose_your_seeds.tscn b/scenes/gui/choose_your_seeds.tscn new file mode 100644 index 0000000..d9b7796 --- /dev/null +++ b/scenes/gui/choose_your_seeds.tscn @@ -0,0 +1,158 @@ +[gd_scene load_steps=12 format=3 uid="uid://dpxxjfd5lv5sv"] + +[ext_resource type="Theme" uid="uid://e8n88g31w7x7" path="res://resources/themes/ChooseYourSeeds.tres" id="1_bfo8i"] +[ext_resource type="Texture2D" uid="uid://dr8a0rx42o3qy" path="res://assets/sprites/gui/ChooseYourSeeds/PlantFrame.tres" id="2_so2bw"] +[ext_resource type="Texture2D" uid="uid://dycdvvgmgmfu6" path="res://assets/sprites/gui/ChooseYourSeeds/FrameField.tres" id="3_rn5vx"] +[ext_resource type="Script" path="res://scripts/components/gui/choose_your_seeds/GridLoader.cs" id="4_i7sou"] +[ext_resource type="PackedScene" uid="uid://10b1egek6upx" path="res://scenes/gui/level_run_button.tscn" id="5_n80ic"] +[ext_resource type="Script" path="res://scripts/components/gui/choose_your_seeds/LevelRunButton.cs" id="7_k6b6g"] + +[sub_resource type="Animation" id="Animation_0rps3"] +resource_name = "Hide" +length = 0.75 +step = 0.1 +tracks/0/type = "bezier" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("..:position:y") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"handle_modes": PackedInt32Array(0, 0), +"points": PackedFloat32Array(64, -0.25, 0, 0.5, 7.5, 402, -0.55, -95.5, 0.25, 0), +"times": PackedFloat32Array(0, 0.75) +} + +[sub_resource type="Animation" id="Animation_omiwq"] +resource_name = "Show" +length = 1.5 +step = 0.25 +tracks/0/type = "bezier" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("..:position:y") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"handle_modes": PackedInt32Array(0, 0, 0), +"points": PackedFloat32Array(402, -0.25, 0, 1, -336.5, 64, -1, 338.5, 0, 66.5, 64, -0.0571204, 1, 0.19288, 1.5), +"times": PackedFloat32Array(0, 1, 1.5) +} + +[sub_resource type="Animation" id="Animation_8he0w"] +length = 0.001 +tracks/0/type = "bezier" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("..:position:y") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"handle_modes": PackedInt32Array(0), +"points": PackedFloat32Array(402, -0.25, 0, 0.25, 0), +"times": PackedFloat32Array(0) +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_tguwa"] +_data = { +"Hide": SubResource("Animation_0rps3"), +"RESET": SubResource("Animation_8he0w"), +"Show": SubResource("Animation_omiwq") +} + +[sub_resource type="ViewportTexture" id="ViewportTexture_rmoaa"] +viewport_path = NodePath("Panel/MarginContainer/VBoxContainer/HBoxContainer/Frame/SubViewport") + +[node name="ChooseYourSeeds" type="Control"] +process_mode = 3 +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +mouse_filter = 2 +theme = ExtResource("1_bfo8i") + +[node name="AnimationPlayer" type="AnimationPlayer" parent="."] +root_node = NodePath("../Panel/LevelRunButton") +libraries = { +"": SubResource("AnimationLibrary_tguwa") +} +autoplay = "Show" + +[node name="Panel" type="Panel" parent="."] +layout_mode = 1 +anchors_preset = -1 +anchor_top = 2.005 +anchor_right = 0.6 +anchor_bottom = 2.845 +offset_top = -400.0 +offset_bottom = -400.0 +grow_vertical = 2 +metadata/_edit_use_anchors_ = true + +[node name="MarginContainer" type="MarginContainer" parent="Panel"] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +theme_override_constants/margin_left = 8 +theme_override_constants/margin_top = 6 +theme_override_constants/margin_right = 8 +theme_override_constants/margin_bottom = 6 + +[node name="VBoxContainer" type="VBoxContainer" parent="Panel/MarginContainer"] +layout_mode = 2 + +[node name="HBoxContainer" type="HBoxContainer" parent="Panel/MarginContainer/VBoxContainer"] +layout_mode = 2 + +[node name="Frame" type="TextureRect" parent="Panel/MarginContainer/VBoxContainer/HBoxContainer"] +layout_mode = 2 +texture = ExtResource("2_so2bw") + +[node name="SubViewport" type="SubViewport" parent="Panel/MarginContainer/VBoxContainer/HBoxContainer/Frame"] +canvas_item_default_texture_filter = 0 +size = Vector2i(65, 65) + +[node name="FrameField" type="Sprite2D" parent="Panel/MarginContainer/VBoxContainer/HBoxContainer/Frame/SubViewport"] +texture = ExtResource("3_rn5vx") + +[node name="Camera2D" type="Camera2D" parent="Panel/MarginContainer/VBoxContainer/HBoxContainer/Frame/SubViewport"] + +[node name="Render" type="TextureRect" parent="Panel/MarginContainer/VBoxContainer/HBoxContainer/Frame"] +show_behind_parent = true +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +texture = SubResource("ViewportTexture_rmoaa") + +[node name="PanelContainer" type="PanelContainer" parent="Panel/MarginContainer/VBoxContainer/HBoxContainer"] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="ScrollContainer" type="ScrollContainer" parent="Panel/MarginContainer/VBoxContainer"] +layout_mode = 2 +size_flags_vertical = 3 +horizontal_scroll_mode = 0 + +[node name="GridContainer" type="GridContainer" parent="Panel/MarginContainer/VBoxContainer/ScrollContainer"] +layout_mode = 2 +columns = 7 +script = ExtResource("4_i7sou") + +[node name="LevelRunButton" parent="Panel" node_paths=PackedStringArray("_player") instance=ExtResource("5_n80ic")] +layout_mode = 1 +anchor_left = 1.0 +anchor_right = 1.181 +anchor_bottom = 0.131 +offset_right = -16.16 +offset_bottom = -16.016 +script = ExtResource("7_k6b6g") +_player = NodePath("../../AnimationPlayer") diff --git a/scenes/gui/level_run_button.tscn b/scenes/gui/level_run_button.tscn new file mode 100644 index 0000000..b0db986 --- /dev/null +++ b/scenes/gui/level_run_button.tscn @@ -0,0 +1,14 @@ +[gd_scene load_steps=3 format=3 uid="uid://10b1egek6upx"] + +[ext_resource type="Theme" uid="uid://b8l285cjcgeyi" path="res://resources/themes/GameStyle.tres" id="1_05u5f"] +[ext_resource type="Texture2D" uid="uid://rpnw5lxm3ksb" path="res://assets/sprites/gui/ChooseYourSeeds/LevelRun.tres" id="1_qftep"] + +[node name="LevelRunButton" type="Button"] +anchors_preset = -1 +anchor_right = 0.108333 +anchor_bottom = 0.11 +offset_right = -57.0 +offset_bottom = -36.0 +theme = ExtResource("1_05u5f") +icon = ExtResource("1_qftep") +metadata/_edit_use_anchors_ = true diff --git a/scenes/gui/plant_card.tscn b/scenes/gui/seedpacket.tscn similarity index 66% rename from scenes/gui/plant_card.tscn rename to scenes/gui/seedpacket.tscn index e5ef501..528163e 100644 --- a/scenes/gui/plant_card.tscn +++ b/scenes/gui/seedpacket.tscn @@ -1,35 +1,32 @@ -[gd_scene load_steps=10 format=3 uid="uid://c8qru1yhnbbkl"] +[gd_scene load_steps=10 format=3 uid="uid://e7vutg71l6f2"] -[ext_resource type="Texture2D" uid="uid://cabpf23ndlvx0" path="res://assets/sprites/gui/Selection.tres" id="2_5mpv8"] -[ext_resource type="Texture2D" uid="uid://cxlr34yh0bqch" path="res://assets/sprites/gui/DisabledEmptyCard.png" id="2_odd6g"] -[ext_resource type="Script" path="res://scripts/components/gui/PlantSlot.cs" id="3_eer7n"] -[ext_resource type="Shader" path="res://assets/shaders/gui_masking.gdshader" id="4_bryew"] -[ext_resource type="Texture2D" uid="uid://dxyf557m4mq1p" path="res://assets/sprites/gui/EmptyPlantCard.png" id="5_2k0xq"] -[ext_resource type="Texture2D" uid="uid://c1afy0ga6h1ic" path="res://assets/sprites/white_box.png" id="5_7xerl"] -[ext_resource type="Script" path="res://scripts/components/gui/VeilResizer.cs" id="5_d6igb"] +[ext_resource type="Texture2D" uid="uid://dxyf557m4mq1p" path="res://assets/sprites/gui/EmptyPlantCard.png" id="1_77bw1"] +[ext_resource type="Texture2D" uid="uid://cxlr34yh0bqch" path="res://assets/sprites/gui/DisabledEmptyCard.png" id="2_2gojx"] +[ext_resource type="Texture2D" uid="uid://cabpf23ndlvx0" path="res://assets/sprites/gui/Selection.tres" id="3_q0tvq"] +[ext_resource type="Script" path="res://scripts/components/gui/seedpackets/Seedpacket.cs" id="4_c6epd"] +[ext_resource type="Shader" path="res://assets/shaders/gui_masking.gdshader" id="5_s5861"] +[ext_resource type="Texture2D" uid="uid://c1afy0ga6h1ic" path="res://assets/sprites/white_box.png" id="6_lp42h"] +[ext_resource type="Script" path="res://scripts/components/gui/VeilResizer.cs" id="7_tv07f"] [sub_resource type="LabelSettings" id="LabelSettings_js4li"] font_size = 13 font_color = Color(0, 0, 0, 1) [sub_resource type="ShaderMaterial" id="ShaderMaterial_qxf0q"] -shader = ExtResource("4_bryew") -shader_parameter/mask = ExtResource("5_2k0xq") +shader = ExtResource("5_s5861") +shader_parameter/mask = ExtResource("1_77bw1") -[node name="PlantSlot" type="TextureButton" node_paths=PackedStringArray("_cost", "_icon", "_timer")] +[node name="Seedpacket" type="TextureButton"] anchors_preset = -1 anchor_right = 0.137 anchor_bottom = 0.28 offset_right = -0.200005 mouse_default_cursor_shape = 2 -texture_normal = ExtResource("5_2k0xq") -texture_disabled = ExtResource("2_odd6g") -texture_focused = ExtResource("2_5mpv8") +texture_normal = ExtResource("1_77bw1") +texture_disabled = ExtResource("2_2gojx") +texture_focused = ExtResource("3_q0tvq") stretch_mode = 0 -script = ExtResource("3_eer7n") -_cost = NodePath("Cost") -_icon = NodePath("PlantPreviewContainer/Preview") -_timer = NodePath("RechargeTimer") +script = ExtResource("4_c6epd") metadata/_edit_use_anchors_ = true [node name="Cost" type="Label" parent="."] @@ -92,14 +89,12 @@ max_value = 1.0 step = 0.001 fill_mode = 3 nine_patch_stretch = true -texture_progress = ExtResource("5_7xerl") +texture_progress = ExtResource("6_lp42h") tint_progress = Color(0, 0, 0, 0.843137) -script = ExtResource("5_d6igb") +script = ExtResource("7_tv07f") _referenceTimer = NodePath("../RechargeTimer") [node name="RechargeTimer" type="Timer" parent="."] one_shot = true -[connection signal="focus_exited" from="." to="." method="OnFocusExited"] -[connection signal="pressed" from="." to="." method="OnPressed"] -[connection signal="timeout" from="RechargeTimer" to="." method="Timeout"] +[connection signal="focus_exited" from="." to="." method="OnUnfocused"] diff --git a/scripts/components/LevelGUIElements.cs b/scripts/components/LevelGUIElements.cs new file mode 100644 index 0000000..098b986 --- /dev/null +++ b/scripts/components/LevelGUIElements.cs @@ -0,0 +1,16 @@ +using Godot; +using System; + +public partial class LevelGUIElements : Control +{ + public static LevelGUIElements Instance; + + [Export] + public HBoxContainer SeedpacketsHotbar; + [Export] + public TextureRect SunCounter; + public override void _Ready() + { + Instance = this; + } +} diff --git a/scripts/components/gui/PlantSlot.cs b/scripts/components/gui/PlantSlot.cs deleted file mode 100644 index 4537b5c..0000000 --- a/scripts/components/gui/PlantSlot.cs +++ /dev/null @@ -1,67 +0,0 @@ -using Godot; -using System; - -public partial class PlantSlot : TextureButton -{ - [Export] private PlantResource _resource; - [Export] private Label _cost; - [Export] private TextureRect _icon; - [Export] private Timer _timer; - - private bool _recharging; - - public override void _Ready() - { - if (_resource != null) - UpdateContents(); - } - public override void _Process(double delta) - { - if (_resource != null) - { - Disabled = _recharging || LevelController.Instance.LevelData.SunCount < _resource.Cost; - FocusMode = Disabled ? FocusModeEnum.None : FocusModeEnum.All; - } - } - - public void SetPlantResource( PlantResource resource ) - { - _resource = resource; - - UpdateContents(); - } - - private void UpdateContents() - { - _cost.Text = _resource.Cost.ToString(); - _icon.Texture = _resource.Preview; - _timer.WaitTime = _resource.ReloadTime; - } - - private void OnPressed() - { - if (_timer.TimeLeft == 0) - { - LevelController.Instance.PlantField.SetPlant(this, _resource); - } - } - private void OnFocusExited() - { - LevelController.Instance.PlantField.SetPlant(null, null); - } - - - public void Recharge() - { - _recharging = true; - - ReleaseFocus(); - - _timer.Start(); - } - - private void Timeout() - { - _recharging = false; - } -} diff --git a/scripts/components/gui/choose_your_seeds/GridLoader.cs b/scripts/components/gui/choose_your_seeds/GridLoader.cs new file mode 100644 index 0000000..8b9a52c --- /dev/null +++ b/scripts/components/gui/choose_your_seeds/GridLoader.cs @@ -0,0 +1,28 @@ +using Godot; +using System; + +public partial class GridLoader : GridContainer +{ + private const string PLANT_RESOURCE_PATH = "res://resources/plants/"; + private PackedScene _plantCard; + + public override void _Ready() + { + _plantCard = ResourceLoader.Load("res://scenes/gui/seedpacket.tscn"); + + string[] files = DirAccess.GetFilesAt(PLANT_RESOURCE_PATH); + + foreach(var file in files) + { + if(ResourceLoader.Exists(PLANT_RESOURCE_PATH+file)) + { + Seedpacket slot = _plantCard.Instantiate(); + AddChild(slot); + + slot.SetPlantResource(ResourceLoader.Load(PLANT_RESOURCE_PATH+file)); + slot.SetHandler(new ChoosableHandler(slot)); + } + + } + } +} diff --git a/scripts/components/gui/choose_your_seeds/LevelRunButton.cs b/scripts/components/gui/choose_your_seeds/LevelRunButton.cs new file mode 100644 index 0000000..4919d81 --- /dev/null +++ b/scripts/components/gui/choose_your_seeds/LevelRunButton.cs @@ -0,0 +1,13 @@ +using Godot; + +public partial class LevelRunButton : Button +{ + [Export] private AnimationPlayer _player; + public override void _Pressed() + { + RuntimeLevelData.Instance.SetLevelState(RuntimeLevelData.LevelStates.Game); + GetTree().Paused = false; + + _player.Play("Hide"); + } +} diff --git a/scripts/components/gui/seedpackets/ChoosableHandler.cs b/scripts/components/gui/seedpackets/ChoosableHandler.cs new file mode 100644 index 0000000..07b4091 --- /dev/null +++ b/scripts/components/gui/seedpackets/ChoosableHandler.cs @@ -0,0 +1,24 @@ +public class ChoosableHandler : SeedpacketHandler, ISeedpacketPress +{ + public ChoosableHandler(Seedpacket owner) : base(owner) + { + } + + public void Pressed() + { + _owner.disablePacket = true; + + var hotbarSeedpacket = Seedpacket.Prefab.Instantiate(); + LevelGUIElements.Instance.SeedpacketsHotbar.AddChild(hotbarSeedpacket); + hotbarSeedpacket.SetPlantResource(_owner.GetPlantResource()); + + var pregameHandler = new HotbarPregameHandler(hotbarSeedpacket); + hotbarSeedpacket.SetHandler(pregameHandler); + pregameHandler.Clicked += OnHotbarClicked; + } + + public void OnHotbarClicked() + { + _owner.disablePacket = false; + } +} \ No newline at end of file diff --git a/scripts/components/gui/seedpackets/HotbarHandler.cs b/scripts/components/gui/seedpackets/HotbarHandler.cs new file mode 100644 index 0000000..2d18957 --- /dev/null +++ b/scripts/components/gui/seedpackets/HotbarHandler.cs @@ -0,0 +1,22 @@ +using System; +using Godot; +public class HotbarHandler : SeedpacketHandler, ISeedpacketPress, ISeedpacketProcess, ISeedpacketUnfocus +{ + public HotbarHandler(Seedpacket owner) : base(owner) + { + } + + public void Pressed() + { + PlantField.Instance.SetPlant(_owner,_owner.GetPlantResource()); + } + + public void Process() + { + _owner.disablePacket = RuntimeLevelData.Instance.SunCount < _owner.GetPlantResource().Cost; + } + public void OnUnfocused() + { + PlantField.Instance.ResetPlant(); + } +} \ No newline at end of file diff --git a/scripts/components/gui/seedpackets/HotbarPregameHandler.cs b/scripts/components/gui/seedpackets/HotbarPregameHandler.cs new file mode 100644 index 0000000..2bf8a3b --- /dev/null +++ b/scripts/components/gui/seedpackets/HotbarPregameHandler.cs @@ -0,0 +1,29 @@ +using System; +using Godot; +public class HotbarPregameHandler : SeedpacketHandler, ISeedpacketPress +{ + public HotbarPregameHandler(Seedpacket owner) : base(owner) + { + RuntimeLevelData.Instance.OnLevelStateChanged += OnLevelStateChanged; + + } + + public event Action Clicked; + public void Pressed() + { + if (Clicked != null) Clicked(); + _owner.QueueFree(); + } + + public void OnLevelStateChanged(RuntimeLevelData.LevelStates state) + { + if (state == RuntimeLevelData.LevelStates.Game) + { + _owner.SetHandler(new HotbarHandler(_owner)); + } + else if (state != RuntimeLevelData.LevelStates.ChooseYourSeeds) + { + _owner.disablePacket = true; + } + } +} \ No newline at end of file diff --git a/scripts/components/gui/seedpackets/ISeedpacketPress.cs b/scripts/components/gui/seedpackets/ISeedpacketPress.cs new file mode 100644 index 0000000..b4bcd1e --- /dev/null +++ b/scripts/components/gui/seedpackets/ISeedpacketPress.cs @@ -0,0 +1,4 @@ +public interface ISeedpacketPress +{ + public void Pressed(); +} \ No newline at end of file diff --git a/scripts/components/gui/seedpackets/ISeedpacketProcess.cs b/scripts/components/gui/seedpackets/ISeedpacketProcess.cs new file mode 100644 index 0000000..f1e061b --- /dev/null +++ b/scripts/components/gui/seedpackets/ISeedpacketProcess.cs @@ -0,0 +1,4 @@ +public interface ISeedpacketProcess +{ + public void Process(); +} \ No newline at end of file diff --git a/scripts/components/gui/seedpackets/ISeedpacketUnfocus.cs b/scripts/components/gui/seedpackets/ISeedpacketUnfocus.cs new file mode 100644 index 0000000..ffe363a --- /dev/null +++ b/scripts/components/gui/seedpackets/ISeedpacketUnfocus.cs @@ -0,0 +1,4 @@ +public interface ISeedpacketUnfocus +{ + public void OnUnfocused(); +} \ No newline at end of file diff --git a/scripts/components/gui/seedpackets/Seedpacket.cs b/scripts/components/gui/seedpackets/Seedpacket.cs new file mode 100644 index 0000000..3a3be24 --- /dev/null +++ b/scripts/components/gui/seedpackets/Seedpacket.cs @@ -0,0 +1,76 @@ +using Godot; +using System; + +public partial class Seedpacket : TextureButton +{ + private const string PATH_TO_PACKED_SCENE = "res://scenes/gui/seedpacket.tscn"; + private PlantResource _resource; + private Label _cost; + private TextureRect _icon; + private Timer _timer; + private SeedpacketHandler _handler; + + public bool disablePacket = false; + + public static PackedScene Prefab { get; private set; } + + // Node overrides + public override void _Ready() + { + if (_resource != null) + UpdateContents(); + if (Prefab == null) + { + Prefab = ResourceLoader.Load(PATH_TO_PACKED_SCENE); + } + _cost = GetNode