示例#1
0
 public void DownhillFlowIsCorrect()
 {
     Tile[,] tileArray = world.getTileArray();
     for (int x = 0; x < WORLDX; x++)
     {
         for (int z = 0; z < WORLDZ; z++)
         {
             Direction.CardinalDirections direction = tileArray[x, z].rivers.flowDirection;
             Coordinates myPosition = new Coordinates(x, z);
             if (!direction.Equals(Direction.CardinalDirections.none))
             {
                 Coordinates downhill = myPosition.findCoordinatesInCardinalDirection(direction);
                 Assert.Less(tileArray[downhill.x, downhill.z].terrain.elevation, tileArray[x, z].terrain.elevation, "Cell: " + myPosition + " - downhill: " + downhill);
             }
             else
             {
                 List <Direction.CardinalDirections> around = myPosition.getCardinalDirectionsAround();
                 foreach (Direction.CardinalDirections dir in around)
                 {
                     Coordinates coor = myPosition.findCoordinatesInCardinalDirection(dir);
                     Assert.LessOrEqual(tileArray[x, z].terrain.elevation, tileArray[coor.x, coor.z].terrain.elevation, "Cell: " + myPosition + " - downhill: " + dir);
                 }
             }
         }
     }
 }
示例#2
0
        private Direction.CardinalDirections[,] calculateDownStreams(double[,] elevations, out double[,] flowRates)
        {
            Direction.CardinalDirections[,] downstreams = new Direction.CardinalDirections[this.x, this.z];
            flowRates = new double[this.x, this.z];
            for (int x = 0; x < this.x; x++)
            {
                for (int z = 0; z < this.z; z++)
                {
                    Coordinates myPosition = new Coordinates(x, z);
                    List <Direction.CardinalDirections> directionsAround = myPosition.getCardinalDirectionsAround();
                    double lowest = elevations[x, z];
                    Direction.CardinalDirections flowTo = Direction.CardinalDirections.none;
                    foreach (Direction.CardinalDirections direction in directionsAround)
                    {
                        Coordinates coor = myPosition.findCoordinatesInCardinalDirection(direction);
                        if (elevations[coor.x, coor.z] < lowest)
                        {
                            lowest = elevations[coor.x, coor.z];
                            flowTo = direction;
                        }
                    }
                    downstreams[x, z] = flowTo;
                    flowRates[x, z]   = Math.Round((elevations[x, z] - lowest) * FLOW_RATE_MULT, ROUND_TO);
                }
            }

            return(downstreams);
        }
示例#3
0
        public Coordinates findCoordinatesInCardinalDirection(Direction.CardinalDirections direction)
        {
            switch (direction)
            {
            case Direction.CardinalDirections.up:
                return(new Coordinates(x, z - 1));

            case Direction.CardinalDirections.down:
                return(new Coordinates(x, z + 1));

            case Direction.CardinalDirections.left:
                return(new Coordinates(x - 1, z));

            case Direction.CardinalDirections.right:
                return(new Coordinates(x + 1, z));
            }
            throw new Exception("Invalid Direction supplied!");
        }
示例#4
0
 public Rivers(Direction.CardinalDirections flowDirection, List <Direction.CardinalDirections> upstreamDirections, double flowRate)
 {
     this.flowDirection      = flowDirection;
     this.upstreamDirections = upstreamDirections;
     this.flowRate           = flowRate;
 }