/* ** 2011 September 26 ** ** The author disclaims copyright to this source code. In place of ** a legal notice, here is a blessing: ** May you do good and not evil. ** May you find forgiveness for yourself and forgive others. ** May you share freely, never taking more than you give. */ package info.ata4.bsplib.struct; import info.ata4.bsplib.vector.Vector3f; import info.ata4.io.DataReader; import info.ata4.io.DataWriter; import info.ata4.util.EnumConverter; import java.io.IOException; import java.util.Set; /** * Static prop data structure for version 4. * * @author Nico Bergemann <barracuda415 at yahoo.de> */ public class DStaticPropV4 implements DStaticProp { public Vector3f origin; public Vector3f angles; public int propType; public int firstLeaf; public int leafCount; public int solid; public Set<StaticPropFlag> flags; public int skin; public float fademin; public float fademax; public Vector3f lightingOrigin; @Override public int getSize() { return 56; } @Override public void read(DataReader in) throws IOException { origin = Vector3f.read(in); angles = Vector3f.read(in); propType = in.readUnsignedShort(); firstLeaf = in.readUnsignedShort(); leafCount = in.readUnsignedShort(); solid = in.readUnsignedByte(); flags = EnumConverter.fromInteger(StaticPropFlag.class, in.readUnsignedByte()); skin = in.readInt(); fademin = in.readFloat(); fademax = in.readFloat(); lightingOrigin = Vector3f.read(in); } @Override public void write(DataWriter out) throws IOException { Vector3f.write(out, origin); Vector3f.write(out, angles); out.writeUnsignedShort(propType); out.writeUnsignedShort(firstLeaf); out.writeUnsignedShort(leafCount); out.writeUnsignedByte(solid); out.writeUnsignedByte(EnumConverter.toInteger(flags)); out.writeInt(skin); out.writeFloat(fademin); out.writeFloat(fademax); Vector3f.write(out, lightingOrigin); } public boolean usesLightingOrigin() { return flags.contains(StaticPropFlag.STATIC_PROP_USE_LIGHTING_ORIGIN); } public boolean hasNoShadowing() { return flags.contains(StaticPropFlag.STATIC_PROP_NO_SHADOW); } public boolean hasNoSelfShadowing() { return flags.contains(StaticPropFlag.STATIC_PROP_NO_SELF_SHADOWING); } public boolean hasNoPerVertexLighting() { return flags.contains(StaticPropFlag.STATIC_PROP_NO_PER_VERTEX_LIGHTING); } public boolean hasNoPerTexelLighting() { return flags.contains(StaticPropFlag.STATIC_PROP_NO_PER_TEXEL_LIGHTING); } public boolean hasIgnoreNormals() { return flags.contains(StaticPropFlag.STATIC_PROP_IGNORE_NORMALS); } }