示例#1
0
        static public void CopyRigidbody2D(Rigidbody2D originalRigidBody, Sliceable2D slicer, Polygon2D id, double originArea)
        {
            if (originalRigidBody)
            {
                Rigidbody2D newRigidBody = slicer.GetRigibody();

                newRigidBody.position               = originalRigidBody.position;
                newRigidBody.isKinematic            = originalRigidBody.isKinematic;
                newRigidBody.velocity               = originalRigidBody.velocity;
                newRigidBody.drag                   = originalRigidBody.drag;
                newRigidBody.angularVelocity        = originalRigidBody.angularVelocity;
                newRigidBody.angularDrag            = originalRigidBody.angularDrag;
                newRigidBody.constraints            = originalRigidBody.constraints;
                newRigidBody.gravityScale           = originalRigidBody.gravityScale;
                newRigidBody.collisionDetectionMode = originalRigidBody.collisionDetectionMode;
                newRigidBody.sharedMaterial         = originalRigidBody.sharedMaterial;
                //newRigidBody.sleepMode = originalRigidBody.sleepMode;
                //newRigidBody.inertia = originalRigidBody.inertia;

                // Center of Mass : Auto / Center
                //if (slicer.centerOfMass == Slicer2D.CenterOfMass.RigidbodyOnly) {
                ///	newRigidBody.centerOfMass = Vector2.zero;
                //}

                if (slicer.recalculateMass)
                {
                    float newArea = (float)id.ToLocalSpace(slicer.transform).GetArea();
                    newRigidBody.mass = originalRigidBody.mass * (float)(newArea / originArea);
                }
                else
                {
                    newRigidBody.mass = originalRigidBody.mass;
                }
            }
        }
        void Update()
        {
            Polygon2D cameraPolygon = Polygon2D.CreateFromCamera(Camera.main);

            cameraPolygon = cameraPolygon.ToRotation(Camera.main.transform.rotation.eulerAngles.z * Mathf.Deg2Rad);
            cameraPolygon = cameraPolygon.ToOffset(new Vector2D(Camera.main.transform.position));

            foreach (Sliceable2D slicer in Sliceable2D.GetListCopy())
            {
                if (Math2D.PolyCollidePoly(slicer.shape.GetWorld(), cameraPolygon) == false)
                {
                    if (slicer.enabled == true)
                    {
                        lives--;
                        if (lives >= 0)
                        {
                            SpriteRenderer sr = livesObjects[lives].GetComponent <SpriteRenderer>();
                            sr.color = Color.white;
                        }
                        else
                        {
                            Debug.Log("lose");
                        }
                    }
                    Destroy(slicer.gameObject);
                }
            }

            scoreText.text = score.ToString();
        }
示例#3
0
        static public void ExplodeGameObject(GameObject CutObject, GameObject originObject)
        {
            Sliceable2D slicerA = CutObject.GetComponent <Sliceable2D>();
            Sliceable2D slicerB = originObject.GetComponent <Sliceable2D>();

            Polygon2D polyA = slicerA.shape.GetWorld();
            Polygon2D polyB = slicerB.shape.GetWorld();

            Rect boundsA = polyA.GetBounds();
            Rect boundsB = polyB.GetBounds();

            Vector2D centerA = new Vector2D(boundsA.center);
            Vector2D centerB = new Vector2D(boundsB.center);

            double direction = (double)Vector2D.Atan2(centerA, centerB);

            Rigidbody2D rigidBody2D = CutObject.AddComponent <Rigidbody2D>();

            rigidBody2D.AddForce(Vector2D.RotToVec(direction).ToVector2() * 200);

            rigidBody2D.AddTorque(Random.Range(-15, 15));

            cutObjects++;
            CutObject.transform.Translate(0, 0, 100 - cutObjects + CutObject.transform.position.z);

            CutObject.AddComponent <Mesh2D>().material = slicerA.materialSettings.material;

            UnityEngine.Object.Destroy(CutObject.GetComponent <Sliceable2D>());
            UnityEngine.Object.Destroy(CutObject.GetComponent <ThinSliceRules>());
        }
示例#4
0
        void StartAnchor()
        {
            bool addEvents = false;

            foreach (Collider2D collider in anchor.anchorsList)
            {
                if (collider != null)
                {
                    addEvents = true;
                }
            }

            if (addEvents == false)
            {
                return;
            }

            Sliceable2D slicer = GetComponent <Sliceable2D> ();

            if (slicer != null)
            {
                slicer.AddResultEvent(OnAnchorSliceResult);
                slicer.AddEvent(OnAnchorSlice);
            }

            anchor.anchorPolygons  = new List <Polygon2D>();
            anchor.anchorColliders = new List <Collider2D>();

            foreach (Collider2D collider in anchor.anchorsList)
            {
                anchor.anchorPolygons.Add(Polygon2DList.CreateFromGameObject(collider.gameObject)[0]);
                anchor.anchorColliders.Add(collider);
            }
        }
示例#5
0
        static public List <Slice2D> LinearSliceAll(Pair2D slice, Layer layer = null, bool perform = true)
        {
            List <Slice2D> result = new List <Slice2D> ();

            if (layer == null)
            {
                layer = Layer.Create();
            }

            foreach (Sliceable2D id in Sliceable2D.GetListLayer(layer))
            {
                Slice2D sliceResult = id.LinearSlice(slice, perform);

                if (perform)
                {
                    if (sliceResult.GetGameObjects().Count > 0)
                    {
                        result.Add(sliceResult);
                    }
                }
                else
                {
                    if (sliceResult.GetPolygons().Count > 0)
                    {
                        result.Add(sliceResult);
                    }
                }
            }

            return(result);
        }
 private void ComplexMerge(List <Vector2D> mergeSlice)
 {
     foreach (Sliceable2D slicer in Sliceable2D.GetList())
     {
         slicer.ComplexMerge(mergeSlice);
     }
 }
        void SliceEvent(Slice2D slice)
        {
            FruitSlicerGameManager.instance.score += 15;

            foreach (GameObject g in slice.GetGameObjects())
            {
                Vector3 pos = g.transform.position;
                pos.z = Random.Range(pos.z, 50);
                g.transform.position = pos;

                Rigidbody2D rb = g.GetComponent <Rigidbody2D>();
                rb.AddForce(new Vector2(Random.Range(-200, 200), Random.Range(100, 200)));
                rb.AddTorque(Random.Range(-100, 100));

                //PolygonCollider2D collider = g.GetComponent<PolygonCollider2D>();
                //collider.isTrigger = false;

                Sliceable2D slicer = g.GetComponent <Sliceable2D>();
                slicer.enabled = false;

                slicer.gameObject.AddComponent <FruitSlicerFadeAway>();

                //ColliderLineRenderer2D lineRenderer = g.GetComponent<ColliderLineRenderer2D>();
                //lineRenderer.customColor = true;
                //lineRenderer.color = Color.red;
                //lineRenderer.lineWidth = 0.5f;
            }
        }
示例#8
0
        // Remove Position
        static public List <Slice2D> PolygonSliceAll(Vector2D position, Polygon2D slicePolygon, bool destroy, Layer layer = null)
        {
            List <Slice2D> result = new List <Slice2D> ();

            if (layer == null)
            {
                layer = Layer.Create();
            }

            Polygon2D slicePolygonDestroy = null;

            if (destroy)
            {
                slicePolygonDestroy = slicePolygon.ToScale(new Vector2(1.1f, 1.1f));
                slicePolygonDestroy = slicePolygonDestroy.ToOffset(position);
            }

            slicePolygon = slicePolygon.ToOffset(position);

            foreach (Sliceable2D id in Sliceable2D.GetListLayer(layer))
            {
                result.Add(id.PolygonSlice(slicePolygon, slicePolygonDestroy));
            }

            return(result);
        }
 public void UpdateCurrentArea()
 {
     currentArea = 0f;
     foreach (Sliceable2D slicer in Sliceable2D.GetListCopy())
     {
         currentArea += slicer.shape.GetLocal().GetArea();
     }
 }
示例#10
0
        public void ResetLevel()
        {
            startingArea = 0;

            foreach (Sliceable2D slicer in Sliceable2D.GetList())
            {
                startingArea += slicer.shape.GetWorld().GetArea();
            }
        }
示例#11
0
 bool PointInObjects(Vector2D pos)
 {
     foreach (Sliceable2D slicer in Sliceable2D.GetList())
     {
         if (slicer.shape.GetLocal().PointInPoly(pos.InverseTransformPoint(slicer.transform)))
         {
             return(true);
         }
     }
     return(false);
 }
        void Start()
        {
            Sliceable2D slicer = GetComponent <Sliceable2D>();

            if (slicer != null)
            {
                slicer.AddResultEvent(SliceEvent);
            }

            posZ = transform.position.z - 0.1f;
        }
示例#13
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;
        }
示例#14
0
        void Start()
        {
            Sliceable2D slicer = GetComponent <Sliceable2D>();

            slicer.AddResultEvent(SlicerEvent);

            if (timer == null)
            {
                timer = TimerHelper.Create();
            }
        }
示例#15
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);
 }
示例#16
0
  public static void SetupSprite2DGameObject(GameObject newGameObject)
  {
      Slicer2D.Sliceable2D sliceable = newGameObject.AddComponent <Slicer2D.Sliceable2D>();

      CircleCollider2D collider = newGameObject.AddComponent <CircleCollider2D>();

      Utilities2D.ColliderLineRenderer2D lineRenderer = newGameObject.AddComponent <Utilities2D.ColliderLineRenderer2D>();

      lineRenderer.lineWidth = 0.25f;

      newGameObject.transform.position = GetCameraPoint();
  }
示例#17
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();
            }
        }
示例#18
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;
            }
        }
示例#19
0
        public static bool OnAnchorSlice(Sliceable2D slicer, Slice2D sliceResult)
        {
            if (slicer.eventHandler.AnchorSliceEvent(sliceResult) == false)
            {
                return(false);
            }

            if (EventHandling.GlobalSliceEvent(sliceResult) == false)
            {
                return(false);
            }

            switch (slicer.anchor.anchorType)
            {
            case Sliceable2D.AnchorType.CancelSlice:
                foreach (Polygon2D polyA in new List <Polygon2D>(sliceResult.GetPolygons()))
                {
                    bool perform = true;
                    foreach (Polygon2D polyB in slicer.anchor.anchorPolygons)
                    {
                        if (Math2D.PolyCollidePoly(polyA, GetPolygonInWorldSpace(slicer, polyB)))
                        {
                            perform = false;
                        }
                    }
                    if (perform)
                    {
                        return(false);
                    }
                }
                break;

            /*
             * case AnchorType.DestroySlice:
             *      foreach (Polygon2D polyA in new List<Polygon2D>(sliceResult.polygons)) {
             *              bool perform = true;
             *              foreach(Polygon2D polyB in polygons) {
             *                      if (Math2D.PolyCollidePoly (polyA.pointsList, GetPolygonInWorldSpace(polyB).pointsList) ) {
             *                              sliceResult.polygons.Remove(polyB);
             *                      }
             *              }
             *
             *      }
             *      break;
             */

            default:
                break;
            }
            return(true);
        }
示例#20
0
        public void SetTriangulation(Sliceable2D script)
        {
            Slicer2D.SettingsProfile profile = Slicer2D.Settings.GetProfile();

            if (profile == null || profile.triangulation == Slicer2D.Settings.Triangulation.Default)
            {
                script.materialSettings.triangulation = (PolygonTriangulator2D.Triangulation)EditorGUILayout.EnumPopup("Triangulation", script.materialSettings.triangulation);
            }
            else
            {
                EditorGUI.BeginDisabledGroup(true);
                EditorGUILayout.EnumPopup("Triangulation", Slicer2D.Settings.GetTriangulation(script.materialSettings.triangulation));
                EditorGUI.EndDisabledGroup();
            }
        }
示例#21
0
  public static void SetupMesh2DGameObject(GameObject newGameObject)
  {
      Slicer2D.Sliceable2D sliceable = newGameObject.AddComponent <Slicer2D.Sliceable2D>();

      sliceable.textureType = Slicer2D.Sliceable2D.TextureType.Mesh2D;

      sliceable.materialSettings.material       = new Material(Shader.Find("Sprites/Default"));
      sliceable.materialSettings.material.color = Color.white;

      Utilities2D.ColliderLineRenderer2D lineRenderer = newGameObject.AddComponent <Utilities2D.ColliderLineRenderer2D>();

      lineRenderer.lineWidth = 0.25f;

      newGameObject.transform.position = GetCameraPoint();
  }
示例#22
0
        public void SetComponentsCopy(Sliceable2D script)
        {
            Slicer2D.SettingsProfile profile = Slicer2D.Settings.GetProfile();

            if (profile == null || profile.componentsCopy == Slicer2D.Settings.InstantiationMethod.Default)
            {
                script.instantiateMethod = (Sliceable2D.InstantiationMethod)EditorGUILayout.EnumPopup("Instantiation Method", script.instantiateMethod);
            }
            else
            {
                EditorGUI.BeginDisabledGroup(true);
                EditorGUILayout.EnumPopup("Instantiation", Slicer2D.Settings.GetComponentsCopy(script.instantiateMethod));
                EditorGUI.EndDisabledGroup();
            }
        }
示例#23
0
        public void SetBatching(Sliceable2D script)
        {
            Slicer2D.SettingsProfile profile = Slicer2D.Settings.GetProfile();

            if (profile == null || profile.batching == Slicer2D.Settings.Batching.Default)
            {
                script.materialSettings.batchMaterial = EditorGUILayout.Toggle("Batch Material", script.materialSettings.batchMaterial);
            }
            else
            {
                EditorGUI.BeginDisabledGroup(true);
                EditorGUILayout.Toggle("Batch Material", Slicer2D.Settings.GetBatching(script.materialSettings.batchMaterial));
                EditorGUI.EndDisabledGroup();
            }
        }
示例#24
0
        static public Pair2 GetPair(Pair2 pair, float distance)
        {
            float   direction = pair.a.Atan2(pair.b);
            Vector2 resultA   = pair.a;
            Vector2 resultB   = pair.b;

            Vector2 pointA = pair.a;
            Vector2 pointB = pair.b;

            pointA = pointA.Push(direction, distance);
            pointB = pointB.Push(direction, -distance);

            Sliceable2D slicerA = Sliceable2D.PointInSlicerComponent(pair.a.ToVector2D());
            Sliceable2D slicerB = Sliceable2D.PointInSlicerComponent(pair.b.ToVector2D());

            Pair2 thresholdPairA = new Pair2(pair.a, pointA);
            Pair2 thresholdPairB = new Pair2(pair.b, pointB);

            if (slicerA != null)
            {
                List <Vector2D> pointsA = slicerA.shape.GetWorld().GetListLineIntersectPoly(thresholdPairA.ToPair2D());

                if (pointsA.Count > 0)
                {
                    pointsA = Vector2DList.GetListSortedToPoint(pointsA, pointA.ToVector2D());

                    resultA = pointsA[pointsA.Count - 1].ToVector2();
                    resultA.Push(direction, 0.05f);
                }
            }

            if (slicerB != null)
            {
                List <Vector2D> pointsB = slicerB.shape.GetWorld().GetListLineIntersectPoly(thresholdPairB.ToPair2D());

                if (pointsB.Count > 0)
                {
                    pointsB = Vector2DList.GetListSortedToPoint(pointsB, pointB.ToVector2D());

                    resultB = pointsB[pointsB.Count - 1].ToVector2();
                    resultB.Push(direction, -0.05f);
                }
            }
            return(new Pair2(resultA, resultB));
        }
示例#25
0
        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);
                    }
                }
            }
        }
示例#26
0
        void Slice()
        {
            Polygon2D.defaultCircleVerticesCount = 15;

            Polygon2D bombPoly = Polygon2DList.CreateFromGameObject(sliceArea.gameObject)[0];

            Polygon2D slicePolygon        = bombPoly.ToWorldSpace(sliceArea.gameObject.transform);
            Polygon2D slicePolygonDestroy = bombPoly.ToScale(new Vector2(1.05f, 1.05f)).ToWorldSpace(sliceArea.gameObject.transform);

            foreach (Sliceable2D id in Sliceable2D.GetListCopy())
            {
                Slice2D result = Slicer2D.API.PolygonSlice(id.shape.GetWorld(), slicePolygon);


                if (result.GetPolygons().Count > 0)
                {
                    foreach (Polygon2D p in new List <Polygon2D>(result.GetPolygons()))
                    {
                        if (slicePolygonDestroy.PolyInPoly(p) == true)
                        {
                            //result.GetPolygons().Remove (p);
                        }
                    }

                    if (result.GetPolygons().Count > 0)
                    {
                        List <GameObject> gList = id.PerformResult(result.GetPolygons(), result);

                        SliceParticles(gList, result, slicePolygonDestroy);
                    }
                    else
                    {
                        // Polygon is Destroyed!!!
                        Destroy(id.gameObject);
                    }
                }
            }


            Polygon2D.defaultCircleVerticesCount = 25;

            // Destroy(this);
        }
示例#27
0
        public void Update(Sliceable2D source)
        {
            Transform transform = source.transform;

            if (updatePosition != transform.position)
            {
                updatePosition = transform.position;

                update = true;
            }

            if (updateRotation != transform.rotation.eulerAngles.z)
            {
                updateRotation = transform.rotation.eulerAngles.z;

                update = true;
            }

            if (source.spriteRenderer != null)
            {
                if (sprite != source.spriteRenderer.sprite)
                {
                    sprite = source.spriteRenderer.sprite;

                    update = true;
                }

                if (spriteflipX != source.spriteRenderer.flipX)
                {
                    spriteflipX = source.spriteRenderer.flipX;

                    update = true;
                }

                if (spriteflipY != source.spriteRenderer.flipY)
                {
                    spriteflipY = source.spriteRenderer.flipY;

                    update = true;
                }
            }
        }
示例#28
0
        static public List <Slice2D> ExplodeAll(Layer layer = null, int explosionSlices = 0)
        {
            List <Slice2D> result = new List <Slice2D> ();

            if (layer == null)
            {
                layer = Layer.Create();
            }

            foreach (Sliceable2D id in Sliceable2D.GetListLayer(layer))
            {
                Slice2D sliceResult = id.Explode(explosionSlices);
                if (sliceResult.GetGameObjects().Count > 0)
                {
                    result.Add(sliceResult);
                }
            }

            return(result);
        }
示例#29
0
        static public List <Slice2D> ExplodeInPointAll(Vector2D point, Layer layer = null)
        {
            List <Slice2D> result = new List <Slice2D> ();

            if (layer == null)
            {
                layer = Layer.Create();
            }

            foreach (Sliceable2D id in Sliceable2D.GetListLayer(layer))
            {
                Slice2D sliceResult = id.ExplodeInPoint(point);
                if (sliceResult.GetGameObjects().Count > 0)
                {
                    result.Add(sliceResult);
                }
            }

            return(result);
        }
示例#30
0
        static public List <Slice2D> ComplexCutSliceAll(ComplexCut complexCut, Layer layer = null)
        {
            List <Slice2D> result = new List <Slice2D> ();

            if (layer == null)
            {
                layer = Layer.Create();
            }

            foreach (Sliceable2D id in Sliceable2D.GetListLayer(layer))
            {
                Slice2D sliceResult = id.ComplexCutSlice(complexCut);
                if (sliceResult.GetGameObjects().Count > 0)
                {
                    result.Add(sliceResult);
                }
            }

            return(result);
        }