PGRData/Script/matrix/xhome/xinfrastructure/XDeviceObject.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