package shootergame.entity.particle; import java.util.Random; import shootergame.display.Camera; import shootergame.entity.EntityParticle; import shootergame.util.gl.GlHelpers; import shootergame.util.math.MathHelpers; import shootergame.util.math.random.RandomHelpers; import shootergame.util.math.vec.Vec2d; import shootergame.util.math.vec.Vec2i; import shootergame.world.chunk.Chunk; import shootergame.world.layer.Layer; public class ParticleBlood extends EntityParticle { private double r_color; private double speed = 0.1; private double time = 1000; private double height = 0; private double height_velocity = 0; public ParticleBlood(Random rand, Vec2d pos, double angle) { super(rand.nextDouble() / 5, 0); this.pos = pos; this.angle = angle + RandomHelpers.randrange(rand, -100, 100); this.speed = rand.nextDouble() / 10; this.height = rand.nextDouble(); this.height_velocity = rand.nextDouble() / 10; this.pos.x += 0.5; this.pos.y += 0.5; r_color = RandomHelpers.randrange(rand, 200, 800) / 1000.0; } @Override public void tick(Chunk chunk, Layer layer) { // Call super super.tick(chunk, layer); // Move in the velocity and remove some of it moveBackward(speed); height += height_velocity; speed /= 1.05; height_velocity -= 0.001; if(height < 0) { height = 0; height_velocity = 0; } // Remove some time time -= 1; // Should this particle too old; destroy it if(time < 0) chunk.killEntity(this); } @Override public void render(Vec2d pos, Camera camera) { // Get the light level double light = chunk.getLightLevel(new Vec2i( MathHelpers.floor(pos.x), MathHelpers.floor(pos.y))); // Set some settings GlHelpers.pushMatrix(); GlHelpers.color3(r_color * light, 0, 0); GlHelpers.translate(0, 0, height); // Call super super.render(pos, camera); GlHelpers.color3(1, 1, 1); GlHelpers.popMatrix(); } }