コード例 #1
0
bool EliteEnemyShip::update(XMFLOAT3 pos, ID3D11Device* device)
{
	bool ret = false;
	advance();
	if (damageFrames > 0)
		damageFrames--;

	for (unsigned int i = 0; i < bullets.size(); i++)
	{
		Bullet* b = bullets.at(i);
		b->advance();
		if (b->getFrames() == 0)
		{
			bullets.erase(remove(bullets.begin(), bullets.end(), b), bullets.end());
			delete b;
		}
	}

	XMFLOAT3 bpos = body->getPos();
	if ((bpos.x-pos.x)*(bpos.x-pos.x) + (bpos.y-pos.y)*(bpos.y-pos.y) + (bpos.z-pos.z)*(bpos.z-pos.z) < 2500)
	{
		if (shootingFrames == 0)
		{
			fireLaser(pos, device);
			shootingFrames = 75;
			ret = true;
		}
		else
			shootingFrames--;
	}
	return ret;
}
コード例 #2
0
void WeaponRack::internalOnEvent(EventIdT action,
                                 Property::Value payload,
                                 GameHandle module,
                                 GameHandle sender)
{
	switch(action)
	{
	case ID::GOE_FIRE_ROCKET:
		fireRocket();
		break;

	case ID::GOE_FIRE_LASER:
		fireLaser();
		break;

	case ID::GOE_SET_WEAPON_TARGET:
		mTarget = payload;
		infolog << "WeaponRack_New Target: " << mTarget;
		break;
		
	case ID::GOE_REINITIALIZE:
		mRocketAmmo = ROCKET_AMMO_START_AMOUNT_FOR_TESTING;
		updateGuiAmmo();
		break;

	default:
		throw std::logic_error("un nu?");
	}
}
コード例 #3
0
void Player::update()
{	
	fireLaser();

	handleInput();

	m_velocity = handleMovement();
	
	m_position += m_velocity;
	handleCollisions();

	//std::cout << "Enemy Size: " << EnemyManager::instance()->getEnemies().size() << "\n";
	//std::cout << "Asteroid Size: " << AsteroidManagement::instance()->getAsteroids().size() << "\n";
	//std::cout << "PLayer Laser Size: " << LaserHandler::instance()->getPlayerLasers().size() << "\n";
	//std::cout << "Enemy Laser Size: " << LaserHandler::instance()->getEnemyLasers().size() << "\n\n\n";
}
コード例 #4
0
ファイル: KhetState.cpp プロジェクト: aysylu/khet-engine
// performs move on this state, assumes move is valid
// any move it makes is valid, of course
// because gen() performs validation of moves
// before adding to the vector of moves
void KhetState::imake(KhetMove mv) {
  //move piece
  KhetPiece targetPiece = board[mv.toFile][mv.toRank];
  if (targetPiece.type != EMPTY &&
      mv.fromRot == mv.toRot) {//if its rotation target wont be empty
    assert(mv.piece.type == SCARAB);
    assert(targetPiece.type == ANUBIS || targetPiece.type == PYRAMID);
    //scarab swap
    board[mv.fromFile][mv.fromRank] = targetPiece;
    board[mv.toFile][mv.toRank] = mv.piece;
  } else {
    board[mv.fromFile][mv.fromRank].type = EMPTY;
    board[mv.toFile][mv.toRank] = mv.piece;  
    board[mv.toFile][mv.toRank].rot = (Rotation)mv.toRot;//mv.piece is original piece
  }
  key = hashBoard();
  //shoot laser
  KhetPiece sph;
  int tFile;
  int tRank;
  //set inital laser location
	if(ctm == SILVER) {
    sph = board[9][0];
    tFile = 9;
    tRank = 0;
  } else {
    sph = board[0][7];
    tFile = 0;
    tRank = 7;
  }

  assert(board[tFile][tRank].type == SPHINX && board[tFile][tRank].color == ctm);

  Rotation laserDir = sph.rot;

  LaserHitInfo laserHitInfo = fireLaser(board, tFile, tRank, laserDir, 0, 0);
  
  
  //piece is to be removed from board
  //handle it approrpiately
  targetPiece = laserHitInfo.hitPiece;
  tFile = laserHitInfo.hitFile;
  tRank = laserHitInfo.hitRank;

  switch(targetPiece.type) {
    case ANUBIS:
      //anubis can take hit on front
      if(!isOppositeDirections(laserHitInfo.laserDir, targetPiece.rot)) {
        board[tFile][tRank].type = EMPTY;
      }
      break;
    case PHAROAH:
      board[tFile][tRank].type = EMPTY;
      gameOver = true;
      winner = (targetPiece.color == RED) ? SILVER : RED;
      break;
    case PYRAMID:
      board[tFile][tRank].type = EMPTY;
      break;
    case SCARAB:
      cout << "ERROR: scarab being removed" << endl;
      break;
    case SPHINX://sphinx cant be affected
      break;
    case EMPTY:
      break;
    default:
      cout << "Unknown laser target " << targetPiece.type << endl;
  }
  //change player
  ctm = (ctm == RED) ? SILVER : RED;
}