private void ComplexMerge(List <Vector2D> mergeSlice)
 {
     foreach (Sliceable2D slicer in Sliceable2D.GetList())
     {
         slicer.ComplexMerge(mergeSlice);
     }
 }
示例#2
0
        public void ResetLevel()
        {
            startingArea = 0;

            foreach (Sliceable2D slicer in Sliceable2D.GetList())
            {
                startingArea += slicer.shape.GetWorld().GetArea();
            }
        }
示例#3
0
 bool PointInObjects(Vector2D pos)
 {
     foreach (Sliceable2D slicer in Sliceable2D.GetList())
     {
         if (slicer.shape.GetLocal().PointInPoly(pos.InverseTransformPoint(slicer.transform)))
         {
             return(true);
         }
     }
     return(false);
 }
示例#4
0
        // Recalculate area that is left
        static public void UpdateLevelProgress()
        {
            instance.leftArea = 0;

            foreach (Sliceable2D slicer in Sliceable2D.GetList())
            {
                instance.leftArea += slicer.shape.GetWorld().GetArea();
            }

            instance.leftArea = ((instance.leftArea) / instance.startingArea) * 100f;
        }
示例#5
0
 static public Sliceable2D PointInSlicerComponent(Vector2D point)
 {
     foreach (Sliceable2D slicer in Sliceable2D.GetList())
     {
         Polygon2D poly = slicer.shape.GetWorld();
         if (poly.PointInPoly(point))
         {
             return(slicer);
         }
     }
     return(null);
 }
示例#6
0
        void SliceEvent(Slice2D slice)
        {
            Vector2D midPoint = SliceMidPoint(slice.slices[0]);

            foreach (Sliceable2D g in Sliceable2D.GetList())
            {
                Vector2D center   = new Vector2D(Polygon2DList.CreateFromGameObject(g.gameObject)[0].ToWorldSpace(g.transform).GetBounds().center);
                Vector2D position = new Vector2D(g.transform.position);
                position.Push(Vector2D.Atan2(center, midPoint), 0.2f);                 // + Mathf.PI / 2
                g.transform.position = position.ToVector2();
            }
        }
示例#7
0
        void Update()
        {
            piecesCount = Sliceable2D.GetListCount();

            slicesText.text = "Slices: " + slicesCount + " / " + Levels[currentLevelID].allowedSlices;
            piecesText.text = "Pieces: " + piecesCount + " / " + Levels[currentLevelID].allowedPieces;

            Vector3 pos = Camera.main.transform.position;

            pos.x = pos.x * 0.95f + (float)(currentLevelID * 50f) * 0.05f;
            Camera.main.transform.position = pos;

            if (Sliceable2D.GetList().Count < 1)
            {
                return;
            }

            if (slicesCount <= Levels[currentLevelID].allowedSlices && piecesCount == Levels[currentLevelID].allowedPieces)
            {
                foreach (Sliceable2D slicer in Sliceable2D.GetListCopy())
                {
                    slicer.gameObject.AddComponent <DivideGreenFade>();
                    slicer.enabled = false;

                    garbage.Add(slicer.gameObject);
                }

                DivideUIFade.instance.state = true;
                DivideUIFade.instance.menuObjects[0].SetActive(false);
                DivideUIFade.instance.menuObjects[1].SetActive(false);
                DivideUIFade.instance.menuObjects[2].SetActive(true);
                //currentLevelID++;
                //Levels[currentLevelID].level.SetActive(true);
                //slicesCount = 0;
            }
            else if (slicesCount > Levels[currentLevelID].allowedSlices)
            {
                foreach (Sliceable2D slicer in Sliceable2D.GetListCopy())
                {
                    DivideGreenFade fade = slicer.gameObject.AddComponent <DivideGreenFade>();
                    fade.fadeTyp   = DivideGreenFade.FadeType.Red;
                    slicer.enabled = false;

                    garbage.Add(slicer.gameObject);
                }

                DivideUIFade.instance.menuObjects[0].SetActive(false);
                DivideUIFade.instance.menuObjects[1].SetActive(true);
                DivideUIFade.instance.menuObjects[2].SetActive(false);
                DivideUIFade.instance.state = true;
            }
        }
        public void BallToMapCollision()
        {
            Vector2D position = new Vector2D(transform.position);

            // Balls vs Map Collisions
            foreach (Sliceable2D slicer in Sliceable2D.GetList())
            {
                foreach (Pair2D id in Pair2D.GetList(slicer.shape.GetWorld().pointsList))
                {
                    if (Math2D.Circle.IntersectLine(id, position, radius) == true)
                    {
                        transform.Translate(direction * -speed);
                        SetDirection(Math2D.ReflectAngle(direction, (float)Vector2D.Atan2(id.A, id.B)));
                        transform.Translate(direction * speed);
                    }
                }
            }
        }
示例#9
0
        public void Update()
        {
            input.Update();

            if (visuals.drawSlicer == false)
            {
                return;
            }

            if (linearPair.a == Vector2.zero && linearPair.b == Vector2.zero)
            {
                return;
            }

            visuals.Clear();
            visuals.GenerateLinearMesh(linearPair);
            visuals.Draw();


            if (target != null)
            {
                Polygon2D poly = target.shape.GetWorld();

                int pointIDA = ((verticeID - 1) + poly.pointsList.Count) % poly.pointsList.Count;
                int pointIDB = verticeID;
                int pointIDC = (verticeID + 1) % poly.pointsList.Count;

                Vector2 pointA = poly.pointsList[pointIDA].ToVector2();
                Vector2 pointB = poly.pointsList[pointIDB].ToVector2();
                Vector2 pointC = poly.pointsList[pointIDC].ToVector2();

                Vector2 offset    = pointB;
                float   angle     = Math2D.FindAngle(pointA, pointB, pointC);
                float   angleZero = pointA.Atan2(pointB);

                offset = offset.Push(-angle / 2 + angleZero, 0.5f);

                linearPair.a = offset;
            }

            if (UnityEngine.Input.GetMouseButtonDown(1))
            {
                Vector2D point = new Vector2D(input.GetInputPosition(0));

                if (target != null)
                {
                    Polygon2D poly = target.shape.GetWorld();
                    if (poly.PointInPoly(point) == false)
                    {
                        target = null;

                        linearPair.a = Vector2.zero;
                        linearPair.b = Vector2.zero;
                    }
                }

                foreach (Sliceable2D slicer in Sliceable2D.GetList())
                {
                    Polygon2D poly = slicer.shape.GetWorld();
                    if (poly.PointInPoly(point))
                    {
                        int    id       = 0;
                        double distance = 1000000;

                        foreach (Vector2D p in poly.pointsList)
                        {
                            double newDistance = Vector2D.Distance(p, point);
                            if (newDistance < distance)
                            {
                                distance = newDistance;
                                id       = poly.pointsList.IndexOf(p);
                            }
                        }

                        verticeID = id;
                        target    = slicer;

                        break;
                    }
                }
            }
        }