From 8885f58b838d29bc82b8d3013d379cb8e562fc0f Mon Sep 17 00:00:00 2001 From: chendian <-> Date: Thu, 19 Oct 2023 02:20:50 +0800 Subject: [PATCH] =?UTF-8?q?2.5d=E6=B8=B2=E6=9F=93/ui?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- render/material/character.tres | 8 ++++ {shader => render/shader}/character.gdshader | 6 ++- render/texture/explodeDecal.png | Bin 0 -> 13327 bytes render/texture/explodeDecal.png.import | 34 +++++++++++++++ render/texture/swordDecal.png | Bin 0 -> 4161 bytes render/texture/swordDecal.png.import | 34 +++++++++++++++ .../character/_design_hero01.png.import | 2 +- .../character/_design_hero01_flat.png.import | 2 +- .../character/_design_monster.png.import | 2 +- .../animation/character/basic_move.png.import | 8 ++-- .../character/boss01_attack.png.import | 2 +- .../character/boss01_move.png.import | 2 +- .../character/hero01_fist_attack.png.import | 2 +- .../character/hero01_fist_skill01.png.import | 2 +- .../character/hero01_long_attack.png.import | 2 +- .../character/hero01_long_skill02.png.import | 2 +- .../character/hero01_move.png.import | 17 ++++---- .../character/hero01_short_attack.png.import | 2 +- .../character/hero01_short_skill01.png.import | 2 +- .../character/monster01_attack.png.import | 2 +- .../character/monster01_move.png.import | 2 +- .../character/monster02_attack.png.import | 2 +- .../character/monster02_move.png.import | 8 ++-- .../character/monster03_attack.png.import | 2 +- .../character/monster03_move.png.import | 2 +- resource/ui/hud/headbar_hp.png | Bin 0 -> 193 bytes resource/ui/hud/headbar_hp.png.import | 34 +++++++++++++++ resource/ui/hud/headbar_hp_empty.png | Bin 0 -> 188 bytes resource/ui/hud/headbar_hp_empty.png.import | 34 +++++++++++++++ resource/ui/hud/shield_icon.png | Bin 0 -> 203 bytes resource/ui/hud/shield_icon.png.import | 34 +++++++++++++++ scene/character/character.tscn | 6 ++- scene/launcher.tscn | 18 +++++++- scene/ui/hud_screen.tscn | 39 ++++++++++++++++++ scene/ui/profile_screen.tscn | 20 +++++++++ script/character/battle.gd | 7 ++-- script/character/buff.gd | 33 +++++++++------ script/character/character.gd | 5 ++- script/character/status.gd | 1 + script/character/view.gd | 18 ++++++-- script/manager/character_manager.gd | 2 + script/ui/profile/fps.gd | 4 ++ 42 files changed, 345 insertions(+), 57 deletions(-) create mode 100644 render/material/character.tres rename {shader => render/shader}/character.gdshader (65%) create mode 100644 render/texture/explodeDecal.png create mode 100644 render/texture/explodeDecal.png.import create mode 100644 render/texture/swordDecal.png create mode 100644 render/texture/swordDecal.png.import create mode 100644 resource/ui/hud/headbar_hp.png create mode 100644 resource/ui/hud/headbar_hp.png.import create mode 100644 resource/ui/hud/headbar_hp_empty.png create mode 100644 resource/ui/hud/headbar_hp_empty.png.import create mode 100644 resource/ui/hud/shield_icon.png create mode 100644 resource/ui/hud/shield_icon.png.import create mode 100644 scene/ui/hud_screen.tscn create mode 100644 scene/ui/profile_screen.tscn create mode 100644 script/ui/profile/fps.gd diff --git a/render/material/character.tres b/render/material/character.tres new file mode 100644 index 0000000..bb9262d --- /dev/null +++ b/render/material/character.tres @@ -0,0 +1,8 @@ +[gd_resource type="ShaderMaterial" load_steps=2 format=3 uid="uid://c8r7kifl8faqr"] + +[ext_resource type="Shader" path="res://render/shader/character.gdshader" id="1_ja5hr"] + +[resource] +render_priority = 0 +shader = ExtResource("1_ja5hr") +shader_parameter/flash_white = null diff --git a/shader/character.gdshader b/render/shader/character.gdshader similarity index 65% rename from shader/character.gdshader rename to render/shader/character.gdshader index 6fc43fc..251a928 100644 --- a/shader/character.gdshader +++ b/render/shader/character.gdshader @@ -2,11 +2,13 @@ shader_type spatial; render_mode depth_prepass_alpha,unshaded; uniform sampler2D tex : source_color,filter_nearest; +uniform float flash_white; void fragment() { vec4 col = texture(tex, UV); - if(col.a<0.5){ - discard; + if(col.a<0.5){discard;} + if(flash_white>0.0){ + col.rgb = col.rgb * (flash_white + 1.0) * vec3(1,1,1); } ALBEDO = col.rgb; ALPHA = 1.0; diff --git a/render/texture/explodeDecal.png b/render/texture/explodeDecal.png new file mode 100644 index 0000000000000000000000000000000000000000..620fe95e4e17ded544f28f1d1141debcca1e09a8 GIT binary patch literal 13327 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
    0M#KmK8CoeW; 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 p4Tc3fS=cV*+7&+LFO6Yfn9`;dyV-Z~4WNS= buff_info.duration_max: trigger_buff_effect(buff_info,"end") @@ -36,7 +39,7 @@ func trigger_buff_effect(buff:BuffInfo,trigger_name:String): func has_buff(buff_name:String) -> bool: return buff_name in buff_map -func add_buff(buff_name:String,duration:float): +func add_buff(buff_name:String,duration:float,ignore_pause:bool=false): var buff : BuffInfo if buff_name in buff_map: buff = buff_map[buff_name] @@ -46,28 +49,34 @@ func add_buff(buff_name:String,duration:float): buff_map[buff_name] = buff buff.duration_max = duration buff.duration = 0 + buff.ignore_pause = ignore_pause trigger_buff_effect(buff,"start") func remove_buff(buff_name:String): buff_map.erase(buff_name) #==具体实现== +#位移 func on_end_hit_back(rate):status.hit_back_speed = 0 func on_end_hit_up(rate):status.hit_up_speed = 0 -func on_start_stagger(rate):status.is_stagger = true -func on_end_stagger(rate):status.is_stagger = false -func on_end_stun(rate):status.is_stun = false func on_start_jumping(rate):status.is_jumping = true func on_end_jumping(rate):status.is_jumping = false -func on_update_shake_x(rate): - var offset = sin(rate * PI * 4) - 0.5 - status.shake_offset = Vector3(offset*0.02,0,0); -func on_end_shake_x(rate):status.shake_offset = Vector3.ZERO -func on_start_pause(rate):status.is_pause = true -func on_end_pause(rate):status.is_pause = false func on_start_floating(rate):status.is_floating = true func on_update_floating(rate): if status.is_on_floor: #反弹 status.is_floating=false - + +#战斗状态 +func on_start_stagger(rate):status.is_stagger = true +func on_end_stagger(rate):status.is_stagger = false +func on_end_stun(rate):status.is_stun = false + +#表现 +func on_start_flash_white(rate):status.flash_white_rate = 1 +func on_update_flash_white(rate):status.flash_white_rate = 1 - rate +func on_end_flash_white(rate):status.flash_white_rate = 0 +func on_second_pause(rate):status.is_pause = true +func on_end_pause(rate):status.is_pause = false +func on_update_shake_x(rate):status.shake_offset = Vector3((sin(rate * PI * 4) - 0.5)*0.02,0,0); +func on_end_shake_x(rate):status.shake_offset = Vector3.ZERO diff --git a/script/character/character.gd b/script/character/character.gd index 6c84f2c..a02f775 100644 --- a/script/character/character.gd +++ b/script/character/character.gd @@ -33,6 +33,9 @@ func build_battle(cfg:CharacterCfg): status.shield = cfg.shield_max status.shield_max = cfg.shield_max +func set_material(material:ShaderMaterial): + view.material_override = material + #==getter== func manager()->CharacterManager:return character_manager func id()->int:return status.id @@ -41,7 +44,7 @@ func pos()->Vector2:return Vector2(position.x,position.z) #==interface== func set_pos(pos:Vector3):position = pos -func add_buff(buff_name:String,duration:float):buff.add_buff(buff_name,duration) +func add_buff(buff_name:String,duration:float,ignore_pause:bool=false):buff.add_buff(buff_name,duration,ignore_pause) func set_hit_move(hit_back_dir:Vector2,hit_back_speed:float,hit_up_speed:float): status.hit_back_dir = hit_back_dir status.hit_back_speed = hit_back_speed diff --git a/script/character/status.gd b/script/character/status.gd index 0ebcecc..88f0577 100644 --- a/script/character/status.gd +++ b/script/character/status.gd @@ -19,6 +19,7 @@ class_name Status @export var basic_offset : Vector3 #基本偏移值 @export var shake_offset : Vector3 #抖动偏移值 @export var is_pause : bool #是否暂停 +@export var flash_white_rate : float #闪白比例 @export_category("移动状态") @export var move_dir : Vector2 #移动方向 diff --git a/script/character/view.gd b/script/character/view.gd index fb975fb..eaa51fd 100644 --- a/script/character/view.gd +++ b/script/character/view.gd @@ -57,13 +57,16 @@ func _ready(): trans("ground1_loop","ground2","is_stagger","=",false) run("ground2","idle_loop") - - func _process(delta): + update_view() + if not status.is_skill_running and status.is_pause == is_playing(): + if status.is_pause:pause(); + else:play(); if status.is_pause:return update_flip() - update_view() update_trans(false) + update_texture() + update_flash_white() func init(default:SpriteFrames): sprite_frames = default @@ -127,3 +130,12 @@ func update_view(): func _on_animation_finished(): update_trans(true) +func update_texture(): + var tex = sprite_frames.get_frame_texture(animation,frame) + var material = material_override as ShaderMaterial + material.set_shader_parameter("tex",tex) + +func update_flash_white(): + var material = material_override as ShaderMaterial + material.set_shader_parameter("flash_white",status.flash_white_rate) + diff --git a/script/manager/character_manager.gd b/script/manager/character_manager.gd index cb7be8a..9aacbab 100644 --- a/script/manager/character_manager.gd +++ b/script/manager/character_manager.gd @@ -3,6 +3,7 @@ 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 @@ -20,6 +21,7 @@ func create_character(cfg:CharacterCfg,team:Enum.ETeam,pos:Vector3): character_idx += 1 character_map[character_idx]=character character.init(self,character_idx,cfg,team) + character.set_material(character_material.duplicate()) character.set_pos(pos) func get_character(id:int) -> Character: diff --git a/script/ui/profile/fps.gd b/script/ui/profile/fps.gd new file mode 100644 index 0000000..cb3de2c --- /dev/null +++ b/script/ui/profile/fps.gd @@ -0,0 +1,4 @@ +extends Label + +func _process(delta): + set_text("FPS %d" % Engine.get_frames_per_second())