From a9f6a9be2b9334cdf051ec0f804b0844e108ccfe Mon Sep 17 00:00:00 2001 From: Emil Kabirov Date: Wed, 17 Oct 2018 08:59:08 +0500 Subject: [PATCH] working with screen resizing --- assets/levels/galaxy_ptree.json | 32 ++-- game/galaxy_menu.cpp | 55 ++++--- game/galaxy_menu.h | 2 + game/gamecode.cpp | 281 ++++++++++++++++++++------------ game/gamecode.h | 2 + game/main_code.cpp | 63 +++++-- game/main_code.h | 4 + game/menucode.cpp | 2 +- 8 files changed, 284 insertions(+), 157 deletions(-) diff --git a/assets/levels/galaxy_ptree.json b/assets/levels/galaxy_ptree.json index 8cf5fab..1e4bd58 100755 --- a/assets/levels/galaxy_ptree.json +++ b/assets/levels/galaxy_ptree.json @@ -7,7 +7,7 @@ "y_coord": 0.0 }, "texture": "galaxy_0.png", - "scale": 1.2, + "scale": 1, "Stars": [ { "name": "star2", @@ -157,7 +157,7 @@ "y_coord": 0.55 }, "texture": "levels/star3/star-flare-3.png", - "scale": 0.3, + "scale": 0.15, "levels": [ { "name": "levels/star3/star3_level1" @@ -204,7 +204,7 @@ "y_coord": 0.0 }, "texture": "levels/star4/star-flare-4.png", - "scale": 0.3, + "scale": 0.15, "levels": [ { "name": "levels/star4/star4_level1" @@ -247,11 +247,11 @@ { "name": "star_0_5", "position": { - "x_coord": 0.5, + "x_coord": 0.6, "y_coord": -0.25 }, "texture": "levels/star5/star-flare-5.png", - "scale": 0.3, + "scale": 0.15, "levels": [ { "name": "levels/star5/star5_level1" @@ -298,7 +298,7 @@ "y_coord": -0.55 }, "texture": "levels/star6/star-flare-6.png", - "scale": 0.3, + "scale": 0.15, "levels": [ { "name": "levels/star6/star6_level1" @@ -345,7 +345,7 @@ "y_coord": -0.5 }, "texture": "levels/star7/star-flare-7.png", - "scale": 0.3, + "scale": 0.15, "levels": [ { "name": "levels/star7/star7_level1" @@ -392,7 +392,7 @@ "y_coord": -0.26 }, "texture": "levels/star8/star-flare-8.png", - "scale": 0.3, + "scale": 0.15, "levels": [ { "name": "levels/star8/star8_level1" @@ -439,7 +439,7 @@ "y_coord": 0.15 }, "texture": "levels/star9/star-flare-9.png", - "scale": 0.3, + "scale": 0.15, "levels": [ { "name": "levels/star9/star9_level1" @@ -486,7 +486,7 @@ "y_coord": 0.35 }, "texture": "levels/star10/star-flare-10.png", - "scale": 0.3, + "scale": 0.15, "levels": [ { "name": "levels/star10/star10_level1" @@ -533,7 +533,7 @@ "y_coord": 0.09 }, "texture": "levels/star11/star-flare-11.png", - "scale": 0.3, + "scale": 0.15, "levels": [ { "name": "levels/star11/star11_level1" @@ -580,7 +580,7 @@ "y_coord": -0.05 }, "texture": "levels/star12/star-flare-12.png", - "scale": 0.3, + "scale": 0.15, "levels": [ { "name": "levels/star12/star12_level1" @@ -627,7 +627,7 @@ "y_coord": -0.14 }, "texture": "levels/star13/star-flare-13.png", - "scale": 0.3, + "scale": 0.15, "levels": [ { "name": "levels/star13/star13_level1" @@ -674,7 +674,7 @@ "y_coord": -0.0 }, "texture": "levels/star14/star-flare-14.png", - "scale": 0.3, + "scale": 0.15, "levels": [ { "name": "levels/star14/star14_level1" @@ -721,7 +721,7 @@ "y_coord": 0.3 }, "texture": "levels/star15/star-flare-15.png", - "scale": 0.3, + "scale": 0.15, "levels": [ { "name": "levels/star15/star15_level1" @@ -735,7 +735,7 @@ "y_coord": 0.07 }, "texture": "levels/star16/star-flare-16.png", - "scale": 0.3, + "scale": 0.15, "levels": [ { "name": "levels/star16/star16_level1" diff --git a/game/galaxy_menu.cpp b/game/galaxy_menu.cpp index 70598b4..76a03bb 100755 --- a/game/galaxy_menu.cpp +++ b/game/galaxy_menu.cpp @@ -92,6 +92,15 @@ bool GalaxyMenu::InitGalaxyMenu(std::string config_json, float scale) { void GalaxyMenu::UpdateGalaxyMenu(float s_width, float s_height, size_t dt) { /*..Reset..*/ + + if (s_width == currentWindowWidth && s_height == currentWindowHeight) + { + return; + } + + currentWindowWidth = s_width; + currentWindowHeight = s_height; + galaxies_params.clear(); stars_params.clear(); @@ -111,6 +120,7 @@ void GalaxyMenu::UpdateGalaxyMenu(float s_width, float s_height, size_t dt) { );*/ /*..Menu geometry..*/ + xDimension = menuScale * gameScreenWidth; yDimension = menuScale * gameScreenHeight; Eigen::Vector2f currentMenuPos = Eigen::Vector2f(gameScreenCenter(0) + (gameScreenWidth/2/*relative to the screen x-dimension*/)*(menuPosition(0) - menu_offset(0)), gameScreenCenter(1) + (gameScreenHeight/2/*relative to the screen y-dimension*/)*(menuPosition(1) - menu_offset(1))); @@ -158,34 +168,24 @@ void GalaxyMenu::UpdateGalaxyMenu(float s_width, float s_height, size_t dt) { } -Eigen::Vector2f GalaxyMenu::textureSizeNormalize(Eigen::Vector2f texVec, int t_type) { - float tex_ratio = texVec(0)/texVec(1); +Eigen::Vector2f GalaxyMenu::textureSizeNormalize(Eigen::Vector2f texVec, int t_type) +{ float x_dim, y_dim; - float Xmax; // Max normalized texture width - float Xmin; - float Ymax; // Max normalized texture height - float Ymin; - if (t_type == 0) { - Xmax = SE::Renderer->GetScreenWidth(); - Xmin = Xmax; - Ymax = SE::Renderer->GetScreenHeight(); - Ymin = Ymax; - } - else { // temp for star textures - Xmax = (((float)SE::Renderer->GetScreenWidth())/2); - Xmin = Xmax; - Ymax = (((float)SE::Renderer->GetScreenHeight())/2); - Ymin = Ymax; - } - if (texVec(0) > texVec(1)) { - x_dim = val_clamp(texVec(0), Xmin, Xmax); + float tex_ratio = texVec(0) / texVec(1); + + float screenRatio = SE::Renderer->GetScreenWidth() / (float)SE::Renderer->GetScreenHeight(); + + if (tex_ratio > screenRatio) + { + y_dim = SE::Renderer->GetScreenHeight(); + x_dim = y_dim * tex_ratio; + } + else + { + x_dim = SE::Renderer->GetScreenWidth(); y_dim = x_dim / tex_ratio; } - else { - y_dim = val_clamp(texVec(1), Ymin, Ymax); - x_dim = y_dim * tex_ratio; - } return Eigen::Vector2f(x_dim, y_dim); } @@ -201,6 +201,10 @@ float GalaxyMenu::val_clamp(float val, float min, float max) { void GalaxyMenu::DrawGalaxyMenu() { + Renderer->PushOrthoProjection(); + Renderer->PushMatrix(); + Renderer->LoadIdentity(); + for (int i = 0; i < galaxies_params.size(); i++) { glBindTexture(GL_TEXTURE_2D, SE::ResourceManager->TexList["galaxy_" + std::to_string(i)]); @@ -246,6 +250,9 @@ void GalaxyMenu::DrawGalaxyMenu() { } + Renderer->PopMatrix(); + Renderer->PopProjectionMatrix(); + } void GalaxyMenu::InteractWithGalaxy(size_t dt) { diff --git a/game/galaxy_menu.h b/game/galaxy_menu.h index 57195a0..20af098 100755 --- a/game/galaxy_menu.h +++ b/game/galaxy_menu.h @@ -36,6 +36,8 @@ public: // ::#Params#:: Eigen::Vector2f menuPosition = Eigen::Vector2f(0.f, 0.f); // relative to the screen center(0.f,0.f means center) (not const!!) float menuScale = 1.f; // (not const!!) + int currentWindowWidth; + int currentWindowHeight; float xDimension; float yDimension; float anchorSize = 1.f; diff --git a/game/gamecode.cpp b/game/gamecode.cpp index b72f785..dc4734c 100755 --- a/game/gamecode.cpp +++ b/game/gamecode.cpp @@ -89,12 +89,28 @@ void TBrick::SetInvisible() void TBrick::TryDrawAppear(int ipos, int jpos, int screenWidth) { + 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; + } Vector2f centerPos = GetPosFrom(ipos, jpos, screenWidth); - float LEVEL_VIEWPORT_WIDTH = Application->GetGameLevelScreenWidth(); - float LEVEL_VIEWPORT_HEIGHT = Application->GetGameLevelScreenHeight(); + //float LEVEL_VIEWPORT_WIDTH = Application->GetGameLevelScreenWidth(); + //float LEVEL_VIEWPORT_HEIGHT = Application->GetGameLevelScreenHeight(); - Vector2f blockHalfSize = Vector2f(0.5f*CONST_BRICK_WIDTH * (LEVEL_VIEWPORT_WIDTH/480.f), 0.5f*CONST_BRICK_HEIGHT * (LEVEL_VIEWPORT_HEIGHT/320.f)); + Vector2f blockHalfSize = Vector2f(0.5f*CONST_BRICK_WIDTH * (768/480.f), 0.5f*CONST_BRICK_HEIGHT * (480/320.f)); std::string texName; if (Locked == 2) @@ -109,6 +125,9 @@ void TBrick::TryDrawAppear(int ipos, int jpos, int screenWidth) { texName = CONST_BLOCK_TEXTURE1; } + + //Vector2f offset = { (Renderer->GetMatrixWidth() - 768) / 2.f, + // (Renderer->GetMatrixHeight() - 480) / 2.f }; if (State == CONST_BRICKSTATE_DISAPPEAR) { @@ -116,7 +135,7 @@ void TBrick::TryDrawAppear(int ipos, int jpos, int screenWidth) RenderUniform1f("Transparency", StateTimer/CONST_BRICK_DISAPPEAR_TIME); RenderUniform4fv("BrickColor", (Color.data())); glBindTexture(GL_TEXTURE_2D,ResourceManager->TexList[texName]); - Renderer->DrawRect(centerPos - blockHalfSize, centerPos + blockHalfSize); + Renderer->DrawRect((centerPos - blockHalfSize) * scale + offset, (centerPos + blockHalfSize) * scale + offset); } else if (State == CONST_BRICKSTATE_APPEAR) { @@ -124,7 +143,7 @@ void TBrick::TryDrawAppear(int ipos, int jpos, int screenWidth) RenderUniform1f("Transparency", 1.f - StateTimer/CONST_BRICK_APPEAR_TIME); RenderUniform4fv("BrickColor", Color.data()); glBindTexture(GL_TEXTURE_2D,ResourceManager->TexList[texName]); - Renderer->DrawRect(centerPos - blockHalfSize, centerPos + blockHalfSize); + Renderer->DrawRect((centerPos - blockHalfSize) * scale + offset, (centerPos + blockHalfSize) * scale + offset); } } @@ -160,14 +179,15 @@ Vector4f TBrick::GetColor() Vector2f TBrick::GetPosFrom(int ipos, int jpos, int screenWidth) { - float LEVEL_VIEWPORT_WIDTH = Application->GetGameLevelScreenWidth(); - float LEVEL_VIEWPORT_HEIGHT = Application->GetGameLevelScreenHeight(); + //float LEVEL_VIEWPORT_WIDTH = Application->GetGameLevelScreenWidth(); + //float LEVEL_VIEWPORT_HEIGHT = Application->GetGameLevelScreenHeight(); - const Vector2f BorderShift(CONST_BRICK_SHIFT_X * (LEVEL_VIEWPORT_WIDTH/480.f), CONST_BRICK_SHIFT_Y * (LEVEL_VIEWPORT_HEIGHT/320.f)); + const Vector2f BorderShift(CONST_BRICK_SHIFT_X * (768/480.f), CONST_BRICK_SHIFT_Y * (480 /320.f)); - Vector2f outlineShift = Vector2f(((screenWidth - LEVEL_VIEWPORT_WIDTH)*0.5f),0.f); + //Vector2f outlineShift = Vector2f(((screenWidth - LEVEL_VIEWPORT_WIDTH)*0.5f),0.f); - return outlineShift+BorderShift+Vector2f(CONST_BRICK_WIDTH*(LEVEL_VIEWPORT_WIDTH/480.f)*ipos + 0.5f*CONST_BRICK_WIDTH*(LEVEL_VIEWPORT_WIDTH/480.f), LEVEL_VIEWPORT_HEIGHT - CONST_BRICK_HEIGHT*(LEVEL_VIEWPORT_HEIGHT/320.f)*(jpos)-0.5f*CONST_BRICK_HEIGHT*(LEVEL_VIEWPORT_HEIGHT/320.f)); + return BorderShift+Vector2f(CONST_BRICK_WIDTH*(768 /480.f)*ipos + 0.5f*CONST_BRICK_WIDTH*(768 /480.f), + 480 - CONST_BRICK_HEIGHT*(480 /320.f)*(jpos)-0.5f*CONST_BRICK_HEIGHT*(480.f /320.f)); } void TBrick::Disappear() @@ -257,6 +277,22 @@ int TBonusFalling::GetType() void TBonusFalling::Draw() { + 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; + } Vector2f BonusHalfSize = Vector2f(16.f, 16.f); @@ -266,7 +302,7 @@ void TBonusFalling::Draw() RenderUniform1f("Transparency", transparency); glBindTexture(GL_TEXTURE_2D,ResourceManager->TexList[TexName]); - Renderer->DrawRect(Pos - BonusHalfSize, Pos + BonusHalfSize); + Renderer->DrawRect((Pos - BonusHalfSize) * scale + offset, (Pos + BonusHalfSize) * scale + offset); } @@ -310,12 +346,11 @@ void TBall::Go() { // Velocity = Normalize(Vector2f(2.f, 1.f)); - Velocity = Vector2f(2.f, 1.f).normalized(); + Velocity = { 0, 1 }; // Vector2f(2.f, 1.f).normalized(); } void TBall::ReflectToLeft() { - Application->hitSpark("left",Pos); if (Velocity(0) > 0.f) @@ -326,7 +361,6 @@ void TBall::ReflectToLeft() void TBall::ReflectToRight() { - Application->hitSpark("right", Pos); if (Velocity(0) < 0.f) @@ -337,7 +371,6 @@ void TBall::ReflectToRight() void TBall::ReflectToUp() { - Application->hitSpark("up", Pos); if (Velocity(1) < 0.f) @@ -348,7 +381,6 @@ void TBall::ReflectToUp() void TBall::ReflectToDown() { - Application->hitSpark("down", Pos); if (Velocity(1) > 0.f) @@ -367,11 +399,11 @@ float ReflectorPlaneFunction(float shift) Something like this */ - float LEVEL_VIEWPORT_WIDTH = Application->GetGameLevelScreenWidth(); - float LEVEL_VIEWPORT_HEIGHT = Application->GetGameLevelScreenHeight(); - float hRW = (CONST_REFLECTOR_WIDTH*LEVEL_VIEWPORT_WIDTH / 700.f)*0.5f; // Half Reflector width + //float LEVEL_VIEWPORT_WIDTH = Application->GetGameLevelScreenWidth(); + //float LEVEL_VIEWPORT_HEIGHT = Application->GetGameLevelScreenHeight(); + float hRW = (CONST_REFLECTOR_WIDTH*768 / 700.f)*0.5f; // Half Reflector width float hRPW = hRW*0.594f; // Half Reflector plane width - float cRH = CONST_REFLECTOR_HEIGHT*LEVEL_VIEWPORT_HEIGHT / 480.f; // Current Reflector Height + float cRH = CONST_REFLECTOR_HEIGHT*480 / 480.f; // Current Reflector Height if (shift >= -(hRW) && shift < -(hRPW)) { float t = (shift+ hRW)/cRH; @@ -390,9 +422,9 @@ float ReflectorPlaneFunction(float shift) void TBall::TryReflectOnReflector(Vector2f refPos) { - float LEVEL_VIEWPORT_HEIGHT = Application->GetGameLevelScreenHeight(); + //float LEVEL_VIEWPORT_HEIGHT = Application->GetGameLevelScreenHeight(); const float reflectionShiftY = 13.f; - const float reflectionMaxHeight = CONST_REFLECTOR_HEIGHT*LEVEL_VIEWPORT_HEIGHT/480.f; + const float reflectionMaxHeight = CONST_REFLECTOR_HEIGHT*480/480.f; @@ -437,7 +469,8 @@ void TBall::Update(size_t dt) //=========================================== //=========================================== //=========================================== - + +bool TGameLevel::XXX = true; TGameLevel::TGameLevel(int levelStar, int levelIndex) { @@ -480,8 +513,8 @@ int TGameLevel::getLevelIndex() void TGameLevel::ReloadBlockInstansingList(int screenWidth) { - float LEVEL_VIEWPORT_WIDTH = Application->GetGameLevelScreenWidth(); - float LEVEL_VIEWPORT_HEIGHT = Application->GetGameLevelScreenHeight(); + //float LEVEL_VIEWPORT_WIDTH = Application->GetGameLevelScreenWidth(); + //float LEVEL_VIEWPORT_HEIGHT = Application->GetGameLevelScreenHeight(); std::map ConstTextureBlockMap = boost::assign::map_list_of (0,CONST_BLOCK_TEXTURE1) (1,CONST_BLOCK_TEXTURE2) (2,CONST_BLOCK_TEXTURE3); @@ -515,8 +548,8 @@ void TGameLevel::ReloadBlockInstansingList(int screenWidth) itr--; } - Vector2f posFrom = BlockMatrix[i][j].GetPosFrom(i,j, screenWidth) + Vector2f(-0.5f*CONST_BRICK_WIDTH*(LEVEL_VIEWPORT_WIDTH/480.f), -0.5f*CONST_BRICK_HEIGHT*(LEVEL_VIEWPORT_HEIGHT/320.f)); - Vector2f posTo = BlockMatrix[i][j].GetPosFrom(i,j, screenWidth) + Vector2f(+0.5f*CONST_BRICK_WIDTH*(LEVEL_VIEWPORT_WIDTH/480.f), +0.5f*CONST_BRICK_HEIGHT*(LEVEL_VIEWPORT_HEIGHT/320.f)); + Vector2f posFrom = BlockMatrix[i][j].GetPosFrom(i,j, screenWidth) + Vector2f(-0.5f*CONST_BRICK_WIDTH*(768/480.f), -0.5f*CONST_BRICK_HEIGHT*(480/320.f)); + Vector2f posTo = BlockMatrix[i][j].GetPosFrom(i,j, screenWidth) + Vector2f(+0.5f*CONST_BRICK_WIDTH*(768 /480.f), +0.5f*CONST_BRICK_HEIGHT*(480 /320.f)); itr->second.Data += MakeDataTriangleList(posFrom, posTo); @@ -534,10 +567,10 @@ void TGameLevel::ReloadBlockInstansingList(int screenWidth) Vector2f TGameLevel::GetBlock(const Vector2f& pos) { - float LEVEL_VIEWPORT_WIDTH = Application->GetGameLevelScreenWidth(); - float LEVEL_VIEWPORT_HEIGHT = Application->GetGameLevelScreenHeight(); - int x = static_cast((pos(0) - CONST_BRICK_SHIFT_X*(LEVEL_VIEWPORT_WIDTH /480.f) - ((Renderer->GetScreenWidth() - LEVEL_VIEWPORT_WIDTH)*0.5f)) / (CONST_BRICK_WIDTH*(LEVEL_VIEWPORT_WIDTH /480.f))); - int y = static_cast((LEVEL_VIEWPORT_HEIGHT + CONST_BRICK_SHIFT_Y*(LEVEL_VIEWPORT_HEIGHT/320.f) - pos(1)) / (CONST_BRICK_HEIGHT*(LEVEL_VIEWPORT_HEIGHT/320.f))); + //float LEVEL_VIEWPORT_WIDTH = Application->GetGameLevelScreenWidth(); + //float LEVEL_VIEWPORT_HEIGHT = Application->GetGameLevelScreenHeight(); + int x = static_cast((pos(0) - CONST_BRICK_SHIFT_X*(768 /480.f)) / (CONST_BRICK_WIDTH*(768 /480.f))); + int y = static_cast((480 + CONST_BRICK_SHIFT_Y*(480/320.f) - pos(1)) / (CONST_BRICK_HEIGHT*(480/320.f))); if (x < 0) @@ -692,7 +725,7 @@ void TGameLevel::ReloadLevel() rowColorIterator++; } - ReloadBlockInstansingList(Renderer->GetScreenWidth()); + ReloadBlockInstansingList(Application->GetGameLevelScreenHeight()); } @@ -722,7 +755,7 @@ void TGameLevel::SetStandBy() void TGameLevel::SetLoading() { - InitLevel(Renderer->GetScreenWidth(), Renderer->GetScreenHeight()); + InitLevel(Application->GetGameLevelScreenWidth(), Application->GetGameLevelScreenHeight()); StateTimer = CONST_TIMER_LOADING; LevelState = CONST_LEVELSTATE_LOADING; } @@ -730,10 +763,10 @@ void TGameLevel::SetLoading() void TGameLevel::InitLevel(int screenWidth, int screenHeight) { - float LEVEL_VIEWPORT_WIDTH = Application->GetGameLevelScreenWidth(); - float LEVEL_VIEWPORT_HEIGHT = Application->GetGameLevelScreenHeight(); - ReflectorPos = Vector2f(screenWidth*0.5f, 16* LEVEL_VIEWPORT_HEIGHT/320.f + 13 * LEVEL_VIEWPORT_HEIGHT / 320.f); - Vector2f ballPos = Vector2f(screenWidth*0.5f, 80* LEVEL_VIEWPORT_HEIGHT/320.f); + //float LEVEL_VIEWPORT_WIDTH = Application->GetGameLevelScreenWidth(); + //float LEVEL_VIEWPORT_HEIGHT = Application->GetGameLevelScreenHeight(); + ReflectorPos = { 0.5f, 43.5 / Application->GetGameLevelScreenHeight() }; // Vector2f(screenWidth*0.5f, 16 * LEVEL_VIEWPORT_HEIGHT / 320.f + 13 * LEVEL_VIEWPORT_HEIGHT / 320.f); + Vector2f ballPos = Vector2f(screenWidth*0.5f, 80* 480/320.f); BallList.clear(); BallList.push_back(TBall(ballPos, Vector2f(0, 0), BallColor)); @@ -834,11 +867,14 @@ void TGameLevel::InnerDraw(int screenWidth, int screenHeight, int matrixWidth, i CheckGlError(); return; } - + + Renderer->PushProjectionMatrix(screenWidth, screenHeight); + Renderer->PushMatrix(); + Renderer->LoadIdentity(); if (LevelState == CONST_LEVELSTATE_LOADING) { - Renderer->PushMatrix(); + float scale = 1.f - 0.5f*StateTimer/CONST_TIMER_LOADING; if (scale < 0.5f) scale = 0.5f; @@ -846,13 +882,13 @@ void TGameLevel::InnerDraw(int screenWidth, int screenHeight, int matrixWidth, i if (scale > 1.f) scale = 1.f; - Renderer->TranslateMatrix(Vector3f(matrixWidth * 0.5f, matrixHeight * 0.5f, 0)); - Renderer->ScaleMatrix(scale); - Renderer->TranslateMatrix(-Vector3f(matrixWidth * 0.5f, matrixHeight * 0.5f, 0)); - glBindTexture(GL_TEXTURE_2D,ResourceManager->TexList[levelName + "_prerendered"]); + glBindTexture(GL_TEXTURE_2D,ResourceManager->TexList[levelName + "_prerender"]); Renderer->DrawRect(Vector2f(xlOffset, ylOffset), Vector2f(xlOffset+tSW, ylOffset+tSH), Vector2f (0.f,0.f), Vector2f(1.f,1.f)); // Game Screen Scale - Renderer->PopMatrix(); CheckGlError(); + + Renderer->PopMatrix(); + Renderer->PopProjectionMatrix(); + return; } @@ -869,20 +905,24 @@ void TGameLevel::InnerDraw(int screenWidth, int screenHeight, int matrixWidth, i { //See also below (same method) - Renderer->PushMatrix(); - Renderer->TranslateMatrix(Vector3f(matrixWidth * 0.5f, matrixHeight * 0.5f, 0)); - Renderer->ScaleMatrix(OutScale); - Renderer->TranslateMatrix(-Vector3f(matrixWidth * 0.5f, matrixHeight * 0.5f, 0)); + // Renderer->PushMatrix(); + //Renderer->TranslateMatrix(Vector3f(matrixWidth * 0.5f, matrixHeight * 0.5f, 0)); + // Renderer->ScaleMatrix(OutScale); + //Renderer->TranslateMatrix(-Vector3f(matrixWidth * 0.5f, matrixHeight * 0.5f, 0)); DrawBuffer(); if (mustShowButtons) { DrawPauseButtons(); } - Renderer->PopMatrix(); + //Renderer->PopMatrix(); CheckGlError(); drawOutline(screenWidth, screenHeight); + + Renderer->PopMatrix(); + Renderer->PopProjectionMatrix(); + return; } @@ -926,19 +966,42 @@ void TGameLevel::InnerDraw(int screenWidth, int screenHeight, int matrixWidth, i std::list::iterator iBall; - + + + float screenRatio = screenWidth / (float)screenHeight; + float screenRatioToFixedRatio = screenRatio / 1.6f; + Vector2f offset; + float scale; + if (screenRatioToFixedRatio > 1.f) + { + offset[0] = (screenWidth - screenWidth / screenRatioToFixedRatio) / 2.f; + offset[1] = 0; + scale = matrixHeight / 480.f; + } + else + { + offset[0] = 0; + offset[1] = 0;// (screenHeight - screenHeight * screenRatioToFixedRatio) / 2.f; + scale = matrixWidth / 768.f; + } + Renderer->PushShader("BrickShader"); - - - for (int i=0; iGetGameLevelScreenWidth())*0.5f), 0.f); + Renderer->PushMatrix(); + Renderer->TranslateMatrix(Vector3f(offset[0], offset[1], 0)); + Renderer->ScaleMatrix(scale); std::list>::iterator colorBlockIterator; for (colorBlockIterator = BlockInstansingList.ColorBlockList.begin(); colorBlockIterator != BlockInstansingList.ColorBlockList.end(); ++colorBlockIterator) @@ -957,28 +1020,32 @@ void TGameLevel::InnerDraw(int screenWidth, int screenHeight, int matrixWidth, i Renderer->DrawTriangleList(colorBlockIterator->second); } - - - std::list::iterator iBonus; - - for (iBonus = BonusFallingList.begin(); iBonus != BonusFallingList.end(); ++iBonus) - { - iBonus->Draw(); - } - + + DrawBallInstancingList(blackAndWhite); + + Renderer->PopMatrix(); + + + std::list::iterator iBonus; + + for (iBonus = BonusFallingList.begin(); iBonus != BonusFallingList.end(); ++iBonus) + { + iBonus->Draw(); + } + Application->EffectsDraw(); - - - - DrawBallInstancingList(blackAndWhite); Renderer->PopShader(); - + + //float LEVEL_VIEWPORT_WIDTH = Application->GetGameLevelScreenWidth(); + //float LEVEL_VIEWPORT_HEIGHT = Application->GetGameLevelScreenHeight(); glBindTexture(GL_TEXTURE_2D,ResourceManager->TexList[CONST_REFLECTOR_TEXTURE]); float xRW = 210.f * tSW/700.f; // x Reflector Width float yRH = 45.f * tSH/480.f; // y Reflector Height - Renderer->DrawRect(Vector2f(-xRW*0.5f, -yRH*0.5f)+ReflectorPos, Vector2f(xRW*0.5f, yRH*0.5f)+ReflectorPos, Vector2f(0.f, 0.f), Vector2f(1.f, 1.f)); + Vector2f matrixSize = ReflectorPos.cwiseProduct(Vector2f(Application->GetGameLevelScreenWidth(), Application->GetGameLevelScreenHeight())); + Renderer->DrawRect(Vector2f(-xRW * 0.5f, -yRH * 0.5f) + matrixSize + offset, + Vector2f(xRW*0.5f, yRH*0.5f) + matrixSize + offset, Vector2f(0.f, 0.f), Vector2f(1.f, 1.f)); const Vector2f wallUpPos1(xlOffset, tSH-ylOffset-uWTW); const Vector2f wallUpPos2(tSW + xlOffset, tSH-ylOffset); @@ -1048,7 +1115,9 @@ void TGameLevel::InnerDraw(int screenWidth, int screenHeight, int matrixWidth, i - + + Renderer->PopMatrix(); + Renderer->PopProjectionMatrix(); CheckGlError(); } @@ -1056,11 +1125,14 @@ void TGameLevel::InnerDraw(int screenWidth, int screenHeight, int matrixWidth, i void TGameLevel::DrawPauseButtons() //continue from { - glBindTexture(GL_TEXTURE_2D,ResourceManager->TexList[CONST_SLIDE_UP_BTN_TEXTURE]); - Renderer->DrawRect(Vector2f(-128.f, -64.f)+CONST_SLIDE_UP_POS, Vector2f(128.f, 64.f)+CONST_SLIDE_UP_POS); + float x_levelScreenCenter = Renderer->GetScreenWidth()*0.5f; + float y_levelScreenCenter = Renderer->GetScreenHeight()*0.5f; + + glBindTexture(GL_TEXTURE_2D,ResourceManager->TexList[CONST_SLIDE_UP_BTN_TEXTURE]); + Renderer->DrawRect(Vector2f(x_levelScreenCenter - 128.f, y_levelScreenCenter - 64.f) + CONST_SLIDE_UP_POS, Vector2f(x_levelScreenCenter + 128.f, y_levelScreenCenter + 64.f) + CONST_SLIDE_UP_POS); - glBindTexture(GL_TEXTURE_2D,ResourceManager->TexList[CONST_TAP_TO_CONTINUE_BTN_TEXTURE]); - Renderer->DrawRect(Vector2f(-128.f, -128.f)+CONST_TAP_TO_CONTINUE_POS, Vector2f(128.f, 128.f)+CONST_TAP_TO_CONTINUE_POS); + glBindTexture(GL_TEXTURE_2D,ResourceManager->TexList[CONST_TAP_TO_CONTINUE_BTN_TEXTURE]); + Renderer->DrawRect(Vector2f(x_levelScreenCenter - 128.f, y_levelScreenCenter - 128.f) + CONST_TAP_TO_CONTINUE_POS, Vector2f(x_levelScreenCenter + 128.f, y_levelScreenCenter + 128.f) + CONST_TAP_TO_CONTINUE_POS); } @@ -1162,7 +1234,6 @@ bool TGameLevel::IsPaused() void TGameLevel::Update(size_t dt) { - if (LevelState == CONST_LEVELSTATE_NODRAW) { return; @@ -1259,8 +1330,8 @@ void TGameLevel::Update(size_t dt) { iBonus->Update(dt); - if ((fabs(ReflectorPos(0) - iBonus->GetPos()(0))GetPos()(1))GetPos()(0))GetPos()(1))GetType(); iBonus = BonusFallingList.erase(iBonus); @@ -1555,8 +1626,8 @@ void TGameLevel::UpdateBallList(size_t dt) std::list::iterator iBall; - float LEVEL_VIEWOPRT_WIDTH = Application->GetGameLevelScreenWidth(); - float LEVEL_VIEWPORT_HEIGHT = Application->GetGameLevelScreenHeight(); + //float LEVEL_VIEWOPRT_WIDTH = Application->GetGameLevelScreenWidth(); + //float LEVEL_VIEWPORT_HEIGHT = Application->GetGameLevelScreenHeight(); bool mustReloadBalls = false; @@ -1602,33 +1673,34 @@ void TGameLevel::UpdateBallList(size_t dt) Vector2f ballPos = iBall->GetPos(); - float xWO = (Renderer->GetScreenWidth()-LEVEL_VIEWOPRT_WIDTH)*0.5f; // x Wall Offest - float yWO = (Renderer->GetScreenHeight()-LEVEL_VIEWPORT_HEIGHT)*0.5f; // y Wall Offset + // float xWO = (Renderer->GetScreenWidth()-LEVEL_VIEWOPRT_WIDTH)*0.5f; // x Wall Offest + //float yWO = (Renderer->GetScreenHeight()-LEVEL_VIEWPORT_HEIGHT)*0.5f; // y Wall Offset - if (ballPos(0) > (xWO + LEVEL_VIEWOPRT_WIDTH)-15.f*(LEVEL_VIEWOPRT_WIDTH/480.f)) + if (ballPos(0) > (768)-15.f*(768 /480.f)) { iBall->ReflectToLeft(); } - if (ballPos(0) < xWO + 15.f) + if (ballPos(0) < 15.f) { iBall->ReflectToRight(); } - if (ballPos(1) > (yWO+LEVEL_VIEWPORT_HEIGHT)-16.f * (LEVEL_VIEWPORT_HEIGHT/320.f)) + if (ballPos(1) > (480)-16.f * (480 /320.f)) { iBall->ReflectToDown(); } if (BonusFloorTimer > 0.f) { - if (ballPos(1) < yWO+13.0f*(LEVEL_VIEWPORT_HEIGHT/320.f)) + if (ballPos(1) < 13.0f*(480 /320.f)) { iBall->ReflectToUp(); } } - iBall->TryReflectOnReflector(ReflectorPos); + Vector2f matrixSize = { 768, 480 }; + iBall->TryReflectOnReflector(ReflectorPos.cwiseProduct(matrixSize)); Vector2f ipos = GetBlock(ballPos); if (!(ipos == iBall->BallInBlock)) @@ -1703,7 +1775,7 @@ void TGameLevel::UpdateBallList(size_t dt) if (blockListChanged) { - ReloadBlockInstansingList(Renderer->GetScreenWidth()); + ReloadBlockInstansingList(Application->GetGameLevelScreenWidth()); } if (mustReloadBalls) @@ -1745,10 +1817,15 @@ void TGameLevel::MultiplyBalls(Vector2f pos, Vector2f velocity) void TGameLevel::OnTapDown(Vector2f pos) { + float xOffset = (Renderer->GetMatrixWidth() - Application->GetGameLevelScreenWidth()) / 2.f; + float yOffset = (Renderer->GetMatrixHeight() - Application->GetGameLevelScreenHeight()) / 2.f; + + float xPos = pos(0) - xOffset; + float yPos = pos(1) - yOffset; if (LevelState == CONST_LEVELSTATE_STANDBY) { - if (TapInBackBtnArea(pos)) + if (TapInBackBtnArea({ xPos, yPos })) { SetPause(); PrevLevelStateIsStandby = true; @@ -1761,22 +1838,20 @@ void TGameLevel::OnTapDown(Vector2f pos) } } else if (LevelState == CONST_LEVELSTATE_PLAYING) - { - - - if (TapInBackBtnArea(pos)) + { + if (TapInBackBtnArea({ xPos, yPos })) { SetPause(); } - else if (fabs(ReflectorPos(0) - pos(0))>64.f) + else// if (fabs(ReflectorPos(0) - xPos / Application->GetGameLevelScreenWidth()) > 64.f / Application->GetGameLevelScreenWidth()) { - ReflectorPos(0) = pos(0); + ReflectorPos(0) = xPos / Application->GetGameLevelScreenWidth(); } } else if (LevelState == CONST_LEVELSTATE_PAUSE) { - if (pos(1) > 128.f) + if (yPos > 128.f) { ReleasePause(); } @@ -1803,7 +1878,7 @@ void TGameLevel::OnScroll(Vector2f shift) const float CONST_SCROLL_SCALE = 1.1f; if (LevelState == CONST_LEVELSTATE_PLAYING || LevelState == CONST_LEVELSTATE_STANDBY) { - ReflectorPos(0) -= CONST_SCROLL_SCALE*shift(0); + ReflectorPos(0) -= CONST_SCROLL_SCALE * shift(0) / Application->GetGameLevelScreenWidth(); } else if (LevelState == CONST_LEVELSTATE_PAUSE) { diff --git a/game/gamecode.h b/game/gamecode.h index cce5dd3..0cdd06a 100755 --- a/game/gamecode.h +++ b/game/gamecode.h @@ -195,6 +195,8 @@ protected: public: TGameLevel(int levelStar, int levelIndex); ~TGameLevel(); + + static bool XXX; void FillWithFile(const std::string& filename); //void setBackground(const std::string& assignedShutterstock); diff --git a/game/main_code.cpp b/game/main_code.cpp index fb33341..3f4157b 100755 --- a/game/main_code.cpp +++ b/game/main_code.cpp @@ -129,7 +129,12 @@ void TMyApplication::SaveUserProgress(int levelStar, int levelIndex) SaveFileToAndroid("user_progress.json", ss.str()); #endif } - + +void TMyApplication::InnerChangeWidthHeight(int screenWidth, int screenHeight, float matrixWidth, float matrixHeight) +{ + Menu.GalaxMenu.UpdateGalaxyMenu(matrixWidth, matrixHeight, 0); + SetGameLevelScreenScale(); +} void TMyApplication::InnerInit() { @@ -154,10 +159,8 @@ void TMyApplication::InnerInit() LoadUserProgress(); - if (Console != NULL) - { - *Console<<"APP INIT\n"; - } + GetConsole() <<"APP INIT\n"; + srand (static_cast(time(NULL))); GameState = CONST_GAMESTATE_PRELOADING; StateTimer = 0.f; @@ -221,10 +224,8 @@ void TMyApplication::InnerDeinit() { Inited = false; Loaded = false; - if (Console != NULL) - { - *Console<<"APP DEINIT\n"; - } + + GetConsole() << "APP DEINIT\n"; OnTapUpSignal.disconnect(boost::bind(&TGameLevel::OnTapUp, boost::ref(GameLevel), _1)); OnTapUpSignal.disconnect(boost::bind(&TGameMenu::OnTapUp, boost::ref(Menu), _1)); @@ -474,7 +475,10 @@ void TMyApplication::TrySaveGame() } - +void TMyApplication::OnKeyPress(size_t key) +{ + TGameLevel::XXX = !TGameLevel::XXX; +} void TMyApplication::InnerDraw() { @@ -519,8 +523,6 @@ void TMyApplication::InnerUpdate(size_t dt) Renderer->SwitchToFrameBuffer("LevelBuffer"); - Renderer->SetProjectionMatrix(768, 480); - Renderer->LoadIdentity(); for (auto &star : Menu.GalaxMenu.galaxies[0].Stars) @@ -544,7 +546,9 @@ void TMyApplication::InnerUpdate(size_t dt) GameState = CONST_GAMESTATE_MENU; ApplySignalsToMenu(); - LoadGalaxyUi(); + LoadGalaxyUi(); + + Menu.GalaxMenu.UpdateGalaxyMenu(Renderer->GetMatrixWidth(), Renderer->GetMatrixHeight(), 0); OnDrawSignal.connect(0, boost::bind(&TGameMenu::Draw, boost::ref(Menu))); StateTimer = 0.f; @@ -895,14 +899,47 @@ void TMyApplication::EffectsUpdate(size_t dt) { lvlFirework.update(dt / 1000.f); } void TMyApplication::EffectsDraw() { + + 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); + + glDisable(GL_DEPTH_TEST); + glEnable(GL_BLEND); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + lsparkler.draw(); rsparkler.draw(); tsparkler.draw(); bsparkler.draw(); lvlFirework.draw(); + + Renderer->PopMatrix(); + + glPopAttrib(); } void TMyApplication::hitSpark(std::string direct,Vector2f Pos) { + if (direct == "left") { lsparkler.setCoords({ Pos(0),Pos(1),0 }); lsparkler.stopSpawn(); diff --git a/game/main_code.h b/game/main_code.h index 4cc3afc..bb8aefe 100755 --- a/game/main_code.h +++ b/game/main_code.h @@ -141,6 +141,10 @@ public: void LoadUserProgress(); void SaveUserProgress(int levelStar, int levelIndex); + void InnerChangeWidthHeight(int screenWidth, int screenHeight, float matrixWidth, float matrixHeight) override; + + + virtual void OnKeyPress(size_t key); virtual void InnerInit(); virtual void InnerDeinit(); diff --git a/game/menucode.cpp b/game/menucode.cpp index 396dce6..d5faf46 100755 --- a/game/menucode.cpp +++ b/game/menucode.cpp @@ -90,7 +90,7 @@ void TGameMenu::Update(size_t dt) #ifdef GALAX_MENU_UPDATE /*..Galaxy Menu..*/ GalaxMenu.InteractWithGalaxy(dt); - GalaxMenu.UpdateGalaxyMenu((float)SE::Renderer->GetScreenWidth(), (float)SE::Renderer->GetScreenHeight(), dt); + //GalaxMenu.UpdateGalaxyMenu((float)SE::Renderer->GetScreenWidth(), (float)SE::Renderer->GetScreenHeight(), dt); #else if (HoldToTap) return;