mirror of
https://github.com/copyrighttxt/watrbx-game-engine.git
synced 2026-09-05 21:27:48 +00:00
144 lines
4.0 KiB
Lua
144 lines
4.0 KiB
Lua
--[[
|
|
// BaseScreen.lua
|
|
|
|
// Creates a base screen with breadcrumbs and title. Do not use for a pane/tab
|
|
]]
|
|
local CoreGui = Game:GetService("CoreGui")
|
|
local GuiRoot = CoreGui:FindFirstChild("RobloxGui")
|
|
local Modules = GuiRoot:FindFirstChild("Modules")
|
|
|
|
local ContextActionService = game:GetService("ContextActionService")
|
|
local GuiService = game:GetService('GuiService')
|
|
|
|
local AssetManager = require(Modules:FindFirstChild('AssetManager'))
|
|
local GlobalSettings = require(Modules:FindFirstChild('GlobalSettings'))
|
|
local ScreenManager = require(Modules:FindFirstChild('ScreenManager'))
|
|
local Strings = require(Modules:FindFirstChild('LocalizedStrings'))
|
|
local Utility = require(Modules:FindFirstChild('Utility'))
|
|
|
|
local function createBaseScreen()
|
|
local this = {}
|
|
|
|
local defaultSelectionObject = nil
|
|
local lastParent = nil
|
|
|
|
local container = Utility.Create'Frame'
|
|
{
|
|
Name = "Container";
|
|
Size = UDim2.new(1, 0, 1, 0);
|
|
BackgroundTransparency = 1;
|
|
}
|
|
local backImage = Utility.Create'ImageLabel'
|
|
{
|
|
Name = "BackImage";
|
|
BackgroundTransparency = 1;
|
|
Parent = container;
|
|
}
|
|
AssetManager.LocalImage(backImage,
|
|
'rbxasset://textures/ui/Shell/Icons/BackIcon', {['720'] = UDim2.new(0,32,0,32); ['1080'] = UDim2.new(0,48,0,48);})
|
|
local backText = Utility.Create'TextLabel'
|
|
{
|
|
Name = "BackText";
|
|
Size = UDim2.new(0, 0, 0, backImage.Size.Y.Offset);
|
|
Position = UDim2.new(0, backImage.Size.X.Offset + 8, 0, 0);
|
|
BackgroundTransparency = 1;
|
|
Font = GlobalSettings.RegularFont;
|
|
FontSize = GlobalSettings.ButtonSize;
|
|
TextXAlignment = Enum.TextXAlignment.Left;
|
|
TextColor3 = GlobalSettings.WhiteTextColor;
|
|
Text = "";
|
|
Parent = container
|
|
}
|
|
local titleText = Utility.Create'TextLabel'
|
|
{
|
|
Name = "TitleText";
|
|
Size = UDim2.new(0, 0, 0, 35);
|
|
Position = UDim2.new(0, 16, 0, backImage.Size.Y.Offset + 74);
|
|
BackgroundTransparency = 1;
|
|
Font = GlobalSettings.LightFont;
|
|
FontSize = GlobalSettings.HeaderSize;
|
|
TextXAlignment = Enum.TextXAlignment.Left;
|
|
TextColor3 = GlobalSettings.WhiteTextColor;
|
|
Text = "";
|
|
Parent = container;
|
|
}
|
|
|
|
--[[ Public API ]]--
|
|
this.Container = container
|
|
|
|
function this:SetTitle(newTitle)
|
|
titleText.Text = newTitle
|
|
end
|
|
function this:SetBackText(newText)
|
|
backText.Text = newText
|
|
end
|
|
|
|
function this:GetDefaultSelectionObject()
|
|
return defaultSelectionObject
|
|
end
|
|
|
|
function this:Destroy()
|
|
self.Container:Destroy()
|
|
self = nil
|
|
end
|
|
|
|
--[[ Public API - Screen Management ]]--
|
|
function this:SetPosition(newPosition)
|
|
self.Container.Position = newPosition
|
|
end
|
|
function this:SetParent(newParent)
|
|
lastParent = newParent
|
|
self.Container.Parent = newParent
|
|
end
|
|
|
|
function this:GetName()
|
|
return titleText.Text
|
|
end
|
|
|
|
function this:Show()
|
|
local prevScreen = ScreenManager:GetScreenBelow(self)
|
|
if prevScreen and prevScreen.GetName then
|
|
self:SetBackText(prevScreen:GetName())
|
|
else
|
|
self:SetBackText(string.upper(Strings:LocalizedString("BackWord")))
|
|
end
|
|
|
|
self.Container.Parent = lastParent
|
|
self.TransisitionTweens = ScreenManager:DefaultFadeIn(self.Container)
|
|
ScreenManager:PlayDefaultOpenSound()
|
|
end
|
|
function this:Hide()
|
|
self.Container.Parent = nil
|
|
ScreenManager:DefaultCancelFade(self.TransisitionTweens)
|
|
self.TransisitionTweens = nil
|
|
end
|
|
function this:Focus()
|
|
if self.SavedSelectedObject and self.SavedSelectedObject:IsDescendantOf(self.Container) then
|
|
GuiService.SelectedCoreObject = self.SavedSelectedObject
|
|
else
|
|
GuiService.SelectedCoreObject = self:GetDefaultSelectionObject()
|
|
end
|
|
|
|
ContextActionService:BindCoreAction("ReturnFromScreen",
|
|
function(actionName, inputState, inputObject)
|
|
if inputState == Enum.UserInputState.End then
|
|
ScreenManager:CloseCurrent()
|
|
self:Destroy()
|
|
end
|
|
end,
|
|
false, Enum.KeyCode.ButtonB)
|
|
end
|
|
function this:RemoveFocus()
|
|
local selectedObject = GuiService.SelectedCoreObject
|
|
if selectedObject and selectedObject:IsDescendantOf(self.Container) then
|
|
self.SavedSelectedObject = selectedObject
|
|
GuiService.SelectedCoreObject = nil
|
|
end
|
|
ContextActionService:UnbindCoreAction("ReturnFromScreen")
|
|
end
|
|
|
|
return this
|
|
end
|
|
|
|
return createBaseScreen
|