Script v1.4.4.0
- Handtools
- Events
- Objects
- Placeables
- Triggers
- Utils
- Vehicles
- Specializations
- AIVehicle
- AnimatedVehicle
- ArticulatedAxis
- Attachable
- AttacherJointControl
- AttacherJoints
- BaleGrab
- BaleLoader
- Baler
- BaleWrapper
- BuiltInCutterTrailer
- BunkerSiloCompacter
- Combine
- ConveyorBelt
- Cover
- CrabSteering
- Crawler
- Cultivator
- Cutter
- Cylindered
- Drivable
- DynamicMountAttacher
- Fillable
- FillActivatable
- FillVolume
- Foldable
- ForageWagon
- FrontloaderAttacher
- FruitPreparer
- FuelTrailer
- Honk
- HookLiftContainer
- HookLiftTrailer
- Leveler
- Lights
- LivestockTrailer
- ManureBarrel
- ManureSpreader
- MixerWagon
- Motorized
- Mountable
- Mower
- NonTabbable
- Overloading
- Pickup
- Pipe
- Plough
- PowerConsumer
- RandomlyMovingParts
- ReceivingHopper
- ReverseDriving
- RidgeMarker
- Roller
- Ropes
- RotorSpreader
- SemiTrailerFront
- Shovel
- SowingMachine
- SpeedRotatingParts
- Sprayer
- Steerable
- StrawBlower
- StumpCutter
- Tedder
- TensionBelts
- Trailer
- TreePlanter
- TreePlanterActivatable
- TreeSaw
- TurnOnVehicle
- Washable
- WaterTrailer
- Weeder
- WheelRotations
- Windrower
- WoodCrusher
- WoodHarvester
- WorkArea
- WorkParticles
Engine v7.0.0.2
- General
- Entity
- Node
- Scenegraph
- Lighting
- Camera
- Shape
- Particle System
- Physics
- Spline
- Animation
- Overlays
- Sound
- Input
- XML
- Network
- Callbacks
- Text Rendering
- Terrain Detail
- Tire Track
- Editor
- Rendering
- String
- Math
- I3D
- Fillplanes
Foundation Reference
ReverseDriving
DescriptionThis is the specialization for vehicles with reverse driving functionalityFunctions
- prerequisitesPresent
- load
- postLoad
- getSaveAttributesAndNodes
- readStream
- writeStream
- update
- draw
- onStartReverseDirectionChange
- onReverseDirectionChanged
- setIsReverseDriving
prerequisitesPresent
DescriptionChecks if all prerequisite specializations are loadedDefinition
prerequisitesPresent(table specializations)Arguments
table | specializations | specializations |
boolean | hasPrerequisite | true if all prerequisite specializations are loaded |
19 | function ReverseDriving.prerequisitesPresent(specializations) |
20 | return SpecializationUtil.hasSpecialization(Drivable, specializations) |
21 | end |
load
DescriptionCalled on loadingDefinition
load(table savegame)Arguments
table | savegame | savegame |
26 | function ReverseDriving:load(savegame) |
27 | |
28 | self.onStartReverseDirectionChange = SpecializationUtil.callSpecializationsFunction("onStartReverseDirectionChange") |
29 | self.onReverseDirectionChanged = SpecializationUtil.callSpecializationsFunction("onReverseDirectionChanged") |
30 | self.setIsReverseDriving = Utils.overwrittenFunction(self.setIsReverseDriving, ReverseDriving.setIsReverseDriving); |
31 | |
32 | self.reversedCharacterTargets = {} |
33 | IKUtil.loadIKChainTargets(self.xmlFile, "vehicle.reverseDriving", self.components, self.reversedCharacterTargets); |
34 | |
35 | self.reversedSteeringNode = Utils.indexToObject(self.components, getXMLString(self.xmlFile, "vehicle.reverseDriving.steering#reversedIndex")); |
36 | self.reverseDrivingAnimation = Utils.getNoNil(getXMLString(self.xmlFile, "vehicle.reverseDriving#animationName"), "reverseDriving") |
37 | |
38 | self.isReverseDriving = false |
39 | self.isSelectable = true |
40 | end |
postLoad
DescriptionCalled after loadingDefinition
postLoad(table savegame)Arguments
table | savegame | savegame |
45 | function ReverseDriving:postLoad(savegame) |
46 | if self.vehicleCharacter ~= nil then |
47 | self.ikChainTargetBackup = self.vehicleCharacter.ikChainTargets |
48 | end |
49 | self.steeringNodeBackup = self.steering |
50 | |
51 | local isReverseDriving = false |
52 | if savegame ~= nil then |
53 | isReverseDriving = Utils.getNoNil(getXMLBool(savegame.xmlFile, savegame.key.."#isReverseDriving"), false); |
54 | end |
55 | self:setIsReverseDriving(isReverseDriving, true) |
56 | AnimatedVehicle.updateAnimations(self, 99999999); |
57 | end |
getSaveAttributesAndNodes
DescriptionReturns attributes and nodes to saveDefinition
getSaveAttributesAndNodes(table nodeIdent)Arguments
table | nodeIdent | node ident |
string | attributes | attributes |
string | nodes | nodes |
64 | function ReverseDriving:getSaveAttributesAndNodes(nodeIdent) |
65 | local attributes = 'isReverseDriving="'..tostring(self.isReverseDriving)..'" '; |
66 | |
67 | local nodes = ""; |
68 | |
69 | return attributes, nodes; |
70 | end |
readStream
DescriptionCalled on client side on joinDefinition
readStream(integer streamId, integer connection)Arguments
integer | streamId | streamId |
integer | connection | connection |
79 | function ReverseDriving:readStream(streamId, connection) |
80 | self:setIsReverseDriving(Utils.getNoNil(streamReadBool(streamId), false)) |
81 | end |
writeStream
DescriptionCalled on server side on joinDefinition
writeStream(integer streamId, integer connection)Arguments
integer | streamId | streamId |
integer | connection | connection |
87 | function ReverseDriving:writeStream(streamId, connection) |
88 | streamWriteBool(streamId, self.isReverseDriving) |
89 | end |
update
DescriptionCalled on updateDefinition
update(float dt)Arguments
float | dt | time since last call in ms |
100 | function ReverseDriving:update(dt) |
101 | if self:getIsActive() then |
102 | if self:getIsActiveForInput() and not self:getIsHired() then |
103 | if InputBinding.hasEvent(InputBinding.CHANGE_DRIVING_DIRECTION) then |
104 | self:setIsReverseDriving(not self.isReverseDriving) |
105 | end |
106 | end |
107 | end |
108 | |
109 | if self.isChangingDirection then |
110 | if self.vehicleCharacter ~= nil and self.vehicleCharacter.meshThirdPerson ~= nil then |
111 | self.vehicleCharacter:setCharacterVisibility(false) |
112 | -- setVisibility(self.vehicleCharacter.meshThirdPerson, false) |
113 | end |
114 | if not self:getIsAnimationPlaying(self.reverseDrivingAnimation) then |
115 | self:onReverseDirectionChanged(self.reverserDirection) |
116 | end |
117 | end |
118 | end |
draw
DescriptionCalled on drawDefinition
draw()Code
122 | function ReverseDriving:draw() |
123 | if self.isClient then |
124 | if self:getIsActiveForInput() then |
125 | g_currentMission:addHelpButtonText(g_i18n:getText("input_CHANGE_DRIVING_DIRECTION"), InputBinding.CHANGE_DRIVING_DIRECTION, nil, GS_PRIO_NORMAL) |
126 | end |
127 | end |
128 | end |
onStartReverseDirectionChange
DescriptionCalled on reverse drive changeDefinition
onStartReverseDirectionChange()Code
132 | function ReverseDriving:onStartReverseDirectionChange() |
133 | self.reverserDirection = 0 |
134 | end |
onReverseDirectionChanged
DescriptionCalled after reverse drive changeDefinition
onReverseDirectionChanged(float direction)Arguments
float | direction | new direction |
139 | function ReverseDriving:onReverseDirectionChanged(direction) |
140 | self.isChangingDirection = false |
141 | self.reverserDirection = 1 |
142 | if self.isReverseDriving then |
143 | self.reverserDirection = -1 |
144 | end |
145 | |
146 | if self.vehicleCharacter ~= nil then |
147 | self.vehicleCharacter.ikChainTargets = self.ikChainTargetBackup |
148 | if self.reverserDirection == -1 then |
149 | self.vehicleCharacter.ikChainTargets = self.reversedCharacterTargets |
150 | end |
151 | if self.vehicleCharacter.isCharacterLoaded then |
152 | for ikChainId, target in pairs(self.vehicleCharacter.ikChainTargets) do |
153 | IKUtil.setTarget(self.vehicleCharacter.ikChains, ikChainId, target); |
154 | end; |
155 | self.vehicleCharacter:setCharacterDirty(); |
156 | end |
157 | end |
158 | |
159 | if self.vehicleCharacter ~= nil and self.vehicleCharacter.meshThirdPerson ~= nil and not self.isEntered then |
160 | self.vehicleCharacter:updateVisibility(); |
161 | end |
162 | |
163 | if self.reverserDirection == 1 then |
164 | self.steering = self.steeringNodeBackup |
165 | else |
166 | self.steering = Utils.getNoNil(self.reversedSteeringNode, self.steeringNodeBackup) |
167 | end |
168 | |
169 | if self.setLightsTypesMask ~= nil then |
170 | self:setLightsTypesMask(self.lightsTypesMask, true, true); |
171 | end; |
172 | end |
setIsReverseDriving
DescriptionToggle reverse drivingDefinition
setIsReverseDriving(boolean isReverseDriving, boolean noEventSend)Arguments
boolean | isReverseDriving | |
boolean | noEventSend | no event send |
178 | function ReverseDriving:setIsReverseDriving(superFunc, isReverseDriving, noEventSend) |
179 | if superFunc ~= nil then |
180 | superFunc(self, isReverseDriving, noEventSend) |
181 | end |
182 | if isReverseDriving ~= self.isReverseDriving then |
183 | self.isChangingDirection = true |
184 | ReverseDrivingSetStateEvent.sendEvent(self, isReverseDriving, noEventSend) |
185 | self.isReverseDriving = isReverseDriving |
186 | local dir = 1 |
187 | if not isReverseDriving then |
188 | dir = -1 |
189 | end |
190 | |
191 | if self.playAnimation ~= nil then |
192 | self:playAnimation(self.reverseDrivingAnimation, dir, self:getAnimationTime(self.reverseDrivingAnimation), true) |
193 | end |
194 | |
195 | self:onStartReverseDirectionChange() |
196 | end |
197 | end |