def acMain(ac_version):
    global updater, appHeight, appWidth, appWindow, numSecondsSpinner
    appWindow = ac.newApp("Traction Circle")
    ac.setSize(appWindow, appWidth, appHeight)
    ac.drawBorder(appWindow, 0)

    try:
        model = TractionCircleModel()
        assetto_corsa = AssettoCorsa()

        maxTimeSpan = 3
        numSecondsSpinner = ac.addSpinner(appWindow, 'Time Span(s)')
        ac.setPosition(numSecondsSpinner, 0, appHeight - 20)
        ac.setSize(numSecondsSpinner, 100, 20)
        ac.setRange(numSecondsSpinner, 1, 10)
        ac.setValue(numSecondsSpinner, maxTimeSpan)
        ac.addOnValueChangeListener(numSecondsSpinner, updateMaxTimeRange)

        gPlotter = GPlotter(appWidth, appHeight, maxG, maxG)
        view = TractionCircleView(appWindow, model, gPlotter, MovingAveragePlotter(10) )
        updater = TractionCircleUpdater(assetto_corsa, view, model, maxTimeRange=maxTimeSpan)

        ac.addRenderCallback(appWindow, doUpdate)
    except Exception as e:
        ac.log(str(traceback.format_exc()))

    return "Traction Circle"
Example #2
0
def acMain(ac_version):
  global TYREINFO, optimal_spinner_id, optimal_spinner_shown
  appWindow = ac.newApp("Tyre Temperatures")
  ac.drawBackground(appWindow, background)  
  ac.drawBorder(appWindow, background)
  ac.setBackgroundOpacity(appWindow, background)
  ac.setSize(appWindow, x_app_size, y_app_size)
  TYREINFO = Tyre_Info(appWindow, x_start, y_start)
  ac.addRenderCallback(appWindow, onFormRender)
  
  TYREINFO.optimal_temp = d_optimal_temp
  TYREINFO.carinifilepath = inidir + getValidFileName(ac.getCarName(0)) + ".ini"
  TYREINFO.needwriteini = 1
  
  if os.path.exists(TYREINFO.carinifilepath):
    f = open(TYREINFO.carinifilepath, "r")
    TYREINFO.optimal_temp = int(f.readline()[8:])
    f.close()
    TYREINFO.needwriteini = 0
  
  optimal_spinner_id = ac.addSpinner(appWindow, "optimal")
  ac.setPosition(optimal_spinner_id, 0, y_app_size + 28)
  ac.setStep(optimal_spinner_id, 1)
  if inFahrenheit:
    ac.setRange(optimal_spinner_id, int(CelsiusToFahrenheit(50)), int(CelsiusToFahrenheit(150)))
    ac.setValue(optimal_spinner_id, int(CelsiusToFahrenheit(TYREINFO.optimal_temp)))
  else:
    ac.setRange(optimal_spinner_id, 50, 150)
    ac.setValue(optimal_spinner_id, TYREINFO.optimal_temp)
  ac.addOnValueChangeListener(optimal_spinner_id, onValueChanged)
  optimal_spinner_shown = 1
  
  ac.log("Danny Giusa Tyre Temperatures loaded")
  return "Danny Giusa Tyre Temperatures"
Example #3
0
def spinner_config(spinner, x, y, xl, yl, min, step, max, value, evt):
    ac.setPosition(spinner, x, y)
    ac.setSize(spinner, xl, yl)
    ac.setRange(spinner, min, max)
    ac.setStep(spinner, step)
    ac.setValue(spinner, value)
    ac.addOnValueChangeListener(spinner, evt)
def spinnerConfig(spinner, spin_pos_x, spin_pos_y, spin_size_x, spin_size_y, spin_val_min, spin_val_step, spin_val_max, spin_value, spin_event, vis_value):
    ac.setPosition(spinner, spin_pos_x, spin_pos_y)
    ac.setSize(spinner, spin_size_x, spin_size_y)
    ac.setRange(spinner, spin_val_min, spin_val_max)
    ac.setStep(spinner, spin_val_step)
    ac.setValue(spinner, spin_value)
    ac.addOnValueChangeListener(spinner, spin_event)
    ac.setVisible(spinner, vis_value)
Example #5
0
def SuperHardEvent(name, state):
    global SuperHard,Tires

    Tires = "SuperHard"
    ac.setValue(NoChange,0)
    ac.setValue(SuperSoft,0)
    ac.setValue(SoftSlick,0)
    ac.setValue(MediumSlick,0)
    ac.setValue(HardSlick,0)
    WriteData()
Example #6
0
def NoChangeEvent(name, state):
    global NoChange,Tires

    Tires = "NoChange"
    ac.setValue(SoftSlick,0)
    ac.setValue(SuperSoft,0)
    ac.setValue(MediumSlick,0)
    ac.setValue(HardSlick,0)
    ac.setValue(SuperHard,0)
    WriteData()
Example #7
0
 def __init__(self):
     self.window = Window(name="ACTV Delta", icon=False, width=240, height=184, texture="")
     self.cursor = Value(False)
     self.session = Value(-1)
     self.performance = Value(0)
     self.spline = Value(0)
     self.laptime = Value(0)
     self.TimeLeftUpdate = Value(0)
     self.referenceLap = []
     self.referenceLapTime = Value(0)
     self.lastLapTime = Value(0)
     self.lapCount = 0
     self.lastLapIsValid = True
     self.currentLap = []
     self.deltaLoaded = False
     self.thread_save = False
     self.highlight_end = 0
     self.rowHeight = Value(-1)
     self.lbl_delta = (
         Label(self.window.app, "+0.000")
         .setSize(150, 36)
         .setPos(0, 60)
         .setFontSize(26)
         .setAlign("right")
         .setVisible(1)
     )
     self.lbl_lap = (
         Label(self.window.app, "0.000")
         .setSize(150, 32)
         .setPos(0, 86)
         .setFontSize(17)
         .setAlign("right")
         .setVisible(1)
     )
     self.btn_reset = (
         Button(self.window.app, self.onResetPress)
         .setPos(90, 68)
         .setSize(60, 20)
         .setText("Reset")
         .setAlign("center")
         .setBgColor(rgb([255, 12, 12], bg=True))
         .setVisible(0)
     )
     self.spin_row_height = ac.addSpinner(self.window.app, "")
     ac.setRange(self.spin_row_height, 20, 48)
     ac.setPosition(self.spin_row_height, 20, 28)
     ac.setValue(self.spin_row_height, self.__class__.ui_row_height)
     ac.addOnValueChangeListener(self.spin_row_height, self.onSpinRowHeightChanged)
     ac.setVisible(self.spin_row_height, 0)
     fontName = "Segoe UI"
     if ac.initFont(0, fontName, 0, 0) > 0:
         self.lbl_delta.setFont(fontName, 0, 1)
     self.cfg = Config("apps/python/prunn/", "config.ini")
     self.loadCFG()
Example #8
0
 def hotkey_pressed(self):
     if self.session.value == 2:
         if self.__class__.race_mode >= 2:
             self.__class__.race_mode = 0
         else:
             self.__class__.race_mode += 1
         ac.setValue(self.spin_race_mode, self.__class__.race_mode)
     else:
         if self.__class__.qual_mode >= 1:
             self.__class__.qual_mode = 0
         else:
             self.__class__.qual_mode += 1
         ac.setValue(self.spin_qual_mode, self.__class__.qual_mode)
     self.__class__.configChanged = True
Example #9
0
def ReadPreset():
    global Car, FixBody, FixEngine, FixSuspen, Preset, Tires, Gas

    PresetConfig = configparser.ConfigParser()
    PresetConfig.read('apps\python\BoxRadio\BoxRadio.ini')

    if not 'PRESET' + str(Preset) + '_' + ac.getCarName(0) in PresetConfig:
        WriteSection()

    Car = PresetConfig['PRESET' + str(Preset) + '_' + ac.getCarName(0)]['car']

    if Car == ac.getCarName(0):
        ac.setValue(FuelSelection, int(PresetConfig['PRESET' + str(Preset) + '_' + str(Car)]['fuel']))
        if PresetConfig['PRESET' + str(Preset) + '_' + str(Car)]['body'] == 'no':
            FixBody = 'yes'
        else:
            FixBody = 'no'
        if PresetConfig['PRESET' + str(Preset) + '_' + str(Car)]['engine'] == 'no':
            FixEngine = 'yes'
        else:
            FixEngine = 'no'
        if PresetConfig['PRESET' + str(Preset) + '_' + str(Car)]['suspen'] == 'no':
            FixSuspen = 'yes'
        else:
            FixSuspen = 'no'
        if PresetConfig['PRESET' + str(Preset) + '_' + str(Car)]['tyre'] == 'NoChange':
            NoChangeEvent('name', 0)
        elif PresetConfig['PRESET' + str(Preset) + '_' + str(Car)]['tyre'] == 'Option1':
            Option1Event('name', 0)
        elif PresetConfig['PRESET' + str(Preset) + '_' + str(Car)]['tyre'] == 'Option2':
            Option2Event('name', 0)
        elif PresetConfig['PRESET' + str(Preset) + '_' + str(Car)]['tyre'] == 'Option3':
            Option3Event('name', 0)
        elif PresetConfig['PRESET' + str(Preset) + '_' + str(Car)]['tyre'] == 'Option4':
            Option4Event('name', 0)
        elif PresetConfig['PRESET' + str(Preset) + '_' + str(Car)]['tyre'] == 'Option5':
            Option5Event('name', 0)
    else:
        ac.setValue(FuelSelection, 0)
        NoChangeEvent('name', 0)
        FixBody = 'yes'
        FixEngine = 'yes'
        FixSuspen = 'yes'

    BodyEvent('name', 0)
    EngineEvent('name', 0)
    SuspensionEvent('name', 0)
    FuelEvent(0)
 def __init__(self, window, changeFunc, width=120, height=20, x=0, y=0, title="spn", minVal=0, maxVal=1, startVal=0):
     self.spinner = ac.addSpinner(window, title)
     self.setSize(width, height)
     self.setPos(x, y)
     self.setRange(minVal, maxVal)
     ac.addOnValueChangeListener(self.spinner, changeFunc)
     Log.blank(ac.setValue(self.spinner, startVal))   # logging it fixes really weird bug
Example #11
0
def acUpdate(deltaT):
    try:
        global Speed, DoPit, FuelMax, InPit, FuelIn, session, delta  # Position,InitialPosition  vars can be removed from the code
        global PitX, PitY, PitZ  # added global variables initiliased as 0,0,0. X,Y,Z co-ords of pit box
        global AppInitialised  # added global variable initiliased as False
        global Notify

        if not AppInitialised:  # First call to app, set variables
            getNotification()
            if AutoUpdate:
                CheckNewUpdate()
            InPit = info.graphics.isInPit
            FuelMax = int(info.static.maxFuel)
            ac.setRange(FuelSelection, 0, FuelMax)
            ReadPreset()
            ac.setValue(Preset1, 1)
            AppInitialised = True

        if abs(PitX) < 1e-5:  # set pit position
            InPit = info.graphics.isInPit
            if InPit:
                PitX, PitY, PitZ = ac.getCarState(0, acsys.CS.WorldPosition)
                ac.log("BoxRadio: Pit position initialized at X:" + str(PitX) + " Y:" + str(PitY) + " Z:" + str(PitZ))

        Speed = ac.getCarState(0, acsys.CS.SpeedKMH)

        if Speed < 0.1 and DoPit == 0:
            session = info.graphics.session  # session number, 2 is race
            InPit = info.graphics.isInPit
            if session == 2:
                PosX, PosY, PosZ = ac.getCarState(0, acsys.CS.WorldPosition)  # current co-ord position
                delta = ((PosX - PitX) ** 2 + (PosY - PitY) ** 2 + (PosZ - PitZ) ** 2) ** 0.5  # straight line dist between pitbox and car
                FuelIn = int(info.physics.fuel)
                if delta < 8.0 or InPit == 1:  # if InPit or within 8m of pitbox, quite relaxed limit guarantees app trigger on menu appear
                    PitStop()
                    ac.log("BoxRadio: Pit performed at X:" + str(PosX) + " Y:" + str(PosY) + " Z:" + str(PosZ))
                    ac.log("BoxRadio: Delta:" + str(delta))
            DoPit = 1

        if Speed >= 0.1:
            DoPit = 0

    except Exception as e:
        ac.log("BoxRadio: Error in acUpdate: %s" % e)
Example #12
0
def Preset1Event(name, state):
    global Preset

    WritePreset()

    Preset = 1
    ac.setValue(Preset1, 1)
    ac.setValue(Preset2, 0)
    ac.setValue(Preset3, 0)
    ac.setValue(Preset4, 0)

    ReadPreset()
Example #13
0
def Preset4Event(name, state):
    global Preset

    WritePreset()

    Preset = 4
    ac.setValue(Preset4, 1)
    ac.setValue(Preset1, 0)
    ac.setValue(Preset2, 0)
    ac.setValue(Preset3, 0)

    ReadPreset()
Example #14
0
def acMain(ac_version):
    global TYREINFO, optimal_spinner_id, optimal_spinner_shown
    appWindow = ac.newApp("Tyre Temperatures")
    ac.drawBackground(appWindow, background)
    ac.drawBorder(appWindow, background)
    ac.setBackgroundOpacity(appWindow, background)
    ac.setSize(appWindow, x_app_size, y_app_size)
    TYREINFO = Tyre_Info(appWindow, x_start, y_start)
    ac.addRenderCallback(appWindow, onFormRender)

    TYREINFO.optimal_temp = d_optimal_temp
    TYREINFO.carinifilepath = inidir + getValidFileName(
        ac.getCarName(0)) + ".ini"
    TYREINFO.needwriteini = 1

    if os.path.exists(TYREINFO.carinifilepath):
        f = open(TYREINFO.carinifilepath, "r")
        TYREINFO.optimal_temp = int(f.readline()[8:])
        f.close()
        TYREINFO.needwriteini = 0

    optimal_spinner_id = ac.addSpinner(appWindow, "optimal")
    ac.setPosition(optimal_spinner_id, 0, y_app_size + 28)
    ac.setStep(optimal_spinner_id, 1)
    if inFahrenheit:
        ac.setRange(optimal_spinner_id, int(CelsiusToFahrenheit(50)),
                    int(CelsiusToFahrenheit(150)))
        ac.setValue(optimal_spinner_id,
                    int(CelsiusToFahrenheit(TYREINFO.optimal_temp)))
    else:
        ac.setRange(optimal_spinner_id, 50, 150)
        ac.setValue(optimal_spinner_id, TYREINFO.optimal_temp)
    ac.addOnValueChangeListener(optimal_spinner_id, onValueChanged)
    optimal_spinner_shown = 1

    ac.log("Danny Giusa Tyre Temperatures loaded")
    return "Danny Giusa Tyre Temperatures"
Example #15
0
def acMain(ac_version):
    global appWindow, labelStorage, spinner_y_offset, scale_factor, fov_setting

    appWindow = ac.newApp("VR-Names")
    ac.setTitle(appWindow, "VR-names")
    ac.setSize(appWindow, 200, 200)
    ac.drawBorder(appWindow, 0)
    ac.setBackgroundOpacity(appWindow, 0)

    # ac.setIconPosition(appWindow, -9000, 0)

    spinner_y_offset = ac.addSpinner(appWindow, "Name Height Offset")
    ac.setRange(spinner_y_offset, -100, 100)
    ac.setValue(spinner_y_offset, 0)
    ac.setStep(spinner_y_offset, 1)
    ac.setPosition(spinner_y_offset, 10, 90)
    ac.setSize(spinner_y_offset, 180, 20)

    scale_factor = ac.addSpinner(appWindow, "scale text factor")
    ac.setRange(scale_factor, 1, 30)
    ac.setValue(scale_factor, 10)
    ac.setStep(scale_factor, 1)
    ac.setPosition(scale_factor, 10, 135)
    ac.setSize(scale_factor, 180, 20)

    fov_setting = ac.addSpinner(appWindow, "scale text factor")
    ac.setRange(fov_setting, 0, 360)
    ac.setValue(fov_setting, 110)
    ac.setStep(fov_setting, 1)
    ac.setPosition(fov_setting, 10, 180)
    ac.setSize(fov_setting, 180, 20)

    button_toggle_name = ac.addButton(appWindow, "Toggle name")
    ac.addOnClickedListener(button_toggle_name, toggle_name)
    ac.setSize(button_toggle_name, 180, 20)
    ac.setPosition(button_toggle_name, 10, 40)

    for x in range(ac.getCarsCount()):
        label = ac.addLabel(appWindow, "")
        ac.setPosition(label, 10, 0 + (20 * x))
        labelStorage.append(label)

    setInitialLabel()
    return "vrnames"
def acMain(ac_version):
    global mainLabel, audioSpinner, audioLabel, audioList, audioVolSpinner, enableCheck, replayEnableCheck, app
    app = ac.newApp("Ultimate Spotter Settings")
    ac.log("SPOTTER: Initializing UI...")

    audioSpinner = ac.addSpinner(app, "Audio")
    audioLabel = ac.addLabel(app, "{}".format(audio))
    audioVolSpinner = ac.addSpinner(app, "Volume")

    enableCheck = ac.addCheckBox(app, "Enable Spotter")
    replayEnableCheck = ac.addCheckBox(app, "Enabled in Replays")

    ac.setSize(app, 300, 220)

    ac.setPosition(enableCheck, 60, 50)
    ac.setValue(enableCheck, USEnabled)
    ac.addOnCheckBoxChanged(enableCheck, onEnableCheck)

    ac.setPosition(replayEnableCheck, 60, 100)
    ac.setValue(replayEnableCheck, USReplayEnabled)
    ac.addOnCheckBoxChanged(replayEnableCheck, onReplayEnableCheck)

    ac.setFontAlignment(audioLabel, "center")
    ac.setPosition(audioLabel, 90, 150)
    ac.setSize(audioSpinner, 100, 20)
    ac.setPosition(audioSpinner, 40, 150)

    audioList = os.listdir(os.path.join(os.path.dirname(__file__), "audio"))
    ac.setRange(audioSpinner, 0, len(audioList) - 1)
    ac.setStep(audioSpinner, 1)
    #ac.setValue(audioSpinner,audioList.index(audio))
    ac.addOnValueChangeListener(audioSpinner, onAudioSpin)

    ac.setSize(audioVolSpinner, 80, 20)
    ac.setPosition(audioVolSpinner, 180, 150)
    ac.setStep(audioVolSpinner, 1)
    ac.setRange(audioVolSpinner, 1, 10)
    ac.setValue(audioVolSpinner, audioVol)
    ac.addOnValueChangeListener(audioVolSpinner, onAudioVolSpin)
    ac.log("SPOTTER: UI Loaded")
Example #17
0
def createUI():
    global uiCreated, x_app_size, y_app_size, defaultFontSize
    global isTimedRace, timedRaceCheckbox, averageFuelPerLapValue, raceTotalLapsText, raceTotalLapsValue, bestLapTimeText, bestLapTimeValue, timedRaceMinutesSpinner, raceLapsSpinner, resetButton, timedRacePlusLapButton, timedRaceMinLapButton
    global extraLiters, extraLitersMinButton, extraLitersPlusButton, extraLitersValue, averageFuelPerLapText, extraLitersText, timedRaceText, toggleAppSizeButton, fuelLapsCountedText, fuelLapsCountedValue, calcTypeText, calcTypeCurrentButton, calcTypeMultipleButton, calcTypeStoredButton, completedLapsText, completedLapsValue, averageLapTimeText, averageLapTimeValue
    global tableCurrentFuel, tableCurrentTime, tableCurrentLaps, tableRaceFuel, tableRaceTime, tableRaceLaps, tableRowRace

    try:
        row = 0
        x_offset = 5
        y_offset = 20

        createLabel("tableHeaderFuel", "Fuel", ((x_app_size)/5) * 2, row * y_offset, defaultFontSize, "center")
        createLabel("tableHeaderTime", "Time", ((x_app_size)/5) * 3, row * y_offset, defaultFontSize, "center")
        createLabel("tableHeaderLaps", "Laps", ((x_app_size)/5) * 4, row * y_offset, defaultFontSize, "center")

        row += 1
        createLabel("tableRowCurrent", "Current", x_offset, row * y_offset, defaultFontSize, "left")

        tableCurrentFuel = createLabel("tableCurrentFuel", "--", ((x_app_size)/5) * 2, row * y_offset, defaultFontSize+2, "center")
        tableCurrentTime = createLabel("tableCurrentTime", "--", ((x_app_size)/5) * 3, row * y_offset, defaultFontSize+2, "center")
        tableCurrentLaps = createLabel("tableCurrentLaps", "--", ((x_app_size)/5) * 4, row * y_offset, defaultFontSize+2, "center")

        row += 1
        tableRowRace = createLabel("tableRowRace", "Total Race", x_offset, row * y_offset, defaultFontSize, "left")

        tableRaceFuel = createLabel("tableRaceFuel", "--", ((x_app_size)/5) * 2, row * y_offset, defaultFontSize+2, "center")
        tableRaceTime = createLabel("tableRaceTime", "--", ((x_app_size)/5) * 3, row * y_offset, defaultFontSize+2, "center")
        tableRaceLaps = createLabel("tableRaceLaps", "--", ((x_app_size)/5) * 4, row * y_offset, defaultFontSize+2, "center")

        toggleAppSizeButton = ac.addButton(mainApp, "+")
        ac.setPosition(toggleAppSizeButton, x_app_size - 20 - x_offset, (row * y_offset) + 5)
        ac.setSize(toggleAppSizeButton, 20, 20)
        ac.addOnClickedListener(toggleAppSizeButton, onToggleAppSizeButtonClickedListener)
        row += 2
        calcTypeText = createLabel("calcTypeText", "Session : ", x_offset, row * y_offset, defaultFontSize, "left")
        calcTypeWidth = 60
        calcTypeOffset = x_offset + 70
        calcTypeCurrentButton = ac.addButton(mainApp, "current")
        ac.setPosition(calcTypeCurrentButton, calcTypeOffset, row * y_offset)
        ac.setSize(calcTypeCurrentButton, calcTypeWidth, 20)
        ac.addOnClickedListener(calcTypeCurrentButton, onCalcTypeCurrentButtonClickedListener)
        calcTypeMultipleButton = ac.addButton(mainApp, "multiple")
        ac.setPosition(calcTypeMultipleButton, calcTypeOffset + calcTypeWidth + 10, row * y_offset)
        ac.setSize(calcTypeMultipleButton, calcTypeWidth, 20)
        ac.addOnClickedListener(calcTypeMultipleButton, onCalcTypeMultipleButtonClickedListener)
        calcTypeStoredButton = ac.addButton(mainApp, "stored")
        ac.setPosition(calcTypeStoredButton, calcTypeOffset + (2*calcTypeWidth) + 20, row * y_offset)
        ac.setSize(calcTypeStoredButton, calcTypeWidth, 20)
        ac.addOnClickedListener(calcTypeStoredButton, onCalcTypeStoredButtonClickedListener)
        row += 2
        averageFuelPerLapText = createLabel("averageFuelPerLapText", "Avg fuel per lap : ", x_offset, row * y_offset, defaultFontSize, "left")
        averageFuelPerLapValue = createLabel("averageFuelPerLapValue", "--", x_app_size - x_offset, row * y_offset, defaultFontSize, "right")
        row += 1
        fuelLapsCountedText = createLabel("fuelLapsCountedText", "Counted laps for fuel average : ", x_offset, row * y_offset, defaultFontSize, "left")
        fuelLapsCountedValue = createLabel("averageFuelPerLapValue", "--", x_app_size - x_offset, row * y_offset, defaultFontSize, "right")
        row += 1
        completedLapsText = createLabel("completedLapsText", "Completed laps : ", x_offset, row * y_offset, defaultFontSize, "left")
        completedLapsValue = createLabel("completedLapsValue", "--", x_app_size - x_offset, row * y_offset, defaultFontSize, "right")
        row += 1
        extraLitersText = createLabel("extraLitersText", "Extra liters : ", x_offset, row * y_offset, defaultFontSize, "left")
        extraLitersValue = createLabel("extraLitersValue", "--", x_app_size - x_offset, row * y_offset, defaultFontSize, "right")
        extraLitersMinButton = ac.addButton(mainApp, "-")
        ac.setPosition(extraLitersMinButton, 180, row * y_offset)
        ac.setSize(extraLitersMinButton, 20, 20)
        ac.addOnClickedListener(extraLitersMinButton, onExtraLitersMinButtonClickedListener)
        extraLitersPlusButton = ac.addButton(mainApp, "+")
        ac.setPosition(extraLitersPlusButton, 205, row * y_offset)
        ac.setSize(extraLitersPlusButton, 20, 20)
        ac.addOnClickedListener(extraLitersPlusButton, onExtraLitersPlusButtonClickedListener)
        row += 1
        timedRaceText = createLabel("timedRaceText", "Is timed race : ", x_offset, row * y_offset, defaultFontSize, "left")
        timedRaceCheckbox = ac.addCheckBox(mainApp, "")
        ac.setPosition(timedRaceCheckbox, x_app_size - (x_offset + 15), row * y_offset + 4)
        ac.setSize(timedRaceCheckbox, 15, 15)
        ac.setValue(timedRaceCheckbox, isTimedRace)
        ac.addOnCheckBoxChanged(timedRaceCheckbox, onTimedRaceChangedListener)
        row += 1

        raceTypeRow = row

        raceTotalLapsText = createLabel("raceTotalLapsText", "Expected race laps : ", x_offset, row * y_offset, defaultFontSize, "left")
        raceTotalLapsValue = createLabel("raceTotalLapsValue", "--", x_app_size - x_offset, row * y_offset, defaultFontSize, "right")
        timedRaceMinLapButton = ac.addButton(mainApp, "-")
        ac.setPosition(timedRaceMinLapButton, 180, row * y_offset)
        ac.setSize(timedRaceMinLapButton, 20, 20)
        ac.addOnClickedListener(timedRaceMinLapButton, onTimedRaceMinLapButtonClickedListener)
        timedRacePlusLapButton = ac.addButton(mainApp, "+")
        ac.setPosition(timedRacePlusLapButton, 205, row * y_offset)
        ac.setSize(timedRacePlusLapButton, 20, 20)
        ac.addOnClickedListener(timedRacePlusLapButton, onTimedRacePlusLapButtonClickedListener)
        row += 1
        averageLapTimeText = createLabel("averageLapTimeText", "Average lap time : ", x_offset, row * y_offset, defaultFontSize, "left")
        averageLapTimeValue = createLabel("averageLapTimeValue", "--", x_app_size - x_offset, row * y_offset, defaultFontSize, "right")
        row += 1
        bestLapTimeText = createLabel("bestLapTimeText", "Best lap time : ", x_offset, row * y_offset, defaultFontSize, "left")
        bestLapTimeValue = createLabel("bestLapTimeValue", "--", x_app_size - x_offset, row * y_offset, defaultFontSize, "right")
        row += 3
        timedRaceMinutesSpinner = ac.addSpinner(mainApp, "Timed race minutes")
        ac.setRange(timedRaceMinutesSpinner, 0, 240)
        ac.setValue(timedRaceMinutesSpinner, timedRaceMinutes)
        ac.setStep(timedRaceMinutesSpinner, 1)
        ac.setPosition(timedRaceMinutesSpinner, x_app_size / 6, row * y_offset)
        ac.addOnValueChangeListener(timedRaceMinutesSpinner, onTimedRaceMinutesChangedListener)
        row += 2
        resetButton = ac.addButton(mainApp, "Reset")
        ac.setPosition(resetButton, x_offset + 5, (row * y_offset) + (y_offset / 2))
        ac.setSize(resetButton, 50, 22)
        ac.addOnClickedListener(resetButton, onResetClickedListener)

        row = raceTypeRow

        row += 5
        raceLapsSpinner = ac.addSpinner(mainApp, "Race laps")
        ac.setRange(raceLapsSpinner, 0, 100)
        ac.setValue(raceLapsSpinner, raceLaps)
        ac.setStep(raceLapsSpinner, 1)
        ac.setPosition(raceLapsSpinner, x_app_size / 6, row * y_offset)
        ac.addOnValueChangeListener(raceLapsSpinner, onRaceLapsChangedListener)

        updateUIVisibility()

        uiCreated = True

    except exception:
        debug(repr(traceback.format_exception(exc_type, exc_value, exc_traceback)))
        showMessage("Error: " + traceback.format_exc())
Example #18
0
def ResponseWit():
    global SoftSlick,MediumSlick,HardSlick,SuperHard,Body,Engine,Suspension,NoChange,SuperSoft
    global PitFileText,PitFileLines,Tires,Gas,FixBody,FixEngine,FixSuspension
    
    with open('apps/python/PitVoice/Pit.txt') as PitFileText:
        PitFileLines = [line.rstrip('\n') for line in PitFileText]
    
    Tires = PitFileLines[0]
    Gas = PitFileLines[1]
    FixBody = PitFileLines[2]
    FixEngine = PitFileLines[3]
    FixSuspension = PitFileLines[4]
    PitFileText.close()

    if Tires == "NoChange":
        ac.setValue(NoChange,1)
        ac.setValue(SoftSlick,0)
        ac.setValue(SuperSoft,0)
        ac.setValue(MediumSlick,0)
        ac.setValue(HardSlick,0)
        ac.setValue(SuperHard,0)
    if Tires == "SuperSoft":
        ac.setValue(SuperSoft,1)
        ac.setValue(NoChange,0)
        ac.setValue(SoftSlick,0)
        ac.setValue(MediumSlick,0)
        ac.setValue(HardSlick,0)
        ac.setValue(SuperHard,0)
    if Tires == "SoftSlick":
        ac.setValue(SoftSlick,1)
        ac.setValue(NoChange,0)
        ac.setValue(SuperSoft,0)
        ac.setValue(MediumSlick,0)
        ac.setValue(HardSlick,0)
        ac.setValue(SuperHard,0)
    if Tires == "MediumSlick":
        ac.setValue(MediumSlick,1)
        ac.setValue(NoChange,0)
        ac.setValue(SuperSoft,0)
        ac.setValue(SoftSlick,0)
        ac.setValue(HardSlick,0)
        ac.setValue(SuperHard,0)
    if Tires == "HardSlick":
        ac.setValue(SuperSoft,1)
        ac.setValue(NoChange,0)
        ac.setValue(SuperSoft,0)
        ac.setValue(SoftSlick,0)
        ac.setValue(MediumSlick,0)
        ac.setValue(SuperHard,0)
    if Tires == "SuperHard":
        ac.setValue(SuperHard,1)
        ac.setValue(NoChange,0)
        ac.setValue(SuperSoft,0)
        ac.setValue(SoftSlick,0)
        ac.setValue(MediumSlick,0)
        ac.setValue(HardSlick,0)

    if FixBody == "yes":
        ac.setValue(Body,1)
    else:
        ac.setValue(Body,0)
    if FixEngine == "yes":
        ac.setValue(Engine,1)
    else:
        ac.setValue(Engine,0)
    if FixSuspension == "yes":
        ac.setValue(Suspension,1)
    else:
        ac.setValue(Suspension,0)

    if Gas != "0":
        ac.setText(label3,"{}".format(Gas))
Example #19
0
    def __init__(self):
        self.visual_timeout = -1
        self.session = Value(-1)
        self.listen_active = True
        Colors.load_themes()
        Font.load_fonts()

        self.window = Window(name="ACTV Config", icon=False, width=251, height=590, texture="").setBgOpacity(0)

        self.btn_tab1 = Button(self.window.app, self.on_tab1_press)\
            .setPos(0, -22).setSize(126, 22).setText("General")\
            .setAlign("center").setBgColor(rgb([255, 12, 12], bg=True))
        self.btn_tab2 = Button(self.window.app, self.on_tab2_press)\
            .setPos(126, -22).setSize(125, 22).setText("Colors")\
            .setAlign("center").setBgColor(rgb([12, 12, 12], bg=True))

        y = 50
        self.spin_race_mode = ac.addSpinner(self.window.app, "Race tower mode :")
        ac.setRange(self.spin_race_mode, 0, 8)
        ac.setPosition(self.spin_race_mode, 20, y)
        ac.setValue(self.spin_race_mode, self.__class__.race_mode)
        ac.addOnValueChangeListener(self.spin_race_mode, self.on_spin_race_mode_changed)
        self.lbl_race_mode = Label(self.window.app, "Auto")\
            .setSize(120, 26).setPos(186, y - 28)\
            .setFontSize(12).setAlign("left")\
            .setVisible(1)

        y += 70
        self.spin_qual_mode = ac.addSpinner(self.window.app, "Qual tower mode :")
        ac.setRange(self.spin_qual_mode, 0, 4)
        ac.setPosition(self.spin_qual_mode, 20, y)
        ac.setValue(self.spin_qual_mode, self.__class__.qual_mode)
        ac.addOnValueChangeListener(self.spin_qual_mode, self.on_spin_qual_mode_changed)
        self.lbl_qual_mode = Label(self.window.app, "Gaps")\
            .setSize(120, 26).setPos(186, y - 28)\
            .setFontSize(12).setAlign("left")\
            .setVisible(1)

        y += 70
        self.spin_num_cars = ac.addSpinner(self.window.app, "Number cars tower")
        ac.setRange(self.spin_num_cars, 6, 80)
        ac.setPosition(self.spin_num_cars, 20, y)
        ac.setValue(self.spin_num_cars, self.__class__.max_num_cars)
        ac.addOnValueChangeListener(self.spin_num_cars, self.on_spin_num_cars_changed)

        y += 70
        self.spin_num_laps = ac.addSpinner(self.window.app, "Number laps stint mode")
        ac.setRange(self.spin_num_laps, 0, 28)
        ac.setPosition(self.spin_num_laps, 20, y)
        ac.setValue(self.spin_num_laps, self.__class__.max_num_laps_stint)
        ac.addOnValueChangeListener(self.spin_num_laps, self.on_spin_num_laps_changed)

        y += 70
        self.spin_row_height = ac.addSpinner(self.window.app, "Row height")
        ac.setRange(self.spin_row_height, 20, 80)
        ac.setPosition(self.spin_row_height, 20, y)
        ac.setValue(self.spin_row_height, self.__class__.ui_row_height)
        ac.addOnValueChangeListener(self.spin_row_height, self.on_spin_row_height_changed)

        # Names mode
        y += 70
        self.spin_names = ac.addSpinner(self.window.app, "Names :")
        ac.setRange(self.spin_names, 0, 4)
        ac.setPosition(self.spin_names, 20, y)
        ac.setValue(self.spin_names, self.__class__.names)
        ac.addOnValueChangeListener(self.spin_names, self.on_spin_names_changed)
        self.lbl_names = Label(self.window.app, "TLC") \
            .setSize(120, 26).setPos(150, y - 28) \
            .setFontSize(12).setAlign("left") \
            .setVisible(1)

        # Refresh rate
        y += 70
        self.spin_refresh_rate = ac.addSpinner(self.window.app, "Refresh rate / sec")
        ac.setRange(self.spin_refresh_rate, 20, 120)
        ac.setPosition(self.spin_refresh_rate, 20, y)
        ac.setValue(self.spin_refresh_rate, self.__class__.refresh_rate)
        ac.addOnValueChangeListener(self.spin_refresh_rate, self.on_spin_refresh_rate_changed)

        y += 52
        self.chk_invalidated = ac.addCheckBox(self.window.app, "")
        ac.setPosition(self.chk_invalidated, 20, y)
        ac.addOnCheckBoxChanged(self.chk_invalidated, self.on_check_invalidated_changed)
        self.lbl_title_invalidated = Label(self.window.app, "Lap can be invalidated")\
            .setSize(200, 26).setPos(65, y + 1)\
            .setFontSize(16).setAlign("left")\
            .setVisible(1)

        y += 33
        self.chk_force_info = ac.addCheckBox(self.window.app, "")
        ac.setPosition(self.chk_force_info, 20, y)
        ac.addOnCheckBoxChanged(self.chk_force_info, self.on_check_force_info_changed)
        self.lbl_title_force_info = Label(self.window.app, "Info always visible")\
            .setSize(200, 26).setPos(65, y + 1)\
            .setFontSize(16).setAlign("left")\
            .setVisible(1)

        # --------- Theme RGB ----------
        y = 50
        # General theme : 0-Dark 1-white
        self.spin_general_theme = ac.addSpinner(self.window.app, "Theme :")
        ac.setRange(self.spin_general_theme, 0, len(Colors.theme_files))
        ac.setPosition(self.spin_general_theme, 20, y)
        ac.setValue(self.spin_general_theme, 0)
        ac.addOnValueChangeListener(self.spin_general_theme, self.on_spin_general_theme_changed)
        ac.setVisible(self.spin_general_theme, 0)
        self.lbl_general_theme = Label(self.window.app, "Dark").setSize(120, 26).setPos(152, y - 28).setFontSize(
            12).setAlign("left").setVisible(0)

        # Font
        y += 70
        self.spin_font = ac.addSpinner(self.window.app, "Font :")
        ac.setRange(self.spin_font, 0, len(Font.font_files))
        ac.setPosition(self.spin_font, 20, y)
        ac.setValue(self.spin_font, Font.current)
        ac.addOnValueChangeListener(self.spin_font, self.on_spin_font_changed)
        ac.setVisible(self.spin_font, 0)
        self.lbl_font = Label(self.window.app, "Default").setSize(120, 26).setPos(148, y - 28).setFontSize(
            12).setAlign("left").setVisible(0)

        y += 70
        self.spin_theme_red = ac.addSpinner(self.window.app, "Red")
        ac.setRange(self.spin_theme_red, 0, 255)
        ac.setPosition(self.spin_theme_red, 20, y)
        ac.setValue(self.spin_theme_red, self.__class__.theme_red)
        ac.addOnValueChangeListener(self.spin_theme_red, self.on_red_changed)
        y += 70
        self.spin_theme_green = ac.addSpinner(self.window.app, "Green")
        ac.setRange(self.spin_theme_green, 0, 255)
        ac.setPosition(self.spin_theme_green, 20, y)
        ac.setValue(self.spin_theme_green, self.__class__.theme_green)
        ac.addOnValueChangeListener(self.spin_theme_green, self.on_green_changed)
        y += 70
        self.spin_theme_blue = ac.addSpinner(self.window.app, "Blue")
        ac.setRange(self.spin_theme_blue, 0, 255)
        ac.setPosition(self.spin_theme_blue, 20, y)
        ac.setValue(self.spin_theme_blue, self.__class__.theme_blue)
        ac.addOnValueChangeListener(self.spin_theme_blue, self.on_blue_changed)
        ac.setVisible(self.spin_theme_red, 0)
        ac.setVisible(self.spin_theme_green, 0)
        ac.setVisible(self.spin_theme_blue, 0)

        # byClass
        y += 70
        self.spin_colors_by = ac.addSpinner(self.window.app, "Car colors by :")
        ac.setRange(self.spin_colors_by, 0, 1)
        ac.setPosition(self.spin_colors_by, 20, y)
        ac.setValue(self.spin_colors_by, self.__class__.carColorsBy)
        ac.addOnValueChangeListener(self.spin_colors_by, self.on_spin_colors_by_changed)
        ac.setVisible(self.spin_colors_by, 0)
        self.lbl_colors_by = Label(self.window.app, "Brand").setSize(120, 26).setPos(178, y - 28).setFontSize(
            12).setAlign("left").setVisible(0)

        # Border direction - Horizontal vertical none
        y += 70
        self.spin_border_direction = ac.addSpinner(self.window.app, "Border direction :")
        ac.setRange(self.spin_border_direction, 0, 1)
        ac.setPosition(self.spin_border_direction, 20, y)
        ac.setValue(self.spin_border_direction, 0)
        ac.addOnValueChangeListener(self.spin_border_direction, self.on_spin_border_direction_changed)
        ac.setVisible(self.spin_border_direction, 0)
        self.lbl_border_direction = Label(self.window.app, "Horizontal").setSize(120, 26).setPos(192, y - 28).setFontSize(
            12).setAlign("left").setVisible(0)

        self.cfg_loaded = False
        self.cfg = Config("apps/python/prunn/", "config.ini")
        self.load_cfg()

        # thread
        self.key_listener = threading.Thread(target=self.listen_key)
        self.key_listener.daemon = True
        self.key_listener.start()
Example #20
0
    def load_cfg(self):
        self.__class__.lapCanBeInvalidated = self.cfg.get("SETTINGS", "lap_can_be_invalidated", "int")
        if self.__class__.lapCanBeInvalidated == -1:
            self.__class__.lapCanBeInvalidated = 1
        self.__class__.forceInfoVisible = self.cfg.get("SETTINGS", "force_info_visible", "int")
        if self.__class__.forceInfoVisible == -1:
            self.__class__.forceInfoVisible = 0
        self.__class__.max_num_cars = self.cfg.get("SETTINGS", "num_cars_tower", "int")
        if self.__class__.max_num_cars == -1:
            self.__class__.max_num_cars = 10
        self.__class__.max_num_laps_stint = self.cfg.get("SETTINGS", "num_laps_stint", "int")
        if self.__class__.max_num_laps_stint == -1:
            self.__class__.max_num_laps_stint = 8
        self.__class__.ui_row_height = self.cfg.get("SETTINGS", "ui_row_height", "int")
        if self.__class__.ui_row_height == -1:
            user32 = ctypes.windll.user32
            window_height = user32.GetSystemMetrics(1)
            if window_height >= 2000:  # 4k
                self.__class__.ui_row_height = 72
            elif window_height >= 1400:  # 2k
                self.__class__.ui_row_height = 54
            else:  # 1080p
                self.__class__.ui_row_height = 36
        self.__class__.race_mode = self.cfg.get("SETTINGS", "race_mode", "int")
        if self.__class__.race_mode == -1:
            self.__class__.race_mode = 1
        self.__class__.qual_mode = self.cfg.get("SETTINGS", "qual_mode", "int")
        if self.__class__.qual_mode == -1:
            self.__class__.qual_mode = 0
        self.__class__.names = self.cfg.get("SETTINGS", "names", "int")
        if self.__class__.names == -1:
            self.__class__.names = 0
        self.__class__.refresh_rate = self.cfg.get("SETTINGS", "refresh_rate", "int")
        if self.__class__.refresh_rate == -1:
            self.__class__.refresh_rate = 50
        Label.refresh_rate = self.__class__.refresh_rate
        # RGB
        self.__class__.theme_red = self.cfg.get("SETTINGS", "red", "int")
        if self.__class__.theme_red == -1:
            self.__class__.theme_red = 191
        self.__class__.theme_green = self.cfg.get("SETTINGS", "green", "int")
        if self.__class__.theme_green == -1:
            self.__class__.theme_green = 0
        self.__class__.theme_blue = self.cfg.get("SETTINGS", "blue", "int")
        if self.__class__.theme_blue == -1:
            self.__class__.theme_blue = 0
        self.__class__.carColorsBy = self.cfg.get("SETTINGS", "car_colors_by", "int")
        if self.__class__.carColorsBy == -1:
            self.__class__.carColorsBy = 0
        font_ini = self.cfg.get("SETTINGS", "font_ini", "string")
        if font_ini != -1:
            Font.font_ini = font_ini
        else:
            Font.font_ini = ''

        if Font.font_ini != '' and len(Font.font_files):
            #  font number from ini
            for i in range(0, len(Font.font_files)):
                if Font.font_files[i]['file'] == Font.font_ini:
                    Font.set_font(i + 1)
                    break
        else:
            font = self.cfg.get("SETTINGS", "font", "int")
            if font == -1 or font > len(Font.font_files) - 1:
                font = 2  # Open Sans
            Font.set_font(font)

        theme_ini = self.cfg.get("SETTINGS", "theme_ini", "string")
        if theme_ini != -1:
            Colors.theme_ini = theme_ini
        else:
            Colors.theme_ini = ''

        if Colors.theme_ini != '' and len(Colors.theme_files):
            #  Get_theme number from ini
            for i in range(0, len(Colors.theme_files)):
                if Colors.theme_files[i]['file'] == Colors.theme_ini:
                    Colors.general_theme = i + 1
                    break
        else:
            general_theme = self.cfg.get("SETTINGS", "general_theme", "int")
            if general_theme >= 0:
                Colors.general_theme = general_theme

        border_direction = self.cfg.get("SETTINGS", "border_direction", "int")
        if border_direction >= 0:
            Colors.border_direction = border_direction

        ac.setValue(self.spin_race_mode, self.__class__.race_mode)
        ac.setValue(self.spin_qual_mode, self.__class__.qual_mode)
        ac.setValue(self.spin_names, self.__class__.names)
        ac.setValue(self.spin_refresh_rate, self.__class__.refresh_rate)
        ac.setValue(self.spin_num_cars, self.__class__.max_num_cars)
        ac.setValue(self.spin_num_laps, self.__class__.max_num_laps_stint)
        ac.setValue(self.spin_row_height, self.__class__.ui_row_height)
        ac.setValue(self.chk_invalidated, self.__class__.lapCanBeInvalidated)
        ac.setValue(self.chk_force_info, self.__class__.forceInfoVisible)
        ac.setValue(self.spin_theme_red, self.__class__.theme_red)
        ac.setValue(self.spin_theme_green, self.__class__.theme_green)
        ac.setValue(self.spin_theme_blue, self.__class__.theme_blue)
        ac.setValue(self.spin_colors_by, self.__class__.carColorsBy)
        ac.setValue(self.spin_font, Font.current)
        ac.setValue(self.spin_general_theme, Colors.general_theme)
        ac.setValue(self.spin_border_direction, Colors.border_direction)
        self.set_labels()
        self.cfg_loaded = True
Example #21
0
    def value(self, value: float):
        if self.range[0] <= value <= self.range[1]:
            self._value = value

            if self.has_id:
                ac.setValue(self.id, value)
Example #22
0
    def __init__(self):
        self.session = Value(-1)
        self.listen_active = True
        self.window = Window(name="ACTV Config", icon=True, width=251, height=480, texture="").setBgOpacity(0.6)

        y = 60
        self.spin_race_mode = ac.addSpinner(self.window.app, "Race tower mode :")
        ac.setRange(self.spin_race_mode, 0, 2)
        ac.setPosition(self.spin_race_mode, 20, y)
        ac.setValue(self.spin_race_mode, self.__class__.race_mode)
        ac.addOnValueChangeListener(self.spin_race_mode, self.onSpinRaceModeChanged)
        self.lbl_race_mode = (
            Label(self.window.app, "Auto")
            .setSize(120, 26)
            .setPos(186, y - 28)
            .setFontSize(12)
            .setAlign("left")
            .setVisible(1)
        )

        y += 80
        self.spin_qual_mode = ac.addSpinner(self.window.app, "Qual tower mode :")
        ac.setRange(self.spin_qual_mode, 0, 1)
        ac.setPosition(self.spin_qual_mode, 20, y)
        ac.setValue(self.spin_qual_mode, self.__class__.qual_mode)
        ac.addOnValueChangeListener(self.spin_qual_mode, self.onSpinQualModeChanged)
        self.lbl_qual_mode = (
            Label(self.window.app, "Gaps")
            .setSize(120, 26)
            .setPos(186, y - 28)
            .setFontSize(12)
            .setAlign("left")
            .setVisible(1)
        )

        y += 80
        self.spin_num_cars = ac.addSpinner(self.window.app, "Number cars tower")
        ac.setRange(self.spin_num_cars, 6, 28)
        ac.setPosition(self.spin_num_cars, 20, y)
        ac.setValue(self.spin_num_cars, self.__class__.max_num_cars)
        ac.addOnValueChangeListener(self.spin_num_cars, self.onSpinNumCarsChanged)

        y += 80
        self.spin_num_laps = ac.addSpinner(self.window.app, "Number laps stint mode")
        ac.setRange(self.spin_num_laps, 2, 28)
        ac.setPosition(self.spin_num_laps, 20, y)
        ac.setValue(self.spin_num_laps, self.__class__.max_num_laps_stint)
        ac.addOnValueChangeListener(self.spin_num_laps, self.onSpinNumLapsChanged)

        y += 80
        self.spin_row_height = ac.addSpinner(self.window.app, "Row height")
        ac.setRange(self.spin_row_height, 20, 48)
        ac.setPosition(self.spin_row_height, 20, y)
        ac.setValue(self.spin_row_height, self.__class__.ui_row_height)
        ac.addOnValueChangeListener(self.spin_row_height, self.onSpinRowHeightChanged)

        y += 60
        self.chk_invalidated = ac.addCheckBox(self.window.app, "")
        ac.setPosition(self.chk_invalidated, 20, y)
        ac.addOnCheckBoxChanged(self.chk_invalidated, self.onCheckInvalidatedChanged)
        self.lbl_title_invalidated = (
            Label(self.window.app, "Lap can be invalidated")
            .setSize(200, 26)
            .setPos(65, y + 1)
            .setFontSize(16)
            .setAlign("left")
            .setVisible(1)
        )

        self.cfg_loaded = False
        self.cfg = Config("apps/python/prunn/", "config.ini")
        self.loadCFG()

        # thread
        self.key_listener = threading.Thread(target=self.listen_key)
        self.key_listener.daemon = True
        self.key_listener.start()
Example #23
0
def FillEvent(name, state):
    global FuelSelection, FuelMax

    ac.setValue(FuelSelection, int(FuelMax))
    FuelEvent(1)
Example #24
0
    def __init__(self):
        self.visual_timeout = -1
        self.session = Value(-1)
        self.listen_active = True
        Colors.load_themes()
        Font.load_fonts()

        self.window = Window(name="ACTV CP Config",
                             icon=False,
                             width=251,
                             height=570,
                             texture="").setBgOpacity(0)

        y = 50
        self.spin_race_mode = ac.addSpinner(self.window.app,
                                            "Race tower mode :")
        ac.setRange(self.spin_race_mode, 0, 8)
        ac.setPosition(self.spin_race_mode, 20, y)
        ac.setValue(self.spin_race_mode, self.__class__.race_mode)
        ac.addOnValueChangeListener(self.spin_race_mode,
                                    self.on_spin_race_mode_changed)
        self.lbl_race_mode = Label(self.window.app, "Auto")\
            .setSize(120, 26).setPos(186, y - 28)\
            .setFontSize(12).setAlign("left")\
            .setVisible(1)

        y += 70
        self.spin_qual_mode = ac.addSpinner(self.window.app,
                                            "Qual tower mode :")
        ac.setRange(self.spin_qual_mode, 0, 4)
        ac.setPosition(self.spin_qual_mode, 20, y)
        ac.setValue(self.spin_qual_mode, self.__class__.qual_mode)
        ac.addOnValueChangeListener(self.spin_qual_mode,
                                    self.on_spin_qual_mode_changed)
        self.lbl_qual_mode = Label(self.window.app, "Gaps")\
            .setSize(120, 26).setPos(186, y - 28)\
            .setFontSize(12).setAlign("left")\
            .setVisible(1)

        y += 70
        self.spin_num_cars = ac.addSpinner(self.window.app,
                                           "Number cars tower")
        ac.setRange(self.spin_num_cars, 6, 80)
        ac.setPosition(self.spin_num_cars, 20, y)
        ac.setValue(self.spin_num_cars, self.__class__.max_num_cars)
        ac.addOnValueChangeListener(self.spin_num_cars,
                                    self.on_spin_num_cars_changed)

        y += 70
        self.spin_row_height = ac.addSpinner(self.window.app, "Row height")
        ac.setRange(self.spin_row_height, 26, 80)
        ac.setPosition(self.spin_row_height, 20, y)
        ac.setValue(self.spin_row_height, self.__class__.ui_row_height)
        ac.addOnValueChangeListener(self.spin_row_height,
                                    self.on_spin_row_height_changed)

        # Names mode
        y += 70
        self.spin_names = ac.addSpinner(self.window.app, "Names :")
        ac.setRange(self.spin_names, 0, 4)
        ac.setPosition(self.spin_names, 20, y)
        ac.setValue(self.spin_names, self.__class__.names)
        ac.addOnValueChangeListener(self.spin_names,
                                    self.on_spin_names_changed)
        self.lbl_names = Label(self.window.app, "TLC") \
            .setSize(120, 26).setPos(150, y - 28) \
            .setFontSize(12).setAlign("left") \
            .setVisible(1)

        # Refresh rate
        y += 70
        self.spin_refresh_rate = ac.addSpinner(self.window.app,
                                               "Refresh rate / sec")
        ac.setRange(self.spin_refresh_rate, 20, 120)
        ac.setPosition(self.spin_refresh_rate, 20, y)
        ac.setValue(self.spin_refresh_rate, self.__class__.refresh_rate)
        ac.addOnValueChangeListener(self.spin_refresh_rate,
                                    self.on_spin_refresh_rate_changed)

        y += 52
        self.chk_force_info = ac.addCheckBox(self.window.app, "")
        ac.setPosition(self.chk_force_info, 20, y)
        ac.addOnCheckBoxChanged(self.chk_force_info,
                                self.on_check_force_info_changed)
        self.lbl_title_force_info = Label(self.window.app, "Info always visible")\
            .setSize(200, 26).setPos(65, y + 1)\
            .setFontSize(16).setAlign("left")\
            .setVisible(1)

        y += 33
        self.chk_save_delta = ac.addCheckBox(self.window.app, "")
        ac.setPosition(self.chk_save_delta, 20, y)
        ac.addOnCheckBoxChanged(self.chk_save_delta,
                                self.on_check_save_delta_changed)
        self.lbl_title_save_delta = Label(self.window.app, "Save delta between sessions")\
            .setSize(200, 26).setPos(65, y + 3)\
            .setFontSize(14).setAlign("left")\
            .setVisible(1)

        y += 33
        self.chk_show_tires = ac.addCheckBox(self.window.app, "")
        ac.setPosition(self.chk_show_tires, 20, y)
        ac.addOnCheckBoxChanged(self.chk_show_tires,
                                self.on_check_show_tires_changed)
        self.lbl_title_show_tires = Label(self.window.app, "Show tires (tower)")\
            .setSize(200, 26).setPos(65, y + 3)\
            .setFontSize(14).setAlign("left")\
            .setVisible(1)

        self.cfg_loaded = False
        self.cfg = Config(Colors.app_path, "config.ini")
        self.load_cfg()

        # thread
        self.key_listener = threading.Thread(target=self.listen_key)
        self.key_listener.daemon = True
        self.key_listener.start()
Example #25
0
File: acdelta.py Project: Nrde/ACTV
 def __init__(self):
     self.window = Window(name="ACTV Delta",
                          icon=False,
                          width=240,
                          height=246,
                          texture="")
     self.cursor = Value(False)
     self.session = Value(-1)
     self.performance = Value(0)
     self.performance_session = Value(0)
     self.spline = Value(0)
     self.laptime = Value(0)
     self.TimeLeftUpdate = Value(0)
     self.referenceLap = []
     self.referenceLap_session = []
     self.referenceLapTime = Value(0)
     self.referenceLapTime_session = Value(0)
     self.lastLapTime = Value(0)
     self.lapCount = 0
     self.lastLapIsValid = True
     self.currentLap = []
     self.deltaLoaded = False
     self.thread_save = False
     self.highlight_end = 0
     self.rowHeight = Value(-1)
     self.lbl_delta = Label(self.window.app, "+0.000")\
         .set(w=150, h=36,
              x=0, y=60,
              font_size=26,
              align="right",
              visible=1)
     self.lbl_session_delta = Label(self.window.app, "+0.000")\
         .set(w=150, h=36,
              x=0, y=40,
              font_size=14,
              align="right",
              visible=1)
     self.lbl_lap = Label(self.window.app, "0.000")\
         .set(w=150, h=32,
              x=0, y=80,
              font_size=17,
              align="right",
              visible=1)
     self.btn_reset = Button(self.window.app, self.on_reset_press)\
         .setPos(90, 68).setSize(60, 20)\
         .setText("Reset")\
         .setAlign("center")\
         .setBgColor(rgb([255, 12, 12], bg=True))\
         .setVisible(0)
     self.spin_row_height = ac.addSpinner(self.window.app, "")
     ac.setRange(self.spin_row_height, 20, 70)
     ac.setPosition(self.spin_row_height, 20, 28)
     ac.setValue(self.spin_row_height, self.__class__.ui_row_height)
     ac.addOnValueChangeListener(self.spin_row_height,
                                 self.on_spin_row_height_changed)
     ac.setVisible(self.spin_row_height, 0)
     font_name = "Segoe UI"
     if ac.initFont(0, font_name, 0, 0) > 0:
         self.lbl_delta.setFont(font_name, 0, 1)
         self.lbl_session_delta.setFont(font_name, 0, 1)
     self.cfg = Config("apps/python/prunn/", "config.ini")
     self.load_cfg()
Example #26
0
 def loadCFG(self):
     self.__class__.ui_row_height = self.cfg.get("DELTA", "delta_row_height", "int")
     ac.setValue(self.spin_row_height, self.__class__.ui_row_height)
     self.reDrawSize()
Example #27
0
 def percent(self, value):
     self._percent = value/100  # need to be 0.0 <= value <= 1.0
     ac.setValue(self.id, self._percent)
Example #28
0
def acMain(ac_version):
    global appWindow
    global sound_player, SoundPackSpinner, VolumeSpinner
    global Beforerace, Overtake, Suspense, Win, Lose, labeldesc, Hotlap
    global StatusLabel, NotificationLabel, audio, audiolist, BeforeraceLabel, OvertakeLabel, SuspenseLabel
    global WinLabel, LoseLabel, audiolabel, position, debuglabel
    # DEBUG INFO
    global enable_overtake, enable_lose, enable_win, enable_hotlap
    global enable_before_race, enable_suspense, suspense_laps, log
    global audio, overtake, position, newposition, start_time, finish_time, count_overtake
    global session, sessionTime, numberOfLaps, completedLaps

    appWindow = ac.newApp("Epic Race")
    ac.setSize(appWindow, 430, 350)
    ac.setTitle(appWindow, "Epic Race")
    ac.setBackgroundOpacity(appWindow, 0.5)
    ac.drawBorder(appWindow, 0)
    #
    SoundPackSpinner = ac.addSpinner(appWindow, "")
    ac.setFontColor(SoundPackSpinner, 1, 1, 1, 1)
    ac.setFontSize(SoundPackSpinner, 12)
    spinner_config(SoundPackSpinner, 10, 55, 80, 18, 0, 1, 10, 0, onSoundPackChanged)
    #
    VolumeSpinner = ac.addSpinner(appWindow, "")
    ac.setFontColor(VolumeSpinner, 1, 1, 1, 1)
    ac.setFontSize(VolumeSpinner, 12)
    spinner_config(VolumeSpinner, 10, 105, 80, 18, 0, 1, 100, audio_volume, onVolumeChanged)
    #
    audiolabel = ac.addLabel(appWindow, "")
    ac.setPosition(audiolabel, 10, 30)
    ac.setFontColor(audiolabel, 1, 1, 1, 1)
    ac.setFontSize(audiolabel, 15)
    #
    volumelabel = ac.addLabel(appWindow, "Volume")
    ac.setPosition(volumelabel, 10, 80)
    ac.setFontColor(volumelabel, 1, 1, 1, 1)
    ac.setFontSize(volumelabel, 15)

    Beforerace = ac.addCheckBox(appWindow, "")
    ac.setValue(Beforerace, enable_before_race)
    ac.setPosition(Beforerace, 10, 130)
    ac.setSize(Beforerace, 20, 20)
    ac.drawBorder(Beforerace, 1)
    ac.addOnCheckBoxChanged(Beforerace, onEnableBeforeRace)
    #
    Overtake = ac.addCheckBox(appWindow, "")
    ac.setValue(Overtake, enable_overtake)
    ac.setPosition(Overtake, 10, 160)
    ac.setSize(Overtake, 20, 20)
    ac.drawBorder(Overtake, 1)
    ac.addOnCheckBoxChanged(Overtake, onEnableOverTake)
    #
    Suspense = ac.addCheckBox(appWindow, "")
    ac.setValue(Suspense, enable_suspense)
    ac.setPosition(Suspense, 10, 190)
    ac.setSize(Suspense, 20, 20)
    ac.drawBorder(Suspense, 1)
    ac.addOnCheckBoxChanged(Suspense, onEnableSuspense)
    #
    Win = ac.addCheckBox(appWindow, "")
    ac.setValue(Win, enable_win)
    ac.setPosition(Win, 10, 220)
    ac.setSize(Win, 20, 20)
    ac.drawBorder(Win, 1)
    ac.addOnCheckBoxChanged(Win, onEnableWin)
    #
    Lose = ac.addCheckBox(appWindow, "")
    ac.setValue(Lose, enable_lose)
    ac.setPosition(Lose, 10, 250)
    ac.setSize(Lose, 20, 20)
    ac.drawBorder(Lose, 1)
    ac.addOnCheckBoxChanged(Lose, onEnableLose)
    #
    Hotlap = ac.addCheckBox(appWindow, "")
    ac.setValue(Hotlap, enable_hotlap)
    ac.setPosition(Hotlap, 10, 280)
    ac.setSize(Hotlap, 20, 20)
    ac.drawBorder(Hotlap, 1)
    ac.addOnCheckBoxChanged(Hotlap, onEnableHotlap)
    #
    BeforeraceLabel = ac.addLabel(appWindow, "Enable before race")
    ac.setPosition(BeforeraceLabel, 40, 130)
    ac.setFontColor(BeforeraceLabel, 1, 1, 1, 1)
    ac.setFontSize(BeforeraceLabel, 15)
    #
    OvertakeLabel = ac.addLabel(appWindow, "Enable overtake")
    ac.setPosition(OvertakeLabel, 40, 160)
    ac.setFontColor(OvertakeLabel, 1, 1, 1, 1)
    ac.setFontSize(OvertakeLabel, 15)
    #
    SuspenseLabel = ac.addLabel(appWindow, "Enable suspense")
    ac.setPosition(SuspenseLabel, 40, 190)
    ac.setFontColor(SuspenseLabel, 1, 1, 1, 1)
    ac.setFontSize(SuspenseLabel, 15)
    #
    WinLabel = ac.addLabel(appWindow, "Enable win")
    ac.setPosition(WinLabel, 40, 220)
    ac.setFontColor(WinLabel, 1, 1, 1, 1)
    ac.setFontSize(WinLabel, 15)
    #
    LoseLabel = ac.addLabel(appWindow, "Enable lose")
    ac.setPosition(LoseLabel, 40, 250)
    ac.setFontColor(LoseLabel, 1, 1, 1, 1)
    ac.setFontSize(LoseLabel, 15)
    #
    HotlapLabel = ac.addLabel(appWindow, "Enable hotlap")
    ac.setPosition(HotlapLabel, 40, 280)
    ac.setFontColor(HotlapLabel, 1, 1, 1, 1)
    ac.setFontSize(HotlapLabel, 15)
    #
    labeldesc = ac.addLabel(appWindow, "Something is broken")
    ac.setPosition(labeldesc, 180, 40)
    ac.setSize(labeldesc, 200, 200)
    #
    StatusLabel = ac.addLabel(appWindow, Status)
    ac.setPosition(StatusLabel, 10, 305)
    ac.setFontColor(StatusLabel, 1, 1, 1, 1)
    ac.setFontSize(StatusLabel, 15)
    #
    NotificationLabel = ac.addLabel(appWindow, Notify)
    ac.setPosition(NotificationLabel, 10, 325)
    ac.setFontColor(NotificationLabel, 1, 1, 1, 1)
    ac.setFontSize(NotificationLabel, 12)
    ac.setSize(NotificationLabel, 24, 310)
    #
    # DEBUG INFO
    #
    debuglabel = ac.addLabel(appWindow, "")
    ac.setPosition(debuglabel, 215, 30)
    ac.setSize(debuglabel, 200, 200)
    #
    #
    #
    box.FModSystem.init()
    sound_player = box.SoundPlayer(box.FModSystem)
    sound_player.set_volume(audio_volume / 100)
    sound_player.set_gain(2.0)

    audiolist = os.listdir(os.path.join(os.path.dirname(__file__), "SoundPacks"))
    ac.setRange(SoundPackSpinner, 0, len(audiolist) - 1)
    ac.setStep(SoundPackSpinner, 1)
    ac.setValue(SoundPackSpinner, audiolist.index(audio))

    getNotification()
    if AutoUpdate:
        CheckNewUpdate()
    position = ac.getCarRealTimeLeaderboardPosition(0)

    return "EpicRace"
Example #29
0
 def sValue(self, value):
     return ac.setValue(self.dt, value)
Example #30
0
    def loadCFG(self):
        self.__class__.lapCanBeInvalidated = self.cfg.get("SETTINGS", "lap_can_be_invalidated", "int")
        if self.__class__.lapCanBeInvalidated == -1:
            self.__class__.lapCanBeInvalidated = 1
        self.__class__.max_num_cars = self.cfg.get("SETTINGS", "num_cars_tower", "int")
        if self.__class__.max_num_cars == -1:
            self.__class__.max_num_cars = 18
        self.__class__.max_num_laps_stint = self.cfg.get("SETTINGS", "num_laps_stint", "int")
        if self.__class__.max_num_laps_stint == -1:
            self.__class__.max_num_laps_stint = 8
        self.__class__.ui_row_height = self.cfg.get("SETTINGS", "ui_row_height", "int")
        if self.__class__.ui_row_height == -1:
            self.__class__.ui_row_height = 36
        self.__class__.race_mode = self.cfg.get("SETTINGS", "race_mode", "int")
        if self.__class__.race_mode == -1:
            self.__class__.race_mode = 0
        self.__class__.qual_mode = self.cfg.get("SETTINGS", "qual_mode", "int")
        if self.__class__.qual_mode == -1:
            self.__class__.qual_mode = 0

        ac.setValue(self.spin_race_mode, self.__class__.race_mode)
        ac.setValue(self.spin_qual_mode, self.__class__.qual_mode)
        ac.setValue(self.spin_num_cars, self.__class__.max_num_cars)
        ac.setValue(self.spin_num_laps, self.__class__.max_num_laps_stint)
        ac.setValue(self.spin_row_height, self.__class__.ui_row_height)
        ac.setValue(self.chk_invalidated, self.__class__.lapCanBeInvalidated)
        self.setLabelQual()
        self.setLabelRace()
        self.cfg_loaded = True
Example #31
0
File: acdelta.py Project: Nrde/ACTV
 def load_cfg(self):
     self.__class__.ui_row_height = self.cfg.get("DELTA",
                                                 "delta_row_height", "int")
     ac.setValue(self.spin_row_height, self.__class__.ui_row_height)
     self.redraw_size()
Example #32
0
    def load_cfg(self):
        self.__class__.forceInfoVisible = self.cfg.get("SETTINGS",
                                                       "force_info_visible",
                                                       "int")
        if self.__class__.forceInfoVisible == -1:
            self.__class__.forceInfoVisible = 0
        self.__class__.save_delta = self.cfg.get("SETTINGS", "save_delta",
                                                 "int")
        if self.__class__.save_delta == -1:
            self.__class__.save_delta = 1
        self.__class__.show_tires = self.cfg.get("SETTINGS", "show_tires",
                                                 "int")
        if self.__class__.show_tires == -1:
            self.__class__.show_tires = 1
        self.__class__.info_picture_width = self.cfg.get(
            "SETTINGS", "info_picture_width", "int")
        if self.__class__.info_picture_width == -1:
            self.__class__.info_picture_width = 300
        self.__class__.info_picture_height = self.cfg.get(
            "SETTINGS", "info_picture_height", "int")
        if self.__class__.info_picture_height == -1:
            self.__class__.info_picture_height = 300
        self.__class__.max_num_cars = self.cfg.get("SETTINGS",
                                                   "num_cars_tower", "int")
        if self.__class__.max_num_cars == -1:
            self.__class__.max_num_cars = 10
        self.__class__.ui_row_height = self.cfg.get("SETTINGS",
                                                    "ui_row_height", "int")
        if self.__class__.ui_row_height == -1:
            user32 = ctypes.windll.user32
            window_height = user32.GetSystemMetrics(1)
            if window_height >= 2000:  # 4k
                self.__class__.ui_row_height = 76
            elif window_height >= 1400:  # 2k
                self.__class__.ui_row_height = 57
            else:  # 1080p
                self.__class__.ui_row_height = 38
        self.__class__.race_mode = self.cfg.get("SETTINGS", "race_mode", "int")
        if self.__class__.race_mode == -1:
            self.__class__.race_mode = 1
        self.__class__.qual_mode = self.cfg.get("SETTINGS", "qual_mode", "int")
        if self.__class__.qual_mode == -1:
            self.__class__.qual_mode = 0
        self.__class__.names = self.cfg.get("SETTINGS", "names", "int")
        if self.__class__.names == -1:
            self.__class__.names = 3
        self.__class__.refresh_rate = self.cfg.get("SETTINGS", "refresh_rate",
                                                   "int")
        if self.__class__.refresh_rate == -1:
            self.__class__.refresh_rate = 50
        Label.refresh_rate = self.__class__.refresh_rate
        #font_ini = self.cfg.get("SETTINGS", "font_ini", "string")
        font_ini = Colors.app_path + "fonts/actvcpbold.ini"
        if font_ini != -1:
            Font.font_ini = font_ini
        else:
            Font.font_ini = ''

        if Font.font_ini != '' and len(Font.font_files):
            #  font number from ini
            for i in range(0, len(Font.font_files)):
                if Font.font_files[i]['file'] == Font.font_ini:
                    Font.set_font(i + 1)
                    break
        else:
            font = self.cfg.get("SETTINGS", "font", "int")
            if font == -1 or font > len(Font.font_files) - 1:
                font = 2  # Open Sans
            Font.set_font(font)
        Colors.theme_ini = theme_ini = Colors.app_path + 'themes/cp.ini'
        #theme_ini = self.cfg.get("SETTINGS", "theme_ini", "string")
        if theme_ini != -1:
            Colors.theme_ini = theme_ini
        else:
            Colors.theme_ini = ''

        if Colors.theme_ini != '' and len(Colors.theme_files):
            #  Get_theme number from ini
            for i in range(0, len(Colors.theme_files)):
                if Colors.theme_files[i]['file'] == Colors.theme_ini:
                    Colors.general_theme = i + 1
                    break
        else:
            general_theme = self.cfg.get("SETTINGS", "general_theme", "int")
            if general_theme >= 0:
                Colors.general_theme = general_theme

        ac.setValue(self.spin_race_mode, self.__class__.race_mode)
        ac.setValue(self.spin_qual_mode, self.__class__.qual_mode)
        ac.setValue(self.spin_names, self.__class__.names)
        ac.setValue(self.spin_refresh_rate, self.__class__.refresh_rate)
        ac.setValue(self.spin_num_cars, self.__class__.max_num_cars)
        ac.setValue(self.spin_row_height, self.__class__.ui_row_height)
        ac.setValue(self.chk_force_info, self.__class__.forceInfoVisible)
        ac.setValue(self.chk_save_delta, self.__class__.save_delta)
        ac.setValue(self.chk_show_tires, self.__class__.show_tires)
        self.set_labels()
        self.cfg_loaded = True
Example #33
0
def FillEvent(name, state):
    global FuelSelection, FuelMax

    ac.setValue(FuelSelection, int(FuelMax))
    FuelEvent(1)
def create_ui_components():
    global appWindow
    global spinner_ballast, spinner_restrictor, spinner_smoothing, spinner_nonlinearity, spinner_calculation_interval, spinner_posting_interval
    global label_names, label_track_progress, label_penalties, label_last_message

    x_margin = 10
    y_margin = 80
    spacing = 16

    # Spinners
    spinner_ballast = ac.addSpinner(appWindow, "Max. ballast penalty (kg)")
    ac.setRange(spinner_ballast, 0, 5000)
    ac.setStep(spinner_ballast, 500)
    ac.setValue(spinner_ballast, 600)

    spinner_restrictor = ac.addSpinner(appWindow,
                                       "Max. restrictor penalty (pct.)")
    ac.setRange(spinner_restrictor, 0, 100)
    ac.setStep(spinner_restrictor, 10)
    ac.setValue(spinner_restrictor, 100)

    spinner_smoothing = ac.addSpinner(appWindow, "Smoothing (pct. of track)")
    ac.setRange(spinner_smoothing, 0, 100)
    ac.setStep(spinner_smoothing, 5)
    ac.setValue(spinner_smoothing, 10)

    spinner_nonlinearity = ac.addSpinner(appWindow, "Non-linearity")
    ac.setRange(spinner_nonlinearity, 1, 5)
    ac.setStep(spinner_nonlinearity, 1)
    ac.setValue(spinner_nonlinearity, 3)

    spinner_calculation_interval = ac.addSpinner(appWindow,
                                                 "Calculation interval (ms)")
    ac.setRange(spinner_calculation_interval, 500, 5000)
    ac.setStep(spinner_calculation_interval, 500)
    ac.setValue(spinner_calculation_interval, 1000)

    spinner_posting_interval = ac.addSpinner(appWindow,
                                             "Posting interval (ms)")
    ac.setRange(spinner_posting_interval, 1000, 20000)
    ac.setStep(spinner_posting_interval, 100)
    ac.setValue(spinner_posting_interval, 1500)

    # Text output
    label_names = ac.addLabel(appWindow,
                              "Driver names: {}".format(DRIVER_NAMES))
    ac.setFontSize(label_names, 10)

    label_track_progress = ac.addLabel(appWindow, "Track progresses:")
    ac.setFontSize(label_track_progress, 10)

    label_penalties = ac.addLabel(appWindow, "Penalty percentages:")
    ac.setFontSize(label_penalties, 10)

    label_last_message = ac.addLabel(appWindow, "Last message posted:")
    ac.setFontSize(label_last_message, 10)

    # Component positions
    ac.setPosition(spinner_ballast, x_margin, y_margin + (spacing * 0))
    ac.setPosition(spinner_restrictor, x_margin, y_margin + (spacing * 5))
    ac.setPosition(spinner_smoothing, x_margin, y_margin + (spacing * 10))
    ac.setPosition(spinner_nonlinearity, x_margin, y_margin + (spacing * 15))
    ac.setPosition(spinner_calculation_interval, x_margin,
                   y_margin + (spacing * 20))
    ac.setPosition(spinner_posting_interval, x_margin,
                   y_margin + (spacing * 25))
    ac.setPosition(label_names, x_margin, y_margin + (spacing * 30))
    ac.setPosition(label_track_progress, x_margin, y_margin + (spacing * 31))
    ac.setPosition(label_penalties, x_margin, y_margin + (spacing * 32))
    ac.setPosition(label_last_message, x_margin, y_margin + (spacing * 33))