Initial commit

This commit is contained in:
2026-01-21 23:51:53 +01:00
commit 60b208fee0
1703 changed files with 100223 additions and 0 deletions

View File

@@ -0,0 +1,17 @@
extends Node3D
class_name BasicRoom
@export var SpaceshipLogicRef: ShipLogic = null
@export var Lights: Array[Light3D]
func _ready() -> void:
if !SpaceshipLogicRef: SpaceshipLogicRef = owner
if SpaceshipLogicRef: SpaceshipLogicRef.addRoomToRoomList(self)
func _process(_delta: float) -> void:
pass
func showLights(LightStatus: bool):
for light in Lights:
if light: light.visible = LightStatus

View File

@@ -0,0 +1 @@
uid://lmn08s8c5lfo

View File

@@ -0,0 +1,54 @@
extends BasicRoom
class_name ControlRoom
@onready var steeringMinigame = $Monitor/SubViewport/SteeringMinigame
@onready var lightswitch = $LightSwitch/ButtonLogicToggleLightswitch
@onready var switchPivot = $LightSwitch/SwitchPivot
@onready var light = $OmniLight3D
@export var controllStick: Node3D
@export var shipConditionDisplayNumber: int = 100
@onready var shipConditionNumberLabel = $Monitor_001/SubViewport2/Control/ShipConditionNumber
@onready var shipConditionNumberLabelSettings = shipConditionNumberLabel.label_settings
func _ready() -> void:
if controllStick:
controllStick.get_child(0).onPressed.connect(controllLeverPressed)
steeringMinigame.collision.connect(onAstroidCollision)
steeringMinigame.controllStick = controllStick
func _process(_delta: float) -> void:
if shipConditionNumberLabel.label_settings:
if shipConditionDisplayNumber >70:
shipConditionNumberLabelSettings.font_color = Color.GREEN
elif shipConditionDisplayNumber <=30:
shipConditionNumberLabelSettings.font_color = Color.RED
else:
shipConditionNumberLabelSettings.font_color = Color.YELLOW
if lightswitch.state:
switchPivot.rotation.x = deg_to_rad(0)
else:
switchPivot.rotation.x = deg_to_rad(17)
if SpaceshipLogicRef:
if SpaceshipLogicRef.power:
light.visible = lightswitch.state
else:
light.visible = SpaceshipLogicRef.power
else:
return
if !SpaceshipLogicRef.shipFuel:
steeringMinigame.active = false
shipConditionNumberLabel.text = str(shipConditionDisplayNumber) + "%"
func controllLeverPressed():
steeringMinigame.activate()
func onAstroidCollision():
if SpaceshipLogicRef:
SpaceshipLogicRef.collisionWithAstroid()

View File

@@ -0,0 +1 @@
uid://b6rr4vk4esf3s

View File

@@ -0,0 +1,6 @@
extends BasicRoom
class_name CorridorDeadEnd
var gridSlots: Array[Vector2] = [Vector2(0,0),Vector2(1,0)]
var doorSlots: Array[Vector3] = [Vector3(0,0,3)]
var scenePath = "res://SpaceshipRooms/Corridors/CorridorDeadEnd.tscn"

View File

@@ -0,0 +1 @@
uid://cww7fnikeau22

View File

@@ -0,0 +1,38 @@
extends BasicRoom
class_name CorridorDeadEndBreakable
@onready var wallShard: MeshInstance3D = $WallShard
var broken: bool = false
@onready var interactBox: InteractBox = $InteractBox
@onready var holeProximety = $Area3D
var repairCube: Area3D
var toolBox: bool = false
var interacted: bool = false
func updateWallVisibility(status: bool):
broken = !status
wallShard.visible = status
func _process(_delta: float) -> void:
repairCube = null
toolBox = false
var objectsProxy: Array[Area3D] = holeProximety.get_overlapping_areas()
for obj in objectsProxy:
if obj.type == "RepairCube":
repairCube = obj
if obj.type == "ToolBox":
toolBox = true
if repairCube and toolBox and interacted:
updateWallVisibility(true)
interacted = false
repairCube.get_parent().queue_free()
SpaceshipLogicRef.hullBreached = false
func _on_interact_box_interacted_with(_playerRef: PlayerCharacter) -> void:
interacted = true
#Needs to be replaced with a repair minigame/ progress bar later

View File

@@ -0,0 +1 @@
uid://or6760ji86d2

View File

@@ -0,0 +1,6 @@
extends BasicRoom
class_name CorridorFourWay
var gridSlots: Array[Vector2] = [Vector2(0,0),Vector2(1,0),Vector2(1,1),Vector2(1,-1),Vector2(2,0)]
var doorSlots: Array[Vector3] = [Vector3(0,0,3),Vector3(2,0,1),Vector3(1,-1,4),Vector3(1,1,2)]
var scenePath = "res://SpaceshipRooms/Corridors/CorridorLong.tscn"

View File

@@ -0,0 +1 @@
uid://pht6y700mip7

View File

@@ -0,0 +1,6 @@
extends BasicRoom
class_name CorridorLTurn
var gridSlots: Array[Vector2] = [Vector2(0,0),Vector2(1,0),Vector2(1,-1)]
var doorSlots: Array[Vector3] = [Vector3(0,0,3),Vector3(1,-1,4)]
var scenePath = "res://SpaceshipRooms/Corridors/CorridorLTurn.tscn"

View File

@@ -0,0 +1 @@
uid://77bdmv1wl21

View File

@@ -0,0 +1,6 @@
extends BasicRoom
class_name CorridorLong
var gridSlots: Array[Vector2] = [Vector2(0,0),Vector2(1,0),Vector2(2,0)]
var doorSlots: Array[Vector3] = [Vector3(0,0,3),Vector3(2,0,1)]
var scenePath = "res://SpaceshipRooms/Corridors/CorridorLong.tscn"

View File

@@ -0,0 +1 @@
uid://dq1ol2epo2186

View File

@@ -0,0 +1,6 @@
extends BasicRoom
class_name CorridorShort
var gridSlots: Array[Vector2] = [Vector2(0,0),Vector2(1,0)]
var doorSlots: Array[Vector3] = [Vector3(0,0,3),Vector3(1,0,1)]
var scenePath = "res://SpaceshipRooms/Corridors/CorridorShort.tscn"

View File

@@ -0,0 +1 @@
uid://b808bc8l22smt

View File

@@ -0,0 +1,6 @@
extends BasicRoom
class_name CorridorTTurn
var gridSlots: Array[Vector2] = [Vector2(0,0),Vector2(1,0),Vector2(1,1),Vector2(1,-1)]
var doorSlots: Array[Vector3] = [Vector3(0,0,3),Vector3(1,1,2),Vector3(1,-1,4)]
var scenePath = "res://SpaceshipRooms/Corridors/CorridorTTurn.tscn"

View File

@@ -0,0 +1 @@
uid://dod3myner76oy

View File

@@ -0,0 +1,50 @@
extends BasicRoom
class_name FuelTank
@onready var elevatorButtonTop: ButtonLogicImpulse = $ButtonBase/ButtonLogicImpulse
@onready var elevatorButtonBottom: ButtonLogicImpulse = $ButtonBase_001/ButtonLogicImpulse01
@onready var elevator: MeshInstance3D = $ElevatorPlattform # y Pos 6.7 is top; -0.2 is Bottom
var fuel: float = 100.0
var fuelDrainRate: float = 0.3
var canisterFillRate: float = 8.3
@onready var fuelMesh: MeshInstance3D = $Fuel
@onready var fuelInputArea = $FuelInput/FuelInputArea
var fuelCannistersInArea: Array[GrabBox]
var elevatorDestination: bool = true #True is Up, False is Down
var elevatorSpeed: float = 2 #Units/seccond
func _ready() -> void:
elevatorButtonTop.onPressed.connect(elevatorButtonPressed)
elevatorButtonBottom.onPressed.connect(elevatorButtonPressed)
func _process(delta: float) -> void:
if elevatorDestination:
elevator.position.y = clamp(elevator.position.y + elevatorSpeed*delta,-0.2,6.7)
else:
elevator.position.y = clamp(elevator.position.y - elevatorSpeed*delta,-0.2,6.7)
fuelCannistersInArea = getFuelCanisters(fuelInputArea)
fuel = clamp(fuel - fuelDrainRate*delta,0,100)
fuel = clamp(fuel + canisterFillRate*fuelCannistersInArea.size()*delta,0,100)
fuelMesh.scale.y = fuel/100
if SpaceshipLogicRef:
SpaceshipLogicRef.shipFuel = fuel
func elevatorButtonPressed():
elevatorDestination = !elevatorDestination
func getFuelCanisters(Area: Area3D) -> Array[GrabBox]:
var overlappingAreas: Array[Area3D] = Area.get_overlapping_areas()
var returnArray: Array[GrabBox]
for a in overlappingAreas:
if typeof(a == GrabBox):
if a.type == "FuelCanister":
returnArray.push_back(a)
return returnArray

View File

@@ -0,0 +1 @@
uid://bxnqx1moj7bb3

View File

@@ -0,0 +1,53 @@
extends BasicRoom
class_name Generator
@onready var SocketL: Area3D = $SocketL
@onready var SocketR: Area3D = $SocketR
@onready var SocketLPivot: Node3D = $SocketL/CellPivot
@onready var SocketRPivot: Node3D = $SocketR/CellPivot
var SocketLPowerCell: GrabableObject
var SocketRPowerCell: GrabableObject
func _process(_delta: float) -> void:
if SocketLPowerCell:
if SocketLPowerCell.isGrabbed:
SocketLPowerCell = null
if SocketRPowerCell:
if SocketRPowerCell.isGrabbed:
SocketRPowerCell = null
grabCell(SocketL,SocketLPowerCell,SocketLPivot)
grabCell(SocketR,SocketRPowerCell,SocketRPivot)
if !SpaceshipLogicRef: return
if !SocketLPowerCell and !SocketRPowerCell:
SpaceshipLogicRef.power = false
SpaceshipLogicRef.updateLights()
else:
SpaceshipLogicRef.power = true
SpaceshipLogicRef.updateLights()
func grabCell(Socket: Area3D, SocketCell: GrabableObject, SocketPivot: Node3D):
if Socket.has_overlapping_areas() and !SocketCell:
var potentialCell = getPowerCells(Socket)
if potentialCell: potentialCell = potentialCell.obj
else: return
if potentialCell.freeze == true: return
if !potentialCell.isGrabbed:
SocketCell = potentialCell
if Socket == SocketL: SocketLPowerCell = potentialCell
elif Socket == SocketR: SocketRPowerCell = potentialCell
SocketCell.freeze = true
SocketCell.global_position = SocketPivot.global_position
SocketCell.global_rotation = SocketPivot.global_rotation
func getPowerCells(Area: Area3D) -> GrabBox:
var overlappingAreas: Array[Area3D] = Area.get_overlapping_areas()
for a in overlappingAreas:
if typeof(a == GrabBox):
if a.type == "PowerCell":
return a
return null

View File

@@ -0,0 +1 @@
uid://6loaamrfhwdc

View File

@@ -0,0 +1,2 @@
extends BasicRoom
class_name Starter

View File

@@ -0,0 +1 @@
uid://enftc34b0t86

View File

@@ -0,0 +1,2 @@
extends BasicRoom
class_name Storage

View File

@@ -0,0 +1 @@
uid://cjo45t3oyu42p