108 lines
3.1 KiB
GDScript
108 lines
3.1 KiB
GDScript
extends Node2D
|
|
|
|
onready var wall_res = preload("res://Wall.tscn")
|
|
onready var laser_e_res = preload("res://Laser_enemy.tscn")
|
|
onready var laser_res = preload("res://Laser_obj.tscn")
|
|
|
|
onready var screenSize = get_viewport().get_visible_rect().size
|
|
# class member variables go here, for example:
|
|
# var a = 2
|
|
# var b = "textvar"
|
|
var wall_move = false
|
|
var shift_time = 0.5
|
|
|
|
func _ready():
|
|
# Called when the node is added to the scene for the first time.
|
|
# Initialization here
|
|
print(screenSize)
|
|
$Wall_Spawner.toggle_spawner(true,false)
|
|
#$Wall_Spawner.deactivate_spawner()
|
|
pass
|
|
|
|
func _process(delta):
|
|
if wall_move:
|
|
screenshake(16,0.2)
|
|
pass
|
|
|
|
|
|
func _on_Wall_Spawner_wall_spawned(gap_pos, gap_size, shift_pos):
|
|
var topwall = wall_res.instance()
|
|
get_node(".").add_child(topwall)
|
|
topwall.connect("out_of_bound", self, "despawn_wall")
|
|
var bottomwall = wall_res.instance()
|
|
get_node(".").add_child(bottomwall)
|
|
bottomwall.connect("moving", self, "toggle_screenshake")
|
|
bottomwall.connect("out_of_bound", self, "despawn_wall")
|
|
|
|
topwall.position = Vector2(gap_pos.x,(gap_pos.y -29-gap_size)*Global.GRID_SIZE)
|
|
topwall.set_scale(Vector2(1, 15))
|
|
bottomwall.position = Vector2(gap_pos.x, screenSize.y - (27-gap_pos.y-gap_size)*Global.GRID_SIZE)#
|
|
bottomwall.set_scale(Vector2(1, 15))
|
|
|
|
|
|
if shift_pos-gap_pos.y != 0:
|
|
topwall.set_shift(shift_time,(shift_pos-gap_pos.y)*Global.GRID_SIZE)
|
|
bottomwall.set_shift(shift_time,(shift_pos-gap_pos.y)*Global.GRID_SIZE)
|
|
#screenSize.y/Global.GRID_SIZE
|
|
|
|
func despawn_wall(wall):
|
|
get_node(".").remove_child(wall)
|
|
get_tree().queue_delete(wall)
|
|
|
|
func shoot_laser(laser_en):
|
|
var l = laser_res.instance()
|
|
get_node(".").add_child(l)
|
|
l.position = Vector2(0,laser_en.position.y)
|
|
l.connect("kill_zone",self,"check_laser_target")
|
|
despawn_wall(laser_en)
|
|
screenshake(32,0.4)
|
|
#l.tween_node.connect("tween_completed",self, "despawn_wall",l)
|
|
func check_laser_target(body):
|
|
#for b in body:
|
|
if body == $Player:
|
|
|
|
OS.delay_msec(10)
|
|
$Player/AnimatedSprite.play()
|
|
$Player.dead = true
|
|
|
|
func _on_Player_gameover():
|
|
Global.diff_level = 1
|
|
if $Player.score>Global.high_score:
|
|
Global.high_score = $Player.score
|
|
Global.return_to_menu = true
|
|
Global.playable = false
|
|
get_tree().change_scene("res://mainmenu.tscn")
|
|
|
|
|
|
func _on_Wall_Spawner_laser_spawned(pos):
|
|
var l_enemy = laser_e_res.instance()
|
|
get_node(".").add_child(l_enemy)
|
|
l_enemy.connect("shoot",self,"shoot_laser")
|
|
|
|
l_enemy.position = Vector2(screenSize.x-32, pos*Global.GRID_SIZE)
|
|
|
|
l_enemy.place_obj(screenSize.x,screenSize.x-32,0.2)
|
|
|
|
func toggle_screenshake(state):
|
|
wall_move = state
|
|
|
|
func screenshake(off,mag):
|
|
$cam.set_offset(Vector2( \
|
|
rand_range(-off,off) * mag, \
|
|
rand_range(-off,off) * mag ))
|
|
|
|
func _on_leveltimer_timeout():
|
|
Global.diff_level = min(Global.diff_level+1,10)
|
|
if Global.diff_level == 2:
|
|
$Wall_Spawner.toggle_spawner(false,true)
|
|
elif Global.diff_level == 3:
|
|
$Wall_Spawner.toggle_spawner(true,true)
|
|
else:
|
|
if math.randint(0,1):
|
|
$Wall_Spawner.toggle_spawner(true,math.randint(0,1))
|
|
else:
|
|
$Wall_Spawner.toggle_spawner(false,true)
|
|
$Wall_Spawner/spawntimer.set_wait_time(max(1.5-0.15*Global.diff_level,0.7))
|
|
shift_time = max(1-0.1*Global.diff_level,0.3)
|
|
|