package info.u250.c2d.tests.animations;
import info.u250.c2d.engine.Engine;
import info.u250.c2d.engine.EngineDrive;
import info.u250.c2d.engine.Scene;
import info.u250.c2d.engine.resources.AliasResourceManager;
import info.u250.c2d.graphic.AdvanceSprite;
import info.u250.c2d.graphic.background.SimpleMeshBackground;
import java.util.Random;
import com.badlogic.gdx.InputProcessor;
import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.graphics.Texture;
public class RainEffect extends Engine {
@Override
protected EngineDrive onSetupEngineDrive() {
return new EngineX();
}
@Override
public void dispose () {
super.dispose();
}
private class EngineX implements EngineDrive{
@Override
public void onResourcesRegister(AliasResourceManager<String> reg) {
reg.texture("r1", "data/rain/rain1.png");
reg.texture("r2", "data/rain/rain2.png");
reg.texture("r3", "data/rain/rain3.png");
reg.texture("r4", "data/rain/rain4.png");
}
@Override
public void dispose() {}
@Override
public EngineOptions onSetupEngine() {
final EngineOptions opt = new EngineOptions(new String[]{
"data/rain/rain1.png",
"data/rain/rain2.png",
"data/rain/rain3.png",
"data/rain/rain4.png",
},800,480);
opt.useGL20 = true;
return opt;
}
@Override
public void onLoadedResourcesCompleted() {
int number = (int)(Engine.getWidth()/Rain.WIDTH);
final Rain[] rains = new Rain[number];
for(int i=0;i<number;i++){
rains[i] = new Rain(Engine.resource("r"+(new Random().nextInt(4)+1),Texture.class));
rains[i].setX(Rain.WIDTH*i);
}
final SimpleMeshBackground bg = new SimpleMeshBackground(Color.GRAY,Color.BLACK);
Engine.setMainScene(new Scene() {
@Override
public void render(float delta) {
bg.render(delta);
Engine.getSpriteBatch().begin();
for(Rain rain:rains){
rain.render(delta);
}
Engine.getSpriteBatch().end();
}
@Override
public InputProcessor getInputProcessor() {
return null;
}
@Override
public void update(float delta) {
}
@Override
public void hide() {
}
@Override
public void show() {
}
});
}
}
private class Rain extends AdvanceSprite{
public static final float WIDTH = 15;
public final Random random = new Random();
float speed = 0;
public void setup(){
speed = random.nextFloat()*1000+500;
this.setY(Engine.getHeight());
}
public Rain(Texture texture) {
super(texture);
this.setup();
this.setY(this.getY()+random.nextFloat()*200);
}
@Override
public void render(float delta) {
super.render(delta);
if(this.getY()<-this.getHeight()){
this.setup();
}
this.setY(this.getY()-speed*delta);
}
}
}