LUADOC - Farming Simulator 17

Printable Version

Script v1.4.4.0

Engine v7.0.0.2

Foundation Reference

ReverseDriving

Description
This is the specialization for vehicles with reverse driving functionality
Functions

prerequisitesPresent

Description
Checks if all prerequisite specializations are loaded
Definition
prerequisitesPresent(table specializations)
Arguments
tablespecializationsspecializations
Return Values
booleanhasPrerequisitetrue if all prerequisite specializations are loaded
Code
19function ReverseDriving.prerequisitesPresent(specializations)
20 return SpecializationUtil.hasSpecialization(Drivable, specializations)
21end

load

Description
Called on loading
Definition
load(table savegame)
Arguments
tablesavegamesavegame
Code
26function 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
40end

postLoad

Description
Called after loading
Definition
postLoad(table savegame)
Arguments
tablesavegamesavegame
Code
45function 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);
57end

getSaveAttributesAndNodes

Description
Returns attributes and nodes to save
Definition
getSaveAttributesAndNodes(table nodeIdent)
Arguments
tablenodeIdentnode ident
Return Values
stringattributesattributes
stringnodesnodes
Code
64function ReverseDriving:getSaveAttributesAndNodes(nodeIdent)
65 local attributes = 'isReverseDriving="'..tostring(self.isReverseDriving)..'" ';
66
67 local nodes = "";
68
69 return attributes, nodes;
70end

readStream

Description
Called on client side on join
Definition
readStream(integer streamId, integer connection)
Arguments
integerstreamIdstreamId
integerconnectionconnection
Code
79function ReverseDriving:readStream(streamId, connection)
80 self:setIsReverseDriving(Utils.getNoNil(streamReadBool(streamId), false))
81end

writeStream

Description
Called on server side on join
Definition
writeStream(integer streamId, integer connection)
Arguments
integerstreamIdstreamId
integerconnectionconnection
Code
87function ReverseDriving:writeStream(streamId, connection)
88 streamWriteBool(streamId, self.isReverseDriving)
89end

update

Description
Called on update
Definition
update(float dt)
Arguments
floatdttime since last call in ms
Code
100function 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
118end

draw

Description
Called on draw
Definition
draw()
Code
122function 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
128end

onStartReverseDirectionChange

Description
Called on reverse drive change
Definition
onStartReverseDirectionChange()
Code
132function ReverseDriving:onStartReverseDirectionChange()
133 self.reverserDirection = 0
134end

onReverseDirectionChanged

Description
Called after reverse drive change
Definition
onReverseDirectionChanged(float direction)
Arguments
floatdirectionnew direction
Code
139function 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;
172end

setIsReverseDriving

Description
Toggle reverse driving
Definition
setIsReverseDriving(boolean isReverseDriving, boolean noEventSend)
Arguments
booleanisReverseDriving
booleannoEventSendno event send
Code
178function 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
197end