From 7ad8f6ee3c0644d7910de05278fc637a7b5a9b51 Mon Sep 17 00:00:00 2001 From: chendian <-> Date: Mon, 30 Oct 2023 03:42:29 +0800 Subject: [PATCH] mp --- config/character/hero01.tres | 10 ++-- config/character/monster01.tres | 8 +-- config/character/monster02.tres | 8 +-- config/character_mp/normal.tres | 12 +++++ config/character_mp/player.tres | 12 +++++ scene/ui/item/headbar.tscn | 53 +++++++++++++++++-- .../action_move_to_target.gd | 1 - script/character/battle.gd | 21 +++++++- script/character/buff.gd | 15 ++++++ script/character/character.gd | 5 ++ script/character/status.gd | 4 ++ script/config/character_cfg.gd | 1 + script/config/mp_cfg.gd | 10 ++++ script/ui/headbar/headbar.gd | 26 +++++---- script/ui/headbar/headbar_page.gd | 2 +- 15 files changed, 162 insertions(+), 26 deletions(-) create mode 100644 config/character_mp/normal.tres create mode 100644 config/character_mp/player.tres create mode 100644 script/config/mp_cfg.gd diff --git a/config/character/hero01.tres b/config/character/hero01.tres index 2623632..37db938 100644 --- a/config/character/hero01.tres +++ b/config/character/hero01.tres @@ -1,20 +1,22 @@ -[gd_resource type="Resource" script_class="CharacterCfg" load_steps=6 format=3 uid="uid://bjvrih37ni5nx"] +[gd_resource type="Resource" script_class="CharacterCfg" load_steps=7 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"] [ext_resource type="SpriteFrames" uid="uid://cwe8setoi6bd" path="res://resource/animation/character/hero01_move.aseprite" id="2_cssb0"] +[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="5_kn3ip"] +[ext_resource type="Resource" uid="uid://cac6mk6g078vn" path="res://config/character_stun/normal.tres" id="6_i7bnp"] [resource] script = ExtResource("1_2054l") name = "hero01" -type = 0 +type = null sprite_frames = ExtResource("2_cssb0") sprite_harf_height = 26 sprite_width = 16 move = ExtResource("1_ebj0w") shield = ExtResource("3_5l0vx") -stun = ExtResource("5_kn3ip") +stun = ExtResource("6_i7bnp") +mp = ExtResource("2_wo8op") hp_max = 100.0 attack = 10.0 diff --git a/config/character/monster01.tres b/config/character/monster01.tres index 9aa2724..463fe62 100644 --- a/config/character/monster01.tres +++ b/config/character/monster01.tres @@ -1,10 +1,11 @@ -[gd_resource type="Resource" script_class="CharacterCfg" load_steps=6 format=3 uid="uid://b1gf2jimihmc7"] +[gd_resource type="Resource" script_class="CharacterCfg" load_steps=7 format=3 uid="uid://b1gf2jimihmc7"] [ext_resource type="Script" path="res://script/config/character_cfg.gd" id="1_4orbu"] [ext_resource type="Resource" uid="uid://dx54fjf5t0uu8" path="res://config/character_move/normal.tres" id="1_b0lkj"] +[ext_resource type="Resource" uid="uid://dpajmgrlaytah" path="res://config/character_mp/normal.tres" id="2_pl54c"] [ext_resource type="SpriteFrames" uid="uid://dkljs5h8gj5l" path="res://resource/animation/character/monster01_move.aseprite" id="2_su3hg"] [ext_resource type="Resource" uid="uid://dlaekoamystx3" path="res://config/character_shield/normal.tres" id="3_3nfrx"] -[ext_resource type="Resource" uid="uid://cac6mk6g078vn" path="res://config/character_stun/normal.tres" id="5_7nk8h"] +[ext_resource type="Resource" uid="uid://cac6mk6g078vn" path="res://config/character_stun/normal.tres" id="6_25uqm"] [resource] script = ExtResource("1_4orbu") @@ -15,6 +16,7 @@ sprite_harf_height = 10 sprite_width = 16 move = ExtResource("1_b0lkj") shield = ExtResource("3_3nfrx") -stun = ExtResource("5_7nk8h") +stun = ExtResource("6_25uqm") +mp = ExtResource("2_pl54c") hp_max = 200.0 attack = 10.0 diff --git a/config/character/monster02.tres b/config/character/monster02.tres index 9c82e41..e6931bd 100644 --- a/config/character/monster02.tres +++ b/config/character/monster02.tres @@ -1,10 +1,11 @@ -[gd_resource type="Resource" script_class="CharacterCfg" load_steps=6 format=3 uid="uid://dmfh54jffhx28"] +[gd_resource type="Resource" script_class="CharacterCfg" load_steps=7 format=3 uid="uid://dmfh54jffhx28"] [ext_resource type="Resource" uid="uid://dx54fjf5t0uu8" path="res://config/character_move/normal.tres" id="1_hjl2t"] [ext_resource type="Script" path="res://script/config/character_cfg.gd" id="1_wkjce"] +[ext_resource type="Resource" uid="uid://dpajmgrlaytah" path="res://config/character_mp/normal.tres" id="2_gly3h"] [ext_resource type="SpriteFrames" uid="uid://crdd52skym3ir" path="res://resource/animation/character/monster02_move.aseprite" id="2_h60bf"] [ext_resource type="Resource" uid="uid://dlaekoamystx3" path="res://config/character_shield/normal.tres" id="3_5w356"] -[ext_resource type="Resource" uid="uid://cac6mk6g078vn" path="res://config/character_stun/normal.tres" id="5_gyhft"] +[ext_resource type="Resource" uid="uid://cac6mk6g078vn" path="res://config/character_stun/normal.tres" id="6_vlmkd"] [resource] script = ExtResource("1_wkjce") @@ -15,6 +16,7 @@ sprite_harf_height = 26 sprite_width = 16 move = ExtResource("1_hjl2t") shield = ExtResource("3_5w356") -stun = ExtResource("5_gyhft") +stun = ExtResource("6_vlmkd") +mp = ExtResource("2_gly3h") hp_max = 100.0 attack = 10.0 diff --git a/config/character_mp/normal.tres b/config/character_mp/normal.tres new file mode 100644 index 0000000..adb2b8e --- /dev/null +++ b/config/character_mp/normal.tres @@ -0,0 +1,12 @@ +[gd_resource type="Resource" script_class="MpCfg" load_steps=2 format=3 uid="uid://dpajmgrlaytah"] + +[ext_resource type="Script" path="res://script/config/mp_cfg.gd" id="1_sfq22"] + +[resource] +script = ExtResource("1_sfq22") +mp_max = 5 +mp_sub_max = 100.0 +recover_speed = 10.0 +recover_cd = 2.0 +add_rate_attack = 1.0 +add_rate_hit = 1.0 diff --git a/config/character_mp/player.tres b/config/character_mp/player.tres new file mode 100644 index 0000000..196a1cc --- /dev/null +++ b/config/character_mp/player.tres @@ -0,0 +1,12 @@ +[gd_resource type="Resource" script_class="MpCfg" load_steps=2 format=3 uid="uid://815to6lq2qfs"] + +[ext_resource type="Script" path="res://script/config/mp_cfg.gd" id="1_1adyr"] + +[resource] +script = ExtResource("1_1adyr") +mp_max = 5 +mp_sub_max = 100.0 +recover_speed = -10.0 +recover_cd = 2.0 +add_rate_attack = 1.0 +add_rate_hit = 1.0 diff --git a/scene/ui/item/headbar.tscn b/scene/ui/item/headbar.tscn index b60b66c..b9b1dae 100644 --- a/scene/ui/item/headbar.tscn +++ b/scene/ui/item/headbar.tscn @@ -67,9 +67,56 @@ anchor_left = 0.5 anchor_top = 0.5 anchor_right = 0.5 anchor_bottom = 0.5 -offset_left = -32.0 +offset_left = 40.0 +offset_top = 8.0 +offset_right = 104.0 +offset_bottom = 24.0 +grow_horizontal = 2 +grow_vertical = 2 +scale = Vector2(1, 0.439999) +value = 50.0 +stretch_margin_left = 10 +stretch_margin_top = 10 +stretch_margin_right = 10 +stretch_margin_bottom = 10 +texture_under = ExtResource("2_g5t31") +texture_progress = ExtResource("3_vh1p5") +tint_progress = Color(0.866667, 0.933333, 0.105882, 1) + +[node name="MpSubBar" type="TextureProgressBar" parent="."] +unique_name_in_owner = true +layout_mode = 1 +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +offset_left = 40.0 +offset_top = 24.0 +offset_right = 104.0 +offset_bottom = 40.0 +grow_horizontal = 2 +grow_vertical = 2 +scale = Vector2(1, 0.439999) +value = 50.0 +stretch_margin_left = 10 +stretch_margin_top = 10 +stretch_margin_right = 10 +stretch_margin_bottom = 10 +texture_under = ExtResource("2_g5t31") +texture_progress = ExtResource("3_vh1p5") + +[node name="MpBar" type="TextureProgressBar" parent="."] +unique_name_in_owner = true +layout_mode = 1 +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +offset_left = 40.0 offset_top = 16.0 -offset_right = 32.0 +offset_right = 104.0 offset_bottom = 32.0 grow_horizontal = 2 grow_vertical = 2 @@ -81,4 +128,4 @@ stretch_margin_right = 10 stretch_margin_bottom = 10 texture_under = ExtResource("2_g5t31") texture_progress = ExtResource("3_vh1p5") -tint_progress = Color(0, 1, 1, 1) +tint_progress = Color(0.0941176, 1, 0.992157, 1) diff --git a/script/ai/action_with_target/action_move_to_target.gd b/script/ai/action_with_target/action_move_to_target.gd index d46b5d3..3cfc556 100644 --- a/script/ai/action_with_target/action_move_to_target.gd +++ b/script/ai/action_with_target/action_move_to_target.gd @@ -6,7 +6,6 @@ func execute(character: Character, target: Character) -> int: if dist < 1: character.move_stop() else: - print(dir) character.move_to(dir) return RUNNING return SUCCESS diff --git a/script/character/battle.gd b/script/character/battle.gd index 374258f..d3708d0 100644 --- a/script/character/battle.gd +++ b/script/character/battle.gd @@ -112,6 +112,10 @@ func settle(hit_info:HitInfo): character_to.remove_buff("stun_recover") character_to.add_buff("stun_recover_cd",cfg_to.stun.recover_cd) + #mp累加 + character_from.add_mp(damage * cfg_from.mp.add_rate_attack) + character_to.add_mp(damage * cfg_to.mp.add_rate_hit) + #硬直等级 var break_level_def = cfg_to.shield.break_level_on if has_shield else cfg_to.shield.break_level_off var break_level_sub = clampi(attack.break_level - break_level_def,0,3) @@ -171,4 +175,19 @@ func settle(hit_info:HitInfo): elif is_break_stun:character_to.show_hit_text("Stun") elif not is_break_skill:character_to.show_hit_text("Block") - +func add_mp(value:float): + var mp = character.get_status("mp") + var mp_max = character.get_status("mp_max") + var mp_sub = character.get_status("mp_sub") + var mp_sub_max = character.get_status("mp_sub_max") + value = min(mp_sub_max-mp_sub,value) + if value == mp_sub_max-mp_sub: + var mp_add = min(mp_max-mp,1) + if mp_add > 0: + character.set_status("mp",mp+mp_add) + character.set_status("mp_sub",0) + else: + character.set_status("mp_sub",mp_sub+value) + + character.remove_buff("mp_recover") + character.add_buff("mp_recover_cd",status.cfg.mp.recover_cd) diff --git a/script/character/buff.gd b/script/character/buff.gd index 87dc4ce..ec01902 100644 --- a/script/character/buff.gd +++ b/script/character/buff.gd @@ -94,6 +94,21 @@ func on_update_shield_recover(rate): remove_buff("shield_recover") character.set_status("shield",status.shield+shield_add) +func on_end_mp_recover_cd(rate):add_buff("mp_recover",-1) +func on_update_mp_recover(rate): + var mp_add = get_process_delta_time() * status.cfg.mp.recover_speed + if mp_add == 0: + remove_buff("mp_recover") + elif mp_add > 0: + mp_add = min(status.mp_max - status.mp,mp_add) + if mp_add == status.mp_max - status.mp: + remove_buff("mp_recover") + elif mp_add < 0: + mp_add = max(status.mp + mp_add,0) + if mp_add == 0: + remove_buff("mp_recover") + character.set_status("mp_sub",status.mp+mp_add) + func on_end_stun_recover_break_cd(rate):add_buff("stun_recover_break",-1) func on_update_stun_recover_break(rate): var stun_sub = get_process_delta_time() * status.cfg.stun.recover_break_speed diff --git a/script/character/character.gd b/script/character/character.gd index 41ec3c3..901547c 100644 --- a/script/character/character.gd +++ b/script/character/character.gd @@ -33,6 +33,10 @@ func init_after(): set_status("shield_max",cfg.shield.shield_max) set_status("stun",0) set_status("stun_max",cfg.stun.stun_max) + set_status("mp",0) + set_status("mp_max",cfg.mp.mp_max) + set_status("mp_sub",0) + set_status("mp_sub_max",cfg.mp.mp_sub_max) func set_material(material:ShaderMaterial): view.material_override = material @@ -61,3 +65,4 @@ func set_view_trigger(trigger_name:String):status.set("trigger_%s"%trigger_name, func add_attack(from:int,dir:Vector2,attack:AttackCfg):battle.add_attack(from,dir,attack) func show_hit_text(value:String):SignalManager.character_hit_text.emit(id(),value) func show_hit_damage(value:float):SignalManager.character_hit_damage.emit(id(),value) +func add_mp(value:float):battle.add_mp(value) diff --git a/script/character/status.gd b/script/character/status.gd index 77728c9..5a3842b 100644 --- a/script/character/status.gd +++ b/script/character/status.gd @@ -16,6 +16,10 @@ class_name Status @export var shield_max : float #护盾最大值 @export var stun : float #当前眩晕值 @export var stun_max : float #眩晕值最大值 +@export var mp : int #mp最大值 +@export var mp_max : int #mp最大值 +@export var mp_sub : float #次级mp +@export var mp_sub_max : float #次级mp最大值 @export var is_dead : bool #是否死亡 @export var target : int #目标角色 diff --git a/script/config/character_cfg.gd b/script/config/character_cfg.gd index 6545a65..6d4b2b7 100644 --- a/script/config/character_cfg.gd +++ b/script/config/character_cfg.gd @@ -15,6 +15,7 @@ class_name CharacterCfg @export var move : CharacterMoveCfg @export var shield : ShieldCfg @export var stun : StunCfg +@export var mp : MpCfg #战斗信息 @export var hp_max : float diff --git a/script/config/mp_cfg.gd b/script/config/mp_cfg.gd new file mode 100644 index 0000000..a09030c --- /dev/null +++ b/script/config/mp_cfg.gd @@ -0,0 +1,10 @@ +extends Resource + +class_name MpCfg + +@export var mp_max : int = 5 #mp最大值 +@export var mp_sub_max : float = 100 #次级mp最大值 +@export var recover_speed : float = 10 #次级mp恢复速度 +@export var recover_cd : float = 2 #次级mp恢复延迟 +@export var add_rate_attack : float = 1 #次级mp攻击时增加系数 +@export var add_rate_hit : float = 1 #次级mp受击时增加系数 diff --git a/script/ui/headbar/headbar.gd b/script/ui/headbar/headbar.gd index 4c613ad..7ea1e6e 100644 --- a/script/ui/headbar/headbar.gd +++ b/script/ui/headbar/headbar.gd @@ -3,24 +3,30 @@ class_name Headbar @onready var hit_text_scene = preload("res://scene/ui/item/hit_text.tscn") -@onready var hpbar = (%HpBar as TextureProgressBar) -@onready var shieldbar = (%ShieldBar as TextureProgressBar) -@onready var stunbar = (%StunBar as TextureProgressBar) +@onready var hp_bar = (%HpBar as TextureProgressBar) +@onready var shield_bar = (%ShieldBar as TextureProgressBar) +@onready var stun_bar = (%StunBar as TextureProgressBar) +@onready var mp_bar = (%MpBar as TextureProgressBar) +@onready var mp_sub_bar = (%MpSubBar as TextureProgressBar) var hit_text_damage_cache : HitText -func on_hp_changed(value):hpbar.value = value -func on_hp_max_changed(value):hpbar.max_value = value -func on_shield_changed(value):shieldbar.value = value -func on_shield_max_changed(value):shieldbar.max_value = value -func on_stun_changed(value):stunbar.value = value -func on_stun_max_changed(value):stunbar.max_value = value +func on_hp_changed(value):hp_bar.value = value +func on_hp_max_changed(value):hp_bar.max_value = value +func on_shield_changed(value):shield_bar.value = value +func on_shield_max_changed(value):shield_bar.max_value = value +func on_stun_changed(value):stun_bar.value = value +func on_stun_max_changed(value):stun_bar.max_value = value +func on_mp_changed(value):mp_bar.value = value +func on_mp_max_changed(value):mp_bar.max_value = value +func on_mp_sub_changed(value):mp_sub_bar.value = value +func on_mp_sub_max_changed(value):mp_sub_bar.max_value = value func on_hit_text(value:String): var hit_text = get_hit_text_object() hit_text.show_hit_text(value) -func on_hit_danage(value:float): +func on_hit_damage(value:float): var hit_text = hit_text_damage_cache if not hit_text or hit_text.is_close: hit_text_damage_cache = get_hit_text_object() diff --git a/script/ui/headbar/headbar_page.gd b/script/ui/headbar/headbar_page.gd index ebc73bc..1a4e48f 100644 --- a/script/ui/headbar/headbar_page.gd +++ b/script/ui/headbar/headbar_page.gd @@ -73,7 +73,7 @@ func on_character_hit_damage(id:int,value:float): return var headbar_meta = headbar_map[id] var headbar = headbar_meta.headbar as Headbar - headbar.on_hit_danage(value) + headbar.on_hit_damage(value) func on_character_die(id:int): if not id in headbar_map: