cosmic/scripts/Star System/star_system.gd
2024-06-08 13:21:45 +03:00

83 lines
2.3 KiB
GDScript

extends Node
class_name StarSystem
@onready var fact_player = $FactionPlayer
@onready var fact_peaceful = $FactionPeaceful
@onready var fact_neutral = $FactionNeutral
@onready var fact_aggressive = $FactionAggressive
## Width of the system. Limits stars generation and camera bounds
@export var width: int = 8192
## Height of the system. Limits stars generation and camera bounds
@export var height: int = 8192
## Pause controller packed scene
@export var pause_controller_scene: PackedScene
## Node which is colliding with mouse
var targeted_node: Node2D = null
## Player ship reference. May be null.
var player_ship: PlayerShip
## Pause controller reference
var pause_controller: Control
## All bases in the system
var bases: Array[Base]
func _ready():
player_ship = get_node_or_null("FactionPlayer/PlayerShip")
pause_controller = pause_controller_scene.instantiate()
if player_ship != null:
# adjust player ship camera if player ship exists
player_ship.camera.limit_left = -width / 2
player_ship.camera.limit_right = width / 2
player_ship.camera.limit_top = -height / 2
player_ship.camera.limit_bottom = height / 2
# add pause controller child to the gui
player_ship.colorable_gui.add_child(pause_controller)
else:
# or add it to root node lol
add_child(pause_controller)
pause_controller.visible = false
## Pause the game. Remember to unpause it when switching scenes!
func pause():
get_tree().paused = true
pause_controller.visible = true
## Unpause the game.
func unpause():
get_tree().paused = false
pause_controller.visible = false
func _process(_delta):
# pausing
if Input.is_action_just_released("pause"):
unpause() if get_tree().paused else pause()
func set_targeted_node(node):
targeted_node = node
func clear_targeted_node():
targeted_node = null
## Returns base with given name
func find_base_by_name(base_name: String) -> Base:
for base in bases:
if base.base_name == base_name:
return base
return null
## Progress by elimination quest if destroyed ship is of required type
func on_ship_destroyed(ship: Ship):
if player_ship == null:
return
if player_ship.quest == null:
return
if player_ship.quest.type != Quest.Type.Elimination:
return
if player_ship.quest.data["target_class"] == ship.id:
player_ship.quest.do_progress()