static public void FwdCollide(GameObject pSafeTreeA, GameObject pSafeTreeB) { // A vs B GameObject pNodeA = pSafeTreeA; GameObject pNodeB = pSafeTreeB; while (pNodeA != null) { // Restart compare pNodeB = pSafeTreeB; while (pNodeB != null) { // who is being tested? //Debug.WriteLine("ColPair: test: {0}({2}), {1}({3})", pNodeA.name, pNodeB.name, pNodeA.GetHashCode(), pNodeB.GetHashCode()); // Get rectangles ColRect rectA = pNodeA.GetColObject().poColRect; ColRect rectB = pNodeB.GetColObject().poColRect; // test them if (ColRect.Intersect(rectA, rectB)) { // Boom - it works (Visitor in Action) // Debug.WriteLine("Collision Detected!"); pNodeA.Accept(pNodeB); break; } pNodeB = (GameObject)pNodeB.GetNextSibling(); } pNodeA = (GameObject)pNodeA.GetNextSibling(); } }
protected void BaseUpdateBoundingBox() { // point to ColTotal ColRect ColTotal = this.poColObj.poColRect; // Get the first child GameObject pNode = (GameObject)this.GetFirstChild(); if (pNode != null) { // Initialized the union to the first block ColTotal.Set(pNode.poColObj.poColRect); // loop through sliblings while (pNode != null) { ColTotal.Union(pNode.poColObj.poColRect); // go to next sibling pNode = (GameObject)pNode.GetNextSibling(); } //this.poColObj.poColRect.Set(201, 201, 201, 201); this.x = this.poColObj.poColRect.x; this.y = this.poColObj.poColRect.y; // Debug.WriteLine("x:{0} y:{1} w:{2} h:{3}", ColTotal.x, ColTotal.y, ColTotal.width, ColTotal.height); } }