Ejemplo n.º 1
0
    /// <summary>
    /// 起始点 初始化
    /// </summary>
    /// <param name="_currentStep">_current step.</param>
    /// <param name="_cmpFun">_cmp fun.</param>
    public void M_startStep(int _currentStep, CallBack _cmpFun)
    {
        int segmentIndex = M_calculateSegmentIndex(_currentStep);

        if (segmentIndex > 0)
        {
            if (segmentIndex == 1)
            {
                currentLastStep = 0;
                startStep       = 1;
            }
            else
            {
                lastRotatioin   = roadSample.M_getSegmentRotation(segmentIndex - 2);
                currentLastStep = M_calculateSegmentTotalStep(segmentIndex - 2);
                startStep       = currentLastStep + 1;
            }
            EnumRoadSegment curType = EnumRoadSegmentKit.M_getType(roadSegmentType[segmentIndex - 1]);
            M_creatSegment(curType);
        }
        else
        {
            currentLastStep = 0;
            startStep       = 1;
        }
        M_goStep(_currentStep, _cmpFun);
    }
Ejemplo n.º 2
0
    /// <summary>
    /// 构建路线 直到路线能达到的最远步点满足当前步点数
    /// 如果没有达到 则递归调用
    /// </summary>
    /// <returns>The segment view.</returns>
    /// <param name="_currentStep">_current step.</param>
    private IEnumerator M_updateSegmentView(int _currentStep)
    {
        if (currentLastStep >= totalStep)
        {
            if (creatSegmentCmp != null)
            {
                creatSegmentCmp();
            }
            creatSegmentCmp = null;
            yield break;
        }

        if (creatRoadDynamic)
        {
            if (_currentStep + preMaxLoadStepCount <= currentLastStep)
            {
                if (creatSegmentCmp != null)
                {
                    creatSegmentCmp();
                }
                creatSegmentCmp = null;
                yield break;
            }
        }

        int             segmentIndex = M_calculateSegmentIndex(currentLastStep + 1);
        EnumRoadSegment curType      = EnumRoadSegmentKit.M_getType(roadSegmentType[segmentIndex]);

        M_creatSegment(curType);


        yield return(new WaitForSeconds(0.1f));

        if (creatRoadDynamic)
        {
            if (currentStep + preMaxLoadStepCount > currentLastStep)
            {
                _currentStep++;
                StartCoroutine("M_updateSegmentView", _currentStep);
            }
            else
            {
                if (creatSegmentCmp != null)
                {
                    creatSegmentCmp();
                }
                creatSegmentCmp = null;
            }
        }
        else
        {
            _currentStep++;
            StartCoroutine("M_updateSegmentView", _currentStep);
        }
    }
Ejemplo n.º 3
0
    /// <summary>
    /// 根据类型 创建一个新的路段 中间路段(左 中 右)
    /// </summary>
    /// <returns>The segment_ middle.</returns>
    /// <param name="_targetType">_target type.</param>
    /// <param name="_cloneSegmentGo">_clone segment go.</param>
    private Transform M_creatSegment_Middle(EnumRoadSegment _targetType, GameObject _cloneSegmentGo)
    {
        GameObject newSegment_go = M_getCacheSegment(_targetType);

        if (newSegment_go == null)
        {
            newSegment_go = Instantiate(_cloneSegmentGo) as GameObject;
        }
        newSegment_go.SetActive(true);
        UIUtils.M_addChild(segment_parent, newSegment_go.transform);
        Transform newSegment_transform = newSegment_go.transform;

        return(newSegment_transform);
    }
Ejemplo n.º 4
0
    /// <summary>
    /// 创建一个指定类型的路段
    /// </summary>
    /// <param name="_type">_type.</param>
    private void M_creatSegment(EnumRoadSegment _type)
    {
        Transform          newSegment_transform = null;
        MissionRoadSegment targetSegment        = null;
        float point_x;
        float point_z;

        switch (_type)
        {
        case EnumRoadSegment.Start:
        {
            targetSegment = segments_start;
            M_creatSegment_StartEnd(targetSegment);
        } break;

        case EnumRoadSegment.End:
        {
            targetSegment = segments_end;
            M_creatSegment_StartEnd(targetSegment);
        } break;

        case EnumRoadSegment.Middle_Line:
        {
            targetSegment        = segments_middle_line;
            newSegment_transform = M_creatSegment_Middle(_type, targetSegment.gameObject);
            newSegment_transform.localPosition = lastPostion;
            newSegment_transform.localRotation = Quaternion.Euler(lastRotatioin);
            targetSegment = newSegment_transform.GetComponent <MissionRoadSegment>();
        } break;

        case EnumRoadSegment.Middle_Left:
        {
            targetSegment        = segments_middle_left;
            newSegment_transform = M_creatSegment_Middle(_type, targetSegment.gameObject);
            newSegment_transform.localPosition = lastPostion;
            lastRotatioin += new Vector3(0, -90, 0);
            newSegment_transform.localRotation = Quaternion.Euler(lastRotatioin);
            targetSegment = newSegment_transform.GetComponent <MissionRoadSegment>();
        } break;

        case EnumRoadSegment.Middle_Right:
        {
            targetSegment        = segments_middle_right;
            newSegment_transform = M_creatSegment_Middle(_type, targetSegment.gameObject);
            newSegment_transform.localPosition = lastPostion;
            lastRotatioin += new Vector3(0, 90, 0);
            newSegment_transform.localRotation = Quaternion.Euler(lastRotatioin);
            targetSegment = newSegment_transform.GetComponent <MissionRoadSegment>();
        } break;
        }
        if (targetSegment != null)
        {
            point_x      = targetSegment.distance * (int)Mathf.Cos(lastRotatioin.y * Mathf.Deg2Rad);
            point_z      = targetSegment.distance * (int)Mathf.Sin(-lastRotatioin.y * Mathf.Deg2Rad);
            lastPostion += new Vector3(point_x, 0, point_z);

            segmentList.Add(targetSegment);
            targetSegment.maxStep = currentLastStep + targetSegment.totalSteps;
            currentLastStep      += targetSegment.totalSteps;
            Vector3[] targetSegmentPoints = targetSegment.M_getPoints();
            ListKit.AddRange(missionPoints, targetSegmentPoints);
        }
    }
Ejemplo n.º 5
0
    /// <summary>
    /// 返回路段类型所对应的该路段中的步点总数
    /// </summary>
    /// <returns>The segment step count.</returns>
    /// <param name="_type">_type.</param>
    public int M_getSegmentStepCount(EnumRoadSegment _type)
    {
        MissionRoadSegment segment = M_getRoadSegment(_type);

        return(segment.totalSteps);
    }