LUADOC - Farming Simulator 22

Script v1_7_1_0

Engine v1_7_1_0

Foundation Reference

AnimationElement

Description
Animated image display element. The animation is created by shifting UV texture coordinates per frame across a suitable texture. Used layers: "image" for the display image.
Parent
BitmapElement
XML Configuration Parameters
GuiElement#animationOffsetint [optional] Initial frame offset of the animation.
GuiElement#animationFramesint [optional] Number of frames to animate, defaults to 8. Base this on the display image.
GuiElement#animationSpeedint [optional] Time in milliseconds for each frame, defaults to 120ms.
GuiElement#animationUVOffsetstring [optional] Additional UV offset for this animation in the display image space. Format: "[u]px [v]px"

Functions

copyAttributes

Description
Definition
copyAttributes()
Code
102function AnimationElement:copyAttributes(src)
103 AnimationElement:superClass().copyAttributes(self, src)
104
105 self.animationDefaultUVs = table.copy(src.animationDefaultUVs)
106 self.animationOffset = src.animationOffset
107 self.animationFrames = src.animationFrames
108 self.animationSpeed = src.animationSpeed
109 self.animationUVOffset = src.animationUVOffset
110 self.animationMode = src.animationMode
111
112 self:setImageUVs(nil, unpack(self.animationDefaultUVs))
113
114 self:setAnimationData()
115end

loadFromXML

Description
Definition
loadFromXML()
Code
47function AnimationElement:loadFromXML(xmlFile, key)
48 AnimationElement:superClass().loadFromXML(self, xmlFile, key)
49
50 self.animationOffset = Utils.getNoNil(getXMLInt(xmlFile, key.."#animationOffset"), self.animationOffset)
51 self.animationFrames = Utils.getNoNil(getXMLInt(xmlFile, key.."#animationFrames"), self.animationFrames)
52 self.animationSpeed = Utils.getNoNil(getXMLInt(xmlFile, key.."#animationSpeed"), self.animationSpeed)
53
54 local animationUVOffset = getXMLString(xmlFile, key.."#animationUVOffset")
55 if animationUVOffset ~= nil then
56 animationUVOffset = GuiUtils.getNormalizedValues(animationUVOffset, self.imageSize)
57 self.animationUVOffset = animationUVOffset[1]
58 end
59
60 local uvs = GuiOverlay.getOverlayUVs(self.overlay, self:getOverlayState())
61 self.animationDefaultUVs = table.copy(uvs)
62
63 local mode = getXMLString(xmlFile, key .. "#animationMode")
64 if mode ~= nil then
65 if mode:lower() == "uvshift" then
66 self.animationMode = AnimationElement.MODE.UV_SHIFT
67 else
68 self.animationMode = AnimationElement.MODE.ROTATE
69 end
70 end
71
72 self:setAnimationData()
73end

loadProfile

Description
Definition
loadProfile()
Code
77function AnimationElement:loadProfile(profile, applyProfile)
78 AnimationElement:superClass().loadProfile(self, profile, applyProfile)
79
80 self.animationOffset = profile:getNumber("animationOffset", self.animationOffset)
81 self.animationFrames = profile:getNumber("animationFrames", self.animationFrames)
82 self.animationSpeed = profile:getNumber("animationSpeed", self.animationSpeed)
83
84 local animationUVOffset = profile:getValue("animationUVOffset")
85 if animationUVOffset ~= nil then
86 animationUVOffset = GuiUtils.getNormalizedValues(animationUVOffset, self.imageSize)
87 self.animationUVOffset = animationUVOffset[1]
88 end
89
90 local mode = profile:getValue("animationMode")
91 if mode ~= nil then
92 if mode:lower() == "uvshift" then
93 self.animationMode = AnimationElement.MODE.UV_SHIFT
94 else
95 self.animationMode = AnimationElement.MODE.ROTATE
96 end
97 end
98end

new

Description
Definition
new()
Code
28function AnimationElement.new(target, custom_mt)
29 local self = BitmapElement.new(target, custom_mt or AnimationElement_mt)
30
31 self.animationMode = AnimationElement.MODE.UV_SHIFT
32
33 self.animationOffset = -1
34 self.animationFrames = 8
35 self.animationTimer = 0
36 self.animationSpeed = 120
37 self.animationFrameSize = 0
38 self.animationStartPos = 0
39 self.animationUVOffset = 0
40 self.animationRotation = 0
41
42 return self
43end

setAnimationData

Description
Definition
setAnimationData()
Code
160function AnimationElement:setAnimationData()
161 if self.overlay ~= nil then
162 local uvs = GuiOverlay.getOverlayUVs(self.overlay, self:getOverlayState())
163 self.animationFrameSize = ((uvs[5]-uvs[1]- self.animationUVOffset*(self.animationFrames-1)) / self.animationFrames)
164 self.animationStartPos = uvs[1]
165 self:updateAnimationUVs()
166 end
167end

update

Description
Definition
update()
Code
119function AnimationElement:update(dt)
120 AnimationElement:superClass().update(self, dt)
121
122 if self.animationMode == AnimationElement.MODE.UV_SHIFT then
123 self.animationTimer = self.animationTimer - dt
124 if self.animationTimer < 0 then
125 self.animationTimer = self.animationSpeed
126 self.animationOffset = self.animationOffset + 1
127
128 if self.animationOffset > self.animationFrames - 1 then
129 self.animationOffset = 0
130 end
131
132 self:updateAnimationUVs()
133 end
134 elseif self.animationMode == AnimationElement.MODE.ROTATE then
135 self.animationRotation = self.animationRotation - 2 * math.pi * (dt / self.animationSpeed)
136
137 self:updateRotation()
138 end
139end

updateAnimationUVs

Description
Definition
updateAnimationUVs()
Code
143function AnimationElement:updateAnimationUVs()
144 if self.animationMode == AnimationElement.MODE.UV_SHIFT then
145 local frameOffset = self.animationStartPos + (self.animationFrameSize+self.animationUVOffset)*self.animationOffset
146 self:setImageUVs(nil, frameOffset, nil, frameOffset, nil, frameOffset+self.animationFrameSize, nil, frameOffset+self.animationFrameSize, nil)
147 end
148end

updateRotation

Description
Update overlay rotation
Definition
updateRotation()
Code
152function AnimationElement:updateRotation()
153 local x = self.absSize[1] * self.pivot[1]
154 local y = self.absSize[2] * self.pivot[2]
155 GuiOverlay.setRotation(self.overlay, self.animationRotation, x, y)
156end