Script v1.7.1.0
- AI
- Animals
- Contracts
- Debug
- Economy
- Effects
- Events
- Farms
- GUI
- AnimalScreen
- AnimationElement
- BitmapElement
- BoxLayoutElement
- BreadcrumbsElement
- ButtonElement
- ButtonOverlay
- ChatWindow
- CheckedOptionElement
- ClearElement
- ContextActionDisplay
- DialogElement
- FieldInfoDisplay
- FillLevelsDisplay
- FlowLayoutElement
- FocusManager
- FrameElement
- FrameReferenceElement
- GameInfoDisplay
- GamePausedDisplay
- Gui
- GuiDataSource
- GuiElement
- GuiMixin
- GuiOverlay
- GuiProfile
- GuiSoundPlayer
- GuiTopDownCamera
- GuiUtils
- HUDDisplayElement
- HUDElement
- HUDFrameElement
- HUDPopupMessage
- HUDTextDisplay
- IndexChangeSubjectMixin
- IndexStateElement
- InGameIcon
- IngameMap
- IngameMapElement
- InputGlyphElement
- InputHelpDisplay
- ListElement
- ListItemElement
- MapHotspot
- MapOverlayGenerator
- MixerWagonHUDExtension
- MultiTextOptionElement
- MultiValueTween
- Overlay
- PagingElement
- PlaySampleMixin
- RenderElement
- RoundStatusBar
- ScreenElement
- SettingsModel
- SideNotification
- SliderElement
- SpeakerDisplay
- SpeedMeterDisplay
- StableListElement
- StatusBar
- TabbedMenu
- TabbedMenuFrameElement
- TabbedMenuWithDetails
- TableElement
- TableHeaderElement
- TextElement
- TextInputElement
- TimerElement
- ToggleButtonElement
- TopNotification
- Tween
- TweenSequence
- VehicleHUDExtension
- VehicleSchemaDisplay
- VideoElement
- Handtools
- I3d
- Materials
- Misc
- Objects
- Placeables
- Player
- Shop
- Sounds
- Specializations
- Triggers
- Utils
- Vehicles
- Weather
Engine v1.7.1.0
- AI
- Animation
- Camera
- Entity
- Fillplanes
- General
- I3D
- Input
- Lighting
- Math
- Network
- Node
- Overlays
- Particle System
- Physics
- Rendering
- Scenegraph
- Shape
- Sound
- Spline
- String
- Terrain Detail
- Text Rendering
- Tire Track
- XML
- general
Foundation Reference
MapHotspot
DescriptionUV coordinates in the map hotspot atlas.Functions
- delete
- drawBoundings
- generateBgOverlays
- generateOverlays
- getBoundings
- getHasDetails
- getHeight
- getIsActive
- getIsVisible
- getOverlay
- getOwnerFarmId
- getWidth
- new
- render
- setBackgroundImage
- setBlinking
- setBorderedImage
- setColor
- setHasDetails
- setIconScale
- setImage
- setLinkedNode
- setOwnerFarmId
- setPersistent
- setPosition
- setRawTextOffset
- setRenderLast
- setSelected
- setSize
- setText
- setTextOptions
- setWorldPosition
delete
DescriptionDefinitiondelete()Code
78 | function MapHotspot:delete() |
79 | self.enabled = false |
80 | |
81 | for k, overlay in pairs(self.overlays) do |
82 | overlay:delete() |
83 | self.overlays[k] = nil |
84 | end |
85 | |
86 | if self.overlayBg ~= nil then |
87 | self.overlayBg:delete() |
88 | self.overlayBg = nil |
89 | end |
90 | end |
drawBoundings
DescriptionDefinitiondrawBoundings()Code
383 | function MapHotspot:drawBoundings() |
384 | -- debug boundings |
385 | local x,y,w,h = self:getBoundings() |
386 | local xPixel = 1 / g_screenWidth |
387 | local yPixel = 1 / g_screenHeight |
388 | setOverlayColor(GuiElement.debugOverlay, 1, 0,0,1) |
389 | renderOverlay(GuiElement.debugOverlay, x-xPixel, y-yPixel, w+2*xPixel, yPixel) |
390 | renderOverlay(GuiElement.debugOverlay, x-xPixel, y+h, w+2*xPixel, yPixel) |
391 | renderOverlay(GuiElement.debugOverlay, x-xPixel, y, xPixel, h) |
392 | renderOverlay(GuiElement.debugOverlay, x+w, y, xPixel, h) |
393 | end |
generateBgOverlays
DescriptionDefinitiongenerateBgOverlays()Code
151 | function MapHotspot:generateBgOverlays() |
152 | if self.overlayBg ~= nil then |
153 | self.overlayBg:delete() |
154 | end |
155 | |
156 | self.overlayBg = Overlay:new(self.bgImageFilename, 0, 0, self.width, self.height) |
157 | self.overlayBg:setUVs(self.bgImageUVs) |
158 | self.overlayBg:setColor(unpack(self.bgImageColor)) |
159 | end |
generateOverlays
DescriptionDefinitiongenerateOverlays()Code
118 | function MapHotspot:generateOverlays() |
119 | for _, overlay in ipairs(self.overlays) do |
120 | overlay:delete() |
121 | end |
122 | |
123 | self.overlays = {} |
124 | |
125 | if self.imageFilename ~= nil then |
126 | if type(self.imageFilename) == "table" then |
127 | for _, filename in pairs(self.imageFilename) do |
128 | local overlay = Overlay:new(filename, 0, 0, self.width, self.height) |
129 | overlay:setUVs(self.imageUVs) |
130 | overlay:setColor(unpack(self.baseColor)) |
131 | table.insert(self.overlays, overlay) |
132 | end |
133 | else |
134 | local overlay = Overlay:new(self.imageFilename, 0, 0, self.width, self.height) |
135 | overlay:setUVs(self.imageUVs) |
136 | overlay:setColor(unpack(self.baseColor)) |
137 | table.insert(self.overlays, overlay) |
138 | end |
139 | else |
140 | for _, filename in pairs(MapHotspot.IMAGEFILENAMES) do |
141 | local overlay = Overlay:new(filename, 0, 0, self.width, self.height) |
142 | overlay:setUVs(self.imageUVs) |
143 | overlay:setColor(unpack(self.baseColor)) |
144 | table.insert(self.overlays, overlay) |
145 | end |
146 | end |
147 | end |
getBoundings
DescriptionDefinitiongetBoundings()Code
296 | function MapHotspot:getBoundings() |
297 | local width = self:getWidth(self.width == 0) |
298 | local height = self:getHeight(self.height == 0) |
299 | |
300 | local x = self.x |
301 | local y = self.y |
302 | |
303 | if width > self.width*self.zoom then |
304 | x = self.x - (width-self.width*self.zoom)*0.5 |
305 | end |
306 | |
307 | if height > self.height*self.zoom then |
308 | y = self.y - (height-self.height*self.zoom)*0.5 |
309 | end |
310 | |
311 | return x, y, width, height |
312 | end |
getHasDetails
DescriptionGet whether a context box can be shown when the hotspot is clickedDefinition
getHasDetails()Code
467 | function MapHotspot:getHasDetails() |
468 | return self.hasDetails |
469 | end |
getHeight
DescriptionDefinitiongetHeight()Code
279 | function MapHotspot:getHeight(addText) |
280 | local height = self.height * self.zoom |
281 | |
282 | if addText and self.showNameDefault and self.fullViewName ~= "" and (self.showName or self.renderLast) then |
283 | height = math.max(height, self.textSize*self.zoom) |
284 | if self.textOffsetY < 0 then |
285 | height = height - self.textOffsetY |
286 | elseif self.textOffsetY > height then |
287 | height = height + (self.textOffsetY-height) |
288 | end |
289 | end |
290 | |
291 | return height |
292 | end |
getIsActive
DescriptionDefinitiongetIsActive()Code
461 | function MapHotspot:getIsActive() |
462 | return self.ownerFarmId == AccessHandler.EVERYONE or g_currentMission.accessHandler:canFarmAccessOtherId(g_currentMission:getFarmId(), self.ownerFarmId) |
463 | end |
getIsVisible
DescriptionDefinitiongetIsVisible()Code
439 | function MapHotspot:getIsVisible() |
440 | return self.visible and (self.alwaysShow or self.ownerFarmId == AccessHandler.EVERYONE or g_currentMission.accessHandler:canFarmAccessOtherId(g_currentMission:getFarmId(), self.ownerFarmId)) |
441 | end |
getOverlay
DescriptionDefinitiongetOverlay()Code
94 | function MapHotspot:getOverlay(height) |
95 | local overlay = self.overlays[1] |
96 | if height <= 24 then |
97 | overlay = self.overlays[5] |
98 | elseif height <= 48 then |
99 | overlay = self.overlays[4] |
100 | elseif height <= 96 then |
101 | overlay = self.overlays[3] |
102 | elseif height <= 192 then |
103 | overlay = self.overlays[2] |
104 | end |
105 | |
106 | return Utils.getNoNil(overlay, self.overlays[1]) |
107 | end |
getOwnerFarmId
DescriptionDefinitiongetOwnerFarmId()Code
455 | function MapHotspot:getOwnerFarmId() |
456 | return self.ownerFarmId |
457 | end |
getWidth
DescriptionDefinitiongetWidth()Code
267 | function MapHotspot:getWidth(addText) |
268 | local width = self.width * self.zoom |
269 | |
270 | if addText and self.showNameDefault and self.fullViewName ~= "" and (self.showName or self.renderLast) then |
271 | width = math.max(width, getTextWidth(self.textSize * self.zoom, self.fullViewName)) |
272 | end |
273 | |
274 | return width |
275 | end |
new
DescriptionDefinitionnew()Code
29 | function MapHotspot:new(name, category) |
30 | local self = {} |
31 | setmetatable(self, MapHotspot_mt) |
32 | |
33 | self.baseColor = {1, 1, 1, 1} |
34 | self.imageUVs = Overlay.DEFAULT_UVS |
35 | self.bgImageColor = MapHotspot.DEFAULT_BG_COLOR |
36 | self.overlays = {} |
37 | |
38 | self.iconScale = 1 |
39 | |
40 | _, self.defaultTextSize = getNormalizedScreenValues(0, 12) |
41 | self.textSize = self.defaultTextSize |
42 | self.textOffsetX, self.textOffsetY = getNormalizedScreenValues(0, 1) |
43 | self.textBold = false |
44 | self.textColor = self.baseColor |
45 | self.verticalAlignment = Overlay.ALIGN_VERTICAL_TOP |
46 | self.textAlignment = RenderText.ALIGN_CENTER |
47 | |
48 | self.x = 0 |
49 | self.y = 0 |
50 | self.name = name |
51 | self.fullViewName = name |
52 | |
53 | self.visible = true |
54 | self.enabled = true |
55 | self.blinking = false |
56 | self.persistent = false |
57 | self.active = true |
58 | self.renderLast = false |
59 | self.hasDetails = true |
60 | |
61 | self.xMapPos = 0 |
62 | self.zMapPos = 0 |
63 | |
64 | self.category = Utils.getNoNil(category, MapHotspot.CATEGORY_DEFAULT) |
65 | self.ownerFarmId = AccessHandler.EVERYONE |
66 | |
67 | self.width, self.height = getNormalizedScreenValues(18, 18) |
68 | self.zoom = 1 |
69 | |
70 | self:generateOverlays() |
71 | self:generateBgOverlays() |
72 | |
73 | return self |
74 | end |
render
DescriptionDefinitionrender()Code
316 | function MapHotspot:render(minX, maxX, minY, maxY, scale, drawText) |
317 | if self:getIsVisible() and self.enabled then |
318 | scale = scale or 1 |
319 | |
320 | -- draw bg |
321 | self.overlayBg:setDimension(self.width * self.zoom * scale, self.height * self.zoom * scale) |
322 | self.overlayBg:setPosition(self.x, self.y) |
323 | |
324 | if not self:getIsActive() then |
325 | self.overlayBg:setColor(unpack(MapHotspot.COLOR.INACTIVE)) |
326 | else |
327 | self.overlayBg:setColor(unpack(self.bgImageColor)) |
328 | end |
329 | |
330 | local overlay = self:getOverlay(self.height * self.zoom * g_screenHeight) |
331 | local overlayPosY = self.overlayBg.y + self.overlayBg.height - overlay.height |
332 | if self.verticalAlignment == Overlay.ALIGN_VERTICAL_MIDDLE then |
333 | overlayPosY = self.overlayBg.y + (self.overlayBg.height - overlay.height) * 0.5 |
334 | elseif self.verticalAlignment == Overlay.ALIGN_VERTICAL_BOTTOM then |
335 | overlayPosY = self.overlayBg.y |
336 | end |
337 | |
338 | overlay:setDimension(self.overlayBg.width * self.iconScale, self.overlayBg.height * self.iconScale) |
339 | overlay:setPosition(self.x + self.overlayBg.width * 0.5 - overlay.width * 0.5, overlayPosY) |
340 | |
341 | if self.blinking then |
342 | self.overlayBg:setColor(nil, nil, nil, IngameMap.alpha) |
343 | overlay:setColor(nil, nil, nil, IngameMap.alpha) |
344 | end |
345 | |
346 | self.overlayBg:render() |
347 | overlay:render() |
348 | |
349 | local doRenderText = self.showNameDefault and self.fullViewName ~= "" and (drawText or self.renderLast) |
350 | doRenderText = doRenderText or self.category == MapHotspot.CATEGORY_AI or self.category == MapHotspot.CATEGORY_FIELD_DEFINITION |
351 | |
352 | if doRenderText then |
353 | setTextBold(self.textBold) |
354 | setTextAlignment(self.textAlignment) |
355 | local alpha = 1 |
356 | if self.blinking then |
357 | alpha = IngameMap.alpha |
358 | end |
359 | setTextColor(0,0,0,1) |
360 | |
361 | local posX = self.x + (0.5 * self.width + self.textOffsetX) * self.zoom * scale |
362 | local posY = self.y - (self.textSize - self.textOffsetY) * self.zoom * scale |
363 | local textWidth = getTextWidth(self.textSize * self.zoom * scale, self.fullViewName) + 1 / g_screenWidth |
364 | |
365 | if self.category ~= MapHotspot.CATEGORY_FIELD_DEFINITION then |
366 | posX = math.min(math.max(posX, minX + textWidth * 0.5), maxX - textWidth * 0.5) |
367 | posY = math.min(math.max(posY, minY), maxY-self.textSize * self.zoom * scale) |
368 | end |
369 | |
370 | renderText(posX, posY - 1 / g_screenHeight, self.textSize * self.zoom * scale, self.fullViewName) |
371 | setTextColor(self.textColor[1], self.textColor[2], self.textColor[3], alpha) |
372 | renderText(posX + 1 / g_screenWidth, posY, self.textSize * self.zoom * scale, self.fullViewName) |
373 | setTextAlignment(RenderText.ALIGN_LEFT) |
374 | setTextColor(1,1,1,1) |
375 | end |
376 | |
377 | -- self:drawBoundings() |
378 | end |
379 | end |
setBackgroundImage
DescriptionDefinitionsetBackgroundImage()Code
223 | function MapHotspot:setBackgroundImage(filename, uv, color) |
224 | self.bgImageFilename = Utils.getNoNil(filename, "dataS2/menu/hud/mapHotspots_512.png") |
225 | self.bgImageUVs = Utils.getNoNil(uv, getNormalizedUVs(MapHotspot.UV.CIRCLE)) |
226 | self.bgImageColor = Utils.getNoNil(color, MapHotspot.DEFAULT_BG_COLOR) |
227 | |
228 | self:generateBgOverlays() |
229 | end |
setBlinking
DescriptionDefinitionsetBlinking()Code
421 | function MapHotspot:setBlinking(blinking) |
422 | self.blinking = blinking |
423 | if not blinking then |
424 | self.overlayBg:setColor(nil, nil, nil, 1) |
425 | for _, overlay in pairs(self.overlays) do |
426 | overlay:setColor(nil, nil, nil, 1) |
427 | end |
428 | end |
429 | end |
setBorderedImage
DescriptionDefinitionsetBorderedImage()Code
189 | function MapHotspot:setBorderedImage(filename, uv, color, bgColor) |
190 | self:setImage(filename, uv, color) |
191 | self:setBackgroundImage(nil, nil, bgColor) |
192 | self:setIconScale(0.7) |
193 | self.verticalAlignment = Overlay.ALIGN_VERTICAL_MIDDLE |
194 | end |
setColor
DescriptionDefinitionsetColor()Code
407 | function MapHotspot:setColor(color) |
408 | if color ~= nil then |
409 | for _, overlay in pairs(self.overlays) do |
410 | overlay:setColor(color[1], color[2], color[3], nil) |
411 | end |
412 | else |
413 | for _, overlay in pairs(self.overlays) do |
414 | overlay:setColor(self.baseColor[1], self.baseColor[2], self.baseColor[3], nil) |
415 | end |
416 | end |
417 | end |
setHasDetails
DescriptionSet whether a context box can be shown when the hotspot is clickedDefinition
setHasDetails()Code
473 | function MapHotspot:setHasDetails(hasDetails) |
474 | self.hasDetails = hasDetails |
475 | end |
setIconScale
DescriptionDefinitionsetIconScale()Code
247 | function MapHotspot:setIconScale(scale) |
248 | self.iconScale = Utils.getNoNil(scale, 1) |
249 | end |
setImage
DescriptionDefinitionsetImage()Code
179 | function MapHotspot:setImage(filename, uv, color) |
180 | self.imageFilename = filename |
181 | self.imageUVs = Utils.getNoNil(uv, Overlay.DEFAULT_UVS) |
182 | self.baseColor = Utils.getNoNil(color, {1, 1, 1, 1}) |
183 | |
184 | self:generateOverlays() |
185 | end |
setLinkedNode
DescriptionDefinitionsetLinkedNode()Code
163 | function MapHotspot:setLinkedNode(nodeId) |
164 | self.objectId = nodeId or nil -- 0 becomes nil |
165 | if nodeId ~= nil then |
166 | self.xMapPos, _, self.zMapPos = getWorldTranslation(nodeId) |
167 | end |
168 | end |
setOwnerFarmId
DescriptionSet the farm this hotspot should be shown for. Use AccessHandler.EVERYONE for showing it to everybody (default)Definition
setOwnerFarmId()Code
445 | function MapHotspot:setOwnerFarmId(farmId) |
446 | if farmId == nil then |
447 | farmId = AccessHandler.EVERYONE |
448 | end |
449 | |
450 | self.ownerFarmId = farmId |
451 | end |
setPersistent
DescriptionDefinitionsetPersistent()Code
433 | function MapHotspot:setPersistent(persistent) |
434 | self.persistent = Utils.getNoNil(persistent, false) |
435 | end |
setPosition
DescriptionDefinitionsetPosition()Code
111 | function MapHotspot:setPosition(x, y) |
112 | self.x = Utils.getNoNil(x, self.x) |
113 | self.y = Utils.getNoNil(y, self.y) |
114 | end |
setRawTextOffset
DescriptionSet the text offset using a raw value string in the form of "Definitionpx px".
setRawTextOffset()Code
253 | function MapHotspot:setRawTextOffset(textOffsetValue) |
254 | local offX, offY = unpack(GuiUtils.getNormalizedValues(textOffsetValue, {g_referenceScreenWidth, g_referenceScreenHeight})) |
255 | self.textOffsetX = offX |
256 | self.textOffsetY = offY |
257 | |
258 | if offX > 0 then |
259 | self.textAlignment = RenderText.ALIGN_LEFT |
260 | elseif offX < 0 then |
261 | self.textAlignment = RenderText.ALIGN_RIGHT |
262 | end |
263 | end |
setRenderLast
DescriptionDefinitionsetRenderLast()Code
233 | function MapHotspot:setRenderLast(bool) |
234 | self.renderLast = Utils.getNoNil(bool, false) |
235 | end |
setSelected
DescriptionDefinitionsetSelected()Code
397 | function MapHotspot:setSelected(selected) |
398 | if selected then |
399 | self.overlayBg:setColor(MapHotspot.SELECTED_COLOR[1], MapHotspot.SELECTED_COLOR[2], MapHotspot.SELECTED_COLOR[3], nil) |
400 | else |
401 | self.overlayBg:setColor(MapHotspot.DEFAULT_BG_COLOR[1], MapHotspot.DEFAULT_BG_COLOR[2], MapHotspot.DEFAULT_BG_COLOR[3], nil) |
402 | end |
403 | end |
setSize
DescriptionDefinitionsetSize()Code
198 | function MapHotspot:setSize(width, height) |
199 | if width ~= nil then |
200 | self.width = width |
201 | end |
202 | if height ~= nil then |
203 | self.height = height |
204 | end |
205 | |
206 | self:generateOverlays() |
207 | self:generateBgOverlays() |
208 | end |
setText
DescriptionDefinitionsetText()Code
239 | function MapHotspot:setText(name, hidden, alwaysShow) |
240 | self.fullViewName = name |
241 | self.showNameDefault = name ~= nil and name ~= "" and not hidden |
242 | self.showName = alwaysShow |
243 | end |
setTextOptions
DescriptionDefinitionsetTextOptions()Code
212 | function MapHotspot:setTextOptions(textSize, textBold, textOffsetY, textColor, verticalAlignment, textAlignment) |
213 | self.textSize = Utils.getNoNil(textSize, self.textSize) |
214 | self.textOffsetY = Utils.getNoNil(textOffsetY, self.textOffsetY) |
215 | self.textBold = Utils.getNoNil(textBold, self.textBold) |
216 | self.textColor = Utils.getNoNil(textColor, self.textColor) |
217 | self.verticalAlignment = Utils.getNoNil(verticalAlignment, self.verticalAlignment) |
218 | self.textAlignment = Utils.getNoNil(textAlignment, self.textAlignment) |
219 | end |
setWorldPosition
DescriptionDefinitionsetWorldPosition()Code
172 | function MapHotspot:setWorldPosition(x,z) |
173 | self.xMapPos = x |
174 | self.zMapPos = z |
175 | end |