diff --git a/olcCodeJam2023Entry/GameFlags.h b/olcCodeJam2023Entry/GameFlags.h new file mode 100644 index 0000000..22974de --- /dev/null +++ b/olcCodeJam2023Entry/GameFlags.h @@ -0,0 +1,8 @@ +#pragma once + +struct GameFlags{ + bool unitMetersGreyedOut=true;//If true, all but health meters show up as dark grey. + bool playerInControl=false; + bool limitedBuildOptions=false; + bool guideEnabled=true; +}; \ No newline at end of file diff --git a/olcCodeJam2023Entry/Level.h b/olcCodeJam2023Entry/Level.h index 74a42da..4943542 100644 --- a/olcCodeJam2023Entry/Level.h +++ b/olcCodeJam2023Entry/Level.h @@ -12,6 +12,7 @@ enum LevelName{ STAGE6, STAGE7, STAGE8, + FINISH, }; struct UnitData{ @@ -37,7 +38,7 @@ struct Level{ Resources enemy_starting_resources; std::vectorunitPlacement; std::vectorcpPlacement; - Sound bgm=Sound::COSMOS; + Sound::Sound bgm=Sound::COSMOS; int scenarioIndex=0; vf2d cameraStart={96,96}; vf2d worldZoom={1,1}; diff --git a/olcCodeJam2023Entry/Memory.h b/olcCodeJam2023Entry/Memory.h new file mode 100644 index 0000000..c9c2b88 --- /dev/null +++ b/olcCodeJam2023Entry/Memory.h @@ -0,0 +1,7 @@ +#pragma once +#include "MemoryType.h" + +struct Memory{ + MemoryType type; + int size; +}; \ No newline at end of file diff --git a/olcCodeJam2023Entry/Scenario.cpp b/olcCodeJam2023Entry/Scenario.cpp index 9aa6e8a..820857c 100644 --- a/olcCodeJam2023Entry/Scenario.cpp +++ b/olcCodeJam2023Entry/Scenario.cpp @@ -1,101 +1,252 @@ #include "Scenario.h" -#include "VirusAttack.h" +#include "TileManager.h" -extern VirusAttack*game; -Scenario::Scenario(){} +Scenario::Scenario(std::vector>&units,std::vector>&IMAGES,std::vector>&SOUNDS,std::string&objective,TileTransformedView&game,GameFlags&flags) +:units(units),IMAGES(IMAGES),SOUNDS(SOUNDS),objective(objective),game(game),flags(flags){} Scenario::~Scenario(){}; void Scenario::_Start(){ state=0; - camera=utils::Camera2D{game->gametv.GetWorldOffset(),game->currentLevel->cameraStart}; + camera=utils::Camera2D{game.GetPGE()->GetScreenSize(),game.GetWorldOffset()}; camera.SetLazyFollowRate(2); camera.SetMode(utils::Camera2D::Mode::LazyFollow); targetPos={96,96}; box.SetVisible(false); initialWaitTime=3; camera.SetTarget(targetPos); + missionCompletedTimer=0; + transitionToNextLevel=false; Start(); } void Scenario::Start(){}; void Scenario::_Update(){ - initialWaitTime=std::max(0.f,initialWaitTime-game->GetElapsedTime()); + initialWaitTime=std::max(0.f,initialWaitTime-game.GetPGE()->GetElapsedTime()); + missionFinishWaitTime=std::max(0.f,missionFinishWaitTime-game.GetPGE()->GetElapsedTime()); + if(missionCompleted){ + missionCompletedTimer+=game.GetPGE()->GetElapsedTime(); + } else { + missionCompleted=MissionCompleted(); + } if(initialWaitTime==0){ Update(); } }; +bool Scenario::MissionCompleted(){return false;} void Scenario::Update(){}; -Stage1::Stage1(){} +void Scenario::Draw(){ + if(objective.length()>0){ + game.GetPGE()->DrawShadowStringDecal({4,24},"Objective:"); + game.GetPGE()->DrawShadowStringDecal({6,36},objective); + game.GetPGE()->DrawShadowStringDecal({4,24},missionCompleted?"Objective Complete!":"Objective:",missionCompleted?GREEN:WHITE); + vf2d textSize=game.GetPGE()->GetTextSize(objective); + game.GetPGE()->DrawShadowStringDecal({6,36},objective,missionCompleted?GREEN:WHITE); + if(missionCompleted&&missionFinishWaitTime==0){ + game.GetPGE()->FillRectDecal(vf2d{6,36}+vf2d{0,textSize.y/2-1},{textSize.x,3}); + std::string continueText="< Press [Spacebar] to continue >"; + vf2d textScale={2,3}; + vf2d textSize=game.GetPGE()->GetTextSizeProp(continueText)*textScale; + game.GetPGE()->DrawShadowStringPropDecal(game.GetPGE()->GetScreenSize()/2-textSize/2+vf2d{0,72},continueText,{255,255,255,uint8_t(abs(sin(2*missionCompletedTimer))*255)},{0,0,0,uint8_t(abs(sin(2*missionCompletedTimer))*255)},textScale); + if(game.GetPGE()->GetKey(SPACE).bPressed){ + + } + } + } + Resources temp={0,0,0,0,0}; + box.UpdateAndDraw({24,64},game.GetPGE(),temp,IMAGES,0,0); +} +void Scenario::SetCameraTarget(vf2d pos){ + targetPos=pos; + camera.SetTarget(targetPos); + camera.Update(game.GetPGE()->GetElapsedTime()); + game.SetWorldOffset(camera.GetViewPosition()); +} +void Scenario::SetObjective(std::string objective){ + this->objective=objective; +} +Stage1::Stage1(std::vector>&units,std::vector>&IMAGES,std::vector>&SOUNDS,std::string&objective,TileTransformedView&game,GameFlags&flags) +:Scenario(units,IMAGES,SOUNDS,objective,game,flags){} void Stage1::Start(){ - game->unitMetersGreyedOut=true; - game->playerInControl=false; + flags.unitMetersGreyedOut=true; + flags.playerInControl=false; + nextLevel=LevelName::STAGE2; }; +void Scenario::DisplayBox(std::string text,bool scaryHoodedFigure){ + box.Initialize(text,{24,64},"",scaryHoodedFigure?IMAGES[SPOOK_HOODED_FIGURE].get():IMAGES[HOODED_FIGURE].get(),{378,28},SOUNDS[Sound::VOICEOVER].get()); +} void Stage1::Update(){ switch(state){ - case 0:{ - - }break; + case 0:{ + DisplayBox("Hello Hacker, thank you for taking on this request for me."); + if(box.bPressed){ + state=1; + } + }break; + case 1:{ + DisplayBox("It appears we have no time to waste, many sectors are already infected and the virus spread will just keep getting worse."); + if(box.bPressed){ + state=2; + SOUNDS[Sound::PING]->PlayCentered(); + for(int y=-1;y<=1;y++){ + for(int x=-1;x<=1;x++){ + vi2d basePos={320+x*96,320+y*96}; + TileManager::visibleTiles[{basePos.x/96,basePos.y/96}]=30; + } + } + } + }break; + case 2:{ + SetCameraTarget({320,320}); + if(camera.ReachedTarget()){ + state=3; + } + }break; + case 3:{ + DisplayBox("Your mission is to take out all the RAM banks from the system, this will stop any further creation and spread of viruses."); + if(box.bPressed){ + state=4; + } + }break; + case 4:{ + SetCameraTarget({128,128}); + if(camera.ReachedTarget()){ + state=5; + } + }break; + case 5:{ + DisplayBox("The yellow bar represent units' allocated Health memory. Take out the enemies' and make sure you always have at least 1 bit of it."); + if(box.bPressed){ + state=6; + } + }break; + case 6:{ + DisplayBox("Drag over your target unit and then select a target location via right-click."); + if(box.bPressed){ + state=7; + } + }break; + case 7:{ + SetObjective("Defeat the RAM bank"); + DisplayBox("That should be all you need for now. I'll be back after my coffee break."); + if(box.bPressed){ + state=8; + box.SetVisible(false); + flags.playerInControl=true; + } + }break; + case 8:{ + }break; + } +}; +bool Stage1::MissionCompleted(){ + for(auto&u:units){ + if(!u->IsFriendly()&&u->IsRAMBank()){ + return false; + } } + return true; +} +Stage2::Stage2(std::vector>&units,std::vector>&IMAGES,std::vector>&SOUNDS,std::string&objective,TileTransformedView&game,GameFlags&flags) + :Scenario(units,IMAGES,SOUNDS,objective,game,flags){} +void Stage2::Start(){ + nextLevel=LevelName::STAGE3; }; -Stage2::Stage2(){} -void Stage2::Start(){}; void Stage2::Update(){ switch(state){ - case 0:{ - - }break; + case 0:{ + + }break; } }; -Stage3::Stage3(){} -void Stage3::Start(){}; +bool Stage2::MissionCompleted(){ + return false; +} +Stage3::Stage3(std::vector>&units,std::vector>&IMAGES,std::vector>&SOUNDS,std::string&objective,TileTransformedView&game,GameFlags&flags) + :Scenario(units,IMAGES,SOUNDS,objective,game,flags){} +void Stage3::Start(){ + nextLevel=LevelName::STAGE4; +}; void Stage3::Update(){ switch(state){ - case 0:{ + case 0:{ - }break; + }break; } }; -Stage4::Stage4(){} -void Stage4::Start(){}; +bool Stage3::MissionCompleted(){ + return false; +} +Stage4::Stage4(std::vector>&units,std::vector>&IMAGES,std::vector>&SOUNDS,std::string&objective,TileTransformedView&game,GameFlags&flags) + :Scenario(units,IMAGES,SOUNDS,objective,game,flags){} +void Stage4::Start(){ + nextLevel=LevelName::STAGE5; +}; void Stage4::Update(){ switch(state){ - case 0:{ + case 0:{ - }break; + }break; } }; -Stage5::Stage5(){} -void Stage5::Start(){}; +bool Stage4::MissionCompleted(){ + return false; +} +Stage5::Stage5(std::vector>&units,std::vector>&IMAGES,std::vector>&SOUNDS,std::string&objective,TileTransformedView&game,GameFlags&flags) + :Scenario(units,IMAGES,SOUNDS,objective,game,flags){} +void Stage5::Start(){ + nextLevel=LevelName::STAGE6; +}; void Stage5::Update(){ switch(state){ - case 0:{ + case 0:{ - }break; + }break; } }; -Stage6::Stage6(){} -void Stage6::Start(){}; +bool Stage5::MissionCompleted(){ + return false; +} +Stage6::Stage6(std::vector>&units,std::vector>&IMAGES,std::vector>&SOUNDS,std::string&objective,TileTransformedView&game,GameFlags&flags) + :Scenario(units,IMAGES,SOUNDS,objective,game,flags){} +void Stage6::Start(){ + nextLevel=LevelName::STAGE7; +}; void Stage6::Update(){ switch(state){ - case 0:{ + case 0:{ - }break; + }break; } }; -Stage7::Stage7(){} -void Stage7::Start(){}; +bool Stage6::MissionCompleted(){ + return false; +} +Stage7::Stage7(std::vector>&units,std::vector>&IMAGES,std::vector>&SOUNDS,std::string&objective,TileTransformedView&game,GameFlags&flags) + :Scenario(units,IMAGES,SOUNDS,objective,game,flags){} +void Stage7::Start(){ + nextLevel=LevelName::STAGE8; +}; void Stage7::Update(){ switch(state){ - case 0:{ + case 0:{ - }break; + }break; } }; -Stage8::Stage8(){} -void Stage8::Start(){}; +bool Stage7::MissionCompleted(){ + return false; +} +Stage8::Stage8(std::vector>&units,std::vector>&IMAGES,std::vector>&SOUNDS,std::string&objective,TileTransformedView&game,GameFlags&flags) +:Scenario(units,IMAGES,SOUNDS,objective,game,flags){} +void Stage8::Start(){ + nextLevel=LevelName::FINISH; +}; void Stage8::Update(){ switch(state){ - case 0:{ + case 0:{ - }break; + }break; } -}; \ No newline at end of file +}; +bool Stage8::MissionCompleted(){ + return false; +} \ No newline at end of file diff --git a/olcCodeJam2023Entry/Scenario.h b/olcCodeJam2023Entry/Scenario.h index 8cbd455..f864c0c 100644 --- a/olcCodeJam2023Entry/Scenario.h +++ b/olcCodeJam2023Entry/Scenario.h @@ -1,76 +1,105 @@ #pragma once #include "olcUTIL_Camera2D.h" #include "Textbox.h" +#include "Unit.h" +#include "olcPGEX_AudioSource.h" +#include "olcPGEX_TransformedView.h" +#include "GameFlags.h" +#include "Level.h" class Scenario{ public: - Scenario(); + Scenario(std::vector>&units,std::vector>&IMAGES,std::vector>&SOUNDS,std::string&objective,TileTransformedView&game,GameFlags&flags); virtual~Scenario(); void _Start(); + void Draw(); virtual void Start(); void _Update(); + bool transitionToNextLevel=false; + LevelName nextLevel=LevelName::STAGE1; protected: + void DisplayBox(std::string text,bool scaryHoodedFigure=false); + void SetCameraTarget(vf2d pos); + void SetObjective(std::string objective); + virtual bool MissionCompleted(); virtual void Update(); int state=0; utils::Camera2D camera; vf2d targetPos; Textbox box; float initialWaitTime=3; + bool missionCompleted=false; + float missionFinishWaitTime=3; + float missionCompletedTimer=0; + std::vector>&units; + std::vector>&IMAGES; + std::vector>&SOUNDS; + GameFlags&flags; + std::string&objective; + TileTransformedView&game; }; class Stage1:public Scenario{ public: - Stage1(); + Stage1(std::vector>&units,std::vector>&IMAGES,std::vector>&SOUNDS,std::string&objective,TileTransformedView&game,GameFlags&flags); protected: void Start(); void Update(); + bool MissionCompleted(); }; class Stage2:public Scenario{ public: - Stage2(); + Stage2(std::vector>&units,std::vector>&IMAGES,std::vector>&SOUNDS,std::string&objective,TileTransformedView&game,GameFlags&flags); protected: void Start(); void Update(); + bool MissionCompleted(); }; class Stage3:public Scenario{ public: - Stage3(); + Stage3(std::vector>&units,std::vector>&IMAGES,std::vector>&SOUNDS,std::string&objective,TileTransformedView&game,GameFlags&flags); protected: void Start(); void Update(); + bool MissionCompleted(); }; class Stage4:public Scenario{ public: - Stage4(); + Stage4(std::vector>&units,std::vector>&IMAGES,std::vector>&SOUNDS,std::string&objective,TileTransformedView&game,GameFlags&flags); protected: void Start(); void Update(); + bool MissionCompleted(); }; class Stage5:public Scenario{ public: - Stage5(); + Stage5(std::vector>&units,std::vector>&IMAGES,std::vector>&SOUNDS,std::string&objective,TileTransformedView&game,GameFlags&flags); protected: void Start(); void Update(); + bool MissionCompleted(); }; class Stage6:public Scenario{ public: - Stage6(); + Stage6(std::vector>&units,std::vector>&IMAGES,std::vector>&SOUNDS,std::string&objective,TileTransformedView&game,GameFlags&flags); protected: void Start(); void Update(); + bool MissionCompleted(); }; class Stage7:public Scenario{ public: - Stage7(); + Stage7(std::vector>&units,std::vector>&IMAGES,std::vector>&SOUNDS,std::string&objective,TileTransformedView&game,GameFlags&flags); protected: void Start(); void Update(); + bool MissionCompleted(); }; class Stage8:public Scenario{ public: - Stage8(); + Stage8(std::vector>&units,std::vector>&IMAGES,std::vector>&SOUNDS,std::string&objective,TileTransformedView&game,GameFlags&flags); protected: void Start(); void Update(); + bool MissionCompleted(); }; \ No newline at end of file diff --git a/olcCodeJam2023Entry/Sound.h b/olcCodeJam2023Entry/Sound.h index 5506533..a362287 100644 --- a/olcCodeJam2023Entry/Sound.h +++ b/olcCodeJam2023Entry/Sound.h @@ -1,11 +1,13 @@ #pragma once -enum class Sound:int{ - HUM, - GRAVITY, - COSMOS, - BOSS1, - BOSS2, - VOICEOVER, - PING, -}; \ No newline at end of file +namespace Sound{ + enum Sound:int{ + HUM, + GRAVITY, + COSMOS, + BOSS1, + BOSS2, + VOICEOVER, + PING, + }; +} \ No newline at end of file diff --git a/olcCodeJam2023Entry/Textbox.h b/olcCodeJam2023Entry/Textbox.h index afbeace..8726a0a 100644 --- a/olcCodeJam2023Entry/Textbox.h +++ b/olcCodeJam2023Entry/Textbox.h @@ -2,7 +2,8 @@ #include "olcPixelGameEngine.h" #include "olcPGEX_TransformedView.h" #include "Resources.h" -#include "Unit.h" +#include "olcPGEX_AudioSource.h" +#include "Memory.h" class Textbox{ std::string headerText=""; //If a textbox has a header, it displays at the top in a special color. diff --git a/olcCodeJam2023Entry/Unit.cpp b/olcCodeJam2023Entry/Unit.cpp index cefaf65..51713be 100644 --- a/olcCodeJam2023Entry/Unit.cpp +++ b/olcCodeJam2023Entry/Unit.cpp @@ -138,7 +138,7 @@ void MemoryAllocator::Attack(Unit&victim,std::vector>&othe } -void MemoryAllocator::Update(PixelGameEngine*pge,std::vector>&SOUNDS,std::vector>&queuedUnits){ +void MemoryAllocator::Update(PixelGameEngine*pge,std::vector>&SOUNDS,std::vector>&queuedUnits){ if(IsBuilding()){ SetTargetLocation(CONSTANT::UNSELECTED); target.reset(); @@ -198,7 +198,7 @@ void RAMBank::Attack(Unit&victim,std::vector>&otherUnits){ } -void RAMBank::Update(PixelGameEngine*pge,std::vector>&SOUNDS,std::vector>&queuedUnits){ +void RAMBank::Update(PixelGameEngine*pge,std::vector>&SOUNDS,std::vector>&queuedUnits){ pge->SetDrawTarget(img.Sprite()); for(int y=0;yheight;y++){ for(int x=0;xwidth;x++){ @@ -295,7 +295,7 @@ _Platform::_Platform(PixelGameEngine*pge,vf2d pos,std::vector>&otherUnits){}; -void _Platform::Update(PixelGameEngine*pge,std::vector>&SOUNDS,std::vector>&queuedUnits){ +void _Platform::Update(PixelGameEngine*pge,std::vector>&SOUNDS,std::vector>&queuedUnits){ if(IsBuilding()){ SetTargetLocation(CONSTANT::UNSELECTED); target.reset(); @@ -642,7 +642,7 @@ void Unit::_RunAI(PixelGameEngine*pge){ RunAI(pge); } -void Unit::_Update(PixelGameEngine*pge,std::vector>&SOUNDS,Resources&player_resources,Resources&enemy_resources,std::vector>&queuedUnits,std::array&resourceGainTimer,std::vector&resourceGainIcons,std::vector>&IMAGES){ +void Unit::_Update(PixelGameEngine*pge,std::vector>&SOUNDS,Resources&player_resources,Resources&enemy_resources,std::vector>&queuedUnits,std::array&resourceGainTimer,std::vector&resourceGainIcons,std::vector>&IMAGES){ if(!target.expired()){ auto ptrTarget=target.lock(); if(!InRange(ptrTarget)&&CanMove()){ @@ -827,7 +827,7 @@ void Unit::AttemptAttack(std::weak_ptrattacker,std::weak_ptrunit,std } } -void Unit::Update(PixelGameEngine*pge,std::vector>&SOUNDS,std::vector>&queuedUnits){} +void Unit::Update(PixelGameEngine*pge,std::vector>&SOUNDS,std::vector>&queuedUnits){} void Unit::Attacked(std::weak_ptrattacker){} @@ -944,7 +944,7 @@ bool Unit::IsAllocator(){ return isAllocator&&attachedPoint.expired()&&buildTime<=0; } -void Unit::SetBuildUnit(float buildTime,std::unique_ptrfinalUnit){ +void Unit::SetBuildUnit(float buildTime,std::shared_ptrfinalUnit){ this->buildTime=buildTime; this->buildTransformUnit=std::move(finalUnit); } diff --git a/olcCodeJam2023Entry/Unit.h b/olcCodeJam2023Entry/Unit.h index 9b027cc..1214b62 100644 --- a/olcCodeJam2023Entry/Unit.h +++ b/olcCodeJam2023Entry/Unit.h @@ -8,12 +8,11 @@ #include "olcPGEX_AudioSource.h" #include "DebuffIcon.h" #include "CollectionPoint.h" -#include "MemoryType.h" #include "Resources.h" +#include "Textbox.h" +#include "Memory.h" #include "olcPGEX_QuickGUI.h" -class Textbox; - enum class UnitType{ LeftShifter, RightShifter, @@ -33,11 +32,6 @@ struct Marker{ size_t size; }; -struct Memory{ - MemoryType type; - int size; -}; - struct Unit{ public: Unit(PixelGameEngine*pge,std::vectormemory,vf2d pos,float radius,Renderable&img,Pixel targetLineColor,Pixel attackingLineColor,bool friendly=false,bool moveable=true,bool friendlyInteractable=false,bool enemyInteractable=true); @@ -51,7 +45,7 @@ public: std::vectormemory; std::vectorghostMemory; std::vectorsavedMemory; - virtual void Update(PixelGameEngine*pge,std::vector>&SOUNDS,std::vector>&queuedUnits); + virtual void Update(PixelGameEngine*pge,std::vector>&SOUNDS,std::vector>&queuedUnits); virtual void Attack(Unit&victim,std::vector>&otherUnits)=0; virtual void Draw(TileTransformedView&game,std::vector>&IMAGES); virtual void DrawHud(TileTransformedView&game,std::vector>&IMAGES); @@ -72,7 +66,7 @@ public: bool GhostInFogOfWar(); void HideGhost(); vf2d GetGhostPos(); - void _Update(PixelGameEngine*pge,std::vector>&SOUNDS,Resources&player_resources,Resources&enemy_resources,std::vector>&queuedUnits,std::array&resourceGainTimer,std::vector&resourceGainIcons,std::vector>&IMAGES); + void _Update(PixelGameEngine*pge,std::vector>&SOUNDS,Resources&player_resources,Resources&enemy_resources,std::vector>&queuedUnits,std::array&resourceGainTimer,std::vector&resourceGainIcons,std::vector>&IMAGES); bool IsMoveable(); void DrawRangeIndicator(PixelGameEngine*pge,TileTransformedView&game,std::vector>&IMAGES); bool CanInteractWithEnemies(); @@ -91,7 +85,7 @@ public: virtual void UpdateGUIState(TileTransformedView&game,Resources&player_resources,Textbox&displayBox,bool&hovered,int totalUsedMemory,int availableMemory); virtual bool ClickHandled(TileTransformedView&game,Resources&player_resources,std::vector>&units,std::vector>&IMAGES); //If you return true here, then the left click does not pass back to the main Virus Attack class. bool IsAllocator(); - void SetBuildUnit(float buildTime,std::unique_ptrfinalUnit); + void SetBuildUnit(float buildTime,std::shared_ptrfinalUnit); bool IsBuilding(); void SetGuardTime(float time); bool IsGuarded(); @@ -135,7 +129,7 @@ protected: bool autoAcquireFriendlyTarget=true; bool isAllocator=false; bool isPlatform=false; - std::unique_ptrbuildTransformUnit; + std::shared_ptrbuildTransformUnit; float buildTime=0; bool isRAMBank=false; private: @@ -207,7 +201,7 @@ struct Corrupter:Unit{ struct MemoryAllocator:Unit{ MemoryAllocator(PixelGameEngine*pge,vf2d pos,std::vector>&IMAGES,bool friendly=false,bool moveable=true); void Attack(Unit&victim,std::vector>&units)override; - void Update(PixelGameEngine*pge,std::vector>&SOUNDS,std::vector>&queuedUnits)override; + void Update(PixelGameEngine*pge,std::vector>&SOUNDS,std::vector>&queuedUnits)override; void Draw(TileTransformedView&game,std::vector>&IMAGES)override; static std::vector resourceCost; static std::string unitName; @@ -224,7 +218,7 @@ struct RAMBank:Unit{ QuickGUI::Manager allocatorManager; QuickGUI::ImageButton*allocatorButton; RAMBank(PixelGameEngine*pge,vf2d pos,std::vector>&IMAGES,bool friendly=false); - void Update(PixelGameEngine*pge,std::vector>&SOUNDS,std::vector>&queuedUnits)override; + void Update(PixelGameEngine*pge,std::vector>&SOUNDS,std::vector>&queuedUnits)override; void Attack(Unit&victim,std::vector>&otherUnits)override; void Draw(TileTransformedView&game,std::vector>&IMAGES)override; void OnDeath(std::vector>&SOUNDS)override; @@ -239,7 +233,7 @@ struct RAMBank:Unit{ struct _Platform:Unit{ _Platform(PixelGameEngine*pge,vf2d pos,std::vector>&IMAGES,bool friendly=false,bool moveable=true); void Attack(Unit&victim,std::vector>&otherUnits)override; - void Update(PixelGameEngine*pge,std::vector>&SOUNDS,std::vector>&queuedUnits)override; + void Update(PixelGameEngine*pge,std::vector>&SOUNDS,std::vector>&queuedUnits)override; void Draw(TileTransformedView&game,std::vector>&IMAGES)override; static std::vector resourceCost; static std::string unitName; diff --git a/olcCodeJam2023Entry/VirusAttack.cpp b/olcCodeJam2023Entry/VirusAttack.cpp index f4a1302..4589273 100644 --- a/olcCodeJam2023Entry/VirusAttack.cpp +++ b/olcCodeJam2023Entry/VirusAttack.cpp @@ -271,19 +271,19 @@ void VirusAttack::InitializeGUIs(){ } void VirusAttack::InitializeScenarios(){ - SCENARIOS.emplace_back(std::make_unique()); - SCENARIOS.emplace_back(std::make_unique()); - SCENARIOS.emplace_back(std::make_unique()); - SCENARIOS.emplace_back(std::make_unique()); - SCENARIOS.emplace_back(std::make_unique()); - SCENARIOS.emplace_back(std::make_unique()); - SCENARIOS.emplace_back(std::make_unique()); - SCENARIOS.emplace_back(std::make_unique()); + SCENARIOS.emplace_back(std::make_unique(units,IMAGES,SOUNDS,objective,gametv,flags)); + SCENARIOS.emplace_back(std::make_unique(units,IMAGES,SOUNDS,objective,gametv,flags)); + SCENARIOS.emplace_back(std::make_unique(units,IMAGES,SOUNDS,objective,gametv,flags)); + SCENARIOS.emplace_back(std::make_unique(units,IMAGES,SOUNDS,objective,gametv,flags)); + SCENARIOS.emplace_back(std::make_unique(units,IMAGES,SOUNDS,objective,gametv,flags)); + SCENARIOS.emplace_back(std::make_unique(units,IMAGES,SOUNDS,objective,gametv,flags)); + SCENARIOS.emplace_back(std::make_unique(units,IMAGES,SOUNDS,objective,gametv,flags)); + SCENARIOS.emplace_back(std::make_unique(units,IMAGES,SOUNDS,objective,gametv,flags)); } void VirusAttack::InitializeSounds(){ int soundIndex=0; - auto LoadSound=[&](Sound sound,std::string soundFilename){ + auto LoadSound=[&](Sound::Sound sound,std::string soundFilename){ SOUNDS.emplace_back(std::make_unique