double-hit-balls/game/main_code.cpp

1111 lines
37 KiB
C++
Raw Normal View History

2018-05-22 12:00:30 +00:00
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
2018-05-24 11:44:58 +00:00
#include <string>
2018-05-22 12:00:30 +00:00
#include "include/Engine.h"
#include "menucode.h"
#include "main_code.h"
#include <boost/property_tree/json_parser.hpp>
boost::signals2::signal<void (Vector2f)> OnTapUpSignal;
boost::signals2::signal<void (Vector2f)> OnTapUpAfterMoveSignal;
boost::signals2::signal<void (Vector2f)> OnTapDownSignal;
boost::signals2::signal<void (Vector2f)> OnFlingSignal;
boost::signals2::signal<void (Vector2f)> OnScrollSignal;
boost::signals2::signal<void ()> OnDrawSignal;
const std::string CONST_BLOCK_TEXTURE1 = "block1_mod1";
const std::string CONST_BLOCK_TEXTURE2 = "block2_mod1";
const std::string CONST_BLOCK_TEXTURE3 = "block3_mod1";
const std::string CONST_BONUS_GOTHROUGH_TEXTURE = "bonus_gothrough_mod1";
const std::string CONST_BONUS_MULTIPLIER_TEXTURE = "bonus_multiplier_mod1";
const std::string CONST_BONUS_FLOOR_TEXTURE = "bonus_floor_mod1";
const std::string CONST_BALL_TEXTURE = "ball_mod1";
const std::string CONST_BALLGLOW_TEXTURE = "ball_glow";
const std::string CONST_REFLECTOR_TEXTURE = "reflector_mod1";
const std::string CONST_WALL_LEFT_TEXTURE = "wall_left_mod2";
const std::string CONST_WALL_RIGHT_TEXTURE = "wall_right_mod2";
const std::string CONST_WALL_UP_TEXTURE = "wall_up_mod2";
const std::string CONST_WALL_BONUS_TEXTURE = "wall_bonus_mod2";
const std::string CONST_BACK_BTN_TEXTURE = "back_btn";
const std::string CONST_SLIDE_UP_BTN_TEXTURE = "slide_up_btn";
const std::string CONST_TAP_TO_CONTINUE_BTN_TEXTURE = "tap_to_continue_btn";
const std::string CONST_LOADING_TEXTURE = "loading";
const std::string CONST_LOGO_SMALL_TEXTURE = "logo_small";
const std::string CONST_LOADING_BACKGROUND_BLACK = "loading_background_black";
const std::string CONST_CREDITS_TEXTURE = "credits";
const float CONST_CREDITS_SHOW_TIME = 150.f;
TMyApplication* Application;
int currentStar;
int currentLevel;
2018-10-18 08:24:17 +00:00
boost::property_tree::ptree gamePauseMenuUi;
boost::property_tree::ptree galaxyMenuUi;
bool ignoreTapUp = false;
void TMyApplication::LoadUserProgress()
{
boost::property_tree::ptree userProgressJson;
try
{
#ifdef TARGET_WIN32
boost::property_tree::json_parser::read_json(ST::PathToResources + "levels/user_progress.json", userProgressJson);
#endif
#ifdef TARGET_ANDROID
auto ss = LoadFileFromAndroid("user_progress.json");
boost::property_tree::json_parser::read_json(ss, userProgressJson);
#endif
currentStar = userProgressJson.get<int>("currentStar");
currentLevel = userProgressJson.get<int>("currentLevel");
}
catch (...)
{
currentStar = 0;
currentLevel = 0;
}
}
void TMyApplication::SaveUserProgress(int levelStar, int levelIndex)
2018-05-22 12:00:30 +00:00
{
if (levelStar < currentStar)
{
return;
}
if (levelIndex < currentLevel)
{
return;
}
if (currentStar == Menu.GalaxMenu.galaxies[0].Stars.size())
{
return;
}
2018-05-22 12:00:30 +00:00
currentLevel += 1;
if (currentLevel == Menu.GalaxMenu.galaxies[0].Stars[currentStar].selectionMenu.gameLevels.size())
{
currentLevel = 0;
currentStar += 1;
if (currentStar == Menu.GalaxMenu.galaxies[0].Stars.size())
{
}
}
boost::property_tree::ptree userProgressJson;
userProgressJson.put("currentStar", currentStar);
userProgressJson.put("currentLevel", currentLevel);
#ifdef TARGET_WIN32
boost::property_tree::json_parser::write_json(ST::PathToResources + "levels/user_progress.json", userProgressJson);
#endif
#ifdef TARGET_ANDROID
std::stringstream ss;
boost::property_tree::json_parser::write_json(ss, userProgressJson);
SaveFileToAndroid("user_progress.json", ss.str());
#endif
}
2018-10-17 03:59:08 +00:00
void TMyApplication::InnerChangeWidthHeight(int screenWidth, int screenHeight, float matrixWidth, float matrixHeight)
{
2018-10-17 03:59:08 +00:00
Menu.GalaxMenu.UpdateGalaxyMenu(matrixWidth, matrixHeight, 0);
SetGameLevelScreenScale();
2018-10-18 15:22:47 +00:00
float screenRatio = Renderer->GetMatrixWidth() / (float)Renderer->GetMatrixHeight();
float screenRatioToFixedRatio = screenRatio / 1.6f;
float marginLeft;
if (screenRatioToFixedRatio > 1.f)
{
marginLeft = (Renderer->GetMatrixWidth() - Renderer->GetMatrixWidth() / screenRatioToFixedRatio) / 2.f;
}
else
{
marginLeft = 0;
}
if (GameState == CONST_GAMESTATE_LEVEL)
{
ResourceManager->newGuiManager.findWidgetByName("buttonList")->setMargin(0, 0, marginLeft, 0);
}
2018-10-17 03:59:08 +00:00
}
void TMyApplication::InnerInit()
{
2018-05-22 12:00:30 +00:00
Application = this;
#ifdef TARGET_WIN32
#ifdef NDEBUG
2018-11-18 19:02:23 +00:00
//ST::PathToResources = "resources/";
2018-10-18 08:24:17 +00:00
ST::PathToResources = "../../../assets/";
2018-05-22 12:00:30 +00:00
#else
ST::PathToResources = "../../../assets/";
#endif
#endif
#ifdef TARGET_IOS
ST::PathToResources = "assets/";
#endif
2018-07-14 11:53:59 +00:00
#ifdef TARGET_ANDROID
2018-07-14 10:49:31 +00:00
ST::PathToResources = "";
2018-07-14 11:53:59 +00:00
#endif
2018-07-14 10:49:31 +00:00
2018-10-17 03:59:08 +00:00
GetConsole() <<"APP INIT\n";
2018-05-22 12:00:30 +00:00
srand (static_cast<size_t>(time(NULL)));
GameState = CONST_GAMESTATE_PRELOADING;
2018-12-01 09:47:26 +00:00
Menu.SetGameState(GameState);
2018-05-22 12:00:30 +00:00
StateTimer = 0.f;
2018-07-22 11:36:06 +00:00
ResourceManager->ShaderManager.AddShader("DefaultShader", "shaders/gui_transparent.vertex", "shaders/gui_transparent.fragment");
Renderer->PushShader("DefaultShader");
2018-05-22 12:00:30 +00:00
ResourceManager->TexList.AddTexture("console_bkg.bmp");
ResourceManager->TexList.AddTexture("white.bmp");
2018-05-22 12:00:30 +00:00
ResourceManager->FontManager.AddFont("arial32", "arial32.png", "arial32.txt");
ResourceManager->FontManager.AddFont("lucon12", "lucon12.png", "lucon12.txt");
ResourceManager->FontManager.PushFont("lucon12");
2018-05-22 12:00:30 +00:00
Renderer->SetOrthoProjection();
2018-05-22 12:00:30 +00:00
Renderer->SetFullScreenViewport();
2018-05-22 12:00:30 +00:00
ResourceManager->newGuiManager.LoadFromConfig("gui_loading.json");
2018-05-22 12:00:30 +00:00
skipUpdateToUpdateScreen = true;
StateTimer = 0.f;
}
void TMyApplication::InnerReinitGLResources()
{
RenderLevelSnapshots();
lsparkler.reinitGlResources();
rsparkler.reinitGlResources();
tsparkler.reinitGlResources();
bsparkler.reinitGlResources();
lvlFirework.reinitGlResources();
}
2018-10-18 08:24:17 +00:00
void TMyApplication::RenderLevelSnapshots()
{
Renderer->SwitchToFrameBuffer("LevelBuffer");
2018-10-18 08:24:17 +00:00
Renderer->SetProjectionMatrix(768, 480);
2018-07-22 20:56:46 +00:00
Renderer->LoadIdentity();
2018-05-22 12:00:30 +00:00
for (auto &star : Menu.GalaxMenu.galaxies[0].Stars)
{
for (auto level : star.selectionMenu.gameLevels)
{
level->DrawSnapshot("LevelBuffer", false);
Renderer->PushShader("BlackAndWhiteShader");
level->DrawSnapshot("LevelBuffer", true);
Renderer->PopShader();
}
}
Renderer->SwitchToScreen();
Renderer->SetOrthoProjection();
2018-05-22 12:00:30 +00:00
}
void TMyApplication::InnerDeinit()
{
Inited = false;
Loaded = false;
2018-10-17 03:59:08 +00:00
GetConsole() << "APP DEINIT\n";
2018-05-22 12:00:30 +00:00
OnTapUpSignal.disconnect(boost::bind(&TGameLevel::OnTapUp, boost::ref(GameLevel), _1));
OnTapUpSignal.disconnect(boost::bind(&TGameMenu::OnTapUp, boost::ref(Menu), _1));
OnTapUpAfterMoveSignal.disconnect(boost::bind(&TGameMenu::OnTapUpAfterMove, boost::ref(Menu), _1));
OnFlingSignal.disconnect(boost::bind(&TGameLevel::OnFling, boost::ref(GameLevel), _1));
OnFlingSignal.disconnect(boost::bind(&TGameMenu::OnFling, boost::ref(Menu), _1));
OnScrollSignal.disconnect(boost::bind(&TGameLevel::OnScroll, boost::ref(GameLevel), _1));
OnScrollSignal.disconnect(boost::bind(&TGameMenu::OnScroll, boost::ref(Menu), _1));
OnTapDownSignal.disconnect(boost::bind(&TGameLevel::OnTapDown, boost::ref(GameLevel), _1));
OnTapDownSignal.disconnect(boost::bind(&TGameMenu::OnTapDown, boost::ref(Menu), _1));
OnTapDownSignal.disconnect(boost::bind(&TGameCredits::OnTapDown, boost::ref(GameCredits), _1));
2018-07-22 11:36:06 +00:00
//OnDrawSignal.disconnect(boost::bind(&TGameLoading::Draw, boost::ref(GameLoading)));
2018-05-22 12:00:30 +00:00
OnDrawSignal.disconnect(boost::bind(&TGameMenu::Draw, boost::ref(Menu)));
OnDrawSignal.disconnect(boost::bind(&TGameLevel::Draw, boost::ref(GameLevel)));
OnDrawSignal.disconnect(boost::bind(&TGameCredits::Draw, boost::ref(GameCredits)));
}
void TMyApplication::InnerOnTapUp(Vector2f p)
{
2018-10-18 08:24:17 +00:00
if (ignoreTapUp)
{
return;
}
2018-05-22 12:00:30 +00:00
OnTapUpSignal(Vector2f(p(0), p(1)));
}
void TMyApplication::InnerOnTapUpAfterMove(Vector2f p)
{
2018-10-18 08:24:17 +00:00
if (ignoreTapUp)
{
return;
}
2018-05-22 12:00:30 +00:00
OnTapUpAfterMoveSignal(Vector2f(p(0), p(1)));
}
void TMyApplication::InnerOnMove(Vector2f p, Vector2f shift)
{
OnScrollSignal(Vector2f(shift(0), shift(1)));
}
void TMyApplication::OnFling(Vector2f v)
{
}
void TMyApplication::ApplySignalsToMenu()
{
OnTapUpSignal.connect(boost::bind(&TGameMenu::OnTapUp, boost::ref(Menu), _1));
OnTapUpAfterMoveSignal.connect(boost::bind(&TGameMenu::OnTapUpAfterMove, boost::ref(Menu), _1));
OnFlingSignal.connect(boost::bind(&TGameMenu::OnFling, boost::ref(Menu), _1));
OnScrollSignal.connect(boost::bind(&TGameMenu::OnScroll, boost::ref(Menu), _1));
OnTapDownSignal.connect(boost::bind(&TGameMenu::OnTapDown, boost::ref(Menu), _1));
2018-05-25 11:51:26 +00:00
/*..Galaxy Menu..*/ // Can be replaced to "Menu" OnTap(events)
OnTapDownSignal.connect(boost::bind(&GalaxyMenu::tapDown, boost::ref(Menu.GalaxMenu), _1));
OnTapUpSignal.connect(boost::bind(&GalaxyMenu::tapUp, boost::ref(Menu.GalaxMenu), _1));
OnScrollSignal.connect(boost::bind(&GalaxyMenu::tapMove, boost::ref(Menu.GalaxMenu), _1));
2018-05-28 11:31:01 +00:00
OnTapUpAfterMoveSignal.connect(boost::bind(&GalaxyMenu::tapUp, boost::ref(Menu.GalaxMenu), _1));
2018-05-25 11:51:26 +00:00
2018-05-22 12:00:30 +00:00
}
void TMyApplication::DisapplySignalsToMenu()
{
OnTapUpSignal.disconnect(boost::bind(&TGameMenu::OnTapUp, boost::ref(Menu), _1));
OnTapUpAfterMoveSignal.disconnect(boost::bind(&TGameMenu::OnTapUpAfterMove, boost::ref(Menu), _1));
OnFlingSignal.disconnect(boost::bind(&TGameMenu::OnFling, boost::ref(Menu), _1));
OnScrollSignal.disconnect(boost::bind(&TGameMenu::OnScroll, boost::ref(Menu), _1));
OnTapDownSignal.disconnect(boost::bind(&TGameMenu::OnTapDown, boost::ref(Menu), _1));
2018-05-25 11:51:26 +00:00
/*..Galaxy Menu..*/ // Can be replaced to "Menu" OnTap(events)
OnTapDownSignal.disconnect(boost::bind(&GalaxyMenu::tapDown, boost::ref(Menu.GalaxMenu), _1));
OnTapUpSignal.disconnect(boost::bind(&GalaxyMenu::tapUp, boost::ref(Menu.GalaxMenu), _1));
OnScrollSignal.disconnect(boost::bind(&GalaxyMenu::tapMove, boost::ref(Menu.GalaxMenu), _1));
2018-05-28 11:31:01 +00:00
OnTapUpAfterMoveSignal.disconnect(boost::bind(&GalaxyMenu::tapUp, boost::ref(Menu.GalaxMenu), _1));
2018-05-25 11:51:26 +00:00
2018-05-22 12:00:30 +00:00
}
void TMyApplication::ApplySignalsToGame()
{
OnTapUpSignal.connect(boost::bind(&TGameLevel::OnTapUp, boost::ref(GameLevel), _1));
OnFlingSignal.connect(boost::bind(&TGameLevel::OnFling, boost::ref(GameLevel), _1));
OnScrollSignal.connect(boost::bind(&TGameLevel::OnScroll, boost::ref(GameLevel), _1));
2018-05-30 11:21:50 +00:00
OnTapDownSignal.connect(boost::bind(&TGameLevel::OnTapDown, boost::ref(GameLevel), _1));
2018-05-22 12:00:30 +00:00
}
void TMyApplication::DisapplySignalsToGame()
{
OnTapUpSignal.disconnect(boost::bind(&TGameLevel::OnTapUp, boost::ref(GameLevel), _1));
OnFlingSignal.disconnect(boost::bind(&TGameLevel::OnFling, boost::ref(GameLevel), _1));
OnScrollSignal.disconnect(boost::bind(&TGameLevel::OnScroll, boost::ref(GameLevel), _1));
2018-05-30 11:21:50 +00:00
OnTapDownSignal.disconnect(boost::bind(&TGameLevel::OnTapDown, boost::ref(GameLevel), _1));
2018-05-22 12:00:30 +00:00
}
void TMyApplication::ApplySignalsToCredits()
{
OnTapDownSignal.connect(boost::bind(&TGameCredits::OnTapDown, boost::ref(GameCredits), _1));
}
void TMyApplication::DisapplySignalsToCredits()
{
OnTapDownSignal.disconnect(boost::bind(&TGameCredits::OnTapDown, boost::ref(GameCredits), _1));
}
void TMyApplication::LoadResources()
{
TextureNamesToLoad.clear();
// :::::::::::::::::::::::::::::::::::::
// :::::::::::::PTREE LOAD::::::::::::::
2018-07-14 10:49:31 +00:00
boost::property_tree::ptree Textures_pt = SE::ReadJsonFile(ST::PathToResources + "bg_textures_config.json");
//boost::property_tree::json_parser::read_json(ST::PathToResources + "bg_textures_config.json", Textures_pt);
2018-07-22 20:56:46 +00:00
std::string bg_ext = ".jpg";
2018-05-22 12:00:30 +00:00
// :::::::::::::::::::::::::::::::::::::
TextureNamesToLoad.push_back(std::pair<std::string, std::string>("main_menu_bkg_left.png", "main_menu_bkg_left"));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>("main_menu_bkg_right.png", "main_menu_bkg_right"));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>("select_level.png", "select_level"));
2018-05-31 11:47:18 +00:00
2018-05-22 12:00:30 +00:00
/*
TextureNamesToLoad.push_back(std::pair<std::string, std::string>("shutterstock1.png", "shutterstock1"));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>("shutterstock2.png", "shutterstock2"));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>("shutterstock3.png", "shutterstock3"));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>("shutterstock4.png", "shutterstock4"));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>("shutterstock5.png", "shutterstock5"));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>("shutterstock6.png", "shutterstock6"));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>("shutterstock7.png", "shutterstock7"));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>("shutterstock8.png", "shutterstock8"));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>("shutterstock9.png", "shutterstock9"));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>("shutterstock10.png", "shutterstock10"));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>("shutterstock11.png", "shutterstock11"));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>("shutterstock12.png", "shutterstock12"));
*/
2018-05-31 11:47:18 +00:00
#ifdef NDEBUG
bool useDebugBackgrounds = false;
#else
bool useDebugBackgrounds = Textures_pt.get<bool>("useDebugBackgrounds", false);
#endif
std::string backgroundPath = useDebugBackgrounds ? "level_background/debug/" : "level_background/";
2018-05-31 11:47:18 +00:00
TextureNamesToLoad.push_back(std::pair<std::string, std::string>(backgroundPath + Textures_pt.get<std::string>("TextureList.bg_1") + bg_ext, "shutterstock1"));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>(backgroundPath + Textures_pt.get<std::string>("TextureList.bg_2") + bg_ext, "shutterstock2"));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>(backgroundPath + Textures_pt.get<std::string>("TextureList.bg_3") + bg_ext, "shutterstock3"));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>(backgroundPath + Textures_pt.get<std::string>("TextureList.bg_4") + bg_ext, "shutterstock4"));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>(backgroundPath + Textures_pt.get<std::string>("TextureList.bg_5") + bg_ext, "shutterstock5"));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>(backgroundPath + Textures_pt.get<std::string>("TextureList.bg_6") + bg_ext, "shutterstock6"));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>(backgroundPath + Textures_pt.get<std::string>("TextureList.bg_7") + bg_ext, "shutterstock7"));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>(backgroundPath + Textures_pt.get<std::string>("TextureList.bg_8") + bg_ext, "shutterstock8"));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>(backgroundPath + Textures_pt.get<std::string>("TextureList.bg_9") + bg_ext, "shutterstock9"));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>(backgroundPath + Textures_pt.get<std::string>("TextureList.bg_10") + bg_ext, "shutterstock10"));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>(backgroundPath + Textures_pt.get<std::string>("TextureList.bg_11") + bg_ext, "shutterstock11"));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>(backgroundPath + Textures_pt.get<std::string>("TextureList.bg_12") + bg_ext, "shutterstock12"));
2018-05-31 11:47:18 +00:00
2018-05-24 11:44:58 +00:00
/*..galaxies and stars/planets Init..*/ // tmp
std::vector<int> galaxies;
2018-05-28 11:31:01 +00:00
galaxies.resize(1);
galaxies[0] = 3;
2018-07-14 10:49:31 +00:00
TextureNamesToLoad.push_back(std::pair<std::string, std::string>("galax_menu/matte_screen.png", "matte_screen"));
2018-05-24 11:44:58 +00:00
for (int i = 0; i < galaxies.size(); i++) {
2018-07-14 10:49:31 +00:00
TextureNamesToLoad.push_back(std::pair<std::string, std::string>("galax_menu/galaxies/galaxy_" + std::to_string(i) + ".png", "galaxy_" + std::to_string(i)));
2018-10-02 17:45:26 +00:00
//for (int j = 0; j < galaxies[i]; j++) {
// TextureNamesToLoad.push_back(std::pair<std::string, std::string>("galax_menu/planets/star_" + std::to_string(i) + "_" + std::to_string(j) + ".png", "star_" + std::to_string(i) + "_" + std::to_string(j)));
// TextureNamesToLoad.push_back(std::pair<std::string, std::string>("galax_menu/planets/star_" + std::to_string(i) + "_" + std::to_string(j) + "_hover" + ".png", "star_" + std::to_string(i) + "_" + std::to_string(j) + "_hover"));
//}
2018-05-24 11:44:58 +00:00
}
2018-05-22 12:00:30 +00:00
2018-05-29 11:44:55 +00:00
/*..buttons and level list plane textures..*/
TextureNamesToLoad.push_back(std::pair<std::string, std::string>("red_square.png", "red_square"));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>("black_square.png", "black_square"));
2018-05-22 12:00:30 +00:00
TextureNamesToLoad.push_back(std::pair<std::string, std::string>("game_end.png", "game_end"));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>(CONST_BLOCK_TEXTURE1 + ".png", CONST_BLOCK_TEXTURE1));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>(CONST_BLOCK_TEXTURE2 + ".png", CONST_BLOCK_TEXTURE2));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>(CONST_BLOCK_TEXTURE3 + ".png", CONST_BLOCK_TEXTURE3));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>(CONST_BONUS_GOTHROUGH_TEXTURE + ".png", CONST_BONUS_GOTHROUGH_TEXTURE));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>(CONST_BONUS_MULTIPLIER_TEXTURE + ".png", CONST_BONUS_MULTIPLIER_TEXTURE));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>(CONST_BONUS_FLOOR_TEXTURE + ".png", CONST_BONUS_FLOOR_TEXTURE));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>(CONST_BALL_TEXTURE + ".png", CONST_BALL_TEXTURE));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>(CONST_BALLGLOW_TEXTURE + ".png", CONST_BALLGLOW_TEXTURE));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>(CONST_WALL_LEFT_TEXTURE + ".png", CONST_WALL_LEFT_TEXTURE));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>(CONST_WALL_RIGHT_TEXTURE + ".png", CONST_WALL_RIGHT_TEXTURE));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>(CONST_WALL_UP_TEXTURE + ".png", CONST_WALL_UP_TEXTURE));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>(CONST_WALL_BONUS_TEXTURE + ".png", CONST_WALL_BONUS_TEXTURE));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>(CONST_REFLECTOR_TEXTURE + ".png", CONST_REFLECTOR_TEXTURE));
2018-10-18 08:24:17 +00:00
//TextureNamesToLoad.push_back(std::pair<std::string, std::string>(CONST_BACK_BTN_TEXTURE + ".png", CONST_BACK_BTN_TEXTURE));
//TextureNamesToLoad.push_back(std::pair<std::string, std::string>(CONST_SLIDE_UP_BTN_TEXTURE + ".png", CONST_SLIDE_UP_BTN_TEXTURE));
//TextureNamesToLoad.push_back(std::pair<std::string, std::string>(CONST_TAP_TO_CONTINUE_BTN_TEXTURE + ".png", CONST_TAP_TO_CONTINUE_BTN_TEXTURE));
2018-05-22 12:00:30 +00:00
TextureNamesToLoad.push_back(std::pair<std::string, std::string>(CONST_CREDITS_TEXTURE + ".png", CONST_CREDITS_TEXTURE));
#ifdef TARGET_IOS
ResourceManager->SoundManager.LoadMusicLooped("level1ogg.ogg");
#else
//ResourceManager->SoundManager.LoadMusic("level1ogg.ogg");
#endif
ResourceManager->FontManager.AddFont("droid_sans14", "droid_sans14_font_bitmap.png", "droid_sans14_font_charmap.txt");
ResourceManager->FontManager.PushFont("droid_sans14");
2018-05-22 12:00:30 +00:00
}
void TMyApplication::TryLoadSavedGame()
{
std::string fileName = GetFilePathUserData("progress.txt");
FILE* file = fopen(fileName.c_str(), "r");
if (file != NULL)
{
char line[100];
char* r;
r = fgets(line, 100, file);
if (r != NULL)
{
Menu.SetMenuItemCount(toint(r));
}
fclose(file);
}
}
void TMyApplication::TrySaveGame()
{
std::string fileName = GetFilePathUserData("progress.txt");
std::string s = tostr(Menu.GetMenuItemCount());
FILE* file = fopen(fileName.c_str(), "w");
if (file != NULL)
{
fputs(s.c_str(), file);
fflush(file);
fclose(file);
}
}
2018-10-17 03:59:08 +00:00
void TMyApplication::OnKeyPress(size_t key)
{
TGameLevel::XXX = !TGameLevel::XXX;
}
2018-05-22 12:00:30 +00:00
void TMyApplication::InnerDraw()
{
2018-07-22 11:36:06 +00:00
//glDisable(GL_DEPTH_TEST);
2018-05-22 12:00:30 +00:00
OnDrawSignal();
}
void TMyApplication::InnerUpdate(size_t dt)
{
if (GameState == CONST_GAMESTATE_PRELOADING)
{
StateTimer += dt/1000.f;
if (StateTimer >= 1.f)
{
StateTimer -= 1.f;
}
if (skipUpdateToUpdateScreen)
{
2018-12-01 09:47:26 +00:00
skipUpdateToUpdateScreen = false;
return;
}
LoadUserProgress();
ResourceManager->ShaderManager.AddShader("HoverableButtonShader", "shaders/gui_transparent.vertex", "shaders/hoverable-button.fragment");
ResourceManager->ShaderManager.AddShader("BlackAndWhiteShader", "shaders/gui_transparent_blackandwhite.vertex", "shaders/gui_transparent_blackandwhite.fragment");
ResourceManager->ShaderManager.AddShader("ColorShader", "shaders/color-shader.vertex", "shaders/color-shader.fragment");
ResourceManager->ShaderManager.AddShader("FrameShader", "shaders/frameshader_vertex.txt", "shaders/frameshader_fragment.txt");
ResourceManager->ShaderManager.AddShader("BrickShader", "shaders/brickshader_vertex.txt", "shaders/brickshader_fragment.txt");
ResourceManager->ShaderManager.AddShader(ParticleEffect::PARTICLE_SHADER, "shaders/particle-shader.vertex", "shaders/particle-shader.fragment");
ResourceManager->FrameManager.AddFrameRenderBuffer("LevelBuffer", 256, 256);
//OnDrawSignal.connect(boost::bind(&TGameLoading::Draw, boost::ref(GameLoading)));
Inited = true;
Application->SetGameLevelScreenScale();
//GameLevel.SetLevelScale();
EffectsInit();
// ------- UI -------
gamePauseMenuUi = SE::ReadJsonFile(ST::PathToResources + "gui_game_pause_menu.json");
galaxyMenuUi = SE::ReadJsonFile(ST::PathToResources + "gui_main_menu.json");
// TESTS of menu
if (Menu.GalaxMenu.InitGalaxyMenu("levels/galaxy_ptree.json")) {
std::cout << "ok" << std::endl;
2018-05-22 12:00:30 +00:00
}
else {
std::cout << "menu error" << std::endl;
2018-05-22 12:00:30 +00:00
}
LoadResources();
2018-12-01 09:47:26 +00:00
GameState = CONST_GAMESTATE_LOADING;
2018-12-01 09:47:26 +00:00
Menu.SetGameState(GameState);
2018-05-22 12:00:30 +00:00
}
else if (GameState == CONST_GAMESTATE_LOADING)
{
StateTimer += dt/1000.f;
if (StateTimer >= 1.f)
{
StateTimer -= 1.f;
}
if (TextureNamesToLoad.size() != 0)
{
ResourceManager->TexList.AddTexture(TextureNamesToLoad.begin()->first, TextureNamesToLoad.begin()->second);
2018-07-14 10:49:31 +00:00
2018-05-22 12:00:30 +00:00
TextureNamesToLoad.erase(TextureNamesToLoad.begin());
2018-07-14 10:49:31 +00:00
2018-05-22 12:00:30 +00:00
}
2018-07-22 20:56:46 +00:00
else
{
// Renderer->SwitchToFrameBuffer("LevelBuffer");
//
// Renderer->LoadIdentity();
//
// for (auto &star : Menu.GalaxMenu.galaxies[0].Stars)
// {
// for (auto level : star.selectionMenu.gameLevels)
// {
// level->DrawSnapshot("LevelBuffer", false);
//
// Renderer->PushShader("BlackAndWhiteShader");
//
// level->DrawSnapshot("LevelBuffer", true);
//
// Renderer->PopShader();
// }
// }
//
// Renderer->SwitchToScreen();
//
// Renderer->SetOrthoProjection();
2018-07-22 11:36:06 +00:00
2018-12-01 09:47:26 +00:00
RenderLevelSnapshots();
2018-07-22 20:56:46 +00:00
GameState = CONST_GAMESTATE_MENU;
2018-12-01 09:47:26 +00:00
Menu.SetGameState(GameState);
2018-07-22 20:56:46 +00:00
ApplySignalsToMenu();
2018-10-17 03:59:08 +00:00
LoadGalaxyUi();
Menu.GalaxMenu.UpdateGalaxyMenu(Renderer->GetMatrixWidth(), Renderer->GetMatrixHeight(), 0);
2018-07-22 20:56:46 +00:00
2018-05-22 12:00:30 +00:00
OnDrawSignal.connect(0, boost::bind(&TGameMenu::Draw, boost::ref(Menu)));
StateTimer = 0.f;
Loaded = true;
}
}
else if (GameState == CONST_GAMESTATE_LEVEL)
{
GameLevel->Update(dt);
2018-05-22 12:00:30 +00:00
EffectsUpdate(dt);
}
else if (GameState == CONST_GAMESTATE_MENU)
{
//*SE::Console << "4CONST_GAMESTATE_MENU";
Menu.Update(dt);
}
else if (GameState == CONST_GAMESTATE_FROM_MENU_TO_LEVEL)
{
GameLevel->Update(dt);
if (GameLevel->IsLoaded())
2018-05-22 12:00:30 +00:00
{
//*SE::Console << "5CONST_GAMESTATE_FROM_MENU_TO_LEVEL";
GameState = CONST_GAMESTATE_LEVEL;
2018-12-01 09:47:26 +00:00
Menu.SetGameState(GameState);
//OnDrawSignal.disconnect(boost::bind(&TGameMenu::Draw, boost::ref(Menu)));
2018-05-22 12:00:30 +00:00
//CONNECT SLOT
DisapplySignalsToMenu();
ApplySignalsToGame();
2018-10-18 08:24:17 +00:00
ResourceManager->newGuiManager.LoadFromConfig(gamePauseMenuUi);
auto pauseButton = (Button*)ResourceManager->newGuiManager.findWidgetByName("pauseButton").get();
auto resumeButton = (Button*)ResourceManager->newGuiManager.findWidgetByName("resumeButton").get();
auto exitButton = (Button*)ResourceManager->newGuiManager.findWidgetByName("exitButton").get();
auto gameFrame = (WidgetAncestor*)ResourceManager->newGuiManager.findWidgetByName("gameFrame").get();
auto pauseBackground = (WidgetAncestor*)ResourceManager->newGuiManager.findWidgetByName("buttonList").get();
2018-10-18 15:22:47 +00:00
float screenRatio = Renderer->GetMatrixWidth() / (float)Renderer->GetMatrixHeight();
float screenRatioToFixedRatio = screenRatio / 1.6f;
float marginLeft;
if (screenRatioToFixedRatio > 1.f)
{
marginLeft = (Renderer->GetMatrixWidth() - Renderer->GetMatrixWidth() / screenRatioToFixedRatio) / 2.f;
}
else
{
marginLeft = 0;
}
pauseBackground->setMargin(0, 0, marginLeft, 0);
2018-10-18 08:24:17 +00:00
pauseButton->onMouseDownSignal.connect([this, gameFrame, pauseBackground](Vector2f, int) {
GameLevel->SetPause();
gameFrame->setVisibility(false);
pauseBackground->setVisibility(true);
});
resumeButton->onMouseDownSignal.connect([this, gameFrame, pauseBackground](Vector2f, int) {
GameLevel->ReleasePause();
gameFrame->setVisibility(true);
pauseBackground->setVisibility(false);
});
pauseBackground->onMoveSignal.connect([this](Vector2f, Vector2f shift, int) {
if (shift.norm() > 15)
{
GameLevel->TryGoToMenu();
}
});
2018-05-22 12:00:30 +00:00
}
}
else if (GameState == CONST_GAMESTATE_FROM_MENU_TO_CREDITS)
{
Menu.Update(dt);
GameCredits.Update(dt);
StateTimer -= dt;
if (StateTimer <= 0.f)
{
GameState = CONST_GAMESTATE_CREDITS;
2018-12-01 09:47:26 +00:00
Menu.SetGameState(GameState);
2018-05-22 12:00:30 +00:00
OnDrawSignal.disconnect(boost::bind(&TGameMenu::Draw, boost::ref(Menu)));
ApplySignalsToCredits();
StateTimer = 0.f;
}
}
else if (GameState == CONST_GAMESTATE_CREDITS)
{
GameCredits.Update(dt);
}
else if (GameState == CONST_GAMESTATE_FROM_CREDITS_TO_MENU)
{
Menu.Update(dt);
GameCredits.Update(dt);
StateTimer -= dt;
if (StateTimer <= 0.f)
{
GameState = CONST_GAMESTATE_MENU;
StateTimer = 0.f;
ApplySignalsToMenu();
OnDrawSignal.disconnect(boost::bind(&TGameCredits::Draw, boost::ref(GameCredits)));
}
}
}
2018-07-22 20:56:46 +00:00
void TMyApplication::LoadGalaxyUi()
{
ResourceManager->newGuiManager.Clear();
2018-10-18 08:24:17 +00:00
ResourceManager->newGuiManager.LoadFromConfig(galaxyMenuUi);
2018-07-22 20:56:46 +00:00
std::shared_ptr<WidgetAncestor> modal_background = ResourceManager->newGuiManager.findWidgetByName("modal_background");
modal_background->onMouseUpSignal.connect(
2018-10-04 01:55:37 +00:00
[modal_background, this](Vector2f v, int i) {
PerformInMainThreadAsync([modal_background, this]() {
modal_background->setVisibility(false);
2018-12-01 09:47:26 +00:00
Menu.GalaxMenu.planetHoverIndex = -1;
Menu.GalaxMenu.setTimerActivity(false);
});
2018-07-22 20:56:46 +00:00
});
}
void TMyApplication::SetupGalaxyUi(size_t levelStar)
{
std::shared_ptr<WidgetAncestor> modal_background = ResourceManager->newGuiManager.findWidgetByName("modal_background");
std::shared_ptr<WidgetAncestor> row2 = ResourceManager->newGuiManager.findWidgetByName("row2");
std::shared_ptr<WidgetAncestor> row3 = ResourceManager->newGuiManager.findWidgetByName("row3");
std::shared_ptr<WidgetAncestor> row4 = ResourceManager->newGuiManager.findWidgetByName("row4");
size_t levelCount = this->Menu.GalaxMenu.galaxies[0].Stars[levelStar].selectionMenu.gameLevels.size();
2018-10-04 01:55:37 +00:00
ResourceManager->newGuiManager.startEditing();
modal_background->setVisibility(true);
2018-07-22 20:56:46 +00:00
if (levelCount <= 3)
{
row2->setVisibility(false);
}
else
{
row2->setVisibility(true);
}
if (levelCount <= 6)
{
row3->setVisibility(false);
}
else
{
row3->setVisibility(true);
}
if (levelCount <= 9)
{
row4->setVisibility(false);
}
else
{
row4->setVisibility(true);
}
std::string levelStarString = boost::lexical_cast<std::string>(levelStar);
for (size_t levelIndex = 0; levelIndex < 12; levelIndex++)
{
std::string levelIndexString = boost::lexical_cast<std::string>(levelIndex);
std::shared_ptr<WidgetAncestor> currentLevelButton = ResourceManager->newGuiManager.findWidgetByName("button" + levelIndexString);
currentLevelButton->onMouseUpSignal.disconnect_all_slots();
if (levelIndex < levelCount)
{
std::string levelName = this->Menu.GalaxMenu.galaxies[0].Stars[levelStar].selectionMenu.gameLevels[levelIndex]->levelName;
if (IsLevelOpened(levelStar, levelIndex))
{
currentLevelButton->setVisibility(true);
currentLevelButton->setBackground(ResourceManager->newGuiManager.layoutBackgroundFromConfigValue(levelName + "_prerender"));
2018-07-22 20:56:46 +00:00
currentLevelButton->onMouseUpSignal.connect(
[this, modal_background, levelStar, levelIndex](Vector2f v, int i) {
PerformInMainThreadAsync([this, modal_background, levelStar, levelIndex]() {
modal_background->setVisibility(false);
2018-12-01 09:47:26 +00:00
Menu.GalaxMenu.planetHoverIndex = -1;
2018-07-22 20:56:46 +00:00
std::shared_ptr<TGameLevel> lvl = this->Menu.GalaxMenu.galaxies[0].Stars[levelStar].selectionMenu.gameLevels[levelIndex];
lvl->ReloadLevel();
this->GoFromMenuToGame(lvl);
});
2018-07-22 20:56:46 +00:00
});
}
else
{
2018-10-04 01:55:37 +00:00
currentLevelButton->setVisibility(true);
2018-07-22 20:56:46 +00:00
currentLevelButton->setBackground(levelName + "_prerender_blackandwhite");
}
//currentLevelButton->OnMouseUp(Vector2f(), 0);
}
else
{
currentLevelButton->setVisibility(false);
}
}
2018-10-04 01:55:37 +00:00
ResourceManager->newGuiManager.finishEditing();
2018-07-22 20:56:46 +00:00
}
void TMyApplication::GoFromMenuToGame(std::shared_ptr<TGameLevel> level)
2018-05-22 12:00:30 +00:00
{
//#ifndef TARGET_IOS
// ResourceManager->SoundManager.PlayMusicLooped("level1ogg.ogg");
//#endif
GameLevel = level;
2018-06-09 19:51:32 +00:00
GameLevel->SetLoading();
2018-05-22 12:00:30 +00:00
GameState = CONST_GAMESTATE_FROM_MENU_TO_LEVEL;
2018-12-01 09:47:26 +00:00
Menu.SetGameState(GameState);
OnDrawSignal.connect(1, boost::bind(&TGameLevel::Draw, boost::ref(*GameLevel)));
2018-12-01 09:47:26 +00:00
Menu.GalaxMenu.resetValuesOnGameStart();
2018-05-22 12:00:30 +00:00
DisapplySignalsToMenu();
}
void TMyApplication::GoFromGameToMenu()
{
//#ifndef TARGET_IOS
// ResourceManager->SoundManager.StopMusic("level1ogg.ogg");
//#endif
2018-10-18 08:24:17 +00:00
PerformInMainThreadAsync([this]() {
TrySaveGame();
DisapplySignalsToGame();
//ignoreTapUp = true;
2018-10-18 08:24:17 +00:00
LoadGalaxyUi();
Menu.GalaxMenu.UpdateGalaxyMenu(Renderer->GetMatrixWidth(), Renderer->GetMatrixHeight(), 0);
ApplySignalsToMenu();
GameState = CONST_GAMESTATE_MENU;
2018-12-01 09:47:26 +00:00
Menu.SetGameState(GameState);
2018-10-18 08:24:17 +00:00
OnDrawSignal.disconnect(boost::bind(&TGameLevel::Draw, boost::ref(GameLevel)));
});
2018-05-22 12:00:30 +00:00
}
void TMyApplication::GoFromMenuToCredits()
{
GameState = CONST_GAMESTATE_FROM_MENU_TO_CREDITS;
2018-12-01 09:47:26 +00:00
Menu.SetGameState(GameState);
2018-05-22 12:00:30 +00:00
StateTimer = CONST_CREDITS_SHOW_TIME;
GameCredits.StartAppear();
OnDrawSignal.connect(1, boost::bind(&TGameCredits::Draw, boost::ref(GameCredits)));
DisapplySignalsToMenu();
}
void TMyApplication::GoFromCreditsToMenu()
{
GameState = CONST_GAMESTATE_FROM_CREDITS_TO_MENU;
2018-12-01 09:47:26 +00:00
Menu.SetGameState(GameState);
2018-05-22 12:00:30 +00:00
StateTimer = CONST_CREDITS_SHOW_TIME;
GameCredits.StartDisappear();
OnDrawSignal.connect(0, boost::bind(&TGameMenu::Draw, boost::ref(Menu)));
DisapplySignalsToCredits();
}
void TMyApplication::MarkSetGameLevelPause()
{
2018-12-01 09:47:26 +00:00
//OnDrawSignal.connect(0, boost::bind(&TGameMenu::Draw, boost::ref(Menu)));
2018-05-22 12:00:30 +00:00
}
void TMyApplication::MarkReleaseGameLevelPause()
{
2018-12-01 09:47:26 +00:00
//OnDrawSignal.disconnect(boost::bind(&TGameMenu::Draw, boost::ref(Menu)));
2018-05-22 12:00:30 +00:00
}
void TMyApplication::OpenNextLevel()
{
Menu.OpenNextLevel();
}
bool TMyApplication::IsLoaded()
{
return Loaded;
}
bool TMyApplication::IsInited()
{
return Inited;
}
void TMyApplication::SetGameLevelScreenScale()
{
if ((((float)Renderer->GetScreenWidth())/((float)Renderer->GetScreenHeight())) >= levelScreenRatio)
{
levelScreenHeight = (float)Renderer->GetScreenHeight();
levelScreenWidth = levelScreenHeight * levelScreenRatio;
} else
{
levelScreenWidth = (float)Renderer->GetScreenWidth();
levelScreenHeight = levelScreenWidth / levelScreenRatio;
}
}
float TMyApplication::GetGameLevelScreenWidth()
{
return levelScreenWidth;
}
float TMyApplication::GetGameLevelScreenHeight()
{
return levelScreenHeight;
}
void TMyApplication::InnerOnMouseDown(TMouseState& mouseState) {
2018-07-22 20:56:46 +00:00
2018-10-18 08:24:17 +00:00
ignoreTapUp = false;
2018-05-22 12:00:30 +00:00
OnTapDownSignal(Vector2f(mouseState.X, ((Renderer->GetScreenHeight()) - mouseState.Y))); // Temp mouse down action for WIN32
}
void TMyApplication::InnerOnMouseMove(TMouseState& mouseState) {
}
2018-07-22 20:56:46 +00:00
bool TMyApplication::IsLevelOpened(int levelStar, int levelIndex)
{
2018-10-04 21:34:44 +00:00
return levelStar < currentStar || levelStar == currentStar && levelIndex <= currentLevel;
2018-07-22 20:56:46 +00:00
}
2018-05-22 12:00:30 +00:00
void TMyApplication::EffectsInit() {
boost::property_tree::ptree JSONsource;
2018-07-14 11:53:59 +00:00
boost::property_tree::ptree JSONconfig = SE::ReadJsonFile(ST::PathToResources + "config.json");
2018-05-22 12:00:30 +00:00
std::string effectJSON;
// LEFT
effectJSON = JSONconfig.get<std::string>("lefteffect");
2018-07-14 10:49:31 +00:00
//boost::property_tree::json_parser::read_json(ST::PathToResources + effectJSON, JSONsource);
JSONsource = SE::ReadJsonFile(ST::PathToResources + effectJSON);
2018-05-22 12:00:30 +00:00
lsparkler.parse(JSONsource); // parse JSON
lsparkler.load(); // load textures
// RIGHT
effectJSON = JSONconfig.get<std::string>("righteffect");
2018-07-14 10:49:31 +00:00
JSONsource = SE::ReadJsonFile(ST::PathToResources + effectJSON);
2018-05-22 12:00:30 +00:00
rsparkler.parse(JSONsource);
rsparkler.load();
// TOP
effectJSON = JSONconfig.get<std::string>("topeffect");
2018-07-14 10:49:31 +00:00
JSONsource = SE::ReadJsonFile(ST::PathToResources + effectJSON);
2018-05-22 12:00:30 +00:00
tsparkler.parse(JSONsource);
tsparkler.load();
// BOTTOM
effectJSON = JSONconfig.get<std::string>("boteffect");
2018-07-14 10:49:31 +00:00
JSONsource = SE::ReadJsonFile(ST::PathToResources + effectJSON);
2018-05-22 12:00:30 +00:00
bsparkler.parse(JSONsource);
bsparkler.load();
// Level finish
effectJSON = JSONconfig.get<std::string>("lvlFinish");
2018-07-14 10:49:31 +00:00
JSONsource = SE::ReadJsonFile(ST::PathToResources + effectJSON);
2018-05-22 12:00:30 +00:00
lvlFirework.parse(JSONsource);
lvlFirework.load();
float width = Renderer->GetScreenWidth();
float height = Renderer->GetScreenHeight();
lsparkler.setCoords({ width / 2, height / 2, 0 });
rsparkler.setCoords({ width / 2, height / 2, 0 });
tsparkler.setCoords({ width / 2, height / 2, 0 });
bsparkler.setCoords({ width / 2, height / 2, 0 });
lvlFirework.setCoords({ width / 2, 0, 0 });
}
void TMyApplication::EffectsUpdate(size_t dt) {
lsparkler.update(dt / 1000.f);
rsparkler.update(dt / 1000.f);
tsparkler.update(dt / 1000.f);
bsparkler.update(dt / 1000.f);
lvlFirework.update(dt / 1000.f);
}
void TMyApplication::EffectsDraw() {
2018-10-17 03:59:08 +00:00
float screenRatio = Renderer->GetMatrixWidth() / (float)Renderer->GetMatrixHeight();
float screenRatioToFixedRatio = screenRatio / 1.6f;
Vector2f offset;
float scale;
if (screenRatioToFixedRatio > 1.f)
{
offset[0] = (Renderer->GetMatrixWidth() - Renderer->GetMatrixWidth() / screenRatioToFixedRatio) / 2.f;
offset[1] = 0;
scale = Renderer->GetMatrixHeight() / 480.f;
}
else
{
offset[0] = 0;
offset[1] = 0;// (screenHeight - screenHeight * screenRatioToFixedRatio) / 2.f;
scale = Renderer->GetMatrixWidth() / 768.f;
}
Renderer->PushMatrix();
Renderer->TranslateMatrix(Vector3f(offset[0], offset[1], 0));
Renderer->ScaleMatrix(scale);
//glPushAttrib(GL_ALL_ATTRIB_BITS);
2018-10-17 03:59:08 +00:00
glDisable(GL_DEPTH_TEST);
glEnable(GL_BLEND);
2018-05-22 12:00:30 +00:00
lsparkler.draw();
rsparkler.draw();
tsparkler.draw();
bsparkler.draw();
lvlFirework.draw();
2018-10-17 03:59:08 +00:00
glEnable(GL_DEPTH_TEST);
glEnable(GL_BLEND);
2018-10-17 03:59:08 +00:00
Renderer->PopMatrix();
//glPopAttrib();
2018-05-22 12:00:30 +00:00
}
void TMyApplication::hitSpark(std::string direct,Vector2f Pos) {
2018-10-17 03:59:08 +00:00
2018-05-22 12:00:30 +00:00
if (direct == "left") {
lsparkler.setCoords({ Pos(0),Pos(1),0 });
lsparkler.stopSpawn();
lsparkler.startSpawn();
}
if (direct == "right") {
rsparkler.setCoords({ Pos(0),Pos(1),0 });
rsparkler.stopSpawn();
rsparkler.startSpawn();
}
if (direct == "up") {
tsparkler.setCoords({ Pos(0),Pos(1),0 });
tsparkler.stopSpawn();
tsparkler.startSpawn();
}
if (direct == "down") {
bsparkler.setCoords({ Pos(0),Pos(1),0 });
bsparkler.stopSpawn();
bsparkler.startSpawn();
}
}
void TMyApplication::fireworkEffect() {
lvlFirework.stopSpawn();
lvlFirework.startSpawn();
}