private void drawPedals(Graphics g, int panelWidth, int panelHeight) {
    // drawing the box for gas
    int x = panelWidth / 2 - WheelRadius - ElementPadding - PedalBoxWidth - 2 * PedalBorderSize;
    int y = panelHeight / 2 - PedalBoxHeight / 2 - 2 * PedalBorderSize;
    g.setColor(Color.LIGHT_GRAY);
    g.drawRect(x, y, PedalBoxWidth + PedalBorderSize, PedalBoxHeight + PedalBorderSize);

    // drawing the fill in the gas box
    int valueScaleRatio = (int) (PedalBoxHeight / DriverInput.MaxPedalPushValue);
    double valueDiffFromMax = DriverInput.MaxPedalPushValue - in.getGasPedalPercentage();
    int tempGasPedalBoxX = x;
    int tempGasPedalBoxY = y;
    x += PedalBorderSize;
    y += valueDiffFromMax * valueScaleRatio + PedalBorderSize;
    g.setColor(Color.GREEN);
    g.fillRect(x, y, PedalBoxWidth, (int) (PedalBoxHeight - (valueDiffFromMax * valueScaleRatio)));

    // drawing the box for brake
    x = tempGasPedalBoxX - ElementPadding - PedalBoxWidth - 2 * PedalBorderSize;
    y = tempGasPedalBoxY;
    g.setColor(Color.LIGHT_GRAY);
    g.drawRect(x, y, PedalBoxWidth + PedalBorderSize, PedalBoxHeight + PedalBorderSize);

    // drawing the fill in the brake box
    valueDiffFromMax = DriverInput.MaxPedalPushValue - in.getBrakePedalPercentage();
    x += PedalBorderSize;
    y += valueDiffFromMax * valueScaleRatio + PedalBorderSize;
    g.setColor(Color.RED);
    g.fillRect(x, y, PedalBoxWidth, (int) (PedalBoxHeight - (valueDiffFromMax * valueScaleRatio)));
  }
  private void drawGear(Graphics g, int panelWidth, int panelHeight) {
    int x = panelWidth / 2 + WheelRadius + ElementPadding * 2;
    int y = panelHeight / 2 - WheelRadius + GearBoxOffset;

    ShiftLeverPosition shiftLeverPosition = in.getShiftLeverPosition();
    // parking
    g.setColor(Color.LIGHT_GRAY);
    if (shiftLeverPosition == ShiftLeverPosition.Parking) g.setColor(Color.BLUE);
    g.drawString("P", x, y);
    y += GearLevelPadding;

    // reverse
    g.setColor(Color.LIGHT_GRAY);
    if (shiftLeverPosition == ShiftLeverPosition.Reverse) g.setColor(Color.BLUE);
    g.drawString("R", x, y);
    y += GearLevelPadding;

    // neutral
    g.setColor(Color.LIGHT_GRAY);
    if (shiftLeverPosition == ShiftLeverPosition.Neutral) g.setColor(Color.BLUE);
    g.drawString("N", x, y);
    y += GearLevelPadding;

    // drive
    g.setColor(Color.LIGHT_GRAY);
    if (shiftLeverPosition == ShiftLeverPosition.Drive) g.setColor(Color.BLUE);
    g.drawString("D", x, y);
  }
  private void drawEngineButton(Graphics g, int panelWidth, int panelHeight) {
    int x = panelWidth - EngineButtonRadius - EngineButtonMargin;
    int y = panelHeight - EngineButtonRadius - EngineButtonMargin;

    if (in.getEngineToggleButtonState()) g.setColor(Color.GREEN);
    else g.setColor(Color.RED);
    g.fillOval(x, y, EngineButtonRadius, EngineButtonRadius);
    g.setColor(Color.DARK_GRAY);
    g.drawOval(x, y, EngineButtonRadius, EngineButtonRadius);
  }
  private void drawSteeringWheel(Graphics g, int panelWidth, int panelHeight) {
    // outer circle
    int x = panelWidth / 2 - WheelRadius;
    int y = panelHeight / 2 - WheelRadius;
    Color defaultColor = this.getBackground();
    g.setColor(Color.LIGHT_GRAY);
    g.fillOval(x, y, WheelRadius * 2, WheelRadius * 2);

    // inner circle
    int innerWheelRadius = (int) (WheelRadius * InnerWheelRatio);

    x = panelWidth / 2 - innerWheelRadius;
    y = panelHeight / 2 - innerWheelRadius;
    g.setColor(defaultColor);
    g.fillOval(x, y, innerWheelRadius * 2, innerWheelRadius * 2);

    double steeringWheelRotation = in.getSteeringWheelSignedPercentage();
    // drawing the 'needle'
    {
      double needleRadius = (WheelRadius - innerWheelRadius) / 2;
      double needleRotation = (steeringWheelRotation * WheelMovementScaleRatio - 90);
      double needleLength = innerWheelRadius + needleRadius;

      x =
          (int)
              (panelWidth / 2
                  - needleRadius
                  + Math.cos(Math.toRadians(needleRotation)) * needleLength);
      y =
          (int)
              (panelHeight / 2
                  - needleRadius
                  + Math.sin(Math.toRadians(needleRotation)) * needleLength);
      g.setColor(Color.DARK_GRAY);
      g.fillOval(x, y, (int) needleRadius * 2, (int) needleRadius * 2);
    }

    // drawing the value in text
    x = panelWidth / 2 - g.getFontMetrics().stringWidth(steeringWheelRotation + "%") / 2;
    y = panelHeight / 2;
    g.setColor(Color.BLACK);
    g.drawString(steeringWheelRotation + "%", x, y);
  }