@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); } } }
@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()); } } } }
@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(); } } } }