Esempio n. 1
0
    // Update is called once per frame
    void Update()
    {
        for (var i = 0; i < columns.Count; i++)
        {
            Debug.Log(i + "\tcolumn:" + columns[i].mytoString());
        }
        ms.clear();
        if (this.flag)
        {
            GetComponent <Rigidbody2D>().velocity = (this.mouseWorldPos - transform.position) * 10;
        }
        else
        {
            if (Vector3.Distance(transform.position, this.columns[this.columns.Count - 1].preTangentWorldPos) < 1)
            {
                this.GetComponent <Rigidbody2D>().velocity = (this.columns[this.columns.Count - 1].preTangentWorldPos - transform.position) * 10;
            }
            else
            {
                this.GetComponent <Rigidbody2D>().velocity = (this.columns[this.columns.Count - 1].preTangentWorldPos - transform.position).normalized * 100;
            }
        }
        RaycastHit2D[] results;
        if (this.columns.Count > 1)
        {
            //获取上一个柱子切点
            //var p=CalcQieDian(this.columns[this.columns.Count-1].columnWorldPos,this.transform.position,this.columns[this.columns.Count-1].column.transform.localScale.x/10,this.columns[this.columns.Count-1].preTangentWorldPos);
            //this.columns[this.columns.Count-1].preTangentWorldPos=p;
            //Debug.DrawLine(transform.position, this.columns[this.columns.Count-1].preTangentWorldPos, Color.red, Vector3.Distance(transform.position,this.columns[this.columns.Count-1].preTangentWorldPos));
            results = Physics2D.RaycastAll(transform.position, this.columns[this.columns.Count - 1].preTangentWorldPos - transform.position, Vector3.Distance(transform.position, this.columns[this.columns.Count - 1].preTangentWorldPos));
            //var results=cc.director.getPhysicsManager().rayCast(transform.position,this.columns[this.columns.Count-1].preTangentWorldPos,cc.RayCastType.Closest);
        }
        else
        {
            //Debug.DrawLine(transform.position, this.columns[this.columns.Count-1].startWorldPos, Color.red, Vector3.Distance(transform.position,this.columns[this.columns.Count-1].startWorldPos));
            results = Physics2D.RaycastAll(transform.position, this.columns[this.columns.Count - 1].startWorldPos - transform.position, Vector3.Distance(transform.position, this.columns[this.columns.Count - 1].startWorldPos));
            //grounded = Physics.Raycast(transform.position, this.columns[this.columns.Count-1].startWorldPos);
            //var results = cc.director.getPhysicsManager().rayCast(transform.position,this.columns[this.columns.Count-1].startWorldPos,cc.RayCastType.Closest);
        }
        for (var i = 0; i < results.Length; i++)
        {
            Debug.Log(i + "\t result:" + results[i].transform.name);
        }
        //朝切点发射射线检测
        Debug.Log(results);
        if (results.Length > 1)
        {
            //this.c0=results[0].collider.node.name;
            var col = results[1].collider.gameObject;
            if (col != this.columns[this.columns.Count - 1].column)
            {
                //Debug.Log("radius:"+col.transform.localScale.x/10);
                //Debug.Log("point"+results[1].point);
                var sp = this.CalcQieDian(col.transform.position, this.transform.position, col.transform.localScale.x / 10, results[1].point);
                Debug.Log("sp:" + sp);
                var nc = new myColumn(col, sp);
                this.columns.Add(nc);
                //nc.column.GetComponent('columnScr').onLight();
            }
            else
            {
                //再次碰到原来的column
                this.newTangentP = this.CalcQieDian(this.columns[this.columns.Count - 1].columnWorldPos, transform.position, this.columns[this.columns.Count - 1].column.transform.localScale.x / 10, this.columns[this.columns.Count - 1].preTangentWorldPos);



                if (this.columns[this.columns.Count - 1].rad * (this.columns[this.columns.Count - 1].rad + this.radTwoPOnR(this.columns[this.columns.Count - 1].preTangentWorldPos, this.newTangentP, this.columns[this.columns.Count - 1].columnWorldPos)) < 0)
                {
                    //console.log("!!!!!pop");
                    var c = this.columns[this.columns.Count - 1];
                    this.columns.Remove(this.columns[this.columns.Count - 1]);
                    if (this.ifOnlyColumn(c.column) == 0)
                    {
                        //只有一份c.column
                        //c.column. GetComponent('columnScr').cancelLight();
                    }
                }
                else
                {
                    this.columns[this.columns.Count - 1].rad += this.radTwoPOnR(this.columns[this.columns.Count - 1].preTangentWorldPos, this.newTangentP, this.columns[this.columns.Count - 1].columnWorldPos);
                    this.columns[this.columns.Count - 1].preTangentWorldPos = this.newTangentP;
                }
            }
        }
        else
        {
            if (this.columns.Count > 1)
            {
                this.newTangentP = this.CalcQieDian(this.columns[this.columns.Count - 1].columnWorldPos, transform.position, this.columns[this.columns.Count - 1].column.transform.localScale.x / 10, this.columns[this.columns.Count - 1].preTangentWorldPos);
                if (this.columns[this.columns.Count - 1].rad * (this.columns[this.columns.Count - 1].rad + this.radTwoPOnR(this.columns[this.columns.Count - 1].preTangentWorldPos, this.newTangentP, this.columns[this.columns.Count - 1].columnWorldPos)) < 0)
                {
                    //console.log("!!!!!pop");
                    var c = this.columns[this.columns.Count - 1];
                    this.columns.Remove(this.columns[this.columns.Count - 1]);
                    if (this.ifOnlyColumn(c.column) == 0)
                    {
                        //只有一份c.column
                        //c.column. getComponent('columnScr').cancelLight();
                    }
                }
                else
                {
                    this.columns[this.columns.Count - 1].rad += this.radTwoPOnR(this.columns[this.columns.Count - 1].preTangentWorldPos, this.newTangentP, this.columns[this.columns.Count - 1].columnWorldPos);
                    this.columns[this.columns.Count - 1].preTangentWorldPos = this.newTangentP;
                }
            }
        }
        if (this.columns.Count > 1)
        {
            /*for(var i=1;i<this.columns.Count-1;i++){
             *  this.columns[i].column.getComponent('columnScr').onLight();
             * }*/
            //var pz=this.columns[this.columns.Count-1].startWorldPos-v2Tov3( rotateVec2( (this.columns[this.columns.Count-1].columnWorldPos),(this.columns[this.columns.Count-1].rad/2)))+(this.columns[this.columns.Count-1].columnWorldPos);
            var pz   = v2Tov3(rotateVec2(this.columns[this.columns.Count - 1].startWorldPos - (this.columns[this.columns.Count - 1].columnWorldPos), (this.columns[this.columns.Count - 1].rad / 2))) + (this.columns[this.columns.Count - 1].columnWorldPos);
            var pzno = pz - (this.columns[this.columns.Count - 1].columnWorldPos);

            //以下防止绳子没从柱子上下来
            if (Mathf.Abs(this.columns[this.columns.Count - 1].rad) < (Math.PI * 2) - 0.5)
            {
                if (Vector3.Dot(pzno.normalized, ((this.columns[this.columns.Count - 2].preTangentWorldPos - (this.columns[this.columns.Count - 1].startWorldPos)).normalized)) > 0)
                {
                    //console.log("!!!!!pop   dot");
                    var c = this.columns[this.columns.Count - 1];
                    this.columns.Remove(this.columns[this.columns.Count - 1]);
                    if (this.ifOnlyColumn(c.column) == 0)
                    {
                        //只有一份c.column
                        //c.column. getComponent('columnScr').cancelLight();
                    }
                }
            }
        }
        this.ms.Width = this.lineWidth;


        this.ms.moveTo(transform.position);
        for (int i = this.columns.Count - 1; i > 0; i--)
        {
            var nor = (this.columns[i].preTangentWorldPos - this.columns[i].columnWorldPos).normalized;
            var po  = this.columns[i].preTangentWorldPos + (nor * (this.lineWidth / 2));
            this.ms.lineTo(new Vector2(po.x, po.y));


            //对第i个柱子画弧
            if (Mathf.Abs(this.columns[i].rad) >= Math.PI * 2)
            {
                if (this.columns[i].rad > 0)
                {
                    //顺时针绕上柱子,但线要逆时针从结点向起始点画
                    this.ms.circle(this.columns[i].columnWorldPos, this.columns[i].column.transform.localScale.x / 10 + this.lineWidth / 2, 0, Mathf.PI * 2, false);
                }
                else
                {
                    this.ms.circle(this.columns[i].columnWorldPos, this.columns[i].column.transform.localScale.x / 10 + this.lineWidth / 2, Mathf.PI * 2, 0, true);
                }

                this.ms.moveTo(this.columns[i].startWorldPos);
            }
            else if (Mathf.Abs(this.columns[i].rad) != 0)
            {
                var strad = this.radOnePointOnCircle(this.columns[i].preTangentWorldPos, this.columns[i].columnWorldPos);
                this.ms.circle(this.columns[i].columnWorldPos, this.columns[i].column.transform.localScale.x / 10 + this.lineWidth / 2, strad, strad + this.columns[i].rad, this.columns[i].rad < 0);
            }
            var norSt = (this.columns[i].startWorldPos - (this.columns[i].columnWorldPos)).normalized;
            var poSt  = this.columns[i].startWorldPos + (norSt * (this.lineWidth / 2));
            this.ms.moveTo(poSt);
        }
        this.ms.lineTo(ropeStart.position);

        //this.ms.fillColor = cc.Color.YELLOW;
        //var q=this.CalcQieDian(this.ci.parent.convertToWorldSpaceAR(this.ci.position),transform.position,20);
        //this.ms.circle(this.node.convertToNodeSpaceAR(q).x,this.node.convertToNodeSpaceAR(q).y,5);
        this.ms.stroke();
    }