Exemple #1
0
    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 (Slicer2D slicer in Slicer2D.GetListCopy())
        {
            if (Math2D.PolyCollidePoly(slicer.shape.GetLocal(), 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();
    }
 public void UpdateCurrentArea()
 {
     currentArea = 0f;
     foreach (Slicer2D slicer in Slicer2D.GetListCopy())
     {
         currentArea += slicer.shape.GetLocal().GetArea();
     }
 }
Exemple #3
0
    public void Update(Vector2 position, float minVertexDistance = 1f)
    {
        List <Slicer2D> slicer2DList = Slicer2D.GetListCopy();

        Vector2D trackedPos;

        foreach (Slicer2D slicer in slicer2DList)
        {
            SlicerTrackerObject tracker = null;
            trackerList.TryGetValue(slicer, out tracker);

            if (tracker == null)
            {
                tracker = new SlicerTrackerObject();
                trackerList.Add(slicer, tracker);
            }

            trackedPos = new Vector2D(slicer.transform.transform.InverseTransformPoint(position));

            if (tracker.lastPosition != null)
            {
                if (slicer.shape.GetLocal().PointInPoly(trackedPos))
                {
                    if (tracker.tracking == false)
                    {
                        tracker.firstPosition = tracker.lastPosition;
                    }

                    tracker.tracking = true;
                }
                else if (tracker.tracking == true)
                {
                    tracker.tracking = false;

                    if (tracker.firstPosition != null)
                    {
                        tracker.lastPosition = trackedPos;

                        Pair2D slicePair = new Pair2D(new Vector2D(slicer.transform.TransformPoint(tracker.firstPosition.ToVector2())), new Vector2D(slicer.transform.TransformPoint(tracker.lastPosition.ToVector2())));

                        Slice2D slice = slicer.LinearSlice(slicePair);
                        if (slice.GetGameObjects().Count > 0)
                        {
                            CopyTracker(slice, slicer);
                        }
                        ;
                    }

                    trackerList.Remove(slicer);
                }
            }

            if (tracker != null)
            {
                tracker.lastPosition = trackedPos;
            }
        }
    }
    void Update()
    {
        piecesCount = Slicer2D.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 (Slicer2D.GetList().Count < 1)
        {
            return;
        }
        if (slicesCount <= Levels[currentLevelID].allowedSlices && piecesCount == Levels[currentLevelID].allowedPieces)
        {
            foreach (Slicer2D slicer in Slicer2D.GetListCopy())
            {
                slicer.gameObject.AddComponent <GreenFade>();
                DestroyObject(slicer);
                garbage.Add(slicer.gameObject);
            }
            UIFade.instance.state = true;
            UIFade.instance.menuObjects[0].SetActive(false);
            UIFade.instance.menuObjects[1].SetActive(false);
            UIFade.instance.menuObjects[2].SetActive(true);
            //currentLevelID++;
            //Levels[currentLevelID].level.SetActive(true);
            //slicesCount = 0;
        }
        else if (slicesCount > Levels[currentLevelID].allowedSlices)
        {
            foreach (Slicer2D slicer in Slicer2D.GetListCopy())
            {
                GreenFade fade = slicer.gameObject.AddComponent <GreenFade>();
                fade.fadeTyp = GreenFade.FadeType.Red;
                DestroyObject(slicer);
                garbage.Add(slicer.gameObject);
            }
            UIFade.instance.menuObjects[0].SetActive(false);
            UIFade.instance.menuObjects[1].SetActive(true);
            UIFade.instance.menuObjects[2].SetActive(false);
            UIFade.instance.state = true;
        }
    }
Exemple #5
0
    void OnCollisionEnter2D(Collision2D collision)
    {
        if (collision.collider.name.Contains("Terrain"))
        {
            Vector2D pos = new Vector2D(transform.position);

            Polygon2D.defaultCircleVerticesCount = 15;

            Polygon2D slicePolygon        = Polygon2D.Create(Polygon2D.PolygonType.Circle, 2f);
            Polygon2D slicePolygonDestroy = Polygon2D.Create(Polygon2D.PolygonType.Circle, 2.5f);

            slicePolygon        = slicePolygon.ToOffset(pos);
            slicePolygonDestroy = slicePolygonDestroy.ToOffset(pos);

            foreach (Slicer2D id in Slicer2D.GetListCopy())
            {
                Slice2D result = Slicer2D.API.PolygonSlice(id.shape.GetLocal().ToWorldSpace(id.transform), 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)
                    {
                        id.PerformResult(result.GetPolygons(), new Slice2D());
                    }
                    else
                    {
                        // Polygon is Destroyed!!!
                        Destroy(id.gameObject);
                    }
                }
            }

            Destroy(gameObject);

            Polygon2D.defaultCircleVerticesCount = 25;
        }
    }
    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 (Slicer2D slicer in Slicer2D.GetListCopy())
        {
            if (Math2D.PolyCollidePoly(slicer.shape.GetWorld(), cameraPolygon) == false)
            {
                Destroy(slicer.gameObject);
            }
        }

        UpdateCurrentArea();

        int percent = (int)((currentArea / startingArea) * 100);

        percentText.text = "Left: " + percent + "%";
    }
Exemple #7
0
    public void Update(Vector2 position, float minVertexDistance = 1f)
    {
        List <Slicer2D> slicer2DList = Slicer2D.GetListCopy();

        Vector2D trackedPos;

        foreach (Slicer2D slicer in slicer2DList)
        {
            SlicerTrackerObject tracker = null;
            trackerList.TryGetValue(slicer, out tracker);

            if (tracker == null)
            {
                tracker = new SlicerTrackerObject();
                trackerList.Add(slicer, tracker);
            }

            trackedPos = new Vector2D(slicer.transform.transform.InverseTransformPoint(position));

            if (tracker.lastPosition != null)
            {
                if (slicer.shape.GetLocal().PointInPoly(trackedPos))
                {
                    if (tracker.tracking == false)
                    {
                        tracker.pointsList.Add(tracker.lastPosition);
                    }

                    tracker.tracking = true;

                    if (tracker.pointsList.Count < 1 || (Vector2D.Distance(trackedPos, tracker.pointsList.Last()) > minVertexDistance / 4f))
                    {
                        tracker.pointsList.Add(trackedPos);
                    }
                }
                else if (tracker.tracking == true)
                {
                    tracker.tracking = false;
                    tracker.pointsList.Add(trackedPos);

                    List <Vector2D> slicePoints = new List <Vector2D>();
                    foreach (Vector2D point in tracker.pointsList)
                    {
                        slicePoints.Add(new Vector2D(slicer.transform.TransformPoint(point.ToVector2())));
                    }

                    Slice2D slice = slicer.ComplexSlice(slicePoints);
                    if (slice.GetGameObjects().Count > 0)
                    {
                        CopyTracker(slice, slicer);
                    }
                    ;

                    trackerList.Remove(slicer);
                }
            }

            if (tracker != null)
            {
                tracker.lastPosition = trackedPos;
            }
        }
    }
Exemple #8
0
    public List <Slice2D> Update(Vector2D position, float timer, Slice2DLayer layer)
    {
        List <Slice2D> result = new List <Slice2D>();

        foreach (Slicer2D slicer in Slicer2D.GetListCopy())
        {
            if (slicer.MatchLayers(layer) == false)
            {
                continue;
            }

            SlicerTrailObject trail = null;
            trailList.TryGetValue(slicer, out trail);

            if (trail == null)
            {
                trail = new SlicerTrailObject();
                trailList.Add(slicer, trail);
            }

            if (trail.lastPosition != null)
            {
                if (Vector2D.Distance(trail.lastPosition, position) > 0.05f)
                {
                    trail.pointsList.Add(new TrailPoint(position, timer));
                }
            }
            else
            {
                trail.pointsList.Add(new TrailPoint(position, timer));
            }

            if (trail.pointsList.Count > 1)
            {
                foreach (TrailPoint trailPoint in new List <TrailPoint>(trail.pointsList))
                {
                    if (trailPoint.Update() == false)
                    {
                        trail.pointsList.Remove(trailPoint);
                    }
                }

                List <Vector2D> points = new List <Vector2D>();
                foreach (TrailPoint trailPoint in trail.pointsList)
                {
                    points.Add(trailPoint.position);
                }

                Slicer2D.complexSliceType = Slicer2D.SliceType.Regular;
                Slice2D slice = slicer.ComplexSlice(points);
                if (slice.GetGameObjects().Count > 0)
                {
                    trailList.Remove(slicer);

                    result.Add(slice);
                }
                ;
            }

            trail.lastPosition = position;
        }

        return(result);
    }
Exemple #9
0
    public List <Slice2D> Update(Vector2D position, float timer, Slice2DLayer layer)
    {
        List <Slice2D> result = new List <Slice2D>();

        foreach (Slicer2D slicer in Slicer2D.GetListCopy())
        {
            if (slicer.MatchLayers(layer) == false)
            {
                continue;
            }

            SlicerTrailObject trail = null;
            trailList.TryGetValue(slicer, out trail);

            if (trail == null)
            {
                trail = new SlicerTrailObject();
                trailList.Add(slicer, trail);
            }

            if (trail.lastPosition != null)
            {
                if (Vector2D.Distance(trail.lastPosition, position) > 0.05f)
                {
                    trail.pointsList.Insert(0, new TrailPoint(position, timer));
                }
            }
            else
            {
                trail.pointsList.Insert(0, new TrailPoint(position, timer));
            }

            foreach (TrailPoint trailPoint in new List <TrailPoint>(trail.pointsList))
            {
                if (trailPoint.Update() == false)
                {
                    trail.pointsList.Remove(trailPoint);
                }
            }

            if (trail.pointsList.Count > 1)
            {
                Vector2D firstPoint  = null;
                Vector2D lastPoint   = null;
                bool     insideState = false;

                foreach (TrailPoint trailPoint in trail.pointsList)
                {
                    bool inside = false;
                    if (slicer.shape.GetLocal().PointInPoly(trailPoint.position.InverseTransformPoint(slicer.transform)))
                    {
                        inside = true;
                    }

                    switch (insideState)
                    {
                    case true:
                        // Slice!
                        if (inside == false)
                        {
                            lastPoint = trailPoint.position;

                            insideState = false;
                            break;
                        }
                        break;

                    case false:
                        if (inside == false)
                        {
                            // Searching For Start of Slice
                            firstPoint  = trailPoint.position;
                            insideState = true;
                        }
                        break;
                    }

                    if (lastPoint != null)
                    {
                        break;
                    }
                }

                if (firstPoint != null && lastPoint != null)
                {
                    Slicer2D.complexSliceType = Slicer2D.SliceType.Regular;
                    Slice2D slice = slicer.LinearSlice(new Pair2D(firstPoint, lastPoint));
                    if (slice.GetGameObjects().Count > 0)
                    {
                        trailList.Remove(slicer);

                        result.Add(slice);
                    }
                    ;
                }
            }

            trail.lastPosition = position;
        }
        return(result);
    }