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
AITaskDriveTo
ParentAITaskFunctions
- new
- onError
- onTargetReached
- reset
- setTargetDirection
- setTargetOffset
- setTargetPosition
- setVehicle
- start
- startDriving
- stop
- update
new
DescriptionDefinitionnew()Code
22 | function AITaskDriveTo.new(isServer, job, customMt) |
23 | local self = AITask.new(isServer, job, customMt or AITaskDriveTo_mt) |
24 | |
25 | self.x = nil |
26 | self.z = nil |
27 | self.dirX = nil |
28 | self.dirZ = nil |
29 | self.vehicle = nil |
30 | self.state = AITaskDriveTo.STATE_DRIVE_TO_OFFSET_POS |
31 | self.maxSpeed = 10 |
32 | self.offset = 0 |
33 | |
34 | self.prepareTimeout = 0 |
35 | |
36 | return self |
37 | end |
onError
DescriptionDefinitiononError()Code
167 | function AITaskDriveTo:onError(errorMessage) |
168 | end |
onTargetReached
DescriptionDefinitiononTargetReached()Code
155 | function AITaskDriveTo:onTargetReached() |
156 | if self.state == AITaskDriveTo.STATE_DRIVE_TO_OFFSET_POS then |
157 | local y = getTerrainHeightAtWorldPos(g_currentMission.terrainRootNode, self.x, 0, self.z) |
158 | self.vehicle:setAITarget(self, self.x, y, self.z, self.dirX, 0, self.dirZ, self.maxSpeed, true) |
159 | self.state = AITaskDriveTo.STATE_DRIVE_TO_FINAL_POS |
160 | else |
161 | self.isFinished = true |
162 | end |
163 | end |
reset
DescriptionDefinitionreset()Code
41 | function AITaskDriveTo:reset() |
42 | self.vehicle = nil |
43 | self.x, self.z = nil, nil |
44 | self.dirX, self.dirZ = nil, nil |
45 | self.state = AITaskDriveTo.STATE_DRIVE_TO_OFFSET_POS |
46 | self.maxSpeed = 10 |
47 | self.offset = 0 |
48 | AITaskDriveTo:superClass().reset(self) |
49 | end |
setTargetDirection
DescriptionDefinitionsetTargetDirection()Code
77 | function AITaskDriveTo:setTargetDirection(dirX, dirZ) |
78 | self.dirX = dirX |
79 | self.dirZ = dirZ |
80 | |
81 | if self.isActive then |
82 | -- update target |
83 | end |
84 | end |
setTargetOffset
DescriptionDefinitionsetTargetOffset()Code
59 | function AITaskDriveTo:setTargetOffset(offset) |
60 | self.offset = offset |
61 | end |
setTargetPosition
DescriptionDefinitionsetTargetPosition()Code
65 | function AITaskDriveTo:setTargetPosition(x, z) |
66 | self.x = x |
67 | self.z = z |
68 | |
69 | if self.isActive then |
70 | -- update target |
71 | -- self.vehicle: |
72 | end |
73 | end |
setVehicle
DescriptionDefinitionsetVehicle()Code
53 | function AITaskDriveTo:setVehicle(vehicle) |
54 | self.vehicle = vehicle |
55 | end |
start
DescriptionDefinitionstart()Code
108 | function AITaskDriveTo:start() |
109 | if self.isServer then |
110 | self.state = AITaskDriveTo.STATE_PREPARE_DRIVING |
111 | self.vehicle:prepareForAIDriving() |
112 | |
113 | self.isActive = true |
114 | |
115 | --#debug log("AITaskDriveTo:start()") |
116 | end |
117 | |
118 | AITaskDriveTo:superClass().start(self) |
119 | end |
startDriving
DescriptionDefinitionstartDriving()Code
135 | function AITaskDriveTo:startDriving() |
136 | local y = getTerrainHeightAtWorldPos(g_currentMission.terrainRootNode, self.x, 0, self.z) |
137 | local dirY = 0 |
138 | |
139 | self.state = AITaskDriveTo.STATE_DRIVE_TO_FINAL_POS |
140 | local x = self.x |
141 | local z = self.z |
142 | |
143 | if self.offset ~= 0 then |
144 | self.state = AITaskDriveTo.STATE_DRIVE_TO_OFFSET_POS |
145 | x = self.x + self.dirX * -self.offset |
146 | z = self.z + self.dirZ * -self.offset |
147 | end |
148 | |
149 | --#debug log("AITaskDriveTo:startDriving()", x, y, z, self.dirX, self.dirZ, "Drive to Offset", (self.state == AITaskDriveTo.STATE_DRIVE_TO_OFFSET_POS)) |
150 | self.vehicle:setAITarget(self, x, y, z, self.dirX, dirY, self.dirZ) |
151 | end |
stop
DescriptionDefinitionstop()Code
123 | function AITaskDriveTo:stop(wasJobStopped) |
124 | AITaskDriveTo:superClass().stop(self, wasJobStopped) |
125 | |
126 | if self.isServer then |
127 | self.vehicle:unsetAITarget() |
128 | |
129 | self.isActive = false |
130 | end |
131 | end |
update
DescriptionDefinitionupdate()Code
88 | function AITaskDriveTo:update(dt) |
89 | if self.isServer then |
90 | if self.state == AITaskDriveTo.STATE_PREPARE_DRIVING then |
91 | local isReadyToDrive, blockingVehicle = self.vehicle:getIsAIReadyToDrive() |
92 | if isReadyToDrive then |
93 | self:startDriving() |
94 | else |
95 | if not self.vehicle:getIsAIPreparingToDrive() then |
96 | self.prepareTimeout = self.prepareTimeout + dt |
97 | if self.prepareTimeout > AITaskDriveTo.PREPARE_TIMEOUT then |
98 | self.vehicle:stopCurrentAIJob(AIMessageErrorCouldNotPrepare.new(blockingVehicle or self.vehicle)) |
99 | end |
100 | end |
101 | end |
102 | end |
103 | end |
104 | end |