コード例 #1
0
    // 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);
            }
        }
    }
コード例 #2
0
ファイル: player.cs プロジェクト: RishiAstra/Cellife
    // 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;
    }