public void FindDoorIntersection(List <BSPMapComponent> corridors, int corridorSize) { foreach (BSPCorridor corridor in corridors) { if (corridor.spaceRect.xMin > this.spaceRect.xMin && corridor.spaceRect.xMax < this.spaceRect.xMax && corridor.spaceRect.yMin > this.spaceRect.yMin && corridor.spaceRect.yMax < this.spaceRect.yMax ) { continue; } if (!UtilityMethod.DoBoxesIntersect(this.spaceRect, corridor.spaceRect)) { continue; } //Horizontal if (corridor.spaceRect.width != corridorSize) { int y = (int)corridor.spaceRect.y; if (corridor.spaceRect.xMin < this.spaceRect.xMin) { doorPosition.Add(new Vector2Int((int)this.spaceRect.xMax, y)); doorPosition.Add(new Vector2Int((int)this.spaceRect.xMin - 1, y)); continue; } //Door at xMax side (right) if (corridor.spaceRect.xMin < this.spaceRect.xMax && corridor.spaceRect.xMin > this.spaceRect.xMin) { doorPosition.Add(new Vector2Int((int)this.spaceRect.xMax, y)); } else { //Door at xMin side (left) doorPosition.Add(new Vector2Int((int)this.spaceRect.xMin - 1, y)); } } else { //Door at yMax side (up) int x = (int)corridor.spaceRect.x; if (corridor.spaceRect.yMin < this.spaceRect.yMin) { doorPosition.Add(new Vector2Int(x, (int)this.spaceRect.yMax)); doorPosition.Add(new Vector2Int(x, (int)this.spaceRect.yMin - 1)); continue; } if (corridor.spaceRect.yMin < this.spaceRect.yMax && corridor.spaceRect.yMin > this.spaceRect.yMin) { doorPosition.Add(new Vector2Int(x, (int)this.spaceRect.yMax)); } else { //Door at yMin side (bottom) doorPosition.Add(new Vector2Int(x, (int)this.spaceRect.yMin - 1)); } } } }