diff --git a/Diamond/Mesh.cs b/Diamond/Mesh.cs index 5901138..1c55449 100644 --- a/Diamond/Mesh.cs +++ b/Diamond/Mesh.cs @@ -1,4 +1,5 @@ using System.Collections.Generic; +using System.Diagnostics.PerformanceData; using System.IO; using System.Linq; using Diamond.Buffers; @@ -91,6 +92,7 @@ namespace Diamond var lines = File.ReadAllLines(file); var meshes = new List>(); + var name = file; var vs = new List(); var vts = new List(); var vns = new List(); @@ -138,15 +140,18 @@ namespace Diamond case "o": if (faces.Count > 0) { - meshes.Add(new Mesh(faces.ToArray())); + meshes.Add(new Mesh(faces.ToArray()) {Name = name}); faces.Clear(); } + name = items[1]; break; } } if (faces.Count > 0) - meshes.Add(new Mesh(faces.ToArray())); + meshes.Add(new Mesh(faces.ToArray()) {Name = name}); + + Join(meshes); return meshes.ToArray(); } diff --git a/hexworld/Driver.cs b/hexworld/Driver.cs index d65bf39..c91e1d8 100644 --- a/hexworld/Driver.cs +++ b/hexworld/Driver.cs @@ -1,10 +1,18 @@ -namespace hexworld +using System; +using Newtonsoft.Json; + +namespace hexworld { public class Driver { public static void Main(string[] args) { using (var gw = new HexRender(1280, 720)) gw.Run(); + +// var tile = JsonConvert.DeserializeObject("{\"mesh\":\"RightColumn\", \"pos\": {\"x\": 1, \"y\": 2, \"z\": 3}}"); +// +// Console.Out.WriteLine("tile = {0}", tile); +// Console.ReadKey(); } } } \ No newline at end of file diff --git a/hexworld/HexRender.cs b/hexworld/HexRender.cs index 072f12e..1006a86 100644 --- a/hexworld/HexRender.cs +++ b/hexworld/HexRender.cs @@ -1,7 +1,9 @@ using System; +using System.Collections.Generic; using System.Diagnostics; using System.Drawing; using System.IO; +using System.Linq; using Diamond; using Diamond.Buffers; using Diamond.Shaders; @@ -13,37 +15,157 @@ using OpenTK.Graphics.OpenGL4; namespace hexworld { + public class Level + { + [JsonProperty("models")] + private string[] MeshNames { get; set; } + + [JsonProperty("tiles")] + private TileInfo[] TileInfos { get; set; } + + private TileData[] _allTiles; + private ObjVertex[] _allVertices; + + private Mesh[] _meshes; + private TileGroup[] _tileGroups; + + private GLBuffer _tileBuffer; + private GLBuffer _vertexBuffer; + + private void InitializeBuffers() + { + _tileBuffer = new GLBuffer(BufferTarget.ArrayBuffer, BufferUsageHint.DynamicDraw); + _tileBuffer.Data(_allTiles); + + _vertexBuffer = new GLBuffer(BufferTarget.ArrayBuffer, BufferUsageHint.StaticDraw); + _vertexBuffer.Data(_allVertices); + } + + public static Level LoadLevel(string file) + { + var level = JsonConvert.DeserializeObject(File.ReadAllText(file)); + + var dir = Path.GetDirectoryName(file); + + + // region assemble mesh map + var meshes = new Dictionary>(); + + foreach (var meshPath in level.MeshNames) + { + var objects = Mesh.FromObj(Path.Combine(dir, meshPath)); + Debug.WriteLine(string.Join("\n", objects.Select(o => o.Name))); + foreach (var mesh in objects) + { + meshes[mesh.Name] = mesh; + } + } + + // region store all used meshes + level._meshes = meshes.Values.ToArray(); + // join meshes + level._allVertices = Mesh.Join(level._meshes); + Debug.WriteLine(level._allVertices.Length); + Debug.WriteLine(level._meshes[1].Vertices.Length); + Debug.WriteLine(level._meshes[1].Vertices.Offset); + + var groupDict = new Dictionary>(); + + foreach (var tileInfo in level.TileInfos) + { + var meshName = tileInfo.Mesh; + if (!groupDict.ContainsKey(meshName)) + groupDict[meshName] = new List(); + groupDict[meshName].Add(tileInfo.TileData); + } + + var groupList = new List(); + var tileSubArrayList = new List>(); + + foreach (var kvp in groupDict) + { + var sa = new SubArray(kvp.Value.ToArray()); + groupList.Add(new TileGroup(sa, meshes[kvp.Key])); + tileSubArrayList.Add(sa); + } + + level._tileGroups = groupList.ToArray(); + + level._allTiles = SubArray.Join(tileSubArrayList); + + level.InitializeBuffers(); + + return level; + } + + public void Draw() + { + if (Program.Current == null) + throw new Exception("cant render without a shader."); + + Program.Current.SetAttribPointers(_vertexBuffer); + Program.Current.SetAttribPointers(_tileBuffer); + + foreach (var tileGroup in _tileGroups) + { + tileGroup.Mesh.DrawInstanced(tileGroup.Tiles); + } + } + } + + public class TileInfo + { + [JsonProperty("mesh")] + public string Mesh { get; set; } + + [JsonProperty("pos")] + public Vector3 Position { get; set; } + + public TileData TileData => new TileData(Position); + + public override string ToString() + { + return $"Mesh: {Mesh}, Position: {Position}"; + } + } + + public class TileGroup + { + public SubArray Tiles; + public Mesh Mesh; + + public TileGroup(SubArray tiles, Mesh mesh) + { + Tiles = tiles; + Mesh = mesh; + } + } + public class HexRender : GameWindow { #region Fields #region GLObjects - private Program _jsonPgm; private Program _objPgm; private Texture _grass; private Texture _stone; private Texture _gray; - private GLBuffer _tileBuffer; - private GLBuffer _vertexBuffer; - private GLBuffer _objBuffer; + private Level _level; protected override void OnClosed(EventArgs e) { base.OnClosed(e); - _jsonPgm?.Dispose(); _objPgm?.Dispose(); - _tileBuffer?.Dispose(); - _vertexBuffer?.Dispose(); - _objBuffer?.Dispose(); - _grass?.Dispose(); _stone?.Dispose(); _gray?.Dispose(); + + // _level?.Dispose(); } #endregion @@ -51,20 +173,6 @@ namespace hexworld private Matrix4 _view; private Matrix4 _proj; - private SubArray _grassTiles; - private SubArray _stoneTiles; - private SubArray _grayTiles; - private SubArray _tableTiles; - - private Mesh _cubeMesh; - private Mesh _panelMesh; - private Mesh _sidesMesh; - private Mesh _objMesh; - - private Tile[] _allTiles; - private Vertex[] _allVertices; - private ObjVertex[] _allObjVertices; - private double _time; #endregion @@ -83,34 +191,9 @@ namespace hexworld { base.OnLoad(e); - _jsonPgm = Program.FromFiles(@"res\s.vs.glsl", @"res\s.fs.glsl"); _objPgm = Program.FromFiles(@"res\obj.vs.glsl", @"res\obj.fs.glsl"); - _cubeMesh = Mesh.FromJson(@"res\data_vert_cubes.json"); - _panelMesh = Mesh.FromJson(@"res\data_vert_panels.json"); - _sidesMesh = Mesh.FromJson(@"res\data_vert_sides.json"); - _objMesh = Mesh.FromObj(@"res\door.obj")[0]; - - _grassTiles = new SubArray( - JsonConvert.DeserializeObject(File.ReadAllText(@"res\data_tile_grass.json"))); - _stoneTiles = new SubArray( - JsonConvert.DeserializeObject(File.ReadAllText(@"res\data_tile_stone.json"))); - _grayTiles = new SubArray( - JsonConvert.DeserializeObject(File.ReadAllText(@"res\data_tile_gray.json"))); - _tableTiles = new SubArray( - JsonConvert.DeserializeObject(File.ReadAllText(@"res\data_tile_table.json"))); - - _allTiles = SubArray.Join(_stoneTiles, _grassTiles, _grayTiles, _tableTiles); - _tileBuffer = new GLBuffer(BufferTarget.ArrayBuffer, BufferUsageHint.DynamicDraw); - _tileBuffer.Data(_allTiles); - - _allVertices = Mesh.Join(_panelMesh, _cubeMesh, _sidesMesh); - _vertexBuffer = new GLBuffer(BufferTarget.ArrayBuffer, BufferUsageHint.StaticDraw); - _vertexBuffer.Data(_allVertices); - - _allObjVertices = Mesh.Join(_objMesh); - _objBuffer = new GLBuffer(BufferTarget.ArrayBuffer); - _objBuffer.Data(_allObjVertices); + _level = Level.LoadLevel(@"res\level.json"); _grass = Texture.FromBitmap(new Bitmap(@"res\grass.png")); _stone = Texture.FromBitmap(new Bitmap(@"res\stone.png")); @@ -126,19 +209,6 @@ namespace hexworld _view = Matrix4.CreateRotationZ((float) _time / 3) * Matrix4.LookAt(10 * Vector3.One, Vector3.Zero, Vector3.UnitZ); _proj = Matrix4.CreateOrthographic(Width / 100f, Height / 100f, -100, 100); - - for (var i = 0; i < _grassTiles.Length; i++) - { - var ti = _grassTiles[i]; - _grassTiles[i].Position.Z = - (float) (Math.Sin((_time + ti.Position.X - ti.Position.Y / 1.5) / 1.5) * .25); - } - - _tileBuffer.SubData(_grassTiles); - - _tileBuffer.Bind(); - GL.BufferSubData(BufferTarget.ArrayBuffer, (IntPtr) (5 * 3 * sizeof(float)), - (IntPtr) (16 * 3 * sizeof(float)), _grassTiles.ToArray()); } protected override void OnRenderFrame(FrameEventArgs e) @@ -157,32 +227,6 @@ namespace hexworld GL.Enable(EnableCap.CullFace); GL.CullFace(CullFaceMode.Back); - if (_jsonPgm.Linked) - { - _jsonPgm.Use(); - - _jsonPgm.SetAttribPointers(_tileBuffer); - _jsonPgm.SetAttribPointers(_vertexBuffer); - - _grass.Bind(0); - _stone.Bind(1); - _gray.Bind(2); - - GL.Uniform1(_jsonPgm.GetUniform("tex"), 0); - GL.UniformMatrix4(_jsonPgm.GetUniform("view"), false, ref _view); - GL.UniformMatrix4(_jsonPgm.GetUniform("proj"), false, ref _proj); - - _cubeMesh.DrawInstanced(_grassTiles); - - GL.Uniform1(_jsonPgm.GetUniform("tex"), 1); - - _panelMesh.DrawInstanced(_stoneTiles); - - GL.Uniform1(_jsonPgm.GetUniform("tex"), 2); - - _sidesMesh.DrawInstanced(_grayTiles); - } - if (_objPgm.Linked) { _objPgm.Use(); @@ -191,14 +235,11 @@ namespace hexworld _stone.Bind(1); _gray.Bind(2); - _objPgm.SetAttribPointers(_tileBuffer); - _objPgm.SetAttribPointers(_objBuffer); - GL.Uniform1(_objPgm.GetUniform("tex"), 2); GL.UniformMatrix4(_objPgm.GetUniform("view"), false, ref _view); GL.UniformMatrix4(_objPgm.GetUniform("proj"), false, ref _proj); - _objMesh.DrawInstanced(_tableTiles); + _level.Draw(); } SwapBuffers(); diff --git a/hexworld/Tile.cs b/hexworld/TileData.cs similarity index 85% rename from hexworld/Tile.cs rename to hexworld/TileData.cs index e8f2619..4e386b2 100644 --- a/hexworld/Tile.cs +++ b/hexworld/TileData.cs @@ -5,13 +5,13 @@ using OpenTK; namespace hexworld { [VertexData(Divisor = 1)] - public struct Tile + public struct TileData { [JsonProperty("pos")] [VertexPointer("glbpos", 3)] public Vector3 Position; - public Tile(Vector3 position) + public TileData(Vector3 position) { Position = position; } diff --git a/hexworld/Vertex.cs b/hexworld/Vertex.cs deleted file mode 100644 index d205eb6..0000000 --- a/hexworld/Vertex.cs +++ /dev/null @@ -1,34 +0,0 @@ -using Diamond.Buffers; -using Newtonsoft.Json; -using OpenTK; - -namespace hexworld -{ - [VertexData] - public struct Vertex - { - [JsonProperty("pos")] - [VertexPointer("locpos", 3)] - public Vector3 Position; - - [JsonProperty("uv")] - [VertexPointer("coord", 2)] - public Vector2 UV; - - [JsonProperty("norm")] - [VertexPointer("norm", 3)] - public Vector3 Normal; - - public Vertex(Vector3 position, Vector2 uv, Vector3 normal) - { - Position = position; - UV = uv; - Normal = normal; - } - - public override string ToString() - { - return $"{nameof(Position)}: {Position}, {nameof(UV)}: {UV}, {nameof(Normal)}: {Normal}"; - } - } -} \ No newline at end of file diff --git a/hexworld/hexworld.csproj b/hexworld/hexworld.csproj index 0496fd3..24fc3e1 100644 --- a/hexworld/hexworld.csproj +++ b/hexworld/hexworld.csproj @@ -51,8 +51,7 @@ - - + @@ -79,6 +78,9 @@ Always + + Always + Always diff --git a/hexworld/res/door.obj b/hexworld/res/door.obj index df00275..f50afa8 100644 --- a/hexworld/res/door.obj +++ b/hexworld/res/door.obj @@ -1,38 +1,38 @@ # Blender v2.78 (sub 0) OBJ File: 'door.blend' # www.blender.org -o Cube.008_Cube.032 -v 0.500000 0.500000 0.000000 -v 0.500000 0.500000 0.375000 -v 1.500000 0.500000 0.000000 -v 1.500000 0.500000 0.375000 -v 0.500000 -0.500000 0.000000 -v 0.500000 -0.500000 0.375000 -v 1.500000 -0.500000 0.000000 -v 1.500000 -0.500000 0.375000 -v 0.625000 0.375000 0.375000 -v 0.625000 0.375000 0.625000 -v 1.375000 0.375000 0.375000 -v 1.375000 0.375000 0.625000 -v 0.625000 -0.375000 0.375000 -v 0.625000 -0.375000 0.625000 -v 1.375000 -0.375000 0.375000 -v 1.375000 -0.375000 0.625000 -v 0.750000 0.250000 0.625000 -v 0.750000 0.250000 1.000000 -v 1.250000 0.250000 0.625000 -v 1.250000 0.250000 1.000000 -v 0.750000 -0.250000 0.625000 -v 0.750000 -0.250000 1.000000 -v 1.250000 -0.250000 0.625000 -v 1.250000 -0.250000 1.000000 -v 0.500000 0.125000 0.375000 -v 0.500000 0.125000 1.000000 -v 0.750000 0.125000 0.375000 -v 0.750000 0.125000 1.000000 -v 0.500000 -0.125000 0.375000 -v 0.500000 -0.125000 1.000000 -v 0.750000 -0.125000 0.375000 -v 0.750000 -0.125000 1.000000 +o BaseRight +v -0.500000 0.500000 -0.500000 +v -0.500000 0.500000 -0.125000 +v 0.500000 0.500000 -0.500000 +v 0.500000 0.500000 -0.125000 +v -0.500000 -0.500000 -0.500000 +v -0.500000 -0.500000 -0.125000 +v 0.500000 -0.500000 -0.500000 +v 0.500000 -0.500000 -0.125000 +v -0.375000 0.375000 -0.125000 +v -0.375000 0.375000 0.125000 +v 0.375000 0.375000 -0.125000 +v 0.375000 0.375000 0.125000 +v -0.375000 -0.375000 -0.125000 +v -0.375000 -0.375000 0.125000 +v 0.375000 -0.375000 -0.125000 +v 0.375000 -0.375000 0.125000 +v -0.250000 0.250000 0.125000 +v -0.250000 0.250000 0.500000 +v 0.250000 0.250000 0.125000 +v 0.250000 0.250000 0.500000 +v -0.250000 -0.250000 0.125000 +v -0.250000 -0.250000 0.500000 +v 0.250000 -0.250000 0.125000 +v 0.250000 -0.250000 0.500000 +v -0.500000 0.125000 -0.125000 +v -0.500000 0.125000 0.500000 +v -0.250000 0.125000 -0.125000 +v -0.250000 0.125000 0.500000 +v -0.500000 -0.125000 -0.125000 +v -0.500000 -0.125000 0.500000 +v -0.250000 -0.125000 -0.125000 +v -0.250000 -0.125000 0.500000 vn -0.0000 1.0000 0.0000 vn 1.0000 0.0000 0.0000 vn 0.0000 -1.0000 0.0000 @@ -57,7 +57,7 @@ f 22//6 17//6 21//6 f 26//1 27//1 25//1 f 32//3 29//3 31//3 f 30//6 25//6 29//6 -f 32//5 26//5 30//5 +f 28//5 30//5 32//5 f 5//6 2//6 1//6 f 2//1 4//1 3//1 f 4//2 8//2 7//2 @@ -76,25 +76,25 @@ f 22//6 18//6 17//6 f 26//1 28//1 27//1 f 32//3 30//3 29//3 f 30//6 26//6 25//6 -f 32//5 28//5 26//5 +f 28//5 26//5 30//5 f 5//6 6//6 2//6 -o Cube.007_Cube.031 -v 0.750000 0.250000 1.000000 -v 0.750000 0.250000 2.000000 -v 1.250000 0.250000 1.000000 -v 1.250000 0.250000 2.000000 -v 0.750000 -0.250000 1.000000 -v 0.750000 -0.250000 2.000000 -v 1.250000 -0.250000 1.000000 -v 1.250000 -0.250000 2.000000 -v 0.500000 0.125000 1.000000 -v 0.500000 0.125000 2.000000 -v 0.750000 0.125000 1.000000 -v 0.750000 0.125000 2.000000 -v 0.500000 -0.125000 1.000000 -v 0.500000 -0.125000 2.000000 -v 0.750000 -0.125000 1.000000 -v 0.750000 -0.125000 2.000000 +o ColRight +v -0.250000 0.250000 -0.500000 +v -0.250000 0.250000 0.500000 +v 0.250000 0.250000 -0.500000 +v 0.250000 0.250000 0.500000 +v -0.250000 -0.250000 -0.500000 +v -0.250000 -0.250000 0.500000 +v 0.250000 -0.250000 -0.500000 +v 0.250000 -0.250000 0.500000 +v -0.500000 0.125000 -0.500000 +v -0.500000 0.125000 0.500000 +v -0.250000 0.125000 -0.500000 +v -0.250000 0.125000 0.500000 +v -0.500000 -0.125000 -0.500000 +v -0.500000 -0.125000 0.500000 +v -0.250000 -0.125000 -0.500000 +v -0.250000 -0.125000 0.500000 vn -0.0000 1.0000 0.0000 vn 1.0000 0.0000 0.0000 vn 0.0000 -1.0000 0.0000 @@ -114,43 +114,43 @@ f 38//10 34//10 33//10 f 42//7 44//7 43//7 f 48//9 46//9 45//9 f 46//10 42//10 41//10 -o Cube.006_Cube.030 -v 0.500000 0.125000 3.000000 -v 0.500000 0.125000 3.250000 -v 0.750000 0.125000 3.000000 -v 0.750000 0.125000 3.250000 -v 0.500000 -0.125000 3.000000 -v 0.500000 -0.125000 3.250000 -v 0.750000 -0.125000 3.000000 -v 0.750000 -0.125000 3.250000 -v 0.500000 0.250000 3.250000 -v 0.500000 0.250000 3.750000 -v 1.250000 0.250000 3.250000 -v 1.250000 0.250000 3.750000 -v 0.500000 -0.250000 3.250000 -v 0.500000 -0.250000 3.750000 -v 1.250000 -0.250000 3.250000 -v 1.250000 -0.250000 3.750000 -v 0.625000 0.375000 3.125000 -v 0.625000 0.375000 3.375000 -v 1.375000 0.375000 3.125000 -v 1.375000 0.375000 3.375000 -v 0.625000 -0.375000 3.125000 -v 0.625000 -0.375000 3.375000 -v 1.375000 -0.375000 3.125000 -v 1.375000 -0.375000 3.375000 -v 0.750000 0.250000 3.000000 -v 0.750000 0.250000 3.125000 -v 1.250000 0.250000 3.000000 -v 1.250000 0.250000 3.125000 -v 0.750000 -0.250000 3.000000 -v 0.750000 -0.250000 3.125000 -v 1.250000 -0.250000 3.000000 -v 1.250000 -0.250000 3.125000 +o CapRight +v -0.500000 0.125000 -0.500000 +v -0.500000 0.125000 -0.250000 +v -0.250000 0.125000 -0.500000 +v -0.250000 0.125000 -0.250000 +v -0.500000 -0.125000 -0.500000 +v -0.500000 -0.125000 -0.250000 +v -0.250000 -0.125000 -0.500000 +v -0.250000 -0.125000 -0.250000 +v -0.500000 0.250000 -0.250000 +v -0.500000 0.250000 0.250000 +v 0.250000 0.250000 -0.250000 +v 0.250000 0.250000 0.250000 +v -0.500000 -0.250000 -0.250000 +v -0.500000 -0.250000 0.250000 +v 0.250000 -0.250000 -0.250000 +v 0.250000 -0.250000 0.250000 +v -0.375000 0.375000 -0.375000 +v -0.375000 0.375000 -0.125000 +v 0.375000 0.375000 -0.375000 +v 0.375000 0.375000 -0.125000 +v -0.375000 -0.375000 -0.375000 +v -0.375000 -0.375000 -0.125000 +v 0.375000 -0.375000 -0.375000 +v 0.375000 -0.375000 -0.125000 +v -0.250000 0.250000 -0.500000 +v -0.250000 0.250000 -0.375000 +v 0.250000 0.250000 -0.500000 +v 0.250000 0.250000 -0.375000 +v -0.250000 -0.250000 -0.500000 +v -0.250000 -0.250000 -0.375000 +v 0.250000 -0.250000 -0.500000 +v 0.250000 -0.250000 -0.375000 vn -0.0000 1.0000 0.0000 vn 1.0000 0.0000 0.0000 vn 0.0000 -1.0000 0.0000 -vn -0.0000 0.0000 -1.0000 +vn 0.0000 0.0000 -1.0000 vn 0.0000 0.0000 1.0000 vn -1.0000 -0.0000 0.0000 s off @@ -160,7 +160,7 @@ f 56//13 53//13 55//13 f 58//11 59//11 57//11 f 60//12 63//12 59//12 f 64//13 61//13 63//13 -f 59//14 61//14 57//14 +f 63//14 57//14 59//14 f 60//15 62//15 64//15 f 66//11 67//11 65//11 f 68//12 71//12 67//12 @@ -178,7 +178,7 @@ f 56//13 54//13 53//13 f 58//11 60//11 59//11 f 60//12 64//12 63//12 f 64//13 62//13 61//13 -f 59//14 63//14 61//14 +f 63//14 61//14 57//14 f 60//15 58//15 62//15 f 66//11 68//11 67//11 f 68//12 72//12 71//12 @@ -190,147 +190,187 @@ f 74//11 76//11 75//11 f 76//12 80//12 79//12 f 80//13 78//13 77//13 f 78//16 74//16 73//16 -o Cube.000_Cube.029 -v 0.750000 0.250000 2.000000 -v 0.750000 0.250000 3.000000 -v 1.250000 0.250000 2.000000 -v 1.250000 0.250000 3.000000 -v 0.750000 -0.250000 2.000000 -v 0.750000 -0.250000 3.000000 -v 1.250000 -0.250000 2.000000 -v 1.250000 -0.250000 3.000000 -v 0.500000 0.125000 2.000000 -v 0.500000 0.125000 3.000000 -v 0.750000 0.125000 2.000000 -v 0.750000 0.125000 3.000000 -v 0.500000 -0.125000 2.000000 -v 0.500000 -0.125000 3.000000 -v 0.750000 -0.125000 2.000000 -v 0.750000 -0.125000 3.000000 -vn -0.0000 1.0000 0.0000 -vn 1.0000 0.0000 0.0000 +o Lintel +v 0.500000 -0.250000 -0.250000 +v 0.500000 -0.250000 0.250000 +v -0.500000 -0.250000 -0.250000 +v -0.500000 -0.250000 0.250000 +v 0.500000 0.250000 -0.250000 +v 0.500000 0.250000 0.250000 +v -0.500000 0.250000 -0.250000 +v -0.500000 0.250000 0.250000 +v 0.500000 -0.125000 -0.500000 +v 0.500000 -0.125000 -0.250000 +v -0.500000 -0.125000 -0.500000 +v -0.500000 -0.125000 -0.250000 +v 0.500000 0.125000 -0.500000 +v 0.500000 0.125000 -0.250000 +v -0.500000 0.125000 -0.500000 +v -0.500000 0.125000 -0.250000 vn 0.0000 -1.0000 0.0000 -vn -1.0000 -0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 0.0000 1.0000 s off f 82//17 83//17 81//17 -f 84//18 87//18 83//18 -f 88//19 85//19 87//19 -f 86//20 81//20 85//20 +f 88//18 85//18 87//18 +f 87//19 81//19 83//19 +f 84//20 86//20 88//20 f 90//17 91//17 89//17 -f 96//19 93//19 95//19 -f 94//20 89//20 93//20 +f 96//18 93//18 95//18 +f 95//19 89//19 91//19 f 82//17 84//17 83//17 -f 84//18 88//18 87//18 -f 88//19 86//19 85//19 -f 86//20 82//20 81//20 +f 88//18 86//18 85//18 +f 87//19 85//19 81//19 +f 84//20 82//20 86//20 f 90//17 92//17 91//17 -f 96//19 94//19 93//19 -f 94//20 90//20 89//20 -o Cube.005_Cube.024 -v 0.500000 -0.250000 3.250000 -v 0.500000 -0.250000 3.750000 -v -0.500000 -0.250000 3.250000 -v -0.500000 -0.250000 3.750000 -v 0.500000 0.250000 3.250000 -v 0.500000 0.250000 3.750000 -v -0.500000 0.250000 3.250000 -v -0.500000 0.250000 3.750000 -v 0.500000 -0.125000 3.000000 -v 0.500000 -0.125000 3.250000 -v -0.500000 -0.125000 3.000000 -v -0.500000 -0.125000 3.250000 -v 0.500000 0.125000 3.000000 -v 0.500000 0.125000 3.250000 -v -0.500000 0.125000 3.000000 -v -0.500000 0.125000 3.250000 +f 96//18 94//18 93//18 +f 95//19 93//19 89//19 +o CapLeft +v 0.500000 -0.125000 -0.500000 +v 0.500000 -0.125000 -0.250000 +v 0.250000 -0.125000 -0.500000 +v 0.250000 -0.125000 -0.250000 +v 0.500000 0.125000 -0.500000 +v 0.500000 0.125000 -0.250000 +v 0.250000 0.125000 -0.500000 +v 0.250000 0.125000 -0.250000 +v 0.500000 -0.250000 -0.250000 +v 0.500000 -0.250000 0.250000 +v -0.250000 -0.250000 -0.250000 +v -0.250000 -0.250000 0.250000 +v 0.500000 0.250000 -0.250000 +v 0.500000 0.250000 0.250000 +v -0.250000 0.250000 -0.250000 +v -0.250000 0.250000 0.250000 +v 0.375000 -0.375000 -0.375000 +v 0.375000 -0.375000 -0.125000 +v -0.375000 -0.375000 -0.375000 +v -0.375000 -0.375000 -0.125000 +v 0.375000 0.375000 -0.375000 +v 0.375000 0.375000 -0.125000 +v -0.375000 0.375000 -0.375000 +v -0.375000 0.375000 -0.125000 +v 0.250000 -0.250000 -0.500000 +v 0.250000 -0.250000 -0.375000 +v -0.250000 -0.250000 -0.500000 +v -0.250000 -0.250000 -0.375000 +v 0.250000 0.250000 -0.500000 +v 0.250000 0.250000 -0.375000 +v -0.250000 0.250000 -0.500000 +v -0.250000 0.250000 -0.375000 vn 0.0000 -1.0000 0.0000 +vn -1.0000 0.0000 0.0000 vn 0.0000 1.0000 0.0000 vn 0.0000 0.0000 -1.0000 vn 0.0000 0.0000 1.0000 +vn 1.0000 0.0000 0.0000 s off f 98//21 99//21 97//21 -f 104//22 101//22 103//22 -f 103//23 97//23 99//23 -f 100//24 102//24 104//24 +f 100//22 103//22 99//22 +f 104//23 101//23 103//23 f 106//21 107//21 105//21 -f 112//22 109//22 111//22 -f 111//23 105//23 107//23 +f 108//22 111//22 107//22 +f 112//23 109//23 111//23 +f 111//24 105//24 107//24 +f 108//25 110//25 112//25 +f 114//21 115//21 113//21 +f 116//22 119//22 115//22 +f 120//23 117//23 119//23 +f 118//26 113//26 117//26 +f 119//24 113//24 115//24 +f 116//25 118//25 120//25 +f 122//21 123//21 121//21 +f 124//22 127//22 123//22 +f 128//23 125//23 127//23 +f 126//26 121//26 125//26 f 98//21 100//21 99//21 -f 104//22 102//22 101//22 -f 103//23 101//23 97//23 -f 100//24 98//24 102//24 +f 100//22 104//22 103//22 +f 104//23 102//23 101//23 f 106//21 108//21 107//21 -f 112//22 110//22 109//22 -f 111//23 109//23 105//23 -o Cube.004_Cube.022 -v -0.750000 -0.250000 2.000000 -v -0.750000 -0.250000 3.000000 -v -1.250000 -0.250000 2.000000 -v -1.250000 -0.250000 3.000000 -v -0.750000 0.250000 2.000000 -v -0.750000 0.250000 3.000000 -v -1.250000 0.250000 2.000000 -v -1.250000 0.250000 3.000000 -v -0.500000 -0.125000 2.000000 -v -0.500000 -0.125000 3.000000 -v -0.750000 -0.125000 2.000000 -v -0.750000 -0.125000 3.000000 -v -0.500000 0.125000 2.000000 -v -0.500000 0.125000 3.000000 -v -0.750000 0.125000 2.000000 -v -0.750000 0.125000 3.000000 +f 108//22 112//22 111//22 +f 112//23 110//23 109//23 +f 111//24 109//24 105//24 +f 108//25 106//25 110//25 +f 114//21 116//21 115//21 +f 116//22 120//22 119//22 +f 120//23 118//23 117//23 +f 118//26 114//26 113//26 +f 119//24 117//24 113//24 +f 116//25 114//25 118//25 +f 122//21 124//21 123//21 +f 124//22 128//22 127//22 +f 128//23 126//23 125//23 +f 126//26 122//26 121//26 +o ColLeft +v 0.250000 -0.250000 -0.500000 +v 0.250000 -0.250000 0.500000 +v -0.250000 -0.250000 -0.500000 +v -0.250000 -0.250000 0.500000 +v 0.250000 0.250000 -0.500000 +v 0.250000 0.250000 0.500000 +v -0.250000 0.250000 -0.500000 +v -0.250000 0.250000 0.500000 +v 0.500000 -0.125000 -0.500000 +v 0.500000 -0.125000 0.500000 +v 0.250000 -0.125000 -0.500000 +v 0.250000 -0.125000 0.500000 +v 0.500000 0.125000 -0.500000 +v 0.500000 0.125000 0.500000 +v 0.250000 0.125000 -0.500000 +v 0.250000 0.125000 0.500000 vn 0.0000 -1.0000 0.0000 vn -1.0000 0.0000 0.0000 vn 0.0000 1.0000 0.0000 vn 1.0000 0.0000 0.0000 s off -f 114//25 115//25 113//25 -f 116//26 119//26 115//26 -f 120//27 117//27 119//27 -f 118//28 113//28 117//28 -f 122//25 123//25 121//25 -f 128//27 125//27 127//27 -f 126//28 121//28 125//28 -f 114//25 116//25 115//25 -f 116//26 120//26 119//26 -f 120//27 118//27 117//27 -f 118//28 114//28 113//28 -f 122//25 124//25 123//25 -f 128//27 126//27 125//27 -f 126//28 122//28 121//28 -o Cube.002_Cube.021 -v -0.500000 -0.125000 3.000000 -v -0.500000 -0.125000 3.250000 -v -0.750000 -0.125000 3.000000 -v -0.750000 -0.125000 3.250000 -v -0.500000 0.125000 3.000000 -v -0.500000 0.125000 3.250000 -v -0.750000 0.125000 3.000000 -v -0.750000 0.125000 3.250000 -v -0.500000 -0.250000 3.250000 -v -0.500000 -0.250000 3.750000 -v -1.250000 -0.250000 3.250000 -v -1.250000 -0.250000 3.750000 -v -0.500000 0.250000 3.250000 -v -0.500000 0.250000 3.750000 -v -1.250000 0.250000 3.250000 -v -1.250000 0.250000 3.750000 -v -0.625000 -0.375000 3.125000 -v -0.625000 -0.375000 3.375000 -v -1.375000 -0.375000 3.125000 -v -1.375000 -0.375000 3.375000 -v -0.625000 0.375000 3.125000 -v -0.625000 0.375000 3.375000 -v -1.375000 0.375000 3.125000 -v -1.375000 0.375000 3.375000 -v -0.750000 -0.250000 3.000000 -v -0.750000 -0.250000 3.125000 -v -1.250000 -0.250000 3.000000 -v -1.250000 -0.250000 3.125000 -v -0.750000 0.250000 3.000000 -v -0.750000 0.250000 3.125000 -v -1.250000 0.250000 3.000000 -v -1.250000 0.250000 3.125000 +f 130//27 131//27 129//27 +f 132//28 135//28 131//28 +f 136//29 133//29 135//29 +f 134//30 129//30 133//30 +f 138//27 139//27 137//27 +f 144//29 141//29 143//29 +f 142//30 137//30 141//30 +f 130//27 132//27 131//27 +f 132//28 136//28 135//28 +f 136//29 134//29 133//29 +f 134//30 130//30 129//30 +f 138//27 140//27 139//27 +f 144//29 142//29 141//29 +f 142//30 138//30 137//30 +o BaseLeft +v 0.500000 -0.500000 -0.500000 +v 0.500000 -0.500000 -0.125000 +v -0.500000 -0.500000 -0.500000 +v -0.500000 -0.500000 -0.125000 +v 0.500000 0.500000 -0.500000 +v 0.500000 0.500000 -0.125000 +v -0.500000 0.500000 -0.500000 +v -0.500000 0.500000 -0.125000 +v 0.375000 -0.375000 -0.125000 +v 0.375000 -0.375000 0.125000 +v -0.375000 -0.375000 -0.125000 +v -0.375000 -0.375000 0.125000 +v 0.375000 0.375000 -0.125000 +v 0.375000 0.375000 0.125000 +v -0.375000 0.375000 -0.125000 +v -0.375000 0.375000 0.125000 +v 0.250000 -0.250000 0.125000 +v 0.250000 -0.250000 0.500000 +v -0.250000 -0.250000 0.125000 +v -0.250000 -0.250000 0.500000 +v 0.250000 0.250000 0.125000 +v 0.250000 0.250000 0.500000 +v -0.250000 0.250000 0.125000 +v -0.250000 0.250000 0.500000 +v 0.500000 -0.125000 -0.125000 +v 0.500000 -0.125000 0.500000 +v 0.250000 -0.125000 -0.125000 +v 0.250000 -0.125000 0.500000 +v 0.500000 0.125000 -0.125000 +v 0.500000 0.125000 0.500000 +v 0.250000 0.125000 -0.125000 +v 0.250000 0.125000 0.500000 vn 0.0000 -1.0000 0.0000 vn -1.0000 0.0000 0.0000 vn 0.0000 1.0000 0.0000 @@ -338,207 +378,95 @@ vn 0.0000 0.0000 -1.0000 vn 0.0000 0.0000 1.0000 vn 1.0000 0.0000 0.0000 s off -f 130//29 131//29 129//29 -f 132//30 135//30 131//30 -f 136//31 133//31 135//31 -f 138//29 139//29 137//29 -f 140//30 143//30 139//30 -f 144//31 141//31 143//31 -f 143//32 137//32 139//32 -f 140//33 142//33 144//33 -f 146//29 147//29 145//29 -f 148//30 151//30 147//30 -f 152//31 149//31 151//31 -f 150//34 145//34 149//34 -f 151//32 145//32 147//32 -f 148//33 150//33 152//33 -f 154//29 155//29 153//29 -f 156//30 159//30 155//30 -f 160//31 157//31 159//31 -f 158//34 153//34 157//34 -f 130//29 132//29 131//29 -f 132//30 136//30 135//30 -f 136//31 134//31 133//31 -f 138//29 140//29 139//29 -f 140//30 144//30 143//30 -f 144//31 142//31 141//31 -f 143//32 141//32 137//32 -f 140//33 138//33 142//33 -f 146//29 148//29 147//29 -f 148//30 152//30 151//30 -f 152//31 150//31 149//31 -f 150//34 146//34 145//34 -f 151//32 149//32 145//32 -f 148//33 146//33 150//33 -f 154//29 156//29 155//29 -f 156//30 160//30 159//30 -f 160//31 158//31 157//31 -f 158//34 154//34 153//34 -o Cube.003_Cube.016 -v -0.750000 -0.250000 1.000000 -v -0.750000 -0.250000 2.000000 -v -1.250000 -0.250000 1.000000 -v -1.250000 -0.250000 2.000000 -v -0.750000 0.250000 1.000000 -v -0.750000 0.250000 2.000000 -v -1.250000 0.250000 1.000000 -v -1.250000 0.250000 2.000000 -v -0.500000 -0.125000 1.000000 -v -0.500000 -0.125000 2.000000 -v -0.750000 -0.125000 1.000000 -v -0.750000 -0.125000 2.000000 -v -0.500000 0.125000 1.000000 -v -0.500000 0.125000 2.000000 -v -0.750000 0.125000 1.000000 -v -0.750000 0.125000 2.000000 -vn 0.0000 -1.0000 0.0000 -vn -1.0000 0.0000 0.0000 -vn 0.0000 1.0000 0.0000 -vn 1.0000 0.0000 0.0000 -s off -f 162//35 163//35 161//35 -f 164//36 167//36 163//36 -f 168//37 165//37 167//37 -f 166//38 161//38 165//38 -f 170//35 171//35 169//35 -f 176//37 173//37 175//37 -f 174//38 169//38 173//38 -f 162//35 164//35 163//35 -f 164//36 168//36 167//36 -f 168//37 166//37 165//37 -f 166//38 162//38 161//38 -f 170//35 172//35 171//35 -f 176//37 174//37 173//37 -f 174//38 170//38 169//38 -o Cube.001_Cube.014 -v -0.500000 -0.500000 0.000000 -v -0.500000 -0.500000 0.375000 -v -1.500000 -0.500000 0.000000 -v -1.500000 -0.500000 0.375000 -v -0.500000 0.500000 0.000000 -v -0.500000 0.500000 0.375000 -v -1.500000 0.500000 0.000000 -v -1.500000 0.500000 0.375000 -v -0.625000 -0.375000 0.375000 -v -0.625000 -0.375000 0.625000 -v -1.375000 -0.375000 0.375000 -v -1.375000 -0.375000 0.625000 -v -0.625000 0.375000 0.375000 -v -0.625000 0.375000 0.625000 -v -1.375000 0.375000 0.375000 -v -1.375000 0.375000 0.625000 -v -0.750000 -0.250000 0.625000 -v -0.750000 -0.250000 1.000000 -v -1.250000 -0.250000 0.625000 -v -1.250000 -0.250000 1.000000 -v -0.750000 0.250000 0.625000 -v -0.750000 0.250000 1.000000 -v -1.250000 0.250000 0.625000 -v -1.250000 0.250000 1.000000 -v -0.500000 -0.125000 0.375000 -v -0.500000 -0.125000 1.000000 -v -0.750000 -0.125000 0.375000 -v -0.750000 -0.125000 1.000000 -v -0.500000 0.125000 0.375000 -v -0.500000 0.125000 1.000000 -v -0.750000 0.125000 0.375000 -v -0.750000 0.125000 1.000000 -vn 0.0000 -1.0000 0.0000 -vn -1.0000 0.0000 0.0000 -vn 0.0000 1.0000 0.0000 -vn 0.0000 0.0000 -1.0000 -vn 0.0000 0.0000 1.0000 -vn 1.0000 0.0000 0.0000 -s off -f 178//39 179//39 177//39 -f 180//40 183//40 179//40 -f 184//41 181//41 183//41 -f 183//42 177//42 179//42 -f 180//43 182//43 184//43 -f 186//39 187//39 185//39 -f 188//40 191//40 187//40 -f 192//41 189//41 191//41 -f 190//44 185//44 189//44 -f 188//43 190//43 192//43 -f 194//39 195//39 193//39 -f 196//40 199//40 195//40 -f 200//41 197//41 199//41 -f 198//44 193//44 197//44 -f 202//39 203//39 201//39 -f 208//41 205//41 207//41 -f 206//44 201//44 205//44 -f 204//43 206//43 208//43 -f 181//44 178//44 177//44 -f 178//39 180//39 179//39 -f 180//40 184//40 183//40 -f 184//41 182//41 181//41 -f 183//42 181//42 177//42 -f 180//43 178//43 182//43 -f 186//39 188//39 187//39 -f 188//40 192//40 191//40 -f 192//41 190//41 189//41 -f 190//44 186//44 185//44 -f 188//43 186//43 190//43 -f 194//39 196//39 195//39 -f 196//40 200//40 199//40 -f 200//41 198//41 197//41 -f 198//44 194//44 193//44 -f 202//39 204//39 203//39 -f 208//41 206//41 205//41 -f 206//44 202//44 201//44 -f 204//43 202//43 206//43 -f 181//44 182//44 178//44 -o Cube.011_Cube.013 -v -0.500000 -0.500000 0.000000 -v 0.500000 -0.500000 0.000000 -v -0.500000 0.500000 0.000000 -v 0.500000 0.500000 0.000000 -v 0.500000 -0.500000 0.125000 -v -0.500000 -0.500000 0.125000 -v 0.500000 0.500000 0.125000 -v -0.500000 0.500000 0.125000 -v 0.500000 0.375000 0.125000 -v 0.500000 0.375000 0.250000 -v 0.500000 -0.375000 0.250000 -v 0.500000 -0.375000 0.125000 -v -0.500000 -0.375000 0.125000 -v -0.500000 -0.375000 0.250000 -v -0.500000 0.375000 0.250000 -v -0.500000 0.375000 0.125000 -v 0.500000 0.250000 0.250000 -v 0.500000 -0.250000 0.250000 -v -0.500000 -0.250000 0.250000 -v -0.500000 0.250000 0.250000 -v 0.500000 0.250000 0.375000 -v 0.500000 -0.250000 0.375000 -v -0.500000 -0.250000 0.375000 -v -0.500000 0.250000 0.375000 +f 146//31 147//31 145//31 +f 148//32 151//32 147//32 +f 152//33 149//33 151//33 +f 151//34 145//34 147//34 +f 148//35 150//35 152//35 +f 154//31 155//31 153//31 +f 156//32 159//32 155//32 +f 160//33 157//33 159//33 +f 158//36 153//36 157//36 +f 156//35 158//35 160//35 +f 162//31 163//31 161//31 +f 164//32 167//32 163//32 +f 168//33 165//33 167//33 +f 166//36 161//36 165//36 +f 170//31 171//31 169//31 +f 176//33 173//33 175//33 +f 174//36 169//36 173//36 +f 172//35 174//35 176//35 +f 149//36 146//36 145//36 +f 146//31 148//31 147//31 +f 148//32 152//32 151//32 +f 152//33 150//33 149//33 +f 151//34 149//34 145//34 +f 148//35 146//35 150//35 +f 154//31 156//31 155//31 +f 156//32 160//32 159//32 +f 160//33 158//33 157//33 +f 158//36 154//36 153//36 +f 156//35 154//35 158//35 +f 162//31 164//31 163//31 +f 164//32 168//32 167//32 +f 168//33 166//33 165//33 +f 166//36 162//36 161//36 +f 170//31 172//31 171//31 +f 176//33 174//33 173//33 +f 174//36 170//36 169//36 +f 172//35 170//35 174//35 +f 149//36 150//36 146//36 +o Stairs +v -0.500000 -0.500000 -0.500000 +v 0.500000 -0.500000 -0.500000 +v -0.500000 0.500000 -0.500000 +v 0.500000 0.500000 -0.500000 +v 0.500000 -0.500000 -0.375000 +v -0.500000 -0.500000 -0.375000 +v 0.500000 0.500000 -0.375000 +v -0.500000 0.500000 -0.375000 +v 0.500000 0.375000 -0.375000 +v 0.500000 0.375000 -0.250000 +v 0.500000 -0.375000 -0.250000 +v 0.500000 -0.375000 -0.375000 +v -0.500000 -0.375000 -0.375000 +v -0.500000 -0.375000 -0.250000 +v -0.500000 0.375000 -0.250000 +v -0.500000 0.375000 -0.375000 +v 0.500000 0.250000 -0.250000 +v 0.500000 -0.250000 -0.250000 +v -0.500000 -0.250000 -0.250000 +v -0.500000 0.250000 -0.250000 +v 0.500000 0.250000 -0.125000 +v 0.500000 -0.250000 -0.125000 +v -0.500000 -0.250000 -0.125000 +v -0.500000 0.250000 -0.125000 vn 0.0000 0.0000 -1.0000 vn 0.0000 0.0000 1.0000 vn 0.0000 -1.0000 0.0000 vn 0.0000 1.0000 0.0000 s off -f 209//45 212//45 210//45 -f 215//46 224//46 217//46 -f 210//47 214//47 209//47 -f 211//48 215//48 212//48 -f 220//46 214//46 213//46 -f 219//47 221//47 220//47 -f 218//46 228//46 225//46 -f 217//48 223//48 218//48 -f 226//46 222//46 219//46 -f 228//48 229//48 225//48 -f 229//46 231//46 230//46 -f 226//47 231//47 227//47 -f 209//45 211//45 212//45 -f 215//46 216//46 224//46 -f 210//47 213//47 214//47 -f 211//48 216//48 215//48 -f 220//46 221//46 214//46 -f 219//47 222//47 221//47 -f 218//46 223//46 228//46 -f 217//48 224//48 223//48 -f 226//46 227//46 222//46 -f 228//48 232//48 229//48 -f 229//46 232//46 231//46 -f 226//47 230//47 231//47 +f 177//37 180//37 178//37 +f 183//38 192//38 185//38 +f 178//39 182//39 177//39 +f 179//40 183//40 180//40 +f 188//38 182//38 181//38 +f 187//39 189//39 188//39 +f 186//38 196//38 193//38 +f 185//40 191//40 186//40 +f 194//38 190//38 187//38 +f 196//40 197//40 193//40 +f 197//38 199//38 198//38 +f 194//39 199//39 195//39 +f 177//37 179//37 180//37 +f 183//38 184//38 192//38 +f 178//39 181//39 182//39 +f 179//40 184//40 183//40 +f 188//38 189//38 182//38 +f 187//39 190//39 189//39 +f 186//38 191//38 196//38 +f 185//40 192//40 191//40 +f 194//38 195//38 190//38 +f 196//40 200//40 197//40 +f 197//38 200//38 199//38 +f 194//39 198//39 199//39 diff --git a/hexworld/res/level.json b/hexworld/res/level.json new file mode 100644 index 0000000..3d01ccb --- /dev/null +++ b/hexworld/res/level.json @@ -0,0 +1,17 @@ +{ + "models": [ + "door.obj" + ], + "tiles": [ + { "mesh": "BaseLeft", "pos": { "x": -1, "y": 0, "z": 0 } }, + { "mesh": "BaseRight", "pos": { "x": 1, "y": 0, "z": 0 } }, + { "mesh": "Stairs", "pos": { "x": 0, "y": 0, "z": 0 } }, + { "mesh": "ColLeft", "pos": { "x": -1, "y": 0, "z": 1 } }, + { "mesh": "ColRight", "pos": { "x": 1, "y": 0, "z": 1 } }, + { "mesh": "ColLeft", "pos": { "x": -1, "y": 0, "z": 2 } }, + { "mesh": "ColRight", "pos": { "x": 1, "y": 0, "z": 2 } }, + { "mesh": "CapLeft", "pos": { "x": -1, "y": 0, "z": 3 } }, + { "mesh": "Lintel", "pos": { "x": 0, "y": 0, "z": 3 } }, + { "mesh": "CapRight", "pos": { "x": 1, "y": 0, "z": 3 } } + ] +}