Files
Endfield-Data/LuaScripts/UI/Widgets/SSRoomInfoPanel.lua
2025-12-02 20:37:18 +07:00

127 lines
4.4 KiB
Lua

local SSStatusBarBase = require_ex('UI/Widgets/SSStatusBarBase')
SSRoomInfoPanel = HL.Class('SSRoomInfoPanel', SSStatusBarBase)
local RoomState = CS.Beyond.Gameplay.SpaceshipSystem.RoomState
SSRoomInfoPanel.m_roomType = HL.Field(GEnums.SpaceshipRoomType)
local STATE_VAL = {
Making = "Making",
PendingCollection = "PendingCollection",
Stopping = "Stopping",
Freeing = "Freeing",
CluesCollecting = "CluesCollecting",
PendingCollectionClues = "PendingCollectionClues",
Moving = "Moving",
PendingBuild = "PendingBuild",
UnOpen = "UnOpen",
Growing = "Growing",
None = "None",
}
local STATUS_BAR_CONST = {
ANIMATOR_STATE_VAL = {
[RoomState.Locked] = 0,
[RoomState.NotBuild] = 1,
[RoomState.Working] = 2,
[RoomState.CanCollect] = 3,
[RoomState.Stopped] = 4,
[RoomState.Idle] = 5,
},
ANIMATOR_STATE_NAME = "state",
ROOM_TYPE_VAL = {
[GEnums.SpaceshipRoomType.ManufacturingStation] = "ManufacturingStation",
[GEnums.SpaceshipRoomType.GuestRoom] = "GuestRoom",
[GEnums.SpaceshipRoomType.CommandCenter] = "CommandCenter",
[GEnums.SpaceshipRoomType.FlexibleTypeA] = "FlexibleTypeA",
[GEnums.SpaceshipRoomType.FlexibleTypeB] = "FlexibleTypeB",
[GEnums.SpaceshipRoomType.GrowCabin] = "GrowCabin",
},
ROOM_TYPE_STATE_VAL = {
[GEnums.SpaceshipRoomType.ManufacturingStation] = {
[RoomState.Locked] = STATE_VAL.UnOpen,
[RoomState.NotBuild] = STATE_VAL.PendingBuild,
[RoomState.Working] = STATE_VAL.Making,
[RoomState.CanCollect] = STATE_VAL.PendingCollection,
[RoomState.Stopped] = STATE_VAL.Stopping,
[RoomState.Idle] = STATE_VAL.Freeing,
},
[GEnums.SpaceshipRoomType.GrowCabin] = {
[RoomState.Locked] = STATE_VAL.UnOpen,
[RoomState.NotBuild] = STATE_VAL.PendingBuild,
[RoomState.Working] = STATE_VAL.Growing,
[RoomState.CanCollect] = STATE_VAL.PendingCollection,
[RoomState.Stopped] = STATE_VAL.Stopping,
[RoomState.Idle] = STATE_VAL.Freeing,
},
[GEnums.SpaceshipRoomType.GuestRoom] = {
[RoomState.Locked] = STATE_VAL.None,
[RoomState.NotBuild] = STATE_VAL.None,
[RoomState.Working] = STATE_VAL.None,
[RoomState.CanCollect] = STATE_VAL.None,
[RoomState.Stopped] = STATE_VAL.None,
[RoomState.Idle] = STATE_VAL.None,
},
[GEnums.SpaceshipRoomType.CommandCenter] = {
[RoomState.Locked] = STATE_VAL.None,
[RoomState.NotBuild] = STATE_VAL.None,
[RoomState.Working] = STATE_VAL.None,
[RoomState.CanCollect] = STATE_VAL.None,
[RoomState.Stopped] = STATE_VAL.None,
[RoomState.Idle] = STATE_VAL.None,
},
[GEnums.SpaceshipRoomType.FlexibleTypeA] = {
[RoomState.Locked] = STATE_VAL.UnOpen,
[RoomState.NotBuild] = STATE_VAL.PendingBuild,
},
[GEnums.SpaceshipRoomType.FlexibleTypeB] = {
[RoomState.Locked] = STATE_VAL.UnOpen,
[RoomState.NotBuild] = STATE_VAL.PendingBuild,
},
}
}
SSRoomInfoPanel.SetupSwitchStateHandleFunctions = HL.Override() << function(self)
self.m_stateHandleFuncLut = {}
end
SSRoomInfoPanel.DefaultStateHandle = HL.Override(HL.String, CS.Beyond.Gameplay.SpaceshipSystem.RoomState) << function(self, roomId, roomState)
self:SetupView()
self.view.content:SetState(STATUS_BAR_CONST.ROOM_TYPE_VAL[self.m_roomType])
self.view.statusNode:SetState(STATUS_BAR_CONST.ROOM_TYPE_STATE_VAL[self.m_roomType][roomState])
self.view.statusBar:SetInteger(STATUS_BAR_CONST.ANIMATOR_STATE_NAME, STATUS_BAR_CONST.ANIMATOR_STATE_VAL[roomState])
local hasValue, roomInfo = GameInstance.player.spaceship:TryGetRoom(roomId)
if hasValue then
self.view.titleText.text = SpaceshipUtils.getFormatCabinSerialNum(roomId, roomInfo.serialNum)
end
end
SSRoomInfoPanel.SetupView = HL.Override() << function(self)
local hasValue, roomInfo = GameInstance.player.spaceship:TryGetRoom(self.m_roomId)
if not hasValue or not roomInfo then
local emptyRoomData = Tables.spaceshipEmptyRoomTable[self.m_roomId]
self.m_roomType = emptyRoomData.roomType
else
self.m_roomType = roomInfo.roomType
end
end
HL.Commit(SSRoomInfoPanel)
return SSRoomInfoPanel