// 在该位置铺设铁轨(重载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); }