public override bool GetPortal (GraphNode other, List<Vector3> left, List<Vector3> right, bool backwards)
{
if (backwards) return true;
GridGraph gg = GetGridGraph (GraphIndex);
int[] neighbourOffsets = gg.neighbourOffsets;
GridNode[] nodes = gg.nodes;
for (int i=0;i<4;i++) {
if (GetConnectionInternal(i) && other == nodes[nodeInGridIndex + neighbourOffsets[i]]) {
Vector3 middle = ((Vector3)(position + other.position))*0.5f;
Vector3 cross = Vector3.Cross (gg.collision.up, (Vector3)(other.position-position));
cross.Normalize();
cross *= gg.nodeSize*0.5f;
left.Add (middle - cross);
right.Add (middle + cross);
return true;
}
}
for (int i=4;i<8;i++) {
if (GetConnectionInternal(i) && other == nodes[nodeInGridIndex + neighbourOffsets[i]]) {
bool rClear = false;
bool lClear = false;
if (GetConnectionInternal(i-4)) {
GridNode n2 = nodes[nodeInGridIndex + neighbourOffsets[i-4]];
if (n2.Walkable && n2.GetConnectionInternal((i-4+1)%4)) {
rClear = true;
}
}
if (GetConnectionInternal((i-4+1)%4)) {
GridNode n2 = nodes[nodeInGridIndex + neighbourOffsets[(i-4+1)%4]];
if (n2.Walkable && n2.GetConnectionInternal(i-4)) {
lClear = true;
}
}
Vector3 middle = ((Vector3)(position + other.position))*0.5f;
Vector3 cross = Vector3.Cross (gg.collision.up, (Vector3)(other.position-position));
cross.Normalize();
cross *= gg.nodeSize*1.4142f;
left.Add (middle - (lClear ? cross : Vector3.zero));
right.Add (middle + (rClear ? cross : Vector3.zero));
return true;
}
}
return false;
}