Files
CodeChickenCore/codechicken/lib/vec/Scale.java
T

80 lines
1.6 KiB
Java
Raw Normal View History

2013-07-16 17:58:02 +10:00
package codechicken.lib.vec;
import java.math.BigDecimal;
import java.math.MathContext;
import java.math.RoundingMode;
import org.lwjgl.opengl.GL11;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
public class Scale extends Transformation
{
private Vector3 factor;
public Scale(Vector3 factor)
{
this.factor = factor;
}
public Scale(double factor)
{
this(new Vector3(factor, factor, factor));
}
public Scale(double x, double y, double z)
{
this(new Vector3(x, y, z));
}
@Override
public void apply(Vector3 vec)
{
vec.multiply(factor);
}
@Override
public void applyN(Vector3 normal)
{
}
@Override
public void apply(Matrix4 mat)
{
mat.scale(factor);
}
@Override
@SideOnly(Side.CLIENT)
public void glApply()
{
GL11.glScaled(factor.x, factor.y, factor.z);
}
@Override
public Transformation inverse()
{
return new Scale(1/factor.x, 1/factor.y, 1/factor.z);
}
2013-08-29 11:10:33 +10:00
@Override
public Transformation merge(Transformation next) {
2013-09-05 17:41:31 +10:00
if(next instanceof Scale)
return new Scale(factor.copy().multiply(((Scale) next).factor));
2013-08-29 11:10:33 +10:00
return null;
}
2013-09-05 17:41:31 +10:00
@Override
public boolean isRedundant() {
return factor.equalsT(Vector3.one);
}
2013-07-16 17:58:02 +10:00
@Override
public String toString()
{
MathContext cont = new MathContext(4, RoundingMode.HALF_UP);
return "Scale("+new BigDecimal(factor.x, cont)+", "+new BigDecimal(factor.y, cont)+", "+new BigDecimal(factor.z, cont)+")";
}
}