diff --git a/assets/sprites/atlases/plants/snow_pea.png b/assets/sprites/atlases/plants/snow_pea.png index 6949348..8328e45 100644 Binary files a/assets/sprites/atlases/plants/snow_pea.png and b/assets/sprites/atlases/plants/snow_pea.png differ diff --git a/assets/sprites/atlases/zombies/armor.aseprite b/assets/sprites/atlases/zombies/armor.aseprite new file mode 100644 index 0000000..fa9eb23 Binary files /dev/null and b/assets/sprites/atlases/zombies/armor.aseprite differ diff --git a/assets/sprites/atlases/zombies/armor.png b/assets/sprites/atlases/zombies/armor.png new file mode 100644 index 0000000..33255e7 Binary files /dev/null and b/assets/sprites/atlases/zombies/armor.png differ diff --git a/assets/sprites/atlases/zombies/armor.png.import b/assets/sprites/atlases/zombies/armor.png.import new file mode 100644 index 0000000..cadb905 --- /dev/null +++ b/assets/sprites/atlases/zombies/armor.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://b18blso5pbc6a" +path="res://.godot/imported/armor.png-18d1dee9d58098145c2a15ea84198bc9.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/sprites/atlases/zombies/armor.png" +dest_files=["res://.godot/imported/armor.png-18d1dee9d58098145c2a15ea84198bc9.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/sprites/bucket.tres b/assets/sprites/bucket.tres deleted file mode 100644 index f3684c7..0000000 --- a/assets/sprites/bucket.tres +++ /dev/null @@ -1,7 +0,0 @@ -[gd_resource type="AtlasTexture" load_steps=2 format=3 uid="uid://ce04l60l6mhfk"] - -[ext_resource type="Texture2D" uid="uid://cmxh4w4gkgdjm" path="res://assets/sprites/atlases/zombies/basic.png" id="1_n66kp"] - -[resource] -atlas = ExtResource("1_n66kp") -region = Rect2(21, 23, 34, 38) diff --git a/assets/sprites/bucket1.tres b/assets/sprites/bucket1.tres new file mode 100644 index 0000000..8d35795 --- /dev/null +++ b/assets/sprites/bucket1.tres @@ -0,0 +1,7 @@ +[gd_resource type="AtlasTexture" load_steps=2 format=3 uid="uid://ce04l60l6mhfk"] + +[ext_resource type="Texture2D" uid="uid://b18blso5pbc6a" path="res://assets/sprites/atlases/zombies/armor.png" id="1_drgch"] + +[resource] +atlas = ExtResource("1_drgch") +region = Rect2(0, 33, 34, 38) diff --git a/assets/sprites/bucket2.tres b/assets/sprites/bucket2.tres new file mode 100644 index 0000000..b48df74 --- /dev/null +++ b/assets/sprites/bucket2.tres @@ -0,0 +1,7 @@ +[gd_resource type="AtlasTexture" load_steps=2 format=3 uid="uid://ikk4jp7mvm3s"] + +[ext_resource type="Texture2D" uid="uid://b18blso5pbc6a" path="res://assets/sprites/atlases/zombies/armor.png" id="1_l2quk"] + +[resource] +atlas = ExtResource("1_l2quk") +region = Rect2(34, 33, 33, 36) diff --git a/assets/sprites/bucket3.tres b/assets/sprites/bucket3.tres new file mode 100644 index 0000000..e360d8c --- /dev/null +++ b/assets/sprites/bucket3.tres @@ -0,0 +1,7 @@ +[gd_resource type="AtlasTexture" load_steps=2 format=3 uid="uid://cmmpfi8ug43l2"] + +[ext_resource type="Texture2D" uid="uid://b18blso5pbc6a" path="res://assets/sprites/atlases/zombies/armor.png" id="1_n3lqc"] + +[resource] +atlas = ExtResource("1_n3lqc") +region = Rect2(67, 33, 29, 33) diff --git a/assets/sprites/cone.tres b/assets/sprites/cone1.tres similarity index 100% rename from assets/sprites/cone.tres rename to assets/sprites/cone1.tres diff --git a/assets/sprites/cone2.tres b/assets/sprites/cone2.tres new file mode 100644 index 0000000..b14c7e2 --- /dev/null +++ b/assets/sprites/cone2.tres @@ -0,0 +1,7 @@ +[gd_resource type="AtlasTexture" load_steps=2 format=3 uid="uid://cl5ekw72wi75c"] + +[ext_resource type="Texture2D" uid="uid://b18blso5pbc6a" path="res://assets/sprites/atlases/zombies/armor.png" id="1_au0m1"] + +[resource] +atlas = ExtResource("1_au0m1") +region = Rect2(31, 1, 31, 32) diff --git a/assets/sprites/cone3.tres b/assets/sprites/cone3.tres new file mode 100644 index 0000000..abd2df8 --- /dev/null +++ b/assets/sprites/cone3.tres @@ -0,0 +1,7 @@ +[gd_resource type="AtlasTexture" load_steps=2 format=3 uid="uid://cnn81r1y0xwod"] + +[ext_resource type="Texture2D" uid="uid://b18blso5pbc6a" path="res://assets/sprites/atlases/zombies/armor.png" id="1_rrcfd"] + +[resource] +atlas = ExtResource("1_rrcfd") +region = Rect2(62, 11, 31, 22) diff --git a/project.godot b/project.godot index c8c3885..d09d382 100644 --- a/project.godot +++ b/project.godot @@ -29,7 +29,6 @@ AudioSequencer="*res://scenes/audio_sequencer.tscn" window/size/viewport_width=600 window/size/viewport_height=400 window/stretch/mode="canvas_items" -window/per_pixel_transparency/allowed=true [dotnet] @@ -91,4 +90,3 @@ cheat_zombie_spawn={ [rendering] textures/canvas_textures/default_texture_filter=0 -2d/snap/snap_2d_transforms_to_pixel=true diff --git a/scenes/entities/Zombies/bucket_zombie.tscn b/scenes/entities/Zombies/bucket_zombie.tscn index df6f0d7..38d5e17 100644 --- a/scenes/entities/Zombies/bucket_zombie.tscn +++ b/scenes/entities/Zombies/bucket_zombie.tscn @@ -1,10 +1,12 @@ -[gd_scene load_steps=10 format=3 uid="uid://xu4i6tmkv00a"] +[gd_scene load_steps=12 format=3 uid="uid://xu4i6tmkv00a"] [ext_resource type="PackedScene" uid="uid://hhjbqkjqpt7x" path="res://scenes/entities/Zombies/cone_zombie.tscn" id="1_mwqpo"] [ext_resource type="Shader" uid="uid://d0eo5uuj222c4" path="res://assets/shaders/CG_color_blender.gdshader" id="2_3mrqj"] -[ext_resource type="Texture2D" uid="uid://ce04l60l6mhfk" path="res://assets/sprites/bucket.tres" id="3_0nlp0"] +[ext_resource type="Texture2D" uid="uid://ce04l60l6mhfk" path="res://assets/sprites/bucket1.tres" id="3_0nlp0"] [ext_resource type="Script" uid="uid://c3cfnrmnnuqms" path="res://addons/floatmodifiers/FloatModifiers.cs" id="4_1s2fn"] +[ext_resource type="Texture2D" uid="uid://ikk4jp7mvm3s" path="res://assets/sprites/bucket2.tres" id="4_xx7fu"] [ext_resource type="AudioStream" uid="uid://bu1egfsyplpx4" path="res://assets/audio/sfx/metalhit_generic.tres" id="5_lt6ps"] +[ext_resource type="Texture2D" uid="uid://cmmpfi8ug43l2" path="res://assets/sprites/bucket3.tres" id="5_v1iwd"] [ext_resource type="AudioStream" uid="uid://w0qfwds4o3ti" path="res://assets/audio/sfx/hit_generic.tres" id="6_kedip"] [sub_resource type="ShaderMaterial" id="ShaderMaterial_wdi07"] @@ -38,6 +40,7 @@ position = Vector2(-13, -82) [node name="Sprite" parent="CanvasGroup/Hat" index="0"] position = Vector2(1, 0) texture = ExtResource("3_0nlp0") +degradationStages = Array[Texture]([ExtResource("3_0nlp0"), ExtResource("4_xx7fu"), ExtResource("5_v1iwd")]) [node name="Eatbox" parent="." index="2"] _damage = SubResource("Resource_2bm8y") @@ -46,7 +49,7 @@ _damage = SubResource("Resource_2bm8y") _speed = SubResource("Resource_lt6ps") [node name="Armor" parent="." index="7"] -_maxHP = 385 +MaxHP = 430 [node name="HitPlayer" parent="." index="8"] playlist = Array[AudioStream]([ExtResource("5_lt6ps"), ExtResource("6_kedip")]) diff --git a/scenes/entities/Zombies/cone_zombie.tscn b/scenes/entities/Zombies/cone_zombie.tscn index 27cd410..41fc405 100644 --- a/scenes/entities/Zombies/cone_zombie.tscn +++ b/scenes/entities/Zombies/cone_zombie.tscn @@ -1,12 +1,15 @@ -[gd_scene load_steps=13 format=3 uid="uid://hhjbqkjqpt7x"] +[gd_scene load_steps=16 format=3 uid="uid://hhjbqkjqpt7x"] [ext_resource type="PackedScene" uid="uid://co11v3w8hbwgf" path="res://scenes/entities/Zombies/zombie.tscn" id="1_3dq4c"] [ext_resource type="Shader" uid="uid://d0eo5uuj222c4" path="res://assets/shaders/CG_color_blender.gdshader" id="2_2dq8e"] [ext_resource type="Script" uid="uid://fd4im1fmwc5n" path="res://scripts/components/Armor.cs" id="3_5s7in"] [ext_resource type="Script" uid="uid://dt5uj25u0g6y3" path="res://scripts/components/particles/FallParticle.cs" id="3_w70im"] -[ext_resource type="Texture2D" uid="uid://ceqvdmude7cgg" path="res://assets/sprites/cone.tres" id="4_qdhik"] +[ext_resource type="Texture2D" uid="uid://ceqvdmude7cgg" path="res://assets/sprites/cone1.tres" id="4_qdhik"] [ext_resource type="Script" uid="uid://c3cfnrmnnuqms" path="res://addons/floatmodifiers/FloatModifiers.cs" id="4_qof5v"] +[ext_resource type="Script" uid="uid://bbw848msxb4re" path="res://scripts/components/DegradingSprite.cs" id="5_ickyd"] +[ext_resource type="Texture2D" uid="uid://cl5ekw72wi75c" path="res://assets/sprites/cone2.tres" id="6_b6mal"] [ext_resource type="AudioStream" uid="uid://bmupd3v3gvsca" path="res://assets/audio/sfx/plastichit_generic.tres" id="7_0amn8"] +[ext_resource type="Texture2D" uid="uid://cnn81r1y0xwod" path="res://assets/sprites/cone3.tres" id="7_011r0"] [ext_resource type="AudioStream" uid="uid://w0qfwds4o3ti" path="res://assets/audio/sfx/hit_generic.tres" id="7_67t4t"] [sub_resource type="ShaderMaterial" id="ShaderMaterial_sat5k"] @@ -51,9 +54,13 @@ minTorque = -45.0 maxTorque = 45.0 Impulse = 100.0 -[node name="Sprite" type="Sprite2D" parent="CanvasGroup/Hat" index="0"] +[node name="Sprite" type="Sprite2D" parent="CanvasGroup/Hat" index="0" node_paths=PackedStringArray("armor")] position = Vector2(-1, -12) texture = ExtResource("4_qdhik") +script = ExtResource("5_ickyd") +armor = NodePath("../../../Armor") +degradationStages = Array[Texture]([ExtResource("4_qdhik"), ExtResource("6_b6mal"), ExtResource("7_011r0")]) +thresholdPercentage = Array[float]([1.0, 0.667, 0.333]) [node name="CollisionShape2D" type="CollisionShape2D" parent="CanvasGroup/Hat" index="1"] position = Vector2(1, -6) @@ -67,7 +74,7 @@ _speed = SubResource("Resource_qof5v") [node name="Armor" type="Node" parent="." index="7"] script = ExtResource("3_5s7in") -_maxHP = 130 +MaxHP = 125 [node name="HitPlayer" parent="." index="8"] playlist = Array[AudioStream]([ExtResource("7_0amn8"), ExtResource("7_67t4t")]) diff --git a/scenes/entities/plants/wallnut.tscn b/scenes/entities/plants/wallnut.tscn index 1e18730..84a0d9e 100644 --- a/scenes/entities/plants/wallnut.tscn +++ b/scenes/entities/plants/wallnut.tscn @@ -34,7 +34,6 @@ _maxHP = 600 texture = ExtResource("2_o5tda") hframes = 12 vframes = 3 -frame = 10 [node name="AnimationPlayer" parent="." index="1"] libraries = { diff --git a/scenes/gui/main_menu.tscn b/scenes/gui/main_menu.tscn index c9c264d..f8f90a9 100644 --- a/scenes/gui/main_menu.tscn +++ b/scenes/gui/main_menu.tscn @@ -24,6 +24,7 @@ grow_vertical = 2 [node name="PrototypeWindow" type="AcceptDialog" parent="."] title = "" size = Vector2i(600, 400) +visible = true unresizable = true borderless = true theme_override_styles/panel = SubResource("StyleBoxTexture_jl0ue") diff --git a/scenes/gui/seedpacket.tscn b/scenes/gui/seedpacket.tscn index dc37e37..db3c0ca 100644 --- a/scenes/gui/seedpacket.tscn +++ b/scenes/gui/seedpacket.tscn @@ -1,7 +1,6 @@ -[gd_scene load_steps=10 format=3 uid="uid://e7vutg71l6f2"] +[gd_scene load_steps=9 format=3 uid="uid://e7vutg71l6f2"] [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" uid="uid://cn6ddajdtf4ep" path="res://scripts/components/gui/seedpackets/Seedpacket.cs" id="4_c6epd"] [ext_resource type="Shader" uid="uid://dcp5tqcec2oi3" path="res://assets/shaders/gui_masking.gdshader" id="5_s5861"] @@ -20,10 +19,10 @@ shader_parameter/mask = ExtResource("1_77bw1") anchors_preset = -1 anchor_right = 0.137 anchor_bottom = 0.28 -offset_right = -0.200005 +offset_left = 2.0 +offset_right = 1.8 mouse_default_cursor_shape = 2 texture_normal = ExtResource("1_77bw1") -texture_disabled = ExtResource("2_2gojx") texture_focused = ExtResource("3_q0tvq") stretch_mode = 0 script = ExtResource("4_c6epd") @@ -90,7 +89,7 @@ step = 0.001 fill_mode = 3 nine_patch_stretch = true texture_progress = ExtResource("6_lp42h") -tint_progress = Color(0, 0, 0, 0.843137) +tint_progress = Color(0, 0, 0, 0.501961) script = ExtResource("7_tv07f") _referenceTimer = NodePath("../RechargeTimer") diff --git a/scenes/prototype_survival.tscn b/scenes/prototype_survival.tscn index 8e9e35c..7befe00 100644 --- a/scenes/prototype_survival.tscn +++ b/scenes/prototype_survival.tscn @@ -182,7 +182,7 @@ size = Vector2(282, 399) [node name="Data" type="Node" parent="."] script = ExtResource("1_tnxdx") -SunCount = 50 +SunCount = 10000 [node name="Background" type="Sprite2D" parent="."] position = Vector2(500, 200) @@ -191,7 +191,6 @@ metadata/_edit_lock_ = true [node name="Camera2D" type="Camera2D" parent="."] position = Vector2(481, 200) -metadata/_edit_lock_ = true [node name="Pools" type="Node2D" parent="." node_paths=PackedStringArray("Zombies", "Plants", "Projectiles", "Structures", "Particles")] script = ExtResource("3_6128b") diff --git a/scripts/components/Armor.cs b/scripts/components/Armor.cs index 260850d..4326ff0 100644 --- a/scripts/components/Armor.cs +++ b/scripts/components/Armor.cs @@ -11,13 +11,13 @@ public partial class Armor : Node public delegate void ArmorLostEventHandler(); [Export] - private int _maxHP; + public int MaxHP { get; private set; } private int _hp; private bool _lost = false; public override void _Ready() { - _hp = _maxHP; + _hp = MaxHP; } public int RecieveDamage(int damage) @@ -43,10 +43,10 @@ public partial class Armor : Node return amount; int returnAmount = 0; _hp += amount; - if (_hp >= _maxHP) + if (_hp >= MaxHP) { - returnAmount = _hp-_maxHP; - _hp = _maxHP; + returnAmount = _hp-MaxHP; + _hp = MaxHP; } EmitSignal(SignalName.ArmorDamaged,_hp); return returnAmount; diff --git a/scripts/components/DegradingSprite.cs b/scripts/components/DegradingSprite.cs new file mode 100644 index 0000000..baa5e8f --- /dev/null +++ b/scripts/components/DegradingSprite.cs @@ -0,0 +1,33 @@ +using Godot; +using Godot.Collections; + +namespace Newlon.Components.Zombies; + +public partial class DegradingSprite : Sprite2D +{ + [Export] private Armor armor; + [Export] private Array degradationStages; + [Export] private Array thresholdPercentage; + + public override void _Ready() + { + armor.ArmorDamaged += OnZombieHPChanged; + } + + private void OnZombieHPChanged(int hp) + { + float percent = (float)hp / (float)armor.MaxHP; + for (int i = 0; i < degradationStages.Count; i++) + { + if (percent <= thresholdPercentage[i]) + { + Texture = degradationStages[i]; + } + else + { + break; + } + } + } + +} diff --git a/scripts/components/DegradingSprite.cs.uid b/scripts/components/DegradingSprite.cs.uid new file mode 100644 index 0000000..a6ffb07 --- /dev/null +++ b/scripts/components/DegradingSprite.cs.uid @@ -0,0 +1 @@ +uid://bbw848msxb4re diff --git a/scripts/components/gui/VeilResizer.cs b/scripts/components/gui/VeilResizer.cs index c7c5a44..8fa367a 100644 --- a/scripts/components/gui/VeilResizer.cs +++ b/scripts/components/gui/VeilResizer.cs @@ -1,13 +1,23 @@ using Godot; +using Newlon.Components.GUI.Seedpackets; namespace Newlon.Components.GUI; public partial class VeilResizer : TextureProgressBar { [Export] private Timer _referenceTimer; + private Seedpacket seedpacket; + + public override void _Ready() + { + seedpacket = GetParent(); + } public override void _Process(double delta) { - Value = (_referenceTimer.TimeLeft/_referenceTimer.WaitTime); + if (seedpacket.Disabled && _referenceTimer.IsStopped()) + Value = 1.0; + else + Value = _referenceTimer.TimeLeft / _referenceTimer.WaitTime; } }