package de.swagner.paxbritannica.background; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.graphics.g2d.Batch; import com.badlogic.gdx.graphics.g2d.Sprite; import com.badlogic.gdx.math.MathUtils; import com.badlogic.gdx.math.Vector2; import de.swagner.paxbritannica.Resources; public class Fish extends Sprite { private float SPEED = 0.2f; private float LIFETIME = MathUtils.random(8, 12); private float FADE_TIME = 2; private float random_direction = MathUtils.random()<0.5f ? 1:-1; private float random_scale = MathUtils.random() * 0.75f + 0.2f; private float random_speed = MathUtils.random() + 0.5f; private float random_opacity = MathUtils.random() * 0.1f + 0.1f; private Vector2 position = new Vector2(); public boolean alive = true; private float since_alive = 0; float delta; public Fish(Vector2 position) { super(); this.position = position; this.setPosition(position.x, position.y); this.setRotation(random_direction); this.setScale(random_scale, random_scale); switch (MathUtils.random(0, 7)) { case 0: this.set(Resources.getInstance().fish1); break; case 1: this.set(Resources.getInstance().fish2); break; case 2: this.set(Resources.getInstance().fish3); break; case 3: this.set(Resources.getInstance().fish4); break; case 4: this.set(Resources.getInstance().fish5); break; case 5: this.set(Resources.getInstance().fish6); break; case 6: this.set(Resources.getInstance().fish7); break; default: this.set(Resources.getInstance().fish8); break; } if(random_direction==-1) { flip(true, false); } } @Override public void draw(Batch batch) { super.draw(batch); delta = Math.min(0.06f, Gdx.graphics.getDeltaTime()); since_alive += delta/2.f; position.add((SPEED + random_speed) * delta * 5.f*random_direction,0); this.setPosition(position.x, position.y); if (since_alive < FADE_TIME) { super.setColor(1, 1, 1, Math.min((since_alive / FADE_TIME)*random_opacity,random_opacity)); } else { this.setColor(1, 1, 1, Math.min(1 - (since_alive - LIFETIME + FADE_TIME) / FADE_TIME, 1) * random_opacity); } if (since_alive > LIFETIME) { alive = false; } } public void reset() { SPEED = 0.2f; LIFETIME = MathUtils.random(8, 12); FADE_TIME = 2; random_direction = MathUtils.random()<0.5f ? 1:-1; random_scale = MathUtils.random() * 0.75f + 0.2f; random_speed = MathUtils.random() + 0.5f; random_opacity = MathUtils.random() * 0.1f + 0.1f; alive = true; since_alive = 0; this.position = new Vector2(MathUtils.random(-100, 800),MathUtils.random(-100, 400)); if(random_direction==-1) { flip(true, false); } this.setPosition(position.x, position.y); this.setRotation(random_direction); this.setScale(random_scale, random_scale); } }