Advertisement
Guest User

Untitled

a guest
Apr 4th, 2020
171
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.12 KB | None | 0 0
  1. using MarchingCubes;
  2. using Utility;
  3.  
  4. namespace LevelEditor {
  5.  
  6.     public class LevelGeometryData {
  7.  
  8.         #region Properties
  9.         public Region3 CubeRegion { get; }
  10.         public Region3 VertRegion { get; }
  11.         public CubeVolume Cubes { get; }
  12.         public VertVolume Verts { get; }
  13.         public FaceVolume Faces { get; }
  14.         #endregion
  15.  
  16.         #region Constructors
  17.         public LevelGeometryData(Coord3 cubeRegionSize) {
  18.             CubeRegion = new Region3(cubeRegionSize);
  19.             VertRegion = new Region3(cubeRegionSize + Coord3.Ones);
  20.             Cubes = new CubeVolume(CubeRegion.Size);
  21.             Verts = new VertVolume(VertRegion.Size);
  22.             Faces = new FaceVolume(CubeRegion.Size);
  23.         }
  24.         #endregion
  25.  
  26.         #region Classes & Interfaces
  27.         public class CubeVolume {
  28.  
  29.             #region Instance Fields
  30.             private int[,,] cubes;
  31.             #endregion
  32.  
  33.             #region Indexers
  34.             public int this[int cubeX, int cubeY, int cubeZ] {
  35.                 get => cubes[cubeX, cubeY, cubeZ];
  36.                 set => cubes[cubeX, cubeY, cubeZ] = value;
  37.             }
  38.  
  39.             public int this[Coord3 cube] {
  40.                 get => cubes[cube.X, cube.Y, cube.Z];
  41.                 set => cubes[cube.X, cube.Y, cube.Z] = value;
  42.             }
  43.             #endregion
  44.  
  45.             #region Constructors
  46.             public CubeVolume(Coord3 size) {
  47.                 cubes = new int[size.X, size.Y, size.Z];
  48.             }
  49.             #endregion
  50.         }
  51.         public class VertVolume {
  52.  
  53.             #region Instance Fields
  54.             private int[,,] verts;
  55.             #endregion
  56.  
  57.             #region Indexers
  58.             public int this[int vertX, int vertY, int vertZ] {
  59.                 get => verts[vertX, vertY, vertZ];
  60.                 set => verts[vertX, vertY, vertZ] = value;
  61.             }
  62.  
  63.             public int this[Coord3 vert] {
  64.                 get => verts[vert.X, vert.Y, vert.Z];
  65.                 set => verts[vert.X, vert.Y, vert.Z] = value;
  66.             }
  67.             #endregion
  68.  
  69.             #region  Constructors
  70.             public VertVolume(Coord3 size) {
  71.                 verts = new int[size.X, size.Y, size.Z];
  72.             }
  73.             #endregion
  74.         }
  75.         public class FaceVolume {
  76.  
  77.             #region Instance Fields
  78.             private int[,,,] faces;
  79.             #endregion
  80.  
  81.             #region Indexers
  82.             public int this[int cubeX, int cubeY, int cubeZ, int faceIndex] {
  83.                 get => faces[cubeX, cubeY, cubeZ, faceIndex];
  84.                 set => faces[cubeX, cubeY, cubeZ, faceIndex] = value;
  85.             }
  86.  
  87.             public int this[Coord3 cube, int faceIndex] {
  88.                 get => faces[cube.X, cube.Y, cube.Z, faceIndex];
  89.                 set => faces[cube.X, cube.Y, cube.Z, faceIndex] = value;
  90.             }
  91.             #endregion
  92.  
  93.             #region Constructors
  94.             public FaceVolume(Coord3 size) {
  95.                 faces = new int[size.X, size.Y, size.Z, Cube.FACES.Length];
  96.             }
  97.             #endregion
  98.         }
  99.         #endregion
  100.     }
  101. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement