Exemplo n.º 1
0
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;
	}
}
Exemplo n.º 2
0
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;
    }
  }
}
Exemplo n.º 3
0
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);
	}
}
Exemplo n.º 4
0
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); }
	}
}
Exemplo n.º 5
0
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();
}
Exemplo n.º 6
0
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;
	}
}
Exemplo n.º 7
0
//=============================================================================
// 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



}
Exemplo n.º 8
0
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;

}