102 lines
2.6 KiB
GDScript
102 lines
2.6 KiB
GDScript
extends Node2D
|
|
|
|
@onready var background1 = $background1
|
|
@onready var background2 = $background2
|
|
|
|
@onready var spaceship = $Spaceship
|
|
@onready var spaceshipHitbox = $Spaceship/Area2D
|
|
@onready var astroid = preload("res://scene/minigames/steering/Astroid.tscn")
|
|
|
|
@export var shipLogicRef: ShipLogic
|
|
|
|
var controllStick: Node3D
|
|
var controllStickGoalPos: float = 0.0
|
|
const CONTROLL_STICK_SNAPBACK: float = 24
|
|
|
|
var idleMoveAmplitude: float = 15
|
|
var timePassed: float = 0
|
|
var astroidTimer: float = 0
|
|
var scrollSpeed: float = 8.5 #Pixels per seccond
|
|
|
|
signal collision
|
|
|
|
const POS_LEFT = 64
|
|
const POS_MIDDLE = 128
|
|
const POS_RIGHT = 192
|
|
|
|
var starshipGoalPos: int = 1
|
|
const starshipHorizontalSpeed: float = 56
|
|
|
|
var rng = RandomNumberGenerator.new()
|
|
|
|
var active: bool = false
|
|
|
|
func _process(delta: float) -> void:
|
|
timePassed += delta
|
|
astroidTimer += delta
|
|
background1.position.y += scrollSpeed * delta
|
|
background2.position.y += scrollSpeed * delta
|
|
spaceship.position.y += idleMoveAmplitude * sin(timePassed)*delta
|
|
if controllStick:
|
|
controllStick.rotation_degrees.x = move_toward(controllStick.rotation_degrees.x,controllStickGoalPos,delta*CONTROLL_STICK_SNAPBACK)
|
|
if abs(controllStick.rotation_degrees.x) > 15:
|
|
controllStickGoalPos = 0
|
|
|
|
if astroidTimer >= 90:
|
|
astroidTimer = rng.randf_range(0,20)
|
|
var astroidCounter = 0
|
|
if rng.randf() > 0.5:
|
|
spawnAstroid(POS_LEFT)
|
|
astroidCounter += 1
|
|
if rng.randf() > 0.5:
|
|
spawnAstroid(POS_MIDDLE)
|
|
astroidCounter += 1
|
|
if rng.randf() > 0.5 and astroidCounter < 2:
|
|
spawnAstroid(POS_RIGHT)
|
|
|
|
infiniteScroll(background1)
|
|
infiniteScroll(background2)
|
|
|
|
spaceship.position.x = move_toward(spaceship.position.x,goalPosToPos(),starshipHorizontalSpeed*delta)
|
|
|
|
if active:
|
|
if Input.is_action_just_pressed("moveLeft"):
|
|
starshipGoalPos = clamp(starshipGoalPos-1,0,2)
|
|
if controllStick:
|
|
controllStickGoalPos = -16
|
|
if Input.is_action_just_pressed("moveRight"):
|
|
starshipGoalPos = clamp(starshipGoalPos+1,0,2)
|
|
if controllStick:
|
|
controllStickGoalPos = 16
|
|
|
|
if Input.is_action_just_pressed("interact") or Input.is_action_just_pressed("moveDown"):
|
|
active = false
|
|
|
|
func goalPosToPos() -> float:
|
|
match starshipGoalPos:
|
|
0:
|
|
return POS_LEFT
|
|
1:
|
|
return POS_MIDDLE
|
|
2:
|
|
return POS_RIGHT
|
|
return POS_MIDDLE
|
|
|
|
func activate() -> void:
|
|
active = true
|
|
|
|
func infiniteScroll(sprite: Sprite2D):
|
|
if sprite.position.y >=511:
|
|
sprite.position.y = -511
|
|
|
|
func spawnAstroid(Xpos: float):
|
|
var instance = astroid.instantiate()
|
|
add_child(instance)
|
|
instance.position = Vector2(Xpos,-10)
|
|
instance.speed = rng.randf_range(3,9)
|
|
instance.rotationSpeed = PI/16
|
|
|
|
|
|
func _on_area_2d_area_entered(_area: Area2D) -> void:
|
|
collision.emit()
|