public void addWallTop( int p3, int panelX, int panelZ, int panelW, GeomStrip.Dir dir, int[] texCoords, int trimStart, int trimEnd) { int p11 = 0; int p12 = 0; int p21 = 0; int p22 = 0; int tileSizeA1 = 0; int tileSizeA2 = 0; switch (dir) { case GeomStrip.Dir.DIR_X_POS: p11 = panelX + trimStart; p12 = panelZ - 2; p21 = panelX + panelW - trimEnd; p22 = panelZ; tileSizeA1 = panelW - trimStart - trimEnd; tileSizeA2 = 2; break; case GeomStrip.Dir.DIR_Z_POS: p11 = panelX; p12 = panelZ + trimStart; p21 = panelX + 2; p22 = panelZ + panelW - trimEnd; tileSizeA1 = 2; tileSizeA2 = panelW - trimStart - trimEnd; break; case GeomStrip.Dir.DIR_X_NEG: p11 = panelX - panelW + trimEnd; p12 = panelZ; p21 = panelX - trimStart; p22 = panelZ + 2; tileSizeA1 = panelW - trimStart - trimEnd; tileSizeA2 = 2; break; case GeomStrip.Dir.DIR_Z_NEG: p11 = panelX - 2; p12 = panelZ - panelW + trimEnd; p21 = panelX; p22 = panelZ - trimStart; tileSizeA1 = 2; tileSizeA2 = panelW - trimStart - trimEnd; break; } this.addBasicPanel(p11, p12, p21, p22, p3, GeomStrip.Axis.AXIS_X, GeomStrip.Axis.AXIS_Z, tileSizeA1, tileSizeA2, texCoords); }
public void addCap( int p12, int p22, int panelX, int panelZ, GeomStrip.Dir dir, int[] texCoords) { this.addCap(p12, p22, panelX, panelZ, dir, texCoords, 0); }
public void addTallWall( int panelX, int panelZ, int panelW, GeomStrip.Dir dir, int[] texCoords, int trimStart, int trimEnd) { this.addTallWall(panelX, panelZ, panelW, dir, texCoords, trimStart, trimEnd, 0); }
public void addShortWallTop( int panelX, int panelZ, int panelW, GeomStrip.Dir dir, int[] texCoords, int trimStart, int trimEnd) { this.addWallTop(12, panelX, panelZ, panelW, dir, texCoords, trimStart, trimEnd); }
public void addWall( int p12, int p22, int tileSizeA2, int panelX, int panelZ, int panelW, GeomStrip.Dir dir, int[] texCoords, int trimStart, int trimEnd, int flags) { GeomStrip.Axis a1 = GeomStrip.Axis.AXIS_X; int p11 = 0; int p21 = 0; int p3 = 0; switch (dir) { case GeomStrip.Dir.DIR_X_POS: a1 = GeomStrip.Axis.AXIS_X; p11 = panelX; p21 = panelX + panelW; p3 = panelZ; break; case GeomStrip.Dir.DIR_Z_POS: a1 = GeomStrip.Axis.AXIS_Z; p11 = panelZ; p21 = panelZ + panelW; p3 = panelX; break; case GeomStrip.Dir.DIR_X_NEG: a1 = GeomStrip.Axis.AXIS_X; p11 = panelX; p21 = panelX - panelW; p3 = panelZ; break; case GeomStrip.Dir.DIR_Z_NEG: a1 = GeomStrip.Axis.AXIS_Z; p11 = panelZ; p21 = panelZ - panelW; p3 = panelX; break; } this.addTrimmedPanel(p11, p12, p21, p22, p3, a1, GeomStrip.Axis.AXIS_Y, 32, tileSizeA2, texCoords, trimStart, trimEnd, 0, 0, flags); }
public void addCap( int p12, int p22, int panelX, int panelZ, GeomStrip.Dir dir, int[] texCoords, int flags) { GeomStrip.Axis a1 = GeomStrip.Axis.AXIS_X; int p11 = 0; int p21 = 0; int p3 = 0; int tileSizeA2 = p12 - p22; switch (dir) { case GeomStrip.Dir.DIR_X_POS: a1 = GeomStrip.Axis.AXIS_Z; p11 = panelZ - 2; p21 = panelZ; p3 = panelX; break; case GeomStrip.Dir.DIR_Z_POS: a1 = GeomStrip.Axis.AXIS_X; p11 = panelX + 2; p21 = panelX; p3 = panelZ; break; case GeomStrip.Dir.DIR_X_NEG: a1 = GeomStrip.Axis.AXIS_Z; p11 = panelZ + 2; p21 = panelZ; p3 = panelX; break; case GeomStrip.Dir.DIR_Z_NEG: a1 = GeomStrip.Axis.AXIS_X; p11 = panelX - 2; p21 = panelX; p3 = panelZ; break; } this.addTrimmedPanel(p11, p12, p21, p22, p3, a1, GeomStrip.Axis.AXIS_Y, 2, tileSizeA2, texCoords, 0, 0, 0, 0, flags); }
public void addTallWall( int panelX, int panelZ, int panelW, GeomStrip.Dir dir, int[] texCoords, int trimStart, int trimEnd, int flags) { int num = texCoords[3] * 84 / 96; int[] texCoords1 = new int[4] { texCoords[0], texCoords[1], texCoords[2], num }; this.addWall(96, 12, 84, panelX, panelZ, panelW, dir, texCoords1, trimStart, trimEnd, flags); }
public void addShortWall( int panelX, int panelZ, int panelW, GeomStrip.Dir dir, int[] texCoords, int trimStart, int trimEnd, int flags) { flags |= 8; int num = texCoords[3] * 12 / 96; int[] texCoords1 = new int[4] { texCoords[0], texCoords[1] + texCoords[3] - num, texCoords[2], num }; this.addWall(12, 0, 12, panelX, panelZ, panelW, dir, texCoords1, trimStart, trimEnd, flags); }
public void addWindowWall( int panelX, int panelZ, int panelW, GeomStrip.Dir dir, int[] texCoords, int trimStart, int trimEnd, int flags) { this.addDoorWall(panelX, panelZ, panelW, dir, texCoords, trimStart, trimEnd, flags); int num1 = texCoords[1] + texCoords[3] * 58 / 96; int num2 = texCoords[3] * 26 / 96; int[] texCoords1 = new int[4] { texCoords[0], num1, texCoords[2], num2 }; this.addWall(38, 12, 26, panelX, panelZ, panelW, dir, texCoords1, trimStart, trimEnd, flags); }
public void createGeometry() { ModelManager instance = ModelManager.getInstance(); Appearance appearance1 = instance.getAppearance(0); Appearance appearance2 = instance.getAppearance(1); this.m_appWallAlpha = instance.getAppearance(2); this.m_appWallReplace = appearance2; SimWorld simWorld = AppEngine.getCanvas().getSimWorld(); int length1 = JMath.min(6, this.m_sizeX >> 1); int length2 = JMath.min(6, this.m_sizeZ >> 1); this.m_wallWindows[0] = new MapObject[length1]; this.m_wallWindows[2] = new MapObject[length1]; this.m_wallWindows[1] = new MapObject[length2]; this.m_wallWindows[3] = new MapObject[length2]; for (int index = 0; index <= this.m_sizeX; ++index) { int tileX = this.m_posX + index; int posZ = this.m_posZ; AppEngine.appendUnique(simWorld.registerWall(this, 0, tileX, posZ), this.m_wallWindows[0], (MapObject)null); int tileZ = this.m_posZ + this.m_sizeZ; AppEngine.appendUnique(simWorld.registerWall(this, 2, tileX, tileZ), this.m_wallWindows[2], (MapObject)null); } for (int index = 0; index <= this.m_sizeZ; ++index) { int tileZ = this.m_posZ + index; int posX = this.m_posX; AppEngine.appendUnique(simWorld.registerWall(this, 3, posX, tileZ), this.m_wallWindows[3], (MapObject)null); int tileX = this.m_posX + this.m_sizeX; AppEngine.appendUnique(simWorld.registerWall(this, 1, tileX, tileZ), this.m_wallWindows[1], (MapObject)null); } GeomStrip[] geomStripArray = new GeomStrip[25]; for (int index = 0; index < geomStripArray.Length; ++index) { geomStripArray[index] = new GeomStrip(); } GeomStrip geomStrip1 = geomStripArray[24]; this.m_group = new Group(); int[] floorTexCoords = simWorld.getFloorTexCoords(this.m_floorType); int[] wallTexCoords1 = simWorld.getWallTexCoords(this.m_wallType); int[] wallTexCoords2 = simWorld.getWallTexCoords(46); int[] wallTexCoords3 = simWorld.getWallTexCoords(27); int panelX1 = this.m_posX * 32; int panelZ1 = this.m_posZ * 32; int panelW1 = this.m_sizeX * 32; int panelH1 = this.m_sizeZ * 32; int num1 = 18; geomStrip1.addFloor(panelX1, panelZ1, panelW1, panelH1, floorTexCoords, num1, num1, num1, num1); geomStrip1.addFloor(panelX1, panelZ1, 32, 32, floorTexCoords, 2, 14, 2, 14, 5); geomStrip1.addFloor(panelX1, panelZ1, panelW1, 32, floorTexCoords, 18, 18, 2, 14, 4); geomStrip1.addFloor(panelX1 + panelW1 - 32, panelZ1, 32, 32, floorTexCoords, 14, 2, 2, 14, 6); geomStrip1.addFloor(panelX1 + panelW1 - 32, panelZ1, 32, panelH1, floorTexCoords, 14, 2, 18, 18, 2); geomStrip1.addFloor(panelX1 + panelW1 - 32, panelZ1 + panelH1 - 32, 32, 32, floorTexCoords, 14, 2, 14, 2, 10); geomStrip1.addFloor(panelX1, panelZ1 + panelH1 - 32, panelW1, 32, floorTexCoords, 18, 18, 14, 2, 8); geomStrip1.addFloor(panelX1, panelZ1 + panelH1 - 32, 32, 32, floorTexCoords, 2, 14, 14, 2, 9); geomStrip1.addFloor(panelX1, panelZ1, 32, panelH1, floorTexCoords, 2, 14, 18, 18, 1); for (int index1 = 0; index1 < 4; ++index1) { int index2 = index1 * 6; GeomStrip geomStrip2 = geomStripArray[index2 + 2]; GeomStrip geomStrip3 = geomStripArray[index2]; GeomStrip geomStrip4 = geomStripArray[index2 + 1]; GeomStrip geomStrip5 = geomStripArray[index2 + 5]; GeomStrip geomStrip6 = geomStripArray[index2 + 3]; GeomStrip geomStrip7 = geomStripArray[index2 + 4]; int num2 = 0; int num3 = 0; int num4 = 0; int num5 = 0; int num6 = 0; GeomStrip.Dir dir1 = GeomStrip.Dir.DIR_X_POS; int num7 = 0; int num8 = 0; GeomStrip.Dir dir2 = GeomStrip.Dir.DIR_X_POS; switch (index1) { case 0: num2 = this.m_posX; num3 = this.m_posZ; num6 = this.m_sizeX; dir1 = GeomStrip.Dir.DIR_X_POS; num7 = 1; num4 = this.m_posX * 32; num5 = this.m_posZ * 32 + 2; dir2 = GeomStrip.Dir.DIR_X_NEG; break; case 1: num2 = this.m_posX + this.m_sizeX; num3 = this.m_posZ; num6 = this.m_sizeZ; dir1 = GeomStrip.Dir.DIR_Z_POS; num8 = 1; num4 = this.m_posX * 32 + this.m_sizeX * 32 - 2; num5 = this.m_posZ * 32; dir2 = GeomStrip.Dir.DIR_Z_NEG; break; case 2: num2 = this.m_posX + this.m_sizeX - 1; num3 = this.m_posZ + this.m_sizeZ; num6 = this.m_sizeX; dir1 = GeomStrip.Dir.DIR_X_NEG; num7 = -1; num4 = this.m_posX * 32 + this.m_sizeX * 32; num5 = this.m_posZ * 32 + this.m_sizeZ * 32 - 2; dir2 = GeomStrip.Dir.DIR_X_POS; break; case 3: num2 = this.m_posX; num3 = this.m_posZ + this.m_sizeZ - 1; num6 = this.m_sizeZ; dir1 = GeomStrip.Dir.DIR_Z_NEG; num8 = -1; num4 = this.m_posX * 32 + 2; num5 = this.m_posZ * 32 + this.m_sizeZ * 32; dir2 = GeomStrip.Dir.DIR_Z_POS; break; } int num9 = -num8; int num10 = num7; int tileX = num2; int tileZ = num3; int panelX2 = num4; int panelZ2 = num5; bool flag1 = false; bool flag2 = false; bool flag3 = false; bool flag4 = false; bool flag5 = false; bool flag6 = false; bool flag7 = false; bool flag8 = false; int num11 = 0; int num12 = 0; int panelW2 = 0; int num13 = 0; int num14 = 0; int num15 = 0; int num16 = 0; int num17 = 0; int panelW3 = 0; for (int index3 = 0; index3 < num6; ++index3) { int attribute = simWorld.getAttribute(tileX, tileZ); bool flag9 = (attribute & 3840) != 0; bool flag10 = (attribute & 64) != 0; bool flag11 = !flag10 && (attribute & 32) != 0; bool flag12 = (attribute & 128) != 0; bool flag13 = (simWorld.getAttribute(tileX - num9, tileZ - num10) & 16) == 0; bool flag14 = flag9 && flag13; if (flag9 && !flag1 || (flag5 || flag4)) { num11 = panelX2; num12 = panelZ2; panelW2 = 0; } if (!flag9 && flag1) { num13 = panelX2; num14 = panelZ2; num15 = 0; } if (flag14 && !flag2 || (flag5 || flag4)) { num16 = panelX2; num17 = panelZ2; panelW3 = 0; flag6 = flag3; flag7 = flag4; flag8 = flag5; } if (flag9) { panelW2 += 32; } else { num15 += 32; } if (flag14) { panelW3 += 32; } if (flag10) { geomStrip2.addDoorWall(panelX2, panelZ2, 32, dir1, wallTexCoords1, 0, 0); geomStrip2.addTallWallTop(panelX2, panelZ2, 32, dir1, wallTexCoords2, 0, 0); if (flag13) { int num18 = num16 + num7 * panelW3 - num9 * 4; int num19 = num17 + num8 * panelW3 - num10 * 4; int panelX3 = num18 + num7 * 32; int panelZ3 = num19 + num8 * 32; geomStrip5.addDoorWall(panelX3, panelZ3, 32, dir2, wallTexCoords3, 0, 0); geomStrip5.addTallWallTop(panelX3, panelZ3, 32, dir2, wallTexCoords2, 0, 0); } } if (panelW2 > 0 && (flag12 && flag9 || !flag9 && flag1 || index3 == num6 - 1)) { int panelX3 = num11; int panelZ3 = num12; int flags = 0; int trimStart = 0; int trimEnd = 0; if (num11 == num4 && num12 == num5) { trimStart = 2; flags |= 1; } if (index3 == num6 - 1) { trimEnd = 2; flags |= 2; } if (flag12) { geomStrip2.addWindowWall(panelX2, panelZ2, 32, dir1, wallTexCoords1, 0, 0); geomStrip2.addTallWallTop(panelX2, panelZ2, 32, dir1, wallTexCoords2, 0, 0); geomStrip3.addShortWall(panelX2, panelZ2, 32, dir1, wallTexCoords1, 0, 0); geomStrip4.addShortWallTop(panelX2, panelZ2, 32, dir1, wallTexCoords2, 0, 0); panelW2 -= 32; } if (panelW2 > 0) { geomStrip2.addTallWall(panelX3, panelZ3, panelW2, dir1, wallTexCoords1, trimStart, trimEnd, flags); geomStrip2.addTallWallTop(panelX3, panelZ3, panelW2, dir1, wallTexCoords2, trimStart, trimEnd); geomStrip3.addShortWall(panelX3, panelZ3, panelW2, dir1, wallTexCoords1, trimStart, trimEnd, flags); geomStrip4.addShortWallTop(panelX3, panelZ3, panelW2, dir1, wallTexCoords2, trimStart, trimEnd); if (!flag8 && !flag7) { int panelX4 = panelX3 + num7 * trimStart; int panelZ4 = panelZ3 + num8 * trimStart; geomStrip2.addTallCap(panelX4, panelZ4, dir1, wallTexCoords2); geomStrip4.addShortCap(panelX4, panelZ4, dir1, wallTexCoords2); } if (!flag12 && !flag10) { int panelX4 = panelX3 + -num9 * 2 + num7 * (panelW2 - trimEnd); int panelZ4 = panelZ3 + -num10 * 2 + num8 * (panelW2 - trimEnd); geomStrip2.addTallCap(panelX4, panelZ4, dir2, wallTexCoords2); geomStrip4.addShortCap(panelX4, panelZ4, dir2, wallTexCoords2); } } } if (num15 > 0 && flag9 && !flag1) { int panelX3 = 0; int panelZ3 = 0; int panelW4 = 0; int panelH2 = 0; int trimStartX = 0; int trimEndX = 0; int trimStartZ = 0; int trimEndZ = 0; switch (dir1) { case GeomStrip.Dir.DIR_X_POS: panelX3 = num13; panelZ3 = num14 - 2; panelW4 = num15; panelH2 = 32; trimStartZ = 0; trimEndZ = 30; break; case GeomStrip.Dir.DIR_Z_POS: panelX3 = num13 - 32 + 2; panelZ3 = num14; panelW4 = 32; panelH2 = num15; trimStartX = 30; trimEndX = 0; break; case GeomStrip.Dir.DIR_X_NEG: panelX3 = num13 - num15; panelZ3 = num14 - 32 + 2; panelW4 = num15; panelH2 = 32; trimStartZ = 30; trimEndZ = 0; break; case GeomStrip.Dir.DIR_Z_NEG: panelX3 = num13 - 2; panelZ3 = num14 - num15; panelW4 = 32; panelH2 = num15; trimStartX = 0; trimEndX = 30; break; } geomStrip1.addFloor(panelX3, panelZ3, panelW4, panelH2, floorTexCoords, trimStartX, trimEndX, trimStartZ, trimEndZ, 15); } if (panelW3 > 0 && ((flag12 || flag10) && flag14 || (!flag14 && flag2 || flag14 && index3 == num6 - 1))) { int panelX3 = num16 + num7 * panelW3 - num9 * 4; int panelZ3 = num17 + num8 * panelW3 - num10 * 4; int trimEnd = flag6 || flag8 || flag7 ? 0 : 2; int trimStart = flag11 || flag12 || flag10 ? 0 : 2; if (flag12) { geomStrip5.addWindowWall(panelX3, panelZ3, 32, dir2, wallTexCoords3, 0, 0); geomStrip5.addTallWallTop(panelX3, panelZ3, 32, dir2, wallTexCoords2, 0, 0); geomStrip6.addShortWall(panelX3, panelZ3, 32, dir2, wallTexCoords3, 0, 0); geomStrip7.addShortWallTop(panelX3, panelZ3, 32, dir2, wallTexCoords2, 0, 0); panelW3 -= 32; panelX3 += -num7 * 32; panelZ3 += -num8 * 32; } if (panelW3 > 0) { geomStrip5.addTallWall(panelX3, panelZ3, panelW3, dir2, wallTexCoords3, trimStart, trimEnd); geomStrip5.addTallWallTop(panelX3, panelZ3, panelW3, dir2, wallTexCoords2, trimStart, trimEnd); geomStrip6.addShortWall(panelX3, panelZ3, panelW3, dir2, wallTexCoords3, trimStart, trimEnd); geomStrip7.addShortWallTop(panelX3, panelZ3, panelW3, dir2, wallTexCoords2, trimStart, trimEnd); if (!flag12 && !flag10) { int panelX4 = panelX3 - num7 * trimStart; int panelZ4 = panelZ3 - num8 * trimStart; geomStrip5.addTallCap(panelX4, panelZ4, dir2, wallTexCoords2); geomStrip6.addShortCap(panelX4, panelZ4, dir2, wallTexCoords2); } if (!flag8 && !flag7) { int panelX4 = panelX3 + num9 * 2 + -num7 * (panelW3 - trimEnd); int panelZ4 = panelZ3 + num10 * 2 + -num8 * (panelW3 - trimEnd); geomStrip5.addTallCap(panelX4, panelZ4, dir1, wallTexCoords2); geomStrip6.addShortCap(panelX4, panelZ4, dir1, wallTexCoords2); } } } flag1 = flag9; flag2 = flag14; flag3 = flag11; flag4 = flag10; flag5 = flag12; tileX += num7; tileZ += num8; panelX2 += num7 * 32; panelZ2 += num8 * 32; } } GeomStrip[] subGeomStrips = new GeomStrip[25]; for (int index = 0; index < 25; ++index) { subGeomStrips[index] = (GeomStrip)null; if (geomStripArray[index].getQuadCount() > 0) { subGeomStrips[index] = geomStripArray[index]; } } this.m_compositeMesh = GeomStrip.createMesh(subGeomStrips); this.m_compositeMesh.setAppearance(24, appearance1); this.m_group.addChild((Node)this.m_compositeMesh); for (int wall = 0; wall < 4; ++wall) { this.m_wallAlphasF8[wall] = 0; this.updateWallAlpha(wall, (int)byte.MaxValue, 0); } }
public void addShortCap(int panelX, int panelZ, GeomStrip.Dir dir, int[] texCoords) { this.addCap(12, 0, panelX, panelZ, dir, texCoords, 8); }
public void addTallCap(int panelX, int panelZ, GeomStrip.Dir dir, int[] texCoords) { this.addCap(96, 12, panelX, panelZ, dir, texCoords); }