package org.jrenner.fps;
import com.badlogic.gdx.math.Quaternion;
import sun.reflect.generics.reflectiveObjects.NotImplementedException;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g3d.Model;
import com.badlogic.gdx.graphics.g3d.ModelInstance;
import com.badlogic.gdx.graphics.g3d.attributes.DepthTestAttribute;
import com.badlogic.gdx.graphics.g3d.attributes.TextureAttribute;
import com.badlogic.gdx.math.Vector3;
/**
* @author Caresi Labs
*
* A static Skybox class
* Only one Sky instance should be present
*
*/
public class Sky {
private static Model model;
//TODO Entity list for things like Clouds, and future weather system
//public static Array<ModelInstance> skyEntities;
public static ModelInstance modelInstance;
private static boolean enabled;
public static void init () {
enabled = false;
// Load managed model
model = Assets.manager.get("models/skybox.g3db", Model.class);
}
public static void createSkyBox (Texture xpos, Texture xneg, Texture ypos, Texture yneg, Texture zpos, Texture zneg) {
modelInstance = new ModelInstance(model, "Skycube");
// Set material textures
modelInstance.materials.get(0).set(TextureAttribute.createDiffuse(xpos));
modelInstance.materials.get(1).set(TextureAttribute.createDiffuse(xneg));
modelInstance.materials.get(2).set(TextureAttribute.createDiffuse(ypos));
modelInstance.materials.get(3).set(TextureAttribute.createDiffuse(yneg));
modelInstance.materials.get(5).set(TextureAttribute.createDiffuse(zpos));
modelInstance.materials.get(4).set(TextureAttribute.createDiffuse(zneg));
//Disable depth test
modelInstance.materials.get(0).set(new DepthTestAttribute(0));
modelInstance.materials.get(1).set(new DepthTestAttribute(0));
modelInstance.materials.get(2).set(new DepthTestAttribute(0));
modelInstance.materials.get(3).set(new DepthTestAttribute(0));
modelInstance.materials.get(4).set(new DepthTestAttribute(0));
modelInstance.materials.get(5).set(new DepthTestAttribute(0));
enabled = true;
}
public static void createSkyBox (Texture skybox) {
modelInstance = new ModelInstance(model, "Skybox");
// Set material texutres and Disable depth test
modelInstance.materials.get(0).set(TextureAttribute.createDiffuse(skybox));
modelInstance.materials.get(0).set(new DepthTestAttribute(0));
enabled = true;
}
public static void createSkySphere () {
throw new NotImplementedException();
}
private static final Vector3 tmp = new Vector3();
private static final Quaternion q = new Quaternion();
public static float yawRotation = 0f;
public static float yawRotateSpeed = 0.01f;
public static void update (Vector3 position) {
tmp.set(position.x, position.y, position.z);
modelInstance.transform.getRotation(q);
yawRotation += yawRotateSpeed;
q.setFromAxis(Vector3.Y, yawRotation);
modelInstance.transform.set(q);
modelInstance.transform.setTranslation(tmp);
}
public static void disable () {
//TODO Make this a little bit nicer?
modelInstance = null;
enabled = false;
}
public static boolean isEnabled () {
return enabled;
}
}