Script v1_7_1_0
- AI
- Animals
- Collections
- Contracts
- Debug
- Economy
- Elements
- EnvironmentalScore
- Errors
- Events
- GUI
- Handtools
- Hud
- I3d
- Input
- Jobs
- Maps
- Materials
- Misc
- Objects
- Parameters
- Placeables
- Placement
- Player
- Shop
- Sounds
- Specialization
- Specializations
- StateMachine
- Statistics
- Tasks
- Triggers
- Utils
- Vehicles
Engine v1_7_1_0
- AI
- Animation
- Camera
- Entity
- Fillplanes
- general
- General
- I3D
- Input
- Lighting
- Math
- Network
- Node
- NoteNode
- Overlays
- Particle System
- Physics
- Rendering
- Scenegraph
- Shape
- Sound
- Spline
- String
- Terrain Detail
- Text Rendering
- Tire Track
- VoiceChat
- XML
Foundation Reference
ValueInterpolator
DescriptionClass to interpolate between valuesFunctions
- delete
- getTarget
- hasInterpolator
- new
- onDeleteParent
- removeInterpolator
- setDeleteListenerObject
- setFinishedFunc
- setUpdateFunc
- update
- updateSpeed
delete
DescriptionDefinitiondelete()Code
80 | function ValueInterpolator:delete() |
81 | end |
getTarget
DescriptionDefinitiongetTarget()Code
85 | function ValueInterpolator:getTarget() |
86 | return self.target |
87 | end |
hasInterpolator
DescriptionDefinitionhasInterpolator()Code
150 | function ValueInterpolator.hasInterpolator(key) |
151 | return g_currentMission:getHasUpdateable(key) |
152 | end |
new
DescriptionDefinitionnew()Code
16 | function ValueInterpolator.new(customKey, get, set, target, duration, speed, customMt) |
17 | local self = setmetatable({}, customMt or ValueInterpolator_mt) |
18 | |
19 | self.customKey = customKey |
20 | |
21 | self.get = get |
22 | self.set = set |
23 | |
24 | self.target = target |
25 | self.duration = duration |
26 | |
27 | self.cur = {get()} |
28 | |
29 | if self.duration ~= nil then |
30 | self:updateSpeed() |
31 | else |
32 | speed = (speed or 1) / 1000 |
33 | self.speed = {} |
34 | for i=1, #self.target do |
35 | self.speed[i] = speed |
36 | end |
37 | end |
38 | |
39 | local isValid = false |
40 | for i=1, #self.speed do |
41 | if math.abs(self.speed[i]) > 0.000000001 then |
42 | isValid = true |
43 | end |
44 | end |
45 | |
46 | if isValid then |
47 | g_currentMission:addUpdateable(self, customKey) |
48 | |
49 | return self |
50 | end |
51 | end |
onDeleteParent
DescriptionDefinitiononDeleteParent()Code
156 | function ValueInterpolator:onDeleteParent() |
157 | g_currentMission:removeUpdateable(self.customKey) |
158 | end |
removeInterpolator
DescriptionDefinitionremoveInterpolator()Code
142 | function ValueInterpolator.removeInterpolator(key) |
143 | if g_currentMission:getHasUpdateable(key) then |
144 | g_currentMission:removeUpdateable(key) |
145 | end |
146 | end |
setDeleteListenerObject
DescriptionDefinitionsetDeleteListenerObject()Code
71 | function ValueInterpolator:setDeleteListenerObject(object) |
72 | if object ~= nil and object:isa(Object) then |
73 | object:addDeleteListener(self, "onDeleteParent") |
74 | self.deleteListenerObject = object |
75 | end |
76 | end |
setFinishedFunc
DescriptionDefinitionsetFinishedFunc()Code
63 | function ValueInterpolator:setFinishedFunc(finishedFunc, finishedTarget, ...) |
64 | self.finishedFunc = finishedFunc |
65 | self.finishedTarget = finishedTarget |
66 | self.finishedArgs = {...} |
67 | end |
setUpdateFunc
DescriptionDefinitionsetUpdateFunc()Code
55 | function ValueInterpolator:setUpdateFunc(updateFunc, updateTarget, ...) |
56 | self.updateFunc = updateFunc |
57 | self.updateTarget = updateTarget |
58 | self.updateArgs = {...} |
59 | end |
update
DescriptionDefinitionupdate()Code
104 | function ValueInterpolator:update(dt) |
105 | local finished = true |
106 | for i=1, #self.cur do |
107 | local direction = MathUtil.sign(self.target[i] - self.cur[i]) |
108 | local limitFunc = math.min |
109 | if direction < 0 then |
110 | limitFunc = math.max |
111 | end |
112 | self.cur[i] = limitFunc(self.cur[i] + self.speed[i] * dt * direction, self.target[i]) |
113 | |
114 | finished = finished and self.cur[i] == self.target[i] |
115 | end |
116 | |
117 | self.set(unpack(self.cur)) |
118 | |
119 | if self.updateFunc ~= nil then |
120 | self.updateFunc(self.updateTarget, unpack(self.updateArgs)) |
121 | end |
122 | |
123 | if self.duration ~= nil then |
124 | self.duration = math.max(self.duration - dt, 1) |
125 | end |
126 | |
127 | if finished then |
128 | g_currentMission:removeUpdateable(self.customKey) |
129 | |
130 | if self.deleteListenerObject ~= nil then |
131 | self.deleteListenerObject:removeDeleteListener("onDeleteParent") |
132 | end |
133 | |
134 | if self.finishedFunc ~= nil then |
135 | self.finishedFunc(self.finishedTarget, unpack(self.finishedArgs)) |
136 | end |
137 | end |
138 | end |
updateSpeed
DescriptionDefinitionupdateSpeed()Code
91 | function ValueInterpolator:updateSpeed() |
92 | if type(self.duration) == "number" then |
93 | self.speed = {} |
94 | for i=1, #self.target do |
95 | self.speed[i] = math.abs(self.target[i] - self.cur[i]) / self.duration |
96 | end |
97 | else |
98 | self.speed = self.duration |
99 | end |
100 | end |