2024-10-05 20:09:04 +00:00
|
|
|
extends Node2D
|
2024-10-05 10:39:19 +00:00
|
|
|
|
|
|
|
@export var input_name = ""
|
2024-10-05 20:09:04 +00:00
|
|
|
@export var color_mix:Color = Color(1,1,1)
|
2024-10-06 13:57:47 +00:00
|
|
|
const ENEMY = preload("res://Scenes/Worm/enemy.tscn")
|
2024-10-05 15:57:40 +00:00
|
|
|
const DISTANCE = 40
|
2024-10-05 20:09:04 +00:00
|
|
|
var red_button = false
|
|
|
|
var should_move = false
|
2024-10-06 12:18:16 +00:00
|
|
|
signal enemy_killed
|
|
|
|
|
|
|
|
var trans = false
|
2024-10-05 20:09:04 +00:00
|
|
|
|
2024-10-05 10:39:19 +00:00
|
|
|
func _unhandled_input(event: InputEvent) -> void:
|
2024-10-06 17:38:16 +00:00
|
|
|
if !get_parent().game_active:
|
|
|
|
return
|
2024-10-05 10:39:19 +00:00
|
|
|
if(event.is_action_pressed(input_name)):
|
|
|
|
print_debug(input_name)
|
|
|
|
$AnimatedSprite2D.play("pressed")
|
2024-10-06 17:38:16 +00:00
|
|
|
$Splash.play("splash")
|
2024-10-05 10:39:19 +00:00
|
|
|
var children = get_children(false)
|
2024-10-05 15:57:40 +00:00
|
|
|
var was_valid_input = false
|
2024-10-05 20:09:04 +00:00
|
|
|
if(red_button):
|
|
|
|
get_parent().red_button_press()
|
2024-10-05 10:39:19 +00:00
|
|
|
for a in children:
|
|
|
|
if(a.has_method("button_pressed")):
|
|
|
|
a.button_pressed()
|
2024-10-06 12:18:16 +00:00
|
|
|
enemy_killed.emit()
|
2024-10-05 15:57:40 +00:00
|
|
|
was_valid_input = true
|
|
|
|
if(!was_valid_input):
|
|
|
|
if get_parent().has_method("bad_press"):
|
|
|
|
get_parent().bad_press()
|
2024-10-05 10:39:19 +00:00
|
|
|
|
2024-10-05 20:09:04 +00:00
|
|
|
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")
|
2024-10-05 10:39:19 +00:00
|
|
|
|
2024-10-06 12:18:16 +00:00
|
|
|
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:
|
2024-10-06 17:38:16 +00:00
|
|
|
match $AnimatedSprite2D.animation:
|
|
|
|
"default", "pressed":
|
|
|
|
$AnimatedSprite2D.modulate = color_mix
|
|
|
|
_:
|
|
|
|
$AnimatedSprite2D.modulate = Color(1,1,1)
|
2024-10-05 15:57:40 +00:00
|
|
|
|
|
|
|
func spawn_enemy():
|
2024-10-06 12:18:16 +00:00
|
|
|
if(trans):
|
|
|
|
return
|
2024-10-05 20:09:04 +00:00
|
|
|
if get_has_enemy():
|
2024-10-05 15:57:40 +00:00
|
|
|
return
|
2024-10-05 20:09:04 +00:00
|
|
|
if(randi_range(0,1)==1):
|
2024-10-05 10:39:19 +00:00
|
|
|
var enemy = ENEMY.instantiate()
|
|
|
|
add_child(enemy)
|
2024-10-05 15:57:40 +00:00
|
|
|
enemy.global_position = global_position
|
2024-10-06 17:38:16 +00:00
|
|
|
var rotated = randi_range(0, 1)
|
|
|
|
if(rotated ==1):
|
|
|
|
enemy.flip_animation()
|
|
|
|
enemy.global_rotation=rotated*PI
|
2024-10-05 15:57:40 +00:00
|
|
|
enemy.enemy_attacked.connect(enemy_attacked)
|
|
|
|
|
|
|
|
func enemy_attacked():
|
|
|
|
#TODO: check for collisions
|
2024-10-05 20:09:04 +00:00
|
|
|
if red_button:
|
|
|
|
get_parent().change_red_button()
|
|
|
|
return
|
2024-10-06 12:18:16 +00:00
|
|
|
#move_button()
|
|
|
|
get_parent().ate()
|
2024-10-05 20:09:04 +00:00
|
|
|
|
|
|
|
|
2024-10-06 12:18:16 +00:00
|
|
|
#func move_button():
|
|
|
|
#should_move = true
|
|
|
|
#global_position = get_random_position()
|
2024-10-05 15:57:40 +00:00
|
|
|
|
|
|
|
|
|
|
|
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)
|
2024-10-05 20:09:04 +00:00
|
|
|
|
|
|
|
var should_really_move = false
|
|
|
|
|
2024-10-06 12:18:16 +00:00
|
|
|
#func _on_area_2d_area_entered(area: Area2D) -> void:
|
|
|
|
#if should_really_move:
|
|
|
|
#move_button()
|
|
|
|
#if should_move:
|
|
|
|
#move_button()
|
2024-10-05 20:09:04 +00:00
|
|
|
|
|
|
|
func _on_area_2d_area_exited(area: Area2D) -> void:
|
|
|
|
if should_move:
|
|
|
|
should_really_move = true
|
|
|
|
should_move = false
|
2024-10-06 12:18:16 +00:00
|
|
|
|
|
|
|
|
|
|
|
func _on_animated_sprite_2d_animation_finished() -> void:
|
|
|
|
if(trans):
|
|
|
|
if($AnimatedSprite2D.animation == "red_out"):
|
|
|
|
red_button = false
|
2024-10-06 17:38:16 +00:00
|
|
|
$AnimatedSprite2D.play("default")
|
2024-10-06 12:18:16 +00:00
|
|
|
trans = false
|