85 lines
2.3 KiB
GDScript
85 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]
|
|
## All ships in the system (excluding player ship)
|
|
var ships: Array[Ship]
|
|
|
|
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()
|