diff --git a/autoloads/global.gd b/autoloads/global.gd index 533ec33..c167777 100644 --- a/autoloads/global.gd +++ b/autoloads/global.gd @@ -1,13 +1,15 @@ extends Node +const FLASH_MATERIAL = preload("uid://cwtrdmkrsmw23") var player: Player -# Called when the node enters the scene tree for the first time. -func _ready() -> void: - pass # Replace with function body. - - -# Called every frame. 'delta' is the elapsed time since the previous frame. -func _process(delta: float) -> void: - pass +# 尝试阻止敌人攻击,获取闪避, unit_stats block_chance 越大 +# 成功率越高 +func get_chance_success(chance: float) -> bool: + var random := randf_range(0, 1.0) + + if random < chance: + return true + + return false diff --git a/effect/flash.gdshader b/effect/flash.gdshader new file mode 100644 index 0000000..20a2e5a --- /dev/null +++ b/effect/flash.gdshader @@ -0,0 +1,6 @@ +shader_type canvas_item; + +void fragment() { + COLOR = vec4(1.0,1.0,1.0,texture(TEXTURE, UV).a); + +} diff --git a/effect/flash.gdshader.uid b/effect/flash.gdshader.uid new file mode 100644 index 0000000..a0262b2 --- /dev/null +++ b/effect/flash.gdshader.uid @@ -0,0 +1 @@ +uid://dmnmstd7ptupl diff --git a/effect/flash_material.tres b/effect/flash_material.tres new file mode 100644 index 0000000..e2a26c5 --- /dev/null +++ b/effect/flash_material.tres @@ -0,0 +1,6 @@ +[gd_resource type="ShaderMaterial" format=3 uid="uid://cwtrdmkrsmw23"] + +[ext_resource type="Shader" uid="uid://dmnmstd7ptupl" path="res://effect/flash.gdshader" id="1_dhio8"] + +[resource] +shader = ExtResource("1_dhio8") diff --git a/scenes/unit/enemy/enemy.gd b/scenes/unit/enemy/enemy.gd index 6f49c7d..5c8d4e3 100644 --- a/scenes/unit/enemy/enemy.gd +++ b/scenes/unit/enemy/enemy.gd @@ -10,7 +10,7 @@ var can_move := true # Called when the node enters the scene tree for the first time. func _ready() -> void: - pass # Replace with function body. + super._ready() # Called every frame. 'delta' is the elapsed time since the previous frame. diff --git a/scenes/unit/unit.gd b/scenes/unit/unit.gd index c3284d6..812d5ab 100644 --- a/scenes/unit/unit.gd +++ b/scenes/unit/unit.gd @@ -7,15 +7,30 @@ class_name Unit @onready var sprite: Sprite2D = %Sprite @onready var anim_player: AnimationPlayer = $AnimationPlayer @onready var health_component: HealthComponent = $HealthComponent +@onready var flash_timer: Timer = $FlashTimer func _ready() -> void: - print(stats) health_component.setup(stats) +func set_flash_material() -> void: + sprite.material = Global.FLASH_MATERIAL + flash_timer.start() func _on_hurtbox_component_on_damaged(hitbox: HitboxComponent) -> void: if health_component.current_health <=0: return + var blocked := Global.get_chance_success(stats.block_chance / 100) + + if blocked: + print("Blocked!") + return + + set_flash_material() + health_component.take_damage(hitbox.damage) print("%s: %d" % [name, health_component.current_health] ) + + +func _on_flash_timer_timeout() -> void: + sprite.material = null diff --git a/scenes/unit/unit.tscn b/scenes/unit/unit.tscn index 90734e9..6f6fed6 100644 --- a/scenes/unit/unit.tscn +++ b/scenes/unit/unit.tscn @@ -258,5 +258,10 @@ offset_top = -90.0 offset_right = 50.0 offset_bottom = -70.0 +[node name="FlashTimer" type="Timer" parent="." unique_id=2034069027] +wait_time = 0.2 +one_shot = true + [connection signal="on_damaged" from="HurtboxComponent" to="." method="_on_hurtbox_component_on_damaged"] [connection signal="on_health_changed" from="HealthComponent" to="HealthBar" method="_on_health_component_on_health_changed"] +[connection signal="timeout" from="FlashTimer" to="." method="_on_flash_timer_timeout"]