Exemple #1
0
//-------------------------------------------------------------------------
// @brief 
//-------------------------------------------------------------------------
void LaserManager::addInstance( const Vector3& position, const Vector3& direction, const ShaderInstance& shaderInstance, bool player_laser /*= false*/)
{
    //probably need to rotate the laser to the requested direction currently its standing straight up from 0,0,0 along the y-axis
    if (player_laser)
    {
        if (m_currentNumberOfPlayerLasers < m_maxLasers)
        {
            LasterRenderPair pair = std::make_pair(Laser(position, direction, shaderInstance), m_renderInstancePool.back());
            pair.second->setGeometryInstance(&(m_enemyLaser->getMeshData()[0]->getGeometryInstance()));

            m_worldPlayerTransforms.push_back(pair);
            ++m_currentNumberOfPlayerLasers;
            m_renderInstancePool.pop_back();
        }
    }
    else
    {
        if (m_currentNumberOfEnemyLasers < m_maxLasers)
        {
            LasterRenderPair pair = std::make_pair(Laser(position, direction, shaderInstance), m_renderInstancePool.back());
            pair.second->setGeometryInstance(&(m_enemyLaser->getMeshData()[0]->getGeometryInstance()));

            m_worldEnemyTransforms.push_back(pair);
            ++m_currentNumberOfEnemyLasers;
            m_renderInstancePool.pop_back();
        }
    }
}
void ProjectileHandler::AddProjectile(std::vector<Laser> &Lasers, float OriginX, float OriginY,
                                      float DestinationX, float DestinationY, float Damage)
{
    float hypotenuse = trg.GetHypotenuse(OriginX, OriginY,DestinationX, DestinationY);
    float cos_x      = trg.GetCosX(OriginX, DestinationX, hypotenuse);
    float sin_y      = trg.GetSinY(OriginY, DestinationY, hypotenuse);
    Lasers.push_back(Laser(OriginX, OriginY, cos_x, sin_y, Damage));
}
Exemple #3
0
void Shooter::shoot(bool key, std::list<Laser> &shoots)
{
  Uint lastTick = SDL_GetTicks();

  if (key && _lastTimeShoot + shootCooldown < lastTick)
  {
    std::clog << "Shooter tire un laser" << std::endl;
    shoots.push_back(Laser(_x + _sprite.w() / 2, _y - Laser::sprite().h(), Laser::UP));
    _lastTimeShoot = lastTick;
  }
}
void ShotAndLaser(
    bool button,    // 버튼 상태 (눌렸으면 true)
    int min_power,  // 에너지 샷이 발사될 최소한의 파워
    int max_gauge   // 연사 게이지의 최대치
) {
    // 모은 에너지, 연사 게이지
    static int power=0, gauge=0;

    // 버튼을 누르고 있을 때:
    if (button) {

        // 에너지가 부족할 경우:
        // 에너지를 늘려주고 연사 게이지를 최대값으로 하여
        // 샷을 발사함. 구체적인 처리는 Shot 함수에서 수행하기로 함.
        if (power<min_power) {
            power++;
            gauge=max_gauge;
            Shot();
        }

        // 에너지가 충분한 경우:
        // 연사 게이지를 0으로 하고 레이저를 발사.
        // 구체적인 처리는 Laser 함수에서 수행하기로 함.
        else {
            gauge=0;
            Laser();
        }
    }

    // 버튼을 누르고 있지 않을 때:
    else {

        // 연사 게이지가 0보다 클 경우:
        // 보통 샷을 쏘고 연사 게이지를 1 감소시킴.
        if (gauge>0) {
            Shot();
            gauge--;
        }

        // 에너지를 0으로 함.
        power=0;
    }
}
void spindle_run(int8_t direction) //, uint16_t rpm) 
{
  if (direction != current_direction) {
    plan_synchronize();
    if (direction) {
	Laser();
      if(direction > 0) {
        SPINDLE_DIRECTION_PORT &= ~(1<<SPINDLE_DIRECTION_BIT);
      } else {
        SPINDLE_DIRECTION_PORT |= 1<<SPINDLE_DIRECTION_BIT;
      }
      SPINDLE_ENABLE_PORT |= 1<<SPINDLE_ENABLE_BIT;
    } else {
      spindle_stop();
      Laser_Stop();     
    }
    current_direction = direction;
  }
}
Exemple #6
0
void Column::shoot(std::list<Laser> &lasers)
{
  Uint lastTick = SDL_GetTicks();

  while (lastTick - _lastShoot > _shootCooldown)
  {
    std::clog << "Enemies shoot" << std::endl;

    Uint y = _y;
    Uint tmp = _y;
    for (Enemy &enemy : _enemies)
    {
      tmp += enemy.h();
      if (enemy.isAlive())
      {
	y = tmp;
      }
      tmp += 10;
    }
    lasers.push_back(Laser(_x + _width / 2, y, Laser::DOWN));
    _lastShoot += _shootCooldown;
    _shootCooldown = (rand() % 5 + 2) * 1000;
  }
}