From 363aeaf44596cca8eab528a3d560b7aee6104c19 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=A8=E8=90=BD=E5=9F=BA=E5=9B=B4=E8=99=BE?= <3161880837@qq.com> Date: Tue, 26 Aug 2025 09:24:09 +0800 Subject: [PATCH] init --- .gitignore | 1 + components/Abstracts/EntityBase.tscn | 31 ++++++++++ components/Characters/Rooster.tscn | 30 ++++++++++ components/UI/ColorBar.tscn | 14 +++++ components/UI/EntityStateBar.tscn | 14 +++++ icon.svg | 1 + icon.svg.import | 37 ++++++++++++ project.godot | 48 ++++++++++++++++ resources/characters/chick/chick-a.svg | 19 +++++++ resources/characters/chick/chick-a.svg.import | 37 ++++++++++++ resources/characters/chick/chick-b.svg | 20 +++++++ resources/characters/chick/chick-b.svg.import | 37 ++++++++++++ resources/characters/cock/rooster-a.svg | 56 +++++++++++++++++++ .../characters/cock/rooster-a.svg.import | 37 ++++++++++++ resources/characters/cock/rooster-b.svg | 51 +++++++++++++++++ .../characters/cock/rooster-b.svg.import | 37 ++++++++++++ resources/characters/hen/hen-a.svg | 37 ++++++++++++ resources/characters/hen/hen-a.svg.import | 37 ++++++++++++ resources/characters/hen/hen-b.svg | 33 +++++++++++ resources/characters/hen/hen-b.svg.import | 37 ++++++++++++ scripts/Contents/Characters/Rooster.gd | 9 +++ scripts/Statemachine/ColorBar.gd | 33 +++++++++++ scripts/Statemachine/EntityBase.gd | 26 +++++++++ scripts/Statemachine/EntityStateBar.gd | 10 ++++ world.tscn | 8 +++ 25 files changed, 700 insertions(+) create mode 100644 .gitignore create mode 100644 components/Abstracts/EntityBase.tscn create mode 100644 components/Characters/Rooster.tscn create mode 100644 components/UI/ColorBar.tscn create mode 100644 components/UI/EntityStateBar.tscn create mode 100644 icon.svg create mode 100644 icon.svg.import create mode 100644 project.godot create mode 100644 resources/characters/chick/chick-a.svg create mode 100644 resources/characters/chick/chick-a.svg.import create mode 100644 resources/characters/chick/chick-b.svg create mode 100644 resources/characters/chick/chick-b.svg.import create mode 100644 resources/characters/cock/rooster-a.svg create mode 100644 resources/characters/cock/rooster-a.svg.import create mode 100644 resources/characters/cock/rooster-b.svg create mode 100644 resources/characters/cock/rooster-b.svg.import create mode 100644 resources/characters/hen/hen-a.svg create mode 100644 resources/characters/hen/hen-a.svg.import create mode 100644 resources/characters/hen/hen-b.svg create mode 100644 resources/characters/hen/hen-b.svg.import create mode 100644 scripts/Contents/Characters/Rooster.gd create mode 100644 scripts/Statemachine/ColorBar.gd create mode 100644 scripts/Statemachine/EntityBase.gd create mode 100644 scripts/Statemachine/EntityStateBar.gd create mode 100644 world.tscn diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..1a6395e --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.godot \ No newline at end of file diff --git a/components/Abstracts/EntityBase.tscn b/components/Abstracts/EntityBase.tscn new file mode 100644 index 0000000..3577f06 --- /dev/null +++ b/components/Abstracts/EntityBase.tscn @@ -0,0 +1,31 @@ +[gd_scene load_steps=6 format=3 uid="uid://cvogxi7mktumf"] + +[ext_resource type="Script" path="res://scripts/Statemachine/EntityBase.gd" id="1_mvol6"] +[ext_resource type="PackedScene" uid="uid://dcjqjqere8ets" path="res://components/UI/EntityStateBar.tscn" id="2_uje1g"] + +[sub_resource type="SpriteFrames" id="SpriteFrames_wcqpm"] + +[sub_resource type="CircleShape2D" id="CircleShape2D_buhm1"] +radius = 43.2897 + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_ce3to"] +size = Vector2(64, 14) + +[node name="EntityBase" type="CharacterBody2D"] +script = ExtResource("1_mvol6") + +[node name="texture" type="AnimatedSprite2D" parent="."] +sprite_frames = SubResource("SpriteFrames_wcqpm") + +[node name="statebar" parent="texture" instance=ExtResource("2_uje1g")] +position = Vector2(0, -51) + +[node name="hurtbox" type="Area2D" parent="texture"] + +[node name="hitbox" type="CollisionShape2D" parent="texture/hurtbox"] +position = Vector2(7, 12) +shape = SubResource("CircleShape2D_buhm1") + +[node name="movebox" type="CollisionShape2D" parent="."] +position = Vector2(16, 69) +shape = SubResource("RectangleShape2D_ce3to") diff --git a/components/Characters/Rooster.tscn b/components/Characters/Rooster.tscn new file mode 100644 index 0000000..d830988 --- /dev/null +++ b/components/Characters/Rooster.tscn @@ -0,0 +1,30 @@ +[gd_scene load_steps=6 format=3 uid="uid://bm7ymrri6pykb"] + +[ext_resource type="PackedScene" uid="uid://cvogxi7mktumf" path="res://components/Abstracts/EntityBase.tscn" id="1_e5pl8"] +[ext_resource type="Script" path="res://scripts/Contents/Characters/Rooster.gd" id="2_oqdqd"] +[ext_resource type="Texture2D" uid="uid://fn8qx72clh38" path="res://resources/characters/cock/rooster-a.svg" id="2_q0j6j"] +[ext_resource type="Texture2D" uid="uid://ci2ik43ce82uy" path="res://resources/characters/cock/rooster-b.svg" id="3_b0fgx"] + +[sub_resource type="SpriteFrames" id="SpriteFrames_4v2ol"] +animations = [{ +"frames": [{ +"duration": 1.0, +"texture": ExtResource("2_q0j6j") +}, { +"duration": 1.0, +"texture": ExtResource("3_b0fgx") +}], +"loop": true, +"name": &"default", +"speed": 5.0 +}] + +[node name="Rooster" instance=ExtResource("1_e5pl8")] +script = ExtResource("2_oqdqd") + +[node name="texture" parent="." index="0"] +sprite_frames = SubResource("SpriteFrames_4v2ol") + +[node name="statebar" parent="texture" index="0" node_paths=PackedStringArray("entity")] +position = Vector2(0, -83) +entity = NodePath("../..") diff --git a/components/UI/ColorBar.tscn b/components/UI/ColorBar.tscn new file mode 100644 index 0000000..72be9cd --- /dev/null +++ b/components/UI/ColorBar.tscn @@ -0,0 +1,14 @@ +[gd_scene load_steps=2 format=3 uid="uid://d1ulrvupa76ap"] + +[ext_resource type="Script" path="res://scripts/Statemachine/ColorBar.gd" id="1_a106p"] + +[node name="ColorBar" type="Control"] +layout_mode = 3 +anchors_preset = 0 +offset_right = 100.0 +offset_bottom = 10.0 +script = ExtResource("1_a106p") +backColor = Color(0, 0, 0, 0.5) +middleColor = Color(1, 0, 0, 0.5) +frontColor = Color(1, 1, 1, 1) +speed2 = 0.05 diff --git a/components/UI/EntityStateBar.tscn b/components/UI/EntityStateBar.tscn new file mode 100644 index 0000000..cf8c8b6 --- /dev/null +++ b/components/UI/EntityStateBar.tscn @@ -0,0 +1,14 @@ +[gd_scene load_steps=3 format=3 uid="uid://dcjqjqere8ets"] + +[ext_resource type="PackedScene" uid="uid://d1ulrvupa76ap" path="res://components/UI/ColorBar.tscn" id="1_0ngbn"] +[ext_resource type="Script" path="res://scripts/Statemachine/EntityStateBar.gd" id="1_ovbjr"] + +[node name="EntityStateBar" type="Node2D"] +script = ExtResource("1_ovbjr") + +[node name="health" parent="." instance=ExtResource("1_0ngbn")] +unique_name_in_owner = true +offset_left = -50.0 +offset_top = -5.0 +offset_right = 50.0 +offset_bottom = 5.0 diff --git a/icon.svg b/icon.svg new file mode 100644 index 0000000..9d8b7fa --- /dev/null +++ b/icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icon.svg.import b/icon.svg.import new file mode 100644 index 0000000..7461e8b --- /dev/null +++ b/icon.svg.import @@ -0,0 +1,37 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dwwpkn4q07ja2" +path="res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://icon.svg" +dest_files=["res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.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 +svg/scale=1.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/project.godot b/project.godot new file mode 100644 index 0000000..7d49dac --- /dev/null +++ b/project.godot @@ -0,0 +1,48 @@ +; Engine configuration file. +; It's best edited using the editor UI and not directly, +; since the parameters that go here are not all obvious. +; +; Format: +; [section] ; section goes between [] +; param=value ; assign values to parameters + +config_version=5 + +[application] + +config/name="ChickenVSBear" +run/main_scene="res://world.tscn" +config/features=PackedStringArray("4.3", "GL Compatibility") +config/icon="res://icon.svg" + +[dotnet] + +project/assembly_name="ChickenVSBear" + +[input] + +m_up={ +"deadzone": 0.5, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":87,"key_label":0,"unicode":119,"location":0,"echo":false,"script":null) +] +} +m_down={ +"deadzone": 0.5, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":83,"key_label":0,"unicode":115,"location":0,"echo":false,"script":null) +] +} +m_left={ +"deadzone": 0.5, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":65,"key_label":0,"unicode":97,"location":0,"echo":false,"script":null) +] +} +m_right={ +"deadzone": 0.5, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":68,"key_label":0,"unicode":100,"location":0,"echo":false,"script":null) +] +} + +[rendering] + +renderer/rendering_method="gl_compatibility" +renderer/rendering_method.mobile="gl_compatibility" diff --git a/resources/characters/chick/chick-a.svg b/resources/characters/chick/chick-a.svg new file mode 100644 index 0000000..d218f6c --- /dev/null +++ b/resources/characters/chick/chick-a.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/resources/characters/chick/chick-a.svg.import b/resources/characters/chick/chick-a.svg.import new file mode 100644 index 0000000..fd72711 --- /dev/null +++ b/resources/characters/chick/chick-a.svg.import @@ -0,0 +1,37 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://7pkplcqqxvnp" +path="res://.godot/imported/chick-a.svg-afac6b0ae774c3bd58491e2bd6361d4c.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://resources/characters/chick/chick-a.svg" +dest_files=["res://.godot/imported/chick-a.svg-afac6b0ae774c3bd58491e2bd6361d4c.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 +svg/scale=1.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/resources/characters/chick/chick-b.svg b/resources/characters/chick/chick-b.svg new file mode 100644 index 0000000..c0edbf9 --- /dev/null +++ b/resources/characters/chick/chick-b.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/resources/characters/chick/chick-b.svg.import b/resources/characters/chick/chick-b.svg.import new file mode 100644 index 0000000..b3c09f7 --- /dev/null +++ b/resources/characters/chick/chick-b.svg.import @@ -0,0 +1,37 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dj5dvqb8gsedr" +path="res://.godot/imported/chick-b.svg-b4baddeda341f2ae54cc4b02f0e627a2.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://resources/characters/chick/chick-b.svg" +dest_files=["res://.godot/imported/chick-b.svg-b4baddeda341f2ae54cc4b02f0e627a2.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 +svg/scale=1.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/resources/characters/cock/rooster-a.svg b/resources/characters/cock/rooster-a.svg new file mode 100644 index 0000000..ff91e28 --- /dev/null +++ b/resources/characters/cock/rooster-a.svg @@ -0,0 +1,56 @@ + + + + + Slice 1 + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/resources/characters/cock/rooster-a.svg.import b/resources/characters/cock/rooster-a.svg.import new file mode 100644 index 0000000..5ff972c --- /dev/null +++ b/resources/characters/cock/rooster-a.svg.import @@ -0,0 +1,37 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://fn8qx72clh38" +path="res://.godot/imported/rooster-a.svg-8f3b7c9a282f7530eadfdf1db6ed219b.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://resources/characters/cock/rooster-a.svg" +dest_files=["res://.godot/imported/rooster-a.svg-8f3b7c9a282f7530eadfdf1db6ed219b.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 +svg/scale=1.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/resources/characters/cock/rooster-b.svg b/resources/characters/cock/rooster-b.svg new file mode 100644 index 0000000..30bba52 --- /dev/null +++ b/resources/characters/cock/rooster-b.svg @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/resources/characters/cock/rooster-b.svg.import b/resources/characters/cock/rooster-b.svg.import new file mode 100644 index 0000000..1c5e4bf --- /dev/null +++ b/resources/characters/cock/rooster-b.svg.import @@ -0,0 +1,37 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://ci2ik43ce82uy" +path="res://.godot/imported/rooster-b.svg-bdafe710157b3cee086ebe2237be9345.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://resources/characters/cock/rooster-b.svg" +dest_files=["res://.godot/imported/rooster-b.svg-bdafe710157b3cee086ebe2237be9345.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 +svg/scale=1.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/resources/characters/hen/hen-a.svg b/resources/characters/hen/hen-a.svg new file mode 100644 index 0000000..7ffac0b --- /dev/null +++ b/resources/characters/hen/hen-a.svg @@ -0,0 +1,37 @@ + + + + + Slice 1 + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/resources/characters/hen/hen-a.svg.import b/resources/characters/hen/hen-a.svg.import new file mode 100644 index 0000000..408351a --- /dev/null +++ b/resources/characters/hen/hen-a.svg.import @@ -0,0 +1,37 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://b5m0fpg3ewfum" +path="res://.godot/imported/hen-a.svg-e0523199921d84862ee8bebd1fc8832a.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://resources/characters/hen/hen-a.svg" +dest_files=["res://.godot/imported/hen-a.svg-e0523199921d84862ee8bebd1fc8832a.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 +svg/scale=1.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/resources/characters/hen/hen-b.svg b/resources/characters/hen/hen-b.svg new file mode 100644 index 0000000..3bee073 --- /dev/null +++ b/resources/characters/hen/hen-b.svg @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/resources/characters/hen/hen-b.svg.import b/resources/characters/hen/hen-b.svg.import new file mode 100644 index 0000000..908c759 --- /dev/null +++ b/resources/characters/hen/hen-b.svg.import @@ -0,0 +1,37 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://3o0oqobnr3b2" +path="res://.godot/imported/hen-b.svg-fdf12ad84161cdb59dec3cf629cd6ecc.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://resources/characters/hen/hen-b.svg" +dest_files=["res://.godot/imported/hen-b.svg-fdf12ad84161cdb59dec3cf629cd6ecc.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 +svg/scale=1.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/scripts/Contents/Characters/Rooster.gd b/scripts/Contents/Characters/Rooster.gd new file mode 100644 index 0000000..0f14c5d --- /dev/null +++ b/scripts/Contents/Characters/Rooster.gd @@ -0,0 +1,9 @@ +extends EntityBase +class_name Rooster + +func ai(): + var vector = Vector2( + Input.get_axis("m_left", "m_right"), + Input.get_axis("m_up", "m_down") + ) + move(vector) diff --git a/scripts/Statemachine/ColorBar.gd b/scripts/Statemachine/ColorBar.gd new file mode 100644 index 0000000..9275e26 --- /dev/null +++ b/scripts/Statemachine/ColorBar.gd @@ -0,0 +1,33 @@ +@tool +extends Control + +@export var minValue: float = 0 +@export var maxValue: float = 100 +@export var currentValue: float = 50 +@export var backColor: Color +@export var middleColor: Color +@export var frontColor: Color +@export var speed1: float = 0.9 +@export var speed2: float = 0.01 + +var middleValue = 0 +var frontValue = 0 +var forwardDirection = -1 + +func getPercent(value: float): + return (value - minValue) / (maxValue - minValue) +func setCurrent(value: float): + forwardDirection = sign(value - currentValue) + currentValue = value + +func _ready(): + middleValue = currentValue + frontValue = currentValue +func _draw(): + draw_rect(Rect2(0, 0, size.x, size.y), backColor) + draw_rect(Rect2(0, 0, size.x * getPercent(middleValue), size.y), middleColor) + draw_rect(Rect2(0, 0, size.x * getPercent(frontValue), size.y), frontColor) +func _process(_delta: float) -> void: + middleValue = lerpf(middleValue, currentValue, speed1 if forwardDirection > 0 else speed2) + frontValue = lerpf(frontValue, currentValue, speed1 if forwardDirection < 0 else speed2) + queue_redraw() diff --git a/scripts/Statemachine/EntityBase.gd b/scripts/Statemachine/EntityBase.gd new file mode 100644 index 0000000..cc631dd --- /dev/null +++ b/scripts/Statemachine/EntityBase.gd @@ -0,0 +1,26 @@ +extends CharacterBody2D +class_name EntityBase # 这是个抽象类 + +@export var maxHealth: float = 100 +@export var movementSpeed: float = 100 + +var health: float = 0 + +func _ready(): + health = maxHealth +func _process(_delta): + health = clamp(health, 0, maxHealth) +func _physics_process(_delta: float) -> void: + velocity = Vector2.ZERO + ai() + move_and_slide() + +# 通用方法 +func move(direction: Vector2): + velocity = direction.normalized() * movementSpeed + +# 抽象方法 +func ai(): + pass +func attack(_type: int): + pass diff --git a/scripts/Statemachine/EntityStateBar.gd b/scripts/Statemachine/EntityStateBar.gd new file mode 100644 index 0000000..1881c6e --- /dev/null +++ b/scripts/Statemachine/EntityStateBar.gd @@ -0,0 +1,10 @@ +extends Node2D + +@export var entity: EntityBase + +@onready var healthBar = $"%health" + +func _process(_delta): + if entity: + healthBar.maxValue = entity.maxHealth + healthBar.setCurrent(entity.health) diff --git a/world.tscn b/world.tscn new file mode 100644 index 0000000..9072d21 --- /dev/null +++ b/world.tscn @@ -0,0 +1,8 @@ +[gd_scene load_steps=2 format=3 uid="uid://dmxi1ikn6avig"] + +[ext_resource type="PackedScene" uid="uid://bm7ymrri6pykb" path="res://components/Characters/Rooster.tscn" id="1_7jr0n"] + +[node name="world" type="Node2D"] + +[node name="rooster" parent="." instance=ExtResource("1_7jr0n")] +position = Vector2(394, 274)