courseplay = {}; function courseplay.prerequisitesPresent(specializations) return true; end function courseplay:load() self.recordnumber = 1 self.tmr = 1 self.Waypoints = {} self.play = false self.back = false end function courseplay:draw() if not self.drive then if not self.record then g_currentMission:addHelpButtonText(g_i18n:getText("PointRecordStart"), InputBinding.PointRecord); if InputBinding.hasEvent(InputBinding.PointRecord) then self.record = true self.drive = false self.tmr = 101 end else g_currentMission:addHelpButtonText(g_i18n:getText("PointRecordStop"), InputBinding.PointRecord); if InputBinding.hasEvent(InputBinding.PointRecord) then self.record = false self.drive = false self.play = true self.maxnumber = self.recordnumber - 1 self.back = false end end end if self.play then if not self.drive then g_currentMission:addHelpButtonText(g_i18n:getText("CoursePlayStart"), InputBinding.CoursePlay); if InputBinding.hasEvent(InputBinding.CoursePlay) then self.drive = true self.record = true self.sl = 3 self.deactivateOnLeave = false self.stopMotorOnLeave = false if self.back then self.status = "rueckweg" self.recordnumber = self.maxnumber - 1 else self.status = "hinweg" self.recordnumber = 1 end end else g_currentMission:addHelpButtonText(g_i18n:getText("CoursePlayStop"), InputBinding.CoursePlay); if InputBinding.hasEvent(InputBinding.CoursePlay) then self.record = false self.drive = false self.play = true self.motor:setSpeedLevel(0, false); self.motor.maxRpmOverride = nil; WheelsUtil.updateWheelsPhysics(self, 0, self.lastSpeed, 0, false, self.requiredDriveMode) self.recordnumber = 1 self.deactivateOnLeave = true self.stopMotorOnLeave = true end end end end function courseplay:update() if self.record then if self.tmr > 100 then self.Waypoints[self.recordnumber] = {} local cx,cy,cz = getWorldTranslation(self.rootNode); self.Waypoints[self.recordnumber] = {cx = cx ,cy = cy ,cz = cz} self.tmr = 1 self.recordnumber = self.recordnumber + 1 end self.tmr = self.tmr + (self.lastSpeed * 100) end if self.drive then local ctx,cty,ctz = getWorldTranslation(self.rootNode); cx ,cy ,cz = self.Waypoints[self.recordnumber].cx,self.Waypoints[self.recordnumber].cy,self.Waypoints[self.recordnumber].cz xr = math.floor(cx + 0.5) yr = math.floor(cy + 0.5) zr = math.floor(cz + 0.5) xpr = math.floor(ctx + 0.5) zpr = math.floor(ctz + 0.5) xd = (xr - xpr) * (xr - xpr) zd = (zr - zpr) * (zr - zpr) self.dist = math.sqrt(math.abs(xd + zd) ) if self.dist > 5 then local lx, lz = AIVehicleUtil.getDriveDirection(self.rootNode,xr,yr,zr); renderText(0.75,0.77,0.02, self.status); AIVehicleUtil.driveInDirection(self, 1, 30, 0.5, 30, 30, true, true, lx, lz,self.sl, 0.9); else if not self.back then if self.recordnumber == 1 then self.sl = 3 else if self.recordnumber > self.maxnumber - 4 then self.sl = 1 end end if self.recordnumber < self.maxnumber then self.recordnumber = self.recordnumber + 1 else self.motor:setSpeedLevel(0, false); self.motor.maxRpmOverride = nil; WheelsUtil.updateWheelsPhysics(self, 0, self.lastSpeed, 0, false, self.requiredDriveMode) self.back = true self.record = false self.drive = false self.play = true end else if self.status == "rueckweg" then if self.recordnumber == self.maxnumber - 1 then self.sl = 3 else if self.recordnumber < 4 then self.sl = 1 end end if self.recordnumber > 1 then self.recordnumber = self.recordnumber - 1 else self.record = false self.drive = false self.play = true self.motor:setSpeedLevel(0, false); self.motor.maxRpmOverride = nil; WheelsUtil.updateWheelsPhysics(self, 0, self.lastSpeed, 0, false, self.requiredDriveMode) self.recordnumber = 1 self.back = false self.status = "am ziel" end end end end end end function courseplay:delete() end; function courseplay:mouseEvent(posX, posY, isDown, isUp, button) end function courseplay:keyEvent(unicode, sym, modifier, isDown) end;