// 在该位置铺设铁轨(重载1)
    void Put(GameObject rail, Vector3 new_pos, TurnDirect turnDirect)
    {
        FaceDirect new_faceDirect = NewFaceDirection(new_pos, LastRail.pos);

        if (turnDirect != TurnDirect.Straight)
        {
            CurveLastRail(turnDirect);
        }
        int rotation = (int)new_faceDirect * -90;

        PutRailModel(new_pos, rotation, rail);  //放置的铁轨必定是直行铁轨
        LastRail.pos = new_pos; LastRail.faceDirect = new_faceDirect;
    }
    // 判断是否允许铺设铁轨(重载3)
    public bool PutEnable(Vector3 new_pos, out FaceDirect new_faceDirect, out TurnDirect turnDirect)
    {
        new_faceDirect = FaceDirect.Unknown;
        turnDirect     = TurnDirect.Unknown;
        int lx = (int)LastRail.pos.x, lz = (int)LastRail.pos.z;
        int x = (int)new_pos.x, z = (int)new_pos.z;

        if (RailsArray[x, z] != null || Mathf.Abs(x - lx) + Mathf.Abs(z - lz) >= 2)
        {
            return(false);
        }
        new_faceDirect = NewFaceDirection(new_pos, LastRail.pos);
        turnDirect     = TurnDirection(new_faceDirect, LastRail.faceDirect);
        return(true);
    }
    // 将上一段铁轨变弯曲
    void CurveLastRail(TurnDirect turnDirect)
    {
        int lx = (int)LastRail.pos.x, lz = (int)LastRail.pos.z, lf = (int)LastRail.faceDirect;
        int rotation = 0;

        switch (turnDirect)
        {
        case TurnDirect.Left: rotation = (lf + 3) % 4 * -90; break;

        case TurnDirect.Right: rotation = lf * -90; break;
        }
        PhotonNetwork.Destroy(RailsArray[lx, lz]);
        //Destroy(RailsArray[lx, lz]);
        GameObject curveRail = PhotonNetwork.Instantiate("CurveRail", LastRail.pos, Quaternion.identity);

        PutRailModel(LastRail.pos, rotation, curveRail);
    }
    // 接上终点铁轨
    //public void ConnectToEnd(int end, out TurnDirect turnDirect)
    //{
    //    turnDirect = TurnDirect.Unknown;
    //    int ex = (int)EndRail[end].pos.x, ez = (int)EndRail[end].pos.z;
    //    Destroy(RailsArray[ex, ez]);
    //    Put(EndRail[end].pos, out turnDirect);
    //    Finish = true;
    //}

    // 接上终点铁轨
    public void ConnectToEnd(int end, out TurnDirect[] turnDirects)
    {
        turnDirects = new TurnDirect[2];
        int ex = (int)EndRail[end].pos.x;
        int ez = (int)EndRail[end].pos.z;

        //Destroy(RailsArray[ex, ez]);
        Put(RailsArray[ex, ez], EndRail[end].pos, out turnDirects[0]);

        end = (end + 1) % 2;
        ex  = (int)EndRail[end].pos.x;
        ez  = (int)EndRail[end].pos.z;
        //Destroy(RailsArray[ex, ez]);
        Put(RailsArray[ex, ez], EndRail[end].pos, out turnDirects[1]);

        Finish = true;
    }
    // 在该位置尝试铺设铁轨
    public bool TryPut(GameObject rail, Vector3 new_pos, bool enableToCurveLastRail, out TurnDirect turnDirect)
    {
        turnDirect = TurnDirect.Unknown;
        if (Finish)
        {
            return(false);
        }

        if (!PutEnable(new_pos, out turnDirect))
        {
            return(false);
        }

        if (!enableToCurveLastRail && turnDirect != TurnDirect.Straight)
        {
            return(false);
        }

        Put(rail, new_pos, turnDirect);

        return(true);
    }