Asteroids::Asteroids() { Init(); srand(time(NULL)); done = false; lastFrameTicks = 0.0f; timeLeftOver = 0.0f; gravity_x = 0.0f; gravity_y = 0.0f; bulletIndex = 0; shootTimer = 0.1f; spriteSheetTexture = LoadTexture("sheet.png"); bulletSprite = SheetSprite(spriteSheetTexture, 425.0f / 1024.0f, 468.0f / 1024.0f, 93.0f / 1024.0f, 84.0f / 1024.0f); SheetSprite playerSprite = SheetSprite(spriteSheetTexture, 425.0f / 1024.0f, 468.0f / 1024.0f, 93.0f / 1024.0f, 84.0f / 1024.0f); player = new Player(); player->sprite = playerSprite; player->scale_x = 1.0f; player->scale_y = 1.0f; player->x = 0.0f; player->y = 0.0f; player->friction_x = 3.0f; player->friction_y = 3.0f; entities.push_back(player); SheetSprite asteroidSprite = SheetSprite(spriteSheetTexture, 224.0f / 1024.0f, 664.0f / 1024.0f, 101.0f / 1024.0f, 84.0f / 1024.0f); for (int i = 0; i < 20; i++) { Entity* asteroid = new Entity(); asteroid->sprite = asteroidSprite; float scale = genRandomNumber(0.7f, 1.5f); asteroid->scale_x = scale; asteroid->scale_y = scale; asteroid->x = genRandomNumber(-1.33f, 1.33f); asteroid->y = genRandomNumber(-1.0f, 1.0f); asteroid->rotation = genRandomNumber(-90.0f, 90.0f); asteroid->velocity_x = genRandomNumber(-0.15f, 0.15f); asteroid->velocity_y = genRandomNumber(-0.15f, 0.15f); entities.push_back(asteroid); } ParticleEmitter demoParticles(300); demoParticles.maxLifetime = 1.0f; demoParticles.position = Vector(0.0f, 0.5f, 0.0f); demoParticles.velocity = Vector(0.8f, 0.5f, 0.0f); demoParticles.velocityDeviation = Vector(0.5f, 1.5f, 0.0f); particleEmitters.push_back(demoParticles); gunshot = Mix_LoadWAV("gunshot.wav"); music = Mix_LoadMUS("music.wav"); if (Mix_PlayMusic(music, -1) < 0) { cout << "Error"; } }
bool PlatKillas::UpdateAndRender() { float ticks = (float)SDL_GetTicks() / 1000.0f; float elapsed = ticks - lastFrameTicks; lastFrameTicks = ticks; SDL_Event event; while (SDL_PollEvent(&event)) { if (event.type == SDL_QUIT || event.type == SDL_WINDOWEVENT_CLOSE) { done = true; } else if (event.type == SDL_KEYDOWN) { if (event.key.keysym.scancode == SDL_SCANCODE_SPACE) { if (shootTimer > 0.1f) shootBullet(); } } } const Uint8 *keys = SDL_GetKeyboardState(NULL); if (keys[SDL_SCANCODE_W]) { if (!player->isJumping) { player->jump(); } } if (keys[SDL_SCANCODE_D]) { SheetSprite playerSprite = SheetSprite(characterSpriteSheetTexture, 12, 8, 27); player->sprite = playerSprite; player->setWalkRight(); } else if (keys[SDL_SCANCODE_A]) { SheetSprite playerSprite = SheetSprite(characterSpriteSheetTexture, 12, 8, 15); player->sprite = playerSprite; player->setWalkLeft(); } else { player->setIdle(); } if (keys[SDL_SCANCODE_X]) { if (shootTimer > 0.1f) { shootTimer = 0.0f; shootBullet(); } } float fixedElapsed = elapsed + timeLeftOver; if (fixedElapsed > FIXED_TIMESTEP* MAX_TIMESTEPS) { fixedElapsed = FIXED_TIMESTEP* MAX_TIMESTEPS; } while (fixedElapsed >= FIXED_TIMESTEP) { fixedElapsed -= FIXED_TIMESTEP; FixedUpdate(); } timeLeftOver = fixedElapsed; Update(elapsed); Render(); return done; }
void ClassDemoApp::RenderGameLevel() { state = STATE_GAME_LEVEL; Mix_HaltMusic(); player = new Entity(); player->position_x = 1.0f; player->position_y = -9.0f; player->sprite = SheetSprite(playerTexture, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f); player->hitboxHeight = player->height * 1.0f; player->hitboxWidth = player->width * 1.0f; player->friction_x = 2.0f; player->friction_y = 2.0f; player->isStatic = false; entities.push_back(player); enemies.clear(); for (int i = 0; i < 50; i++) { Entity enemy; enemy.position_x = 15 + i * 5; enemy.position_y = -(2 + rand() % (9 - 2)); enemy.sprite = SheetSprite(spritesTexture, 420.0f/1024.0f, 66.0f/512.0f, 40.0f/1024.0f, 66.0f/512.0f, 1.0f); enemy.hitboxHeight = enemy.height * 0.5f; enemy.hitboxWidth = enemy.width * 0.5f; // int randint = 1 + rand() % (2-1); // if (randint == 1) { // enemy.velocity_y = 1.0f; // } // else { // enemy.velocity_y = -1.0f; // } int randint2 = 1 + rand() % (2-1); if (randint2 == 1) { enemy.velocity_x = 0.5f; } else { enemy.velocity_x = -0.5f; } enemies.push_back(enemy); } keyv.clear(); for (int i = 0; i < 90; i++) { Entity key; key.position_x = 7 + i * 2; key.position_y = -(2 + rand() % (9 - 2)); key.sprite = SheetSprite(keysTexture, 1.0f, 1.0f, 1.0f, 1.0f, 0.7f); key.hitboxHeight = key.height * 1.0f; key.hitboxWidth = key.width * 1.0f; keyv.push_back(key); } }
Slug::Slug(float size, float x_position, float y_position, int texture, ShaderProgram* program){ this->program = program; x = x_position; y = y_position; this->size = size; // Animation stuff animation_time = .5f; float sheet_width = 353; float sheet_length = 153; Sheetposition slimeDead = Sheetposition(0, 112, 59, 12, this->size/2, sheet_width, sheet_length); Sheetposition slimeWalk1 = Sheetposition(52, 125, 50, 28, this->size, sheet_width, sheet_length); Sheetposition slimeWalk2 = Sheetposition(0, 125, 51, 26, this->size, sheet_width, sheet_length); spritesheet = SheetSprite(texture, slimeWalk1); frames = new Sheetposition[3]; Sheetposition holder[]= { slimeWalk1, slimeWalk2, slimeDead}; for (int i = 0; i < 3; i++){ frames[i] = holder[i]; } death_frame = 2; walk_begin = 0; walk_end = 1; sprite = slimeWalk1; acceleration_rate = 1.0; y_gravity = 1.0; bottom_flag = top_flag = right_flag = left_flag = false; }
GameApp::GameApp() { Init(); keys = SDL_GetKeyboardState(NULL); done = false; lastFrameTicks = 0.0f; timeLeftOver = 0.0f; state = STATE_GAME; dead = false; fontText = loadTexture("pixel_font.png"); spriteSheet = loadTexture("sprites.png"); music = Mix_LoadMUS("music.ogg"); Mix_PlayMusic(music, -1); jumpSound = Mix_LoadWAV("jump.wav"); starSound = Mix_LoadWAV("star.wav"); gravityX = 0.0f; gravityY = -1.0f; starsCollected = 0; BuildLevel(); //Build player player.sprite = SheetSprite(spriteSheet, 159, SPRITE_COUNT_X, SPRITE_COUNT_Y); player.isStatic = false; player.enableGravity = true; entities.push_back(&player); }
void initPlayer(){ Entity player = *new Entity(0,-0.5,0.13,0.15); player.sprite = SheetSprite(spriteSheetTexture, 792.0f/914.0f, 828.0f/936.0f, 48.0f/914.0f, 106.0f/936.0f, 0.2); player.type = PLAYER; player.isAlive = true; entities.push_back(player); }
PlatKillas::PlatKillas() { Init(); done = false; lastFrameTicks = 0.0f; timeLeftOver = 0.0f; gravity_x = 0.0f; gravity_y = -9.8f; bulletIndex = 0; shootTimer = 0.1f; buildLevel(); characterSpriteSheetTexture = LoadTexture("characters_1.png"); SheetSprite playerSprite = SheetSprite(characterSpriteSheetTexture, 12, 8, 15); player = new Player(); player->sprite = playerSprite; player->y = -0.5f; player->width = 0.2f; player->height = 0.2f; player->friction_x = 3.0f; entities.push_back(player); }
void PlatKillas::Update(float elapsed) { if (enemySpawnTimer > 1.0f && enemyIndex < 8) { SheetSprite enemySprite = SheetSprite(characterSpriteSheetTexture, 12, 8, 2); enemies[enemyIndex].sprite = enemySprite; enemies[enemyIndex].y = 0.85f; enemies[enemyIndex].x = 0.65f; enemies[enemyIndex].width = 0.2f; enemies[enemyIndex].height = 0.2f; enemies[enemyIndex].acceleration_x = -2.0f; entities.push_back(&enemies[enemyIndex]); enemyIndex++; enemySpawnTimer = 0.0f; } for (size_t i = 0; i < entities.size(); i++) { entities[i]->Update(elapsed); } for (size_t i = 0; i < MAX_BULLETS; i++) { bullets[i].Update(elapsed); } shootTimer += elapsed; enemySpawnTimer += elapsed; }
//TODO: sometimes these are swallowed somehow void shootBullet(int direction) {//N.E.W.S. GLuint sSTex = LoadTexture(RESOURCE_FOLDER"tiles_spritesheet2.png"); Entity newBullet = *new Entity(PLAYER_ENT.xmid()-0.015,PLAYER_ENT.ymid()-0.015,0.03,0.03); newBullet.sprite = SheetSprite(sSTex, 0.0f/1024.0f, 576.0f/1024.0f, 70.0f/1024.0f, 70.0f/1024.0f, 0.2); newBullet.type = BULLET; switch (direction){ case 0: newBullet.velocity_y = 2.0f; //puts("up"); break; case 1: newBullet.x += 0.02f; newBullet.velocity_x = 2.0f; //puts("right"); break; case 2: newBullet.x -= 0.02f; newBullet.velocity_x = -2.0f; //puts("left"); break; case 3: newBullet.y -= 0.02f; newBullet.velocity_y = -2.0f; //puts("down"); break; } bullets.push_back(newBullet); Mix_PlayChannel( -1, pewpew, 0); }
SheetSprite App::decodeFromIndex(int index, int spriteCountX, int spriteCountY, GLuint texture){ float u = (index % spriteCountX) / spriteCountX; float v = (index / spriteCountX) / spriteCountY; float spriteWidth = 1 / spriteCountX; float spriteHeight = 1 / spriteCountY; SheetSprite sprite = SheetSprite(texture, u, v, spriteWidth, spriteHeight); return sprite; }
Enemy::Enemy(Textures* tex) : Character(tex) { is_jumper = false; //Enemy static sprites sprite = SheetSprite(tex->characterSpriteSheetTexture, 405.0f / 2048.0f, 167.0f / 2048.0f, 132.0f / 2048.0f, 161.0f / 2048.0f); sprite_face_right = SheetSprite(tex->characterSpriteSheetTexture, 1160.0f / 2048.0f, 827.0f / 2048.0f, 120.0f / 2048.0f, 162.0f / 2048.0f); sprite_face_left = SheetSprite(tex->characterSpriteSheetTexture, 916.0f / 2048.0f, 995.0f / 2048.0f, 120.0f / 2048.0f, 161.0f / 2048.0f); sprite_jump_right = SheetSprite(tex->characterAnimationSpriteSheetTexture, 122.0f / 1320.0f, 476.0f / 1320.0f, 120.0f / 1320.0f, 161.0f / 1320.0f); sprite_jump_left = SheetSprite(tex->characterAnimationSpriteSheetTexture, 721.0f / 1320.0f, 483.0f / 1320.0f, 120.0f / 1320.0f, 161.0f / 1320.0f); //Enemy animated sprites vector<vector<float>> frames_walk_right; vector<vector<float>> frames_walk_left; frames_walk_right.push_back({ 1160.0f / 2048.0f, 827.0f / 2048.0f, 120.0f / 2048.0f, 162.0f / 2048.0f }); frames_walk_right.push_back({ 1158.0f / 2048.0f, 0.0f / 2048.0f, 120.0f / 2048.0f, 162.0f / 2048.0f }); frames_walk_right.push_back({ 795.0f / 2048.0f, 1820.0f / 2048.0f, 120.0f / 2048.0f, 162.0f / 2048.0f }); frames_walk_left.push_back({ 916.0f / 2048.0f, 995.0f / 2048.0f, 120.0f / 2048.0f, 161.0f / 2048.0f }); frames_walk_left.push_back({ 1040.0f / 2048.0f, 1163.0f / 2048.0f, 120.0f / 2048.0f, 162.0f / 2048.0f }); frames_walk_left.push_back({ 796.0f / 2048.0f, 831.0f / 2048.0f, 120.0f / 2048.0f, 162.0f / 2048.0f }); //walk right animation animation_walk_right = SheetSprite(tex->characterSpriteSheetTexture); animation_walk_right.setAnimated(true, 8.0f, frames_walk_right); //walk left animation animation_walk_left = SheetSprite(tex->characterSpriteSheetTexture); animation_walk_left.setAnimated(true, 8.0f, frames_walk_left); }
Entity::Entity() { sprite = SheetSprite(); friction_x = 5.0f; gravity_y = -4.0f; enableCollisions = true; collidedBottom = false; isStatic = true; isCollisionBool = false; }
void ClassDemoApp::Setup() { 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); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); #ifdef _WINDOWS glewInit(); #endif done = false; srand((unsigned int)time(NULL)); program = new ShaderProgram(RESOURCE_FOLDER"vertex_textured.glsl", RESOURCE_FOLDER"fragment_textured.glsl"); // program = new ShaderProgram(RESOURCE_FOLDER"vertex.glsl", RESOURCE_FOLDER"fragment.glsl"); tileTexture = LoadTexture("sheet_4.png"); projectionMatrix.setOrthoProjection(-3.55f, 3.55f, -2.0f, 2.0f, -1.0f, 1.0f); //SheetSprite sheet = SheetSprite(tileTexture, 14, 8); for (int i = 0; i < LEVEL_HEIGHT; i++) { for (int j = 0; j < LEVEL_WIDTH; j++) { if (i == 0 || j == 0 || j == LEVEL_WIDTH - 1) levelData[i][j] = 13; else levelData[i][j] = 254; } } for (int k = 2; k < LEVEL_WIDTH - 5; ) { for (int r = rand() % 3; r < 3; r++) { int j = rand() % (LEVEL_HEIGHT - 4) + 3; for (int i = rand() % 4; i < 6; i++) { levelData[j][k + i] = 13; if (i == 4 && (k + i) > LEVEL_WIDTH - 11) { levelData[j - 1][k + i] = 64; r = 3; } } } k += 7 + rand() % 3; } SheetSprite playerSprite = SheetSprite(LoadTexture("p2_spritesheet.png"), 1, 1); player = new Entity(playerSprite); entities.push_back(player); player->width = 0.225f; player->height = 0.3f; player->x = TILE_SIZE * 6 + player->width / 2; player->y = -TILE_SIZE * 2; player->isStatic = false; baseTouchX = 6; }
void loadChunk(Chunk chunk, bool alive){ for(int y=LEVEL_HEIGHT-1; y > 0 ; y--){ for(int x=0; x < LEVEL_WIDTH; x++){ if(chunk.get(y, x)){ Entity myEntity = *new Entity(chunk.tileGlobalX(y, x),-(chunk.tileGlobalY(y,x)),TILE_X,TILE_Y); if (rand() % 100 < 20){ myEntity.type = BPLATFORM; myEntity.sprite = SheetSprite(spriteSheetTexture, 0.0f/914.0f, 432.0f/936.0f, 70.0f/914.0f, 70.0f/936.0f, 0.2); } else{ myEntity.type = PLATFORM; myEntity.sprite = SheetSprite(spriteSheetTexture, 504.0f/914.0f, 288.0f/936.0f, 70.0f/914.0f, 70.0f/936.0f, 0.2); } myEntity.isStatic = true; myEntity.isAlive = alive; entities.push_back(myEntity); } } } }
void ClassDemoApp::RenderGameLevel() { state = STATE_GAME_LEVEL; score = 0; timeCount = 0; enemyDirection = 1.0f; moveEnemyDown = false; enemyHitWall = false; player = new Entity(); player->x = -0.1f; player->y = -2.0f + (player->height * 0.3f) / 2.0f; player->sprite = SheetSprite(spritesTexture, 426.0f/1024.0f, 132.0f/512.0f, 32.0f/1024.0f, 66.0f/512.0f, 0.3f); player->hitboxHeight = player->height * 0.3f; player->hitboxWidth = player->width * 0.3f; enemies.clear(); for (int row = 0; row < 3; row++) { for (int column = 0; column < 6; column++) { Entity enemy; enemy.x = -3.0f + (column * 0.75f); enemy.y = 1.4f - (row * 0.5f); enemy.sprite = SheetSprite(spritesTexture, 420.0f/1024.0f, 66.0f/512.0f, 40.0f/1024.0f, 66.0f/512.0f, 0.3f); enemy.hitboxHeight = enemy.height * 0.3f; enemy.hitboxWidth = enemy.width * 0.3f; enemies.push_back(enemy); numOfEnemies++; } } bullet = Entity(); bullet.active = false; bullet.sprite = SheetSprite(spritesTexture, 183.0f/1024.0f, 467.0f/512.0f, 12.0f/1024.0f, 11.0f/512.0f, 0.3f); bullet.hitboxHeight = bullet.height * 0.3f; bullet.hitboxWidth = bullet.width * 0.3f; }
///* void DrawText(ShaderProgram* program, int fontTexture, std::string text, float size, float spacing) { for(int i=0; i < text.size(); i++){ int x = 2 + (text[i] - 'a') % 16; int y = 5 + (text[i] - 'a')/16; Entity myEntity = *new Entity(0+(0.3*i),0,0.1,0.1); myEntity.sprite = SheetSprite(fontTexture, (spacing+(x*(spacing+size)))/512.0f, (spacing+(y*(spacing+size)))/512.0f, 20.0f/512.0f, 20.0f/512.0f, 0.2); myEntity.type = PLATFORM; myEntity.isStatic = true; menuEntities.push_back(myEntity); } }
void spawnEnemy(){ float randx = (static_cast <float> (rand()) / (static_cast <float> (RAND_MAX/1.0f))) + 0.5f; if(rand() % 2){ randx = -1 * randx; } float randy = (static_cast <float> (rand()) / (static_cast <float> (RAND_MAX/1.0f))) + 0.5f; if(rand() % 2){ randy = -1 * randy; } Entity enemy = *new Entity(PLAYER_ENT.xmid()+randx,PLAYER_ENT.ymid()+randy,0.13,0.13); enemy.sprite = SheetSprite(spriteSheetTexture, 72.0f/914.0f, 72.0f/936.0f, 70.0f/914.0f, 70.0f/936.0f, 0.2); enemy.type = ENEMY; enemy.isAlive = true; enemy.player = &PLAYER_ENT; entities.push_back(enemy); }
void PlatKillas::shootBullet() { SheetSprite bulletSprite = SheetSprite(characterSpriteSheetTexture, 12, 8, 3); bullets[bulletIndex].sprite = bulletSprite; bullets[bulletIndex].visible = true; bullets[bulletIndex].x = player->x; bullets[bulletIndex].y = player->y; bullets[bulletIndex].rotation = 0.0f; if (player->face_left) bullets[bulletIndex].velocity_x = -3.5f; else bullets[bulletIndex].velocity_x = 3.5f; bulletIndex++; if (bulletIndex > MAX_BULLETS - 1) { bulletIndex = 0; } shootTimer = 0; }
void GameApp::placeEntity(string type, float placeX, float placeY) { if (type == "player") { player.x = placeX; player.y = placeY; } else if(type == "star") { Entity* temp = new Entity(); temp->sprite = SheetSprite(spriteSheet, 478, SPRITE_COUNT_X, SPRITE_COUNT_Y); temp->x = placeX; temp->y = placeY; temp->enableGravity = false; temp->enableCollisions = false; stars.push_back(temp); entities.push_back(temp); } }
void setupMainMenu(ShaderProgram* program){ state = STATE_MAIN_MENU; //create a menu UI and such /* GLuint textTexture = LoadTexture(RESOURCE_FOLDER"font1.png"); std::string text = "abcdefg"; DrawText(program, textTexture, text, 14.2f, 9.0f);//textTexture */ GLuint menuTexture = LoadTexture(RESOURCE_FOLDER"Menu.png"); Entity myEntity = *new Entity(-1.8,-1,3.6,2.0); myEntity.sprite = SheetSprite(menuTexture, 0.0f, 0.0f, 1.0f, 1.0f, 2.0); myEntity.type = PLATFORM; myEntity.isStatic = true; menuEntities.push_back(myEntity); }
void PlatKillas::buildLevel() { brickIndex = 0; brickSpriteSheetTexture = LoadTexture("sheet_4.png"); SheetSprite brickSprite; for (float i = -1.0f; i <= 1.0f; i = i + 0.2f) { brickSprite = SheetSprite(brickSpriteSheetTexture, 14, 8, 7 + rand() % 3); bricks[brickIndex].sprite = brickSprite; bricks[brickIndex].isStatic = true; bricks[brickIndex].y = -0.9f; bricks[brickIndex].x = i; bricks[brickIndex].width = 0.2f; bricks[brickIndex].height = 0.2f; entities.push_back(&bricks[brickIndex]); brickIndex++; } brickSprite = SheetSprite(brickSpriteSheetTexture, 14, 8, 27); for (float i = -0.4f; i <= 1.0f; i = i + 0.2f) { bricks[brickIndex].sprite = brickSprite; bricks[brickIndex].isStatic = true; bricks[brickIndex].y = i; bricks[brickIndex].x = -1.23f; bricks[brickIndex].width = 0.2f; bricks[brickIndex].height = 0.2f; entities.push_back(&bricks[brickIndex]); brickIndex++; } for (float i = -0.4f; i <= 1.0f; i = i + 0.2f) { bricks[brickIndex].sprite = brickSprite; bricks[brickIndex].isStatic = true; bricks[brickIndex].y = i; bricks[brickIndex].x = 1.23f; bricks[brickIndex].width = 0.2f; bricks[brickIndex].height = 0.2f; entities.push_back(&bricks[brickIndex]); brickIndex++; } for (float i = -0.4f; i <= 0.4f; i = i + 0.2f) { brickSprite = SheetSprite(brickSpriteSheetTexture, 14, 8, 11); bricks[brickIndex].sprite = brickSprite; bricks[brickIndex].isStatic = true; bricks[brickIndex].y = 0.1f; bricks[brickIndex].x = i; bricks[brickIndex].width = 0.2f; bricks[brickIndex].height = 0.2f; entities.push_back(&bricks[brickIndex]); brickIndex++; } for (float i = -1.05f; i <= -0.8f; i = i + 0.2f) { brickSprite = SheetSprite(brickSpriteSheetTexture, 14, 8, 11); bricks[brickIndex].sprite = brickSprite; bricks[brickIndex].isStatic = true; bricks[brickIndex].y = -0.4f; bricks[brickIndex].x = i; bricks[brickIndex].width = 0.2f; bricks[brickIndex].height = 0.2f; entities.push_back(&bricks[brickIndex]); brickIndex++; } for (float i = 1.05f; i >= 0.8f; i = i - 0.2f) { brickSprite = SheetSprite(brickSpriteSheetTexture, 14, 8, 11); bricks[brickIndex].sprite = brickSprite; bricks[brickIndex].isStatic = true; bricks[brickIndex].y = -0.4f; bricks[brickIndex].x = i; bricks[brickIndex].width = 0.3f; bricks[brickIndex].height = 0.2f; entities.push_back(&bricks[brickIndex]); brickIndex++; } }
Player::Player(float size, float x_position, float y_position, int texture, ShaderProgram* program){ current_health = max_health = 1000; current_mana = max_mana = 75; stretchy = true; this->program = program; position.set_x(x_position); position.set_y(y_position); this->size = size; coloruniform = glGetUniformLocation(program->programID, "color_shift"); // Animation stuff. Here, set the positions of the various sprites used, toss them in array float sheet_width = 256; float sheet_length = 512; animation_time = .05f; /*<TextureAtlas imagePath="sprites.png"> <SubTexture name="bathighflap.png" x="0" y="53" width="96" height="58"/> <SubTexture name="batlowflap.png" x="0" y="113" width="88" height="66"/> <SubTexture name="batmidhighflap.png" x="0" y="181" width="83" height="57"/> <SubTexture name="batmidlowflap.png" x="0" y="0" width="100" height="51"/> <SubTexture name="player_jumping.png" x="148" y="307" width="66" height="94"/> <SubTexture name="player_standing.png" x="148" y="209" width="66" height="96"/> <SubTexture name="player_walking1.png" x="102" y="0" width="72" height="94"/> <SubTexture name="player_walking2.png" x="90" y="113" width="72" height="94"/> <SubTexture name="player_walking3.png" x="74" y="336" width="72" height="94"/> <SubTexture name="player_walking4.png" x="74" y="240" width="72" height="94"/> <SubTexture name="player_walking5.png" x="0" y="336" width="72" height="94"/> <SubTexture name="player_walking6.png" x="0" y="240" width="72" height="94"/> </TextureAtlas>*/ Sheetposition p1_stand = Sheetposition(148, 209, 66, 96, this->size, sheet_width, sheet_length); Sheetposition p1_jump = Sheetposition(148, 307, 66, 94, this->size, sheet_width, sheet_length); Sheetposition p1_walk01 = Sheetposition(102, 0, 72, 94, this->size, sheet_width, sheet_length); Sheetposition p1_walk02 = Sheetposition(90, 113, 72, 94, this->size, sheet_width, sheet_length); Sheetposition p1_walk03 = Sheetposition(74, 336, 72, 94, this->size, sheet_width, sheet_length); Sheetposition p1_walk04 = Sheetposition(74, 240, 72, 94, this->size, sheet_width, sheet_length); Sheetposition p1_walk05 = Sheetposition(0, 336, 72, 94, this->size, sheet_width, sheet_length); Sheetposition p1_walk06 = Sheetposition(0, 240, 72, 94, this->size, sheet_width, sheet_length); Sheetposition bat_highflap = Sheetposition(0, 53, 96, 57, this->size/2, sheet_width, sheet_length); Sheetposition bat_midhighflap = Sheetposition(0, 181, 83, 57, this->size/2, sheet_width, sheet_length); Sheetposition bat_midlowflap = Sheetposition(0, 0, 100, 51, this->size/2, sheet_width, sheet_length); Sheetposition bat_lowflap = Sheetposition(0, 113, 88, 66, this->size/2, sheet_width, sheet_length); spritesheet = SheetSprite(texture, p1_stand); frames = new Sheetposition[12]; Sheetposition holder[] = { p1_stand, p1_jump, p1_walk01, p1_walk02, p1_walk03, p1_walk04, p1_walk05, p1_walk06, bat_highflap, bat_midhighflap, bat_midlowflap, bat_lowflap}; for (int i = 0; i < 12; i++){ frames[i] = holder[i]; } hurt_frame = 1; walk_begin = 2; walk_end = 7; sprite = p1_stand; hurt_time = .5f; // physics stuff bottom_flag = top_flag = right_flag = left_flag = false; jump_velocity = 3.5; acceleration_rate = 17.5; gravity.set_y(25.0); friction.set_x(5.0); friction.set_y(0); }
void ClassDemoApp::Setup() { SDL_Init(SDL_INIT_VIDEO); displayWindow = SDL_CreateWindow("My Box Game", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, (int)WINDOW_WIDTH, (int)WINDOW_HEIGHT, SDL_WINDOW_OPENGL); SDL_GLContext context = SDL_GL_CreateContext(displayWindow); SDL_GL_MakeCurrent(displayWindow, context); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); #ifdef _WINDOWS glewInit(); #endif done = false; srand((unsigned int)time(NULL)); program = new ShaderProgram(RESOURCE_FOLDER"vertex_textured.glsl", RESOURCE_FOLDER"fragment_textured_lighting.glsl"); programInfo = new ShaderProgram(RESOURCE_FOLDER"vertex_textured.glsl", RESOURCE_FOLDER"fragment_textured_colored.glsl"); tileTexture = LoadTexture("Tileset.png"); infoBox = LoadTexture("InfoBox.png"); projectionMatrix.setOrthoProjection(-PROJECTION_WIDTH, PROJECTION_WIDTH, -PROJECTION_HEIGHT, PROJECTION_HEIGHT, -1.0f, 1.0f); state = PlayingLevel; LoadLevel("map1.txt"); SheetSprite playerSprite = SheetSprite(LoadTexture("player.png"), 1, 1); player = new Entity(playerSprite); entities.push_back(player); player->entityType = Entity::ENTITY_PLAYER; player->width = BOX_SIZE; player->height = BOX_SIZE; player->spawnX = 2; player->spawnY = -5; player->y = TILE_SIZE * player->spawnY + player->height / 2; player->x = TILE_SIZE * player->spawnX + player->width / 2; player->isStatic = false; includePlayer2 = false; player2 = new Entity(playerSprite); if (includePlayer2) { entities.push_back(player2); } player2->entityType = Entity::ENTITY_PLAYER; player2->width = BOX_SIZE; player2->height = BOX_SIZE; player2->spawnX = 1; player2->spawnY = -5; player2->y = TILE_SIZE * player2->spawnY + player->height / 2; player2->x = TILE_SIZE * player2->spawnX + player->width / 2; player2->isStatic = false; box = new Entity(playerSprite); box->entityType = Entity::ENTITY_ENEMY; box->width = BOX_SIZE; box->height = BOX_SIZE; box->spawnX = 4; box->spawnY = -5; box->y = TILE_SIZE * box->spawnY + box->height / 2; box->x = TILE_SIZE * box->spawnX + box->width / 2; box->isStatic = false; entities.push_back(box); box2 = new Entity(playerSprite); box2->entityType = Entity::ENTITY_ENEMY; box2->width = (float)(BOX_SIZE) * 2; box2->height = (float)(BOX_SIZE)* 2; box2->spawnX = 7; box2->spawnY = -6; box2->y = TILE_SIZE * box2->spawnY + box2->height / 2; box2->x = TILE_SIZE * box2->spawnX + box2->width / 2; box2->isStatic = false; entities.push_back(box2); box3 = new Entity(playerSprite); box3->entityType = Entity::ENTITY_ENEMY; box3->width = (float)(BOX_SIZE)* 3; box3->height = (float)(BOX_SIZE)* 3; box3->spawnX = 12; box3->spawnY = -6; box3->y = TILE_SIZE * box3->spawnY + box3->height / 2; box3->x = TILE_SIZE * box3->spawnX + box3->width / 2; box3->isStatic = false; entities.push_back(box3); players[0] = player; players[1] = player2; //Set Controls Here controls[0] = new PlayerController(SDL_SCANCODE_W, SDL_SCANCODE_S, SDL_SCANCODE_A, SDL_SCANCODE_D, SDL_SCANCODE_K); controls[1] = new PlayerController(SDL_SCANCODE_UP, SDL_SCANCODE_DOWN, SDL_SCANCODE_LEFT, SDL_SCANCODE_RIGHT, SDL_SCANCODE_RCTRL); infoBoxTimer = 8; }
void Weapon::changeWeapon(int type) { this->type = type; if (type == RAY_GUN) { scale_x = 1.5f; scale_y = 1.5f; rateOfFire = 1.0f; ammo = 150; max_ammo = 350; melee_damage = 0; droppable = true; bullet_type = PLASMA_BALL; sprite = SheetSprite(tex->weaponSpriteSheetTexture, 14, 7, 2); } else if (type == SWORD) { scale_x = 1.2f; scale_y = 0.4f; rateOfFire = 0.0f; ammo = 0; max_ammo = 0; melee_damage = 20; droppable = false; bullet_type = PLASMA_BALL; sprite = SheetSprite(tex->characterAnimationSpriteSheetTexture, 481.0f / 1320.0f, 987.0f / 1320.0f, 111.0f / 1320.0f, 33.0f / 1320.0f); } else if (type == MINI_GUN) { scale_x = 1.5f; scale_y = 1.5f; rateOfFire = 2.0f; ammo = 125; max_ammo = 200; melee_damage = 0; droppable = true; bullet_type = LASER; sprite = SheetSprite(tex->minigunTexture, 1, 1, 0); } else if (type == MACHINE_GUN) { scale_x = 1.5f; scale_y = 1.0f; rateOfFire = 1.5f; ammo = 150; max_ammo = 400; melee_damage = 0; droppable = true; bullet_type = SMILEY_FACE; sprite = SheetSprite(tex->gunsSpriteSheetTexture, 344.0f / 480.0f, 4.0f / 256.0f, 99.0f / 480.0f, 63.0f / 256.0f); } else if (type == SHOTGUN) { scale_x = 1.3f; scale_y = 0.5f; rateOfFire = 0.3f; ammo = 20; max_ammo = 40; melee_damage = 0; droppable = true; bullet_type = FRUIT; sprite = SheetSprite(tex->gunsSpriteSheetTexture, 96.0f / 480.0f, 212.0f / 256.0f, 95.0f / 480.0f, 33.0f / 256.0f); } }