Skip to content

Commit

Permalink
#228 Factored out run method for VRow trait.
Browse files Browse the repository at this point in the history
  • Loading branch information
Rich2 committed Mar 23, 2023
1 parent a2e37c9 commit db97d4b
Show file tree
Hide file tree
Showing 2 changed files with 94 additions and 79 deletions.
2 changes: 1 addition & 1 deletion EGrid/src/eg220/Terr220E30.scala
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@ object Terr220E30 extends Long220Terrs
TRow(176, Head1Land(2, Plains, Taiga), taiga * 2, Head3Land(0, Plains, Taiga), Head2Land(4, Plains, Taiga), taiga),
VRow(175, MouthDL(1540), MouthDR(1544)),
TRow(174, Head1Land(2, Plains, Taiga), Head1Land(5, Plains, Taiga), taiga * 4),
VRow(173, MouthUL(1540, Lake), VertInDL(1542, Lake)),
VRow(173, MouthUL(1540, Lake), VertInDL(1542, Lake, Lake)),
TRow(172, Head1Land(2, Plains, Taiga), Head1Land(5, Plains, Taiga), taiga * 5),
VRow(171, MouthDL(1536, Lake), MouthUR(1538, Lake), MouthDn(1542, Lake)),
TRow(170, sea, Head2Land(3, Plains, Taiga), Head1Land(3, Plains, Taiga), taiga * 4),
Expand Down
171 changes: 93 additions & 78 deletions EGrid/src/egrid/WTerrSetter.scala
Original file line number Diff line number Diff line change
Expand Up @@ -11,31 +11,115 @@ abstract class WTerrSetter(gridIn: HGrid, val terrs: HCenLayer[WTile], val sTerr
case class VRow(row: Int, edits: VRowElem*) extends RowBase

sealed trait VRowElem
{ def run(row: Int): Unit
}

/** Creates the head of a strait / river / etc with the head up and the straits going down. */
case class MouthUp(c: Int, st: WSTerr = Sea) extends VRowElem
{
override def run(row: Int): Unit =
{ corners.setMouth3 (row + 1, c)
sTerrs.set (row - 1, c, WSideMid (st) )
}
}

/** Creates the head of a strait / river with the head up right and the straits going down left. */
case class MouthUR(c: Int, st: WSTerr = Sea) extends VRowElem
{
override def run(row: Int): Unit =
{ corners.setMouth4(row + 1, c + 2)
sTerrs.set(row, c - 1, WSideMid(st))
}
}

/** Creates the head of a strait / river with the head down right and the straits going up left. */
case class MouthDR(c: Int, st: WSTerr = Sea) extends VRowElem
{
override def run(row: Int): Unit =
{ corners.setMouth5(row - 1, c + 2)
sTerrs.set(row, c - 1, WSideMid(st))
}
}

/** Creates the head of a strait / river / etc with the head down and the straits going up. */
case class MouthDn(c: Int, st: WSTerr = Sea) extends VRowElem
{
override def run(row: Int): Unit =
{ corners.setMouth0(row - 1, c)
sTerrs.set(row + 1, c, WSideMid(st))
}
}

/** Creates the head of a strait / river with the head down left and the straits going up right. */
case class MouthDL(c: Int, st: WSTerr = Sea) extends VRowElem
{
override def run(row: Int): Unit =
{ corners.setMouth1(row - 1, c - 2)
sTerrs.set(row, c + 1, WSideMid(st))
}
}

/** Creates the head of a strait / river with the head up left and the straits going down right. */
case class MouthUL(c: Int, st: WSTerr = Sea) extends VRowElem
{
override def run(row: Int): Unit =
{ corners.setMouth2(row + 1, c - 2)
sTerrs.set(row, c + 2, WSideMid(st))
}
}

case class VertInUR(c: Int, upSide: WSTerr = Sea, rightSide: WSTerr = Sea) extends VRowElem
{
override def run(row: Int): Unit =
{ corners.setVert4In(row + 1, c + 2)
sTerrs.setIf(row + 1, c, WSideMid(upSide))
sTerrs.setIf(row, c + 1, WSideMid(rightSide))
}
}

case class VertInDR(c: Int, downSide: WSTerr = Sea, rtSide: WSTerr = Sea) extends VRowElem
{
override def run(row: Int): Unit =
{ corners.setVert5In(row - 1, c + 2)
sTerrs.set(row - 1, c, WSideMid(downSide))
sTerrs.set(row, c + 1, WSideMid(rtSide))
}
}
case class VertInDn(c: Int, leftSide: WSTerr = Sea, rightSide: WSTerr = Sea) extends VRowElem
{
override def run(row: Int): Unit =
{ corners.setVert0In(row - 1, c, 3)
sTerrs.setIf(row, c - 1, WSideMid(leftSide))
sTerrs.setIf(row, c + 1, WSideMid(rightSide))
}
}

case class VertInDL(c: Int, leftSide: WSTerr = Sea, downSide: WSTerr = Sea) extends VRowElem
{
override def run(row: Int): Unit =
{ corners.setVert1In(row - 1, c - 2)
sTerrs.set(row, c - 1, WSideMid(leftSide))
sTerrs.set(row - 1, c, WSideMid(downSide))
}
}

case class VertInUR(c: Int, st1: WSTerr = Sea, st2: WSTerr = Sea) extends VRowElem
case class VertInDR(c: Int, st1: WSTerr = Sea, st2: WSTerr = Sea) extends VRowElem
case class VertInDn(c: Int, st1: WSTerr = Sea, st2: WSTerr = Sea) extends VRowElem
case class VertInDL(c: Int, st: WSTerr = Sea) extends VRowElem
case class VertInUL(c: Int, st1: WSTerr = Sea, st2: WSTerr = Sea) extends VRowElem
case class VertInUp(c: Int, st1: WSTerr = Sea, st2: WSTerr = Sea) extends VRowElem
{
def run(row: Int): Unit =
{ corners.setVert2In(row + 1, c - 2)
sTerrs.setIf(row + 1, c, WSideMid(st1))
sTerrs.setIf(row, c - 1, WSideMid(st2))
}
}

case class VertInUp(c: Int, leftSide: WSTerr = Sea, rightSide: WSTerr = Sea) extends VRowElem
{
def run(row: Int): Unit =
{ corners.setVert3In(row + 1, c, 3)
sTerrs.setIf(row, c - 1, WSideMid(leftSide))
sTerrs.setIf(row, c + 1, WSideMid(rightSide))
}
}

val rowDatas: RArr[RowBase]

Expand All @@ -47,9 +131,9 @@ abstract class WTerrSetter(gridIn: HGrid, val terrs: HCenLayer[WTile], val sTerr
multi.foreach { tile =>
if (c > grid.rowRightCenC(row)) excep("Too many tiles for row.")
terrs.set(row, c, tile)
tile match {
case ct: Coastal => {
corners.setNCornersIn(row, c, ct.numIndentedVerts, ct.indentStartIndex, 7)
tile match
{ case ct: Coastal =>
{ corners.setNCornersIn(row, c, ct.numIndentedVerts, ct.indentStartIndex, 7)
ct.indentedSideIndexForeach { i =>
val side = HCen(row, c).side(i)
sTerrs(side) match {
Expand All @@ -68,75 +152,6 @@ abstract class WTerrSetter(gridIn: HGrid, val terrs: HCenLayer[WTile], val sTerr
}
}

case data: VRow =>
{ val row = data.row
data.edits.foreach{

case MouthUp (c, st) =>
{ corners.setMouth3(row + 1, c)
sTerrs.set(row - 1, c, WSideMid(st))
}

case MouthUR(c, st) => {
corners.setMouth4(row + 1, c + 2)
sTerrs.set(row, c - 1, WSideMid(st))
}

case MouthDR(c, st) =>
{ corners.setMouth5(row - 1, c + 2)
sTerrs.set(row, c - 1, WSideMid(st))
}

case MouthDn(c, st) =>
{ corners.setMouth0(row - 1, c)
sTerrs.set(row + 1, c, WSideMid(st))
}

case MouthDL(c, st) =>
{ corners.setMouth1(row - 1, c - 2)
sTerrs.set(row, c + 1, WSideMid(st))
}

case MouthUL(c, st) => {
corners.setMouth2(row + 1, c - 2)
sTerrs.set(row, c + 2, WSideMid(st))
}

case VertInUR(c, st1, st2) =>
{ corners.setVert4In(row + 1, c + 2)
sTerrs.setIf(row + 1, c, WSideMid(st1))
sTerrs.setIf(row, c + 1, WSideMid(st2))
}

case VertInDR(c, st1, st2) =>
{ corners.setVert5In(row - 1, c + 2)
sTerrs.set(row, c + 1, WSideMid(st1))
sTerrs.set(row - 1, c, WSideMid(st2))
}

case VertInDn(c, st1, st2) =>
{ corners.setVert0In(row - 1, c, 3)
sTerrs.setIf(row, c - 1, WSideMid(st1))
sTerrs.setIf(row, c + 1, WSideMid(st2))
}

case VertInDL(c, st) =>
{ corners.setVert1In(row - 1, c - 2)
sTerrs.set(row - 1, c, WSideMid(st))
}

case VertInUL(c, st1, st2) => {
corners.setVert2In(row + 1, c - 2)
sTerrs.setIf(row + 1, c, WSideMid(st1))
sTerrs.setIf(row, c - 1, WSideMid(st2))
}

case VertInUp(c, st1, st2) =>
{ corners.setVert3In(row + 1, c, 3)
sTerrs.setIf(row, c - 1, WSideMid(st1))
sTerrs.setIf(row, c + 1, WSideMid(st2))
}
}
}
case data: VRow => data.edits.foreach(_.run(data.row))
}
}

0 comments on commit db97d4b

Please sign in to comment.