From 9df257acdfea5b6ca9ac6ba4993208484b85e08e Mon Sep 17 00:00:00 2001 From: chendian <-> Date: Thu, 26 Sep 2024 10:06:00 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=99=E4=BD=93=E4=BA=A4=E4=BA=92=20?= =?UTF-8?q?=E5=88=9D=E7=89=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- render/shader/after_image.gdshader | 2 +- render/texture/particle/shape/flare7.png | Bin 0 -> 4970 bytes .../texture/particle/shape/flare7.png.import | 34 ++++++++++++++++++ .../effect/particle/particle_warn_normal.tscn | 18 +++++----- script/_global/enum.gd | 2 +- script/character/battle.gd | 4 +-- script/character/buff.gd | 9 ++--- script/character/move.gd | 24 ++++++++++++- script/manager/effect_manager.gd | 8 +++++ 9 files changed, 79 insertions(+), 22 deletions(-) create mode 100644 render/texture/particle/shape/flare7.png create mode 100644 render/texture/particle/shape/flare7.png.import diff --git a/render/shader/after_image.gdshader b/render/shader/after_image.gdshader index 12bb21d..ec09ea1 100644 --- a/render/shader/after_image.gdshader +++ b/render/shader/after_image.gdshader @@ -10,5 +10,5 @@ void fragment() { //col.rgb = mix(vec3(0.0), col.rgb, alpha * 0.5); col.rgb = mix(vec3(dot(vec3(1.0), col.rgb) * 0.33333), col.rgb, alpha); ALBEDO = col.rgb; - ALPHA = alpha; + ALPHA = alpha * 0.5; } diff --git a/render/texture/particle/shape/flare7.png b/render/texture/particle/shape/flare7.png new file mode 100644 index 0000000000000000000000000000000000000000..4528cd4aafea888c0bb79c50d3a974cd251b2ace GIT binary patch literal 4970 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 HitResul 1: particle_hit = ResourceManager.particle_hit_blunt_normal 2: particle_hit = ResourceManager.particle_hit_blunt_mid 3: particle_hit = ResourceManager.particle_hit_blunt_heavy - Enum.EDamageType.Ground: - particle_hit = ResourceManager.particle_hit_ground _: pass if particle_hit: character_to.cast_particle(particle_hit, false) - + #受击材质特效 if (damage > 0) and (break_level_sub > 2): var material: Enum.EMaterial = cfg_to.material_on if has_shield else cfg_to.material_off diff --git a/script/character/buff.gd b/script/character/buff.gd index afabd82..ef11523 100644 --- a/script/character/buff.gd +++ b/script/character/buff.gd @@ -96,13 +96,8 @@ func on_start_floating(rate)->void: func on_update_floating(rate) -> void: if not status.is_on_floor or status.is_rising: return - if has_buff("hit_down"): - battle.add_attack(character.id(), character.id(), status.move_dir, ResourceManager.cfg_attack_rebound) - remove_buff("hit_down") - else: - remove_buff("floating") - add_buff("stagger", 3) - return + remove_buff("floating") + add_buff("stagger", 3) func on_end_floating(rate)->void: status.is_floating = false diff --git a/script/character/move.gd b/script/character/move.gd index 149e8ed..bb246ba 100644 --- a/script/character/move.gd +++ b/script/character/move.gd @@ -21,7 +21,7 @@ func _process(delta) -> void: var is_hit_floor: bool = update_on_floor(delta) update_move(delta) update_speed_y(delta) - character.move_and_slide() + update_move_check(delta) status.velocity_change = character.velocity.abs() - velocity_cache velocity_cache = character.velocity.abs() if character.velocity: @@ -99,6 +99,28 @@ func update_move_effect(delta): effect.cast_after_image(after_image_alpha) +func update_move_check(delta): + var velocity: Vector3 = character.velocity + character.move_and_slide() + if status.is_stagger: + var collision_count: int = character.get_slide_collision_count() + if collision_count > 0: + var normal: Vector3 = Vector3.ZERO + for i in collision_count: + var collision: KinematicCollision3D = character.get_slide_collision(i) + normal += collision.get_normal() + normal = normal.normalized() + var normal_speed: float = velocity.dot(normal) + if normal_speed < -6: + #墙体互动 + character.velocity = velocity - normal * normal_speed * 2 + character.add_buff("floating", -1) + elif normal_speed <-2: + #反弹 + character.velocity = velocity - normal * normal_speed * 1.5 + character.add_buff("floating", -1) + + func jump(): character.velocity.y = status.cfg.move.jump_velocity status.is_jumped = true diff --git a/script/manager/effect_manager.gd b/script/manager/effect_manager.gd index 3674a8c..0c0bd9a 100644 --- a/script/manager/effect_manager.gd +++ b/script/manager/effect_manager.gd @@ -1,8 +1,16 @@ extends Node3D func _ready(): + #Global.character_mgr = self SignalManager.effect_create.connect(on_effect_create) func on_effect_create(effect: Node3D): add_child(effect) + + +func cast_particle(resource: Resource, pos: Vector3, rotation = Vector3.ZERO): + var new_particle: Particle = resource.instantiate() as Particle + new_particle.position = pos + new_particle.rotation = rotation + add_child(new_particle)