ld56/button.gd

113 lines
2.9 KiB
GDScript

extends Node2D
@export var input_name = ""
@export var color_mix:Color = Color(1,1,1)
const ENEMY = preload("res://enemy.tscn")
const DISTANCE = 40
var red_button = false
var should_move = false
signal enemy_killed
var trans = false
func _unhandled_input(event: InputEvent) -> void:
if(event.is_action_pressed(input_name)):
print_debug(input_name)
$AnimatedSprite2D.play("pressed")
var children = get_children(false)
var was_valid_input = false
if(red_button):
get_parent().red_button_press()
for a in children:
if(a.has_method("button_pressed")):
a.button_pressed()
enemy_killed.emit()
was_valid_input = true
if(!was_valid_input):
if get_parent().has_method("bad_press"):
get_parent().bad_press()
func get_has_enemy():
return get_children().any(func (a:Node):return a.has_method("button_pressed"))
func set_red_button(is_red: bool):
red_button = is_red
if is_red:
$AnimatedSprite2D.play("red")
else:
$AnimatedSprite2D.play("default")
func red_in():
red_button = true
trans = true
$AnimatedSprite2D.play("red_in")
func red_out():
red_button = true
trans = true
$AnimatedSprite2D.play("red_out")
func _process(delta: float) -> void:
if(!trans):
$AnimatedSprite2D.modulate = color_mix
else:
$AnimatedSprite2D.modulate = Color(1,1,1)
func spawn_enemy():
if(trans):
return
if get_has_enemy():
return
if(randi_range(0,1)==1):
var enemy = ENEMY.instantiate()
print_debug(randf_range(0.0, 2.0) * PI)
add_child(enemy)
enemy.global_position = global_position
enemy.global_rotation=randf_range(0, 2 * PI)
enemy.look_at(global_position)
enemy.enemy_attacked.connect(enemy_attacked)
func enemy_attacked():
#TODO: check for collisions
if red_button:
get_parent().change_red_button()
return
#move_button()
get_parent().ate()
#func move_button():
#should_move = true
#global_position = get_random_position()
func get_random_position():
var area2d:CollisionShape2D = get_parent().get_node(^"SpawnArea/CollisionShape2D")
var xa = area2d.shape.get_rect().position.x
var ya = area2d.global_position.y
# collison shape position is in the center of the shape :(( it took me too long to figure that out
var x = randi_range(area2d.global_position.x + area2d.shape.get_rect().position.x, area2d.global_position.x + area2d.shape.get_rect().end.x)
var y = randi_range(area2d.global_position.y + area2d.shape.get_rect().position.y, area2d.global_position.y + area2d.shape.get_rect().end.y)
return Vector2(x,y)
var should_really_move = false
#func _on_area_2d_area_entered(area: Area2D) -> void:
#if should_really_move:
#move_button()
#if should_move:
#move_button()
func _on_area_2d_area_exited(area: Area2D) -> void:
if should_move:
should_really_move = true
should_move = false
func _on_animated_sprite_2d_animation_finished() -> void:
if(trans):
if($AnimatedSprite2D.animation == "red_out"):
red_button = false
trans = false