Example #1
1
  @Override
  public void update(GameContainer container, int delta) throws SlickException {
    Projectile proj;
    playerNextPos = inputHandler.playerInput(player, container.getInput(), delta, sound);
    entity.update(delta, sound);
    if (!isBlocked(playerNextPos, player.getWidth(), player.getHeight())) {
      player.setCoord(playerNextPos);
    }

    player.logic();

    for (int i = 0; i < projectiles.size(); i++) {
      proj = projectiles.get(i);
      proj.update(delta);
      if (isBlocked(proj.pos, proj.getWidth(), proj.getHeight())) {
        projectiles.remove(i);
        sound.playSound(collisionSound);
      } else if (proj.collidesWith(entity) && proj.getOwner() == player) {
        proj.damage(entity);
        projectiles.remove(i);
      } else if (proj.collidesWith(player) && proj.getOwner() == entity) {
        proj.damage(player);
        projectiles.remove(i);
      }
    }
  }
Example #2
0
  @Override
  public void update(float delta) {
    super.update(delta);

    xSpring.value = getBody().getPosition().x;

    if (state == BossState.WAITING) {
      xSpring.target = -50;
      getBody().setTransform(-50, 0, 0);

      if (GameScreen.i.getBossState() == GameScreen.BossState.FIGHTING) {
        GameScreen.i.getBoss().setName("");
        state = BossState.COMING;
        GameScreen.i.setFreezeControls(true);
        timer = 0;
      }
    } else if (state == BossState.COMING) {
      float last = timer;
      timer += delta;

      if (timer > 3 && last <= 3) {
        xSpring.target = -15;
        GameScreen.i.getBoss().setName("HEY...");
      }

      if (timer > 6 && last <= 6) {
        xSpring.target = -8;
        GameScreen.i.getBoss().setName("YOU");
        GameScreen.i.getBoss().setHealth(1.05f);
      }

      if (timer > 7 && last <= 7) {
        xSpring.target = -4;
        GameScreen.i.getBoss().setName("YOU SHOULD");
      }

      if (timer > 8 && last <= 8) {
        xSpring.target = 0;
        GameScreen.i.getBoss().setName("YOU SHOULD PROBABLY");
        GameScreen.i.getBoss().setHealth(1.1f);
      }

      if (timer > 11 && last <= 11) {
        GameScreen.i.getBoss().setName("RRRUUUUUUUNNNNNN!!!!");
        GameScreen.i.setFreezeControls(false);
        GameScreen.i.getPlayer().setSpeed(30);
        GameScreen.i.getBoss().setHealth(99999f);
      }
      if (timer > 11.5f) {
        state = BossState.RUN;
      }
    } else if (state == BossState.RUN) {
      float last = timer;
      timer += delta;

      xSpring.target += delta * 20;

      float limit = GameScreen.i.getPlayer().getBody().getPosition().x - 25f;
      if (xSpring.target < limit) {
        xSpring.target = limit + (float) Math.sin(timer * 2) * 2;
      }

      color =
          Palette.HIGHLIGHT
              .cpy()
              .lerp(Palette.HIGHLIGHT2, (float) (0.5f + Math.sin(timer * 6) * 0.5f));
      if (MathUtils.floor(last) != MathUtils.floor(timer)) size.getVelocity().x = 100;
      if (MathUtils.floor(last + 0.5f) != MathUtils.floor(timer + 0.5f))
        size.getVelocity().x = -100;

      float lastSub = subtimer;
      subtimer += delta;
      if (substate == SubState.ROOT) {
        if (subtimer > 2) {
          substate =
              Array.with(
                      // SubState.BULLETS,
                      SubState.SWEEP)
                  .random();
          subtimer = 0;
        }
      } else if (substate == SubState.BULLETS) {
        substate = SubState.ROOT;
      } else if (substate == SubState.SWEEP) {
        if (MathUtils.floor(lastSub * 0.8f) != MathUtils.floor(subtimer * 0.8f)) {
          // BossSweep sweep = new BossSweep(this, MathUtils.random(1, 3) * 2);
          // GameScreen.i.getEntities().add(sweep);
        }

        if (subtimer > 3) {
          subtimer = 0;
          substate = SubState.ROOT;
        }
      }
    }

    xSpring.update(delta);
    getBody().setLinearVelocity(xSpring.velocity, 0);

    if (GameScreen.i.getCollisionTracker().getCollisions().containsKey(fixture)
        && state == BossState.RUN) {
      for (Fixture fix : GameScreen.i.getCollisionTracker().getCollisions().get(fixture)) {
        Object ud = fix.getBody().getUserData();
        if (ud instanceof Player) {
          ((Player) ud).damage(damageOnTouch, getBody().getPosition());
        }
      }
    }
  }
Example #3
0
  @Override
  public void update(float delta) {
    super.update(delta);

    if (state == BossState.WAITING) {
      getBody().setType(BodyDef.BodyType.KinematicBody);
      getBody().setLinearVelocity(0, 0);
      if (GameScreen.i.getBossState() == GameScreen.BossState.FIGHTING) {
        state = BossState.DROPPING;
        upCount = 2;
      }
    } else if (state == BossState.DROPPING) {
      timer += delta;

      centerSpring.getPosition().set(getBody().getPosition());
      centerSpring.getTarget().set(GameScreen.i.getPlayer().getBody().getPosition().x, 20);
      centerSpring.update(delta);
      getBody().setLinearVelocity(centerSpring.getVelocity());

      if (timer > 1) {
        getBody().setType(BodyDef.BodyType.DynamicBody);
        getBody().setLinearVelocity(0, -300);
        size.getVelocity().set(-50, 50);
        state = BossState.FALL;
        fixture.setSensor(false);
      }
    } else if (state == BossState.CENTER) {
      float last = timer;
      timer += delta;
      getBody().setType(BodyDef.BodyType.DynamicBody);

      if (timer > 1) {
        if (last <= 1) {
          Assets.downy.play();
        }
        centerSpring.getPosition().set(getBody().getPosition());
        centerSpring.update(delta);
        getBody().setLinearVelocity(centerSpring.getVelocity());
      }

      getBody().setGravityScale(0);
      if (getBody().getPosition().dst(centerSpring.getTarget()) < 1f) {
        color = Palette.FOREGROUND;
        size.getVelocity().set(-50, -50);
        Assets.shut.play();
        getBody().setType(BodyDef.BodyType.KinematicBody);
        getBody().setLinearVelocity(0, 0);
        getBody().setAngularVelocity(-5);
        state = BossState.FREEZE;
        timer = 0;
      }
    } else if (state == BossState.FREEZE) {
      float last = timer;
      timer += delta;
      if (timer > 1 && last <= 1) {
        size.getVelocity().set(40, 40);

        spawnChasers();
      }

      if (timer > 1) {
        boolean allDead = true;
        for (LivingEntity e : offspring) {
          if (e.health > 0) allDead = false;
        }

        if (allDead) {
          offspring.clear();
          color = Palette.HIGHLIGHT;
          getBody().setType(BodyDef.BodyType.DynamicBody);
          getBody().setGravityScale(0);
          state = BossState.CHASE;
          Assets.ding.play();
          timer = 0;
        }
      }
    } else if (state == BossState.CHASE) {
      timer += delta;

      centerSpring.getTarget().set(GameScreen.i.getPlayer().getBody().getPosition());
      centerSpring.getPosition().set(getBody().getPosition());
      centerSpring.update(delta);
      getBody().setLinearVelocity(centerSpring.getVelocity());

      if (timer > 3) {
        state = BossState.BACKFORTH;
        timer = 0;
      }
    } else if (state == BossState.BACKFORTH) {
      float last = timer;
      timer += delta;

      if (MathUtils.floor(last % 2) != MathUtils.floor(timer % 2)) {
        float direction = MathUtils.floor(last % 2) == 0 ? 1 : -1;
        centerSpring
            .getTarget()
            .set(
                levelCenter + (10 * direction), GameScreen.i.getPlayer().getBody().getPosition().y);
        Assets.boop.play();
      }

      centerSpring.getPosition().set(getBody().getPosition());
      centerSpring.update(delta);
      getBody().setLinearVelocity(centerSpring.getVelocity());
      centerSpring.setFrequency(4);

      if (timer > 5) {
        centerSpring.setFrequency(1);

        upCount = 0;
        state = BossState.UP;
        getBody().setGravityScale(0);
        fixture.setSensor(true);
        getBody().setLinearVelocity(0, 100);
        timer = 0;
      }
    } else if (state == BossState.UP) {
      if (getBody().getPosition().y > 15) {
        getBody().setGravityScale(0);
        state = BossState.DROPPING;
      }
    } else if (state == BossState.LANDWAIT) {
      timer += delta;

      if (timer > 1) {
        if (upCount == 2) {
          state = BossState.CENTER;
          timer = 0;
          centerSpring.getPosition().set(getBody().getPosition());
          centerSpring.getTarget().set(levelCenter, 14);
        } else {
          size.getVelocity().set(-50, 50);
          upCount++;
          state = BossState.UP;
          timer = 0;
          getBody().setLinearVelocity(0, 100);
          fixture.setSensor(true);
          Assets.uppy.play();
        }
      }
    }
  }