mirror of
https://github.com/copyrighttxt/watrbx-game-engine.git
synced 2026-09-05 05:07:48 +00:00
188 lines
6.7 KiB
Lua
188 lines
6.7 KiB
Lua
-- Written by Kip Turner, Copyright ROBLOX 2015
|
|
|
|
local CoreGui = Game:GetService("CoreGui")
|
|
local GuiService = game:GetService('GuiService')
|
|
local PlayersService = game:GetService("Players")
|
|
local ContextActionService = game:GetService("ContextActionService")
|
|
local UserInputService = game:GetService("UserInputService")
|
|
|
|
local GuiRoot = CoreGui:FindFirstChild("RobloxGui")
|
|
local Modules = GuiRoot:FindFirstChild("Modules")
|
|
|
|
local AccountManager = require(Modules:FindFirstChild('AccountManager'))
|
|
local Utility = require(Modules:FindFirstChild('Utility'))
|
|
local GlobalSettings = require(Modules:FindFirstChild('GlobalSettings'))
|
|
local Errors = require(Modules:FindFirstChild('Errors'))
|
|
local ErrorOverlay = require(Modules:FindFirstChild('ErrorOverlay'))
|
|
local Strings = require(Modules:FindFirstChild('LocalizedStrings'))
|
|
local AssetManager = require(Modules:FindFirstChild('AssetManager'))
|
|
local ScreenManager = require(Modules:FindFirstChild('ScreenManager'))
|
|
local SetAccountCredentialsScreen = require(Modules:FindFirstChild('SetAccountCredentialsScreen'))
|
|
local SignInScreen = require(Modules:FindFirstChild('SignInScreen'))
|
|
local LoadingWidget = require(Modules:FindFirstChild('LoadingWidget'))
|
|
|
|
local SoundManager = require(Modules:FindFirstChild('SoundManager'))
|
|
local EventHub = require(Modules:FindFirstChild('EventHub'))
|
|
|
|
local ANY_KEY_CODES =
|
|
{
|
|
[Enum.KeyCode.ButtonA] = true;
|
|
-- [Enum.KeyCode.ButtonB] = true;
|
|
[Enum.KeyCode.ButtonX] = true;
|
|
[Enum.KeyCode.ButtonY] = true;
|
|
[Enum.KeyCode.ButtonStart] = true;
|
|
[Enum.KeyCode.ButtonSelect] = true;
|
|
[Enum.KeyCode.ButtonL1] = true;
|
|
[Enum.KeyCode.ButtonR1] = true;
|
|
}
|
|
|
|
local GAMEPAD_INPUT_TYPES =
|
|
{
|
|
[Enum.UserInputType.Gamepad1] = true;
|
|
[Enum.UserInputType.Gamepad2] = true;
|
|
[Enum.UserInputType.Gamepad3] = true;
|
|
[Enum.UserInputType.Gamepad4] = true;
|
|
}
|
|
|
|
local function CreateHomePane(parent)
|
|
local this = {}
|
|
|
|
local AnyButtonBeganConnection, AnyButtonEndedConnection = nil
|
|
|
|
local EngagementScreenContainer = Utility.Create'Frame'
|
|
{
|
|
Name = 'EngagementScreen';
|
|
Size = UDim2.new(1, 0, 1, 0);
|
|
BackgroundTransparency = 1;
|
|
Parent = parent;
|
|
}
|
|
|
|
local RobloxLogo = Utility.Create'ImageLabel'
|
|
{
|
|
Name = 'RobloxLogo';
|
|
BackgroundTransparency = 1;
|
|
Size = UDim2.new(0, 594, 0, 199);
|
|
Image = 'rbxasset://textures/ui/Shell/Icons/ROBLOXSplashLogo.png';
|
|
Parent = EngagementScreenContainer;
|
|
}
|
|
Utility.CalculateAnchor(RobloxLogo, UDim2.new(0.5,0,0.5,0), Utility.Enum.Anchor.Center)
|
|
|
|
local AnyButtonHint = Utility.Create'TextLabel'
|
|
{
|
|
Name = 'AnyButtonHint';
|
|
Text = Strings:LocalizedString('EngagementScreenHint');
|
|
TextColor3 = GlobalSettings.WhiteTextColor;
|
|
Font = GlobalSettings.RegularFont;
|
|
FontSize = GlobalSettings.ButtonSize;
|
|
Size = UDim2.new(0,0,0,0);
|
|
BackgroundTransparency = 1;
|
|
Parent = RobloxLogo;
|
|
};
|
|
Utility.CalculateAnchor(AnyButtonHint, UDim2.new(0.5,0,0,415), Utility.Enum.Anchor.Center)
|
|
|
|
local function beginAuthenticationAsync(gamePad)
|
|
local authResult = nil
|
|
local hasRobloxCredentialsResult = nil
|
|
local function auth()
|
|
authResult = AccountManager:BeginAuthenticationAsync(gamePad)
|
|
if not authResult then
|
|
print("beginAuthenticationAsync() failed because", result)
|
|
authResult = AccountManager.AuthResults.Error
|
|
end
|
|
|
|
if authResult == AccountManager.AuthResults.Success then
|
|
hasRobloxCredentialsResult = AccountManager:HasRobloxCredentialsAsync()
|
|
end
|
|
end
|
|
|
|
local loader = LoadingWidget(
|
|
{ Parent = RobloxLogo, Position = UDim2.new(0.5, 0, 0, 415) }, { auth })
|
|
loader:AwaitFinished()
|
|
loader:Cleanup()
|
|
loader = nil
|
|
|
|
print("beginAuthenticationAsync has completed with code:", authResult)
|
|
if authResult == AccountManager.AuthResults.Success then
|
|
if hasRobloxCredentialsResult == AccountManager.AuthResults.Success then
|
|
EventHub:dispatchEvent(EventHub.Notifications["AuthenticationSuccess"])
|
|
elseif hasRobloxCredentialsResult == AccountManager.AuthResults.UsernamePasswordNotSet then
|
|
local setAccountCredentialsScreen = SetAccountCredentialsScreen(Strings:LocalizedString("SetCredentialsTitle"),
|
|
Strings:LocalizedString("SetCredentialsPhrase"), Strings:LocalizedString("SetCredentialsWord"))
|
|
setAccountCredentialsScreen:SetParent(EngagementScreenContainer.Parent)
|
|
ScreenManager:OpenScreen(setAccountCredentialsScreen, true)
|
|
else
|
|
local err = Errors.Authentication[hasRobloxCredentialsResult] or Errors.Default
|
|
ScreenManager:OpenScreen(ErrorOverlay(err), false)
|
|
end
|
|
elseif authResult == AccountManager.AuthResults.AccountUnlinked then
|
|
local signInScreen = SignInScreen()
|
|
signInScreen:SetParent(EngagementScreenContainer.Parent)
|
|
ScreenManager:OpenScreen(signInScreen, true)
|
|
else
|
|
local err = Errors.Authentication[authResult] or Errors.Default
|
|
ScreenManager:OpenScreen(ErrorOverlay(err), false)
|
|
end
|
|
end
|
|
|
|
local function onAnyButtonPressed(gamePad)
|
|
AnyButtonBeganConnection = Utility.DisconnectEvent(AnyButtonBeganConnection)
|
|
AnyButtonEndedConnection = Utility.DisconnectEvent(AnyButtonEndedConnection)
|
|
AnyButtonHint.TextColor3 = GlobalSettings.WhiteTextColor
|
|
Utility.PropertyTweener(AnyButtonHint, 'TextTransparency', 0, 1, 0.25, Utility.EaseOutQuad, true,
|
|
function()
|
|
beginAuthenticationAsync(gamePad)
|
|
end)
|
|
end
|
|
|
|
function this:Show()
|
|
EngagementScreenContainer.Visible = true
|
|
end
|
|
|
|
function this:Hide()
|
|
EngagementScreenContainer.Visible = false
|
|
end
|
|
|
|
function this:Focus()
|
|
AnyButtonHint.TextColor3 = GlobalSettings.WhiteTextColor
|
|
AnyButtonHint.TextTransparency = 0
|
|
|
|
Utility.DisconnectEvent(AnyButtonBeganConnection)
|
|
local anyButtonDown = {}
|
|
AnyButtonBeganConnection = UserInputService.InputBegan:connect(function(inputObject)
|
|
if GAMEPAD_INPUT_TYPES[inputObject.UserInputType] then
|
|
if ANY_KEY_CODES[inputObject.KeyCode] then
|
|
AnyButtonHint.TextColor3 = GlobalSettings.GreyTextColor
|
|
anyButtonDown[inputObject.KeyCode] = true
|
|
end
|
|
end
|
|
end)
|
|
Utility.DisconnectEvent(AnyButtonEndedConnection)
|
|
local isAuthenticating = false
|
|
AnyButtonEndedConnection = UserInputService.InputEnded:connect(function(inputObject)
|
|
if isAuthenticating then return end
|
|
isAuthenticating = true
|
|
if GAMEPAD_INPUT_TYPES[inputObject.UserInputType] then
|
|
if ANY_KEY_CODES[inputObject.KeyCode] and anyButtonDown[inputObject.KeyCode] == true then
|
|
SoundManager:Play('ButtonPress')
|
|
onAnyButtonPressed(inputObject.UserInputType)
|
|
end
|
|
end
|
|
isAuthenticating = false
|
|
anyButtonDown[inputObject.KeyCode] = false
|
|
end)
|
|
end
|
|
|
|
function this:RemoveFocus()
|
|
AnyButtonBeganConnection = Utility.DisconnectEvent(AnyButtonBeganConnection)
|
|
AnyButtonEndedConnection = Utility.DisconnectEvent(AnyButtonEndedConnection)
|
|
end
|
|
|
|
function this:SetParent(newParent)
|
|
EngagementScreenContainer.Parent = newParent
|
|
end
|
|
|
|
return this
|
|
end
|
|
|
|
return CreateHomePane
|