void App::drawTitle(){ GLuint fontTexture = LoadTexture("font1.png"); int titleArray[14] = { 83, 112, 97, 99, 101, 32, 73, 110, 118, 97, 100, 101, 114, 115 }; //Space Invaders for (int i : titleArray){ SheetSprite charSprite = decodeFromIndex(i, 16, 16, fontTexture); charSprite.draw(-216 + 32 * i, 0, 1); } }
void GameApp::displayText(const string s, float x, float y, float w, float h, float spacing){ shader->setViewMatrix(Matrix()); Matrix model; model.Translate(x, y, 0); SheetSprite temp; viewMatrix.identity(); shader->setViewMatrix(viewMatrix); for (size_t i = 0; i < s.length(); i++){ temp = *sprites[s.substr(i, 1)]; temp.width = w; temp.height = h; shader->setModelMatrix(model); temp.draw(shader); model.Translate(w + spacing, 0, 0); } }
Entity::Entity(SheetSprite sprite, float x, float y, bool isStatic, float scale):sprite(sprite), x(x), y(y), staticEntity(isStatic), scale(scale){ height = sprite.getHeight(); width = sprite.getWidth(); velocity_x = 0; velocity_y = 0; acceleration_x = 0; acceleration_y = -10.0f; //Gravity top = y + height / 2; bottom = y - height / 2; left = x - width / 2; right = x + width / 2; friction_x = FRICTION; friction_y = FRICTION; topCollide = false; bottomCollide = false; leftCollide = false; rightCollide = false; }
void Entity::Draw(ShaderProgram* program, Matrix& gameMatrix, SheetSprite& sprite) { sprite.Draw(program, gameMatrix, x, y); }
void renderGame(){ SDL_Init(SDL_INIT_VIDEO); displayWindow = SDL_CreateWindow("My Game", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 640, 360, SDL_WINDOW_OPENGL); SDL_GLContext context = SDL_GL_CreateContext(displayWindow); SDL_GL_MakeCurrent(displayWindow, context); SDL_Event event; bool done = false; #ifdef _WINDOWS glewInit(); #endif Matrix projectionMatrix; Matrix modelMatrix; Matrix viewMatrix; ShaderProgram program(RESOURCE_FOLDER"vertex_textured.glsl", RESOURCE_FOLDER"fragment_textured.glsl"); const Uint8 *keys = SDL_GetKeyboardState(NULL); GLuint spriteSheetTexture = LoadTexture("sheet.png"); Entity enemySprite = Entity(spriteSheetTexture, (425.0f / 1024.0f), (384.0f / 1024.0f), (93.0f / 1024.0f), (84.0f / 1024.0f), .3, 0, 0); Entity enemySprite2 = Entity(spriteSheetTexture, (425.0f / 1024.0f), (384.0f / 1024.0f), (93.0f / 1024.0f), (84.0f / 1024.0f), .3, 0, 0); Entity enemySprite3 = Entity(spriteSheetTexture, (425.0f / 1024.0f), (384.0f / 1024.0f), (93.0f / 1024.0f), (84.0f / 1024.0f), .3, 0, 0); Entity enemySprite4 = Entity(spriteSheetTexture, (425.0f / 1024.0f), (384.0f / 1024.0f), (93.0f / 1024.0f), (84.0f / 1024.0f), .3, 0, 0); Entity enemySprite5 = Entity(spriteSheetTexture, (425.0f / 1024.0f), (384.0f / 1024.0f), (93.0f / 1024.0f), (84.0f / 1024.0f), .3, 0, 0); SheetSprite mySprite = SheetSprite(spriteSheetTexture, (224.0f / 1024.0f), (832.0f / 1024.0f), (99.0f / 1024.0f), (75.0f / 1024.0f), .3); Bullet myBullet = Bullet(spriteSheetTexture, (856.0f / 1024.0f), (421.0f / 1024.0f), (9.0f / 1024.0f), (51.0f / 1024.0f), .3); vector<Entity> enemies; enemies.push_back(enemySprite); enemies.push_back(enemySprite2); enemies.push_back(enemySprite3); enemies.push_back(enemySprite4); enemies.push_back(enemySprite5); projectionMatrix.setOrthoProjection(-3.55, 3.55, -2.0f, 2.0f, -1.0f, 1.0f); glUseProgram(program.programID); float lastFrameTicks = 0.0f; double movement = 0.0; double move = 0.0; double enemyMovement = 0.0; bool canShoot = true; bool turn = 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.setProjectionMatrix(projectionMatrix); program.setViewMatrix(viewMatrix); glBindTexture(GL_TEXTURE_2D, spriteSheetTexture); float ticks = (float)SDL_GetTicks() / 1000.0f; float elapsed = ticks - lastFrameTicks; lastFrameTicks = ticks; if ((enemyMovement * 0.1) > 1){ turn = true; } if ((enemyMovement * 0.1) < -0.75){ turn = false; } if (turn == false){ enemyMovement = enemyMovement + elapsed; } else if (turn == true){ enemyMovement = enemyMovement - elapsed; } if (keys[SDL_SCANCODE_A] && myBullet.isShot == false) { move -= elapsed; } else if (keys[SDL_SCANCODE_D] && myBullet.isShot == false) { move += elapsed; } if (keys[SDL_SCANCODE_S]){ myBullet.isShot = true; } myBullet.x = move; myBullet.y = movement; for (int i = 0; i < enemies.size(); i++) { if (enemies[i].isAlive == true){ enemies[i].initPos = (float)i; enemies[i].movement = (float)(enemyMovement * 0.1); enemies[i].Draw(&program); } if (myBullet.x >= enemies[i].GetX1() && myBullet.x <= enemies[i].GetX2()){ if (myBullet.y >= enemies[i].GetY()){ enemies[i].isAlive = false; } } } if (myBullet.isShot == false){ program.setModelMatrix(mySprite.matrix); movement = 0.0; } modelMatrix.identity(); mySprite.matrix.identity(); mySprite.matrix.Translate(move, 0.0, 0.0); mySprite.Draw(&program); if (myBullet.isShot == true){ movement = movement + elapsed; program.setModelMatrix(myBullet.matrix); myBullet.matrix.identity(); myBullet.matrix.Translate(move, movement, 0.0); myBullet.Draw(&program); if (movement >= 2.5){ myBullet.isShot = false; } } SDL_GL_SwapWindow(displayWindow); } SDL_Quit(); }