Clients/Client2018/content/internal/AppShell/Modules/Shell/AvatarEditorScreen.lua

130 lines
4.6 KiB
Lua

local CoreGui = game:GetService('CoreGui')
local GuiRoot = CoreGui:FindFirstChild('RobloxGui')
local Modules = GuiRoot:FindFirstChild('Modules')
local AppState = require(Modules.LuaApp.Legacy.AvatarEditor.AppState)
local Utilities = require(Modules.LuaApp.Legacy.AvatarEditor.Utilities)
local TweenController = require(Modules.LuaApp.Legacy.AvatarEditor.TweenInstanceController)
local ShellModules = Modules:FindFirstChild('Shell')
local BaseScreen = require(ShellModules:FindFirstChild('BaseScreen'))
local Analytics = require(ShellModules:FindFirstChild('Analytics'))
local CameraManager = require(ShellModules:FindFirstChild('CameraManager'))
local CreateAvatarEditorView = require(ShellModules:FindFirstChild('AvatarEditorView'))
local EventHub = require(ShellModules:FindFirstChild('EventHub'))
local AppContainer = require(ShellModules.AppContainer)
local TitleSafeContainer = AppContainer.TitleSafeContainer
local ThirdPartyUserService = nil
pcall(function() ThirdPartyUserService = game:GetService('ThirdPartyUserService') end)
local AvatarEditorView = nil
local AvatarEditorReconstruct = false
local function createAvatarEditorScreen()
local this = BaseScreen()
this.fixPosition = true
local view = this.GetView()
view.BackImage.ZIndex = 2
view.BackText.ZIndex = 2
view.TitleText.ZIndex = 2
local adjustPos = UDim2.new(0, TitleSafeContainer.AbsolutePosition.X, 0, TitleSafeContainer.AbsolutePosition.Y)
local backImagePosition = view.BackImage.Position + adjustPos
local backTextPosition = view.BackText.Position + adjustPos
local titleTextPosition = view.TitleText.Position + adjustPos
view.BackImage.Position = backImagePosition
view.BackText.Position = backTextPosition
view.TitleText.Position = titleTextPosition
--Reconstruct the AvatarEditorView if user switched/assets purchased
if AvatarEditorReconstruct and AvatarEditorView then
AvatarEditorView:Destruct()
AvatarEditorView = nil
AvatarEditorReconstruct = false
end
AvatarEditorView = AvatarEditorView or CreateAvatarEditorView()
local storeChangedCn = nil
local tweenInfo = TweenInfo.new(0.2, Enum.EasingStyle.Quad, Enum.EasingDirection.InOut)
local tweenPositionOffset = UDim2.new(0, -400, 0, 0)
local parentShow = this.Show
function this:Show()
parentShow(self)
CameraManager:SwitchToAvatarEditor()
AvatarEditorView:Show(this.Container)
end
local parentHide = this.Hide
function this:Hide()
parentHide(self)
AvatarEditorView:Hide()
CameraManager:SwitchToFlyThrough()
end
local parentFocus = this.Focus
function this:Focus()
parentFocus(self)
storeChangedCn = AppState.Store.Changed:Connect(function(newState, oldState)
if newState.FullView ~= oldState.FullView then
if newState.FullView then
TweenController(view.BackImage, tweenInfo, { Position = backImagePosition + tweenPositionOffset })
TweenController(view.BackText, tweenInfo, { Position = backTextPosition + tweenPositionOffset })
TweenController(view.TitleText, tweenInfo, { Position = titleTextPosition + tweenPositionOffset })
else
TweenController(view.BackImage, tweenInfo, { Position = backImagePosition })
TweenController(view.BackText, tweenInfo, { Position = backTextPosition })
TweenController(view.TitleText, tweenInfo, { Position = titleTextPosition })
end
end
end)
AvatarEditorView:Focus()
end
local parentRemoveFocus = this.RemoveFocus
function this:RemoveFocus()
parentRemoveFocus(self)
AvatarEditorView:RemoveFocus()
Utilities.disconnectEvent(storeChangedCn)
--Don't save selectedObject, as we already saved it in AvatarEditorView
self.SavedSelectedObject = nil
end
local parentSetParent = this.SetParent
function this:SetParent(newParent)
parentSetParent(self, newParent)
end
function this:GetAnalyticsInfo()
return {[Analytics.WidgetNames('WidgetId')] = Analytics.WidgetNames('AvatarEditorScreenId')}
end
return this
end
local function OnUserAccountChanged()
AvatarEditorReconstruct = true
EventHub:removeEventListener(EventHub.Notifications["AvatarPurchaseSuccess"], "AvatarEditorScreen")
EventHub:addEventListener(EventHub.Notifications["AvatarPurchaseSuccess"], "AvatarEditorScreen",
function()
AvatarEditorReconstruct = true
end)
end
EventHub:addEventListener(EventHub.Notifications["AuthenticationSuccess"], "AvatarEditorScreen", OnUserAccountChanged)
local function OnUserSignOut()
AvatarEditorReconstruct = true
EventHub:removeEventListener(EventHub.Notifications["AvatarPurchaseSuccess"], "AvatarEditorScreen")
end
if ThirdPartyUserService then
ThirdPartyUserService.ActiveUserSignedOut:connect(OnUserSignOut)
end
return createAvatarEditorScreen