#include "DataModelV3/DataModelInstance.h" #include "DataModelV3/LevelInstance.h" using namespace B3D; LevelInstance::LevelInstance(void) : Instance("LevelService") { name = "Level"; //Reflection values winMessage = Reflection::ReflectionProperty("WinMessage", "You Won!", TYPE_STRING, this->dataTable); loseMessage = Reflection::ReflectionProperty("LoseMessage", "You Lost. Try Again", TYPE_STRING, this->dataTable); timer = Reflection::ReflectionProperty("InitialTimerValue", 60.0F, TYPE_FLOAT, this->dataTable); score = Reflection::ReflectionProperty("InitialScoreValue", 0, TYPE_INT, this->dataTable); highScoreIsGood = Reflection::ReflectionProperty("HighScoreIsGood", false, TYPE_BOOLEAN, this->dataTable); runOnOpen = Reflection::ReflectionProperty("RunOnOpen", false, TYPE_BOOLEAN, this->dataTable); timerUpAction = Reflection::ReflectionProperty("TimerUpAction", Enum::ActionType::Nothing, TYPE_ENUM, this->dataTable, new EnumMeta(Enum::ActionType::LENGTH, Enum::ActionType::STR_TABLE)); timerAffectsScore = Reflection::ReflectionProperty("TimerAffectsScore", Enum::AffectType::NoChange, TYPE_ENUM, this->dataTable, new EnumMeta(Enum::AffectType::LENGTH, Enum::AffectType::STR_TABLE)); canDelete = false; } LevelInstance::~LevelInstance(void) { } void LevelInstance::winCondition() { DataModelInstance* DataModel = parentDataModel; //If level parent gets changed to something other than Datamodel it could cause nasty data corruption bugs DataModel->setMessage(winMessage.getValue()); DataModel->toggleRun(); } void LevelInstance::loseCondition() { DataModelInstance* DataModel = parentDataModel; DataModel->setMessage(loseMessage.getValue()); DataModel->toggleRun(); } void LevelInstance::pauseCondition() { DataModelInstance* DataModel = parentDataModel; DataModel->toggleRun(); } void LevelInstance::drawCondition() { DataModelInstance* DataModel = parentDataModel; DataModel->toggleRun(); } void LevelInstance::Step(SimTime sdt) { switch(timerAffectsScore.getValue()) { case Enum::AffectType::NoChange: break; case Enum::AffectType::Increase: score += 1; break; case Enum::AffectType::Decrease: if (score > 0) score -= 1; break; } if (timer >= sdt){ score -= sdt; } else{ timer = 0.0f; switch(timerUpAction.getValue()) { case Enum::ActionType::Nothing: break; case Enum::ActionType::Pause: pauseCondition(); break; case Enum::ActionType::Lose: loseCondition(); break; case Enum::ActionType::Draw: drawCondition(); break; case Enum::ActionType::Win: winCondition(); break; } } }