extends Node2D

# 生成するシーン
var obj_floor = preload("res://Floor.tscn") # 床オブジェクト

# カメラの座標関連
const CAMERA_POS_Y = 320 # カメラの位置(Y).
const CAMERA_OFS_X = 400 # プレイヤーからのオフセット
const FLOOR_INTERVAL = 64 # 足場は 64px 単位で登場する.
const SCREEN_W = 1024 # 画面の幅.

onready var _player = $Player # プレイヤー.
onready var _camera = $Camera2D # カメラ.
onready var _field_mgr = $FieldMgr # フィールド管理.

var _prev_x:float = 0 # 前回の座標(X)
var _prev_y:float = 320 # 前回の座標(Y)
var _cnt_create:int = 0 # 足場を生成した回数.
var _timer:float = 0 # 経過時間.

func _ready() -> void:
	# プレイヤーの初期位置を設定しておく.
	_prev_x = _player.position.x

func _process(delta: float) -> void:
	# カメラをプレイヤーに追従させる.
	_camera.position.x = _player.position.x + CAMERA_OFS_X
	
	# 足場の生成チェック.
	_check_floor()
	
	# 画面外に出た足場を消す.
	for child in _field_mgr.get_children():
		if child.position.x < _player.position.x - 100:
			child.queue_free()
# 足場の出現チェック.
func _check_floor() -> void:
	# FLOOR_INTERVALの単位になるようにする.
	var prev = floor(_prev_x / FLOOR_INTERVAL) * FLOOR_INTERVAL # 前回.
	var now = floor(_player.position.x / FLOOR_INTERVAL) * FLOOR_INTERVAL # 現在値.

	if prev != now:
		# 出現タイミングになった.
		_cnt_create += 1 # 生成カウンタをアップする.
		
		if _cnt_create%9 == 8:
			# 出現座標(Y)を更新する.
			var y = _prev_y + (randi()%8 - 4) * 32
			if y < 200:
				y = 200 # 200よりも上にならないようにする
			if y > 540:
				y = 540 # 540よりも下にならないようにする
			_prev_y = y
		if _cnt_create%9 < 6:
			# (0〜5)なら床出現.
			_create_floor(now, _prev_y)
	
	# 今回のプレイヤー位置を保存しておく.
	_prev_x = _player.position.x
	
# 足場を生成する.
func _create_floor(px:float, py:float) -> void:
	var obj = obj_floor.instance()
	obj.position.x = px + SCREEN_W
	obj.position.y = py
	_field_mgr.add_child(obj)
