void Player::Update(float elapsed){ //JUMP if (keys[SDL_SCANCODE_UP]) { if (!offGround) { SpriteSheet playerSprite = SpriteSheet(chracterTexture, 8, 4, 20); sprite = playerSprite; collidedBottom = false; offGround = true; velocityY = 2.85f; } } //Move right if (keys[SDL_SCANCODE_RIGHT]) { SpriteSheet playerSprite = SpriteSheet(chracterTexture, 8, 4, 17); sprite = playerSprite; direction = 1; accelerationX = 10.0f * direction; } //Move left else if (keys[SDL_SCANCODE_LEFT]) { SpriteSheet playerSprite = SpriteSheet(chracterTexture, 8, 4, 18); sprite = playerSprite; direction = -1; accelerationX = 10.0f * direction; } //Standing still else { velocityX = 0.0f; accelerationX = 0.0f; } }
void SideScroller::updateGameLevel(float elapsed) { // keyboard controls SDL_Event event; while (SDL_PollEvent(&event)) { if (event.type == SDL_QUIT || event.type == SDL_WINDOWEVENT_CLOSE) { done = true; } } const Uint8 *keys = SDL_GetKeyboardState(NULL); if (keys[SDL_SCANCODE_Z]) { if (!entities[0]->isJumping) { entities[0]->jump(); } } if (keys[SDL_SCANCODE_RIGHT]) { if (!entities[0]->collidedRight){ SpriteSheet playerSprite = SpriteSheet(characterSpriteSheetTexture, 12, 8, 30); entities[0]->sprite = playerSprite; entities[0]->walkRight(); } } else if (keys[SDL_SCANCODE_LEFT]) { if (!entities[0]->collidedLeft){ SpriteSheet playerSprite = SpriteSheet(characterSpriteSheetTexture, 12, 8, 18); entities[0]->sprite = playerSprite; entities[0]->walkLeft(); } } else { entities[0]->idle(); } }
void CoreApp::GotoMainMenu() { state = MENU; clearColorBit = true; score = 0; lives = 3; player = Entity(); player.x = GRD_LEFT + 1.5f; player.y = GRD_BOT + .5f; player.sprite = SpriteSheet(invadersTexture, 16.0f/80.0f, 16.0f/48.0f, 16.0f/80.0f, 16.0f/48.0f, 1.0f); // Initialize the object list to all we need }
void Player::Update(float elapsed){ shootTimer -= elapsed; for (int i = 0; i < MAX_BULLETS; i++) { bullets[i].Update(elapsed); } //JUMP if (keys[controlls.jump]) { if (!offGround) { SpriteSheet playerSprite = SpriteSheet(chracterTexture, 8, 4, charIndex+2); sprite = playerSprite; collidedBottom = false; offGround = true; velocityY = 2.85f; } } //Move right if (keys[controlls.right]) { SpriteSheet playerSprite = SpriteSheet(chracterTexture, 8, 4, charIndex-1); sprite = playerSprite; direction = 1; accelerationX = 10.0f * direction; } //Move left else if (keys[controlls.left]) { SpriteSheet playerSprite = SpriteSheet(chracterTexture, 8, 4, charIndex); sprite = playerSprite; direction = -1; accelerationX = 10.0f * direction; } //Standing still else { velocityX = 0.0f; accelerationX = 0.0f; } }
//shoot the bullet void Player::shootBullet(unsigned int levelTexture) { SpriteSheet bulletSprite = SpriteSheet(levelTexture, 16, 8, 23); bullets[bulletIndex].sprite = bulletSprite; bullets[bulletIndex].visible = true; bullets[bulletIndex].width = 0.15; bullets[bulletIndex].xPos = xPos; bullets[bulletIndex].yPos = yPos; bullets[bulletIndex].rotation = 0.0f; bullets[bulletIndex].velocityX = 3.5f * direction; bulletIndex++; if (bulletIndex > MAX_BULLETS - 1) { bulletIndex = 0; } }
Player::Player(unsigned int texture, int charIndex, const Uint8 left, const Uint8 right, const Uint8 jump, const Uint8 shoot) :chracterTexture(texture), charIndex(charIndex){ SpriteSheet playerSprite = SpriteSheet(texture, 8, 4, charIndex); sprite = playerSprite; controlls.jump = jump; controlls.left = left; controlls.right = right; controlls.shoot = shoot; bulletIndex = 0; shootTimer = 0.0f; life = 5; power = 0; }
bool Haste::load(File* file){ static SpriteSheet ssHaste; static bool loaded = false; if (!loaded){ ssHaste = SpriteSheet(Vec2i(1, 1)); if (!ssHaste.load("haste.png")){ return false; } loaded = true; } m_sprite.setSpriteSheet(&ssHaste); m_sprite.loadAnimation(&ssHaste, 0, 0, 1); m_duration = 5.0f; m_timeRemaining = m_duration; return true; }
void SideScroller::Init() { // insert player as the first entity SpriteSheet playerSprite = SpriteSheet(characterSpriteSheetTexture, 12, 8, 18); Entity* player = new Entity(); player->sprite = playerSprite; player->x = 0.0f; player->y = -2.5f; player->width = 0.2f; player->height = 0.2f; player->friction_x = 3.0f; player->isPlayer = true; entities.push_back(player); // build the level, aka read tile file and throw into leveldata buildLevel(); }
void gameApp::RenderMainMenu() { Entity ts = Entity(SpriteSheet(titlescreen, 1, 1, 1,1, 8.0f)); ts.Draw(program); //implement shade in via shaders modelMatrix.identity(); modelMatrix.Translate(-2.5f, 3.0f, 0.0f); program->setModelMatrix(modelMatrix); DrawText(fontSprites, "Touhou Quest", .45f, -.22f); modelMatrix.identity(); modelMatrix.Translate(-2.0f, 2.4f, 0.0f); program->setModelMatrix(modelMatrix); DrawText(fontSprites, "Two Buttons To Play", .3f, -.189f); modelMatrix.identity(); modelMatrix.Translate(-1.8f, 2.0f, 0.0f); program->setModelMatrix(modelMatrix); DrawText(fontSprites, "Z, X", .3f, -.189f); SDL_GL_SwapWindow(displayWindow); }
void CoreApp::GotoGame() { state = GAME; clearColorBit = true; enmTickCount = 0; enmTickWait = ENM_MOVEMENT_BASE_TICK_TIME; enmCurrentDirection = 1.0f; enmMoveDown = false; enmHitWall = false; player = Entity(); player.x = GRD_LEFT + 1.5f; player.y = GRD_BOT + .5f; player.sprite = SpriteSheet(invadersTexture, 16.0f/80.0f, 16.0f/48.0f, 16.0f/80.0f, 16.0f/48.0f, 1.0f); enemies.clear(); // Setup enemies for( int row = 0; row < 6; row++ ) { for( int column = 0; column < 6; column++ ) { Entity newEnemy = Entity(); newEnemy.x = column + -7.0f + .8 * column; // Can't use compiler vars here. newEnemy.y = -row + 6.0f; if( row <= 1 ) { newEnemy.sprite = SpriteSheet(invadersTexture, 0.0f/80.0f, 0.0f/48.0f, 16.0f/80.0f, 16.0f/48.0f, 1.0f); } else if( row <= 3 ) { newEnemy.sprite = SpriteSheet(invadersTexture, 16.0f/80.0f, 0.0f/48.0f, 16.0f/80.0f, 16.0f/48.0f, 1.0f); } else { newEnemy.sprite = SpriteSheet(invadersTexture, 0.0f/80.0f, 16.0f/48.0f, 16.0f/80.0f, 16.0f/48.0f, 1.0f); } enemies.push_back(newEnemy); } } enmRemaining = ENM_GRID_NUM_ENEMIES; playerBullet = Entity(); playerBullet.active = false; playerBullet.sprite = SpriteSheet(invadersTexture, 0.0f/80.0f, 32.0f/48.0f, 16.0f/80.0f, 16.0f/48.0f, 1.0f); playerBullet.hitboxHeight = .5f; playerBullet.hitboxWidth = .2f; enemyBullet = Entity(); enemyBullet.active = false; enemyBullet.sprite = SpriteSheet(invadersTexture, 0.0f/80.0f, 32.0f/48.0f, 16.0f/80.0f, 16.0f/48.0f, 1.0f); }
void gameApp::Setup() { SDL_Init(SDL_INIT_VIDEO); displayWindow = SDL_CreateWindow("Touhou Quests", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 880, 640, SDL_WINDOW_OPENGL); SDL_GLContext context = SDL_GL_CreateContext(displayWindow); SDL_GL_MakeCurrent(displayWindow, context); #ifdef _WINDOWS glewInit(); #endif program = new ShaderProgram(RESOURCE_FOLDER"vertex_textured.glsl", RESOURCE_FOLDER"fragment_textured.glsl"); glUseProgram(program->programID); glViewport(0, 0,880,640); projectionMatrix.setOrthoProjection(-4.0f, 4.0f, -4.0f, 4.0f, -1.0f, 1.0f); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); program->setModelMatrix(modelMatrix); program->setViewMatrix(viewMatrix); program->setProjectionMatrix(projectionMatrix); //loadmusic Mix_OpenAudio(44100, MIX_DEFAULT_FORMAT, 2, 4096); swordhit = Mix_LoadWAV("music/swordslash.wav"); monsterhit = Mix_LoadWAV("music/gettinghitwave"); interact = Mix_LoadWAV("music/upgrade.wave"); titlemewsic = Mix_LoadMUS("music/The Flower Like the Fantasy - Phantasmagoria of Flower View.mp3"); stagemewsic = Mix_LoadMUS("music/Mystic Oriental Dream - Ancient Temple.mp3"); gameovermewsic = Mix_LoadMUS("music/Wingless.mp3"); //load images fontSprites = LoadTexture("images/font1.png"); shrineImg = LoadTexture("images/shrine.png"); stagescreen = LoadTexture("images/bg.png"); titlescreen = LoadTexture24Bit("images/title.png"); potion = LoadTexture("images/potion.png"); divineEdge = LoadTexture("images/divineblade.png"); skillScroll = LoadTexture("images/skillscroll.png"); secondChance = LoadTexture("images/secondchance.png"); //load sprite sheet animations into arrays [oh man, this would have been easier with an even sprite sheet] GLuint youmu = LoadTexture("images/youmu.png"); attack1[0] = SpriteSheet(youmu, 1425.0f / 1642.0f, 75.0f / 879.0f, 77.0f / 1642.0f, 94.0f / 879.0f, 1.11f); attack1[1] = SpriteSheet(youmu, 1149.0f / 1642.0f, 679.0f / 879.0f, 66.0f / 1642.0f, 122.0f / 879.0f, 1.11f); attack1[2] = SpriteSheet(youmu, 1254.0f / 1642.0f, 0.0f / 879.0f, 85.0f / 1642.0f, 107.0f / 879.0f, 1.11f); attack1[3] = SpriteSheet(youmu, 512.0f / 1642.0f, 669.0f / 879.0f, 96.0f / 1642.0f, 91.0f / 879.0f, 1.11f); attack1[4] = SpriteSheet(youmu, 1170.0f / 1642.0f, 599.0f / 879.0f, 68.0f / 1642.0f, 79.0f / 879.0f, 1.11f); attack1[5] = SpriteSheet(youmu, 1174.0f / 1642.0f, 417.0f / 879.0f, 73.0f / 1642.0f, 72.0f / 879.0f, 1.11f); attack1[6] = SpriteSheet(youmu, 1097.0f / 1642.0f, 528.0f / 879.0f, 72.0f / 1642.0f, 97.0f / 879.0f, 1.11f); attack1[7] = SpriteSheet(youmu, 1477.0f / 1642.0f, 170.0f / 879.0f, 71.0f / 1642.0f, 100.0f / 879.0f, 1.11f); attack1[8] = SpriteSheet(youmu, 1507.0f / 1642.0f, 0.0f / 879.0f, 77.0f / 1642.0f, 92.0f / 879.0f, 1.11f); attack1[9] = SpriteSheet(youmu, 1503.0f / 1642.0f, 93.0f / 879.0f, 76.0f / 1642.0f, 75.0f / 879.0f, 1.11f); attack1[10] = SpriteSheet(youmu, 1124.0f / 1642.0f, 802.0f / 879.0f, 66.0f / 1642.0f, 77.0f / 879.0f, 1.11f); attack2[0] = SpriteSheet(youmu, 1457.0f / 1642.0f, 372.0f / 879.0f, 66.0f / 1642.0f, 123.0f / 879.0f, 1.11f); attack2[1] = SpriteSheet(youmu, 1322.0f / 1642.0f, 176.0f / 879.0f, 77.0f / 1642.0f, 105.0f / 879.0f, 1.11f); attack2[2] = SpriteSheet(youmu, 0.0f / 1642.0f, 652.0f / 879.0f, 105.0f / 1642.0f, 79.0f / 879.0f, 1.11f); attack2[3] = SpriteSheet(youmu, 213.0f / 1642.0f, 587.0f / 879.0f, 102.0f / 1642.0f, 81.0f / 879.0f, 1.11f); attack2[4] = SpriteSheet(youmu, 0.0f / 1642.0f, 358.0f / 879.0f, 135.0f / 1642.0f, 82.0f / 879.0f, 1.11f); attack2[5] = SpriteSheet(youmu, 226.0f / 1642.0f, 113.0f / 879.0f, 161.0f / 1642.0f, 68.0f / 879.0f, 1.11f); attack2[6] = SpriteSheet(youmu, 359.0f / 1642.0f, 182.0f / 879.0f, 149.0f / 1642.0f, 70.0f / 879.0f, 1.11f); attack2[7] = SpriteSheet(youmu, 0.0f / 1642.0f, 213.0f / 879.0f, 144.0f / 1642.0f, 72.0f / 879.0f, 1.11f); attack2[8] = SpriteSheet(youmu, 136.0f / 1642.0f, 437.0f / 879.0f, 123.0f / 1642.0f, 74.0f / 879.0f, 1.11f); attack2[9] = SpriteSheet(youmu, 739.0f / 1642.0f, 392.0f / 879.0f, 107.0f / 1642.0f, 70.0f / 879.0f, 1.11f); attack2[10] = SpriteSheet(youmu, 0.0f / 1642.0f, 580.0f / 879.0f, 106.0f / 1642.0f, 71.0f / 879.0f, 1.11f); attack2[11] = SpriteSheet(youmu, 1400.0f / 1642.0f, 253.0f / 879.0f, 71.0f / 1642.0f, 73.0f / 879.0f, 1.11f); attack2[12] = SpriteSheet(youmu, 982.0f / 1642.0f, 793.0f / 879.0f, 68.0f / 1642.0f, 77.0f / 879.0f, 1.11f); attack3[0] = SpriteSheet(youmu, 989.0f / 1642.0f, 0.0f / 879.0f, 88.0f / 1642.0f, 81.0f / 879.0f, 1.11f); attack3[1] = SpriteSheet(youmu, 762.0f / 1642.0f, 80.0f / 879.0f, 112.0f / 1642.0f, 85.0f / 879.0f, 1.11f); attack3[2] = SpriteSheet(youmu, 1017.0f / 1642.0f, 428.0f / 879.0f, 79.0f / 1642.0f, 107.0f / 879.0f, 1.11f); attack3[3] = SpriteSheet(youmu, 214.0f / 1642.0f, 512.0f / 879.0f, 105.0f / 1642.0f, 74.0f / 879.0f, 1.11f); attack3[4] = SpriteSheet(youmu, 320.0f / 1642.0f, 509.0f / 879.0f, 102.0f / 1642.0f, 71.0f / 879.0f, 1.11f); attack3[5] = SpriteSheet(youmu, 423.0f / 1642.0f, 509.0f / 879.0f, 101.0f / 1642.0f, 68.0f / 879.0f, 1.11f); attack3[6] = SpriteSheet(youmu, 210.0f / 1642.0f, 752.0f / 879.0f, 101.0f / 1642.0f, 68.0f / 879.0f, 1.11f); attack3[7] = SpriteSheet(youmu, 619.0f / 1642.0f, 437.0f / 879.0f, 109.0f / 1642.0f, 71.0f / 879.0f, 1.11f); attack3[8] = SpriteSheet(youmu, 1292.0f / 1642.0f, 345.0f / 879.0f, 71.0f / 1642.0f, 73.0f / 879.0f, 1.11f); attack3[9] = SpriteSheet(youmu, 1319.0f / 1642.0f, 423.0f / 879.0f, 68.0f / 1642.0f, 77.0f / 879.0f, 1.11f); attack4[0] = SpriteSheet(youmu, 107.0f / 1642.0f, 512.0f / 879.0f, 106.0f / 1642.0f, 67.0f / 879.0f, 1.11f); attack4[1] = SpriteSheet(youmu, 800.0f / 1642.0f, 716.0f / 879.0f, 106.0f / 1642.0f, 74.0f / 879.0f, 1.11f); attack4[2] = SpriteSheet(youmu, 1340.0f / 1642.0f, 83.0f / 879.0f, 81.0f / 1642.0f, 91.0f / 879.0f, 1.11f); attack4[3] = SpriteSheet(youmu, 1316.0f / 1642.0f, 282.0f / 879.0f, 73.0f / 1642.0f, 62.0f / 879.0f, 1.11f); attack4[4] = SpriteSheet(youmu, 395.0f / 1642.0f, 253.0f / 879.0f, 118.0f / 1642.0f, 108.0f / 879.0f, 1.11f); attack4[5] = SpriteSheet(youmu, 1067.0f / 1642.0f, 164.0f / 879.0f, 85.0f / 1642.0f, 108.0f / 879.0f, 1.11f); attack4[6] = SpriteSheet(youmu, 1174.0f / 1642.0f, 490.0f / 879.0f, 70.0f / 1642.0f, 108.0f / 879.0f, 1.11f); attack4[7] = SpriteSheet(youmu, 1191.0f / 1642.0f, 802.0f / 879.0f, 64.0f / 1642.0f, 67.0f / 879.0f, 1.11f); attack4[8] = SpriteSheet(youmu, 1388.0f / 1642.0f, 423.0f / 879.0f, 68.0f / 1642.0f, 60.0f / 879.0f, 1.11f); attack4[9] = SpriteSheet(youmu, 199.0f / 1642.0f, 821.0f / 879.0f, 72.0f / 1642.0f, 54.0f / 879.0f, 1.11f); block[0] = SpriteSheet(youmu, 609.0f / 1642.0f, 675.0f / 879.0f, 95.0f / 1642.0f, 81.0f / 879.0f, 1.11f); block[1] = SpriteSheet(youmu, 1455.0f / 1642.0f, 570.0f / 879.0f, 63.0f / 1642.0f, 102.0f / 879.0f, 1.11f); crit[0] = SpriteSheet(youmu, 1541.0f / 1642.0f, 290.0f / 879.0f, 67.0f / 1642.0f, 80.0f / 879.0f, 1.11f); crit[1] = SpriteSheet(youmu, 705.0f / 1642.0f, 716.0f / 879.0f, 94.0f / 1642.0f, 79.0f / 879.0f, 1.11f); crit[2] = SpriteSheet(youmu, 1239.0f / 1642.0f, 599.0f / 879.0f, 67.0f / 1642.0f, 98.0f / 879.0f, 1.11f); crit[3] = SpriteSheet(youmu, 1472.0f / 1642.0f, 271.0f / 879.0f, 68.0f / 1642.0f, 100.0f / 879.0f, 1.11f); crit[4] = SpriteSheet(youmu, 1006.0f / 1642.0f, 633.0f / 879.0f, 72.0f / 1642.0f, 74.0f / 879.0f, 1.11f); crit[5] = SpriteSheet(youmu, 1248.0f / 1642.0f, 419.0f / 879.0f, 70.0f / 1642.0f, 72.0f / 879.0f, 1.11f); crit[6] = SpriteSheet(youmu, 609.0f / 1642.0f, 757.0f / 879.0f, 94.0f / 1642.0f, 96.0f / 879.0f, 1.11f); crit[7] = SpriteSheet(youmu, 723.0f / 1642.0f, 547.0f / 879.0f, 95.0f / 1642.0f, 91.0f / 879.0f, 1.11f); crit[8] = SpriteSheet(youmu, 877.0f / 1642.0f, 0.0f / 879.0f, 111.0f / 1642.0f, 91.0f / 879.0f, 1.11f); crit[9] = SpriteSheet(youmu, 1425.0f / 1642.0f, 0.0f / 879.0f, 81.0f / 1642.0f, 74.0f / 879.0f, 1.11f); crit[10] = SpriteSheet(youmu, 1582.0f / 1642.0f, 582.0f / 879.0f, 59.0f / 1642.0f, 76.0f / 879.0f, 1.11f); crit[11] = SpriteSheet(youmu, 1400.0f / 1642.0f, 175.0f / 879.0f, 76.0f / 1642.0f, 77.0f / 879.0f, 1.11f); crit[12] = SpriteSheet(youmu, 963.0f / 1642.0f, 247.0f / 879.0f, 86.0f / 1642.0f, 80.0f / 879.0f, 1.11f); criteffect[0] = SpriteSheet(youmu, 312.0f / 1642.0f, 751.0f / 879.0f, 99.0f / 1642.0f, 80.0f / 879.0f, 1.11f); criteffect[1] = SpriteSheet(youmu, 850.0f / 1642.0f, 376.0f / 879.0f, 106.0f / 1642.0f, 87.0f / 879.0f, 1.11f); criteffect[2] = SpriteSheet(youmu, 628.0f / 1642.0f, 347.0f / 879.0f, 110.0f / 1642.0f, 89.0f / 879.0f, 1.11f); criteffect[3] = SpriteSheet(youmu, 514.0f / 1642.0f, 261.0f / 879.0f, 113.0f / 1642.0f, 94.0f / 879.0f, 1.11f); criteffect[4] = SpriteSheet(youmu, 392.0f / 1642.0f, 362.0f / 879.0f, 114.0f / 1642.0f, 98.0f / 879.0f, 1.11f); criteffect[5] = SpriteSheet(youmu, 641.0f / 1642.0f, 101.0f / 879.0f, 115.0f / 1642.0f, 99.0f / 879.0f, 1.11f); criteffect[6] = SpriteSheet(youmu, 642.0f / 1642.0f, 0.0f / 879.0f, 119.0f / 1642.0f, 100.0f / 879.0f, 1.11f); criteffect[7] = SpriteSheet(youmu, 269.0f / 1642.0f, 344.0f / 879.0f, 122.0f / 1642.0f, 97.0f / 879.0f, 1.11f); criteffect[8] = SpriteSheet(youmu, 396.0f / 1642.0f, 49.0f / 879.0f, 122.0f / 1642.0f, 93.0f / 879.0f, 1.11f); criteffect[9] = SpriteSheet(youmu, 270.0f / 1642.0f, 253.0f / 879.0f, 124.0f / 1642.0f, 90.0f / 879.0f, 1.11f); criteffect[10] = SpriteSheet(youmu, 519.0f / 1642.0f, 0.0f / 879.0f, 122.0f / 1642.0f, 88.0f / 879.0f, 1.11f); criteffect[11] = SpriteSheet(youmu, 519.0f / 1642.0f, 89.0f / 879.0f, 121.0f / 1642.0f, 87.0f / 879.0f, 1.11f); criteffect[12] = SpriteSheet(youmu, 514.0f / 1642.0f, 177.0f / 879.0f, 117.0f / 1642.0f, 83.0f / 879.0f, 1.11f); death[0] = SpriteSheet(youmu, 0.0f / 1642.0f, 814.0f / 879.0f, 102.0f / 1642.0f, 52.0f / 879.0f, 1.11f); death[1] = SpriteSheet(youmu, 369.0f / 1642.0f, 461.0f / 879.0f, 107.0f / 1642.0f, 47.0f / 879.0f, 1.11f); encounter[0] = SpriteSheet(youmu, 757.0f / 1642.0f, 166.0f / 879.0f, 111.0f / 1642.0f, 72.0f / 879.0f, 1.11f); encounter[1] = SpriteSheet(youmu, 412.0f / 1642.0f, 744.0f / 879.0f, 97.0f / 1642.0f, 76.0f / 879.0f, 1.11f); encounter[2] = SpriteSheet(youmu, 1078.0f / 1642.0f, 82.0f / 879.0f, 87.0f / 1642.0f, 71.0f / 879.0f, 1.11f); encounter[3] = SpriteSheet(youmu, 855.0f / 1642.0f, 313.0f / 879.0f, 107.0f / 1642.0f, 62.0f / 879.0f, 1.11f); encounter[4] = SpriteSheet(youmu, 260.0f / 1642.0f, 442.0f / 879.0f, 108.0f / 1642.0f, 61.0f / 879.0f, 1.11f); encounter[5] = SpriteSheet(youmu, 855.0f / 1642.0f, 241.0f / 879.0f, 107.0f / 1642.0f, 71.0f / 879.0f, 1.11f); encounter[6] = SpriteSheet(youmu, 523.0f / 1642.0f, 591.0f / 879.0f, 98.0f / 1642.0f, 77.0f / 879.0f, 1.11f); flashstepEff[0] = SpriteSheet(youmu, 103.0f / 1642.0f, 815.0f / 879.0f, 95.0f / 1642.0f, 60.0f / 879.0f, 1.11f); flashstepEff[1] = SpriteSheet(youmu, 203.0f / 1642.0f, 182.0f / 879.0f, 155.0f / 1642.0f, 63.0f / 879.0f, 1.11f); flashstepEff[2] = SpriteSheet(youmu, 0.0f / 1642.0f, 50.0f / 879.0f, 231.0 / 1642.0f, 61.0f / 879.0f, 1.11f); flashstepEff[3] = SpriteSheet(youmu, 0.0f / 1642.0f, 0.0f / 879.0f, 249.0f / 1642.0f, 49.0f / 879.0f, 1.11f); flashstepEff[4] = SpriteSheet(youmu, 0.0f / 1642.0f, 112.0f / 879.0f, 225.0f / 1642.0f, 45.0f / 879.0f, 1.11f); flashstepEff[5] = SpriteSheet(youmu, 250.0f / 1642.0f, 0.0f / 879.0f, 197.0f / 1642.0f, 48.0f / 879.0f, 1.11f); flashstepEff[6] = SpriteSheet(youmu, 0.0f / 1642.0f, 158.0f / 879.0f, 202.0f / 1642.0f, 54.0f / 879.0f, 1.11f); flashstepEff[7] = SpriteSheet(youmu, 232.0f / 1642.0f, 50.0f / 879.0f, 163.0f / 1642.0f, 62.0f / 879.0f, 1.11f); flashstepEff[8] = SpriteSheet(youmu, 0.0f / 1642.0f, 286.0f / 879.0f, 141.0f / 1642.0f, 71.0f / 879.0f, 1.11f); flashstepEff[9] = SpriteSheet(youmu, 719.0f / 1642.0f, 639.0f / 879.0f, 95.0f / 1642.0f, 76.0f / 879.0f, 1.11f); flashstep[0] = SpriteSheet(youmu, 762.0f / 1642.0f, 0.0f / 879.0f, 114.0f / 1642.0f, 79.0f / 879.0f, 1.11f); flashstep[1] = SpriteSheet(youmu, 704.0f / 1642.0f, 796.0f / 879.0f, 93.0f / 1642.0f, 75.0f / 879.0f, 1.11f); flashstep[2] = SpriteSheet(youmu, 1153.0f / 1642.0f, 176.0f / 879.0f, 84.0f / 1642.0f, 71.0f / 879.0f, 1.11f); flashstep[3] = SpriteSheet(youmu, 1253.0f / 1642.0f, 108.0f / 879.0f, 84.0f / 1642.0f, 67.0f / 879.0f, 1.11f); flashstep[4] = SpriteSheet(youmu, 1455.0f / 1642.0f, 496.0f / 879.0f, 65.0f / 1642.0f, 73.0f / 879.0f, 1.11f); flashstep[5] = SpriteSheet(youmu, 1580.0f / 1642.0f, 93.0f / 879.0f, 59.0f / 1642.0f, 74.0f / 879.0f, 1.11f); flashstep[6] = SpriteSheet(youmu, 893.0f / 1642.0f, 715.0f / 879.0f, 91.0f / 1642.0f, 63.0f / 879.0f, 1.11f); flashstep[7] = SpriteSheet(youmu, 142.0f / 1642.0f, 286.0f / 879.0f, 127.0f / 1642.0f, 57.0f / 879.0f, 1.11f); flashstep[8] = SpriteSheet(youmu, 0.0f / 1642.0f, 441.0f / 879.0f, 117.0f / 1642.0f, 57.0f / 879.0f, 1.11f); flashstep[9] = SpriteSheet(youmu, 1017.0f / 1642.0f, 536.0f / 879.0f, 76.0f / 1642.0f, 96.0f / 879.0f, 1.11f); flashstep[10] = SpriteSheet(youmu, 1167.0f / 1642.0f, 0.0f / 879.0f, 86.0f / 1642.0f, 92.0f / 879.0f, 1.11f); flashstep[11] = SpriteSheet(youmu, 1153.0f / 1642.0f, 248.0f / 879.0f, 83.0f / 1642.0f, 75.0f / 879.0f, 1.11f); flashstep[12] = SpriteSheet(youmu, 985.0f / 1642.0f, 715.0f / 879.0f, 70.0f / 1642.0f, 77.0f / 879.0f, 1.11f); idle[0] = SpriteSheet(youmu, 819.0f / 1642.0f, 631.0f / 879.0f, 93.0f / 1642.0f, 81.0f / 879.0f, 1.11f); idle[1] = SpriteSheet(youmu, 914.0f / 1642.0f, 548.0f / 879.0f, 93.0f / 1642.0f, 81.0f / 879.0f, 1.11f); idle[2] = SpriteSheet(youmu, 826.0f / 1642.0f, 464.0f / 879.0f, 95.0f / 1642.0f, 80.0f / 879.0f, 1.11f); idle[3] = SpriteSheet(youmu, 412.0f / 1642.0f, 663.0f / 879.0f, 99.0f / 1642.0f, 80.0f / 879.0f, 1.11f); idle[4] = SpriteSheet(youmu, 107.0f / 1642.0f, 580.0f / 879.0f, 105.0f / 1642.0f, 79.0f / 879.0f, 1.11f); idle[5] = SpriteSheet(youmu, 745.0f / 1642.0f, 239.0f / 879.0f, 109.0f / 1642.0f, 78.0f / 879.0f, 1.11f); idle[6] = SpriteSheet(youmu, 0.0f / 1642.0f, 499.0f / 879.0f, 106.0f / 1642.0f, 80.0f / 879.0f, 1.11f); idle[7] = SpriteSheet(youmu, 320.0f / 1642.0f, 581.0f / 879.0f, 101.0f / 1642.0f, 81.0f / 879.0f, 1.11f); dash[0] = SpriteSheet(youmu, 632.0f / 1642.0f, 201.0f / 879.0f, 112.0f / 1642.0f, 71.0f / 879.0f, 1.11f); dash[1] = SpriteSheet(youmu, 740.0f / 1642.0f,318.0f / 879.0f, 109.0f / 1642.0f, 73.0f / 879.0f, 1.11f); dash[2] = SpriteSheet(youmu, 507.0f / 1642.0f, 433.0f / 879.0f, 111.0f / 1642.0f, 72.0f / 879.0f, 1.11f); dash[3] = SpriteSheet(youmu, 875.0f / 1642.0f, 92.0f / 879.0f, 111.0f / 1642.0f, 71.0f / 879.0f, 1.11f); dash[4] = SpriteSheet(youmu, 507.0f / 1642.0f, 362.0f / 879.0f, 112.0f / 1642.0f, 70.0f / 879.0f, 1.11f); dash[5] = SpriteSheet(youmu, 869.0f / 1642.0f, 166.0f / 879.0f, 109.0f / 1642.0f, 74.0f / 879.0f, 1.11f); dash[6] = SpriteSheet(youmu, 628.0f / 1642.0f, 273.0f / 879.0f, 111.0f / 1642.0f, 73.0f / 879.0f, 1.11f); skillSplit[0] = SpriteSheet(youmu, 893.0f / 1642.0f, 779.0f / 879.0f, 88.0f / 1642.0f, 82.0f / 879.0f, 1.11f); skillSplit[1] = SpriteSheet(youmu, 1215.0f / 1642.0f, 332.0f / 879.0f, 76.0f / 1642.0f, 84.0f / 879.0f, 1.11f); skillSplit[2] = SpriteSheet(youmu, 1056.0f / 1642.0f, 753.0f / 879.0f, 67.0f / 1642.0f, 101.0f / 879.0f, 1.11f); skillSplit[3] = SpriteSheet(youmu, 1254.0f / 1642.0f, 492.0f / 879.0f, 68.0f / 1642.0f, 104.0f / 879.0f, 1.11f); skillSplit[4] = SpriteSheet(youmu, 1347.0f / 1642.0f, 706.0f / 879.0f, 63.0f / 1642.0f, 101.0f / 879.0f, 1.11f); skillSplit[5] = SpriteSheet(youmu, 1411.0f / 1642.0f, 697.0f / 879.0f, 62.0f / 1642.0f, 94.0f / 879.0f, 1.11f); skillSplit[6] = SpriteSheet(youmu, 1382.0f / 1642.0f, 604.0f / 879.0f, 64.0f / 1642.0f, 92.0f / 879.0f, 1.11f); skillSplit[7] = SpriteSheet(youmu, 1524.0f / 1642.0f, 376.0f / 879.0f, 66.0f / 1642.0f, 90.0f / 879.0f, 1.11f); skillSplit[8] = SpriteSheet(youmu, 1237.0f / 1642.0f, 248.0f / 879.0f, 78.0f / 1642.0f, 83.0f / 879.0f, 1.11f); skillSplit[9] = SpriteSheet(youmu, 1166.0f / 1642.0f, 93.0f / 879.0f, 85.0f / 1642.0f, 82.0f / 879.0f, 1.11f); skillSplit[0] = SpriteSheet(youmu, 979.0f / 1642.0f, 164.0f / 879.0f, 87.0f / 1642.0f, 82.0f / 879.0f, 1.11f); split = SpriteSheet(youmu, 106.0f / 1642.0f, 660.0f / 879.0f, 103.0f / 1642.0f, 154.0f / 879.0f, 1.11f); eoGeom[0] = SpriteSheet(youmu, 1340.0f / 1642.0f, 0.0f / 879.0f, 84.0f / 1642.0f, 82.0f / 879.0f, 1.11f); eoGeom[1] = SpriteSheet(youmu, 1097.0f / 1642.0f, 428.0f / 879.0f, 76.0f / 1642.0f, 99.0f / 879.0f, 1.11f); eoGeom[2] = SpriteSheet(youmu, 1314.0f / 1642.0f, 501.0f / 879.0f, 67.0f / 1642.0f, 121.0f / 879.0f, 1.11f); eoGeom[3] = SpriteSheet(youmu, 1549.0f / 1642.0f, 169.0f / 879.0f, 68.0f / 1642.0f, 120.0f / 879.0f, 1.11f); eoGeom[4] = SpriteSheet(youmu, 1283.0f / 1642.0f, 706.0f / 879.0f, 63.0f / 1642.0f, 120.0f / 879.0f, 1.11f); eoGeom[5] = SpriteSheet(youmu, 1519.0f / 1642.0f, 583.0f / 879.0f, 62.0f / 1642.0f, 119.0f / 879.0f, 1.11f); eoGeom[6] = SpriteSheet(youmu, 1524.0f / 1642.0f, 463.0f / 879.0f, 64.0f / 1642.0f, 119.0f / 879.0f, 1.11f); eoGeom[7] = SpriteSheet(youmu, 1388.0f / 1642.0f, 484.0f / 879.0f, 66.0f / 1642.0f, 119.0f / 879.0f, 1.11f); eoGeom[8] = SpriteSheet(youmu, 1079.0f / 1642.0f, 633.0f / 879.0f, 69.0f / 1642.0f, 119.0f / 879.0f, 1.11f); eoGeom[9] = SpriteSheet(youmu, 963.0f / 1642.0f, 328.0f / 879.0f, 84.0f / 1642.0f, 87.0f / 879.0f, 1.11f); eoGeom[10] = SpriteSheet(youmu, 1050.0f / 1642.0f, 273.0f / 879.0f, 84.0f / 1642.0f, 82.0f / 879.0f, 1.11f); eoGeom[11] = SpriteSheet(youmu, 312.0f / 1642.0f, 669.0f / 879.0f, 99.0f / 1642.0f, 81.0f / 879.0f, 1.11f); eoGeom[12] = SpriteSheet(youmu, 423.0f / 1642.0f, 578.0f / 879.0f, 99.0f / 1642.0f, 81.0f / 879.0f, 1.11f); eoGeom[13] = SpriteSheet(youmu, 989.0f / 1642.0f, 82.0f / 879.0f, 88.0f / 1642.0f, 81.0f / 879.0f, 1.11f); eoGeom[14] = SpriteSheet(youmu, 1216.0f / 1642.0f, 698.0f / 879.0f, 66.0f / 1642.0f, 82.0f / 879.0f, 1.11f); eoGeom[15] = SpriteSheet(youmu, 1411.0f / 1642.0f, 792.0f / 879.0f, 61.0f / 1642.0f, 80.0f / 879.0f, 1.11f); eoGeom[16] = SpriteSheet(youmu, 1048.0f / 1642.0f, 356.0f / 879.0f, 83.0f / 1642.0f, 71.0f / 879.0f, 1.11f); eoGeom[17] = SpriteSheet(youmu, 914.0f / 1642.0f, 630.0f / 879.0f, 91.0f / 1642.0f, 84.0f / 879.0f, 1.11f); eoGeom[18] = SpriteSheet(youmu, 729.0f / 1642.0f, 463.0f / 879.0f, 96.0f / 1642.0f, 93.0f / 879.0f, 1.11f); eoGeom[19] = SpriteSheet(youmu, 819.0f / 1642.0f, 547.0f / 879.0f, 94.0f / 1642.0f, 83.0f / 879.0f, 1.11f); callsword = SpriteSheet(youmu, 142.0f / 1642.0f, 334.0f / 879.0f, 126.0f / 1642.0f, 92.0f / 879.0f, 1.11f); takedamage[0] = SpriteSheet(youmu, 410.0f / 1642.0f, 547.0f / 761.0f, 96.0f / 1642.0f, 81.0f / 879.0f, 1.11f); takedamage[1] = SpriteSheet(youmu, 1364.0f / 1642.0f, 345.0f / 879.0f, 70.0f / 1642.0f, 77.0f / 879.0f, 1.11f); takedamage[2] = SpriteSheet(youmu, 1135.0f / 1642.0f, 324.0f / 879.0f, 79.0f / 1642.0f, 76.0f / 879.0f, 1.11f); useitem[0] = SpriteSheet(youmu, 525.0f / 1642.0f, 509.0f / 879.0f, 99.0f / 1642.0f, 81.0f / 879.0f, 1.11f); useitem[1] = SpriteSheet(youmu, 1078.0f / 1642.0f, 0.0f / 879.0f, 88.0f / 1642.0f, 81.0f / 879.0f, 1.11f); useitem[2] = SpriteSheet(youmu, 1307.0f / 1642.0f, 623.0f / 879.0f, 66.0f / 1642.0f, 82.0f / 879.0f, 1.11f); useitem[3] = SpriteSheet(youmu, 1474.0f / 1642.0f, 703.0f / 879.0f, 61.0f / 1642.0f, 80.0f / 879.0f, 1.11f); useitem[3] = SpriteSheet(youmu, 1238.0f / 1642.0f, 176.0f / 879.0f, 83.0f / 1642.0f, 71.0f / 879.0f, 1.11f); useitem[4] = SpriteSheet(youmu, 800.0f / 1642.0f, 791.0f / 879.0f, 91.0f / 1642.0f, 84.0f / 879.0f, 1.11f); useitem[5] = SpriteSheet(youmu, 622.0f / 1642.0f, 591.0f / 879.0f, 96.0f / 1642.0f, 83.0f / 879.0f, 1.11f); useitem[6] = SpriteSheet(youmu, 922.0f / 1642.0f, 464.0f / 879.0f, 94.0f / 1642.0f, 83.0f / 879.0f, 1.11f); useitem[7] = SpriteSheet(youmu, 210.0f / 1642.0f, 669.0f / 879.0f, 101.0f / 1642.0f, 82.0f / 879.0f, 1.11f); useitem[8] = SpriteSheet(youmu, 0.0f / 1642.0f, 732.0f / 879.0f, 104.0f / 1642.0f, 81.0f / 879.0f, 1.11f); useitem[9] = SpriteSheet(youmu, 625.0f / 1642.0f, 509.0f / 879.0f, 97.0f / 1642.0f, 80.0f / 879.0f, 1.11f); }
void MapController::loadMap(const Map& map) { const auto& nodes = map.getNodes(); for (const auto& n : nodes) { if (n.type == Category::Item) { m_items.emplace_back(n, Util::Random::value(12.f, 19.f)); } else { spawn(n); switch (n.type) { case Category::Solid: m_solidDrawable.addPart(n.position, n.size, map.getPlatformImageName()); break; case Category::Block: //m_blockSprite.setScale(n.size.x / blockTextureSize.x, n.size.y / blockTextureSize.y); break; case Category::Detail: { assert(!n.spriteSheet.empty()); auto result = m_spriteSheets.find(n.spriteSheet); if (result == m_spriteSheets.end()) { //insert new sprite sheet const std::string sheetName = n.spriteSheet.substr(0, n.spriteSheet.find("png")) + "json"; m_spriteSheets.insert(std::make_pair(n.spriteSheet, SpriteSheet("res/textures/atlases/" + sheetName))); result = m_spriteSheets.find(n.spriteSheet); //hackiness to avoid default ctor for SpriteSheet } if (n.layer == Scene::RearDetail) { m_rearDrawable.addSprite(n.spriteSheet, result->second.getFrame(n.image, n.position)); } else { //safe to assume layer is front? might not be.... m_frontDrawable.addSprite(n.spriteSheet, result->second.getFrame(n.image, n.position)); } } break; default: break; } } } //shuffle item order shuffleItems(); //load background texture based on map data std::string imageName = map.getBackgroundImageName(); m_backgroundSprite.setTexture(m_textureResource.get("res/textures/map/" + imageName)); m_backgroundSprite.setFrameSize(sf::Vector2i(m_backgroundSprite.getTexture()->getSize())); auto strpos = imageName.find_last_of('.'); if(strpos != std::string::npos) imageName.insert(strpos, "_normal"); m_backgroundSprite.setNormalMap(m_textureResource.get("res/textures/map/" + imageName)); m_backgroundSprite.setShader(m_shaderResource.get(Shader::Type::NormalMap)); m_shaderResource.get(Shader::Type::Water).setParameter("u_reflectMap", *m_backgroundSprite.getTexture()); m_shaderResource.get(Shader::Type::WaterDrop).setParameter("u_reflectMap", *m_backgroundSprite.getTexture()); m_shaderResource.get(Shader::Type::Metal).setParameter("u_reflectMap", *m_backgroundSprite.getTexture()); //std::function<const sf::Texture&()> f = std::bind(&MapController::getBackgroundTexture, this); //Shader::UniformBinding::Ptr fb = std::make_unique<Shader::FunctionBinding<const sf::Texture&>>(m_shaderResource.get(Shader::Type::Metal), "u_reflectMap", f); //m_shaderResource.addBinding(fb); m_solidDrawable.buildShadow(m_shaderResource.get(Shader::Type::GaussianBlur)); //generate some random hat spawns for(auto i = 0u; i < 40u; ++i) { m_hatSpawns.emplace_back(static_cast<float>(Util::Random::value(40, 1880)), static_cast<float>(Util::Random::value(-30, 1000))); } //remove points inside nodes for (const auto& n : nodes) { sf::FloatRect nodebox(n.position, n.size); m_hatSpawns.erase(std::remove_if(m_hatSpawns.begin(), m_hatSpawns.end(), [&nodebox](const sf::Vector2f& p) { return nodebox.contains(p); }), m_hatSpawns.end()); } spawnHat(); }
Player::Player(unsigned int texture) :chracterTexture(texture){ SpriteSheet playerSprite = SpriteSheet(texture, 8, 4, 18); sprite = playerSprite; }