|
if not const.cmtVisible then return end |
|
|
|
if FirstLoad then |
|
C_CCMT = false |
|
end |
|
|
|
function SetC_CCMT(val) |
|
if C_CCMT == val then |
|
return |
|
end |
|
C_CCMT_Reset() |
|
C_CCMT = val |
|
end |
|
|
|
function OnMsg.ChangeMap() |
|
C_CCMT_Reset() |
|
end |
|
|
|
MapVar("CMT_ToHide", {}) |
|
MapVar("CMT_ToUnhide", {}) |
|
MapVar("CMT_Hidden", {}) |
|
|
|
CMT_Time = 300 |
|
CMT_OpacitySleep = 10 |
|
CMT_OpacityStep = Max(1, MulDivRound(CMT_OpacitySleep, 100, CMT_Time)) |
|
|
|
if FirstLoad then |
|
g_CMTPaused = false |
|
g_CMTPauseReasons = {} |
|
end |
|
|
|
function CMT_SetPause(s, reason) |
|
if s then |
|
g_CMTPauseReasons[reason] = true |
|
g_CMTPaused = true |
|
else |
|
g_CMTPauseReasons[reason] = nil |
|
if not next(g_CMTPauseReasons) then |
|
g_CMTPaused = false |
|
end |
|
end |
|
end |
|
|
|
MapRealTimeRepeat( "CMT_V2_Thread", 0, function() |
|
Sleep(CMT_OpacitySleep) |
|
if g_CMTPaused then return end |
|
|
|
|
|
if C_CCMT then |
|
C_CCMT_Thread_Func(CMT_OpacityStep) |
|
else |
|
local opacity_step = CMT_OpacityStep |
|
|
|
for k,v in next, CMT_ToHide do |
|
if not IsValid(k) then |
|
CMT_ToHide[k] = nil |
|
else |
|
local next_opacity = k:GetOpacity() - opacity_step |
|
if next_opacity > 0 then |
|
k:SetOpacity(next_opacity) |
|
else |
|
k:SetOpacity(0) |
|
CMT_ToHide[k] = nil |
|
CMT_Hidden[k] = true |
|
end |
|
end |
|
end |
|
for k,v in next, CMT_ToUnhide do |
|
if not IsValid(k) then |
|
CMT_ToUnhide[k] = nil |
|
else |
|
local next_opacity = k:GetOpacity() + opacity_step |
|
if next_opacity < 100 then |
|
k:SetOpacity(next_opacity) |
|
else |
|
k:SetOpacity(100) |
|
k:ClearHierarchyGameFlags(const.gofSolidShadow + const.gofContourInner) |
|
CMT_ToUnhide[k] = nil |
|
end |
|
end |
|
end |
|
end |
|
|
|
|
|
end) |
|
|
|
function IsContourObject(obj) |
|
return const.SlabSizeX and IsKindOf(obj, "Slab") |
|
end |
|
|
|
function CMT(obj, b) |
|
if C_CCMT then |
|
C_CCMT_Hide(obj, not not b) |
|
return |
|
end |
|
|
|
if b then |
|
if CMT_ToHide[obj] or CMT_Hidden[obj] then return end |
|
if CMT_ToUnhide[obj] then |
|
CMT_ToUnhide[obj] = nil |
|
end |
|
CMT_ToHide[obj] = true |
|
obj:SetHierarchyGameFlags(const.gofSolidShadow) |
|
if IsContourObject(obj) then |
|
obj:SetHierarchyGameFlags(const.gofContourInner) |
|
end |
|
else |
|
if CMT_ToUnhide[obj] or not CMT_ToHide[obj] and not CMT_Hidden[obj] then return end |
|
if CMT_ToHide[obj] then |
|
CMT_ToHide[obj] = nil |
|
end |
|
if IsEditorActive() then |
|
obj:SetOpacity(100) |
|
obj:ClearHierarchyGameFlags(const.gofSolidShadow + const.gofContourInner) |
|
else |
|
CMT_ToUnhide[obj] = true |
|
end |
|
if CMT_Hidden[obj] then |
|
CMT_Hidden[obj] = nil |
|
end |
|
end |
|
end |
|
|
|
local function ShowAllKeyObjectsAndClearTable(table) |
|
for obj, _ in pairs(table) do |
|
if IsValid(obj) then |
|
obj:SetOpacity(100) |
|
obj:ClearHierarchyGameFlags(const.gofSolidShadow + const.gofContourInner) |
|
end |
|
table[obj] = nil |
|
end |
|
end |
|
|
|
function OnMsg.ChangeMapDone(map) |
|
if string.find(map, "MainMenu") then |
|
CMT_SetPause(true, "MainMenu") |
|
else |
|
CMT_SetPause(false, "MainMenu") |
|
end |
|
end |
|
|
|
function OnMsg.GameEnterEditor() |
|
C_CCMT_ShowAllAndReset() |
|
ShowAllKeyObjectsAndClearTable(CMT_ToHide) |
|
ShowAllKeyObjectsAndClearTable(CMT_ToUnhide) |
|
ShowAllKeyObjectsAndClearTable(CMT_Hidden) |
|
end |
|
|
|
function CMT_IsObjVisible(o) |
|
if not C_CCMT then |
|
return o:GetGameFlags(const.gofSolidShadow) == 0 or CMT_ToUnhide[o] |
|
else |
|
return C_CCMT_GetObjCMTState(o) < const.cmtHidden |
|
end |
|
end |
|
|