Beispiel #1
0
	public void ApplyChunkSettings(Chunk chunk, CubedObjectBehaviour parent) {
		this.chunk = chunk;
		renderer.materials = new Material[] { chunk.blockMaterial };
		
		var mesh = new Mesh();
		mesh.Clear();
	    mesh.vertices = chunk.meshData.RenderableVertices.ToArray();
	    mesh.triangles = chunk.meshData.RenderableTriangles.ToArray();
	    mesh.uv = chunk.meshData.RenderableUvs.ToArray();
	    mesh.RecalculateNormals();
		
		var meshFilter = GetComponent<MeshFilter>();
	    // sharedMesh is null during generation
	    // TODO: Fix this as the generator shows errors in the console when using mesh vs. sharedMesh
	    //mesh = (meshFilter.mesh if EditorApplication.isPlayingOrWillChangePlaymode else meshFilter.sharedMesh)
		if(Application.isPlaying) meshFilter.mesh = mesh;
		else meshFilter.sharedMesh = mesh;
		
		if(parent.colliderType == ColliderType.MeshColliderPerChunk) {
			var colliderMesh = new Mesh();
			colliderMesh.vertices = chunk.meshData.CollidableVertices.ToArray();
			colliderMesh.triangles = chunk.meshData.CollidableTriangles.ToArray();
			var meshCollider = GetComponent<MeshCollider>();
			if(colliderMesh != null) {
				if(meshCollider == null) meshCollider = gameObject.AddComponent<MeshCollider>();
			   	meshCollider.sharedMesh = colliderMesh;
			   	meshCollider.convex = false;
				meshCollider.enabled = true;
			}
			else {
				if(meshCollider != null) meshCollider.enabled = false;
			}
		}
		transform.localPosition = (chunk.gridPosition * parent.chunkDimensions).ToVector3() * parent.cubeSize;
	}
Beispiel #2
0
    // Use this for initialization
    void Awake()
    {
        var cubedObjectGameObject = GameObject.Find("Cube Terrain");

        if (cubedObjectGameObject == null)
        {
            throw new System.Exception("There must be a game object named 'Cube Terrain' on the scene for Digger to work");
        }
        cubedObject = cubedObjectGameObject.GetComponent <CubedObjectBehaviour>();
    }
Beispiel #3
0
    public void ApplyChunkSettings(Chunk chunk, CubedObjectBehaviour parent)
    {
        this.chunk         = chunk;
        renderer.materials = new Material[] { chunk.blockMaterial };

        var mesh = new Mesh();

        mesh.Clear();
        mesh.vertices  = chunk.meshData.RenderableVertices.ToArray();
        mesh.triangles = chunk.meshData.RenderableTriangles.ToArray();
        mesh.uv        = chunk.meshData.RenderableUvs.ToArray();
        mesh.RecalculateNormals();

        var meshFilter = GetComponent <MeshFilter>();

        // sharedMesh is null during generation
        // TODO: Fix this as the generator shows errors in the console when using mesh vs. sharedMesh
        //mesh = (meshFilter.mesh if EditorApplication.isPlayingOrWillChangePlaymode else meshFilter.sharedMesh)
        if (Application.isPlaying)
        {
            meshFilter.mesh = mesh;
        }
        else
        {
            meshFilter.sharedMesh = mesh;
        }

        if (parent.colliderType == ColliderType.MeshColliderPerChunk)
        {
            var colliderMesh = new Mesh();
            colliderMesh.vertices  = chunk.meshData.CollidableVertices.ToArray();
            colliderMesh.triangles = chunk.meshData.CollidableTriangles.ToArray();
            var meshCollider = GetComponent <MeshCollider>();
            if (colliderMesh != null)
            {
                if (meshCollider == null)
                {
                    meshCollider = gameObject.AddComponent <MeshCollider>();
                }
                meshCollider.sharedMesh = colliderMesh;
                meshCollider.convex     = false;
                meshCollider.enabled    = true;
            }
            else
            {
                if (meshCollider != null)
                {
                    meshCollider.enabled = false;
                }
            }
        }
        transform.localPosition = (chunk.gridPosition * parent.chunkDimensions).ToVector3() * parent.cubeSize;
    }
    /// <summary>
    /// Clones from another CubedObjectBehavior. This can be helpful for generators that need to run in threads and
    /// combine their results later.
    /// </summary>
    /// <param name='other'>
    /// The CubedObjectBehavior to clone from.
    /// </param>
    public void CloneFrom(CubedObjectBehaviour other)
    {
        allCubes = new Cube[other.TotalDimensions.x, other.TotalDimensions.y, other.TotalDimensions.z];
        System.Array.Copy(other.allCubes, allCubes, other.allCubes.Length);
        material           = other.material;
        chunkDimensions    = other.chunkDimensions.Clone();
        dimensionsInChunks = other.dimensionsInChunks.Clone();
        colliderType       = other.colliderType;
        cubeLegend         = other.cubeLegend.Clone();
        cubeSize           = other.cubeSize;

        // TODO: Add more things to copy over.
    }
Beispiel #5
0
	// Use this for initialization
	void Awake() {
		var cubedObjectGameObject = GameObject.Find("Cube Terrain");
		if (cubedObjectGameObject == null) throw new System.Exception("There must be a game object named 'Cube Terrain' on the scene for Digger to work");
		cubedObject = cubedObjectGameObject.GetComponent<CubedObjectBehaviour>();
	}
	/// <summary>
	/// Clones from another CubedObjectBehavior. This can be helpful for generators that need to run in threads and
	/// combine their results later.
	/// </summary>
	/// <param name='other'>
	/// The CubedObjectBehavior to clone from.
	/// </param>
	public void CloneFrom(CubedObjectBehaviour other) {
		allCubes = new Cube[other.TotalDimensions.x, other.TotalDimensions.y, other.TotalDimensions.z];
		System.Array.Copy(other.allCubes, allCubes, other.allCubes.Length);
		material = other.material;
		chunkDimensions = other.chunkDimensions.Clone();
		dimensionsInChunks = other.dimensionsInChunks.Clone();
		colliderType = other.colliderType;
		cubeLegend = other.cubeLegend.Clone();
		cubeSize = other.cubeSize;
		
		// TODO: Add more things to copy over.
	}