Пример #1
0
void ChestEntity::animate(float delay)
{
  if (appearTimer >= 0.0f) appearTimer -= delay;
  CollidingSpriteEntity::animate(delay);
  if (!isOpen) testSpriteCollisions();
  z = y + 21;

  // trap
  if (timer > 0.0f)
  {
    timer -= delay;
    if (timer <= 0.0f)
    {
      if (trap == TrapStones)
      {
        initFallingGrid();
        for (int i = 0; i < 22; i++) fallRock();
        game().makeShake(0.25f);
      }
      else if (trap == TrapExplosion)
      {
        initFallingGrid();
        new ExplosionEntity(x, y, ExplosionTypeStandard, 12, EnemyTypeNone, true);
        game().addCorpse(x, y, FRAME_CORPSE_SLIME_VIOLET);
        SoundManager::getInstance().playSound(SOUND_BOOM_00);
        game().makeShake(0.25f);
      }
      else // snakes
      {
        new SnakeEntity(x + 1, y, SnakeEntity::SnakeTypeNormal, false);
        new SnakeEntity(x - 1, y, SnakeEntity::SnakeTypeNormal, false);
        new SnakeEntity(x, y + 1, SnakeEntity::SnakeTypeNormal, false);
      }
    }
  }
}
Пример #2
0
void ChestEntity::animate(float delay)
{
  CollidingSpriteEntity::animate(delay);
  if (!isOpen) testSpriteCollisions();
  z = y + height/2 - 5;

  // trap
  if (timer > 0.0f)
  {
    timer -= delay;
    if (timer <= 0.0f)
    {
      initFallingGrid();
      for (int i = 0; i < 22; i++) fallRock();
      SoundManager::getInstance().playSound(SOUND_TRAP);
      game().makeShake(0.25f);
    }
  }
}
Пример #3
0
void CyclopsEntity::computeStates(float delay)
{
  timer -= delay;

  if (timer <= 0.0f)
  {
    if (state == 0) // walking
    {
      if (counter > 0)
      {
        counter--;
        timer = 0.5f;
        creatureSpeed = CYCLOP_SPEED[getHealthLevel()];
        setVelocity(Vector2D(x, y).vectorTo(game().getPlayerPosition(), creatureSpeed ));
      }
      else
      {
        velocity.x = 0.0f;
        velocity.y = 0.0f;
        if (destroyLevel < getHealthLevel())
        {
          state = 3; // charge to destroy
          destroyLevel++;
          counter = destroyLevel + 1;
          timer = 0.9f;
          SoundManager::getInstance().playSound(SOUND_CYCLOP_00);
          initFallingGrid();
        }
        else
        {
          state = 1; // charge to fire
          timer = 0.9f;
          counter = CYCLOP_NUMBER_ROCKS[getHealthLevel()];
          SoundManager::getInstance().playSound(SOUND_CYCLOP_00);

          computeNextRockMissile();
        }
      }
    }
    else if (state == 1) // fire
    {
      state = 2;
      fire();
      timer = CYCLOP_FIRE_DELAY[getHealthLevel()];
    }
    else if (state == 2) // fire end
    {
      if (counter <= 1)
      {
        state = 0;
        timer = 0.2f;
        counter = 10;
      }
      else
      {
        counter--;
        state = 1;
        timer = 0.2f;
        computeNextRockMissile();
      }
    }
    else if (state == 3)
    {
      state = 4; // destroy
      timer = 0.2;
      game().makeShake(0.4f);
      SoundManager::getInstance().playSound(SOUND_CYCLOPS_IMPACT);
      for (int i = 0; i < 10 ; i++) fallRock();
    }
    else if (state == 4)
    {
      if (counter <= 1)
      {
        state = 0;
        timer = 0.2f;
        counter = 10;
      }
      else
      {
        counter--;
        state = 3;
        timer = 0.3f;
      }
    }
  }
}