diff --git a/config/attack/rebound.tres b/config/attack/rebound.tres new file mode 100644 index 0000000..9354f6d --- /dev/null +++ b/config/attack/rebound.tres @@ -0,0 +1,14 @@ +[gd_resource type="Resource" script_class="AttackCfg" load_steps=2 format=3 uid="uid://bwbr746sj06er"] + +[ext_resource type="Script" path="res://script/config/attack_cfg.gd" id="1_2fwsa"] + +[resource] +script = ExtResource("1_2fwsa") +damage_rate = 1.0 +break_level = 0 +hit_back_speed = 4.0 +hit_back_duration = 0.05 +hit_up_speed = 4.0 +hit_up_duration = 0.05 +pause_time = 0.1 +is_floating = true diff --git a/config/attack/rebound_heavy.tres b/config/attack/rebound_heavy.tres new file mode 100644 index 0000000..cf2e1d6 --- /dev/null +++ b/config/attack/rebound_heavy.tres @@ -0,0 +1,14 @@ +[gd_resource type="Resource" script_class="AttackCfg" load_steps=2 format=3 uid="uid://r7fg0y1bf815"] + +[ext_resource type="Script" path="res://script/config/attack_cfg.gd" id="1_csh3t"] + +[resource] +script = ExtResource("1_csh3t") +damage_rate = 1.0 +break_level = 0 +hit_back_speed = 4.0 +hit_back_duration = 0.05 +hit_up_speed = 4.0 +hit_up_duration = 0.05 +pause_time = 0.1 +is_floating = true diff --git a/project.godot b/project.godot index 947c7c8..aa42939 100644 --- a/project.godot +++ b/project.godot @@ -33,6 +33,7 @@ aseprite_executable_path="D:/Steam/steamapps/common/Aseprite/Aseprite.exe" InputManager="*res://script/manager/input_manager.gd" SignalManager="*res://script/manager/signal_manager.gd" +ResourceManager="*res://script/manager/resource_manager.gd" Setting="*res://script/_global/setting.gd" Enum="*res://script/_global/enum.gd" Util="*res://script/_global/util.gd" diff --git a/render/material/character.tres b/render/material/character.tres index bb9262d..32f75d2 100644 --- a/render/material/character.tres +++ b/render/material/character.tres @@ -6,3 +6,5 @@ render_priority = 0 shader = ExtResource("1_ja5hr") shader_parameter/flash_white = null +shader_parameter/deformation_dir = Vector2(1, 0) +shader_parameter/deformation_rate = 0.0 diff --git a/scene/character/player.tscn b/scene/character/player.tscn index 42b6c03..2382de3 100644 --- a/scene/character/player.tscn +++ b/scene/character/player.tscn @@ -6,10 +6,10 @@ [node name="Character" instance=ExtResource("1_pot50")] -[node name="Combo" type="Node3D" parent="." index="7"] -unique_name_in_owner = true -script = ExtResource("2_i44w8") - [node name="PlayerInput" type="Node3D" parent="." index="8"] unique_name_in_owner = true script = ExtResource("3_n07go") + +[node name="Combo" type="Node3D" parent="." index="9"] +unique_name_in_owner = true +script = ExtResource("2_i44w8") diff --git a/scene/launcher.tscn b/scene/launcher.tscn index f7895d2..eb9c322 100644 --- a/scene/launcher.tscn +++ b/scene/launcher.tscn @@ -4,8 +4,8 @@ [ext_resource type="ArrayMesh" uid="uid://cap7t5iwpjpi2" path="res://resource/level/levelground0000.vox" id="1_u51ir"] [ext_resource type="Resource" uid="uid://bjvrih37ni5nx" path="res://config/character/hero01.tres" id="2_m8pa4"] [ext_resource type="Resource" uid="uid://dmfh54jffhx28" path="res://config/character/monster02.tres" id="3_t5dvy"] -[ext_resource type="Script" path="res://script/manager/CameraManager.gd" id="4_22ccm"] [ext_resource type="Script" path="res://script/manager/character_manager.gd" id="4_oonkb"] +[ext_resource type="Script" path="res://script/manager/camera_manager.gd" id="4_yqiun"] [ext_resource type="Script" path="res://script/editor_tool/editor_tool.gd" id="5_n3qhi"] [ext_resource type="PackedScene" uid="uid://cc525u8auypjf" path="res://scene/ui/profile_screen.tscn" id="6_u1fxn"] [ext_resource type="PackedScene" uid="uid://126wph4owvoy" path="res://scene/ui/hud_screen.tscn" id="7_gx646"] @@ -29,7 +29,7 @@ current = true size = 5.0 frustum_offset = Vector2(2, 0) far = 20.0 -script = ExtResource("4_22ccm") +script = ExtResource("4_yqiun") [node name="LevelManager" type="Node3D" parent="GameManager"] diff --git a/script/_global/global.gd b/script/_global/global.gd index babd6db..b186aff 100644 --- a/script/_global/global.gd +++ b/script/_global/global.gd @@ -1,3 +1,4 @@ extends Node3D -var camera:CameraManager +var camera_mgr:CameraManager +var character_mgr:CharacterManager diff --git a/script/character/battle.gd b/script/character/battle.gd index b71d733..8fa7521 100644 --- a/script/character/battle.gd +++ b/script/character/battle.gd @@ -23,7 +23,7 @@ func attack(): if attack_index >= len(attack_list): attack_index = len(attack_list) - 1 var attack = attack_list[attack_index] - var enemy_list = character.manager().get_enemy_list(character.id()) + var enemy_list = Global.character_mgr.get_enemy_list(character.id()) for enemy in enemy_list: var pos_dir = enemy.pos2D()-character.pos2D() var distance = pos_dir.length() @@ -36,14 +36,22 @@ func attack(): hit_info.attack = attack hit_info_list.append(hit_info) +func add_attack(from:int,dir:Vector3,attack:AttackCfg): + var hit_info = HitInfo.new() + hit_info.from = from + hit_info.to = character.id() + hit_info.dir = dir + hit_info.attack = attack + hit_info_list.append(hit_info) + func _process(delta): for hit_info in hit_info_list: settle(hit_info) hit_info_list.clear() func settle(hit_info:HitInfo): - var character_from = character.manager().get_character(hit_info.from) as Character - var character_to = character.manager().get_character(hit_info.to) as Character + var character_from = Global.character_mgr.get_character(hit_info.from) as Character + var character_to = Global.character_mgr.get_character(hit_info.to) as Character if !character_from or !character_to: return @@ -82,5 +90,5 @@ func settle(hit_info:HitInfo): character_to.add_buff("deformation",0.1) #卡帧 - character_from.add_buff("pause",0.1) - character_to.add_buff("pause",0.1) + character_from.add_buff("pause",attack.pause_time) + character_to.add_buff("pause",attack.pause_time) diff --git a/script/character/buff.gd b/script/character/buff.gd index 5ae13d1..9ad1f84 100644 --- a/script/character/buff.gd +++ b/script/character/buff.gd @@ -63,8 +63,11 @@ func on_start_jumping(rate):status.is_jumping = true func on_end_jumping(rate):status.is_jumping = false func on_start_floating(rate):status.is_floating = true func on_update_floating(rate): - if status.is_on_floor: - #反弹 + if not status.is_on_floor: + return + if has_buff("hit_down"): + pass + else: status.is_floating=false #战斗状态 diff --git a/script/character/character.gd b/script/character/character.gd index a49f6cd..c11566b 100644 --- a/script/character/character.gd +++ b/script/character/character.gd @@ -6,18 +6,14 @@ class_name Character @onready var view = (%View as View) @onready var buff = (%Buff as Buff) @onready var skill = (%Skill as Skill) +@onready var battle = (%Battle as Battle) -var character_manager : CharacterManager - -func init(mgr:CharacterManager,id:int,cfg:CharacterCfg,team:Enum.ETeam): - character_manager = mgr +func init(id:int,cfg:CharacterCfg,team:Enum.ETeam): status.id = id status.team = team status.cfg = cfg - #view var half_height = Setting.pixel_size * Setting.sprite_scale * cfg.sprite_harf_height var width = Setting.pixel_size * Setting.sprite_scale * cfg.sprite_width - collision.position = Vector3(0,half_height,0) collision.scale = Vector3(width,half_height*2,width) status.basic_offset = Vector3(0,half_height,0) @@ -26,7 +22,6 @@ func init(mgr:CharacterManager,id:int,cfg:CharacterCfg,team:Enum.ETeam): skill.init() func init_after(): - #battle var cfg = status.cfg set_status("hp",cfg.hp_max) set_status("hp_max",cfg.hp_max) @@ -37,7 +32,6 @@ func set_material(material:ShaderMaterial): view.material_override = material #==getter== -func manager()->CharacterManager:return character_manager func id()->int:return status.id func team()->Enum.ETeam:return status.team func pos2D()->Vector2:return Vector2(position.x,position.z) @@ -56,3 +50,4 @@ func set_hit_move(hit_back_dir:Vector2,hit_back_speed:float,hit_up_speed:float): status.hit_up_speed = hit_up_speed func cancel_skill():skill.cancel_skill() func set_view_trigger(trigger_name:String):status.set("trigger_%s"%trigger_name,true) +func add_attack(from:int,dir:Vector3,attack:AttackCfg):battle.add_attack(from,dir,attack) diff --git a/script/manager/CameraManager.gd b/script/manager/camera_manager.gd similarity index 95% rename from script/manager/CameraManager.gd rename to script/manager/camera_manager.gd index fb4bd2c..ca7ef83 100644 --- a/script/manager/CameraManager.gd +++ b/script/manager/camera_manager.gd @@ -5,7 +5,7 @@ var target:int var offset:Vector3 func _ready(): - Global.camera = self + Global.camera_mgr = self SignalManager.character_create.connect(on_character_create) SignalManager.character_pos_changed.connect(on_character_pos_changed) SignalManager.character_destroy.connect(on_character_destroy) diff --git a/script/manager/character_manager.gd b/script/manager/character_manager.gd index ad35dcc..c7eb613 100644 --- a/script/manager/character_manager.gd +++ b/script/manager/character_manager.gd @@ -1,27 +1,26 @@ extends Node3D class_name CharacterManager -var scene_player = preload("res://scene/character/player.tscn") -var scene_monster = preload("res://scene/character/monster.tscn") -var character_material = preload("res://render/material/character.tres") - var character_map = {} var character_idx : int = 0 +func _ready(): + Global.character_mgr = self + func create_character(cfg:CharacterCfg,team:Enum.ETeam,pos:Vector3): var characterNode:Node match cfg.type: Enum.ECharacterType.Player: - characterNode = scene_player.instantiate() + characterNode = ResourceManager.scene_player.instantiate() Enum.ECharacterType.Monster: - characterNode = scene_monster.instantiate() + characterNode = ResourceManager.scene_monster.instantiate() add_child(characterNode) characterNode.name = cfg.name var character = characterNode as Character character_idx += 1 character_map[character_idx]=character - character.init(self,character_idx,cfg,team) - character.set_material(character_material.duplicate()) + character.init(character_idx,cfg,team) + character.set_material(ResourceManager.character_material.duplicate()) character.set_pos(pos) SignalManager.character_create.emit(character_idx,team,pos) character.init_after() diff --git a/script/manager/resource_manager.gd b/script/manager/resource_manager.gd new file mode 100644 index 0000000..400dac1 --- /dev/null +++ b/script/manager/resource_manager.gd @@ -0,0 +1,8 @@ +extends Node3D + +#scene +var scene_player = load("res://scene/character/player.tscn") +var scene_monster = load("res://scene/character/monster.tscn") + +#material +var character_material = load("res://render/material/character.tres") diff --git a/script/ui/headbar/headbar_page.gd b/script/ui/headbar/headbar_page.gd index e6a1a63..da02615 100644 --- a/script/ui/headbar/headbar_page.gd +++ b/script/ui/headbar/headbar_page.gd @@ -1,7 +1,7 @@ extends Control @onready var headbar_scene = preload("res://scene/ui/item/headbar.tscn") -@onready var camera: CameraManager = Global.camera +@onready var camera: CameraManager = Global.camera_mgr class HeadbarMeta: var pos:Vector3