package com.indignado.functional.test.levels.radialgravity.entities;
import com.badlogic.ashley.core.Entity;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.assets.AssetManager;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.TextureRegion;
import com.badlogic.gdx.math.MathUtils;
import com.badlogic.gdx.physics.box2d.Body;
import com.badlogic.gdx.physics.box2d.BodyDef;
import com.indignado.logicbricks.components.IdentityComponent;
import com.indignado.logicbricks.components.RigidBodiesComponents;
import com.indignado.logicbricks.components.StateComponent;
import com.indignado.logicbricks.components.ViewsComponent;
import com.indignado.logicbricks.core.EntityFactory;
import com.indignado.logicbricks.core.actuators.MotionActuator;
import com.indignado.logicbricks.core.controllers.ConditionalController;
import com.indignado.logicbricks.core.data.TextureView;
import com.indignado.logicbricks.core.sensors.AlwaysSensor;
import com.indignado.logicbricks.core.sensors.Sensor;
import com.indignado.logicbricks.utils.builders.BodyBuilder;
import com.indignado.logicbricks.utils.builders.EntityBuilder;
import com.indignado.logicbricks.utils.builders.FixtureDefBuilder;
import com.indignado.logicbricks.utils.builders.LBBuilders;
import com.indignado.logicbricks.utils.builders.actuators.MotionActuatorBuilder;
import com.indignado.logicbricks.utils.builders.controllers.ConditionalControllerBuilder;
import com.indignado.logicbricks.utils.builders.sensors.AlwaysSensorBuilder;
/**
* @author Rubentxu.
*/
public class Cohete extends EntityFactory {
private String cohete = "assets/textures/cohete.png";
public Cohete(LBBuilders builders, AssetManager assetManager) {
super(builders, assetManager);
}
@Override
public void loadAssets() {
if (!assetManager.isLoaded(cohete)) assetManager.load(cohete, Texture.class);
}
@Override
public Entity createEntity() {
EntityBuilder entityBuilder = builders.getEntityBuilder();
entityBuilder.initialize();
BodyBuilder bodyBuilder = builders.getBodyBuilder();
IdentityComponent identity = entityBuilder.getComponent(IdentityComponent.class);
identity.tag = "Box";
StateComponent state = entityBuilder.getComponent(StateComponent.class);
state.createState("Default");
Body bodyCohete = bodyBuilder.fixture(new FixtureDefBuilder()
.boxShape(MathUtils.random(0.4f, 0.8f), MathUtils.random(0.4f, 0.8f))
.friction(1f)
.density(2f))
.mass(2)
.type(BodyDef.BodyType.DynamicBody)
.build();
AlwaysSensor alwaysSensor = builders.getBrickBuilder(AlwaysSensorBuilder.class)
.setPulse(Sensor.Pulse.PM_TRUE)
.setName("alwaysSensor")
.getBrick();
ConditionalController controller = builders.getBrickBuilder(ConditionalControllerBuilder.class)
.setOp(ConditionalController.Op.OP_AND)
.getBrick();
MotionActuator motionActuator = builders.getBrickBuilder(MotionActuatorBuilder.class)
.setTorque(5)
.getBrick();
RigidBodiesComponents bodiesComponents = entityBuilder.getComponent(RigidBodiesComponents.class);
bodiesComponents.rigidBodies.add(bodyCohete);
TextureView coheteView = new TextureView();
coheteView.setName("Cohete");
coheteView.setTextureRegion(new TextureRegion(assetManager.get(cohete, Texture.class)));
coheteView.setHeight(2.5f);
coheteView.setWidth(2.5f);
coheteView.setAttachedTransform(bodyCohete.getTransform());
coheteView.setLayer(0);
ViewsComponent viewsComponent = entityBuilder.getComponent(ViewsComponent.class);
viewsComponent.views.add(coheteView);
Entity entity = entityBuilder.addController(controller, "Default")
.connectToSensor(alwaysSensor)
.connectToActuator(motionActuator)
.getEntity();
Gdx.app.log("Box", "instance" + entity);
return entity;
}
}