153 lines
5.0 KiB
Lua
153 lines
5.0 KiB
Lua
--[[
|
|
// LinkAccountScreen.lua
|
|
]]
|
|
local CoreGui = game:GetService("CoreGui")
|
|
local GuiRoot = CoreGui:FindFirstChild("RobloxGui")
|
|
local Modules = GuiRoot:FindFirstChild("Modules")
|
|
local ShellModules = Modules:FindFirstChild("Shell")
|
|
|
|
local ContextActionService = game:GetService('ContextActionService')
|
|
local GuiService = game:GetService('GuiService')
|
|
|
|
local AccountManager = require(ShellModules:FindFirstChild('AccountManager'))
|
|
local BaseSignInScreen = require(ShellModules:FindFirstChild('BaseSignInScreen'))
|
|
local Errors = require(ShellModules:FindFirstChild('Errors'))
|
|
local ErrorOverlay = require(ShellModules:FindFirstChild('ErrorOverlay'))
|
|
local EventHub = require(ShellModules:FindFirstChild('EventHub'))
|
|
local GlobalSettings = require(ShellModules:FindFirstChild('GlobalSettings'))
|
|
local LoadingWidget = require(ShellModules:FindFirstChild('LoadingWidget'))
|
|
local ScreenManager = require(ShellModules:FindFirstChild('ScreenManager'))
|
|
local SoundManager = require(ShellModules:FindFirstChild('SoundManager'))
|
|
local Strings = require(ShellModules:FindFirstChild('LocalizedStrings'))
|
|
local Utility = require(ShellModules:FindFirstChild('Utility'))
|
|
local Analytics = require(ShellModules:FindFirstChild('Analytics'))
|
|
|
|
local function createLinkAccountScreen()
|
|
local this = BaseSignInScreen()
|
|
|
|
this:SetTitle(Strings:LocalizedString("LinkAccountTitle"))
|
|
this:SetDescriptionText(Strings:LocalizedString("LinkAccountPhrase"))
|
|
|
|
local ModalOverlay = Utility.Create'Frame'
|
|
{
|
|
Name = "ModalOverlay";
|
|
Size = UDim2.new(1, 0, 1, 0);
|
|
BackgroundTransparency = GlobalSettings.ModalBackgroundTransparency;
|
|
BackgroundColor3 = GlobalSettings.ModalBackgroundColor;
|
|
BorderSizePixel = 0;
|
|
ZIndex = 4;
|
|
}
|
|
|
|
local myUsername = nil
|
|
local myPassword = nil
|
|
|
|
this.UsernameObject:SetDefaultText(Strings:LocalizedString("UsernameWord"))
|
|
this.UsernameObject:SetKeyboardTitle(Strings:LocalizedString("UsernameWord"))
|
|
local usernameChangedCn = nil
|
|
|
|
this.PasswordObject:SetDefaultText(Strings:LocalizedString("PasswordWord"))
|
|
this.PasswordObject:SetKeyboardTitle(Strings:LocalizedString("PasswordWord"))
|
|
if not UserSettings().GameSettings:InStudioMode() then
|
|
this.PasswordObject:SetKeyboardType(Enum.XboxKeyBoardType.Password)
|
|
end
|
|
local passwordChangedCn = nil
|
|
|
|
local function linkAccountAsync()
|
|
local linkResult = nil
|
|
local signInResult = nil
|
|
|
|
local function doLinkAccountAsync()
|
|
linkResult = AccountManager:LinkAccountAsync(myUsername, myPassword)
|
|
|
|
if linkResult == AccountManager.AuthResults.Success then
|
|
signInResult = AccountManager:LoginAsync()
|
|
end
|
|
end
|
|
|
|
local loader = LoadingWidget(
|
|
{ Parent = this.Container }, { doLinkAccountAsync })
|
|
|
|
-- set up full screen loader
|
|
ModalOverlay.Parent = GuiRoot
|
|
ContextActionService:BindCoreAction("BlockB", function() end, false, Enum.KeyCode.ButtonB)
|
|
local selectedObject = GuiService.SelectedCoreObject
|
|
Utility.SetSelectedCoreObject(nil)
|
|
|
|
-- call loader
|
|
loader:AwaitFinished()
|
|
|
|
-- clean up
|
|
loader:Cleanup()
|
|
loader = nil
|
|
Utility.SetSelectedCoreObject(selectedObject)
|
|
ContextActionService:UnbindCoreAction("BlockB")
|
|
ModalOverlay.Parent = nil
|
|
|
|
if linkResult ~= AccountManager.AuthResults.Success then
|
|
local err = linkResult and Errors.Authentication[linkResult] or Errors.Default
|
|
ScreenManager:OpenScreen(ErrorOverlay(err), false)
|
|
else
|
|
if signInResult == AccountManager.AuthResults.Success then
|
|
ScreenManager:CloseCurrent()
|
|
EventHub:dispatchEvent(EventHub.Notifications["AuthenticationSuccess"])
|
|
else
|
|
local err = signInResult and Errors.Authentication[signInResult] or Errors.Default
|
|
ScreenManager:OpenScreen(ErrorOverlay(err), false)
|
|
end
|
|
end
|
|
end
|
|
|
|
local isSigningIn = false
|
|
this.SignInButton.MouseButton1Click:connect(function()
|
|
if isSigningIn then return end
|
|
isSigningIn = true
|
|
SoundManager:Play('ButtonPress')
|
|
if (myUsername and #myUsername > 0) and (myPassword and #myPassword > 0) then
|
|
linkAccountAsync()
|
|
else
|
|
local err = Errors.SignIn.NoUsernameOrPasswordEntered
|
|
ScreenManager:OpenScreen(ErrorOverlay(err), false)
|
|
end
|
|
isSigningIn = false
|
|
end)
|
|
|
|
--[[ Public API ]]--
|
|
--override
|
|
function this:GetAnalyticsInfo()
|
|
return {[Analytics.WidgetNames('WidgetId')] = Analytics.WidgetNames('LinkAccountScreenId')}
|
|
end
|
|
|
|
local baseFocus = this.Focus
|
|
function this:Focus()
|
|
baseFocus(self)
|
|
usernameChangedCn = this.UsernameObject.OnTextChanged:connect(function(text)
|
|
myUsername = text
|
|
if #myUsername > 0 then
|
|
Utility.SetSelectedCoreObject(this.PasswordSelection)
|
|
else
|
|
Utility.SetSelectedCoreObject(this.UsernameSelection)
|
|
end
|
|
end)
|
|
passwordChangedCn = this.PasswordObject.OnTextChanged:connect(function(text)
|
|
myPassword = text
|
|
if #myPassword > 0 then
|
|
Utility.SetSelectedCoreObject(this.SignInButton)
|
|
else
|
|
Utility.SetSelectedCoreObject(this.PasswordSelection)
|
|
end
|
|
end)
|
|
end
|
|
|
|
--override
|
|
local baseRemoveFocus = this.RemoveFocus
|
|
function this:RemoveFocus()
|
|
baseRemoveFocus(self)
|
|
Utility.DisconnectEvent(usernameChangedCn)
|
|
Utility.DisconnectEvent(passwordChangedCn)
|
|
end
|
|
|
|
return this
|
|
end
|
|
|
|
return createLinkAccountScreen
|