private WayPoint CheckNeighbours(int ruquiredIndex, Vector currentLoc) { WayPoint resPoint = null; WayPoint bufferResPoint = null; foreach (var directon in CommonDirectons) { var loc = directon + currentLoc; WayPoint nextPoint; if (!MapedPoints.TryGetValue(loc, out nextPoint) || nextPoint.Index != ruquiredIndex) { continue; } //getting to the key point KeyPoint keyPoint; if (KeyPoints.TryGetValue(loc, out keyPoint)) { bufferResPoint = nextPoint; PathTreeBuilder.AddKey(loc);//adding passed key point => potetial new branch //check the mooving consequenses foreach (var leanedEntLoc in keyPoint.LeanedEntities) { foreach (var points in FallPoints[leanedEntLoc].LeanPoints) { if (!points.Contains(ModelUsage.MurphLoc)) { continue; } foreach (var point in points) { if (points.Count != 1 && !KeyPoints[point].isStepped) { continue; } //ball is going to fall //DO SOMETHING } } } continue; } resPoint = nextPoint; break; } return(resPoint ?? bufferResPoint); }
public void ConvertPath() { var pathBuilder = new PathTreeBuilder(); var path = pathBuilder.GetFinalPath();//getting branches var pathTree = pathBuilder.MajorBranches; //log output Directory.CreateDirectory("logs"); using (var fs = new StreamWriter("logs/debug.txt", false, Encoding.UTF8)) { for (int i = 0; i < pathTree.Count; i++) { var pathBranch = pathTree[i]; fs.Write(@"<BRANCH START {0}> ", i); var pnts = new List <string>(); foreach (var point in pathBranch.ExceptPoints) { if (i == 0) { break; } pnts.Add(string.Format("{0},{1}", point.X, point.Y)); } fs.WriteLine(string.Join(" | ", pnts)); foreach (var point in pathBranch.AllPath) { fs.WriteLine(@"{0},{1}", point.Location.X, point.Location.Y); } fs.WriteLine(@"<BRANCH END {0}>", i); fs.WriteLine(); } } //converting to directions cosequence for (int i = 1; i < path.Count; i++) { SelectedPath.Add(path[i].Location - path[i - 1].Location); } }