public void LinkNodes()//связывает все узлы на этаже между собой { for (int fx = 0; fx < stage.height; fx++) { for (int fz = 0; fz < stage.width; fz++) { Node currentNode = GetNode(fx, fz); for (int x = -1; x <= 1; x++) { for (int z = -1; z <= 1; z++) { if ((z == 0 && x == 0) || !rct.isContainCRD(new CRD(fx + x, fz + z))) { continue; } float w; if (z == 0 || x == 0) { w = 1; } else { w = 1.5f; } Node sibblingnode = GetNode(fx + x, fz + z); currentNode.LinkNode(sibblingnode, w); } } } } }
public void moveNodesFromMapElementToThis(MapElement from) //передает узлы от указаного елемнта текущему { for (int i = 0; i < from.childNodes.Count; i++) { Node node = from.childNodes[i]; if (rct.isContainCRD(node.crd) && (floorNumber == node.floor.number || floorNumber == -1)) { moveNode(i, from, this); i--; } } HookAfterAddNodesToMapElement(); }
public List <Node> GetSiblingsNoDiagonals()// Получение соседних узлов { List <Node> siblings = new List <Node>(); RCT rct = Stage.GetStage().rct; for (int x = -1; x <= 1; x++) { for (int z = -1; z <= 1; z++) { if ((z == 0 && x == 0) || !rct.isContainCRD(new CRD(crd.x + x, crd.z + z)) || (z != 0 && x != 0)) { continue; } siblings.Add(Stage.GetNode(crd.x + x, crd.z + z, floor.number)); } } return(siblings); }