Beispiel #1
0
    //
    public void Perform(ECsgOperation inOper, CSGObject inMaster, CSGObject inSlave)
    {
        // we are processing our slave faces
        processState = EProcessState.Process_Slave;

        // process faces against master tree
        PerformFaces(inMaster.rootNode, inSlave.faces);

        // process face from master tree
        processState = EProcessState.Process_Master;

        // perform master faces on slave bsp tree
        PerformTree(inMaster.rootNode, inSlave.rootNode);

        // check if how do we need to process generated faces
        if (inOper == ECsgOperation.CsgOper_Additive || inOper == ECsgOperation.CsgOper_Subtractive)
        {
            // add deferred faces to master tree...
            for (int i = 0; i < deferredFaces.Count; i++)
            {
                CSGFace defFace   = ((DeferredFace)deferredFaces[i]).face;
                BspNode startNode = ((DeferredFace)deferredFaces[i]).node;

                // testing
                startNode = inMaster.rootNode;
                // add node to master tree
                BspGen.AddNodeRecursive(startNode, defFace, BspNode.BspFlags_IsNew);
            }
        }
        else
        {
            // clear old faces list
            inMaster.faces.Clear();

            // copy created faces
            for (int i = 0; i < deferredFaces.Count; i++)
            {
                inMaster.faces.Add(deferredFaces[i].face);
            }
        }

        // clear deferred faces
        deferredFaces.Clear();
    }