ChronoSpace/scenes/spaceShip/player/player.gd

178 lines
6 KiB
GDScript

class_name Player extends "res://scenes/spaceShip/spaceShip.gd"
@onready var timeGhostScene = preload("res://scenes/spaceShip/timeGhost/timeghost.tscn")
@onready var dashCooldown = $dashCooldown
@onready var selfHealTimer = $selfHealTimer
@onready var selfHealCountdownTimer = $selfHealCountdownTimer
@onready var progressBarHealth = $Camera2D/CanvasLayer/Control/VBoxContainer/HealthUi/ProgressBarHealth
@onready var progressBarSpeed = $Camera2D/CanvasLayer/Control/VBoxContainer/SpeedUi/ProgressBarSpeed
@onready var progressBarDashCooldown = $Camera2D/CanvasLayer/Control/VBoxContainer/DashCooldownUi/ProgressBarDashCooldown
@onready var progressBarWeaponCooldown = $Camera2D/CanvasLayer/Control/VBoxContainer/WeaponCooldown/ProgressBarWeaponCooldown
@onready var labelWaveInfo = $Camera2D/CanvasLayer/Control/HBoxContainer/HBoxContainer/LabelWaveInfo
@onready var labelWaveEnemiesInfo = $Camera2D/CanvasLayer/Control/HBoxContainer/HBoxContainer2/LabelWaveEnemiesInfo
@onready var labelWaveDestroyedInfo = $Camera2D/CanvasLayer/Control/HBoxContainer/HBoxContainer3/LabelWaveDestroyedInfo
@onready var upgradeChooser = $Camera2D/CanvasLayer/Control/UpgradeChooser
@onready var hit = $hit
@onready var input = $Camera2D/CanvasLayer/Control/Input
@export var spawnDistance: int = 5000
var maxSpeedMult: float = 3
var maxAcceleration: float = 1
var speedMult: float = 1
var damageMult: float = 1
var dashUnlocked: bool = false
var strifeUnlocked: bool = false
var selfHealUnlocked: bool = false
func _ready() -> void:
if Globals.touchscreen:
input.show()
progressBarHealth.max_value = maxHealth
progressBarSpeed.max_value = speed / 2
progressBarDashCooldown.max_value = dashCooldown.wait_time
randomize()
changeWeapon(SHOTGUN)
progressBarWeaponCooldown.max_value = weapon.cooldown
shortInvincibility()
await get_tree().create_timer(Globals.currentDelay).timeout
addGhost()
newUpgrade()
Globals.waveComplete.connect(newUpgrade)
func _physics_process(delta: float) -> void:
#if Input.is_action_pressed("attack"):
#attack()
#
#look_at(get_global_mouse_position())
#rotation += PI / 2
#var direction = Vector2.UP.normalized().rotated(rotation) * Input.get_action_strength("moveForward")
##Input.get_vector("moveForward", "moveBackward").normalized().rotated(rotation)
#if Input.is_action_just_pressed("dash") and dashCooldown.is_stopped():
#dash()
#velocity = velocity.lerp(direction * speed, acceleration * delta)
#move_and_slide()
#if timeGhost != null:
#moveTimeGhost(global_position, rotation)
if Input.is_action_pressed("attack"):
attack()
var controllerDirection = Input.get_vector("lookLeft", "lookRight", "lookForward", "lookDown")
controllerDirection
if controllerDirection == Vector2.ZERO:
look_at(get_global_mouse_position())
else:
look_at(global_position+controllerDirection)
rotation += PI / 2
var direction: Vector2
#if strifeUnlocked:
#direction = Input.get_vector("moveLeft", "moveRight", "moveForward", "moveBackward").normalized().rotated(rotation)
if Globals.touchscreen:
if Input.is_action_pressed("touchscreenForward"):
direction = Vector2.UP.normalized().rotated(rotation) * Input.get_action_strength("touchscreenForward")
else:
direction = Vector2.UP.normalized().rotated(rotation) * Input.get_action_strength("moveForward")
if Input.is_action_just_pressed("dash") and dashCooldown.is_stopped() and dashUnlocked:
dash()
#if Input.is_action_pressed("moveForward") or Input.is_action_pressed("moveLeft") or Input.is_action_pressed("moveRight"):
if Input.is_action_pressed("moveForward") or Input.is_action_pressed("touchscreenForward"):
velocity = velocity.lerp(direction * speed * speedMult, 1 * delta)
move_and_slide()
if timeGhost != null:
moveTimeGhost(global_position, rotation)
setInterface()
func _on_hurt_area_hurt(amount: int) -> void:
damage(amount)
hit.play()
$Camera2D.shake(0.5, 5.0)
if selfHealUnlocked:
selfHealTimer.stop()
selfHealCountdownTimer.start()
func dash():
shortInvincibility()
dashCooldown.start()
global_position += Vector2.UP.rotated(rotation) * 1000
func getRandomSpawnPointPosition() -> Vector2:
var rng = RandomNumberGenerator.new()
return global_position + Vector2.UP.rotated(deg_to_rad(rng.randi_range(0, 360))) * spawnDistance
func addGhost():
var _timeGhost = timeGhostScene.instantiate()
get_tree().get_first_node_in_group("timeGhostPool").add_child(_timeGhost)
addTimeGhost(_timeGhost)
func unlockDash():
dashUnlocked = true
func unlockStrife():
strifeUnlocked = true
func _on_self_heal_countdown_timeout() -> void:
selfHealTimer.start()
func _on_self_heal_timer_timeout() -> void:
if health >= maxHealth:
selfHealTimer.stop()
else:
heal(1)
selfHealTimer.start()
func setInterface():
if dashUnlocked:
$Camera2D/CanvasLayer/Control/VBoxContainer/DashCooldownUi.visible = true
progressBarHealth.value = Globals.getPlayer().health
progressBarSpeed.value = getVelocityMedian()
if dashCooldown.is_stopped():
progressBarDashCooldown.value = 0
else:
progressBarDashCooldown.value = dashCooldown.wait_time - dashCooldown.time_left
if weapon != null:
progressBarWeaponCooldown.value = weapon.cooldownTimer.wait_time - weapon.cooldownTimer.time_left
labelWaveInfo.text = str(Globals.currentWave)
labelWaveEnemiesInfo.text = str(Globals.enemyCount)
labelWaveDestroyedInfo.text = str(Globals.destroyedShips)
func getVelocityMedian() -> float:
var _velocity = velocity
if _velocity.x < 0:
_velocity.x *= -1
if _velocity.y < 0:
_velocity.y *= -1
return (_velocity.x + _velocity.y) / 2
func newUpgrade():
get_tree().paused = true
upgradeChooser.showUpgrades()
func addSpeedMult(mult: float):
if speedMult * mult > maxSpeedMult:
speedMult = maxSpeedMult
Globals.removeSpeedUPgrade()
else:
speedMult *= mult
func switchToMinigun():
changeWeapon(MINIGUN)
progressBarWeaponCooldown.max_value = weapon.cooldown
func switchToShotgun():
changeWeapon(SHOTGUN)
progressBarWeaponCooldown.max_value = weapon.cooldown
func switchToRailgun():
changeWeapon(RAILGUN)
progressBarWeaponCooldown.max_value = weapon.cooldown