package com.indignado.functional.test.levels.base.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.physics.box2d.Body;
import com.badlogic.gdx.physics.box2d.BodyDef;
import com.badlogic.gdx.physics.box2d.Joint;
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.data.TextureView;
import com.indignado.logicbricks.utils.builders.BodyBuilder;
import com.indignado.logicbricks.utils.builders.EntityBuilder;
import com.indignado.logicbricks.utils.builders.LBBuilders;
import com.indignado.logicbricks.utils.builders.joints.JointBuilder;
/**
* @author Rubentxu.
*/
public class Pulley extends EntityFactory {
private String box2 = "assets/textures/box2.png";
public Pulley(LBBuilders builders, AssetManager assetManager) {
super(builders, assetManager);
}
@Override
public void loadAssets() {
if (!assetManager.isLoaded(box2)) assetManager.load(box2, Texture.class);
}
@Override
public Entity createEntity() {
EntityBuilder entityBuilder = builders.getEntityBuilder();
entityBuilder.initialize();
BodyBuilder bodyBuilder = builders.getBodyBuilder();
JointBuilder jointBuilder = builders.getJointBuilder();
IdentityComponent identity = entityBuilder.getComponent(IdentityComponent.class);
identity.tag = "Pulley";
//identity.category = game.getCategoryBitsManager().getCategoryBits("Pulley");
StateComponent state = entityBuilder.getComponent(StateComponent.class);
state.createState("Default");
Body body1 = bodyBuilder.fixture(bodyBuilder.fixtureDefBuilder()
.boxShape(1, 1)
.friction(0.5f)
.restitution(0.5f))
.type(BodyDef.BodyType.DynamicBody)
.build();
Body body2 = bodyBuilder.fixture(bodyBuilder.fixtureDefBuilder()
.boxShape(1, 1)
.friction(0.5f)
.restitution(0.5f))
.position(2, 3)
.type(BodyDef.BodyType.DynamicBody)
.build();
Joint joint = jointBuilder.distanceJoint()
.initialize(body1, body2, body1.getWorldCenter(), body2.getWorldCenter())
.dampingRatio(1)
.frequencyHz(3)
.build();
RigidBodiesComponents bodiesComponents = entityBuilder.getComponent(RigidBodiesComponents.class);
bodiesComponents.rigidBodies.add(body1);
bodiesComponents.rigidBodies.add(body2);
TextureView boxView = new TextureView();
boxView.setName("box");
boxView.setTextureRegion(new TextureRegion(assetManager.get(box2, Texture.class)));
boxView.setHeight(2.5f);
boxView.setWidth(2.5f);
boxView.setAttachedTransform(body1.getTransform());
boxView.setLayer(0);
TextureView boxView2 = new TextureView();
boxView2.setName("box2");
boxView2.setTextureRegion(new TextureRegion(assetManager.get(box2, Texture.class)));
boxView2.setHeight(2.5f);
boxView2.setWidth(2.5f);
boxView2.setAttachedTransform(body2.getTransform());
boxView2.setLayer(0);
ViewsComponent viewsComponent = entityBuilder.getComponent(ViewsComponent.class);
viewsComponent.views.add(boxView);
viewsComponent.views.add(boxView2);
Entity entity = entityBuilder.getEntity();
Gdx.app.log("Crate", "instance" + entity);
return entity;
}
}