示例#1
0
    public void DoChangeNextPoint(Railway.Point point, int nextID)
    {
        Railway.Point findPoint = Railway.Manager.Instance.GetPoint(nextID);

        if (null != findPoint &&
            Railway.Manager.InvalId != findPoint.prePointId &&
            Railway.Manager.InvalId == findPoint.nextPointId)
        {
            List <Railway.Point> pointList = new List <Railway.Point>();
            pointList.Add(point);
            pointList.Add(findPoint);
            while (Railway.Manager.InvalId != findPoint.prePointId)
            {
                findPoint = Railway.Manager.Instance.GetPoint(findPoint.prePointId);
                pointList.Add(findPoint);
            }
            for (int i = 0; i < pointList.Count - 1; i++)
            {
                pointList[i].ChangeNextPoint(pointList[i + 1].id);
            }
            pointList[pointList.Count - 1].ChangeNextPoint(Railway.Manager.InvalId);
        }
        else
        {
            point.ChangeNextPoint(nextID);
        }

        if (null != Railway.Manager.Instance.pointChangedEventor)
        {
            Railway.Manager.Instance.pointChangedEventor.Dispatch(new Railway.Manager.PointChanged()
            {
                bAdd = false, point = point
            });
        }
    }
示例#2
0
    void OnStationResidenceTimeChange(string text)
    {
        if (mSelectedStation != null && text.Length > 0)
        {
            PETimer time = PETimerUtil.GetTmpTimer();
            time.Minute = Convert.ToDouble(text);
            if (time.Minute > 0)
            {
                Railway.Route route = Railway.Manager.Instance.GetRouteByPointId(mSelectedStation.mRailPointData.id);
                if (route != null)
                {
                    route.SetStayTime(mSelectedStation.mRailPointData.id, Convert.ToSingle(time.Second));
                }
                else
                {
                    Railway.Point point = Railway.Manager.Instance.GetPoint(mSelectedStation.mRailPointData.id);
                    point.stayTime = Convert.ToSingle(time.Second);
                }


                if (null != e_ResetPointTime)
                {
                    e_ResetPointTime(mSelectedStation.mRailPointData.id, Convert.ToSingle(time.Second));
                }
            }
            time.Second          = mSelectedStation.mRailPointData.realStayTime;
            mRedestanceTime.text = ((int)time.Minute).ToString();
        }
    }
示例#3
0
 public void DoChangePointRot(int pointID, Vector3 rot)
 {
     Railway.Point point = Railway.Manager.Instance.GetPoint(pointID);
     if (null != point)
     {
         point.rotation = rot;
     }
 }
示例#4
0
 public void DoResetPointName(int pointID, string name)
 {
     Railway.Point point = Railway.Manager.Instance.GetPoint(pointID);
     if (null != point)
     {
         point.name = name;
     }
 }
示例#5
0
 public void RemoveTrain(int packageIndex)
 {
     Railway.Point getPoint = railwayView.GetSelPoint();
     if (null != getPoint)
     {
         /*Railway.Route route = */ Railway.Manager.Instance.GetRoute(getPoint.routeId);
     }
 }
示例#6
0
 public void RequestAddPoint(Vector3 pos, Railway.Point.EType type, int prePointId, int itemObjId)
 {
     RemoveItemFromPlayerPkg(itemObjId);
     Railway.Point point = DoAddPoint(pos, type, prePointId);
     if (point != null)
     {
         point.itemInstanceId = itemObjId;
     }
 }
示例#7
0
    void UpdateUnActiveLinks()
    {
        List <List <Railway.Point> > linkList = new List <List <Railway.Point> >();

        List <Railway.Point> pointList = new List <Railway.Point>();

        List <int> isolatePoints = Railway.Manager.Instance.GetIsolatePoint();

        foreach (int pointID in isolatePoints)
        {
            pointList.Add(Railway.Manager.Instance.GetPoint(pointID));
        }

        while (pointList.Count > 0)
        {
            List <Railway.Point> addList = new List <Railway.Point>();
            Railway.Point        opPoint = pointList[0];
            addList.Add(opPoint);
            pointList.Remove(opPoint);

            Railway.Point findPoint = opPoint;
            while (Railway.Manager.InvalId != findPoint.prePointId)
            {
                findPoint = Railway.Manager.Instance.GetPoint(findPoint.prePointId);
                if (findPoint.id == opPoint.id)
                {
                    break;
                }
                if (pointList.Remove(findPoint))
                {
                    addList.Insert(0, findPoint);
                }
            }

            findPoint = opPoint;
            while (Railway.Manager.InvalId != findPoint.nextPointId)
            {
                findPoint = Railway.Manager.Instance.GetPoint(findPoint.nextPointId);
                if (findPoint.id == opPoint.id)
                {
                    break;
                }
                if (pointList.Remove(findPoint))
                {
                    addList.Add(findPoint);
                }
            }

            linkList.Add(addList);
        }

        if (railwayView != null)
        {
            railwayView.ReDrawDisRailLine(linkList);
        }
    }
示例#8
0
    public void DoResetPointTime(int pointID, float time)
    {
        Railway.Point point = Railway.Manager.Instance.GetPoint(pointID);
        if (point == null)
        {
            return;
        }

        point.stayTime = time;
    }
示例#9
0
    void SetSatationInfo(Railway.Point satation)
    {
        mTitleStationName.text = satation.name;
        mStationName.text      = satation.name;
        PETimer rTime = PETimerUtil.GetTmpTimer();

        rTime.Second = satation.realStayTime;
        int min = Convert.ToInt32(rTime.Minute);

        mRedestanceTime.text = min.ToString();
    }
示例#10
0
 public void DoAutoCreateRoute(int pointID, int itemObjID)
 {
     Railway.Point point = Railway.Manager.Instance.GetPoint(pointID);
     DoCreateRoute(pointID, "");
     DoSetRouteTrain(point.routeId, itemObjID);
     if (DoSetRouteTrain(point.routeId, itemObjID))
     {
         RemoveItemFromPlayerPkg(itemObjID);
     }
     DoSetTrainToStation(point.routeId, pointID);
 }
示例#11
0
    void RPC_S2C_Raileway_NextPointChange(uLink.BitStream stream, uLink.NetworkMessageInfo info)
    {
        int pointId     = stream.Read <int>();
        int nextPointId = stream.Read <int> ();

        Railway.Point mOpPoint = Railway.Manager.Instance.GetPoint(pointId);
        if (mOpPoint != null)
        {
            RailwayOperate.Instance.DoChangeNextPoint(mOpPoint, nextPointId);
        }
    }
示例#12
0
 public void RequestChangeNextPoint(Railway.Point point, int nextID)
 {
     if (GameConfig.IsMultiMode)
     {
         if (null != PlayerNetwork.mainPlayer)
         {
             PlayerNetwork.mainPlayer.RPCServer(EPacketType.PT_InGame_Railway_NextPointChange, point.id, nextID);
         }
     }
     else
     {
         DoChangeNextPoint(point, nextID);
     }
 }
示例#13
0
    public bool IsPointInCompletedLine(int pointId)
    {
        Railway.Point point = Railway.Manager.Instance.GetPoint(pointId);

        if (point == null)
        {
            return(false);
        }

        Railway.Point header = Railway.Point.GetHeader(point);
        if (null == header)
        {
            return(false);
        }

        if (header.pointType != Railway.Point.EType.End)
        {
            return(false);
        }

        Railway.Point tail = Railway.Point.GetTail(point);
        if (null == tail)
        {
            return(false);
        }

        if (tail.pointType != Railway.Point.EType.End)
        {
            return(false);
        }

        bool ret = true;

        Railway.Point.Travel(header, (p) =>
        {
            if (p != header &&
                p != tail &&
                p.pointType == Railway.Point.EType.End
                )
            {
                ret = false;
            }
            if (p.routeId != Railway.Manager.InvalId)
            {
                ret = false;
            }
        });

        return(ret);
    }
示例#14
0
    public Railway.Point DoAddPoint(Vector3 pos, Railway.Point.EType type, int prePointId, int pointId = -1)
    {
        Railway.Point point = Railway.Manager.Instance.GetPoint(prePointId);

        // Reverse Link
        if (null != point &&
            Railway.Manager.InvalId == point.prePointId &&
            Railway.Manager.InvalId != point.nextPointId)
        {
            Railway.Point.ReverseNext(point);
        }

        return(Railway.Manager.Instance.AddPoint(pos, prePointId, type, pointId));
    }
示例#15
0
    void OnDeleteRoute(Railway.Point point)
    {
        Railway.Route route = Railway.Manager.Instance.GetRoute(point.routeId);
        if (null != route)
        {
            if (route.HasPassenger())
            {
                MessageBox_N.ShowOkBox(UIMsgBoxInfo.RailwayDeleteNotice.GetString());
                return;
            }

            RailwayOperate.Instance.RequestDeleteRoute(point.routeId);
        }
    }
示例#16
0
 public void UpdateSelectedStation()
 {
     if (null != mSelectedStation)
     {
         Railway.Point point = Railway.Manager.Instance.GetPoint(mSelectedStation.mRailPointData.id);
         if (point != null)
         {
             OnSeletedLine(point.routeId != Railway.Manager.InvalId, point.id);
         }
         else
         {
             ClearUIInfo();
         }
     }
 }
示例#17
0
 public void RequestRemovePoint(int pointID)
 {
     if (GameConfig.IsMultiMode)
     {
         if (null != PlayerNetwork.mainPlayer)
         {
             PlayerNetwork.mainPlayer.RPCServer(EPacketType.PT_InGame_Railway_Recycle, pointID);
         }
     }
     else
     {
         Railway.Point removePoint = Railway.Manager.Instance.GetPoint(pointID);
         if (null != removePoint)
         {
             AddItemToPlayerPkg(removePoint.itemInstanceId);
             DoRemovePoint(pointID);
         }
     }
 }
示例#18
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);
    }
    public void SetInfo(Railway.Point point)
    {
        if (null == point)
        {
            if (mPointGui.IsOpen())
            {
                mPointGui.Hide();
            }
            return;
        }

        if (!mPointGui.IsOpen())
        {
            mPointGui.Show();
        }

        mOpPoint    = point;
        mNearPoints = Railway.Manager.Instance.GetNearPoint(mOpPoint);
        mLinkEnable.Clear();
        for (int i = 0; i < mNearPoints.Count; i++)
        {
            if (mNearPoints[i].routeId != Railway.Manager.InvalId)
            {
                mLinkEnable.Add(false);
            }
            else
            {
                mLinkEnable.Add(mOpPoint.nextPointId != mNearPoints[i].id &&
                                mOpPoint.prePointId != mNearPoints[i].id &&
                                Railway.Manager.CheckLinkState(mOpPoint, mNearPoints[i])
                                );
            }
        }

        mPointGui.PointName = mOpPoint.name;
        ResetPrePoint();
        ResetNextPoint();
        /*Railway.Route route = */ Railway.Manager.Instance.GetRouteByPointId(mOpPoint.id);
    }
示例#20
0
    public Railway.Route DoCreateRoute(int pointId, string routeName)
    {
        if (!IsPointInCompletedLine(pointId))
        {
            return(null);
        }

        Railway.Point point = Railway.Manager.Instance.GetPoint(pointId);

        if (point == null)
        {
            return(null);
        }

        Railway.Point header = Railway.Point.GetHeader(point);
        if (header.pointType != Railway.Point.EType.End)
        {
            return(null);
        }

        List <int> pointList = new List <int>();

        point = header;
        while (true)
        {
            if (null != point)
            {
                pointList.Add(point.id);

                point = point.GetNextPoint();
            }
            else
            {
                break;
            }
        }

        return(Railway.Manager.Instance.CreateRoute(routeName, pointList.ToArray()));
    }
示例#21
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);
    }
示例#22
0
    public static bool CheckRoute(Railway.Point point)
    {
        if (point.routeId != Railway.Manager.InvalId)
        {
            return(false);
        }
        if (point.pointType == Railway.Point.EType.End)
        {
            Railway.Point findPoint = point;
            while (Railway.Manager.InvalId != findPoint.prePointId)
            {
                findPoint = Railway.Manager.Instance.GetPoint(findPoint.prePointId);
                if (findPoint == point)
                {
                    return(false);
                }
                if (findPoint.pointType == Railway.Point.EType.End)
                {
                    return(true);
                }
            }

            findPoint = point;
            while (Railway.Manager.InvalId != findPoint.nextPointId)
            {
                findPoint = Railway.Manager.Instance.GetPoint(findPoint.nextPointId);
                if (findPoint == point)
                {
                    return(false);
                }
                if (findPoint.pointType == Railway.Point.EType.End)
                {
                    return(true);
                }
            }
        }
        else
        {
            if (point.prePointId == Railway.Manager.InvalId || point.nextPointId == Railway.Manager.InvalId)
            {
                return(false);
            }
            Railway.Point startPoint = null;
            Railway.Point endPoint   = null;

            Railway.Point findPoint = point;
            while (Railway.Manager.InvalId != findPoint.prePointId)
            {
                findPoint = Railway.Manager.Instance.GetPoint(findPoint.prePointId);
                if (findPoint == point)
                {
                    return(false);
                }
                if (findPoint.pointType == Railway.Point.EType.End)
                {
                    startPoint = findPoint;
                    break;
                }
            }

            findPoint = point;
            while (Railway.Manager.InvalId != findPoint.nextPointId)
            {
                findPoint = Railway.Manager.Instance.GetPoint(findPoint.nextPointId);
                if (findPoint == point)
                {
                    return(false);
                }
                if (findPoint.pointType == Railway.Point.EType.End)
                {
                    endPoint = findPoint;
                    break;
                }
            }

            return(null != startPoint && null != endPoint);
        }
        return(false);
    }
示例#23
0
 public void OnCreateRoute(Railway.Point point, string routeName)
 {
     RailwayOperate.Instance.RequestCreateRoute(point.id, routeName);
 }
示例#24
0
 public void Init(Railway.Point _mRailPointData)
 {
     mRailPointData = _mRailPointData;
     mSprStation    = this.gameObject.GetComponent <UISprite>();
 }