Created a functional boss fight

This commit is contained in:
josua 2019-09-21 12:54:26 +10:00
parent 26d55ab6ca
commit d4426b8b3c
12 changed files with 123 additions and 20 deletions

View File

@ -47,7 +47,7 @@ public class BossBars
}
for(IBossBar bossbar : toRemove) {
bossbars.remove(toRemove);
bossbars.remove(bossbar);
}
}
}

View File

@ -42,12 +42,6 @@ public class EntityBoss extends EntityVertical implements IBossBar
this.noise_walk = new OpenSimplexNoise(rand.nextLong());
this.noise_spawn = new OpenSimplexNoise(rand.nextLong());
Main.player.gun_level = 4;
Main.player.defence_level = 4;
Main.player.getInventory().setItem(new ItemStack(Items.HEALTH_POTION, 100, (byte)50), 0);
Main.player.getInventory().setItem(new ItemStack(Items.TNT, 100, (byte)10), 1);
Main.player.getInventory().setItem(new ItemStack(Items.GRAPPLING_HOOK, 100, (byte)2), 2);
BossBars.register(this);
}
@ -223,4 +217,9 @@ public class EntityBoss extends EntityVertical implements IBossBar
Items.AMMO, RandomHelpers.randrange(rand, 200), (byte)50)));
layer.spawnEntity(new EntityItem(pos.copy(), new ItemStack(Items.GRAPPLING_HOOK, 1, (byte)2)));
}
@Override
public void push(double amount, double angle) {
super.push(amount, angle / 10.0);
}
}

View File

@ -61,8 +61,8 @@ public class EntityGrapplingHook extends EntityVertical
}
if(layer instanceof LayerGenRememberPlayerPos) {
LayerGenRememberPlayerPos lgrpp = (LayerGenRememberPlayerPos)layer;
if(layer.layergen instanceof LayerGenRememberPlayerPos) {
LayerGenRememberPlayerPos lgrpp = (LayerGenRememberPlayerPos)layer.layergen;
entity.pos = lgrpp.getPlayerPos();
}

View File

@ -186,7 +186,7 @@ public class EntityPlayer extends EntityVertical implements EntityAlive, EntityI
int d = (int)(1 + gun_level / 4.0);
int b = (int)(1 + gun_level / 4.0);
Main.world.getLayer().spawnEntity(new EntityBullet(pos.copy(), this, angle + this.angle,
20*d*d, 5/b, 60));
20*d*d, 5/b, 60).withHeight(0, height));
}
}

View File

@ -4,11 +4,10 @@ import java.util.ArrayList;
import java.util.Random;
import shootergame.Main;
import shootergame.util.math.vec.Vec2d;
import shootergame.world.World;
import shootergame.world.layer.Layer;
import shootergame.world.layer.layergen.LayerGenBossArena;
import shootergame.world.layer.layergen.LayerGenCaves;
import shootergame.world.layer.layergen.LayerGenEarth;
import shootergame.world.layer.layergen.LayerGenLavaCaves;
public class Layers
@ -18,7 +17,7 @@ public class Layers
public static void init(long seed)
{
// Create all the layers
EARTH = new Layer(new Random(seed), new LayerGenBossArena(), 0);
EARTH = new Layer(new Random(seed), new LayerGenEarth(), 0);
CAVES = new Layer(new Random(seed), new LayerGenCaves(), 1);
LAVA_CAVES = new Layer(new Random(seed), new LayerGenLavaCaves(), 2);

View File

@ -1,6 +1,7 @@
package shootergame.init;
import shootergame.tiles.Tile;
import shootergame.tiles.TileBossPortal;
import shootergame.tiles.TileChest;
import shootergame.tiles.TileDirt;
import shootergame.tiles.TileFire;
@ -42,4 +43,5 @@ public class Tiles
public static final Tile CHEST = new TileChest("chest");
public static final Tile LANTERN = new TileLantern("lantern");
public static final Tile WALL_UNBREAKABLE = new TileWallUnbreakable("wall_unbreakable");
public static final Tile BOSS_PORTAL = new TileBossPortal("boss_portal");
}

View File

@ -1,14 +1,11 @@
package shootergame.items;
import shootergame.Main;
import shootergame.entity.Entity;
import shootergame.entity.EntityGrapplingHook;
import shootergame.init.Layers;
import shootergame.init.Textures;
import shootergame.util.math.ItemStack;
import shootergame.util.math.MathHelpers;
import shootergame.util.math.vec.Vec2d;
import shootergame.world.World;
import shootergame.world.chunk.Chunk;
import shootergame.world.layer.Layer;

View File

@ -0,0 +1,85 @@
package shootergame.tiles;
import java.util.Random;
import mainloop.task.IMainloopTask;
import shootergame.Main;
import shootergame.entity.Entity;
import shootergame.entity.player.EntityPlayer;
import shootergame.init.Textures;
import shootergame.util.math.TileState;
import shootergame.util.math.vec.Vec2d;
import shootergame.util.math.vec.Vec2i;
import shootergame.world.chunk.ChunkEventHandler;
import shootergame.world.layer.Layer;
import shootergame.world.layer.layergen.LayerGenBossArena;
public class TileBossPortal extends TileVertical
{
private static Random rand = new Random();
public TileBossPortal(String id) {
super(id, Textures.TILE_BOSS_PORTAL, new Vec2d(2, 2));
this.emitsLight = true;
this.opaqueTile = true;
this.tileHitbox = 0.4;
this.tileSolid = true;
}
@Override
public double getLightLevel(TileState state, Vec2i pos) {
return 0.6;
}
@Override
public void onActivated(Layer layer, Vec2i tpos, Entity entity, TileState state) {
super.onActivated(layer, tpos, entity, state);
if(entity instanceof EntityPlayer)
{
// Get the player and set some player variables
EntityPlayer ep = (EntityPlayer)entity;
ep.height = 8;
// Create the boss arena
LayerGenBossArena layergen = new LayerGenBossArena();
layergen.spawnPlayer(ep);
layer.breakFrontTile(tpos);
Main.world.setLayer(new Layer(rand, layergen, rand.nextInt()));
// Do the arena falling animation
Main.mainloop.register(new IMainloopTask()
{
int stage = 0;
@Override
public void MainLoopUpdate()
{
if(stage == 0)
{
// Only do this if the world is loaded
if(ChunkEventHandler.loaded)
{
ep.height -= 0.05;
if(ep.height <= 0) {
ep.height = 0;
}
}
}
}
@Override
public boolean MainLoopRepeat() {
return ep.height > 0;
}
@Override
public boolean MainLoopDelay(long millis) {
return millis > 10;
}
});
}
}
}

View File

@ -3,7 +3,6 @@ package shootergame.world.layer;
import java.util.ArrayList;
import java.util.Random;
import bdf.types.BdfObject;
import shootergame.Main;
import shootergame.display.Camera;
import shootergame.entity.Entity;

View File

@ -18,6 +18,7 @@ public class LayerGenBossArena extends LayerGen implements LayerGenRememberPlaye
private final Vec2i center = new Vec2i(0, 0);
private final int size = 10;
private Vec2d player_pos = new Vec2d(0, 0);
private Random rand = new Random();
@Override
public void generateChunk(Chunk chunk, Layer layer, long seed, Random rand, Vec2i pos)
@ -103,7 +104,9 @@ public class LayerGenBossArena extends LayerGen implements LayerGenRememberPlaye
@Override
public void spawnPlayer(EntityPlayer player) {
this.player_pos = player.pos.copy();
player.pos = new Vec2d(0, 0);
player.pos = new Vec2d(
RandomHelpers.randrange(rand, -size + 2, size - 2),
RandomHelpers.randrange(rand, -size + 2, size - 2));
}
}

View File

@ -34,6 +34,14 @@ public class LayerGenLavaCaves extends LayerGen
RandomHelpers.randrange(rand, 16));
}
boolean hasBossPortal = PortalSpawnrates.LavaCaveBossArenaPortal(rand);
Vec2i boss_portal_pos = null;
if(hasBossPortal) {
boss_portal_pos = new Vec2i(
RandomHelpers.randrange(rand, 16),
RandomHelpers.randrange(rand, 16));
}
// Get some noise generators
OpenSimplexNoise noisegen_n = new OpenSimplexNoise(new Random(seed + layer.id).nextLong());
@ -79,6 +87,13 @@ public class LayerGenLavaCaves extends LayerGen
chunk.setFrontTile(new TileState(Tiles.LADDER_UP, (short)1), ladder_pos);
}
if(
hasBossPortal &&
chunk.getBackTile(boss_portal_pos).tile == getTileDestroyed().tile &&
chunk.getFrontTile(boss_portal_pos).tile == Tiles.VOID) {
chunk.setFrontTile(Tiles.BOSS_PORTAL.getDefaultState(), boss_portal_pos);
}
Vec2i chest_pos = new Vec2i(
RandomHelpers.randrange(rand, Chunk.CHUNK_SIZE.mx),
RandomHelpers.randrange(rand, Chunk.CHUNK_SIZE.my));

View File

@ -7,10 +7,14 @@ import shootergame.util.math.random.RandomHelpers;
class PortalSpawnrates
{
static boolean WorldCavePortal(Random rand) {
return RandomHelpers.randrange(rand, 2) == 0;
return RandomHelpers.randrange(rand, 10) == 0;
}
static boolean CaveLavaCavePortal(Random rand) {
return RandomHelpers.randrange(rand, 2) == 0;
return RandomHelpers.randrange(rand, 10) == 0;
}
static boolean LavaCaveBossArenaPortal(Random rand) {
return RandomHelpers.randrange(rand, 5) == 0;
}
}