private void ComplexMerge(List <Vector2D> mergeSlice) { foreach (Sliceable2D slicer in Sliceable2D.GetList()) { slicer.ComplexMerge(mergeSlice); } }
public void ResetLevel() { startingArea = 0; foreach (Sliceable2D slicer in Sliceable2D.GetList()) { startingArea += slicer.shape.GetWorld().GetArea(); } }
bool PointInObjects(Vector2D pos) { foreach (Sliceable2D slicer in Sliceable2D.GetList()) { if (slicer.shape.GetLocal().PointInPoly(pos.InverseTransformPoint(slicer.transform))) { return(true); } } return(false); }
// 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; }
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); }
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(); } }
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); } } } }
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; } } } }