#pragma once #include "olcPixelGameEngine.h" #include "olcSoundWaveEngine.h" #include "olcPGEX_TransformedView.h" #include "olcPGEX_AudioListener.h" #include "olcPGEX_AudioSource.h" #include "olcPGEX_SplashScreen.h" #include "olcPGEX_QuickGUI.h" #include "Unit.h" #include "Constant.h" #include "Image.h" #include "DeathAnimation.h" #include "Sound.h" #include "DebuffIcon.h" #include "CollectionPoint.h" #include "Resources.h" #include "Textbox.h" #include "Level.h" #include "GameState.h" class Scenario; struct Letter{ vf2d pos; float spd; char c; }; class VirusAttack : public olc::PixelGameEngine { friend class Scenario; friend class Stage1; friend class Stage2; friend class Stage3; friend class Stage4; friend class Stage5; friend class Stage6; friend class Stage7; friend class Stage8; private: #ifdef SPLASH_ENABLED SplashScreen splash; #endif vi2d WORLD_SIZE={64,64}; std::vector>queuedUnits; std::vector>units; std::vector>collectionPoints; std::vector>deathAnimations; std::vectordebuffIcons; std::vectorresourceGainIcons; std::vectorscenarios; std::map>IMAGES; std::map>SOUNDS; olcPGEX_AudioListener AL; Audio*bgm=nullptr; Resources player_resources,player_prev_resources,player_display_resources,enemy_resources; TileTransformedView game; Textbox unitCreationBox,testBox,memoryAllocatorBox,platformCreationBox,restartBox; Level*currentLevel; std::maplevelData; QuickGUI::Manager mainMenu; QuickGUI::TransparentButton*campaignStartButton; QuickGUI::TransparentButton*audioToggleButton; QuickGUI::TransparentButton*difficultyToggleButton; QuickGUI::TransparentButton*exitGameButton; QuickGUI::Manager restartManager; QuickGUI::TransparentImageButton*restartButton; QuickGUI::Manager unitCreationList; QuickGUI::ImageButton*leftShifterButton; QuickGUI::ImageButton*rightShifterButton; QuickGUI::ImageButton*bitRestorerButton; QuickGUI::ImageButton*memorySwapperButton; QuickGUI::ImageButton*corrupterButton; QuickGUI::ImageButton*platformButton; QuickGUI::Manager platformCreationList; QuickGUI::ImageButton*ramBankButton; QuickGUI::ImageButton*refresherButton; QuickGUI::ImageButton*turretButton; QuickGUI::ImageButton*memoryGuardButton; float matrixTimer=0; float updatePixelsTimer=0; const std::arraymatrixLetters={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F',}; std::vectoractiveLetters; std::arrayresourceGainTimer={0}; std::arrayresourceDisplayValueUpdateTimer={0}; std::arrayresourceIncreased={false}; std::arrayplayerUsedMemory={0},enemyUsedMemory={0}; std::arrayplayerUsedDisplayMemory={0},enemyUsedDisplayMemory={0}; float lastDisplayMemoryUpdateTimer=0; int lastTotalMemory=0; int memoryDisplayAmt=0; float memoryDisplayDelay=0; bool memoryIncreased=true; float memoryChangeTimer=2; bool unitMetersGreyedOut=false; //If true, all but health meters show up as dark grey. bool playerInControl=true; float levelForegroundFade=0; LevelName levelToLoad; bool limitedBuildOptions=false; bool guideEnabled=true; bool reloadLevel=false; bool restartButtonHeldDown=false; float restartButtonHoldTime=0; GameState state=GameState::MAIN_MENU; std::string objective=""; vf2d randomBackgroundOffset; vf2d startingDragPos=CONSTANT::UNSELECTED; void HandleDraggingSelection(); void DrawSelectionRectangle(); void HandleRightClickMove(); void CollisionChecking(std::shared_ptru,std::shared_ptru2); void IdentifyClosestTarget(std::weak_ptr&closestUnit,float&closestDist,std::shared_ptru,std::shared_ptru2); vf2d GetWorldMousePos(); void HandlePanAndZoom(float fElapsedTime); void DrawMinimap(); void HandleMinimapClick(); void InitializeImages(); void UpdateMatrixTexture(float fElapsedTime); void RenderCollectionPoints(CollectionPoint*cp); void RenderFogOfWar(); void InitializeSounds(); void DrawResourceBar(float fElapsedTime); bool UnitCreationClickHandled(); void InitializeGUIs(); bool CanAfford(Resources&resources,std::vector&unitCosts); void ExpendResources(Resources&resources,std::vector&unitCosts); void UpdateUnitCreationListGUI(bool allocatorSelected); void LoadLevel(LevelName level); void InitializeLevelData(); void UpdatePlatformCreationListGUI(bool platformSelected); int GetTotalUsedMemory(); int GetPlayerUsedMemory(); int GetEnemyUsedMemory(); void DrawSystemMemoryBar(float fElapsedTime); void CalculateUsedMemory(); void InitializeScenarios(); void PerformLevelTransition(float fElapsedTime); void RestartLevel(); void HandleRestartButton(float fElapsedTime); public: VirusAttack(); public: bool OnUserCreate() override; bool OnUserUpdate(float fElapsedTime) override; bool OnUserDestroy() override; };