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);
        }
Пример #2
0
        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);
        }
Пример #3
0
 public override List <List <IntPoint> > GetDefPoly()
 {
     return(new List <List <IntPoint> >()
     {
         PolysHelper.GetShapeSquarePoly(this.EntraAgentSimple.EngineState.FrogRB.PositionXNACenter2D, 25)
     });
 }
Пример #4
0
        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);
        }
Пример #5
0
        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);
        }
Пример #6
0
 public virtual List <List <IntPoint> > GetCoverageSoFar()
 {
     return(PolysHelper.GetCompCoverageSoFar(this, this.EntraAgentSimple.PolysLogger.Logs));
 }
Пример #7
0
 public static List <IntPoint> GetDefComponentIntersection(Vector2 posCenter, int width)
 {
     return(PolysHelper.GetShapeSquarePoly(posCenter, width / 2));
 }