Example #1
0
        public void Release()
        {
            if (init)
            {
                init = false;

                if (loaded && renderable != null)
                {
                    renderable.Release();
                    renderable = null;
                    loaded     = false;
                }
                if (neighbors[(int)Neighbor.North] != null)
                {
                    neighbors[(int)Neighbor.North].SetNeighbor(Neighbor.South, null);
                }
                if (neighbors[(int)Neighbor.South] != null)
                {
                    neighbors[(int)Neighbor.South].SetNeighbor(Neighbor.North, null);
                }
                if (neighbors[(int)Neighbor.East] != null)
                {
                    neighbors[(int)Neighbor.East].SetNeighbor(Neighbor.West, null);
                }
                if (neighbors[(int)Neighbor.West] != null)
                {
                    neighbors[(int)Neighbor.West].SetNeighbor(Neighbor.East, null);
                }
                for (long i = 0; i < 4; i++)
                {
                    neighbors[i] = null;
                }

                if (tileSceneNode != null)
                {
                    //mTileNode->getParent()->removeChild( mTileNode->getName() );
                    //delete mTileNode;
                    //assert (mTileSceneNode->getParent());

                    // jsw - we need to call both of these to delete the scene node.  The first
                    //  one removes it from the SceneManager's list of all nodes, and the 2nd one
                    //  removes it from the tree of scene nodes.
                    tileSceneNode.Creator.DestroySceneNode(tileSceneNode.Name);
                    tileSceneNode.Parent.RemoveChild(tileSceneNode);
                    tileSceneNode = null;
                }

                TileManager.Instance.FreeTile(this);
            }
        }