def getTrackLength(): try: trackLengthFloat = ac.getTrackLength(0) return trackLengthFloat except Exception as e: ac.console(APP_NAME + ": Error in getTrackLength: %s" % e) ac.log(APP_NAME + ": Error in getTrackLength: %s" % e) return 0
def onRender(*args): global antManagerExecutable, antManagerState, uiElements try: stateFound = antManagerState.updateFromMemory() if stateFound: if not workoutInProgress(): ac.setText(uiElements.btn1, "load workout") else: ac.setText(uiElements.btn1, "stop workout") ac.console("Workout message : " + repr(antManagerState.WorkoutMessage)) elif not stateFound and ac.getText(uiElements.btn1) != "starting...": ac.setText(uiElements.btn1, "start") except Exception as e: ac.console(repr(e)) antManagerState.TrackLength = ac.getTrackLength(0) / 1000 antManagerState.LapPosition = ac.getCarState( 0, acsys.CS.NormalizedSplinePosition) * ac.getTrackLength(0) / 1000 uiElements.update(antManagerState) workoutUi.update(antManagerState) RaceState().updateToMemory()
def startTelemetry(): global logPrefix, telemetrySession telemetrySession = TelemetrySession() trackName = ac.getTrackName(0) trackConfig = ac.getTrackConfiguration(0) trackLength = ac.getTrackLength(0) carName = ac.getCarName(0) telemetrySession.start(carName=carName, trackName=trackName, trackConfig=trackConfig, trackLength=trackLength)
def refresh(self, x, dt, interpolation, main_file): try: if not self.init: self.init = True try: self.load(main_file, "init") except Exception: pass for self.i in range(32): #max_cars if ac.isConnected(self.i) == 1: self.update_custom_car_info(interpolation, dt, self.i) self.prev_active_cam = self.active_cam for self.i in range( self.get_n_cameras() ): if not self.mode[self.active_mode][self.i].camera_pit: if x * ac.getTrackLength() < self.get_camera_in(self.i): self.active_cam = self.get_prev_camera(self.i) break else: self.active_cam = self.get_last_camera() #pit cameras if self.car_is_in_pitline[ac.getFocusedCar()]: for self.i in range( self.get_n_cameras() ): if self.mode[self.active_mode][self.i].camera_pit: if x * ac.getTrackLength() < self.get_camera_in(self.i): self.active_cam = self.get_prev_camera(self.i, "pit") break else: self.active_cam = self.get_last_camera("pit") except Exception as e: debug(e) self.active_cam = 0
def acMain(ac_version): # VARIABLES global totalDrivers global drivers global leaderboardWindow, driverWidget, driverComparisonWidget, fastest_lap_banner # LABELS global leaderboard global lapCountTimerLabel, leaderboardBaseLabel, leaderboardInfoBackgroundLabel, leaderboardBackgroundLabel global flagLabel totalDrivers = ac.getCarsCount() n_splits = ac.getTrackLength(0) / FC.TRACK_SECTION_LENGTH drivers = [Driver(i, n_splits) for i in range(totalDrivers)] # driver positions and update times ac.initFont(0, FC.FONT_NAME, 0, 0) leaderboardWindow = ac.newApp(FC.APP_NAME) ac.setTitle(leaderboardWindow, "") ac.drawBorder(leaderboardWindow, 0) ac.setIconPosition(leaderboardWindow, 0, -10000) ac.setSize(leaderboardWindow, 200, 200) ac.setBackgroundOpacity(leaderboardWindow, 0) # =============================== # Leaderboard Background leaderboardBaseLabel = ac.addLabel(leaderboardWindow, "") ac.setPosition(leaderboardBaseLabel, 0, 0) w, h = get_image_size(FC.LEADERBOARD_BASE_RACE) ac.setSize(leaderboardBaseLabel, w, h) ac.setBackgroundTexture(leaderboardBaseLabel, FC.LEADERBOARD_BASE_RACE) leaderboardBackgroundLabel = ac.addLabel(leaderboardWindow, "") ac.setPosition(leaderboardBackgroundLabel, 0, h) ac.setSize(leaderboardBackgroundLabel, w, totalDrivers*LeaderboardRow.ROW_HEIGHT + 2) ac.setBackgroundTexture(leaderboardBackgroundLabel, FC.LEADERBOARD_BACKGROUND); # =============================== # Lap Counter / Time lapCountTimerLabel = ac.addLabel(leaderboardWindow, "") ac.setPosition(lapCountTimerLabel, 74, 52) ac.setFontSize(lapCountTimerLabel, 22) ac.setCustomFont(lapCountTimerLabel, FC.FONT_NAME, 0, 1) ac.setFontAlignment(lapCountTimerLabel, "center") ac.setFontColor(lapCountTimerLabel, 0.86, 0.86, 0.86, 1) # =============================== # Flags flagLabel = ac.addLabel(leaderboardWindow, "") ac.setPosition(flagLabel, w, 8) ac.setSize(flagLabel, 110, h-8) ac.setVisible(flagLabel, 0) # =============================== # Info Background leaderboardInfoBackgroundLabel = ac.addLabel(leaderboardWindow, "") ac.setPosition(leaderboardInfoBackgroundLabel, w, h) ac.setSize(leaderboardInfoBackgroundLabel, 110, totalDrivers*LeaderboardRow.ROW_HEIGHT + 2) ac.setBackgroundTexture(leaderboardInfoBackgroundLabel, FC.LEADERBOARD_INFO_BACKGROUNG) info_button = ac.addButton(leaderboardWindow, "") ac.setPosition(info_button, w, h) ac.setSize(info_button, 110, totalDrivers*LeaderboardRow.ROW_HEIGHT + 2) ac.addOnClickedListener(info_button, on_click_info) ac.setBackgroundOpacity(info_button, 0) ac.drawBorder(info_button, 0) # =============================== # Driver Widget driverWidget = DriverWidget(FC.APP_NAME+" Driver") # =============================== # Driver Comparison Widget driverComparisonWidget = DriverComparisonWidget(FC.APP_NAME+" Driver Comparison") # =============================== # FastestLap Banner fastest_lap_banner = FastestLapBanner(FC.APP_NAME+" Top Banner") fastest_lap_banner.hide() leaderboard = [None] * totalDrivers for i in range(totalDrivers): leaderboard[i] = LeaderboardRow(leaderboardWindow, i) return FC.APP_NAME
def getTrackLength(): return ac.getTrackLength(0)
def set_camera_in(self, camera, value): self.mode[self.active_mode][camera].camera_in = float(value) / ac.getTrackLength()
def get_camera_in(self, active_cam = -1): self.cam_id = self.sanitize_active_cam(active_cam) return self.mode[self.active_mode][self.cam_id].camera_in * ac.getTrackLength()
def acMain(ac_version): global appWindow, l_sockstat global ego_stat, env_stat, s, ai_lane, fileDest global sct, mon_select, monitor global csvfile, writer, starttime appWindow = ac.newApp(appName) ac.setTitle(appWindow, appName) ac.setSize(appWindow, width, height) global trackName trackName = ac.getTrackName(0) global trackConfig trackConfig = ac.getTrackConfiguration(0) global trackLength trackLength = ac.getTrackLength(0) ac.console(str(trackLength)) ego_stat = { 'trackName': trackName, 'trackConfig': trackConfig, 'gas': None, 'brake': None, 'steerAngle': None, 'velocity': [None, None, None], 'accG': [None, None, None], 'wheelSlip': [None, None, None, None], 'wheelLoad': [None, None, None, None], 'heading': None, 'pitch': None, 'roll': None, 'localAngularVel': [None, None, None], 'localVelocity': [None, None, None], 'normalizedCarPosition': None, 'carCoordinates': [None, None, None], 'surfaceGrip': None, 'env_stat': {}, 'time': 0, 'numCars': None } env_stat = { 'velocity': [None, None, None], 'normalizedCarPosition': None, 'carCoordinates': [None, None, None] } fileDest = os.path.join(os.getcwd(), 'content', 'tracks', trackName, 'ai', 'fast_lane.ai') if not trackConfig == "" and os.path.isdir("content/tracks/%s/%s/ai" % (trackName, trackConfig)): fileDest = os.path.join(os.getcwd(), 'content', 'tracks', trackName, trackConfig, 'ai', 'fast_lane.ai') csvfile = open('apps/python/aclab_py/log.csv', 'w') writer = csv.DictWriter(csvfile, fieldnames=list(ego_stat.keys())) writer.writeheader() # ai_lane = acParse(fileDest) ac.console(fileDest) l_sockstat = ac.addLabel(appWindow, "waiting for client...") ac.setPosition(l_sockstat, 0, 30) sct = mss.mss() monitor = sct.monitors[mon_select] # get data of monitor desired monitor = sct.adj_monitor(monitor) return appName