|
|
|
|
@@ -1,3 +1,4 @@
|
|
|
|
|
#include "DataModelV2/DataModelInstance.h"
|
|
|
|
|
#include "DataModelV2/LevelInstance.h"
|
|
|
|
|
|
|
|
|
|
LevelInstance::LevelInstance(void)
|
|
|
|
|
@@ -16,6 +17,61 @@ LevelInstance::~LevelInstance(void)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static TCHAR* strActionType(int option)
|
|
|
|
|
{
|
|
|
|
|
switch(option)
|
|
|
|
|
{
|
|
|
|
|
case Enum::ActionType::Nothing:
|
|
|
|
|
return "Nothing";
|
|
|
|
|
case Enum::ActionType::Pause:
|
|
|
|
|
return "Pause";
|
|
|
|
|
case Enum::ActionType::Lose:
|
|
|
|
|
return "Lose";
|
|
|
|
|
case Enum::ActionType::Draw:
|
|
|
|
|
return "Draw";
|
|
|
|
|
case Enum::ActionType::Win:
|
|
|
|
|
return "Win";
|
|
|
|
|
}
|
|
|
|
|
return "Nothing";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static Enum::ActionType::Value EnumActionType(TCHAR* option)
|
|
|
|
|
{
|
|
|
|
|
if(strcmp("Nothing", option) == 0)
|
|
|
|
|
return Enum::ActionType::Nothing;
|
|
|
|
|
if(strcmp("Pause", option) == 0)
|
|
|
|
|
return Enum::ActionType::Pause;
|
|
|
|
|
if(strcmp("Lose", option) == 0)
|
|
|
|
|
return Enum::ActionType::Lose;
|
|
|
|
|
if(strcmp("Draw", option) == 0)
|
|
|
|
|
return Enum::ActionType::Draw;
|
|
|
|
|
return Enum::ActionType::Win;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static TCHAR* strAffectType(int option)
|
|
|
|
|
{
|
|
|
|
|
switch(option)
|
|
|
|
|
{
|
|
|
|
|
case Enum::AffectType::NoChange:
|
|
|
|
|
return "NoChange";
|
|
|
|
|
case Enum::AffectType::Increase:
|
|
|
|
|
return "Increase";
|
|
|
|
|
case Enum::AffectType::Decrease:
|
|
|
|
|
return "Decrease";
|
|
|
|
|
}
|
|
|
|
|
return "NoChange";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static Enum::AffectType::Value EnumAffectType(TCHAR* option)
|
|
|
|
|
{
|
|
|
|
|
if(strcmp("NoChange", option) == 0)
|
|
|
|
|
return Enum::AffectType::NoChange;
|
|
|
|
|
if(strcmp("Increase", option) == 0)
|
|
|
|
|
return Enum::AffectType::Increase;
|
|
|
|
|
return Enum::AffectType::Decrease;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
char timerTxt[12];
|
|
|
|
|
char scoreTxt[12];
|
|
|
|
|
std::vector<PROPGRIDITEM> LevelInstance::getProperties()
|
|
|
|
|
@@ -29,12 +85,28 @@ std::vector<PROPGRIDITEM> LevelInstance::getProperties()
|
|
|
|
|
"The message that shows when the player wins.",
|
|
|
|
|
(LPARAM)winMessage.c_str(),
|
|
|
|
|
PIT_EDIT));
|
|
|
|
|
|
|
|
|
|
properties.push_back(createPGI("Messages",
|
|
|
|
|
"LoseMessage",
|
|
|
|
|
"The message that shows when the player loses.",
|
|
|
|
|
(LPARAM)loseMessage.c_str(),
|
|
|
|
|
PIT_EDIT));
|
|
|
|
|
|
|
|
|
|
properties.push_back(createPGI(
|
|
|
|
|
"Gameplay",
|
|
|
|
|
"HighScoreIsGood",
|
|
|
|
|
"Some temporary string here",
|
|
|
|
|
(LPARAM)HighScoreIsGood,
|
|
|
|
|
PIT_CHECK
|
|
|
|
|
));
|
|
|
|
|
|
|
|
|
|
properties.push_back(createPGI(
|
|
|
|
|
"Gameplay",
|
|
|
|
|
"RunOnOpen",
|
|
|
|
|
"Some temporary string here",
|
|
|
|
|
(LPARAM)RunOnOpen,
|
|
|
|
|
PIT_CHECK
|
|
|
|
|
));
|
|
|
|
|
|
|
|
|
|
sprintf_s(timerTxt, "%g", timer);
|
|
|
|
|
sprintf_s(scoreTxt, "%d", score);
|
|
|
|
|
@@ -43,11 +115,28 @@ std::vector<PROPGRIDITEM> LevelInstance::getProperties()
|
|
|
|
|
"The amount of time in seconds the player has to complete this level.\r\n\r\nPut 0 if time is limitless.",
|
|
|
|
|
(LPARAM)timerTxt,
|
|
|
|
|
PIT_EDIT));
|
|
|
|
|
|
|
|
|
|
properties.push_back(createPGI("Gameplay",
|
|
|
|
|
"InitialScoreValue",
|
|
|
|
|
"The amount of points the player starts with.",
|
|
|
|
|
(LPARAM)scoreTxt,
|
|
|
|
|
PIT_EDIT));
|
|
|
|
|
|
|
|
|
|
properties.push_back(createPGI("Gameplay",
|
|
|
|
|
"TimerUpAction",
|
|
|
|
|
"Some temporary string here",
|
|
|
|
|
(LPARAM)strActionType(TimerUpAction),
|
|
|
|
|
PIT_COMBO,
|
|
|
|
|
TEXT("Nothing\0Pause\0Lose\0Draw\0Win\0")
|
|
|
|
|
));
|
|
|
|
|
|
|
|
|
|
properties.push_back(createPGI("Gameplay",
|
|
|
|
|
"TimerAffectsScore",
|
|
|
|
|
"Some temporary string here",
|
|
|
|
|
(LPARAM)strAffectType(TimerAffectsScore),
|
|
|
|
|
PIT_COMBO,
|
|
|
|
|
TEXT("NoChange\0Increase\0Decrease\0")
|
|
|
|
|
));
|
|
|
|
|
return properties;
|
|
|
|
|
}
|
|
|
|
|
void LevelInstance::PropUpdate(LPPROPGRIDITEM &pItem)
|
|
|
|
|
@@ -68,6 +157,87 @@ void LevelInstance::PropUpdate(LPPROPGRIDITEM &pItem)
|
|
|
|
|
{
|
|
|
|
|
winMessage = (LPSTR)pItem->lpCurValue;
|
|
|
|
|
}
|
|
|
|
|
else if(strcmp(pItem->lpszPropName, "TimerUpAction") == 0)
|
|
|
|
|
{
|
|
|
|
|
TimerUpAction = EnumActionType((TCHAR*)pItem->lpCurValue);
|
|
|
|
|
}
|
|
|
|
|
else if(strcmp(pItem->lpszPropName, "TimerAffectsScore") == 0)
|
|
|
|
|
{
|
|
|
|
|
TimerAffectsScore = EnumAffectType((TCHAR*)pItem->lpCurValue);
|
|
|
|
|
}
|
|
|
|
|
else if(strcmp(pItem->lpszPropName, "HighScoreIsGood") == 0)
|
|
|
|
|
{
|
|
|
|
|
HighScoreIsGood = pItem->lpCurValue == TRUE;
|
|
|
|
|
}
|
|
|
|
|
else if(strcmp(pItem->lpszPropName, "RunOnOpen") == 0)
|
|
|
|
|
{
|
|
|
|
|
RunOnOpen = pItem->lpCurValue == TRUE;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
Instance::PropUpdate(pItem);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void LevelInstance::winCondition()
|
|
|
|
|
{
|
|
|
|
|
DataModelInstance* DataModel = (DataModelInstance*)getParent(); //If level parent gets changed to something other than Datamodel it could cause nasty data corruption bugs
|
|
|
|
|
DataModel->setMessage(winMessage);
|
|
|
|
|
DataModel->toggleRun();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void LevelInstance::loseCondition()
|
|
|
|
|
{
|
|
|
|
|
DataModelInstance* DataModel = (DataModelInstance*)getParent();
|
|
|
|
|
DataModel->setMessage(loseMessage);
|
|
|
|
|
DataModel->toggleRun();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void LevelInstance::pauseCondition()
|
|
|
|
|
{
|
|
|
|
|
DataModelInstance* DataModel = (DataModelInstance*)getParent();
|
|
|
|
|
DataModel->toggleRun();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void LevelInstance::drawCondition()
|
|
|
|
|
{
|
|
|
|
|
DataModelInstance* DataModel = (DataModelInstance*)getParent();
|
|
|
|
|
DataModel->toggleRun();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void LevelInstance::Step(SimTime sdt)
|
|
|
|
|
{
|
|
|
|
|
switch(TimerAffectsScore)
|
|
|
|
|
{
|
|
|
|
|
case Enum::AffectType::NoChange:
|
|
|
|
|
break;
|
|
|
|
|
case Enum::AffectType::Increase:
|
|
|
|
|
score += 1;
|
|
|
|
|
break;
|
|
|
|
|
case Enum::AffectType::Decrease:
|
|
|
|
|
if (score > 0)
|
|
|
|
|
score -= 1;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
if (timer >= 0.1f){ //Due to timing used this could cause the number go into negatives for one step
|
|
|
|
|
timer -= sdt;
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
timer = 0.0f;
|
|
|
|
|
switch(TimerUpAction)
|
|
|
|
|
{
|
|
|
|
|
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;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|