示例#1
0
文件: Chunk.cs 项目: silantzis/swarm
    private void BuildBoxColliders(ColliderBuffer buffer)
    {
        //fetch a list of colliders we already own
        BlockCollider[] colliders = GetComponentsInChildren<BlockCollider>();

        int colliderCount = colliders.Length;
        int currentCollider = 0;

        List<ColliderData> colliderData = buffer.GetColliderData();

        foreach (ColliderData data in colliderData)
        {
            BlockCollider collider = null;
            if (currentCollider < colliderCount)
            {
                collider = colliders[currentCollider];
            }
            else
            {
                //we don;t have enough children, get some from the pool,
                //if the pool is empty; new colliders will be created for us
                GameObject obj  = ObjectPool.instance.GetObjectForType("BlockCollider", false);

                if (obj)
                {
                    obj.hideFlags = 0;
                    obj.transform.parent = transform;
                    collider = obj.GetComponent<BlockCollider>();

                    collider.Init (this);

                    colliderCount++;
                }
            }

            if (collider)
            {
                collider.transform.localRotation = Quaternion.identity;
                collider.SetPosition(data.position);
                collider.SetSize(data.size);
                collider.enabled = true;

                currentCollider++;
            }
        }

        //release any excess children back into the pool
        for (int i=currentCollider; i<colliderCount; i++)
        {
            ObjectPool.instance.PoolObject(colliders[i].gameObject);
        }

        //clear our collider buffer
        buffer.Clear();
    }