C

Qt Quick Ultralite instrument_cluster Example

// Copyright (C) 2024 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial
#include "simulator.h"
#include "VehicleStatus.h"

void Simulator::tick(int delta)
{
    timestamp += delta;
    SimulationStep *step = &steps[stepIndex];

    tripMeter += currentSpeed * delta / 3600000.0;

    if (timestamp > (previousValueUpdate + updatePeriod)) {
        if (currentSpeed < step->targetSpeed) {
            currentSpeed += 3;
        } else if (currentSpeed > step->targetSpeed) {
            currentSpeed--;
        }
        if (step->leftBlinkerOn) {
            leftBlinkerState = !leftBlinkerState;
        } else {
            leftBlinkerState = false;
        }
        if (step->rightBlinkerOn) {
            rightBlinkerState = !rightBlinkerState;
        } else {
            rightBlinkerState = false;
        }

        qul_application_set_speed(currentSpeed);
        qul_application_set_left_blinker_state(leftBlinkerState);
        qul_application_set_right_blinker_state(rightBlinkerState);
        qul_application_set_trip_meter(tripMeter);
        qul_application_send_value_change_event();
        previousValueUpdate = timestamp;
    }

    if (timestamp > (previousStepUpdate + step->duration)) {
        stepIndex++;
        stepIndex %= stepCount;
        previousStepUpdate = timestamp;
    }
}