Add in Scenario framework.
This commit is contained in:
parent
12a21881e1
commit
64f6b44994
@ -38,6 +38,7 @@ struct Level{
|
|||||||
std::vector<UnitData>unitPlacement;
|
std::vector<UnitData>unitPlacement;
|
||||||
std::vector<CPData>cpPlacement;
|
std::vector<CPData>cpPlacement;
|
||||||
Sound bgm=Sound::COSMOS;
|
Sound bgm=Sound::COSMOS;
|
||||||
|
int scenarioIndex=0;
|
||||||
vf2d cameraStart={96,96};
|
vf2d cameraStart={96,96};
|
||||||
vf2d worldZoom={1,1};
|
vf2d worldZoom={1,1};
|
||||||
Pixel levelColor=DARK_GREEN;
|
Pixel levelColor=DARK_GREEN;
|
||||||
|
@ -0,0 +1,101 @@
|
|||||||
|
#include "Scenario.h"
|
||||||
|
#include "VirusAttack.h"
|
||||||
|
|
||||||
|
extern VirusAttack*game;
|
||||||
|
|
||||||
|
Scenario::Scenario(){}
|
||||||
|
Scenario::~Scenario(){};
|
||||||
|
void Scenario::_Start(){
|
||||||
|
state=0;
|
||||||
|
camera=utils::Camera2D{game->gametv.GetWorldOffset(),game->currentLevel->cameraStart};
|
||||||
|
camera.SetLazyFollowRate(2);
|
||||||
|
camera.SetMode(utils::Camera2D::Mode::LazyFollow);
|
||||||
|
targetPos={96,96};
|
||||||
|
box.SetVisible(false);
|
||||||
|
initialWaitTime=3;
|
||||||
|
camera.SetTarget(targetPos);
|
||||||
|
Start();
|
||||||
|
}
|
||||||
|
void Scenario::Start(){};
|
||||||
|
void Scenario::_Update(){
|
||||||
|
initialWaitTime=std::max(0.f,initialWaitTime-game->GetElapsedTime());
|
||||||
|
if(initialWaitTime==0){
|
||||||
|
Update();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
void Scenario::Update(){};
|
||||||
|
Stage1::Stage1(){}
|
||||||
|
void Stage1::Start(){
|
||||||
|
game->unitMetersGreyedOut=true;
|
||||||
|
game->playerInControl=false;
|
||||||
|
};
|
||||||
|
void Stage1::Update(){
|
||||||
|
switch(state){
|
||||||
|
case 0:{
|
||||||
|
|
||||||
|
}break;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
Stage2::Stage2(){}
|
||||||
|
void Stage2::Start(){};
|
||||||
|
void Stage2::Update(){
|
||||||
|
switch(state){
|
||||||
|
case 0:{
|
||||||
|
|
||||||
|
}break;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
Stage3::Stage3(){}
|
||||||
|
void Stage3::Start(){};
|
||||||
|
void Stage3::Update(){
|
||||||
|
switch(state){
|
||||||
|
case 0:{
|
||||||
|
|
||||||
|
}break;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
Stage4::Stage4(){}
|
||||||
|
void Stage4::Start(){};
|
||||||
|
void Stage4::Update(){
|
||||||
|
switch(state){
|
||||||
|
case 0:{
|
||||||
|
|
||||||
|
}break;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
Stage5::Stage5(){}
|
||||||
|
void Stage5::Start(){};
|
||||||
|
void Stage5::Update(){
|
||||||
|
switch(state){
|
||||||
|
case 0:{
|
||||||
|
|
||||||
|
}break;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
Stage6::Stage6(){}
|
||||||
|
void Stage6::Start(){};
|
||||||
|
void Stage6::Update(){
|
||||||
|
switch(state){
|
||||||
|
case 0:{
|
||||||
|
|
||||||
|
}break;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
Stage7::Stage7(){}
|
||||||
|
void Stage7::Start(){};
|
||||||
|
void Stage7::Update(){
|
||||||
|
switch(state){
|
||||||
|
case 0:{
|
||||||
|
|
||||||
|
}break;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
Stage8::Stage8(){}
|
||||||
|
void Stage8::Start(){};
|
||||||
|
void Stage8::Update(){
|
||||||
|
switch(state){
|
||||||
|
case 0:{
|
||||||
|
|
||||||
|
}break;
|
||||||
|
}
|
||||||
|
};
|
@ -0,0 +1,76 @@
|
|||||||
|
#pragma once
|
||||||
|
#include "olcUTIL_Camera2D.h"
|
||||||
|
#include "Textbox.h"
|
||||||
|
|
||||||
|
class Scenario{
|
||||||
|
public:
|
||||||
|
Scenario();
|
||||||
|
virtual~Scenario();
|
||||||
|
void _Start();
|
||||||
|
virtual void Start();
|
||||||
|
void _Update();
|
||||||
|
protected:
|
||||||
|
virtual void Update();
|
||||||
|
int state=0;
|
||||||
|
utils::Camera2D camera;
|
||||||
|
vf2d targetPos;
|
||||||
|
Textbox box;
|
||||||
|
float initialWaitTime=3;
|
||||||
|
};
|
||||||
|
|
||||||
|
class Stage1:public Scenario{
|
||||||
|
public:
|
||||||
|
Stage1();
|
||||||
|
protected:
|
||||||
|
void Start();
|
||||||
|
void Update();
|
||||||
|
};
|
||||||
|
class Stage2:public Scenario{
|
||||||
|
public:
|
||||||
|
Stage2();
|
||||||
|
protected:
|
||||||
|
void Start();
|
||||||
|
void Update();
|
||||||
|
};
|
||||||
|
class Stage3:public Scenario{
|
||||||
|
public:
|
||||||
|
Stage3();
|
||||||
|
protected:
|
||||||
|
void Start();
|
||||||
|
void Update();
|
||||||
|
};
|
||||||
|
class Stage4:public Scenario{
|
||||||
|
public:
|
||||||
|
Stage4();
|
||||||
|
protected:
|
||||||
|
void Start();
|
||||||
|
void Update();
|
||||||
|
};
|
||||||
|
class Stage5:public Scenario{
|
||||||
|
public:
|
||||||
|
Stage5();
|
||||||
|
protected:
|
||||||
|
void Start();
|
||||||
|
void Update();
|
||||||
|
};
|
||||||
|
class Stage6:public Scenario{
|
||||||
|
public:
|
||||||
|
Stage6();
|
||||||
|
protected:
|
||||||
|
void Start();
|
||||||
|
void Update();
|
||||||
|
};
|
||||||
|
class Stage7:public Scenario{
|
||||||
|
public:
|
||||||
|
Stage7();
|
||||||
|
protected:
|
||||||
|
void Start();
|
||||||
|
void Update();
|
||||||
|
};
|
||||||
|
class Stage8:public Scenario{
|
||||||
|
public:
|
||||||
|
Stage8();
|
||||||
|
protected:
|
||||||
|
void Start();
|
||||||
|
void Update();
|
||||||
|
};
|
@ -14,11 +14,13 @@
|
|||||||
#include "olcUTIL_Geometry2D.h"
|
#include "olcUTIL_Geometry2D.h"
|
||||||
#include "util.h"
|
#include "util.h"
|
||||||
#include "Level.h"
|
#include "Level.h"
|
||||||
|
#include "Scenario.h"
|
||||||
#include "VirusAttack.h"
|
#include "VirusAttack.h"
|
||||||
|
|
||||||
VirusAttack*game;
|
VirusAttack*game;
|
||||||
std::vector<std::unique_ptr<Renderable>>IMAGES;
|
std::vector<std::unique_ptr<Renderable>>IMAGES;
|
||||||
std::vector<std::unique_ptr<Audio>>SOUNDS;
|
std::vector<std::unique_ptr<Audio>>SOUNDS;
|
||||||
|
std::vector<std::unique_ptr<Scenario>>SCENARIOS;
|
||||||
|
|
||||||
VirusAttack::VirusAttack()
|
VirusAttack::VirusAttack()
|
||||||
{
|
{
|
||||||
@ -102,6 +104,7 @@ void VirusAttack::InitializeLevelData(){
|
|||||||
levelData[stage].levelColor=DARK_RED;
|
levelData[stage].levelColor=DARK_RED;
|
||||||
levelData[stage].size={24,24};
|
levelData[stage].size={24,24};
|
||||||
levelData[stage].bgm=Sound::GRAVITY;
|
levelData[stage].bgm=Sound::GRAVITY;
|
||||||
|
levelData[stage].scenarioIndex=int(stage);
|
||||||
levelData[stage].player_starting_resources={500,500,500,500,500};
|
levelData[stage].player_starting_resources={500,500,500,500,500};
|
||||||
levelData[stage].enemy_starting_resources={0,0,0,0,0};
|
levelData[stage].enemy_starting_resources={0,0,0,0,0};
|
||||||
{
|
{
|
||||||
@ -124,6 +127,7 @@ void VirusAttack::InitializeLevelData(){
|
|||||||
levelData[stage].size={16,16};
|
levelData[stage].size={16,16};
|
||||||
levelData[stage].levelColor=DARK_GREEN;
|
levelData[stage].levelColor=DARK_GREEN;
|
||||||
levelData[stage].bgm=Sound::GRAVITY;
|
levelData[stage].bgm=Sound::GRAVITY;
|
||||||
|
levelData[stage].scenarioIndex=int(stage);
|
||||||
levelData[stage].player_starting_resources={10,10,10,10,10};
|
levelData[stage].player_starting_resources={10,10,10,10,10};
|
||||||
levelData[stage].enemy_starting_resources={0,0,0,0,0};
|
levelData[stage].enemy_starting_resources={0,0,0,0,0};
|
||||||
{
|
{
|
||||||
@ -174,6 +178,7 @@ void VirusAttack::LoadLevel(LevelName level){
|
|||||||
Level&selectedLevel=levelData[level];
|
Level&selectedLevel=levelData[level];
|
||||||
|
|
||||||
currentLevel=&selectedLevel;
|
currentLevel=&selectedLevel;
|
||||||
|
currentScenario=currentLevel->scenarioIndex;
|
||||||
|
|
||||||
WORLD_SIZE=selectedLevel.size;
|
WORLD_SIZE=selectedLevel.size;
|
||||||
|
|
||||||
@ -230,6 +235,7 @@ void VirusAttack::LoadLevel(LevelName level){
|
|||||||
randomBackgroundOffset={util::random(128),util::random(128)};
|
randomBackgroundOffset={util::random(128),util::random(128)};
|
||||||
|
|
||||||
objective="";
|
objective="";
|
||||||
|
SCENARIOS[currentScenario]->_Start();
|
||||||
}
|
}
|
||||||
|
|
||||||
void VirusAttack::InitializeGUIs(){
|
void VirusAttack::InitializeGUIs(){
|
||||||
@ -265,6 +271,14 @@ void VirusAttack::InitializeGUIs(){
|
|||||||
}
|
}
|
||||||
|
|
||||||
void VirusAttack::InitializeScenarios(){
|
void VirusAttack::InitializeScenarios(){
|
||||||
|
SCENARIOS.emplace_back(std::make_unique<Stage1>());
|
||||||
|
SCENARIOS.emplace_back(std::make_unique<Stage2>());
|
||||||
|
SCENARIOS.emplace_back(std::make_unique<Stage3>());
|
||||||
|
SCENARIOS.emplace_back(std::make_unique<Stage4>());
|
||||||
|
SCENARIOS.emplace_back(std::make_unique<Stage5>());
|
||||||
|
SCENARIOS.emplace_back(std::make_unique<Stage6>());
|
||||||
|
SCENARIOS.emplace_back(std::make_unique<Stage7>());
|
||||||
|
SCENARIOS.emplace_back(std::make_unique<Stage8>());
|
||||||
}
|
}
|
||||||
|
|
||||||
void VirusAttack::InitializeSounds(){
|
void VirusAttack::InitializeSounds(){
|
||||||
@ -769,6 +783,7 @@ bool VirusAttack::OnUserUpdate(float fElapsedTime){
|
|||||||
HandlePanAndZoom(fElapsedTime);
|
HandlePanAndZoom(fElapsedTime);
|
||||||
HandleMinimapClick();
|
HandleMinimapClick();
|
||||||
}
|
}
|
||||||
|
SCENARIOS[currentScenario]->_Update();
|
||||||
restartManager.Update(this);
|
restartManager.Update(this);
|
||||||
HandleRestartButton(fElapsedTime);
|
HandleRestartButton(fElapsedTime);
|
||||||
PerformLevelTransition(fElapsedTime);
|
PerformLevelTransition(fElapsedTime);
|
||||||
|
@ -26,7 +26,7 @@ struct Letter{
|
|||||||
|
|
||||||
class VirusAttack : public olc::PixelGameEngine
|
class VirusAttack : public olc::PixelGameEngine
|
||||||
{
|
{
|
||||||
private:
|
public:
|
||||||
#ifdef SPLASH_ENABLED
|
#ifdef SPLASH_ENABLED
|
||||||
SplashScreen splash;
|
SplashScreen splash;
|
||||||
#endif
|
#endif
|
||||||
@ -109,6 +109,7 @@ private:
|
|||||||
float titleScreenY=-200;
|
float titleScreenY=-200;
|
||||||
float textOrientationY=0;
|
float textOrientationY=0;
|
||||||
float textOrientationX=0;
|
float textOrientationX=0;
|
||||||
|
int currentScenario=0;
|
||||||
|
|
||||||
std::string objective="";
|
std::string objective="";
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user