package NET.worlds.scape; import java.io.IOException; public class Polygon extends Surface { protected float[] vertices; private static Object classCookie = new Object(); public Polygon(int numVertices, Material material) { this(new float[5 * numVertices], material); } public Polygon(float[] vertices, Material material) { super(material); assert vertices.length % 5 == 0; this.vertices = vertices; } public Polygon() { } public void setVertex(int i, float x, float y, float z, float u, float v) { i *= 5; this.vertices[i] = x; this.vertices[i + 1] = y; this.vertices[i + 2] = z; this.vertices[i + 3] = u; this.vertices[i + 4] = v; this.nativeSetVertex(i, x, y, z, u, v); } public native void nativeSetVertex(int var1, float var2, float var3, float var4, float var5, float var6); @Override protected void addRwChildren(WObject parent) { this.addNewRwChild(parent); for (int i = 0; i < this.vertices.length; i += 5) { this.addVertex(this.vertices[i], this.vertices[i + 1], this.vertices[i + 2], this.vertices[i + 3], this.vertices[i + 4]); } this.doneWithEditing(); } @Override public void saveState(Saver s) throws IOException { s.saveVersion(0, classCookie); super.saveState(s); s.saveInt(this.vertices.length); for (int i = 0; i < this.vertices.length; i++) { s.saveFloat(this.vertices[i]); } } @Override public void restoreState(Restorer r) throws IOException, TooNewException { switch (r.restoreVersion(classCookie)) { case 0: super.restoreState(r); int length = r.restoreInt(); this.vertices = new float[length]; for (int i = 0; i < length; i++) { this.vertices[i] = r.restoreFloat(); } return; default: throw new TooNewException(); } } }