Exemple #1
0
    private void UpdateMeshData(Vector3 pPos)
    {
        for (int p = 0; p < 6; p++)
        {
            if (!IsVoxelSolid(pPos + VoxelData.FaceChecks[p]))
            {
                EBlockId blockID = chunkData.map[(int)pPos.x, (int)pPos.y, (int)pPos.z];

                vertices.Add(pPos + VoxelData.VoxelVerts[VoxelData.VoxelTris[p, 0]]);
                vertices.Add(pPos + VoxelData.VoxelVerts[VoxelData.VoxelTris[p, 1]]);
                vertices.Add(pPos + VoxelData.VoxelVerts[VoxelData.VoxelTris[p, 2]]);
                vertices.Add(pPos + VoxelData.VoxelVerts[VoxelData.VoxelTris[p, 3]]);

                for (int i = 0; i < 4; i++)
                {
                    normals.Add(VoxelData.FaceChecks[p]);
                }

                AddTexture(World.Instance.BlockManager.GetTexture(blockID, p));

                triangles.Add(vertexIndex);
                triangles.Add(vertexIndex + 1);
                triangles.Add(vertexIndex + 2);
                triangles.Add(vertexIndex + 2);
                triangles.Add(vertexIndex + 1);
                triangles.Add(vertexIndex + 3);
                vertexIndex += 4;
            }
        }
    }
Exemple #2
0
    public void EditVoxel(Vector3 pPos, EBlockId pNewID)
    {
        int xCheck = Mathf.FloorToInt(pPos.x);
        int yCheck = Mathf.FloorToInt(pPos.y);
        int zCheck = Mathf.FloorToInt(pPos.z);


        xCheck -= Mathf.FloorToInt(chunkObject.transform.position.x);
        zCheck -= Mathf.FloorToInt(chunkObject.transform.position.z);

        chunkData.map[xCheck, yCheck, zCheck] = pNewID;

        World.Instance.WorldData.AddToModifiedChunkList(chunkData);

        UpdateSurroundingVoxels(xCheck, yCheck, zCheck);
        UpdateChunk();
    }
Exemple #3
0
    internal float GetDuration(EBlockId pId)
    {
        switch (pId)
        {
        case EBlockId.Yellow: return(0.2f);

        case EBlockId.Blue: return(0.5f);

        case EBlockId.Pink: return(1f);

        case EBlockId.Orange: return(2f);

        case EBlockId.Stone: return(0.2f);

        case EBlockId.Bedrock: return(int.MaxValue);
        }
        return(0);
    }
Exemple #4
0
    public void TryDestroyVoxel(Vector3 pPos, float pMouseHoldTime)
    {
        int xCheck = Mathf.FloorToInt(pPos.x);
        int yCheck = Mathf.FloorToInt(pPos.y);
        int zCheck = Mathf.FloorToInt(pPos.z);


        xCheck -= Mathf.FloorToInt(chunkObject.transform.position.x);
        zCheck -= Mathf.FloorToInt(chunkObject.transform.position.z);

        EBlockId id           = chunkData.map[xCheck, yCheck, zCheck];
        float    duration     = World.Instance.BlockManager.GetDuration(id);
        string   durationText = id == EBlockId.Bedrock ? "undestructable" : duration.ToString("0.0");
        string   debugText    = $"Try destroy: {pMouseHoldTime:0.0}/{durationText}";

        World.Instance.DebugScreen.DestroyText = debugText;
        Debug.Log(debugText);
        if (duration < pMouseHoldTime)
        {
            EditVoxel(pPos, EBlockId.None);
        }
    }
Exemple #5
0
 internal int GetTexture(EBlockId pId, int pFace)
 {
     return(blockTypes[pId].GetTexture(pFace));
 }
Exemple #6
0
 internal bool IsSolid(EBlockId pId)
 {
     return(pId != EBlockId.None);
 }
Exemple #7
0
 private void Init()
 {
     map = new EBlockId[Settings.Get.ChunkWidth, Settings.Get.ChunkHeight, Settings.Get.ChunkWidth];
 }
    public bool IsVoxelSolid(Vector3 pPos)
    {
        EBlockId voxel = World.Instance.WorldData.GetVoxel(pPos);

        return(World.Instance.BlockManager.IsSolid(voxel));
    }