Beispiel #1
0
        public static bool CheckLinkState(Point point1, Point point2)
        {
            if (point1 == null || point2 == null)
            {
                return(false);
            }

            return(CheckLinkState(point1.GetLinkPosition(), point2.GetLinkPosition(), point1.GetTrans(), point2.GetTrans()));
        }
Beispiel #2
0
    bool TryLink()
    {
        mPrePoint = FindNearestIsolatePoint(mLinkPoint.position);

        if (mPrePoint == null)
        {
            BreakLink();
            return(false);
        }

        m_LinkPos1 = mLinkPoint.position;
        m_LinkPos2 = mPrePoint.GetLinkPosition();
        Transform preTran = mPrePoint.GetTrans();

        //if can't link move higher
        bool getPos = false;

        for (int i = 0; i < MaxStepTime; ++i)
        {
            if (Railway.Manager.CheckLinkState(m_LinkPos1, m_LinkPos2, transform, preTran))
            {
                getPos = true;
                EstablishSubLink(mLinkPoint.position, m_LinkPos2);
                transform.position += i * StepHeight * Vector3.up;
                EstablishLink(m_LinkPos1, m_LinkPos2);
                break;
            }
            m_LinkPos1 += StepHeight * Vector3.up;
        }

        if (!getPos)
        {
            BreakLink();

            mPrePoint = null;

            return(false);
        }
        return(true);
    }
Beispiel #3
0
    Railway.Point FindNearestIsolatePoint(Vector3 pos, float dis = Railway.Manager.JointMaxDistance)
    {
        Railway.Point retPoint  = null;
        float         minSqrDis = dis * dis;

        foreach (int pointId in isolatePoints)
        {
            Railway.Point point = Railway.Manager.Instance.GetPoint(pointId);
            if (null == point)
            {
                continue;
            }

            float sqrDis = (pos - point.GetLinkPosition()).sqrMagnitude;
            if (sqrDis < minSqrDis)
            {
                minSqrDis = sqrDis;
                retPoint  = point;
            }
        }

        return(retPoint);
    }