void SceneManagerCMPlay::Render() { SceneManagerGameplay::Render(); Mtx44 perspective; perspective.SetToPerspective(45.0f, 4.0f / 3.0f, 0.1f, 10000.0f); //perspective.SetToOrtho(-80, 80, -60, 60, -1000, 1000); projectionStack.LoadMatrix(perspective); // Set up the view viewStack.LoadIdentity(); viewStack.LookAt(tpCamera.getPosition().x, tpCamera.getPosition().y, tpCamera.getPosition().z, tpCamera.getTarget().x, tpCamera.getTarget().y, tpCamera.getTarget().z, tpCamera.getUp().x, tpCamera.getUp().y, tpCamera.getUp().z); // Model matrix : an identity matrix (model will be at the origin) modelStack.LoadIdentity(); RenderLight(); RenderBG(); RenderStaticObject(); RenderMobileObject(); }
int main(int argc, char *argv[]) { SDL_Init(SDL_INIT_VIDEO); displayWindow = SDL_CreateWindow("Final Project", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 640, 480, SDL_WINDOW_OPENGL); SDL_GLContext context = SDL_GL_CreateContext(displayWindow); SDL_GL_MakeCurrent(displayWindow, context); #ifdef _WINDOWS glewInit(); #endif ShaderProgram* program = new ShaderProgram(RESOURCE_FOLDER"vertex_textured.glsl", RESOURCE_FOLDER"fragment_textured.glsl"); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glViewport(0, 0, 640, 480); Mix_OpenAudio(44100, MIX_DEFAULT_FORMAT, 2, 4096); Matrix modelMatrix; Matrix textMatrix; Matrix viewMatrix; Matrix projectionMatrix; projectionMatrix.setOrthoProjection(-10.0f, 10.0f, -7.5f, 7.5f, -1.0f, 1.0f); std::vector<Entity> entities; int lastWinner; // Load player sprites GLint paddleBlue = LoadTextureClamp(RESOURCE_FOLDER"assets\\paddleBlu.png"); GLint paddleRed = LoadTextureClamp(RESOURCE_FOLDER"assets\\paddleRed.png"); // Load item sprites GLint coinCopperSprite = LoadTextureClamp(RESOURCE_FOLDER"assets\\coinCopper.png"); GLint coinSilverSprite = LoadTextureClamp(RESOURCE_FOLDER"assets\\coinSilver.png"); GLint coinGoldSprite = LoadTextureClamp(RESOURCE_FOLDER"assets\\coinGold.png"); GLint coinPlatinumSprite = LoadTextureClamp(RESOURCE_FOLDER"assets\\coinPlatinum.png"); GLint starCopperSprite = LoadTextureClamp(RESOURCE_FOLDER"assets\\starCopper.png"); GLint starSilverSprite = LoadTextureClamp(RESOURCE_FOLDER"assets\\starSilver.png"); GLint starGoldSprite = LoadTextureClamp(RESOURCE_FOLDER"assets\\starGold.png"); GLint starPlatinumSprite = LoadTextureClamp(RESOURCE_FOLDER"assets\\starPlatinum.png"); // Load font GLuint fontSheet = LoadTextureClamp(RESOURCE_FOLDER"assets\\font1.png"); // Load level bg GLint mainBG = LoadTextureRepeat(RESOURCE_FOLDER"assets\\bg_main.png"); GLint levelBG = LoadTextureRepeat(RESOURCE_FOLDER"assets\\bg_level.png"); GLint overBG = LoadTextureRepeat(RESOURCE_FOLDER"assets\\bg_over.png"); // Load music Mix_Music *music1; music1 = Mix_LoadMUS(RESOURCE_FOLDER"assets\\Im Free.mp3"); Mix_Music *music2; music2 = Mix_LoadMUS(RESOURCE_FOLDER"assets\\Lagrima.mp3"); Mix_Music *music3; music3 = Mix_LoadMUS(RESOURCE_FOLDER"assets\\The Old Song.mp3"); Mix_Music *music4; music4 = Mix_LoadMUS(RESOURCE_FOLDER"assets\\FASE.mp3"); // Load sounds Mix_Chunk* itemHit; itemHit = Mix_LoadWAV(RESOURCE_FOLDER"hit.wav"); Mix_Chunk* buttonPress; buttonPress = Mix_LoadWAV(RESOURCE_FOLDER"Menu Selection Click.wav"); // Initialize players Entity playerBlue(ENTITY_PLAYER, paddleBlue, fontSheet, SDL_SCANCODE_A, SDL_SCANCODE_D, -5.0f); Entity playerRed(ENTITY_PLAYER, paddleRed, fontSheet, SDL_SCANCODE_LEFT, SDL_SCANCODE_RIGHT, 5.0f); Entity coinCopper(ENTITY_ITEM, coinCopperSprite, fontSheet, 10, buttonPress); Entity coinSilver(ENTITY_ITEM, coinSilverSprite, fontSheet, 25, buttonPress); Entity coinGold(ENTITY_ITEM, coinGoldSprite, fontSheet, 50, buttonPress); Entity coinPlatinum(ENTITY_ITEM, coinPlatinumSprite, fontSheet, 100, buttonPress); Entity starCopper(ENTITY_ITEM, starCopperSprite, fontSheet, 100, buttonPress); Entity starSilver(ENTITY_ITEM, starSilverSprite, fontSheet, 250, buttonPress); Entity starGold(ENTITY_ITEM, starGoldSprite, fontSheet, 500, buttonPress); Entity starPlatinum(ENTITY_ITEM, starPlatinumSprite, fontSheet, 1000, buttonPress); entities.push_back(playerBlue); entities.push_back(playerRed); entities.push_back(coinCopper); entities.push_back(coinSilver); entities.push_back(coinGold); entities.push_back(coinPlatinum); entities.push_back(starCopper); entities.push_back(starSilver); entities.push_back(starGold); entities.push_back(starPlatinum); Level level1(LEVEL_FREEPLAY, fontSheet, levelBG, music3, entities); Level level2(LEVEL_CLOCKED, fontSheet, levelBG, music4, entities); Level level3(LEVEL_SCORED, fontSheet, levelBG, music1, entities); Mix_PlayMusic(music3, -1); SDL_Event event; bool done = false; while (!done) { while (SDL_PollEvent(&event)) { if (event.type == SDL_QUIT || event.type == SDL_WINDOWEVENT_CLOSE) { done = true; } } glClear(GL_COLOR_BUFFER_BIT); program->setModelMatrix(modelMatrix); program->setViewMatrix(viewMatrix); program->setProjectionMatrix(projectionMatrix); glUseProgram(program->programID); switch (state) { case MAIN_MENU: RenderBG(program, mainBG); if (keys[SDL_SCANCODE_1]) { // Press 1 to get into game level state = GAME_LEVEL_1; Mix_PlayChannel(-1, buttonPress, 0); Mix_PlayMusic(level1.getBgm(), -1); } if (keys[SDL_SCANCODE_2]) { // Press 2 to get into game level state = GAME_LEVEL_2; Mix_PlayChannel(-1, buttonPress, 0); Mix_PlayMusic(level2.getBgm(), -1); } if (keys[SDL_SCANCODE_3]) { // Press 3 to get into game level state = GAME_LEVEL_3; Mix_PlayChannel(-1, buttonPress, 0); Mix_PlayMusic(level3.getBgm(), -1); } if (keys[SDL_SCANCODE_ESCAPE]){ done = true; } break; case GAME_LEVEL_1: if (!level1.isComplete()){ level1.Update(); level1.FixedUpdate(); level1.Render(program); level1.RenderText(program); } else { lastWinner = level1.getWinner(); state = MAIN_MENU; level1.reset(); Mix_PlayMusic(music3, -1); } break; case GAME_LEVEL_2: if (!level2.isComplete()){ level2.Update(); level2.FixedUpdate(); level2.Render(program); level2.RenderText(program); } else { lastWinner = level2.getWinner(); state = GAME_OVER; level2.reset(); Mix_PlayMusic(music3, -1); } break; case GAME_LEVEL_3: if (!level3.isComplete()){ level3.Update(); level3.FixedUpdate(); level3.Render(program); level3.RenderText(program); } else { lastWinner = level3.getWinner(); state = GAME_OVER; level3.reset(); Mix_PlayMusic(music3, -1); } break; case GAME_OVER: RenderBG(program, overBG); program->setModelMatrix(textMatrix); textMatrix.identity(); textMatrix.Translate(-7.5f, 0.0f, 0.0f); if (lastWinner == 0) DrawText(program, fontSheet, "Blue Player wins!", 1.0f, 0.005f); else if (lastWinner == 1) DrawText(program, fontSheet, "Red Player wins!", 1.0f, 0.005f); if (keys[SDL_SCANCODE_RETURN]) { level1.reset(); level2.reset(); level3.reset(); state = MAIN_MENU; Mix_PlayChannel(-1, buttonPress, 0); } else if (keys[SDL_SCANCODE_ESCAPE]) { done = true; } break; } SDL_GL_SwapWindow(displayWindow); } SDL_Quit(); return 0; }