LUADOC - Farming Simulator 22

Script v1_7_1_0

Engine v1_7_1_0

Foundation Reference

ChatWindow

Description
HUD chat window. Displays chat messages.
Parent
HUDDisplayElement
Functions

createBackground

Description
Create the background overlay.
Definition
createBackground()
Code
240function ChatWindow.createBackground(hudAtlasPath)
241 local posX, posY = ChatWindow.getBackgroundPosition(1)
242 local width, height = getNormalizedScreenValues(unpack(ChatWindow.SIZE.SELF))
243
244 local overlay = Overlay.new(hudAtlasPath, posX, posY, width, height)
245 overlay:setUVs(GuiUtils.getUVs(HUD.UV.AREA))
246
247 setOverlayCornerColor(overlay.overlayId, 0, 0, 0, 0, 0.9)
248 setOverlayCornerColor(overlay.overlayId, 1, 0, 0, 0, 0.9)
249 setOverlayCornerColor(overlay.overlayId, 2, 0, 0, 0, 0.4)
250 setOverlayCornerColor(overlay.overlayId, 3, 0, 0, 0, 0.4)
251
252 overlay.visible = false -- initialize as invisible, important for first hide call and hide timer
253 return overlay
254end

draw

Description
Draw the chat window.
Definition
draw()
Code
137function ChatWindow:draw()
138 if self:getVisible() and (not self.isMenuVisible or g_gui.currentGuiName == "ChatDialog") and #self.messages > 0 then
139 if g_gui.currentGuiName == "ChatDialog" then
140 ChatWindow:superClass().draw(self)
141 end
142
143 local baseX, baseY = self:getPosition()
144 setTextClipArea(baseX, baseY, baseX + self:getWidth(), baseY + self:getHeight())
145
146 local posX, posY = baseX + self.messageOffsetX, baseY + self.messageOffsetY
147
148 setTextWrapWidth(self:getWidth() - self.messageOffsetX * 2)
149 setTextAlignment(RenderText.ALIGN_LEFT)
150
151 local currentY = posY - self.scrollOffset
152
153 for i = #self.messages, 1, -1 do
154 local sender = self.messages[i].sender .. ":"
155 local text = self.messages[i].msg
156
157 -- Get text height
158 local textHeight, _ = getTextHeight(self.textSize, text)
159
160 -- Draw text
161 currentY = currentY + textHeight
162
163 setTextBold(false)
164 setTextColor(unpack(ChatWindow.COLOR.MESSAGE_SHADOW))
165 renderText(posX + self.shadowOffset, currentY - self.shadowOffset, self.textSize, text)
166 setTextColor(unpack(ChatWindow.COLOR.MESSAGE))
167 renderText(posX, currentY, self.textSize, text)
168
169 -- Draw name above it
170 currentY = currentY + self.textSize
171
172 setTextBold(true)
173 setTextColor(unpack(ChatWindow.COLOR.MESSAGE_SHADOW))
174 renderText(posX + self.shadowOffset, currentY - self.shadowOffset, self.textSize, sender)
175
176 local color = ChatWindow.COLOR.MESSAGE
177 if self.messages[i].farmId ~= 0 then
178 local farm = g_farmManager:getFarmById(self.messages[i].farmId)
179 if farm ~= nil then
180 color = farm:getColor()
181 end
182 end
183
184 setTextColor(unpack(color))
185 renderText(posX, currentY, self.textSize, sender)
186
187 -- Add margin between messages
188 currentY = currentY + self.textSize * 0.5
189
190 -- setTextLineBounds(lineShowOffset, numLinesShow)
191 -- setTextLineBounds(0, 0)
192
193 if currentY > posY + self:getHeight() then
194 break
195 end
196 end
197
198 setTextWrapWidth(0)
199 setTextClipArea(0, 0, 1, 1)
200 setTextBold(false)
201 end
202end

getBackgroundPosition

Description
Get this element's base background position.
Definition
getBackgroundPosition(float uiScale)
Arguments
floatuiScaleCurrent UI scale factor
Code
218function ChatWindow.getBackgroundPosition(uiScale)
219 local offX, offY = getNormalizedScreenValues(unpack(ChatWindow.POSITION.SELF))
220 return g_safeFrameMajorOffsetX + offX, g_safeFrameMajorOffsetY + offY
221end

new

Description
Create a new ChatWindow.
Definition
new(string hudAtlasPath, table speakerDisplay)
Arguments
stringhudAtlasPathPath to the HUD atlas texture.
tablespeakerDisplaySpeakerDisplay reference which is notified when this window is visible
Return Values
tableChatWindowinstance
Code
24function ChatWindow.new(hudAtlasPath, speakerDisplay)
25 local backgroundOverlay = ChatWindow.createBackground(hudAtlasPath)
26 local self = ChatWindow:superClass().new(backgroundOverlay, nil, ChatWindow_mt)
27
28 self.speakerDisplay = speakerDisplay
29
30 self.maxLines = ChatWindow.MAX_NUM_MESSAGES -- overrides parent class value
31 self.messages = {} -- reference to chat message history owned by mission object
32 self.historyNum = 50
33
34 self.scrollOffset = 0
35 self.hideTime = 0
36
37 self.messageOffsetX, self.messageOffsetY = 0, 0
38 self.textSize = 0
39 self.textOffsetY = 0
40 self.lineOffset = 0
41 self.shadowOffset = 0
42
43 self.isMenuVisible = false
44 self.newMessageDuringMenu = false
45
46 self:storeScaledValues()
47
48 return self
49end

onMenuVisibilityChange

Description
Handle menu visibility state change.
Definition
onMenuVisibilityChange()
Code
101function ChatWindow:onMenuVisibilityChange(isMenuVisible)
102 self.isMenuVisible = isMenuVisible
103
104 if self:getVisible() then
105 self.newMessageDuringMenu = false
106 end
107end

scrollChatMessages

Description
Scroll chat messages by a given amount.
Definition
scrollChatMessages(int delta, int numMessages)
Arguments
intdeltaNumber of lines (positive or negative) to scroll
intnumMessagesNumber of currently stored chat messages
Code
80function ChatWindow:scrollChatMessages(delta)
81 self.scrollOffset = math.max(0, math.min(self.scrollOffset + delta * self.textSize * 1.1, #self.messages * self.textSize * 2.5 - self:getHeight()))
82end

setScale

Description
Set this element's UI scale.
Definition
setScale()
Code
210function ChatWindow:setScale(uiScale)
211 ChatWindow:superClass().setScale(self, uiScale)
212 self:storeScaledValues()
213end

setVisible

Description
Definition
setVisible()
Code
53function ChatWindow:setVisible(isVisible, animate)
54 if isVisible then
55 if not self.isMenuVisible then
56 self.newMessageDuringMenu = false
57 end
58
59 -- Already visible
60 if self:getVisible() then
61 return
62 end
63
64 ChatWindow:superClass().setVisible(self, true, false)
65
66 if animate then
67 self.hideTime = ChatWindow.DISPLAY_DURATION
68 else
69 self.hideTime = -1
70 end
71 else
72 self.hideTime = self:getVisible() and ChatWindow.DISPLAY_DURATION or 0
73 end
74end

storeScaledValues

Description
Store scaled positioning, size and offset values.
Definition
storeScaledValues()
Code
225function ChatWindow:storeScaledValues()
226 self.messageOffsetX, self.messageOffsetY = self:scalePixelToScreenVector(ChatWindow.POSITION.MESSAGE)
227
228 self.textSize = self:scalePixelToScreenHeight(ChatWindow.TEXT_SIZE.MESSAGE)
229 self.textOffsetY = self.textSize * 0.15
230 self.lineOffset = self.textSize * 0.3
231 self.shadowOffset = ChatWindow.SHADOW_OFFSET_FACTOR * self.textSize
232end

update

Description
Update element state.
Definition
update()
Code
120function ChatWindow:update(dt)
121 ChatWindow:superClass().update(self, dt)
122
123 if self.hideTime >= 0 then -- also update and hide if time has been set to 0, see test below
124 self.hideTime = self.hideTime - dt
125 if self.hideTime <= 0 then
126 ChatWindow:superClass().setVisible(self, false, false)
127 end
128 end
129end