61 lines
2.4 KiB
GDScript
61 lines
2.4 KiB
GDScript
extends Camera2D
|
|
|
|
onready var player = get_tree().get_nodes_in_group("player").front()
|
|
onready var last_sector = Game.get_sector(player.global_position + Vector2(0.0, -5.0))
|
|
onready var off_level_indicator = $OffLevelIndicator
|
|
onready var msx_off_level_indicator = $MsxOffLevelIndicator
|
|
#Scroll direction
|
|
export var scroll_h = true
|
|
export var scroll_v = false
|
|
export var respawn_h = true
|
|
var msx = null
|
|
var msx_exists = false
|
|
|
|
func _ready():
|
|
set_as_toplevel(true)
|
|
Game.current_sector = last_sector
|
|
yield(get_tree(), "idle_frame")
|
|
if get_tree().get_nodes_in_group("msx").size() > 0:
|
|
msx = get_tree().get_nodes_in_group("msx").pop_front()
|
|
msx_exists = true
|
|
|
|
func _process(delta):
|
|
# use pop_front() instead of [0] so that will not crash without player
|
|
if not is_instance_valid(player):
|
|
player = get_tree().get_nodes_in_group("player").pop_front()
|
|
else:
|
|
var current_sector = Game.get_sector(player.global_position + Vector2(0.0, -5.0))
|
|
if scroll_h && current_sector.x != last_sector.x:
|
|
position.x = current_sector.x * Game.RESOLUTION.x
|
|
if respawn_h:
|
|
# TODO: decide whether to use offset with horizontal respawn
|
|
# var offset = Vector2(8.0 * sign(current_sector.x - last_sector.x), 0.0)
|
|
Game.respawn_point = player.global_position
|
|
last_sector.x = current_sector.x
|
|
if scroll_v && current_sector.y != last_sector.y:
|
|
position.y = current_sector.y * Game.RESOLUTION.y
|
|
last_sector.y = current_sector.y
|
|
Game.current_sector = last_sector
|
|
#Off level indicator
|
|
if player.global_position.y - global_position.y <= 16.0:
|
|
off_level_indicator.visible = true
|
|
off_level_indicator.global_position.x = player.global_position.x
|
|
else:
|
|
off_level_indicator.visible = false
|
|
#Ms.X off level indicator
|
|
if msx_exists:
|
|
if is_instance_valid(msx) and msx.get_parent().is_free:
|
|
msx_off_level_indicator.visible = true
|
|
var msx_sector = Game.get_sector(msx.global_position)
|
|
if msx_sector == current_sector:
|
|
msx_off_level_indicator.anims.play("onscreen")
|
|
if msx_sector < current_sector:
|
|
msx_off_level_indicator.position.y = msx.global_position.y
|
|
msx_off_level_indicator.position.x = 16
|
|
msx_off_level_indicator.anims.play("left")
|
|
if msx_sector > current_sector:
|
|
msx_off_level_indicator.position.y = msx.global_position.y
|
|
msx_off_level_indicator.position.x = 240
|
|
msx_off_level_indicator.anims.play("right")
|
|
else:
|
|
msx_off_level_indicator.visible = false
|