public OCTerrainGenerator(OpenCog.Map.OCMap map) { this.map = map; Debug.Log("OCTerrainGenerator is getting the BlockSet from the Map."); OpenCog.BlockSet.OCBlockSet blockSet = map.GetBlockSet(); Debug.Log("BlockSet retrieved..."); water = blockSet.GetBlock("Water"); grass = blockSet.GetBlock("Grass"); if (grass == null) { Debug.Log("We have no Grass! :("); for (int i = 0; i < blockSet.Blocks.Length; i++) { Debug.Log("But we have " + blockSet.Blocks[i].GetName()); } } dirt = blockSet.GetBlock("Dirt"); sand = blockSet.GetBlock("Sand"); stone = blockSet.GetBlock("Stone"); snow = blockSet.GetBlock("Snow"); ice = blockSet.GetBlock("Ice"); }
//--------------------------------------------------------------------------- #endregion //--------------------------------------------------------------------------- #region Accessors and Mutators //--------------------------------------------------------------------------- //--------------------------------------------------------------------------- #endregion //--------------------------------------------------------------------------- #region Public Member Functions //--------------------------------------------------------------------------- public void Awake() { OpenCog.Map.OCMap map = (OpenCog.Map.OCMap)GameObject.FindObjectOfType(typeof(OpenCog.Map.OCMap)); _blockSet = map.GetBlockSet(); _player = GameObject.FindGameObjectWithTag("Player"); _builder = (OpenCog.Builder.OCBuilder)_player.GetComponent <OpenCog.Builder.OCBuilder>(); }
//--------------------------------------------------------------------------- #region Private Member Data //--------------------------------------------------------------------------- //--------------------------------------------------------------------------- #endregion //--------------------------------------------------------------------------- #region Accessors and Mutators //--------------------------------------------------------------------------- //--------------------------------------------------------------------------- #endregion //--------------------------------------------------------------------------- #region Public Member Functions //--------------------------------------------------------------------------- public static void Build(Vector3i localPos, Vector3i worldPos, OpenCog.Map.OCMap map, OpenCog.Builder.OCMeshBuilder mesh, bool onlyLight) { if (!onlyLight) { BuildCross((Vector3)localPos, worldPos, map, mesh); } BuildCrossLight(map, worldPos, mesh); }
public static UnityEngine.Color GetBlockLight(OpenCog.Map.OCMap map, Vector3i pos) { Vector3i chunkPos = OpenCog.Map.OCChunk.ToChunkPosition(pos); Vector3i localPos = OpenCog.Map.OCChunk.ToLocalPosition(pos); float light = (float)map.GetLightmap().GetLight(chunkPos, localPos) / OpenCog.Map.Lighting.OCSunLightComputer.MAX_LIGHT; float sun = (float)map.GetSunLightmap().GetLight(chunkPos, localPos, pos.y) / OpenCog.Map.Lighting.OCSunLightComputer.MAX_LIGHT; return(new UnityEngine.Color(light, light, light, sun)); }
private static void BuildCross(Vector3 localPos, Vector3i worldPos, OpenCog.Map.OCMap map, OpenCog.Builder.OCMeshBuilder mesh) { OCCrossBlock cross = (OCCrossBlock)map.GetBlock(worldPos).block; mesh.AddIndices(cross.AtlasID, indices); mesh.AddVertices(vertices, localPos); mesh.AddNormals(normals); mesh.AddTexCoords(cross.GetFaceUV()); mesh.AddTexCoords(cross.GetFaceUV()); mesh.AddTexCoords(cross.GetFaceUV()); mesh.AddTexCoords(cross.GetFaceUV()); }
//--------------------------------------------------------------------------- #endregion //--------------------------------------------------------------------------- #region Private Member Functions //--------------------------------------------------------------------------- private static bool IsFaceVisible(OpenCog.Map.OCMap map, Vector3i nearPos, OpenCog.BlockSet.BaseBlockSet.OCCubeBlock.CubeFace face) { if (face == OCCubeBlock.CubeFace.Top) { OpenCog.Map.OCBlockData block = map.GetBlock(nearPos); return(block.IsEmpty() || !block.IsFluid()); } else { return(map.GetBlock(nearPos).IsEmpty()); } }
public static UnityEngine.Color GetSmoothVertexLight(OpenCog.Map.OCMap map, Vector3i pos, UnityEngine.Vector3 vertex, OpenCog.BlockSet.BaseBlockSet.OCCubeBlock.CubeFace face) { // pos - позиция блока // vertex позиция вершины относительно блока т.е. от -0.5 до 0.5 int dx = (int)Mathf.Sign(vertex.x); int dy = (int)Mathf.Sign(vertex.y); int dz = (int)Mathf.Sign(vertex.z); Vector3i a, b, c, d; if (face == OCCubeBlock.CubeFace.Left || face == OCCubeBlock.CubeFace.Right) // X { a = pos + new Vector3i(dx, 0, 0); b = pos + new Vector3i(dx, dy, 0); c = pos + new Vector3i(dx, 0, dz); d = pos + new Vector3i(dx, dy, dz); } else if (face == OCCubeBlock.CubeFace.Bottom || face == OCCubeBlock.CubeFace.Top) // Y { a = pos + new Vector3i(0, dy, 0); b = pos + new Vector3i(dx, dy, 0); c = pos + new Vector3i(0, dy, dz); d = pos + new Vector3i(dx, dy, dz); } else // Z { a = pos + new Vector3i(0, 0, dz); b = pos + new Vector3i(dx, 0, dz); c = pos + new Vector3i(0, dy, dz); d = pos + new Vector3i(dx, dy, dz); } if (map.GetBlock(b).IsAlpha() || map.GetBlock(c).IsAlpha()) { Color c1 = GetBlockLight(map, a); Color c2 = GetBlockLight(map, b); Color c3 = GetBlockLight(map, c); Color c4 = GetBlockLight(map, d); return((c1 + c2 + c3 + c4) / 4f); } else { Color c1 = GetBlockLight(map, a); Color c2 = GetBlockLight(map, b); Color c3 = GetBlockLight(map, c); return((c1 + c2 + c3) / 3f); } }
public OCChunk(OCMap map, Vector3i position) { this.map = map; this.position = position; for(int x=blocks.GetMinX(); x < blocks.GetMaxX(); ++x) { for(int y=blocks.GetMinY(); y < blocks.GetMaxY(); ++y) { for(int z=blocks.GetMinZ (); z < blocks.GetMaxZ (); ++z) { Vector3i pos = new Vector3i(x, y, z); blocks.Set(OCBlockData.CreateInstance<OCBlockData>().Init(null,pos), pos); } } } }
public OCChunk(OCMap map, Vector3i position) { this.map = map; this.position = position; for (int x = blocks.GetMinX(); x < blocks.GetMaxX(); ++x) { for (int y = blocks.GetMinY(); y < blocks.GetMaxY(); ++y) { for (int z = blocks.GetMinZ(); z < blocks.GetMaxZ(); ++z) { Vector3i pos = new Vector3i(x, y, z); blocks.Set(OCBlockData.CreateInstance <OCBlockData>().Init(null, pos), pos); } } } }
private static bool IsFaceVisible(OpenCog.Map.OCMap map, OpenCog.BlockSet.BaseBlockSet.OCCubeBlock.CubeFace face, Vector3i nearPos) { if (face == OpenCog.BlockSet.BaseBlockSet.OCCubeBlock.CubeFace.Bottom || face == OpenCog.BlockSet.BaseBlockSet.OCCubeBlock.CubeFace.Top) { OCBlock block = map.GetBlock(nearPos).block; if (block is OCCubeBlock && !block.IsAlpha()) { return(false); } if (block is OCCactusBlock) { return(false); } } return(true); }
private static UnityEngine.Color ComputeSmoothLight(OpenCog.Map.OCMap map, Vector3i a, Vector3i b, Vector3i c, Vector3i d) { if (map.GetBlock(b).IsAlpha() || map.GetBlock(c).IsAlpha()) { UnityEngine.Color c1 = GetBlockLight(map, a); UnityEngine.Color c2 = GetBlockLight(map, b); UnityEngine.Color c3 = GetBlockLight(map, c); UnityEngine.Color c4 = GetBlockLight(map, d); return((c1 + c2 + c3 + c4) / 4f); } else { UnityEngine.Color c1 = GetBlockLight(map, a); UnityEngine.Color c2 = GetBlockLight(map, b); UnityEngine.Color c3 = GetBlockLight(map, c); return((c1 + c2 + c3) / 3f); } }
public static OCChunkRenderer CreateChunkRenderer(Vector3i pos, OpenCog.Map.OCMap map, OCChunk chunk) { UnityEngine.GameObject go = new UnityEngine.GameObject("(" + pos.x + " " + pos.y + " " + pos.z + ")", typeof(UnityEngine.MeshFilter), typeof(UnityEngine.MeshRenderer), typeof(OpenCog.Map.OCChunkRenderer)); go.transform.parent = map.transform; go.transform.localPosition = new UnityEngine.Vector3(pos.x * OpenCog.Map.OCChunk.SIZE_X, pos.y * OpenCog.Map.OCChunk.SIZE_Y, pos.z * OpenCog.Map.OCChunk.SIZE_Z); go.transform.localRotation = UnityEngine.Quaternion.identity; go.transform.localScale = UnityEngine.Vector3.one; OCChunkRenderer chunkRenderer = go.GetComponent <OCChunkRenderer>(); chunkRenderer.BlockSet = map.GetBlockSet(); chunkRenderer.Chunk = chunk; go.renderer.castShadows = false; go.renderer.receiveShadows = false; return(chunkRenderer); }
//--------------------------------------------------------------------------- #region Private Member Data //--------------------------------------------------------------------------- //--------------------------------------------------------------------------- #endregion //--------------------------------------------------------------------------- #region Accessors and Mutators //--------------------------------------------------------------------------- //--------------------------------------------------------------------------- #endregion //--------------------------------------------------------------------------- #region Public Member Functions //--------------------------------------------------------------------------- public static void Build(Vector3i localPos, Vector3i worldPos, OpenCog.Map.OCMap map, OpenCog.Builder.OCMeshBuilder mesh, bool onlyLight) { OCFluidBlock fluid = (OCFluidBlock)map.GetBlock(worldPos).block; for (int i = 0; i < 6; i++) { OCCubeBlock.CubeFace face = OpenCog.Builder.OCCubeBuilder.faces[i]; Vector3i dir = OpenCog.Builder.OCCubeBuilder.directions[i]; Vector3i nearPos = worldPos + dir; if (IsFaceVisible(map, nearPos, face)) { if (!onlyLight) { BuildFace(face, fluid, (UnityEngine.Vector3)localPos, mesh); } BuildFaceLight(face, map, worldPos, mesh); } } }
public static void Build(Vector3i localPos, Vector3i worldPos, OpenCog.Map.OCMap map, OpenCog.Builder.OCMeshBuilder mesh, bool onlyLight) { OpenCog.Map.OCBlockData block = map.GetBlock(worldPos); OCCubeBlock cube = (OCCubeBlock)block.block; OpenCog.Map.OCBlockDirection direction = block.GetDirection(); for (int i = 0; i < 6; i++) { OCCubeBlock.CubeFace face = faces[i]; Vector3i dir = directions[i]; Vector3i nearPos = worldPos + dir; if (IsFaceVisible(map, nearPos)) { if (!onlyLight) { BuildFace(face, cube, direction, localPos, mesh); } BuildFaceLight(face, map, worldPos, mesh); } } }
//--------------------------------------------------------------------------- #endregion //--------------------------------------------------------------------------- #region Private Member Functions //--------------------------------------------------------------------------- private static void Build(OpenCog.Map.OCChunk chunk, bool onlyLight) { OpenCog.Map.OCMap map = chunk.GetMap(); _meshData.Clear(); for (int z = 0; z < OpenCog.Map.OCChunk.SIZE_Z; z++) { for (int y = 0; y < OpenCog.Map.OCChunk.SIZE_Y; y++) { for (int x = 0; x < OpenCog.Map.OCChunk.SIZE_X; x++) { OCBlock block = chunk.GetBlock(x, y, z).block; if (block != null) { Vector3i localPos = new Vector3i(x, y, z); Vector3i worldPos = OpenCog.Map.OCChunk.ToWorldPosition(chunk.GetPosition(), localPos); if (worldPos.y > 0) { block.Build(localPos, worldPos, map, _meshData, onlyLight); } } } } } }
public abstract void Build(Vector3i localPos, Vector3i worldPos, OpenCog.Map.OCMap map, OpenCog.Builder.OCMeshBuilder mesh, bool onlyLight);
public override void Build(Vector3i localPos, Vector3i worldPos, OpenCog.Map.OCMap map, OpenCog.Builder.OCMeshBuilder mesh, bool onlyLight) { OpenCog.Builder.OCCactusBuilder.Build(localPos, worldPos, map, mesh, onlyLight); }
public OCChunk(OCMap map, Vector3i position) { this.map = map; this.position = position; }
private static void BuildFaceLight(OpenCog.BlockSet.BaseBlockSet.OCCubeBlock.CubeFace face, OpenCog.Map.OCMap map, Vector3i pos, OpenCog.Builder.OCMeshBuilder mesh) { Vector3i dir = OpenCog.Builder.OCCubeBuilder.directions[(int)face]; UnityEngine.Color color = OpenCog.Builder.OCBuildUtils.GetBlockLight(map, pos + dir); mesh.AddFaceColor(color); }
private static void BuildFaceLight(OpenCog.BlockSet.BaseBlockSet.OCCubeBlock.CubeFace face, OpenCog.Map.OCMap map, Vector3i pos, OpenCog.Builder.OCMeshBuilder mesh) { foreach (Vector3 ver in vertices[(int)face]) { Color color = OpenCog.Builder.OCBuildUtils.GetSmoothVertexLight(map, pos, ver, face); mesh.AddColor(color); } }
private static void BuildCrossLight(OpenCog.Map.OCMap map, Vector3i pos, OpenCog.Builder.OCMeshBuilder mesh) { UnityEngine.Color color = OpenCog.Builder.OCBuildUtils.GetBlockLight(map, pos); mesh.AddColors(color, vertices.Length); }
//--------------------------------------------------------------------------- #endregion //--------------------------------------------------------------------------- #region Private Member Functions //--------------------------------------------------------------------------- private static bool IsFaceVisible(OpenCog.Map.OCMap map, Vector3i nearPos) { OCBlock block = map.GetBlock(nearPos).block; return(!(block is OCCubeBlock) || block.IsAlpha()); }