private List <List <IntPoint> > IntersectWithPlanes(Vector2 compPos, Vector2 rP1, Vector2 rP2) { List <List <IntPoint> > result = new List <List <IntPoint> >(); Vector2 rPosCenter = new Vector2((rP1.X + rP2.X) / 2, (rP1.Y + rP2.Y) / 2); for (int i = 0; i < 7; i += 2) { var planeDir = (Direction)i; if (CompIsOnDirToBump(compPos, rPosCenter, planeDir)) { Vector2 planeP1, planeP2; GetPlanePoints(planeDir, out planeP1, out planeP2); List <Vector2> shadowPoints = GetIntersection(compPos, rP1, rP2, planeP1, planeP2); SetCenterPoint(shadowPoints); shadowPoints.Sort(ClockwiseSorter); //if (IsGoodPoly(compPos, cDir)) var poly = PolysHelper.BuildPolygon(shadowPoints); EntraDrawer.DrawIntoFile(new List <List <IntPoint> >() { poly }); result.Add(poly); } } return(result); }
public static List <List <IntPoint> > GetRopePoly(SpringService service, EngineManager engineManager) { int verticalLineLength, halfFarWidth; SetProperHalfFarWidth(service, engineManager.CookieRB, out verticalLineLength, out halfFarWidth); var polySemiCircle = PolysHelper.GetShapeSemiCirclePoly(service.Masses[0].PositionXNACenter2D, ropeNearWidth, verticalLineLength, halfFarWidth); List <IntPoint> polyAdded = GetAddedGravityRectanglePoly(service, engineManager); var polyFinal = EntraSolver.GetPolySolution(polySemiCircle, polyAdded, ClipType.ctUnion); // Cut upper rectangle int cY = (int)StaticData.EngineManager.CookieRB.PositionXNACenter2D.Y; List <IntPoint> poly = new List <IntPoint>() { new IntPoint(0, 0), new IntPoint(StaticData.LevelFarWidth, 0), new IntPoint(StaticData.LevelFarWidth, cY), new IntPoint(0, cY), }; polyFinal = EntraSolver.GetPolySolution(polyFinal, poly, ClipType.ctDifference); return(polyFinal); }
public override List <List <IntPoint> > GetDefPoly() { return(new List <List <IntPoint> >() { PolysHelper.GetShapeSquarePoly(this.EntraAgentSimple.EngineState.FrogRB.PositionXNACenter2D, 25) }); }
public static bool IsDefComponentIntersection(Vector2 posCenter, int width, List <List <IntPoint> > polys) { List <IntPoint> poly = PolysHelper.GetShapeSquarePoly(posCenter, width / 2); if (EntraSolver.IsPolyOperation(new List <List <IntPoint> >() { poly }, polys, ClipType.ctIntersection)) { return(true); } return(false); }
public bool IsComponentsOverlapping() { var ovlpedPairs = new List <KeyValuePair <List <IntPoint>, List <IntPoint> > >(); //String[] args = new string[2]; //args[1] = this.LevelStr; //GenManager.GenerateGevaLevel(args, null); OverlappedComponents = 0; DefinitiveCompPolyHandler def = new DefinitiveCompPolyHandler(StaticData.EngineManager); List <List <IntPoint> > polys = new List <List <IntPoint> >(); polys.AddRange(def.GetDefBubblesPolys()); polys.AddRange(def.GetDefRocketsPolys()); polys.AddRange(def.GetDefBumpersPolys()); foreach (BlowerService blowerService in StaticData.EngineManager.BlowerManagerEngine.ListOfServices) { polys.Add(PolysHelper.GetShapeSquarePoly(blowerService.PositionXNACenter, (int)StaticData.BlowerDimWidth / 2)); } for (int i = 0; i < polys.Count - 1; i++) { var polyNow = polys[i]; for (int j = i + 1; j < polys.Count; j++) { var polyCompare = polys[j]; if (polyNow != polyCompare) { if (EntraSolver.IsPolyOperation(polyCompare, polyNow, ClipType.ctIntersection)) { //List<KeyValuePair<List<IntPoint>, List<IntPoint>>> var res = (from kv in ovlpedPairs where (kv.Key == polyCompare && kv.Value == polyNow) || (kv.Key == polyNow && kv.Value == polyCompare) select kv).ToList(); if (res != null) { ovlpedPairs.Add(new KeyValuePair <List <IntPoint>, List <IntPoint> >(polyNow, polyCompare)); OverlappedComponents++; } } } } } return(OverlappedComponents != 0); }
public virtual List <List <IntPoint> > GetCoverageSoFar() { return(PolysHelper.GetCompCoverageSoFar(this, this.EntraAgentSimple.PolysLogger.Logs)); }
public static List <IntPoint> GetDefComponentIntersection(Vector2 posCenter, int width) { return(PolysHelper.GetShapeSquarePoly(posCenter, width / 2)); }