/* * Copyright (C) 2017 Christopher J. Howard * * This file is part of Antkeeper Source Code. * * Antkeeper Source Code is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Antkeeper Source Code is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Antkeeper Source Code. If not, see . */ #ifndef APPLICATION_HPP #define APPLICATION_HPP #include using namespace Emergent; #include "mesh.hpp" #include "terrain.hpp" #include "input.hpp" #include "controls.hpp" #include "settings.hpp" #include "render-passes.hpp" #include "ui/ui.hpp" #include "ui/tween.hpp" class Menu; class ApplicationState; class Colony; class SplashState; class TitleState; class ExperimentState; class CameraController; class SurfaceCameraController; class TunnelCameraController; class LineBatcher; class ModelLoader; class MaterialLoader; class Application { public: Application(int argc, char* argv[]); ~Application(); // Executes the application and returns a status code int execute(); // Changes the application state void changeState(ApplicationState* state); // Sets the termination code to be returned when the application finishes void setTerminationCode(int code); // Closes the application void close(int terminationCode); void changeFullscreen(); void changeVerticalSync(); void saveUserSettings(); void resizeUI(); void enterMenu(std::size_t index); void exitMenu(std::size_t index); void selectMenuItem(std::size_t index); void activateMenuItem(std::size_t index); private: ApplicationState* state; ApplicationState* nextState; int terminationCode; public: SDL_Window* window; SDL_GLContext context; ModelInstance lensToolObject; ModelInstance forcepsToolObject; ModelInstance navigatorObject; DirectionalLight sunlight; DirectionalLight fillLight; DirectionalLight backLight; Spotlight lensHotspot; Spotlight lensFalloff; RenderTarget shadowMapRenderTarget; GLuint shadowFramebuffer; GLuint shadowDepthTexture; ShadowMapRenderPass shadowMapPass; Compositor shadowCompositor; Camera sunlightCamera; RenderTarget defaultRenderTarget; LightingRenderPass lightingPass; DebugRenderPass debugPass; Compositor defaultCompositor; Camera camera; Scene scene; BillboardBatch particleBatch; MaterialLoader* materialLoader; ModelLoader* modelLoader; Renderer renderer; int toolIndex; std::string appDataPath; std::string userDataPath; ParameterDict settings; std::string defaultSettingsFilename; std::string userSettingsFilename; bool fullscreen; int fullscreenWidth; int fullscreenHeight; int windowedWidth; int windowedHeight; int swapInterval; int width; int height; InputManager* inputManager; Keyboard* keyboard; Mouse* mouse; SplashState* splashState; TitleState* titleState; ExperimentState* experimentState; ControlProfile* menuControlProfile; Control menuLeft; Control menuRight; Control menuUp; Control menuDown; Control menuSelect; Control menuCancel; Control toggleFullscreen; Control escape; ControlProfile* gameControlProfile; Control cameraMoveForward; Control cameraMoveBack; Control cameraMoveLeft; Control cameraMoveRight; Control cameraRotateCW; Control cameraRotateCCW; Control cameraZoomIn; Control cameraZoomOut; Control cameraToggleOverheadView; Control cameraToggleNestView; bool cameraOverheadView; bool cameraNestView; // Misc Timer frameTimer; // UI ParameterDict strings; float dpi; float fontSizePT; float fontSizePX; Font* menuFont; Texture splashTexture; Texture titleTexture; Vector4 selectedColor; Vector4 deselectedColor; UIContainer* uiRootElement; UIImage* blackoutImage; UIImage* splashImage; UIImage* titleImage; UIImage* copyrightImage; UILabel* anyKeyLabel; UILabel* menuSelectorLabel; UIContainer* mainMenuContainer; UIContainer* challengeMenuContainer; UIContainer* experimentMenuContainer; UIContainer* settingsMenuContainer; UILabel* challengeLabel; UILabel* experimentLabel; UILabel* settingsLabel; UILabel* quitLabel; UILabel* loadLabel; UILabel* newLabel; UILabel* experimentBackLabel; UILabel* videoLabel; UILabel* audioLabel; UILabel* controlsLabel; UILabel* gameLabel; UILabel* settingsBackLabel; UIContainer* pauseMenuContainer; UILabel* pausedResumeLabel; UILabel* pausedSaveLabel; UILabel* pausedNewLabel; UILabel* pausedSettingsLabel; UILabel* returnToMainMenuLabel; UILabel* quitToDesktopLabel; BillboardBatch* uiBatch; UIBatcher* uiBatcher; UIRenderPass uiPass; Compositor uiCompositor; Camera uiCamera; Scene uiScene; Camera bgCamera; BillboardBatch bgBatch; Compositor bgCompositor; VignetteRenderPass vignettePass; Scene bgScene; // Animation Tweener* tweener; Tween* fadeInTween; Tween* fadeOutTween; Tween* splashFadeInTween; Tween* splashFadeOutTween; Tween* titleFadeInTween; Tween* titleFadeOutTween; Tween* copyrightFadeInTween; Tween* copyrightFadeOutTween; Tween* anyKeyFadeInTween; Tween* anyKeyFadeOutTween; Tween* menuFadeInTween; Tween* menuFadeOutTween; Tween* menuSlideInTween; // Menus std::size_t menuCount; Menu** menus; int currentMenuIndex; int selectedMenuItemIndex; UIContainer** menuContainers; Menu* currentMenu; Menu* mainMenu; Menu* challengeMenu; Menu* experimentMenu; Menu* settingsMenu; // Models Model* displayModel; Model* antModel; ModelInstance* displayModelInstance; ModelInstance* antModelInstance; // Game variables Colony* colony; SurfaceCameraController* surfaceCam; TunnelCameraController* tunnelCam; Plane clippingPlanes[5]; Vector3 clippingPlaneNormals[5]; Vector3 clippingPlaneOffsets[5]; AABB clippingPlaneAABBS[5]; // Debug LineBatcher* lineBatcher; }; #endif // APPLICATION_HPP