private void UpdateQuadrants() { QuadrantLocation[] sectors_=Quadrant.Keys.ToArray(); string debugstring=""; foreach (var item in sectors_) { GridPoint cornerPoint; GridPoint[] sectorpoints=this.QuadrantPoints(item, out cornerPoint); if (sectorpoints==null||cornerPoint==null) { this.Quadrant[item]=null; continue; } //Logging.WriteVerbose("Sectorpoints Count {0}", sectorpoints.Length); Quadrant[item]=new GPQuadrant(sectorpoints, CreationVector, cornerPoint); //item = new Sector(Points.SectorPoints(item.SectorCode, true)); debugstring+="SectorID: "+item.ToString()+" "+Quadrant[item].ContainedPoints.Count+","; } if (Bot.SettingsFunky.LogSafeMovementOutput) Logging.WriteDiagnostic(debugstring); }
public bool TryFindSafeSpot(Vector3 CurrentPosition, out Vector3 safespot, Vector3 los, bool kite=false, bool checkAvoidIntersection=false, bool expandOnFailure=false) { lastUsedQuadrant=null; safespot=Vector3.Zero; //Do not continue search if all sectors failed recently. if (AllQuadrantsFailed) return false; foreach (var item in Quadrant.Values) { if (item==null) continue; if (item.FindSafeSpot(CurrentPosition, out safespot, los, kite, checkAvoidIntersection)) { lastUsedQuadrant=item; return true; } } AllQuadrantsFailed=true; if (expandOnFailure&&CanExpandFurther) { //Logging.WriteVerbose("Expanding GPC due to failure to find a location!"); this.FullyExpand(); this.UpdateQuadrants(); this.UpdateObjectCount(); } return false; }