extends Node const GENERATOR := preload("res://scripts/levels/distant_sector_generator.gd") var game: Node2D var _status: Label var _refresh := 0.0 func _ready() -> void: name = "DistantSector" var map: Dictionary = GameState.active_distant_map game.system_data = GENERATOR.generate(map) game.player.position = Vector2.ZERO var camera: Camera2D = game.player.get_node("Camera2D") camera.limit_left = -2600 camera.limit_right = 2600 camera.limit_top = -1800 camera.limit_bottom = 1800 for data in game.system_data.enemies: if int(data.tier) == 2: game._pending_boss = data.duplicate() else: game._spawn_enemy(data,data.position) _build_structures() var expeditions := Node.new() expeditions.set_script(preload("res://scripts/planets/expedition_controller.gd")) expeditions.game = game expeditions.player = game.player game.add_child(expeditions) var panel := PanelContainer.new() panel.name = "DistantStatusPanel" game.get_node("HUD/HUDRoot").add_child(panel) panel.set_anchors_and_offsets_preset(Control.PRESET_CENTER_TOP) panel.offset_left = -195 panel.offset_right = 195 panel.offset_top = 120 panel.offset_bottom = 190 var ui := preload("res://scripts/planets/freighter_menu.gd") ui.style(panel,8,0.5) var column := VBoxContainer.new() panel.add_child(column) _status = ui.label(column,"",12,Color("e9b4fc")) _update_status() if GameState.distant_warp_arrival: GameState.distant_warp_arrival = false var arrival := CanvasLayer.new() arrival.name = "WarpArrival" arrival.layer = 100 game.add_child(arrival) var fade := ColorRect.new() fade.color = Color("04070cff") fade.mouse_filter = Control.MOUSE_FILTER_IGNORE fade.set_anchors_and_offsets_preset(Control.PRESET_FULL_RECT) arrival.add_child(fade) var tween := fade.create_tween() tween.tween_property(fade,"color:a",0.0,0.55) tween.tween_callback(arrival.queue_free) func _build_structures() -> void: var group := Node2D.new() group.name = "AncientStructures" group.z_index = -8 game.add_child(group) for data in game.system_data.structures: var sprite := Sprite2D.new() sprite.texture = load("res://assets/expeditions/%s.png" % ["ancient_gate","abandoned_relay","freighter_wreck"][group.get_child_count()/2 % 3]) sprite.position = data.position sprite.rotation = data.rotation if sprite.texture != null: sprite.scale = Vector2.ONE * float(data.size) / maxf(sprite.texture.get_width(),sprite.texture.get_height()) group.add_child(sprite) var label := Label.new() label.text = str(data.name) label.position = data.position+Vector2(-150,float(data.size)*0.4) label.size.x = 300 label.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER label.add_theme_font_size_override("font_size",12) label.modulate = Color("8da9ae") group.add_child(label) func _physics_process(delta: float) -> void: if game._transitioning or bool(game.player.get("_is_destroyed")): return if not game.system_cleared and game.get_remaining_enemies() == 0: if not game._boss_spawned and not game._pending_boss.is_empty(): game._spawn_boss() else: game.system_cleared = true _refresh += delta if _refresh >= 0.2: _refresh = 0 _update_status() func return_blocked() -> bool: if float(game.player.get("landing_combat_lock")) > 0: return true for enemy in get_tree().get_nodes_in_group("enemies"): if not enemy.is_queued_for_deletion() and float(enemy.get("hull")) > 0 and enemy.global_position.distance_to(game.player.global_position) < 650: return true return false func _update_status() -> void: _status.text = "WYPRAWA %d · %s" % [GameState.system_level,"SEKTOR OCZYSZCZONY" if game.system_cleared else ("BOSS" if game._boss_spawned else "%d wrogów" % game.get_remaining_enemies())] func _return_home() -> bool: var controller := game.get_node_or_null("PlanetExpeditions") if controller == null or not is_instance_valid(controller.screen) or not game.player.is_docked: return false if not preload("res://scripts/planets/orbital_contact_range.gd").at_freighter(game.player, controller.freighter): return false if game._transitioning or bool(game.player.get("_is_destroyed")) or return_blocked(): return false game._transitioning = true _load_home.call_deferred() return true func _load_home() -> void: var bastion_used := GameState.hull_bastion_used var active: Dictionary = GameState.active_distant_map.duplicate(true) var home: Dictionary = GameState.distant_home.duplicate(true) var level := GameState.system_level var seed_value := GameState.system_seed game.player.get_node("ShipInventory").preserve_for_restart() GameState.restore_distant_home() GameState.return_to_freighter = true var error := get_tree().reload_current_scene() if error != OK: GameState.hull_bastion_used = bastion_used GameState.return_to_freighter = false GameState.active_distant_map = active GameState.distant_home = home GameState.system_level = level GameState.system_seed = seed_value GameState.restart_inventory.clear() game._transitioning = false