#include "simulation/small/states.h"
#include "MotorCluster/TellTalesModel.h"
#include "MotorCluster/MainModel.h"
#include "mathutils.h"
using namespace MotorCluster;
namespace {
MainModel & mainModel = MainModel:: instance();
TellTalesModel & tellTalesModel = TellTalesModel:: instance();
const uint32_t ChangeStateDelay = 750 ;
}
namespace IntroStateConstants {
const uint32_t InitialDelay = 1000 ;
}
namespace Simulation {
IntroState:: IntroState(const StateId & nextState)
: _nextState(nextState)
{}
void IntroState:: onEnter(const StateId & , const Layer & layer, Machine & sm)
{
_step = Step_Blank;
mainModel. tripValue. setValue(247 );
mainModel. odoValue. setValue(5891 );
mainModel. tempValue. setValue(21 );
mainModel. timeHourValue. setValue(14 );
mainModel. timeMinuteValue. setValue(13 );
mainModel. bottomElementsVisible. setValue(false );
mainModel. speedometerVisible. setValue(false );
mainModel. roundGaugesVisible. setValue(false );
mainModel. rangeVisible. setValue(false );
mainModel. telltalesVisible. setValue(false );
mainModel. bgLinesLeftActive. setValue(false );
mainModel. bgLinesRightActive. setValue(false );
mainModel. bgRoadActive. setValue(false );
mainModel. speedValue. setValue(0 );
mainModel. rpm. setValue(0 );
mainModel. gear. setValue(0 );
mainModel. logoAnimationStart. setValue(false );
mainModel. rpmAnimationTime. setValue(1000 );
sm. requestUpdate(IntroStateConstants:: InitialDelay, false , layer);
}
void IntroState:: onUpdate(uint32_t, const Layer & layer, Machine & sm)
{
using namespace IntroStateConstants;
_step = static_cast < Step> (_step + 1 );
switch (_step) {
case Step_ShowLogo:
mainModel. logoAnimationStart. setValue(true );
sm. requestUpdate(3000 , false , layer);
break ;
case Step_ShowBLinkers:
mainModel. leftTurnSignal. setValue(true );
mainModel. rightTurnSignal. setValue(true );
sm. requestUpdate(50 , false , layer);
break ;
case Step_ShowTellTales:
mainModel. leftTurnSignal. setValue(false );
mainModel. rightTurnSignal. setValue(false );
mainModel. telltalesVisible. setValue(true );
sm. requestUpdate(400 , false , layer);
break ;
case Step_ShowTachoScale:
mainModel. tachoScaleActive. setValue(true );
mainModel. tachoUpperFrameActive. setValue(true );
mainModel. tachoBottomFrameActive. setValue(true );
sm. requestUpdate(300 , false , layer);
break ;
case Step_ShowBottomElements:
mainModel. bottomElementsVisible. setValue(true );
sm. requestUpdate(600 , false , layer);
break ;
case Step_ShowBgLines:
mainModel. bgLinesLeftActive. setValue(true );
mainModel. bgLinesRightActive. setValue(true );
sm. requestUpdate(600 , false , layer);
break ;
case Step_ShowBgRoad:
mainModel. bgRoadActive. setValue(true );
sm. requestUpdate(600 , false , layer);
break ;
case Step_ShowSpeedometer:
mainModel. speedometerVisible. setValue(true );
mainModel. rangeVisible. setValue(true );
sm. requestUpdate(400 , false , layer);
break ;
case Step_ShowGauges:
mainModel. roundGaugesVisible. setValue(true );
sm. requestUpdate(2500 , false , layer);
break ;
case Step_RpmToMax:
mainModel. rpm. setValue(16000 );
sm. requestUpdate(1000 , false , layer);
break ;
case Step_RpmToZero:
mainModel. rpm. setValue(1000 );
sm. requestUpdate(1000 , false , layer);
break ;
case Step_Done:
sm. changeState(_nextState, layer, ChangeStateDelay);
break ;
default :
break ;
}
}
EndState:: EndState(const StateId & nextState)
: _nextState(nextState)
{}
void EndState:: onEnter(const StateId & , const Layer & layer, Machine & sm)
{
_step = Step_Blank;
sm. requestUpdate(10 , false , layer);
}
void EndState:: onUpdate(uint32_t, const Layer & layer, Machine & sm)
{
_step = static_cast < Step> (_step + 1 );
switch (_step) {
case Step_HideBgLines:
mainModel. bgLinesLeftActive. setValue(false );
mainModel. bgLinesRightActive. setValue(false );
sm. requestUpdate(600 , false , layer);
break ;
case Step_HideRoad:
mainModel. bgRoadActive. setValue(false );
sm. requestUpdate(500 , false , layer);
break ;
case Step_HideGauges:
mainModel. roundGaugesVisible. setValue(false );
sm. requestUpdate(1000 , false , layer);
break ;
case Step_HideBottomElements:
mainModel. bottomElementsVisible. setValue(false );
sm. requestUpdate(500 , false , layer);
break ;
case Step_HideTellTales:
mainModel. speedometerVisible. setValue(false );
mainModel. telltalesVisible. setValue(false );
mainModel. rangeVisible. setValue(false );
sm. requestUpdate(500 , false , layer);
break ;
case Step_HideTachoScale:
mainModel. tachoScaleActive. setValue(false );
sm. requestUpdate(500 , false , layer);
break ;
case Step_HideTacho:
mainModel. rpm. setValue(1000 );
sm. requestUpdate(500 , false , layer);
break ;
case Step_HideTachoFramesTop:
mainModel. tachoUpperFrameActive. setValue(false );
mainModel. tachoBottomFrameActive. setValue(false );
mainModel. rpm. setValue(0 );
sm. requestUpdate(1500 , false , layer);
break ;
case Step_Done:
sm. changeState(_nextState, layer, ChangeStateDelay);
break ;
default :
break ;
}
}
void EndState:: onLeave(const StateId & , const Layer & , Machine & )
{
mainModel. fuelLevel. setValue(30 );
}
}