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(); } }
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; } }
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 + "%"; }
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; } } }
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); }
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); }