130 lines
4.6 KiB
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
|