feat: 1. 添加武器基础脚本
2. 添加武器基本resources 3. 武器碰撞 RangeArea 进入和退出检测 4. 添加 Hitbox 进行武器碰撞敌人区域(只是添加了,功能还没实现) 5. 武器冷却时间 weapon_base / CooldownTimer
This commit is contained in:
@@ -6,6 +6,13 @@ signal on_create_damage_text(unit: Node2D, hitbox: HitboxComponent)
|
|||||||
const FLASH_MATERIAL = preload("uid://cwtrdmkrsmw23")
|
const FLASH_MATERIAL = preload("uid://cwtrdmkrsmw23")
|
||||||
const FLOATING_TEXT_SCENE = preload("uid://qkwyrg22h3gi")
|
const FLOATING_TEXT_SCENE = preload("uid://qkwyrg22h3gi")
|
||||||
|
|
||||||
|
enum UpgradeTier {
|
||||||
|
COMMON,
|
||||||
|
RARE,
|
||||||
|
EPIC,
|
||||||
|
LEGENDARY
|
||||||
|
}
|
||||||
|
|
||||||
var player: Player
|
var player: Player
|
||||||
|
|
||||||
# 尝试阻止敌人攻击,获取闪避, unit_stats block_chance 越大
|
# 尝试阻止敌人攻击,获取闪避, unit_stats block_chance 越大
|
||||||
|
|||||||
@@ -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 ""
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
uid://jdonfq601lgj
|
||||||
@@ -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
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
uid://26bxxaoso6np
|
||||||
@@ -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"
|
||||||
@@ -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"
|
||||||
@@ -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"
|
||||||
@@ -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"
|
||||||
@@ -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"
|
||||||
@@ -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"
|
||||||
@@ -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"
|
||||||
@@ -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"
|
||||||
@@ -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
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
uid://d3d6rctbb48mk
|
||||||
@@ -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)
|
||||||
@@ -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
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
uid://d2fxp4oky50qs
|
||||||
@@ -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"]
|
||||||
Reference in New Issue
Block a user