package catalystsurvival.entity; import catalystsurvival.display.Camera; import catalystsurvival.util.gl.GlHelpers; import catalystsurvival.util.gl.texture.TextureReference; import catalystsurvival.util.math.ItemStack; import catalystsurvival.util.math.random.RandomHelpers; import catalystsurvival.util.math.vec.Vec2d; import catalystsurvival.world.chunk.Chunk; import catalystsurvival.world.layer.Layer; public class EntityItem extends EntityVertical { private ItemStack stack; private double height = 0; private double height_speed; private int pickup_time = 100; public EntityItem(Vec2d pos, ItemStack stack) { super(pos, stack.item.texture, new Vec2d(0.5, 0.5)); this.opaqueTile = true; this.stack = stack; this.angle = RandomHelpers.randrange(rand, 360); height_speed = RandomHelpers.randrange(rand, 10000) / 200000.0; } @Override public void tick(Chunk chunk, Layer layer) { super.tick(chunk, layer); height += height_speed; height_speed -= 0.001; pickup_time -= 1; if(pickup_time < 0) { pickup_time = 0; } if(height <= 0) { height_speed = 0; } else { moveForward(0.01); } if(pickup_time == 0) { for(Entity e : layer.getNearbyEntities(pos, 1)) { if(e instanceof EntityInventory) { // Pick the stack up if its an inventory stack.item.onPickedUp(stack, layer, chunk, e); } } } // Kill this entity if the stack is empty if(stack.isEmpty()) { kill(); return; } } @Override public void render(Vec2d pos, Camera camera, TextureReference tex, Vec2d size) { GlHelpers.pushMatrix(); GlHelpers.translate3(0, 0, height); super.render(pos, camera, tex, size); GlHelpers.popMatrix(); } }