
package com.badlogic.gdx.tests.bullet;

import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.graphics.g3d.Model;
import com.badlogic.gdx.graphics.g3d.attributes.ColorAttribute;
import com.badlogic.gdx.math.Vector3;
import com.badlogic.gdx.physics.bullet.collision.btGImpactCollisionAlgorithm;
import com.badlogic.gdx.physics.bullet.collision.btGImpactMeshShape;
import com.badlogic.gdx.physics.bullet.collision.btTriangleIndexVertexArray;

/** @author Xoppa */
public class GimpactTest extends BaseBulletTest {
	BulletEntity ground;
	btTriangleIndexVertexArray chassisVertexArray;

	@Override
	public void create () {
		super.create();

		final Model chassisModel = objLoader.loadModel(Gdx.files.internal("data/car.obj"));
		disposables.add(chassisModel);
		chassisModel.materials.get(0).clear();
		chassisModel.materials.get(0).set(ColorAttribute.createDiffuse(Color.RED), ColorAttribute.createSpecular(Color.WHITE));

		chassisVertexArray = new btTriangleIndexVertexArray(chassisModel.meshParts);
		btGImpactMeshShape chassisShape = new btGImpactMeshShape(chassisVertexArray);
		chassisShape.setLocalScaling(new Vector3(1f, 1f, 1f));
		chassisShape.setMargin(0f);
		chassisShape.updateBound();

		world.addConstructor("chassis", new BulletConstructor(chassisModel, 1f, chassisShape));

		(ground = world.add("ground", 0f, 0f, 0f)).setColor(0.25f + 0.5f * (float)Math.random(),
			0.25f + 0.5f * (float)Math.random(), 0.25f + 0.5f * (float)Math.random(), 1f);

		for (float y = 10f; y < 50f; y += 5f)
			world.add("chassis", -2f + (float)Math.random() * 4f, y, -2f + (float)Math.random() * 4f).setColor(
				0.25f + 0.5f * (float)Math.random(), 0.25f + 0.5f * (float)Math.random(), 0.25f + 0.5f * (float)Math.random(), 1f);

		btGImpactCollisionAlgorithm.registerAlgorithm(world.dispatcher);
	}

	@Override
	public boolean tap (float x, float y, int count, int button) {
		shoot(x, y);
		return true;
	}

	@Override
	public void dispose () {
		super.dispose();
		chassisVertexArray.dispose();
		chassisVertexArray = null;
		ground = null;
	}
}
