package actor;
import render.*;
import render.Geometry;
import render.Matrix;
public class WorldState
{
private int top = 0;
private Matrix[] matrix;
private Geometry root;
protected RenderableContext context;
private static WorldState instance;
public static WorldState getInstance(RenderableContext context)
{
if (instance == null) {
synchronized(WorldState.class) {
if (instance == null)
instance = new WorldState(context);
}
}
return instance;
}
private WorldState(RenderableContext context)
{
this.context = context;
this.root = context.getWorldGeometry();
this.matrix = context.getMatrix();
}
public Matrix getTopMatrix() {
return matrix[top];
}
public void pop() {
top--;
}
public void push() {
matrix[top + 1].copy(matrix[top]);
top++;
}
public void rotateX(double t) {
getTopMatrix().rotateX(t);
}
public void rotateY(double t) {
getTopMatrix().rotateY(t);
}
public void rotateZ(double t) {
getTopMatrix().rotateZ(t);
}
public void scale(double x, double y, double z) {
getTopMatrix().scale(x, y, z);
}
public void scale(Point3D pt) {
scale(pt.x, pt.y, pt.z);
}
public void scale(double d) {
scale(d, d, d);
}
public void transform(Geometry s) {
s.setMatrix(getTopMatrix());
}
public void translate(Point3D p)
{
translate(p.x, p.y, p.z);
}
public void translate(double v[]) {
translate(v[0], v[1], v[2]);
}
public void translate(double x, double y, double z) {
getTopMatrix().translate(x, y, z);
}
public Geometry getRoot()
{
return root;
}
public void setRoot(Geometry root)
{
this.root = root;
}
public double getTime()
{
return context.getCurrentTime();
}
}