From 7c7b2e9420740cc7417fd67044955fd89e0d52be Mon Sep 17 00:00:00 2001 From: luke358 Date: Tue, 19 May 2026 00:22:38 +0800 Subject: [PATCH] =?UTF-8?q?feat:=201.=20=E6=B7=BB=E5=8A=A0=E6=AD=A6?= =?UTF-8?q?=E5=99=A8=E5=9F=BA=E7=A1=80=E8=84=9A=E6=9C=AC=202.=20=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E6=AD=A6=E5=99=A8=E5=9F=BA=E6=9C=ACresources=203.=20?= =?UTF-8?q?=E6=AD=A6=E5=99=A8=E7=A2=B0=E6=92=9E=20RangeArea=20=E8=BF=9B?= =?UTF-8?q?=E5=85=A5=E5=92=8C=E9=80=80=E5=87=BA=E6=A3=80=E6=B5=8B=204.=20?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=20Hitbox=20=E8=BF=9B=E8=A1=8C=E6=AD=A6?= =?UTF-8?q?=E5=99=A8=E7=A2=B0=E6=92=9E=E6=95=8C=E4=BA=BA=E5=8C=BA=E5=9F=9F?= =?UTF-8?q?=EF=BC=88=E5=8F=AA=E6=98=AF=E6=B7=BB=E5=8A=A0=E4=BA=86=EF=BC=8C?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=E8=BF=98=E6=B2=A1=E5=AE=9E=E7=8E=B0=EF=BC=89?= =?UTF-8?q?=205.=20=E6=AD=A6=E5=99=A8=E5=86=B7=E5=8D=B4=E6=97=B6=E9=97=B4?= =?UTF-8?q?=20weapon=5Fbase=20/=20CooldownTimer?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- autoloads/global.gd | 7 ++++ resources/items/item_base.gd | 18 ++++++++++ resources/items/item_base.gd.uid | 1 + resources/items/weapons/item_weapon.gd | 12 +++++++ resources/items/weapons/item_weapon.gd.uid | 1 + .../weapons/melee/punch/item_punch_1.tres | 17 +++++++++ .../weapons/melee/punch/item_punch_2.tres | 18 ++++++++++ .../weapons/melee/punch/item_punch_3.tres | 18 ++++++++++ .../weapons/melee/punch/item_punch_4.tres | 16 +++++++++ .../weapons/melee/punch/stats_punch_1.tres | 12 +++++++ .../weapons/melee/punch/stats_punch_2.tres | 12 +++++++ .../weapons/melee/punch/stats_punch_3.tres | 12 +++++++ .../weapons/melee/punch/stats_punch_4.tres | 14 ++++++++ resources/items/weapons/weapon_stats.gd | 18 ++++++++++ resources/items/weapons/weapon_stats.gd.uid | 1 + scenes/weapons/melee/weapon_punch.tscn | 20 +++++++++++ scenes/weapons/weapon.gd | 36 +++++++++++++++++++ scenes/weapons/weapon.gd.uid | 1 + scenes/weapons/weapon_base.tscn | 29 +++++++++++++++ 19 files changed, 263 insertions(+) create mode 100644 resources/items/item_base.gd create mode 100644 resources/items/item_base.gd.uid create mode 100644 resources/items/weapons/item_weapon.gd create mode 100644 resources/items/weapons/item_weapon.gd.uid create mode 100644 resources/items/weapons/melee/punch/item_punch_1.tres create mode 100644 resources/items/weapons/melee/punch/item_punch_2.tres create mode 100644 resources/items/weapons/melee/punch/item_punch_3.tres create mode 100644 resources/items/weapons/melee/punch/item_punch_4.tres create mode 100644 resources/items/weapons/melee/punch/stats_punch_1.tres create mode 100644 resources/items/weapons/melee/punch/stats_punch_2.tres create mode 100644 resources/items/weapons/melee/punch/stats_punch_3.tres create mode 100644 resources/items/weapons/melee/punch/stats_punch_4.tres create mode 100644 resources/items/weapons/weapon_stats.gd create mode 100644 resources/items/weapons/weapon_stats.gd.uid create mode 100644 scenes/weapons/melee/weapon_punch.tscn create mode 100644 scenes/weapons/weapon.gd create mode 100644 scenes/weapons/weapon.gd.uid create mode 100644 scenes/weapons/weapon_base.tscn diff --git a/autoloads/global.gd b/autoloads/global.gd index 4b18260..e557051 100644 --- a/autoloads/global.gd +++ b/autoloads/global.gd @@ -6,6 +6,13 @@ signal on_create_damage_text(unit: Node2D, hitbox: HitboxComponent) const FLASH_MATERIAL = preload("uid://cwtrdmkrsmw23") const FLOATING_TEXT_SCENE = preload("uid://qkwyrg22h3gi") +enum UpgradeTier { + COMMON, + RARE, + EPIC, + LEGENDARY +} + var player: Player # 尝试阻止敌人攻击,获取闪避, unit_stats block_chance 越大 diff --git a/resources/items/item_base.gd b/resources/items/item_base.gd new file mode 100644 index 0000000..3b70996 --- /dev/null +++ b/resources/items/item_base.gd @@ -0,0 +1,18 @@ +extends Resource +class_name ItemBase + +enum ItemType { + WEAPON, + UPGRADE, + PASSIVE +} + +@export var item_name: String +@export var item_icon: Texture2D +@export var item_tier: Global.UpgradeTier +@export var item_type: ItemType +@export var item_cost: int + + +func get_description() -> String: + return "" diff --git a/resources/items/item_base.gd.uid b/resources/items/item_base.gd.uid new file mode 100644 index 0000000..197e8d2 --- /dev/null +++ b/resources/items/item_base.gd.uid @@ -0,0 +1 @@ +uid://jdonfq601lgj diff --git a/resources/items/weapons/item_weapon.gd b/resources/items/weapons/item_weapon.gd new file mode 100644 index 0000000..92c20e5 --- /dev/null +++ b/resources/items/weapons/item_weapon.gd @@ -0,0 +1,12 @@ +extends ItemBase +class_name ItemWeapon + +enum WeaponType { + MELEE, + RANGE +} + +@export var type: WeaponType +@export var scene: PackedScene +@export var stats: WeaponStats +@export var upgradge_to: ItemWeapon diff --git a/resources/items/weapons/item_weapon.gd.uid b/resources/items/weapons/item_weapon.gd.uid new file mode 100644 index 0000000..28495eb --- /dev/null +++ b/resources/items/weapons/item_weapon.gd.uid @@ -0,0 +1 @@ +uid://26bxxaoso6np diff --git a/resources/items/weapons/melee/punch/item_punch_1.tres b/resources/items/weapons/melee/punch/item_punch_1.tres new file mode 100644 index 0000000..0ae88a7 --- /dev/null +++ b/resources/items/weapons/melee/punch/item_punch_1.tres @@ -0,0 +1,17 @@ +[gd_resource type="Resource" script_class="ItemWeapon" format=3 uid="uid://murcuuks1j8l"] + +[ext_resource type="Texture2D" uid="uid://cyh23wqn8vcac" path="res://assets/sprites/Weapons/Icons/weapon_punch_icon.png" id="1_h03dk"] +[ext_resource type="Script" uid="uid://26bxxaoso6np" path="res://resources/items/weapons/item_weapon.gd" id="1_o6o4d"] +[ext_resource type="PackedScene" uid="uid://d1igydtpm3sq8" path="res://scenes/weapons/melee/weapon_punch.tscn" id="2_rm85p"] +[ext_resource type="Resource" uid="uid://dqsjrkb2ehidv" path="res://resources/items/weapons/melee/punch/stats_punch_1.tres" id="3_ftcsy"] +[ext_resource type="Resource" uid="uid://cakw72u61qp80" path="res://resources/items/weapons/melee/punch/item_punch_2.tres" id="4_k4o1h"] + +[resource] +script = ExtResource("1_o6o4d") +scene = ExtResource("2_rm85p") +stats = ExtResource("3_ftcsy") +upgradge_to = ExtResource("4_k4o1h") +item_name = "Punch I" +item_icon = ExtResource("1_h03dk") +item_cost = 12 +metadata/_custom_type_script = "uid://26bxxaoso6np" diff --git a/resources/items/weapons/melee/punch/item_punch_2.tres b/resources/items/weapons/melee/punch/item_punch_2.tres new file mode 100644 index 0000000..f35f172 --- /dev/null +++ b/resources/items/weapons/melee/punch/item_punch_2.tres @@ -0,0 +1,18 @@ +[gd_resource type="Resource" script_class="ItemWeapon" format=3 uid="uid://cakw72u61qp80"] + +[ext_resource type="Texture2D" uid="uid://cyh23wqn8vcac" path="res://assets/sprites/Weapons/Icons/weapon_punch_icon.png" id="1_wrw2j"] +[ext_resource type="Script" uid="uid://26bxxaoso6np" path="res://resources/items/weapons/item_weapon.gd" id="2_amj6w"] +[ext_resource type="PackedScene" uid="uid://d1igydtpm3sq8" path="res://scenes/weapons/melee/weapon_punch.tscn" id="2_igce5"] +[ext_resource type="Resource" uid="uid://c6a44r3a7jmyd" path="res://resources/items/weapons/melee/punch/stats_punch_2.tres" id="3_wrw2j"] +[ext_resource type="Resource" uid="uid://h4jqjg8mu53b" path="res://resources/items/weapons/melee/punch/item_punch_3.tres" id="4_amj6w"] + +[resource] +script = ExtResource("2_amj6w") +scene = ExtResource("2_igce5") +stats = ExtResource("3_wrw2j") +upgradge_to = ExtResource("4_amj6w") +item_name = "Punch II" +item_icon = ExtResource("1_wrw2j") +item_tier = 1 +item_cost = 25 +metadata/_custom_type_script = "uid://26bxxaoso6np" diff --git a/resources/items/weapons/melee/punch/item_punch_3.tres b/resources/items/weapons/melee/punch/item_punch_3.tres new file mode 100644 index 0000000..1dc693e --- /dev/null +++ b/resources/items/weapons/melee/punch/item_punch_3.tres @@ -0,0 +1,18 @@ +[gd_resource type="Resource" script_class="ItemWeapon" format=3 uid="uid://h4jqjg8mu53b"] + +[ext_resource type="Texture2D" uid="uid://cyh23wqn8vcac" path="res://assets/sprites/Weapons/Icons/weapon_punch_icon.png" id="1_c6qlh"] +[ext_resource type="PackedScene" uid="uid://d1igydtpm3sq8" path="res://scenes/weapons/melee/weapon_punch.tscn" id="2_nyb4v"] +[ext_resource type="Script" uid="uid://26bxxaoso6np" path="res://resources/items/weapons/item_weapon.gd" id="2_tds7r"] +[ext_resource type="Resource" uid="uid://dwdqmgsh0e417" path="res://resources/items/weapons/melee/punch/stats_punch_3.tres" id="3_c6qlh"] +[ext_resource type="Resource" uid="uid://b535w50o17ui" path="res://resources/items/weapons/melee/punch/item_punch_4.tres" id="4_tds7r"] + +[resource] +script = ExtResource("2_tds7r") +scene = ExtResource("2_nyb4v") +stats = ExtResource("3_c6qlh") +upgradge_to = ExtResource("4_tds7r") +item_name = "Punch III" +item_icon = ExtResource("1_c6qlh") +item_tier = 2 +item_cost = 55 +metadata/_custom_type_script = "uid://26bxxaoso6np" diff --git a/resources/items/weapons/melee/punch/item_punch_4.tres b/resources/items/weapons/melee/punch/item_punch_4.tres new file mode 100644 index 0000000..e853699 --- /dev/null +++ b/resources/items/weapons/melee/punch/item_punch_4.tres @@ -0,0 +1,16 @@ +[gd_resource type="Resource" script_class="ItemWeapon" format=3 uid="uid://b535w50o17ui"] + +[ext_resource type="Texture2D" uid="uid://cyh23wqn8vcac" path="res://assets/sprites/Weapons/Icons/weapon_punch_icon.png" id="1_f1uf4"] +[ext_resource type="Script" uid="uid://26bxxaoso6np" path="res://resources/items/weapons/item_weapon.gd" id="2_503wk"] +[ext_resource type="PackedScene" uid="uid://d1igydtpm3sq8" path="res://scenes/weapons/melee/weapon_punch.tscn" id="2_tm866"] +[ext_resource type="Resource" uid="uid://d32uq8u04r5t7" path="res://resources/items/weapons/melee/punch/stats_punch_4.tres" id="3_f1uf4"] + +[resource] +script = ExtResource("2_503wk") +scene = ExtResource("2_tm866") +stats = ExtResource("3_f1uf4") +item_name = "Punch IV" +item_icon = ExtResource("1_f1uf4") +item_tier = 3 +item_cost = 130 +metadata/_custom_type_script = "uid://26bxxaoso6np" diff --git a/resources/items/weapons/melee/punch/stats_punch_1.tres b/resources/items/weapons/melee/punch/stats_punch_1.tres new file mode 100644 index 0000000..8623761 --- /dev/null +++ b/resources/items/weapons/melee/punch/stats_punch_1.tres @@ -0,0 +1,12 @@ +[gd_resource type="Resource" script_class="WeaponStats" format=3 uid="uid://dqsjrkb2ehidv"] + +[ext_resource type="Script" uid="uid://d3d6rctbb48mk" path="res://resources/items/weapons/weapon_stats.gd" id="1_b0adc"] + +[resource] +script = ExtResource("1_b0adc") +damage = 4.0 +accurary = 1.0 +cooldown = 1.5 +max_range = 180.0 +knockback = 1.0 +metadata/_custom_type_script = "uid://d3d6rctbb48mk" diff --git a/resources/items/weapons/melee/punch/stats_punch_2.tres b/resources/items/weapons/melee/punch/stats_punch_2.tres new file mode 100644 index 0000000..056ec16 --- /dev/null +++ b/resources/items/weapons/melee/punch/stats_punch_2.tres @@ -0,0 +1,12 @@ +[gd_resource type="Resource" script_class="WeaponStats" format=3 uid="uid://c6a44r3a7jmyd"] + +[ext_resource type="Script" uid="uid://d3d6rctbb48mk" path="res://resources/items/weapons/weapon_stats.gd" id="1_ccedh"] + +[resource] +script = ExtResource("1_ccedh") +damage = 8.0 +accurary = 1.0 +cooldown = 1.2 +max_range = 180.0 +knockback = 1.0 +metadata/_custom_type_script = "uid://d3d6rctbb48mk" diff --git a/resources/items/weapons/melee/punch/stats_punch_3.tres b/resources/items/weapons/melee/punch/stats_punch_3.tres new file mode 100644 index 0000000..f7bdef2 --- /dev/null +++ b/resources/items/weapons/melee/punch/stats_punch_3.tres @@ -0,0 +1,12 @@ +[gd_resource type="Resource" script_class="WeaponStats" format=3 uid="uid://dwdqmgsh0e417"] + +[ext_resource type="Script" uid="uid://d3d6rctbb48mk" path="res://resources/items/weapons/weapon_stats.gd" id="1_jst7l"] + +[resource] +script = ExtResource("1_jst7l") +damage = 16.0 +accurary = 1.0 +cooldown = 0.9 +max_range = 180.0 +knockback = 1.0 +metadata/_custom_type_script = "uid://d3d6rctbb48mk" diff --git a/resources/items/weapons/melee/punch/stats_punch_4.tres b/resources/items/weapons/melee/punch/stats_punch_4.tres new file mode 100644 index 0000000..e97b872 --- /dev/null +++ b/resources/items/weapons/melee/punch/stats_punch_4.tres @@ -0,0 +1,14 @@ +[gd_resource type="Resource" script_class="WeaponStats" format=3 uid="uid://d32uq8u04r5t7"] + +[ext_resource type="Script" uid="uid://d3d6rctbb48mk" path="res://resources/items/weapons/weapon_stats.gd" id="1_kkanm"] + +[resource] +script = ExtResource("1_kkanm") +damage = 30.0 +accurary = 1.0 +cooldown = 0.7 +crit_chance = 0.1 +crit_damage = 2.0 +max_range = 200.0 +knockback = 1.0 +metadata/_custom_type_script = "uid://d3d6rctbb48mk" diff --git a/resources/items/weapons/weapon_stats.gd b/resources/items/weapons/weapon_stats.gd new file mode 100644 index 0000000..4f088f4 --- /dev/null +++ b/resources/items/weapons/weapon_stats.gd @@ -0,0 +1,18 @@ +extends Resource +class_name WeaponStats + + +@export var damage := 1.0 +@export_range(0.0,1.0) var accurary := 0.9 +@export_range(0.5,3.0) var cooldown := 1.0 +@export_range(0.0,1.0) var crit_chance := 0.05 +@export var crit_damage := 1.5 +@export var max_range := 150.0 +@export var knockback := 0.0 +@export_range(0.0,1.0) var life_steal := 0.0 +@export var recoil := 25.0 +@export_range(0.1,3.0) var recoil_duration := 0.0 +@export_range(0.1,3.0) var attack_duration := 0.2 +@export_range(0.1,3.0) var back_duration := 0.15 +@export var projectile_scene: PackedScene +@export var projectile_speed := 1600.0 diff --git a/resources/items/weapons/weapon_stats.gd.uid b/resources/items/weapons/weapon_stats.gd.uid new file mode 100644 index 0000000..e282f56 --- /dev/null +++ b/resources/items/weapons/weapon_stats.gd.uid @@ -0,0 +1 @@ +uid://d3d6rctbb48mk diff --git a/scenes/weapons/melee/weapon_punch.tscn b/scenes/weapons/melee/weapon_punch.tscn new file mode 100644 index 0000000..0bf21ac --- /dev/null +++ b/scenes/weapons/melee/weapon_punch.tscn @@ -0,0 +1,20 @@ +[gd_scene format=3 uid="uid://d1igydtpm3sq8"] + +[ext_resource type="PackedScene" uid="uid://dcc7rsdy4j8v6" path="res://scenes/weapons/weapon_base.tscn" id="1_soyvn"] +[ext_resource type="PackedScene" uid="uid://c0fyx8gj5uexl" path="res://scenes/components/hitbox_component.tscn" id="2_gq287"] + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_gq287"] +size = Vector2(52, 42) + +[node name="WeaponPunch" unique_id=63743776 instance=ExtResource("1_soyvn")] + +[node name="Sprite2D" parent="." index="0" unique_id=1011668514] +position = Vector2(21, 1) + +[node name="HitboxComponent" parent="Sprite2D" index="0" unique_id=151235566 instance=ExtResource("2_gq287")] +scale = Vector2(2, 2) + +[node name="CollisionShape2D" type="CollisionShape2D" parent="Sprite2D/HitboxComponent" index="0" unique_id=1064980236] +z_index = 1 +shape = SubResource("RectangleShape2D_gq287") +debug_color = Color(0.9556908, 0.042769283, 0.5218647, 0.41960785) diff --git a/scenes/weapons/weapon.gd b/scenes/weapons/weapon.gd new file mode 100644 index 0000000..7a34720 --- /dev/null +++ b/scenes/weapons/weapon.gd @@ -0,0 +1,36 @@ +extends Node2D +class_name Weapon + + +@onready var sprite_2d: Sprite2D = $Sprite2D +@onready var collision: CollisionShape2D = %CollisionShape2D +@onready var cooldown_timer: Timer = $CooldownTimer + +var data: ItemWeapon +var is_attacking := false +var atk_start_pos: Vector2 +var targets: Array[Enemy] +var closest_target: Enemy +var weapon_spread: float + +func _ready() -> void: + atk_start_pos = sprite_2d.position + + +func setup_weapon(data: ItemWeapon) -> void: + self.data = data + collision.shape.radius = data.stats.max_range + + +func can_use_weapon() -> bool: + return cooldown_timer.is_stopped() and closest_target + + +func _on_range_area_area_entered(area: Area2D) -> void: + targets.push_back(area) + + +func _on_range_area_area_exited(area: Area2D) -> void: + targets.erase(area) + if targets.size() == 0: + closest_target = null diff --git a/scenes/weapons/weapon.gd.uid b/scenes/weapons/weapon.gd.uid new file mode 100644 index 0000000..b89c178 --- /dev/null +++ b/scenes/weapons/weapon.gd.uid @@ -0,0 +1 @@ +uid://d2fxp4oky50qs diff --git a/scenes/weapons/weapon_base.tscn b/scenes/weapons/weapon_base.tscn new file mode 100644 index 0000000..8476e96 --- /dev/null +++ b/scenes/weapons/weapon_base.tscn @@ -0,0 +1,29 @@ +[gd_scene format=3 uid="uid://dcc7rsdy4j8v6"] + +[ext_resource type="Script" uid="uid://d2fxp4oky50qs" path="res://scenes/weapons/weapon.gd" id="1_v4xn6"] +[ext_resource type="Texture2D" uid="uid://l5hst1cf27oo" path="res://assets/sprites/Weapons/Melee/Weapon_Punch.png" id="2_uvw4m"] + +[sub_resource type="CircleShape2D" id="CircleShape2D_vffjk"] +radius = 150.0 + +[node name="WeaponBase" type="Node2D" unique_id=63743776] +script = ExtResource("1_v4xn6") + +[node name="Sprite2D" type="Sprite2D" parent="." unique_id=1011668514] +scale = Vector2(0.5, 0.5) +texture = ExtResource("2_uvw4m") + +[node name="RangeArea" type="Area2D" parent="." unique_id=877203105] +collision_mask = 2 + +[node name="CollisionShape2D" type="CollisionShape2D" parent="RangeArea" unique_id=902525969] +unique_name_in_owner = true +shape = SubResource("CircleShape2D_vffjk") + +[node name="CooldownTimer" type="Timer" parent="." unique_id=1814049304] +one_shot = true + +[node name="WeaponBehavior" type="Node2D" parent="." unique_id=1507497844] + +[connection signal="area_entered" from="RangeArea" to="." method="_on_range_area_area_entered"] +[connection signal="area_exited" from="RangeArea" to="." method="_on_range_area_area_exited"]