mirror of
https://github.com/GTNewHorizons/CodeChickenCore.git
synced 2026-11-11 15:57:42 +00:00
55 lines
1.6 KiB
Java
55 lines
1.6 KiB
Java
package codechicken.lib.vec;
|
|
|
|
import codechicken.lib.render.CCRenderState;
|
|
import cpw.mods.fml.relauncher.Side;
|
|
import cpw.mods.fml.relauncher.SideOnly;
|
|
|
|
/**
|
|
* Abstract supertype for any 3D vector transformation
|
|
*/
|
|
public abstract class Transformation extends ITransformation<Vector3, Transformation> implements CCRenderState.IVertexOperation
|
|
{
|
|
public static final int operationIndex = CCRenderState.registerOperation();
|
|
|
|
/**
|
|
* Applies this transformation to a normal (doesn't translate)
|
|
* @param normal The normal to transform
|
|
*/
|
|
public abstract void applyN(Vector3 normal);
|
|
|
|
/**
|
|
* Applies this transformation to a matrix as a multiplication on the right hand side.
|
|
* @param mat The matrix to combine this transformation with
|
|
*/
|
|
public abstract void apply(Matrix4 mat);
|
|
|
|
public Transformation at(Vector3 point) {
|
|
return new TransformationList(new Translation(-point.x, -point.y, -point.z), this, point.translation());
|
|
}
|
|
|
|
public TransformationList with(Transformation t) {
|
|
return new TransformationList(this, t);
|
|
}
|
|
|
|
@SideOnly(Side.CLIENT)
|
|
public abstract void glApply();
|
|
|
|
@Override
|
|
public boolean load() {
|
|
CCRenderState.pipeline.addRequirement(CCRenderState.normalAttrib.operationID());
|
|
return !isRedundant();
|
|
}
|
|
|
|
@Override
|
|
public void operate() {
|
|
apply(CCRenderState.vert.vec);
|
|
if(CCRenderState.normalAttrib.active)
|
|
applyN(CCRenderState.normal);
|
|
}
|
|
|
|
@Override
|
|
public int operationID() {
|
|
return operationIndex;
|
|
}
|
|
}
|