/** * Indicates whether this element is enabled in the given default state for a particular action. */ public static boolean isEnabled(State state) { return (state.getDefaults().getElement(index) != null); }
/** Returns the instance of this element in the passed State. */ public static ModelMatrixElement getInstance(State state) { return (ModelMatrixElement) state.getElement(index); }
/** Enables this element in the passed state, which should be the default for a given action. */ public static void enable(State defaultState) { Element tmp = new ModelMatrixElement(); defaultState.setElement(tmp.getStateIndex(), tmp); }
/** Represents the model matrix, which is the transformation applied to objects in the scene. */ public class ModelMatrixElement extends Element { // Boilerplate private static StateIndex index = State.registerElementType(); public StateIndex getStateIndex() { return index; } public Element newInstance() { return new ModelMatrixElement(); } /** Returns the instance of this element in the passed State. */ public static ModelMatrixElement getInstance(State state) { return (ModelMatrixElement) state.getElement(index); } /** Enables this element in the passed state, which should be the default for a given action. */ public static void enable(State defaultState) { Element tmp = new ModelMatrixElement(); defaultState.setElement(tmp.getStateIndex(), tmp); } /** * Indicates whether this element is enabled in the given default state for a particular action. */ public static boolean isEnabled(State state) { return (state.getDefaults().getElement(index) != null); } // The matrix data protected Mat4f matrix; protected Mat4f temp = new Mat4f(); public ModelMatrixElement() { matrix = new Mat4f(); matrix.makeIdent(); } public void push(State state) { ModelMatrixElement prev = (ModelMatrixElement) getNextInStack(); if (prev != null) { matrix.set(prev.matrix); } } /** * Returns the current model matrix; callers should not mutate this directly but instead use the * accessor methods to change it. */ public Mat4f getMatrix() { return matrix; } /** Sets the current element to the identity matrix. */ public static void makeIdent(State state) { ModelMatrixElement elt = getInstance(state); elt.makeEltIdent(); } /** Sets this element to the identity matrix. */ public void makeEltIdent() { matrix.makeIdent(); } /** Multiplies the current element by the given matrix. */ public static void mult(State state, Mat4f matrix) { ModelMatrixElement elt = getInstance(state); elt.multElt(matrix); } /** Multiplies this element by the given matrix. */ public void multElt(Mat4f matrix) { temp.set(this.matrix); this.matrix.mul(temp, matrix); } }