void shoot(){ switch(weapon){ case 0://bazooka spawnBullet(0); break; case 1://machine gun spawnBullet(1); break; case 2://shotgun for(int i = 0; i < 5; i++){ bullets.at(spawnBullet(1)).setLift(rand() % 3 + (-1)); } break; case 3://revolver spawnBullet(2); break; case 4://disc gun spawnBullet(3); break; case 5://mine spawnBullet(4); break; case 6://grenade launcher - not in game bullets.at(spawnBullet(5)).setLift(1); break; case 7://laser gun spawnBullet(6); break; case 8://minigun bullets.at(spawnBullet(1)).setLift(rand() % 3 + (-1)); break; } }
void Robot::update(int deltaTime) { Vector3 v = velocity * float(deltaTime); translate(v); if (!checkCollision()) { translate(-v); setRandDirection(); } if (shotCooldown) { shotTimer += deltaTime; if (shotTimer >= shotTimerMax) { shotTimer = 0; shotCooldown = false; } } Room * playerRoom = Game::instance->roomAt(Game::instance->player->getWorldPos()); Room * room = Game::instance->roomAt(getWorldPos()); if (playerRoom == room) { Vector3 dir = Game::instance->player->getWorldPos() - getWorldPos(); float ang = atan2f(dir.z, dir.x); ang *= (1.0f / DEG2RAD); setRotation(Vector3(0, -ang + 90, 0)); if (!shotCooldown) { spawnBullet(); shotCooldown = true; } } }
void explode(int x, int y){ int radius = 10; int bullet = 0; for(int i = 0; i < 30; i++){ bullet = spawnBullet(1); bullets.at(bullet).setLift(rand() % 16 + (-7)); bullets.at(bullet).setDir(rand() % 2); bullets.at(bullet).move(x, y); } }
void shootTarget(Unit &u) { if (u.getLastAtk() >= u.getAttackSpeed()) { PosDim blerg; PosDim temp = u.getPosDim(); bool inited = false; float r = u.getAtkRad(); switch (u.getUnitType()) { case 1: if (r_Targeted == r_Empty) { u.setTargetStatus(false); u.setTargetInRange(false); } else { blerg = r_Targeted.getPosDim(); inited = true; } break; default: if (u.isTargetUnit()) { if (u_Targeted == u_Empty || u.getOwner() == u_Targeted.getOwner()) { u.setTargetStatus(false); u.setTargetInRange(false); } else { blerg = u_Targeted.getPosDim(); inited = true; } } else { if (b_Targeted == b_Empty || b_Targeted.getOwner() == u.getOwner()) { u.setTargetStatus(false); u.setTargetInRange(false); } else { blerg = b_Targeted.getPosDim(); inited = true; } } } if (inited) { float dist = sqrt(expo<float>(abs(temp.x - blerg.x), 2) + expo<float>(abs(temp.y - blerg.y), 2)); if (dist <= r) { u.setLastAttack(0.0f); spawnBullet(u, blerg.x, blerg.y); } else { u.setTargetInRange(false); u.setTargetCoords(blerg.x, blerg.y); } } } else { u.setLastAttack(u.getLastAtk() + getDeltaTime()); if (u.getLastAtk() < 0.0f) { u.setLastAttack(0.0f); } } }
void penguin::move(bool keys[]){ // Shoot, if space is pressed. if (keys[KEY_SPACE]) spawnBullet(); // Vertical Movement if (keys[KEY_UP] && keys[KEY_DOWN]) dirY = 0; else if(keys[KEY_UP]) dirY = -1; else if(keys[KEY_DOWN]) dirY = 1; else dirY = 0; // Horizontal movement if (keys[KEY_LEFT] && keys[KEY_RIGHT]) dirX = 0; else if (keys[KEY_LEFT]) dirX = -1; else if (keys[KEY_RIGHT]) dirX = 1; else dirX = 0; penguin::update(); }
void HumanPlayer::loop(const sf::Time& dt) { Player::loop(dt); const double cooldown = .1; static double lastShot = cooldown; lastShot += dt.asSeconds(); const sf::Vector2f mouse = (sf::Vector2f) sf::Mouse::getPosition(*Game::getInstance()->window); if (sf::Mouse::isButtonPressed(sf::Mouse::Left) && lastShot >= cooldown) { spawnBullet(sf::normalize(mouse - getPosition()) * (float) Bullet::speed); lastShot = 0.0; } int buttons = 0; sf::Vector2f cm(0, 0); if (sf::Keyboard::isKeyPressed(sf::Keyboard::W)) { cm.y -= 1.0; buttons++; } if (sf::Keyboard::isKeyPressed(sf::Keyboard::S)) { cm.y += 1.0; buttons++; } if (sf::Keyboard::isKeyPressed(sf::Keyboard::A)) { cm.x -= 1.0; buttons++; } if (sf::Keyboard::isKeyPressed(sf::Keyboard::D)) { cm.x += 1.0; buttons++; } if (buttons % 4 != 0) { cm = sf::normalize(cm); velocity = cm * (float) speed; } }
//============================================================================= // Update all game items //============================================================================= void Spacewar::update() { if(input->isKeyDown(ESC_KEY)) { exitGame(); } if(ship.getActive()) { ship.update(frameTime, shoot); if(powerupActive) { shootTime += 3*frameTime; powerupTime += frameTime; if(powerupTime >= POWERUP_DURATION) { powerupActive = false; } } else { shootTime += frameTime; } if(shoot && shootTime >= SHIP_SHOOT_DELAY) { spawnBullet(VECTOR2(ship.getX()+(shipNS::SCALE*ship.getWidth()*3)/4, ship.getY()+(shipNS::SCALE*ship.getHeight()/2)), VECTOR2(bulletNS::SPEED,0)); audio->playCue(PEW); shootTime = 0; } } if(timeSincePowerupSpawn >= POWERUP_FREQUENCY) { spawnPowerup(VECTOR2(GAME_WIDTH,(GAME_HEIGHT/4)+rand()%(GAME_HEIGHT/2)),VECTOR2(-1*powerNS::SPEED,0)); timeSincePowerupSpawn = 0; } timeSincePowerupSpawn += frameTime; for(int i=0; i<MAX_GUNS; i++) { if(guns[i].getActive()) { guns[i].update(frameTime, shoot); if(shoot) { spawnEnemyBullet(VECTOR2(guns[i].getX()+(gunNS::SCALE*guns[i].getWidth()*3)/4, guns[i].getY()+(gunNS::SCALE*guns[i].getHeight()*3)/8), VECTOR2(enemyBulletNS::SPEED,0)); audio->playCue(PEW); } } } for(int i=0; i<MAX_BULLETS; i++) { if(bullets[i].getActive()) bullets[i].update(frameTime); } for(int i=0; i<MAX_ENEMY_BULLETS; i++) { if(enemyBullets[i].getActive()) enemyBullets[i].update(frameTime); } if(power.getActive()) { power.update(frameTime); } seconds_since_start = difftime( time(0), start); //Begin Unarmed Asteroid spawning if(seconds_since_start == 10) asterGroupSize = 3; if(seconds_since_start == 20) asterGroupSize = 5; if(seconds_since_start == 30) asterGroupSize = 8; if(seconds_since_start == 40) asterGroupSize = 10; if(seconds_since_start == 60) asterGroupSize = 20; asteroidSpawnTime += frameTime; if(asteroidCounter < asterGroupSize && asteroidCounter < MAX_ASTEROIDS && asteroidSpawnTime > ASTEROID_SPAWN_DELAY) { VECTOR2 newpos = VECTOR2(GAME_WIDTH, rand() % ((GAME_HEIGHT*7)/8+asteroidNS::HEIGHT)-GAME_HEIGHT/8-asteroidNS::HEIGHT); VECTOR2 newdir = VECTOR2(GAME_WIDTH/6, rand() % GAME_HEIGHT) - newpos; D3DXVec2Normalize(&newdir,&newdir); spawnAsteroid(newpos,newdir*asteroidNS::SPEED); asteroidCounter++; asteroidSpawnTime = 0; } for(int i = 0; i < asteroidCounter; i++) { if(!asteroids[i].getActive()) asteroidCounter--; } for(int i=0; i<MAX_ASTEROIDS; i++) { if(asteroids[i].getActive()) asteroids[i].update(frameTime); if(i%2) asteroids[i].setRadians(asteroids[i].getRadians() + ASTEROID_ROTATION_SPEED);//if an even index of the asteroids array, then rotate clockwise else asteroids[i].setRadians(asteroids[i].getRadians() - ASTEROID_ROTATION_SPEED);//if an odd index of the asteroids array, then rotate counter clockwise } //End Unarmed Asteroid spawning }
int main() { init(); enterMenu(0); int cloudScroll = 0; int loopSlower = 0; bool shootCoolDown = true; int reloadTimer = 0; //GAME LOOP while (true) { //INPUT if((REG_KEYINPUT & KEY_RIGHT) == 0){ tryMove(2,0,player.getWidth()-2,player.getHeight()/2,player); player.setRunning(true); player.setDir(true); } if((REG_KEYINPUT & KEY_LEFT) == 0){ tryMove(-2,0,0,player.getHeight()/2,player); player.setRunning(true); player.setDir(false); } if((REG_KEYINPUT & KEY_UP) == 0 || (REG_KEYINPUT & KEY_B) == 0){ if(player.getLanded()){ player.jump(); player.updateFrame(); } player.setJumpHeight(player.getJumpHeight()+4); } if((REG_KEYINPUT & KEY_A) == 0){ if(shootCoolDown){ if(weapon == 8){ if(player.getDir())tryMove(-2,0,0,player.getHeight()/2,player); else tryMove(2,0,player.getWidth()-2,player.getHeight()/2,player); }else if(weapon == 1){ if(player.getDir())tryMove(-1,0,0,player.getHeight()/2,player); else tryMove(1,0,player.getWidth()-2,player.getHeight()/2,player); } shoot(); shootCoolDown = false; reloadTimer = 0; } } //Player movement if(player.getJumping()){ if(!tryMove(0,-3,player.getWidth()/2,0,player)){ player.setJumping(false); } }else{ if(!tryMove(0,2,player.getWidth()/2,player.getHeight(),player)){ tryMove(0,1,player.getWidth()/2,player.getHeight(),player); player.setLanded(true); player.setJumping(false); }else{ player.setLanded(false); } } //Monster Movement for(int i = 0; i < enemies.size(); i++){ if(!enemies.at(i).isDead()){ if(enemies.at(i).getDir()){ if(!tryMove(1,0,enemies.at(i).getWidth(),(enemies.at(i).getHeight()/2)+1,enemies.at(i))){ enemies.at(i).setDir(false); } }else{ if(!tryMove(-1,0,0,(enemies.at(i).getHeight()/2)+1,enemies.at(i))){ enemies.at(i).setDir(true); } } tryMove(0,2,enemies.at(i).getWidth()/2,enemies.at(i).getHeight(),enemies.at(i)); ObjBuffer[i+3].attr0 &= ~(ATTR0_HIDE); }else{ ObjBuffer[i+3].attr0 |= ATTR0_HIDE; } } //Bullet movement for(int i = 0; i < bullets.size(); i++){ if(!bullets.at(i).isDead()){ int yMove = 0; if(rand() % 3 == 0)yMove = bullets.at(i).getLift(); if(bullets.at(i).getType() == 4){ tryMove(0,1,bullets.at(i).getWidth(),bullets.at(i).getHeight()+4,bullets.at(i)); }else if(bullets.at(i).getType() == 6){ if(player.getDir()){ ObjBuffer[i+24].attr1 &= ~(ATTR1_HFLIP); bullets.at(i).move(player.getX()+8, player.getY()); }else{ ObjBuffer[i+24].attr1 |= ATTR1_HFLIP; bullets.at(i).move(player.getX()-8, player.getY()); } if(bullets.at(i).charge()){ bullets.at(i).setDead(true); int number = 0; if(player.getDir())number = (SCREEN_WIDTH - player.getX())/8; else number = (0 + player.getX())/8; for(int i = 0; i < number; i++){ spawnBullet(7); } } }else if(bullets.at(i).getType() == 7){ if(bullets.at(i).charge())bullets.at(i).setDead(true); }else{ if(bullets.at(i).getDir()){ if(!tryMove(2,yMove,bullets.at(i).getWidth(), bullets.at(i).getHeight(), bullets.at(i))){ if(bullets.at(i).getType() == 3 && !bullets.at(i).getBounce()){ bullets.at(i).setBounce(true); bullets.at(i).setDir(false); }else{ bullets.at(i).setDead(true); if(bullets.at(i).getType() == 0 || bullets.at(i).getType() == 4){ explode(bullets.at(i).getX(), bullets.at(i).getY()); } } } }else{ if(!tryMove(-2,yMove,bullets.at(i).getWidth(), bullets.at(i).getHeight(), bullets.at(i))){ if(bullets.at(i).getType() == 3 && !bullets.at(i).getBounce()){ bullets.at(i).setBounce(true); bullets.at(i).setDir(true); }else{ bullets.at(i).setDead(true); if(bullets.at(i).getType() == 0 || bullets.at(i).getType() == 4){ explode(bullets.at(i).getX(), bullets.at(i).getY()); } } } } } ObjBuffer[i+24].attr0 &= ~(ATTR0_HIDE); }else{ ObjBuffer[i+24].attr0 |= ATTR0_HIDE; } } for(int i = 0; i < enemies.size(); i++){ if(!enemies.at(i).isDead()){ if(checkEntityCollision(player, enemies.at(i))){ player.setDead(true); } for(int k = 0; k < bullets.size(); k++){ if(!bullets.at(k).isDead()){ if(checkEntityCollision(bullets.at(k), enemies.at(i))){ enemies.at(i).hurt(bullets.at(k).getDamage()); if(bullets.at(k).getType() != 3 && bullets.at(k).getType() != 6 && bullets.at(k).getType() != 7){ bullets.at(k).setDead(true); if(bullets.at(k).getType() == 0 || bullets.at(k).getType() == 4){ explode(bullets.at(k).getX(), bullets.at(k).getY()); } } break; } } } } } if(checkEntityCollision(player, crate)){ crate.setDead(true); weapon = crate.getWeapon(); score++; } if(crate.isDead()){ switch(rand() % 7){ case 0:crate.move(80,32); break; case 1:crate.move(150,32); break; case 2:crate.move(30,64); break; case 3:crate.move(200,64); break; case 4:crate.move(115,104); break; case 5:crate.move(80,144); break; case 6:crate.move(150,144); break; } int newWep = 0; do newWep = rand() % 9; while(newWep == weapon || newWep == 6); crate.setWeapon(newWep); crate.setDead(false); } //General Slow things if(loopSlower % 7 == 0){ cloudScroll++; REG_BG3HOFS = cloudScroll; SetTile(30, 14, 19, 16+rand()%5); SetTile(30, 15, 19, 16+rand()%5); player.updateFrame(); for(int i = 0; i < enemies.size(); i++){ if(!enemies.at(i).isDead()){ enemies.at(i).updateFrame(); } } ObjBuffer[2].attr2 = ATTR2_ID8(player.getFrame()); for(int i = 0; i < enemies.size(); i++){ ObjBuffer[i+3].attr2 = ATTR2_ID8(enemies.at(i).getFrame()); } } reloadTimer++; if(weapon == 0 || weapon == 5 || weapon == 6 || weapon == 7){ if(reloadTimer >= 60){ shootCoolDown = true; } }else if(weapon == 2 || weapon == 4){ if(reloadTimer >= 45){ shootCoolDown = true; } }else if (weapon == 3){ if(reloadTimer >= 20){ shootCoolDown = true; } }else if(weapon == 1){ if(reloadTimer >= 10){ shootCoolDown = true; } }else{ if(reloadTimer >= 5){ shootCoolDown = true; } } if(reloadTimer > 1000)reloadTimer = 60; //Monster spawner if(rand()%100 == 0){ spawnMonster(); } //Player state updates if(player.getJumping())player.setState(2); else if(player.getRunning())player.setState(1); else player.setState(0); if(!player.getDir()){ ObjBuffer[0].attr1 |= ATTR1_HFLIP; ObjBuffer[2].attr1 |= ATTR1_HFLIP; }else{ ObjBuffer[0].attr1 &= ~(ATTR1_HFLIP); ObjBuffer[2].attr1 &= ~(ATTR1_HFLIP); } if(weapon == 8)ObjBuffer[0].attr0 |= ATTR0_SHAPE(1); else ObjBuffer[0].attr0 &= ~(ATTR0_SHAPE(1)); ObjBuffer[0].attr2 = ATTR2_ID8(22+weapon); for(int i = 0; i < enemies.size(); i++){ if(!enemies.at(i).isDead()){ if(!enemies.at(i).getDir())ObjBuffer[i+3].attr1 |= ATTR1_HFLIP; else ObjBuffer[i+3].attr1 &= ~(ATTR1_HFLIP); } } player.update(); if(player.isDead())enterMenu(2); //Render if(!player.getDir()){ if(weapon != 8)SetObjectX(0, player.getX()-4); else{ if(player.getX()-12 <= 0) SetObjectX(0, 0); else SetObjectX(0, player.getX()-12); } }else{ SetObjectX(0, player.getX()+4); } SetObjectY(0, player.getY()+1); SetObjectX(1, crate.getX()); SetObjectY(1, crate.getY()); SetObjectX(2, player.getX()); SetObjectY(2, player.getY()); for(int i = 0; i < enemies.size(); i++){ if(!enemies.at(i).isDead()){ SetObjectX(i+3, enemies.at(i).getX()); SetObjectY(i+3, enemies.at(i).getY()); } } for(int i = 0; i < bullets.size(); i++){ if(!bullets.at(i).isDead()){ SetObjectX(i+24, bullets.at(i).getX()); SetObjectY(i+24, bullets.at(i).getY()); } } drawText(112,10,toString(score)); WaitVSync(); UpdateObjects(); clearText(); loopSlower++; } return 0; }