FrameworkZ 10.8.3
Provides a framework for Project Zomboid with various systems.
Loading...
Searching...
No Matches
TabPanel.lua
Go to the documentation of this file.
3
4local PANEL_X = 0
5local PANEL_Y = 0
6local PANEL_WIDTH = getCore():getScreenWidth() * 0.2
7local PANEL_HEIGHT = getCore():getScreenHeight()
8local PANEL_MARGIN_X = 20
9local PANEL_MARGIN_Y = 20
10local SLIDE_TIME = 0.25
11
12function FrameworkZ.UI.TabPanel:initialise()
13 local TITLE_TEXT = "Tab Menu"
14 local FONT_TITLE = UIFont.Title
15 local TITLE_WIDTH = getTextManager():MeasureStringX(FONT_TITLE, TITLE_TEXT)
16 local TITLE_HEIGHT = getTextManager():MeasureStringY(FONT_TITLE, TITLE_TEXT)
17 local TITLE_PADDING_TOP = 50
18 local TITLE_PADDING_BOTTOM = 50
19 local BUTTON_PADDING_BOTTOM = 50
20 local TITLE_X = (PANEL_WIDTH - TITLE_WIDTH) / 2
21 local TITLE_Y = PANEL_MARGIN_Y + TITLE_PADDING_TOP
22
23 ISPanel.initialise(self)
24
25 self.titleLabel = ISLabel:new(TITLE_X, TITLE_Y, TITLE_HEIGHT, TITLE_TEXT, 1, 1, 1, 1, FONT_TITLE, true)
26 self.titleLabel:initialise()
27 self:addChild(self.titleLabel)
28
29 self.closeButton = FrameworkZ.UserInterfaces:CreateHugeButton(self, PANEL_WIDTH - PANEL_MARGIN_X, PANEL_MARGIN_Y, "X", self, FrameworkZ.UI.TabPanel.onMenuSelect)
32
33 local yOffset = self.titleLabel:getY() + self.titleLabel:getHeight() + TITLE_PADDING_BOTTOM
34 self.buttons = {}
36 for _, buttonData in ipairs(FrameworkZ.UI.TabPanel.buttons) do
37 local button = FrameworkZ.UserInterfaces:CreateHugeButton(self, PANEL_X + PANEL_MARGIN_X, yOffset, buttonData.text, self, buttonData.callback)
38 button.internal = buttonData.internal
39 table.insert(self.buttons, button)
40 yOffset = yOffset + button:getHeight() + BUTTON_PADDING_BOTTOM
41 end
42
43 local textHeight = getTextManager():MeasureStringY(FrameworkZ.UserInterfaces.ButtonTheme.hugeButtonFontSize, "Close")
44 self.textCloseButton = FrameworkZ.UserInterfaces:CreateHugeButton(self, PANEL_X + PANEL_MARGIN_X, PANEL_HEIGHT - textHeight - PANEL_MARGIN_Y, "Close", self, FrameworkZ.UI.TabPanel.onMenuSelect)
46
47 self:slideOut()
48end
50function FrameworkZ.UI.TabPanel:slideOut()
51 if not self:isVisible() then
52 self:setX(-PANEL_WIDTH)
53 self:setVisible(true)
54 end
55
56 FrameworkZ.Timers:Remove("TabPanelSlideOut")
57
58 FrameworkZ.Timers:Create("TabPanelSlideOut", 0, 0, function()
59 local fps = getAverageFPS() or 60
60 local dt = 1 / fps
62 local dx = speed * dt
64 local newX = math.min(self:getX() + dx, 0)
65 self:setX(newX)
66
67 if newX >= 0 then
68 FrameworkZ.Timers:Remove("TabPanelSlideOut")
69 end
70 end)
71end
72
73function FrameworkZ.UI.TabPanel:slideIn()
74 FrameworkZ.Timers:Remove("TabPanelSlideIn")
75
76 FrameworkZ.Timers:Create("TabPanelSlideIn", 0, 0, function()
77 local fps = getAverageFPS() or 60
78 local dt = 1 / fps
80 local dx = speed * dt
81
82 local newX = math.max(self:getX() - dx, -PANEL_WIDTH)
83 self:setX(newX)
84
85 if newX <= -PANEL_WIDTH then
86 FrameworkZ.Timers:Remove("TabPanelSlideIn")
87 self:setVisible(false)
88 self:removeFromUIManager()
90 end
91 end)
92end
93
95 ISPanel.render(self)
96end
97
99 ISPanel.prerender(self)
100end
101
102function FrameworkZ.UI.TabPanel:update()
103 ISPanel.update(self)
104end
105
106function FrameworkZ.UI.TabPanel:onClose()
107 FrameworkZ.Timers:Remove("TabPanelSlideOut")
108
111 end
112
113 self:slideIn()
114end
115
116function FrameworkZ.UI.TabPanel:onMenuSelect(button, x, y)
117 if button.internal == "CLOSE" then
118 self:onClose()
119 elseif button.internal == "CHARACTERS" then
120 self.characterSelect = FrameworkZ.UI.MainMenu:new(0, 0, getCore():getScreenWidth(), getCore():getScreenHeight(), self.isoPlayer)
121 self.characterSelect.backgroundImageOpacity = 0.5
122 self.characterSelect.backgroundColor = {r=0, g=0, b=0, a=0}
123 self.characterSelect:initialise()
124 self.characterSelect:addToUIManager()
125
126 self:onClose()
127 elseif button.internal == "MY_CHARACTER" then
128 print("Opening My Character Menu")
129 elseif button.internal == "SESSION" then
131 FrameworkZ.UI.TabSession.instance:setVisible(false)
132 FrameworkZ.UI.TabSession.instance:removeFromUIManager()
134 else
135 local session = FrameworkZ.UI.TabSession:new(self.isoPlayer)
136
137 if session then
138 session:initialise()
139 session:addToUIManager()
140 end
141 end
142 elseif button.internal == "DIRECTORY" then
143 print("Opening Directory")
144 elseif button.internal == "CONFIG" then
145 print("Opening Config")
146 end
147end
148
150 {text = "CHARACTERS", internal = "CHARACTERS", callback = FrameworkZ.UI.TabPanel.onMenuSelect},
151 {text = "MY CHARACTER", internal = "MY_CHARACTER", callback = FrameworkZ.UI.TabPanel.onMenuSelect},
152 {text = "Session", internal = "SESSION", callback = FrameworkZ.UI.TabPanel.onMenuSelect},
153 {text = "Directory", internal = "DIRECTORY", callback = FrameworkZ.UI.TabPanel.onMenuSelect},
154 {text = "Config", internal = "CONFIG", callback = FrameworkZ.UI.TabPanel.onMenuSelect}
155}
156
157function FrameworkZ.UI.TabPanel:new(isoPlayer)
158 local o = ISPanel:new(-PANEL_WIDTH, PANEL_Y, PANEL_WIDTH, PANEL_HEIGHT)
159 setmetatable(o, self)
161 o.backgroundColor = {r=0.1, g=0.1, b=0.1, a=0.9}
162 o.borderColor = {r=0, g=0, b=0, a=0}
163 o.keepOnScreen = false
164 o.moveWithMouse = false
165 o.isoPlayer = isoPlayer
166
167 FrameworkZ.UI.TabPanel.instance = o
168
169 return o
170end
171
void local y()
void local x()
void local yOffset()
void FrameworkZ DollarFormats __index()
void local characterSelect()
void local instance()
void self MainMenu
Definition MainMenu.lua:95
void self FrameworkZ UI self nil
Definition MainMenu.lua:95
void self self
Definition MainMenu.lua:89
void self closeButton()
void processingNotification backgroundColor a()
void self textCloseButton()
void local dt()
void local PANEL_X()
void local PANEL_MARGIN_X()
void local newX()
void local PANEL_Y()
void local speed()
void self textCloseButton internal()
void FrameworkZ UI TabPanel buttons()
void local PANEL_HEIGHT()
void local PANEL_WIDTH()
void local fps()
void FrameworkZ UI TabPanel()
void local PANEL_MARGIN_Y()
void local SLIDE_TIME()
void local dx()
void local textHeight()
void self playerListPanel render()
void FrameworkZ UI TabSession()
void self playerListPanel prerender()
void local getTextManager()
void local getAverageFPS()
void button backgroundColor()
void local callback()
void isoPlayer()
void onMenuSelect(button, x, y)
Contains all of the User Interfaces for FrameworkZ.