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 com.badlogic.gdx.InputProcessor;
import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.Sprite;
import com.badlogic.gdx.math.Vector2;
public class LaserTest 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("S1", "data/laser/start1.png");
reg.texture("S2", "data/laser/start2.png");
reg.texture("M1", "data/laser/mid1.png");
reg.texture("M2", "data/laser/mid2.png");
reg.texture("E1", "data/laser/end1.png");
reg.texture("E2", "data/laser/end2.png");
reg.object("Begin1",new Sprite(Engine.resource("S1",Texture.class)));
reg.object("Begin2",new Sprite(Engine.resource("S2",Texture.class)));
reg.object("Mid1",new Sprite(Engine.resource("M1",Texture.class)));
reg.object("Mid2",new Sprite(Engine.resource("M2",Texture.class)));
reg.object("End1",new Sprite(Engine.resource("E1",Texture.class)));
reg.object("End2",new Sprite(Engine.resource("E2",Texture.class)));
}
@Override
public void dispose() {}
@Override
public EngineOptions onSetupEngine() {
final EngineOptions opt = new EngineOptions(new String[]{"data/laser/"},800,480);
opt.useGL20 = true;
return opt;
}
@Override
public void onLoadedResourcesCompleted() {
final Laser laser = new Laser();
laser.begin1 = Engine.resource("Begin1");
laser.begin2 = Engine.resource("Begin2");
laser.mid1 = Engine.resource("Mid1");
laser.mid2 = Engine.resource("Mid2");
laser.end1 = Engine.resource("End1");
laser.end2 = Engine.resource("End2");
laser.positon.set(600,100);
final Laser laser2 = new Laser();
laser2.begin1 = Engine.resource("Begin1");
laser2.begin2 = Engine.resource("Begin2");
laser2.mid1 = Engine.resource("Mid1");
laser2.mid2 = Engine.resource("Mid2");
laser2.end1 = Engine.resource("End1");
laser2.end2 = Engine.resource("End2");
laser2.positon.set(0,200);
laser2.color = Color.GREEN;
laser2.degrees = -90;
final Laser laser3 = new Laser();
laser3.begin1 = Engine.resource("Begin1");
laser3.begin2 = Engine.resource("Begin2");
laser3.mid1 = Engine.resource("Mid1");
laser3.mid2 = Engine.resource("Mid2");
laser3.end1 = Engine.resource("End1");
laser3.end2 = Engine.resource("End2");
laser3.positon.set(400,Engine.getHeight());
laser3.color = Color.YELLOW;
laser3.degrees = 180;
final Laser laser4 = new Laser();
laser4.begin1 = Engine.resource("Begin1");
laser4.begin2 = Engine.resource("Begin2");
laser4.mid1 = Engine.resource("Mid1");
laser4.mid2 = Engine.resource("Mid2");
laser4.end1 = Engine.resource("End1");
laser4.end2 = Engine.resource("End2");
laser4.positon.set(400,200);
laser4.color = Color.CYAN;
laser4.degrees = 45;
laser4.len = 100;
Engine.setMainScene(new Scene() {
float add ;
@Override
public void render(float delta) {
add+=delta;
Engine.getSpriteBatch().begin();
laser.len = (300-add*100%300);
laser.color.a = (1-add*100%300/300);
laser.rayColor.a = (1-add*100%300/300);
laser.render(delta);
laser2.len = (10*add*100%700);
laser2.render(delta);
laser3.len = (2*add*100%400);
laser3.render(delta);
laser4.render(delta);
laser4.degrees = 10*add;
Engine.getSpriteBatch().end();
Engine.debugInfo("the laser use 6 sprite and GL20.GL_ONE attribute");
}
@Override
public InputProcessor getInputProcessor() {
return null;
}
@Override
public void update(float delta) {
}
@Override
public void hide() {
}
@Override
public void show() {
}
});
}
}
}
class Laser {
public Vector2 positon = new Vector2() ;
public float len;
public Color color = new Color(Color.RED);
public Color rayColor = new Color(Color.WHITE);
public float degrees;
public Sprite begin1,begin2,mid1,mid2,end1,end2;
public void render(float delta) {
begin1.setColor(color);
begin2.setColor(rayColor);
mid1.setColor(color);
mid2.setColor(rayColor);
end1.setColor(color);
end2.setColor(rayColor);
mid1.setSize(mid1.getWidth(), len);
mid2.setSize(mid1.getWidth(), len);
begin1.setPosition(positon.x, positon.y);
begin2.setPosition(positon.x, positon.y);
mid1.setPosition(begin1.getX(), begin1.getY()+begin1.getHeight());
mid2.setPosition(begin1.getX(), begin1.getY()+begin1.getHeight());
end1.setPosition(begin1.getX(), begin1.getY()+begin1.getHeight()+mid1.getHeight());
end2.setPosition(begin1.getX(), begin1.getY()+begin1.getHeight()+mid1.getHeight());
begin1.setOrigin(begin1.getWidth()/2, 0);
begin2.setOrigin(begin1.getWidth()/2, 0);
mid1.setOrigin(mid1.getWidth()/2, -begin1.getHeight());
mid2.setOrigin(mid2.getWidth()/2, -begin1.getHeight());
end1.setOrigin(mid1.getWidth()/2, -begin1.getHeight()-mid1.getHeight());
end2.setOrigin(mid2.getWidth()/2, -begin1.getHeight()-mid2.getHeight());
begin1.setRotation(degrees);
begin2.setRotation(degrees);
mid1.setRotation(degrees);
mid2.setRotation(degrees);
end1.setRotation(degrees);
end2.setRotation(degrees);
Engine.getSpriteBatch().setBlendFunction(GL20.GL_SRC_ALPHA, GL20.GL_ONE);
begin1.draw(Engine.getSpriteBatch());
begin2.draw(Engine.getSpriteBatch());
mid1.draw(Engine.getSpriteBatch());
mid2.draw(Engine.getSpriteBatch());
end1.draw(Engine.getSpriteBatch());
end2.draw(Engine.getSpriteBatch());
Engine.getSpriteBatch().setBlendFunction(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA);
}
}