forked from endernon/PGRData
200 lines
No EOL
6.1 KiB
Lua
200 lines
No EOL
6.1 KiB
Lua
XDeviceObject = XClass(nil, "XDeviceObject")
|
|
|
|
DeviceCategory = {
|
|
Device = 1,
|
|
Slot = 2,
|
|
}
|
|
|
|
function XDeviceObject:Ctor(go, xRoomObj, cfg)
|
|
self.GameObject = go
|
|
self.Transform = go.transform
|
|
self.Parent = xRoomObj
|
|
|
|
self.DeviceCfg = cfg
|
|
self.DeviceType = cfg.Id
|
|
self.OpenUI = cfg.OpenUI
|
|
|
|
if self.DeviceType > XDataCenter.HostelManager.FunctionDeviceType.Unknown and
|
|
self.DeviceType < XDataCenter.HostelManager.FunctionDeviceType.FucEnd then
|
|
self.Category = DeviceCategory.Device
|
|
self.DeviceData = XDataCenter.HostelManager.GetFunctionDeviceData(self.DeviceType)
|
|
else
|
|
self.Category = DeviceCategory.Slot
|
|
self.DeviceData = XDataCenter.HostelManager.GetWorkCharBySlot(self.DeviceType)
|
|
end
|
|
|
|
XSceneEntityManager.AddEntity(self.GameObject, self)
|
|
|
|
self.GoInputHandler = self.Transform:GetComponent(typeof(CS.XGoInputHandler))
|
|
if not XTool.UObjIsNil(self.GoInputHandler) then
|
|
self.GoInputHandler:AddPointerClickListener(function() self:OnClick() end)
|
|
end
|
|
end
|
|
|
|
function XDeviceObject:Dispose()
|
|
XSceneEntityManager.RemoveEntity(self.GameObject)
|
|
|
|
if not XTool.UObjIsNil(self.GoInputHandler) then
|
|
self.GoInputHandler:RemoveAllListeners()
|
|
end
|
|
self.GoInputHandler = nil
|
|
|
|
if self.HudId then
|
|
local hud = XHudManager.GetDisplayHudByInstId(self.HudId)
|
|
if hud then
|
|
hud:Hide()
|
|
end
|
|
end
|
|
self.HudId = nil
|
|
|
|
self.GameObject = nil
|
|
self.Parent = nil
|
|
self.DeviceCfg = nil
|
|
self.OpenUI = nil
|
|
|
|
self.Category = nil
|
|
self.DeviceData = nil
|
|
end
|
|
|
|
function XDeviceObject:OnClick()
|
|
if self.Category == DeviceCategory.Slot then
|
|
local state = XDataCenter.HostelManager.GetWorkSlotState(self.DeviceType)
|
|
if state == XDataCenter.HostelManager.WorkSlotState.Lock then
|
|
XUiManager.TipText("HostelWorkSlotLock")
|
|
return
|
|
end
|
|
end
|
|
if XDataCenter.HostelManager.IsInVisitFriendHostel() then
|
|
self:ChangeViewToCurDevice()
|
|
return
|
|
else
|
|
local fCloseCallBack = function()
|
|
self.Parent:ChangeViewCurRoomView()
|
|
end
|
|
if self.DeviceType == XDataCenter.HostelManager.FunctionDeviceType.PowerStation then
|
|
local curVlue = XDataCenter.HostelManager.GetPowerStationSaveElectric()
|
|
if curVlue > 0 then
|
|
XDataCenter.HostelManager.ReqCollectPowerStationElectric(function()
|
|
local rewards = {}
|
|
table.insert(rewards, { TemplateId = XDataCenter.ItemManager.ItemId.HostelElectric, Count = curVlue })
|
|
|
|
XUiManager.OpenUiObtain(rewards, nil, function()
|
|
|
|
--使用新UI打开
|
|
XLuaUiManager.Open(self.OpenUI, self.DeviceType, self, fCloseCallBack)
|
|
|
|
self:ChangeViewToCurDevice()
|
|
|
|
end)
|
|
end)
|
|
return
|
|
else
|
|
--使用新UI打开
|
|
XLuaUiManager.Open(self.OpenUI, self.DeviceType, self, fCloseCallBack)
|
|
end
|
|
|
|
else
|
|
|
|
--使用新UI打开
|
|
XLuaUiManager.Open(self.OpenUI, fCloseCallBack)
|
|
|
|
end
|
|
end
|
|
self:ChangeViewToCurDevice()
|
|
end
|
|
|
|
function XDeviceObject:ChangeViewToCurDevice()
|
|
local cameraCtrl = XHomeSceneManager.GetSceneCameraController()
|
|
if cameraCtrl then
|
|
XCameraHelper.SetCameraTarget(cameraCtrl, self.GameObject.transform, 3)
|
|
cameraCtrl:SetWorldOffset(CS.UnityEngine.Vector2.zero)
|
|
cameraCtrl.AllowDrag = false
|
|
end
|
|
|
|
XHomeSceneManager.ChangeView(HomeSceneViewType.DeviceView)
|
|
end
|
|
|
|
function XDeviceObject:OnBeginDrag()
|
|
--
|
|
end
|
|
|
|
function XDeviceObject:OnEndDrag()
|
|
--
|
|
end
|
|
|
|
function XDeviceObject:OnDrag()
|
|
--
|
|
end
|
|
|
|
function XDeviceObject:CheckShowHud()
|
|
if self.Category == DeviceCategory.Device then
|
|
if not XDataCenter.HostelManager.IsInVisitFriendHostel() then
|
|
if self.DeviceType == XDataCenter.HostelManager.FunctionDeviceType.PowerStation then
|
|
self:ShowHud(UiHudType.DeviceState, { Type = self.DeviceType })
|
|
end
|
|
end
|
|
--TODO
|
|
elseif self.Category == DeviceCategory.Slot then
|
|
if XDataCenter.HostelManager.IsInVisitFriendHostel() then
|
|
return
|
|
end
|
|
local state, time = XDataCenter.HostelManager.GetWorkSlotState(self.DeviceType)
|
|
if time and time > 0 then
|
|
self:ShowHud(UiHudType.CoolTime, { Time = time, CallBack = function()
|
|
self:CheckShowHud()
|
|
end })
|
|
else
|
|
self:ShowHud(UiHudType.WorkSlotState, { State = state, Slot = self.DeviceType, fClickComplete = function()
|
|
XDataCenter.HostelManager.ReqCollectSlotProduct(self.DeviceType, function(charId, rewards)
|
|
self:CheckShowHud()
|
|
--CS.XUiManager.DialogManager:Push("UiHostelMissionComplete", false, false, charId, rewards)
|
|
XLuaUiManager.Open("UiHostelMissionComplete", charId, rewards)
|
|
end)
|
|
end,
|
|
fClickAdd = function()
|
|
self:OnClick()
|
|
end })
|
|
end
|
|
end
|
|
end
|
|
|
|
function XDeviceObject:ShowHud(hudType, data)
|
|
local hud = nil
|
|
if self.HudId then
|
|
local oldHud = XHudManager.GetDisplayHudByInstId(self.HudId)
|
|
if oldHud then
|
|
if oldHud.HudType == hudType then
|
|
hud = oldHud
|
|
else
|
|
oldHud:Hide()
|
|
end
|
|
end
|
|
end
|
|
|
|
if not hud then
|
|
hud = XHudManager.GetHud(hudType)
|
|
self.HudId = hud.InstId
|
|
end
|
|
data.Cfg = XDataCenter.HostelManager.GetHudTemplate(hudType, self.DeviceType)
|
|
hud:SetMetaData(data)
|
|
local camera = XHomeSceneManager.GetSceneCamera()
|
|
hud:SetFollowTarget(self.Transform, camera)
|
|
end
|
|
|
|
function XDeviceObject:GetDisplayHud()
|
|
if self.HudId then
|
|
return XHudManager.GetDisplayHudByInstId(self.HudId)
|
|
else
|
|
return nil
|
|
end
|
|
end
|
|
|
|
function XDeviceObject:HideHud()
|
|
if self.HudId then
|
|
local hud = XHudManager.GetDisplayHudByInstId(self.HudId)
|
|
if hud then
|
|
hud:Hide()
|
|
end
|
|
end
|
|
self.HudId = nil
|
|
end |