47 lines
1.2 KiB
GDScript
47 lines
1.2 KiB
GDScript
extends Node2D
|
|
# This is to encapsulate information about the gap obstacles and position
|
|
|
|
var shift_proximity
|
|
|
|
onready var topwall = $Top
|
|
onready var bottomwall = $Bottom
|
|
var gap_size
|
|
var gap_pos
|
|
var true_pos
|
|
var hspeed = Vector2(0,0)
|
|
var tracking_player
|
|
var shift_set = false
|
|
|
|
signal out_of_bound(wall)
|
|
signal moving(state)
|
|
|
|
|
|
func _ready():
|
|
self.position.x = gap_pos.x;
|
|
topwall.position = Vector2(0,(gap_pos.y - gap_size/2)*Global.GRID_SIZE)
|
|
topwall.set_scale(Vector2(1, -30))
|
|
bottomwall.position = Vector2(0, (gap_pos.y+gap_size/2)*Global.GRID_SIZE)
|
|
bottomwall.set_scale(Vector2(1, 30))
|
|
bottomwall.connect("moving", self, "_emit_moving")
|
|
|
|
shift_set = int(true_pos-gap_pos.y) != 0
|
|
shift_proximity = abs(hspeed.x) * 40
|
|
|
|
func _physics_process(delta):
|
|
# # Called every frame. Delta is time since last frame.
|
|
# # Update game logic here.
|
|
position += hspeed
|
|
|
|
if shift_set and abs(position.x -tracking_player.get_ref().position.x) < shift_proximity:
|
|
shift_set = false
|
|
topwall.shift_position((true_pos-gap_pos.y)*Global.GRID_SIZE)
|
|
bottomwall.shift_position((true_pos-gap_pos.y)*Global.GRID_SIZE)
|
|
|
|
if position.x< - topwall.w:
|
|
emit_signal("out_of_bound", self)
|
|
get_tree().queue_delete(self)
|
|
|
|
func _emit_moving(state):
|
|
emit_signal("moving", state)
|
|
|