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