Script v1.7.1.0
- AI
- Animals
- Contracts
- Debug
- Economy
- Effects
- Events
- Farms
- GUI
- Handtools
- I3d
- Materials
- Misc
- Objects
- Placeables
- Player
- Shop
- Sounds
- Specializations
- AIConveyorBelt
- AIImplement
- AIVehicle
- AnimatedVehicle
- ArticulatedAxis
- Attachable
- AttacherJointControl
- AttacherJoints
- BaleGrab
- BaleLoader
- Baler
- BaleWrapper
- BaseMaterial
- BunkerSiloCompacter
- BunkerSiloInteractor
- BuyableBale
- CCTDrivable
- Combine
- ConnectionHoses
- ConveyorBelt
- Cover
- CrabSteering
- Crawlers
- Cultivator
- Cutter
- Cylindered
- CylinderedFoldable
- Dashboard
- Dischargeable
- Drivable
- DynamicallyLoadedParts
- DynamicMountAttacher
- Enterable
- FertilizingCultivator
- FertilizingSowingMachine
- FillTriggerVehicle
- FillUnit
- FillVolume
- Foldable
- FoliageBending
- ForageWagon
- FrontloaderAttacher
- FruitPreparer
- GroundAdjustedNodes
- GroundReference
- Honk
- HookLiftContainer
- HookLiftTrailer
- IKChains
- JigglingParts
- Leveler
- Lights
- LivestockTrailer
- Locomotive
- LogGrab
- ManureBarrel
- MixerWagon
- Motorized
- Mountable
- Mower
- Pickup
- Pipe
- Plow
- PowerConsumer
- PowerTakeOffs
- RandomlyMovingParts
- ReceivingHopper
- ReverseDriving
- Rideable
- RidgeMarker
- Roller
- Ropes
- SemiTrailerFront
- Shovel
- SlopeCompensation
- SmartAttach
- SowingMachine
- SpeedRotatingParts
- SplineVehicle
- Sprayer
- StrawBlower
- StumpCutter
- Suspensions
- Tedder
- TensionBeltObject
- TensionBelts
- TipOccluder
- Trailer
- TreePlanter
- TreeSaw
- TurnOnVehicle
- Washable
- WaterTrailer
- Wearable
- Weeder
- Wheels
- Windrower
- Wipers
- WoodCrusher
- WoodHarvester
- WorkArea
- WorkMode
- WorkParticles
- 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
RidgeMarker
DescriptionSpecialization for tools with a ridge markerFunctions
- actionEventToggleRidgeMarkers
- canFoldRidgeMarker
- getCanBeSelected
- getIsSpeedRotatingPartActive
- getIsWorkAreaActive
- initSpecialization
- loadRidgeMarker
- loadSpeedRotatingPartFromXML
- loadWorkAreaFromXML
- onAIImplementStart
- onFoldStateChanged
- onLoad
- onPostLoad
- onReadStream
- onRegisterActionEvents
- onSetLowered
- onUpdate
- onWriteStream
- prerequisitesPresent
- processRidgeMarkerArea
- registerEventListeners
- registerFunctions
- registerOverwrittenFunctions
- saveToXMLFile
- setRidgeMarkerState
- updateActionEvents
actionEventToggleRidgeMarkers
DescriptionDefinitionactionEventToggleRidgeMarkers()Code
440 | function RidgeMarker.actionEventToggleRidgeMarkers(self, actionName, inputValue, callbackState, isAnalog) |
441 | local spec = self.spec_ridgeMarker |
442 | |
443 | local newState = (spec.ridgeMarkerState + 1) % (spec.numRigdeMarkers+1) |
444 | if self:canFoldRidgeMarker(newState) then |
445 | self:setRidgeMarkerState(newState) |
446 | end |
447 | end |
canFoldRidgeMarker
DescriptionReturn if ridge markers can be foldenDefinition
canFoldRidgeMarker(integer state)Arguments
integer | state | state |
boolean | canFold | ridge markers can be folden |
222 | function RidgeMarker:canFoldRidgeMarker(state) |
223 | local spec = self.spec_ridgeMarker |
224 | |
225 | local foldAnimTime = nil |
226 | if self.getFoldAnimTime ~= nil then |
227 | foldAnimTime = self:getFoldAnimTime() |
228 | if foldAnimTime < spec.ridgeMarkerMinFoldTime or foldAnimTime > spec.ridgeMarkerMaxFoldTime then |
229 | return false |
230 | end |
231 | end |
232 | |
233 | local foldableSpec = self.spec_foldable |
234 | if state ~= 0 and not foldableSpec.moveToMiddle and spec.foldDisableDirection ~= nil and (spec.foldDisableDirection == foldableSpec.foldMoveDirection or foldableSpec.foldMoveDirection == 0) then |
235 | return false |
236 | end |
237 | |
238 | return true |
239 | end |
getCanBeSelected
DescriptionDefinitiongetCanBeSelected()Code
351 | function RidgeMarker:getCanBeSelected(superFunc) |
352 | return true |
353 | end |
getIsSpeedRotatingPartActive
DescriptionReturns true if speed rotating part is activeDefinition
getIsSpeedRotatingPartActive(table speedRotatingPart)Arguments
table | speedRotatingPart | speedRotatingPart |
boolean | isActive | speed rotating part is active |
341 | function RidgeMarker:getIsSpeedRotatingPartActive(superFunc, speedRotatingPart) |
342 | if speedRotatingPart.ridgeMarkerAnim ~= nil and self:getAnimationTime(speedRotatingPart.ridgeMarkerAnim) < speedRotatingPart.ridgeMarkerAnimTimeMax then |
343 | return false |
344 | end |
345 | |
346 | return superFunc(self, speedRotatingPart) |
347 | end |
getIsWorkAreaActive
DescriptionReturns true if work area is activeDefinition
getIsWorkAreaActive(table workArea)Arguments
table | workArea | workArea |
boolean | isActive | work area is active |
359 | function RidgeMarker:getIsWorkAreaActive(superFunc, workArea) |
360 | |
361 | if workArea.type == WorkAreaType.RIDGEMARKER then |
362 | local spec = self.spec_ridgeMarker |
363 | local ridgeMarker = spec.workAreaToRidgeMarker[workArea.index] |
364 | |
365 | if ridgeMarker ~= nil then |
366 | local animTime = self:getAnimationTime(ridgeMarker.animName) |
367 | if animTime > ridgeMarker.maxWorkLimit or animTime < ridgeMarker.minWorkLimit then |
368 | return false |
369 | end |
370 | |
371 | if spec.onlyActiveWhenLowered and not self:getIsLowered(false) then |
372 | return false |
373 | end |
374 | end |
375 | end |
376 | |
377 | return superFunc(self, workArea) |
378 | end |
initSpecialization
DescriptionCalled on specialization initializingDefinition
initSpecialization()Code
20 | function RidgeMarker.initSpecialization() |
21 | g_workAreaTypeManager:addWorkAreaType("ridgemarker", false) |
22 | end |
loadRidgeMarker
DescriptionDefinitionloadRidgeMarker()Code
172 | function RidgeMarker:loadRidgeMarker(xmlFile, key, ridgeMarker) |
173 | ridgeMarker.animName = getXMLString(xmlFile, key .. "#animName") |
174 | ridgeMarker.minWorkLimit = Utils.getNoNil(getXMLFloat(xmlFile, key .. "#minWorkLimit"), 0.99) |
175 | ridgeMarker.maxWorkLimit = Utils.getNoNil(getXMLFloat(xmlFile, key .. "#maxWorkLimit"), 1) |
176 | |
177 | ridgeMarker.liftedAnimTime = getXMLFloat(xmlFile, key .. "#liftedAnimTime") |
178 | ridgeMarker.workAreaIndex = getXMLInt(xmlFile, key .. "#workAreaIndex") |
179 | |
180 | if ridgeMarker.workAreaIndex == nil then |
181 | g_logManager:xmlWarning(self.configFileName, "Missing 'workAreaIndex' for ridgeMarker '%s'!", key) |
182 | return false |
183 | end |
184 | |
185 | return true |
186 | end |
loadSpeedRotatingPartFromXML
DescriptionLoads speed rotating parts from xmlDefinition
loadSpeedRotatingPartFromXML(table speedRotatingPart, integer xmlFile, string key)Arguments
table | speedRotatingPart | speedRotatingPart |
integer | xmlFile | id of xml object |
string | key | key |
boolean | success | success |
326 | function RidgeMarker:loadSpeedRotatingPartFromXML(superFunc, speedRotatingPart, xmlFile, key) |
327 | if not superFunc(self, speedRotatingPart, xmlFile, key) then |
328 | return false |
329 | end |
330 | |
331 | speedRotatingPart.ridgeMarkerAnim = getXMLString(xmlFile, key .. "#ridgeMarkerAnim") |
332 | speedRotatingPart.ridgeMarkerAnimTimeMax = Utils.getNoNil(getXMLFloat(xmlFile, key .. "#ridgeMarkerAnimTimeMax"), 0.99) |
333 | |
334 | return true |
335 | end |
loadWorkAreaFromXML
DescriptionLoads work areas from xmlDefinition
loadWorkAreaFromXML(table workArea, integer xmlFile, string key)Arguments
table | workArea | workArea |
integer | xmlFile | id of xml object |
string | key | key |
boolean | success | success |
290 | function RidgeMarker:loadWorkAreaFromXML(superFunc, workArea, xmlFile, key) |
291 | if not superFunc(self, workArea, xmlFile, key) then |
292 | return false |
293 | end |
294 | |
295 | XMLUtil.checkDeprecatedXMLElements(self.xmlFile, self.configFileName, key ..".area#startIndexTest", key ..".testArea#startNode") -- FS17 to FS19 |
296 | XMLUtil.checkDeprecatedXMLElements(self.xmlFile, self.configFileName, key ..".area#widthIndexTest", key ..".testArea#widthNode") -- FS17 to FS19 |
297 | XMLUtil.checkDeprecatedXMLElements(self.xmlFile, self.configFileName, key ..".area#heightIndexTest", key ..".testArea#heightNode") -- FS17 to FS19 |
298 | |
299 | local startTest = I3DUtil.indexToObject(self.components, getXMLString(xmlFile, key ..".testArea#startNode"), self.i3dMappings) |
300 | local widthTest = I3DUtil.indexToObject(self.components, getXMLString(xmlFile, key ..".testArea#widthNode"), self.i3dMappings) |
301 | local heightTest = I3DUtil.indexToObject(self.components, getXMLString(xmlFile, key ..".testArea#heightNode"), self.i3dMappings) |
302 | |
303 | if startTest ~= nil and widthTest ~= nil and heightTest ~= nil then |
304 | workArea.startTest = startTest |
305 | workArea.widthTest = widthTest |
306 | workArea.heightTest = heightTest |
307 | |
308 | XMLUtil.checkDeprecatedXMLElements(self.xmlFile, self.configFileName, key .."#animName") -- FS17 to FS19 |
309 | |
310 | if workArea.type == WorkAreaType.DEFAULT then |
311 | workArea.type = WorkAreaType.RIDGEMARKER |
312 | end |
313 | elseif workArea.type == WorkAreaType.RIDGEMARKER then |
314 | g_logManager:xmlWarning(self.configFileName, "Missing test area for ridge marker area '%s'", key) |
315 | end |
316 | |
317 | return true |
318 | end |
onAIImplementStart
DescriptionDefinitiononAIImplementStart()Code
434 | function RidgeMarker:onAIImplementStart() |
435 | self:setRidgeMarkerState(0, true) |
436 | end |
onFoldStateChanged
DescriptionCalled on folding state changeDefinition
onFoldStateChanged(integer direction, boolean moveToMiddle)Arguments
integer | direction | direction |
boolean | moveToMiddle | move to middle position |
426 | function RidgeMarker:onFoldStateChanged(direction, moveToMiddle) |
427 | if not moveToMiddle and direction > 0 then |
428 | self:setRidgeMarkerState(0, true) |
429 | end |
430 | end |
onLoad
DescriptionCalled on loadingDefinition
onLoad(table savegame)Arguments
table | savegame | savegame |
67 | function RidgeMarker:onLoad(savegame) |
68 | local spec = self.spec_ridgeMarker |
69 | |
70 | XMLUtil.checkDeprecatedXMLElements(self.xmlFile, self.configFileName, "vehicle.ridgeMarkers", "vehicle.ridgeMarker") -- FS17 to FS19 |
71 | XMLUtil.checkDeprecatedXMLElements(self.xmlFile, self.configFileName, "vehicle.ridgeMarkers.ridgeMarker", "vehicle.ridgeMarker.marker") -- FS17 to FS19 |
72 | XMLUtil.checkDeprecatedXMLElements(self.xmlFile, self.configFileName, "vehicle.ridgeMarker.ridgeMarker", "vehicle.ridgeMarker.marker") -- FS17 to FS19 |
73 | |
74 | local inputButtonStr = getXMLString(self.xmlFile, "vehicle.ridgeMarker#inputButton") |
75 | if inputButtonStr ~= nil then |
76 | spec.ridgeMarkerInputButton = InputAction[inputButtonStr] |
77 | end |
78 | spec.ridgeMarkerInputButton = Utils.getNoNil(spec.ridgeMarkerInputButton, InputAction.IMPLEMENT_EXTRA4) |
79 | |
80 | spec.ridgeMarkers = {} |
81 | spec.workAreaToRidgeMarker = {} |
82 | local i = 0 |
83 | while true do |
84 | local key = string.format("vehicle.ridgeMarker.marker(%d)", i) |
85 | if not hasXMLProperty(self.xmlFile, key) then |
86 | break |
87 | end |
88 | |
89 | if table.getn(spec.ridgeMarkers) >= RidgeMarker.MAX_NUM_RIDGEMARKERS-1 then |
90 | g_logManager:xmlError(self.configFileName, "Too many ridgeMarker states. Only %d states are supported!", RidgeMarker.MAX_NUM_RIDGEMARKERS-1) |
91 | break |
92 | end |
93 | |
94 | local ridgeMarker = {} |
95 | if self:loadRidgeMarker(self.xmlFile, key, ridgeMarker) then |
96 | table.insert(spec.ridgeMarkers, ridgeMarker) |
97 | spec.workAreaToRidgeMarker[ridgeMarker.workAreaIndex] = ridgeMarker |
98 | end |
99 | |
100 | i = i + 1 |
101 | end |
102 | spec.numRigdeMarkers = table.getn(spec.ridgeMarkers) |
103 | |
104 | spec.ridgeMarkerMinFoldTime = Utils.getNoNil(getXMLFloat(self.xmlFile, "vehicle.ridgeMarker#foldMinLimit"), 0) |
105 | spec.ridgeMarkerMaxFoldTime = Utils.getNoNil(getXMLFloat(self.xmlFile, "vehicle.ridgeMarker#foldMaxLimit"), 1) |
106 | spec.foldDisableDirection = getXMLInt(self.xmlFile, "vehicle.ridgeMarker#foldDisableDirection") |
107 | spec.onlyActiveWhenLowered = Utils.getNoNil(getXMLBool(self.xmlFile, "vehicle.ridgeMarker#onlyActiveWhenLowered"), true) |
108 | spec.ridgeMarkerState = 0 |
109 | spec.directionNode = I3DUtil.indexToObject(self.components, getXMLString(self.xmlFile, "vehicle.ridgeMarker#directionNode"), self.i3dMappings) |
110 | end |
onPostLoad
DescriptionDefinitiononPostLoad()Code
114 | function RidgeMarker:onPostLoad(savegame) |
115 | local spec = self.spec_ridgeMarker |
116 | if spec.numRigdeMarkers > 0 and savegame ~= nil then |
117 | local state = getXMLInt(savegame.xmlFile, savegame.key..".ridgeMarker#state") |
118 | if state ~= nil then |
119 | self:setRidgeMarkerState(state, true) |
120 | if state ~= 0 then |
121 | AnimatedVehicle.updateAnimationByName(self, spec.ridgeMarkers[state].animName, 9999999) |
122 | end |
123 | end |
124 | end |
125 | end |
onReadStream
DescriptionCalled on client side on joinDefinition
onReadStream(integer streamId, integer connection)Arguments
integer | streamId | streamId |
integer | connection | connection |
140 | function RidgeMarker:onReadStream(streamId, connection) |
141 | local spec = self.spec_ridgeMarker |
142 | if spec.numRigdeMarkers > 0 then |
143 | local state = streamReadUIntN(streamId, RidgeMarker.SEND_NUM_BITS) |
144 | self:setRidgeMarkerState(state, true) |
145 | if state ~= 0 then |
146 | AnimatedVehicle.updateAnimationByName(self, spec.ridgeMarkers[state].animName, 9999999) |
147 | end |
148 | end |
149 | end |
onRegisterActionEvents
DescriptionDefinitiononRegisterActionEvents()Code
382 | function RidgeMarker:onRegisterActionEvents(isActiveForInput, isActiveForInputIgnoreSelection) |
383 | if self.isClient then |
384 | local spec = self.spec_ridgeMarker |
385 | self:clearActionEventsTable(spec.actionEvents) |
386 | |
387 | if isActiveForInputIgnoreSelection and spec.numRigdeMarkers > 0 then |
388 | local _, actionEventId = self:addActionEvent(spec.actionEvents, spec.ridgeMarkerInputButton, self, RidgeMarker.actionEventToggleRidgeMarkers, false, true, false, true, nil) |
389 | g_inputBinding:setActionEventTextPriority(actionEventId, GS_PRIO_NORMAL) |
390 | g_inputBinding:setActionEventText(actionEventId, g_i18n:getText("action_toggleRidgeMarker")) |
391 | end |
392 | end |
393 | end |
onSetLowered
DescriptionCalled on lowered state changeDefinition
onSetLowered(boolean lowered)Arguments
boolean | lowered | is lowered |
398 | function RidgeMarker:onSetLowered(lowered) |
399 | local spec = self.spec_ridgeMarker |
400 | if lowered then |
401 | for _, ridgeMarker in pairs(spec.ridgeMarkers) do |
402 | if ridgeMarker.liftedAnimTime ~= nil then |
403 | local animTime = self:getAnimationTime(ridgeMarker.animName) |
404 | if animTime == ridgeMarker.liftedAnimTime then |
405 | self:playAnimation(ridgeMarker.animName, 1, animTime, true) |
406 | end |
407 | end |
408 | end |
409 | else |
410 | for _, ridgeMarker in pairs(spec.ridgeMarkers) do |
411 | if ridgeMarker.liftedAnimTime ~= nil then |
412 | local animTime = self:getAnimationTime(ridgeMarker.animName) |
413 | if animTime > ridgeMarker.liftedAnimTime then |
414 | self:setAnimationStopTime(ridgeMarker.animName, ridgeMarker.liftedAnimTime) |
415 | self:playAnimation(ridgeMarker.animName, -1, animTime, true) |
416 | end |
417 | end |
418 | end |
419 | end |
420 | end |
onUpdate
DescriptionDefinitiononUpdate()Code
164 | function RidgeMarker:onUpdate(dt, isActiveForInput, isActiveForInputIgnoreSelection, isSelected) |
165 | if self.isClient then |
166 | RidgeMarker.updateActionEvents(self) |
167 | end |
168 | end |
onWriteStream
DescriptionCalled on server side on joinDefinition
onWriteStream(integer streamId, integer connection)Arguments
integer | streamId | streamId |
integer | connection | connection |
155 | function RidgeMarker:onWriteStream(streamId, connection) |
156 | local spec = self.spec_ridgeMarker |
157 | if spec.numRigdeMarkers > 0 then |
158 | streamWriteUIntN(streamId, spec.ridgeMarkerState, RidgeMarker.SEND_NUM_BITS) |
159 | end |
160 | end |
prerequisitesPresent
DescriptionChecks if all prerequisite specializations are loadedDefinition
prerequisitesPresent(table specializations)Arguments
table | specializations | specializations |
boolean | hasPrerequisite | true if all prerequisite specializations are loaded |
28 | function RidgeMarker.prerequisitesPresent(specializations) |
29 | return SpecializationUtil.hasSpecialization(AnimatedVehicle, specializations) and SpecializationUtil.hasSpecialization(WorkArea, specializations) |
30 | end |
processRidgeMarkerArea
DescriptionDefinitionprocessRidgeMarkerArea()Code
243 | function RidgeMarker:processRidgeMarkerArea(workArea, dt) |
244 | local spec = self.spec_ridgeMarker |
245 | |
246 | local x,_,z = getWorldTranslation(workArea.startTest) |
247 | local x1,_,z1 = getWorldTranslation(workArea.widthTest) |
248 | local x2,_,z2 = getWorldTranslation(workArea.heightTest) |
249 | local cultivatorArea = FSDensityMapUtil.getAreaDensity(g_currentMission.terrainDetailId, g_currentMission.terrainDetailTypeFirstChannel, g_currentMission.terrainDetailTypeNumChannels, g_currentMission.cultivatorValue, x, z, x1, z1, x2, z2) |
250 | local plowArea = FSDensityMapUtil.getAreaDensity(g_currentMission.terrainDetailId, g_currentMission.terrainDetailTypeFirstChannel, g_currentMission.terrainDetailTypeNumChannels, g_currentMission.plowValue, x, z, x1, z1, x2, z2) |
251 | |
252 | local x,_,z = getWorldTranslation(workArea.start) |
253 | local x1,_,z1 = getWorldTranslation(workArea.width) |
254 | local x2,_,z2 = getWorldTranslation(workArea.height) |
255 | local sowingArea = FSDensityMapUtil.getAreaDensity(g_currentMission.terrainDetailId, g_currentMission.terrainDetailTypeFirstChannel, g_currentMission.terrainDetailTypeNumChannels, g_currentMission.sowingValue, x, z, x1, z1, x2, z2) |
256 | |
257 | -- ignore non-field areas |
258 | if sowingArea > 0 or cultivatorArea > 0 or plowArea > 0 then |
259 | local wx,wz = x1-x, z1-z |
260 | local hx,hz = x2-x, z2-z |
261 | |
262 | local worldToDensity = g_currentMission.terrainDetailMapSize / g_currentMission.terrainSize |
263 | x = math.floor(x*worldToDensity+0.5)/worldToDensity |
264 | z = math.floor(z*worldToDensity+0.5)/worldToDensity |
265 | |
266 | x1, z1 = x+wx, z+wz |
267 | x2, z2 = x+hx, z+hz |
268 | |
269 | local dx,_,dz = localDirectionToWorld(Utils.getNoNil(spec.directionNode, self.rootNode), 0, 0, 1) |
270 | local angle = FSDensityMapUtil.convertToDensityMapAngle(MathUtil.getYRotationFromDirection(dx, dz), g_currentMission.terrainDetailAngleMaxValue) |
271 | |
272 | if cultivatorArea < plowArea then |
273 | FSDensityMapUtil.updateCultivatorArea(x,z, x1,z1, x2,z2, false, false, angle, nil) |
274 | else |
275 | FSDensityMapUtil.updatePlowArea(x,z, x1,z1, x2,z2, false, false, angle, false) |
276 | end |
277 | |
278 | FSDensityMapUtil.eraseTireTrack(x,z, x1,z1, x2,z2) |
279 | end |
280 | |
281 | return 0, 0 |
282 | end |
registerEventListeners
DescriptionDefinitionregisterEventListeners()Code
53 | function RidgeMarker.registerEventListeners(vehicleType) |
54 | SpecializationUtil.registerEventListener(vehicleType, "onLoad", RidgeMarker) |
55 | SpecializationUtil.registerEventListener(vehicleType, "onPostLoad", RidgeMarker) |
56 | SpecializationUtil.registerEventListener(vehicleType, "onReadStream", RidgeMarker) |
57 | SpecializationUtil.registerEventListener(vehicleType, "onWriteStream", RidgeMarker) |
58 | SpecializationUtil.registerEventListener(vehicleType, "onRegisterActionEvents", RidgeMarker) |
59 | SpecializationUtil.registerEventListener(vehicleType, "onSetLowered", RidgeMarker) |
60 | SpecializationUtil.registerEventListener(vehicleType, "onFoldStateChanged", RidgeMarker) |
61 | SpecializationUtil.registerEventListener(vehicleType, "onAIImplementStart", RidgeMarker) |
62 | end |
registerFunctions
DescriptionDefinitionregisterFunctions()Code
34 | function RidgeMarker.registerFunctions(vehicleType) |
35 | SpecializationUtil.registerFunction(vehicleType, "loadRidgeMarker", RidgeMarker.loadRidgeMarker) |
36 | SpecializationUtil.registerFunction(vehicleType, "setRidgeMarkerState", RidgeMarker.setRidgeMarkerState) |
37 | SpecializationUtil.registerFunction(vehicleType, "canFoldRidgeMarker", RidgeMarker.canFoldRidgeMarker) |
38 | SpecializationUtil.registerFunction(vehicleType, "processRidgeMarkerArea", RidgeMarker.processRidgeMarkerArea) |
39 | end |
registerOverwrittenFunctions
DescriptionDefinitionregisterOverwrittenFunctions()Code
43 | function RidgeMarker.registerOverwrittenFunctions(vehicleType) |
44 | SpecializationUtil.registerOverwrittenFunction(vehicleType, "loadWorkAreaFromXML", RidgeMarker.loadWorkAreaFromXML) |
45 | SpecializationUtil.registerOverwrittenFunction(vehicleType, "getIsWorkAreaActive", RidgeMarker.getIsWorkAreaActive) |
46 | SpecializationUtil.registerOverwrittenFunction(vehicleType, "loadSpeedRotatingPartFromXML", RidgeMarker.loadSpeedRotatingPartFromXML) |
47 | SpecializationUtil.registerOverwrittenFunction(vehicleType, "getIsSpeedRotatingPartActive", RidgeMarker.getIsSpeedRotatingPartActive) |
48 | SpecializationUtil.registerOverwrittenFunction(vehicleType, "getCanBeSelected", RidgeMarker.getCanBeSelected) |
49 | end |
saveToXMLFile
DescriptionDefinitionsaveToXMLFile()Code
129 | function RidgeMarker:saveToXMLFile(xmlFile, key, usedModNames) |
130 | local spec = self.spec_ridgeMarker |
131 | if spec.numRigdeMarkers > 0 then |
132 | setXMLInt(xmlFile, key.."#state", spec.ridgeMarkerState) |
133 | end |
134 | end |
setRidgeMarkerState
DescriptionToggle ridge marker stateDefinition
setRidgeMarkerState(integer state, boolean noEventSend)Arguments
integer | state | new state |
boolean | noEventSend | no event send |
192 | function RidgeMarker:setRidgeMarkerState(state, noEventSend) |
193 | local spec = self.spec_ridgeMarker |
194 | |
195 | if spec.ridgeMarkerState ~= state then |
196 | RidgeMarkerSetStateEvent.sendEvent(self, state, noEventSend) |
197 | |
198 | -- fold last state |
199 | if spec.ridgeMarkerState ~= 0 then |
200 | local animTime = self:getAnimationTime(spec.ridgeMarkers[spec.ridgeMarkerState].animName) |
201 | self:playAnimation(spec.ridgeMarkers[spec.ridgeMarkerState].animName, -1, animTime, true) |
202 | end |
203 | spec.ridgeMarkerState = state |
204 | |
205 | -- unfold new state |
206 | if spec.ridgeMarkerState ~= 0 then |
207 | if spec.ridgeMarkers[spec.ridgeMarkerState].liftedAnimTime ~= nil and not self:getIsLowered(true) then |
208 | self:setAnimationStopTime(spec.ridgeMarkers[spec.ridgeMarkerState].animName, spec.ridgeMarkers[spec.ridgeMarkerState].liftedAnimTime) |
209 | end |
210 | |
211 | local animTime = self:getAnimationTime(spec.ridgeMarkers[spec.ridgeMarkerState].animName) |
212 | self:playAnimation(spec.ridgeMarkers[spec.ridgeMarkerState].animName, 1, animTime, true) |
213 | end |
214 | end |
215 | end |
updateActionEvents
DescriptionDefinitionupdateActionEvents()Code
451 | function RidgeMarker.updateActionEvents(self) |
452 | local spec = self.spec_ridgeMarker |
453 | |
454 | local actionEvent = spec.actionEvents[spec.ridgeMarkerInputButton] |
455 | if actionEvent ~= nil then |
456 | local isVisible = false |
457 | if spec.numRigdeMarkers > 0 then |
458 | local newState = (spec.ridgeMarkerState + 1) % (spec.numRigdeMarkers+1) |
459 | if self:canFoldRidgeMarker(newState) then |
460 | isVisible = true |
461 | end |
462 | end |
463 | |
464 | g_inputBinding:setActionEventActive(actionEvent.actionEventId, isVisible) |
465 | end |
466 | end |