// Use this for initialization void Start() { joints = new Transform[transform.childCount - 1]; for (int i = 1; i < transform.childCount; i++) { joints [i - 1] = transform.GetChild(i); totalAmount++; } leftAngles = new float[transform.childCount]; rightAngles = new float[transform.childCount]; for (int i = 0; i < joints.Length; i++) { int left = i > 0? i - 1:joints.Length - 2; int right = i < joints.Length - 2 ? i + 1 : 0; AngleSlideJoint2D j = joints [i].GetComponent <AngleSlideJoint2D> (); if (j != null) { j.left = joints [left]; j.right = joints [right]; j.SetAngles(); j.centerSpring.distance = player.main.radius; // j.leftAngle = Vector2.Angle (joints [i].transform.position, joints [left].transform.position); // j.rightAngle = Vector2.Angle (joints [i].transform.position, joints [right].transform.position); } } }
// Update is called once per frame void Update() { UpdateNutrients(); float d = Vector2.Distance(startClick, endClick); bool showArrow = d > minMoveDist && membraneClicked; float a = Mathf.Atan2(endClick.y - startClick.y, endClick.x - startClick.x) * Mathf.Rad2Deg; if (hasWorldTargetPos && Vector2.Distance(ph.cell.position, worldTargetPos) < 0.05f) { hasWorldTargetPos = false; } if (showArrow) { if (Input.GetMouseButtonUp(0)) { print("Moving cell"); //Vector2 pos = new Vector2 (endClick.x, endClick.y); worldTargetPos = endClick; hasWorldTargetPos = true; GameObject g = new GameObject("test"); g.transform.position = new Vector3(endClick.x, endClick.y, 0); foreach (Transform t in ph.joints) { AngleSlideJoint2D aa = t.GetComponent <AngleSlideJoint2D>(); if (aa == null) { continue; } Vector2 tt = -new Vector2(Mathf.Cos(aa.angle * Mathf.Deg2Rad) * aa.dist, Mathf.Sin(aa.angle * Mathf.Deg2Rad) * aa.dist); Vector2 t1 = worldTargetPos; // new Vector2 (0, 0); Vector2 distOff = (t1 - tt) - (Vector2)aa.center.position; // aa.transform.position; //aa.moveAngle = Mathf.Abs(Mathf.DeltaAngle(aa.angle, Mathf.Atan2(distOff.y, distOff.x) * Mathf.Rad2Deg)); } } //make arrow point right direction // arrow.transform.rotation = Quaternion.Euler (0, 0, a); arrow.transform.position = new Vector3(endClick.x, endClick.y, 0); arrow.transform.rotation = Quaternion.Euler(0, 0, a); arrowSprite.size = new Vector2(d, arrowSprite.size.y); } if (membraneClicked) { Vector3 pos = Camera.main.ScreenToWorldPoint(Input.mousePosition); memClickPos = new Vector2(pos.x, pos.y); if (!lastMemClick) { startClick = memClickPos; } else { endClick = memClickPos; } } else if (lastMemClick) { // movePos (endClick-startClick); } if (Input.GetMouseButtonUp(0)) { membraneClicked = false; // movePos (endClick); } arrow.SetActive(showArrow); lastMemClick = membraneClicked; }