private void GetPointsFromFlowDirAtTwo(RiverData.Direction predir, RiverData.Direction curdir, Vector3 pos, ref List <Vector3> left, ref List <Vector3> right) { if (predir == curdir || predir == RiverData.Direction.NotExist) { var r1 = PointSDir(pos, curdir, RiverData.GetTargetDirsDir(curdir, RiverData.Direction.Right)); var r2 = PointSDir(pos, RiverData.GetTargetDirsDir(curdir, RiverData.Direction.Right), RiverData.GetTargetDirsDir(curdir, RiverData.Direction.Down)); var l1 = PointSDir(pos, curdir, RiverData.GetTargetDirsDir(curdir, RiverData.Direction.Left)); var l2 = PointSDir(pos, RiverData.GetTargetDirsDir(curdir, RiverData.Direction.Left), RiverData.GetTargetDirsDir(curdir, RiverData.Direction.Down)); left.Add(l2); left.Add(l1); right.Add(r2); right.Add(r1); } else { var diffdir = RiverData.ThisDirisOrisDirsDir(curdir, predir); switch (diffdir) { case RiverData.Direction.Left: { var r1 = PointSDir(pos, curdir, RiverData.GetTargetDirsDir(curdir, RiverData.Direction.Right)); var r2 = PointSDir(pos, curdir, RiverData.GetTargetDirsDir(curdir, RiverData.Direction.Down)); var r3 = PointSDir(pos, curdir, RiverData.GetTargetDirsDir(curdir, RiverData.Direction.Left)); var l1 = PointSDir(pos, curdir, RiverData.GetTargetDirsDir(curdir, RiverData.Direction.Down)); } break; case RiverData.Direction.Right: { } break; } } }
private void GenFromOriginBounds(RiverData.Bounds kCur, RiverData.Bounds before) { if (kCur == null) { Debug.Log("CC"); } kCur.bHasGend = true; var dir = kCur.flowDir; if (before == null)// 这是原点 { //if (kCur != null) { kCur.widthModify = kxModify; float centerx = kCur.pos.x + 0.5f; float centerz = kCur.pos.z + 0.5f; Vector3 center = new Vector3(centerx, 0, centerz); var borderleft = BorderLeft(center, kCur.flowDir); var borderright = BorderRight(center, kCur.flowDir); var downleft = DownLeft(center, kCur.flowDir); var downRight = DownRight(center, kCur.flowDir); var mid = ModifyVector(LerpPos(downleft, downRight, 0.5f)); var ldir = RiverData.GetTargetDirsDir(kCur.flowDir, RiverData.Direction.Left); var rdir = RiverData.GetTargetDirsDir(kCur.flowDir, RiverData.Direction.Right); var l = ModifyVector(LerpPos(borderleft, borderright, 0.5f + 0.5f * kRiverPercent * kCur.widthModify)); var r = ModifyVector(LerpPos(borderright, borderleft, 0.5f + 0.5f * kRiverPercent * kCur.widthModify)); AddEightVertice(mid, l, r, mid, Color.white); } } else { //var dir = kCur.flowDir; if (kPre.flowDir == kCur.flowDir) { kCur.widthModify = Mathf.Clamp(kPre.widthModify + kxModify, 0f, 1.0f); float centerx = kCur.pos.x + 0.5f; float centerz = kCur.pos.z + 0.5f; Vector3 center = new Vector3(centerx, 0, centerz); var borderleft = BorderLeft(center, dir); var borderright = BorderRight(center, dir); var downl = kBoundsPoints[0]; var downr = kBoundsPoints[1]; var ldir = RiverData.GetTargetDirsDir(dir, RiverData.Direction.Left); var rdir = RiverData.GetTargetDirsDir(dir, RiverData.Direction.Right); var l = ModifyVector(LerpPos(borderleft, borderright, 0.5f + 0.5f * kRiverPercent * kCur.widthModify), kCur.diffModify, dir); var r = ModifyVector(LerpPos(borderright, borderleft, 0.5f + 0.5f * kRiverPercent * kCur.widthModify), kCur.diffModify, dir); AddEightVertice(downl, l, r, downr, Color.white); } else { kCur.widthModify = Mathf.Clamp(kPre.widthModify + kxModify, 0f, 1.0f); float centerx = kCur.pos.x + 0.5f; float centerz = kCur.pos.z + 0.5f; Vector3 center = new Vector3(centerx, 0, centerz); var borderleft = BorderLeft(center, dir); var borderright = BorderRight(center, dir); var downl = kBoundsPoints[0]; var downr = kBoundsPoints[1]; var diff = RiverData.ThisDirisOrisDirsDir(kCur.flowDir, kPre.flowDir); var l = ModifyVector(LerpPos(borderleft, borderright, 0.5f + 0.5f * kRiverPercent * kCur.widthModify)); var r = ModifyVector(LerpPos(borderright, borderleft, 0.5f + 0.5f * kRiverPercent * kCur.widthModify)); AddEightVertice(downl, l, r, downr, Color.white, diff); } } kPre = kCurE; kCurE = kCur.GetLink(kCur.flowDir); }