master
chendian 1 year ago
parent c845e7ac21
commit 271eb69a39

@ -1,4 +1,4 @@
[gd_resource type="Resource" script_class="CharacterCfg" load_steps=7 format=3 uid="uid://bjvrih37ni5nx"]
[gd_resource type="Resource" script_class="CharacterCfg" load_steps=8 format=3 uid="uid://bjvrih37ni5nx"]
[ext_resource type="Script" path="res://script/config/character_cfg.gd" id="1_2054l"]
[ext_resource type="Resource" uid="uid://dx54fjf5t0uu8" path="res://config/character_move/normal.tres" id="1_ebj0w"]
@ -6,6 +6,7 @@
[ext_resource type="Resource" uid="uid://815to6lq2qfs" path="res://config/character_mp/player.tres" id="2_wo8op"]
[ext_resource type="Resource" uid="uid://dlaekoamystx3" path="res://config/character_shield/normal.tres" id="3_5l0vx"]
[ext_resource type="Resource" uid="uid://cac6mk6g078vn" path="res://config/character_stun/normal.tres" id="6_i7bnp"]
[ext_resource type="Resource" uid="uid://b7e0vtpo7ox58" path="res://config/character/hero01_soul.tres" id="7_vfx1h"]
[resource]
script = ExtResource("1_2054l")
@ -20,3 +21,5 @@ stun = ExtResource("6_i7bnp")
mp = ExtResource("2_wo8op")
hp_max = 100.0
attack = 10.0
sub_character = ExtResource("7_vfx1h")
sub_character_auto_create = true

@ -0,0 +1,23 @@
[gd_resource type="Resource" script_class="CharacterCfg" load_steps=7 format=3 uid="uid://b7e0vtpo7ox58"]
[ext_resource type="Resource" uid="uid://dx54fjf5t0uu8" path="res://config/character_move/normal.tres" id="1_xjqmq"]
[ext_resource type="Resource" uid="uid://815to6lq2qfs" path="res://config/character_mp/player.tres" id="2_lvwof"]
[ext_resource type="Script" path="res://script/config/character_cfg.gd" id="3_wmpd1"]
[ext_resource type="Resource" uid="uid://dlaekoamystx3" path="res://config/character_shield/normal.tres" id="4_wsj1w"]
[ext_resource type="SpriteFrames" uid="uid://cwe8setoi6bd" path="res://resource/animation/character/hero01_move.aseprite" id="5_t652g"]
[ext_resource type="Resource" uid="uid://cac6mk6g078vn" path="res://config/character_stun/normal.tres" id="6_sxxop"]
[resource]
script = ExtResource("3_wmpd1")
name = "hero01"
type = 3
sprite_frames = ExtResource("5_t652g")
sprite_height = 50
sprite_width = 16
move = ExtResource("1_xjqmq")
shield = ExtResource("4_wsj1w")
stun = ExtResource("6_sxxop")
mp = ExtResource("2_lvwof")
hp_max = 100.0
attack = 10.0
sub_character_auto_create = false

@ -49,7 +49,7 @@ tracks/3/path = NodePath("Status:speed_up_rate")
tracks/3/interp = 1
tracks/3/loop_wrap = true
tracks/3/keys = {
"times": PackedFloat32Array(0.2, 0.7),
"times": PackedFloat32Array(0.1, 0.7),
"transitions": PackedFloat32Array(1, 1),
"update": 1,
"values": [-0.5, -1.0]
@ -61,7 +61,7 @@ tracks/4/path = NodePath("Status:skill_move_speed")
tracks/4/interp = 1
tracks/4/loop_wrap = true
tracks/4/keys = {
"times": PackedFloat32Array(0, 0.2, 0.4),
"times": PackedFloat32Array(0, 0.1, 0.4),
"transitions": PackedFloat32Array(1, 1, 1),
"update": 1,
"values": [0.0, 7.0, 0.0]
@ -90,10 +90,10 @@ tracks/6/path = NodePath("Status:skill_float_speed")
tracks/6/interp = 1
tracks/6/loop_wrap = true
tracks/6/keys = {
"times": PackedFloat32Array(0, 0.2, 0.2001, 0.4),
"transitions": PackedFloat32Array(1, 1, 1, 1),
"times": PackedFloat32Array(0, 0.1, 0.4),
"transitions": PackedFloat32Array(1, 1, 1),
"update": 1,
"values": [0.1, -4.0, -7.0, 0.0]
"values": [0.1, -7.0, 0.0]
}
tracks/7/type = "method"
tracks/7/imported = false
@ -133,11 +133,14 @@ tracks/9/path = NodePath("Battle")
tracks/9/interp = 1
tracks/9/loop_wrap = true
tracks/9/keys = {
"times": PackedFloat32Array(0.4),
"transitions": PackedFloat32Array(1),
"times": PackedFloat32Array(0, 0.4),
"transitions": PackedFloat32Array(1, 1),
"values": [{
"args": [],
"method": &"stop"
}, {
"args": [],
"method": &"stop"
}]
}
tracks/10/type = "value"

@ -14,7 +14,7 @@
[node name="BeehaveTree" type="Node" node_paths=PackedStringArray("blackboard")]
script = ExtResource("1_r673b")
blackboard = NodePath("@Node@19487")
blackboard = NodePath("@Node@19481")
[node name="SelectorComposite" type="Node" parent="."]
script = ExtResource("2_5ltau")

@ -11,7 +11,7 @@
[node name="BeehaveTree" type="Node" node_paths=PackedStringArray("blackboard")]
script = ExtResource("1_bbyao")
blackboard = NodePath("@Node@88159")
blackboard = NodePath("@Node@19482")
[node name="SequenceComposite" type="Node" parent="."]
script = ExtResource("2_04nig")

@ -105,7 +105,6 @@ lod_bias = 0.001
gi_mode = 0
pixel_size = 0.02
double_sided = false
alpha_cut = 2
texture_filter = 0
sprite_frames = ExtResource("6_whjpk")
animation = &"basic_air_flash"

@ -0,0 +1,16 @@
[gd_scene load_steps=4 format=3 uid="uid://bnb3oaiijehrn"]
[ext_resource type="PackedScene" uid="uid://8rcvw1vnjcf7" path="res://scene/character/character.tscn" id="1_gvr0p"]
[ext_resource type="Script" path="res://script/character/ai/soul_ai.gd" id="2_exf18"]
[sub_resource type="Curve" id="Curve_j362u"]
min_value = -1.0
max_value = 4.0
_data = [Vector2(0, -1), 0.0, 0.0, 0, 0, Vector2(1, 4), 0.0, 0.0, 0, 0]
point_count = 2
[node name="Character" instance=ExtResource("1_gvr0p")]
[node name="SoulAI" type="Node3D" parent="." index="11"]
script = ExtResource("2_exf18")
follow_speed_curve = SubResource("Curve_j362u")

@ -0,0 +1,10 @@
[gd_scene load_steps=2 format=3 uid="uid://dj2bag42rmhvq"]
[ext_resource type="Texture2D" uid="uid://xtipei54v35i" path="res://render/texture/decal/readiness_monster.png" id="1_hfi0a"]
[node name="ReadinessHero" type="Decal"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.358925, 0)
size = Vector3(1, 1, 1)
texture_albedo = ExtResource("1_hfi0a")
normal_fade = 0.1
cull_mask = 1

@ -19,8 +19,8 @@
[ext_resource type="Script" path="res://script/manager/ai_manager.gd" id="11_fm4d1"]
[ext_resource type="Script" path="res://script/manager/input_manager.gd" id="12_vfqm4"]
[ext_resource type="Script" path="res://script/character/status.gd" id="18_nr8sb"]
[ext_resource type="SpriteFrames" uid="uid://ce83cuqwgwwi4" path="res://resource/animation/character/hero01_long_attack.aseprite" id="20_0ashe"]
[ext_resource type="SpriteFrames" uid="uid://2cb8lknel0ih" path="res://resource/animation/character/basic_move.aseprite" id="20_4ni1a"]
[ext_resource type="SpriteFrames" uid="uid://cajgs8smbkjan" path="res://resource/animation/character/hero01_fist_skill01.aseprite" id="20_uwqv0"]
[ext_resource type="AnimationLibrary" uid="uid://croik07a1qko5" path="res://resource/skill_animation_library/animation_library.tres" id="22_qyapv"]
[ext_resource type="Script" path="res://script/character/skill.gd" id="23_783eu"]
[ext_resource type="Script" path="res://script/character/move.gd" id="25_d520l"]
@ -166,7 +166,8 @@ projection = 1
current = true
size = 7.2
frustum_offset = Vector2(2, 0)
far = 100.0
near = 0.1
far = 20.0
script = ExtResource("4_yqiun")
global_effect_curve = SubResource("Curve_f8hvs")
@ -207,7 +208,6 @@ script = ExtResource("5_n3qhi")
unique_name_in_owner = true
script = ExtResource("18_nr8sb")
speed_up_rate = -1.0
skill_move_speed = 2.0
[node name="View" type="AnimatedSprite3D" parent="EditorTool/Character"]
unique_name_in_owner = true
@ -219,8 +219,9 @@ pixel_size = 0.02
double_sided = false
alpha_cut = 2
texture_filter = 0
sprite_frames = ExtResource("20_0ashe")
animation = &"long_attack01"
sprite_frames = ExtResource("20_uwqv0")
animation = &"fist_air_skill01"
frame = 8
[node name="Throw" type="AnimatedSprite3D" parent="EditorTool/Character"]
unique_name_in_owner = true

@ -3,7 +3,7 @@ extends Node3D
enum EActionType {Pressed, Released}
enum EDamageType {Sharp, Blunt, Ground}
enum ECharacterType {Player, Monster, Bullet}
enum ECharacterType {Player, Monster, Bullet, Soul}
enum ETeam {Player, Monster}
enum EStance {
GroundIdle, Ground1, Ground2, Ground3, Ground4, Ground5, Ground6, Ground7,

@ -0,0 +1,47 @@
extends Node3D
class_name SoulAI
@export var follow_speed_curve: Curve
@export var follow_dist_max: int = 5
@onready var character: Character = (get_owner() as Character)
@onready var status: Status = (%Status as Status)
class SkillOrder:
var skill_name: String
var cast_dir: Vector2
var target: int
var skill_order_list: Array[SkillOrder] = []
var owner_character: Character
func _process(delta) -> void:
owner_character = Global.character_mgr.get_character(status.owner_id)
if not owner_character:
Global.character_mgr.destroy_character(character.id())
return
update_skill()
update_move()
func update_skill() -> void:
pass
func update_move() -> void:
if status.is_skill_running:
return
var owner_pos: Vector3 = owner_character.pos()
var radius_add: float = owner_character.radius() + character.radius()
var target_pos: Vector3 = owner_pos + Vector3(-1 if owner_character.is_right() else 1, 0, 0) * radius_add * 1.1
var dir: Vector3 = target_pos - character.pos()
var dir_2d: Vector2 = Vector2(dir.x, dir.z)
var dist: float = dir_2d.length()
if dist > follow_dist_max:
character.set_pos(target_pos)
return
var dist_rate = clamp(dist / follow_dist_max, 0, 1)
status.speed_up_rate = follow_speed_curve.sample(dist_rate)
character.move_to(dir_2d)

@ -51,7 +51,7 @@ func set_body_scale(cfg: CharacterCfg) -> void:
collision.scale = body_scale
pushbox.position = Vector3(0, half_height, 0)
pushbox.scale = body_scale
status.basic_offset = Vector3(0, center_height, 0)
status.basic_offset = Vector3(0, center_height, randf()*0.001)
status.ui_offset = Vector3(0, height*1.25, 0)
status.ui_center_offset = Vector3(0, center_height, 0)
status.radius = width
@ -118,6 +118,9 @@ func ui_pos_center()->Vector3: return position + status.ui_center_offset
func target()->int: return status.target
func is_right()->bool: return status.is_right
#==interface==
func get_status(status_name: String) -> Variant: return status.get_status(status_name)

@ -6,6 +6,7 @@ class_name Effect
@onready var readiness_hero: PackedScene = preload("res://scene/effect/readiness/readiness_hero.tscn")
@onready var readiness_monster: PackedScene = preload("res://scene/effect/readiness/readiness_monster.tscn")
@onready var readiness_bullet: PackedScene = preload("res://scene/effect/readiness/readiness_bullet.tscn")
@onready var readiness_soul: PackedScene = preload("res://scene/effect/readiness/readiness_soul.tscn")
@onready var character: Character = (get_owner() as Character)
@onready var view: View = (%View as View)
@onready var status: Status = (%Status as Status)
@ -29,6 +30,8 @@ func init(type: Enum.ECharacterType):
Enum.ECharacterType.Player: rediness = readiness_hero.instantiate()
Enum.ECharacterType.Monster: rediness = readiness_monster.instantiate()
Enum.ECharacterType.Bullet: rediness = readiness_bullet.instantiate()
Enum.ECharacterType.Soul: rediness = readiness_soul.instantiate()
_: pass
if rediness:
add_child(rediness)
@ -40,7 +43,9 @@ func set_body_scale(body_scale: Vector3):
rediness.position = Vector3.DOWN * 4
func _process(delta):
func _process(delta) -> void:
if not rediness:
return
#指针方向
if status.move_dir:
var angle: float = status.move_dir.angle_to(Vector2.RIGHT)

@ -162,7 +162,7 @@ func update_flip():
func update_view():
position = status.basic_offset + status.shake_offset
global_position = Util.snap_vector3(global_position)
# global_position = Util.snap_vector3(global_position)
func _on_animation_finished():

@ -22,6 +22,7 @@ class_name CharacterCfg
@export var attack2: AttackCfg
@export var attack2_box: AttackBoxCfg
@export var sub_character: CharacterCfg
@export var sub_character_auto_create: bool
var core_cfg_list: Array[CoreCfg]

@ -32,6 +32,7 @@ func create_character(cfg: CharacterCfg, team: Enum.ETeam, pos: Vector3, dir: Ve
Enum.ECharacterType.Player: characterNode = ResourceManager.scene_player.instantiate()
Enum.ECharacterType.Monster: characterNode = ResourceManager.scene_monster.instantiate()
Enum.ECharacterType.Bullet: characterNode = ResourceManager.scene_bullet.instantiate()
Enum.ECharacterType.Soul: characterNode = ResourceManager.scene_soul.instantiate()
_: return null
add_child(characterNode)
characterNode.name = cfg.name
@ -46,6 +47,9 @@ func create_character(cfg: CharacterCfg, team: Enum.ETeam, pos: Vector3, dir: Ve
player_id = character_idx
character.init_after()
character.move_to(dir)
if cfg.sub_character and cfg.sub_character_auto_create:
create_character(cfg.sub_character, team, pos, dir, character_idx )
return character

@ -1,22 +1,23 @@
extends Node3D
#==scene==
var scene_character: PackedScene = load("res://scene/character/character.tscn")
var scene_player: PackedScene = load("res://scene/character/player.tscn")
var scene_monster: PackedScene = load("res://scene/character/monster.tscn")
var scene_bullet: PackedScene = load("res://scene/character/bullet.tscn")
var scene_character: PackedScene = load("res://scene/character/character.tscn")
var scene_player: PackedScene = load("res://scene/character/player.tscn")
var scene_monster: PackedScene = load("res://scene/character/monster.tscn")
var scene_bullet: PackedScene = load("res://scene/character/bullet.tscn")
var scene_soul: PackedScene = load("res://scene/character/soul.tscn")
#==material==
var material_character: Material = load("res://render/material/character.tres") as Material
var material_character_sub: Material = load("res://render/material/character_sub.tres") as Material
#==effect==
var particle_hit_sharp: PackedScene = load("res://scene/effect/particle/particle_hit_sharp.tscn")
var particle_hit_blunt: PackedScene = load("res://scene/effect/particle/particle_hit_blunt.tscn")
var particle_hit_ground: PackedScene = load("res://scene/effect/particle/particle_hit_ground.tscn")
var particle_hit_sharp: PackedScene = load("res://scene/effect/particle/particle_hit_sharp.tscn")
var particle_hit_blunt: PackedScene = load("res://scene/effect/particle/particle_hit_blunt.tscn")
var particle_hit_ground: PackedScene = load("res://scene/effect/particle/particle_hit_ground.tscn")
var particle_debug_box: PackedScene = load("res://scene/effect/particle/particle_debug_box.tscn")
var particle_debug_cylinder: PackedScene = load("res://scene/effect/particle/particle_debug_cylinder.tscn")
var particle_debug_cylinder: PackedScene = load("res://scene/effect/particle/particle_debug_cylinder.tscn")
#==config==
#character
var cfg_character_player: CharacterCfg = load("res://config/character/hero01.tres") as CharacterCfg
var cfg_character_player: CharacterCfg = load("res://config/character/hero01.tres") as CharacterCfg
var cfg_character_monster_test1: CharacterCfg = load("res://config/character/monster01.tres") as CharacterCfg
var cfg_character_monster_test2: CharacterCfg = load("res://config/character/monster02.tres") as CharacterCfg
var cfg_character_monster_test3: CharacterCfg = load("res://config/character/monster03.tres") as CharacterCfg

Loading…
Cancel
Save