Beispiel #1
0
 //Chunks in this queue have been altered by the player, and are currently within the collision radius.
 //Only que if not already in queue
 private void FlagCollisionChunkForPriorityUpdate(CollisionChunk collisionChunkToUpdate)
 {
     if (!collisionChunkPriorityUpdateQueue.Contains(collisionChunkToUpdate))
     {
         collisionChunkPriorityUpdateQueue.Enqueue(collisionChunkToUpdate);
     }
 }
Beispiel #2
0
 private void UpdatePriorityCollisionChunkQueue()
 {
     for (int i = 0; i < priorityCollisionChunksPerFrame; i++)
     {
         if (collisionChunkPriorityUpdateQueue.Count > 0)
         {
             CollisionChunk chunkToActivate = collisionChunkPriorityUpdateQueue.Dequeue();
             chunkToActivate.UpdateCollisionChunk(marchingGrid);
             chunkToActivate.gameObject.SetActive(true);                     //Update the mesh before waking the object to prevent baking collision data twice.
         }
     }
 }
Beispiel #3
0
    private void InstantiateCollisionChunk(int x, int y)
    {
        if (collisionChunkArray [x, y] == null)
        {
            CollisionChunk newCollisionChunk = PullCollisionChunkFromPool();
            newCollisionChunk.SetChunkCoord(new Coord(x, y));

            //Don't immediately update chunk, as many chunks will be added at once as the player crosses grid lines in
            //chunk coords. Enque, then update one per frame.
            collisionChunkUpdateQueue.Enqueue(newCollisionChunk);
            collisionChunkArray [x, y] = newCollisionChunk.GetComponent <CollisionChunk> () as CollisionChunk;
        }
    }
Beispiel #4
0
 //return the next available chunk. If no chunks available, instantiate a new chunk.
 private CollisionChunk PullCollisionChunkFromPool()
 {
     if (collisionChunkPool.Count > 0)
     {
         CollisionChunk collisionChunkToActivate = collisionChunkPool.Pop();
         //	collisionChunkToActivate.gameObject.SetActive (true);
         return(collisionChunkToActivate);
     }
     else
     {
         GameObject newCollisionChunkGO = Instantiate(collisionChunkPrefab, this.transform.position, Quaternion.identity) as GameObject;
         //		newCollisionChunkGO.transform.SetParent (this.transform);
         CollisionChunk newCollisionChunk = newCollisionChunkGO.GetComponent <CollisionChunk> () as CollisionChunk;
         newCollisionChunk.Initialise(chunkSize);
         newCollisionChunkGO.transform.SetParent(this.interiorGO.transform);
         BindCollisionToInterior(newCollisionChunkGO);
         instantiatedCollisionChunkCount++;
         return(newCollisionChunk);
     }
 }
Beispiel #5
0
 private void PushCollisionChunkToPool(CollisionChunk collisionChunkToDeactivate)
 {
     collisionChunkToDeactivate.gameObject.SetActive(false);
     collisionChunkPool.Push(collisionChunkToDeactivate);
 }