gai-godot-games/tutorial-game/scenes/mob/mob.gd

41 lines
1.5 KiB
GDScript

extends RigidBody2D
@export var blink_shader: Shader
@export var dissolve_shader: Shader
func _ready():
add_to_group("mobs")
var mob_types: PackedStringArray = $AnimatedSprite2D.sprite_frames.get_animation_names()
$AnimatedSprite2D.play(mob_types[randi() % mob_types.size()])
set_shader_dissolve_value(1.0)
func _process(delta: float) -> void:
var spread: int = 25
$TrailParticles.position.y = randi() % (spread * 2) - spread
func _on_visible_on_screen_notifier_2d_screen_exited() -> void:
await get_tree().create_timer(1.0).timeout
queue_free()
func hit_player():
$DissolveParticles.restart()
$DissolveParticles.emitting = true
func dissolve():
$AnimatedSprite2D.material.shader = blink_shader
var tween_1: Tween = get_tree().create_tween()
tween_1.tween_method(set_shader_blink_intensity, 1.0, 0.0, 0.5)
await get_tree().create_timer(0.5).timeout
$AnimatedSprite2D.material.shader = dissolve_shader
var tween_2: Tween = get_tree().create_tween()
tween_2.tween_method(set_shader_dissolve_value, 1.0, 0.0, 1)
await get_tree().create_timer(1).timeout
queue_free()
func set_shader_blink_intensity(value: float) -> void:
$AnimatedSprite2D.material.set_shader_parameter("blink_intensity", value)
$AnimatedSprite2D.material.set_shader_parameter("blink_color", Color(1, 1, 1, 1))
func set_shader_dissolve_value(value: float) -> void:
$AnimatedSprite2D.material.set_shader_parameter("DissolveValue", value)