Advertisement
Guest User

Untitled

a guest
Nov 19th, 2019
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 8.58 KB | None | 0 0
  1.         private bool ModifyNeighbourCorner(
  2.             int sourceCornerToCheck,
  3.             int neighbourCornerToCheck,
  4.             WangCornerMapping sourceTile,
  5.             ref WangCornerMapping neighbourTile)
  6.         {
  7.             var sourceTerrainType = GetTerrainTypeByMask(sourceTile, sourceCornerToCheck);
  8.             var neighbourTerrainType = GetTerrainTypeByMask(neighbourTile, neighbourCornerToCheck);
  9.  
  10.             if (sourceTerrainType.GetIdentity() == neighbourTerrainType.GetIdentity())
  11.                 return false;
  12.  
  13.             bool shouldFillCorner;
  14.  
  15.             if (neighbourTile.MainTerrainType.GetIdentity() == sourceTerrainType.GetIdentity())
  16.             {
  17.                 shouldFillCorner = true;
  18.             }
  19.             else if (neighbourTile.OutTerrainType.GetIdentity() == sourceTerrainType.GetIdentity())
  20.             {
  21.                 shouldFillCorner = false;
  22.             }
  23.             else
  24.             {
  25.                 switch (sourceTerrainType)
  26.                 {
  27.                     case TerrainType.Land:
  28.                     {
  29.                         switch (neighbourTile.MainTerrainType)
  30.                         {
  31.                             case TerrainType.Flowers:
  32.                                 neighbourTile = WangCornerMapping
  33.                                     .WholeTileFromTerrainTypes(TerrainType.Grass, TerrainType.Land);
  34.                                 break;
  35.                             case TerrainType.HighRock:
  36.                                 neighbourTile = WangCornerMapping
  37.                                     .WholeTileFromTerrainTypes(TerrainType.Rocks, TerrainType.Land);
  38.                                 break;
  39.                             default:
  40.                                 neighbourTile = WangCornerMapping
  41.                                     .WholeTileFromTerrainTypes(neighbourTile.MainTerrainType, TerrainType.Land);
  42.                                 break;
  43.                         }
  44.                         shouldFillCorner = false;
  45.                         break;
  46.                     }
  47.  
  48.                     case TerrainType.Rocks when neighbourTile.MainTerrainType == TerrainType.Plateau &&
  49.                                                 neighbourTile.WeightMask - sourceCornerToCheck != WangCornerMapping.TL &&
  50.                                                 neighbourTile.WeightMask - sourceCornerToCheck != WangCornerMapping.TR &&
  51.                                                 neighbourTile.WeightMask - sourceCornerToCheck != WangCornerMapping.BL &&
  52.                                                 neighbourTile.WeightMask - sourceCornerToCheck != WangCornerMapping.BR:
  53.                         shouldFillCorner = false;
  54.                         neighbourTile = WangCornerMapping
  55.                             .WholeTileFromTerrainTypes(TerrainType.Plateau, TerrainType.Rocks);
  56.                         break;
  57.                     case TerrainType.Rocks:
  58.                         shouldFillCorner = true;
  59.                         neighbourTile = WangCornerMapping
  60.                             .EmptyTileFromTerrainTypes(sourceTerrainType, TerrainType.Land);
  61.                         break;
  62.                     case TerrainType.Savannah when neighbourTile.MainTerrainType == TerrainType.Flowers &&
  63.                                                    neighbourTile.WeightMask - sourceCornerToCheck != WangCornerMapping.TL &&
  64.                                                    neighbourTile.WeightMask - sourceCornerToCheck != WangCornerMapping.TR &&
  65.                                                    neighbourTile.WeightMask - sourceCornerToCheck != WangCornerMapping.BL &&
  66.                                                    neighbourTile.WeightMask - sourceCornerToCheck != WangCornerMapping.BR:
  67.                         shouldFillCorner = false;
  68.                         neighbourTile = WangCornerMapping
  69.                             .WholeTileFromTerrainTypes(TerrainType.Flowers, TerrainType.Savannah);
  70.                         break;
  71.                     case TerrainType.Savannah:
  72.                         shouldFillCorner = true;
  73.                         neighbourTile = WangCornerMapping
  74.                             .EmptyTileFromTerrainTypes(TerrainType.Savannah, TerrainType.Land);
  75.                         break;
  76.                     case TerrainType.HighRock:
  77.                         shouldFillCorner = true;
  78.                         neighbourTile = WangCornerMapping
  79.                             .EmptyTileFromTerrainTypes(TerrainType.HighRock, TerrainType.Rocks);
  80.                         break;
  81.                    
  82.                     case TerrainType.Flowers:
  83.                     {
  84.                         shouldFillCorner = true;
  85.                         switch (neighbourTile.MainTerrainType)
  86.                         {
  87.                             case TerrainType.Savannah when neighbourTile.WeightMask - sourceCornerToCheck != WangCornerMapping.TL &&
  88.                                                            neighbourTile.WeightMask - sourceCornerToCheck != WangCornerMapping.TR &&
  89.                                                            neighbourTile.WeightMask - sourceCornerToCheck != WangCornerMapping.BL &&
  90.                                                            neighbourTile.WeightMask - sourceCornerToCheck != WangCornerMapping.BR:
  91.                                 neighbourTile = WangCornerMapping
  92.                                     .EmptyTileFromTerrainTypes(TerrainType.Flowers, TerrainType.Savannah);
  93.                                 break;
  94.                             default:
  95.                                 neighbourTile = WangCornerMapping
  96.                                     .EmptyTileFromTerrainTypes(TerrainType.Grass, TerrainType.Land);
  97.                                 break;
  98.                         }
  99.                         break;
  100.                     }
  101.  
  102.                     case TerrainType.Plateau:
  103.                     {
  104.                         if (neighbourTile.MainTerrainType == TerrainType.Rocks &&
  105.                             neighbourTile.WeightMask - sourceCornerToCheck != WangCornerMapping.TL &&
  106.                             neighbourTile.WeightMask - sourceCornerToCheck != WangCornerMapping.TR &&
  107.                             neighbourTile.WeightMask - sourceCornerToCheck != WangCornerMapping.BL &&
  108.                             neighbourTile.WeightMask - sourceCornerToCheck != WangCornerMapping.BR)
  109.                         {
  110.                             neighbourTile = WangCornerMapping
  111.                                 .EmptyTileFromTerrainTypes(TerrainType.Plateau, TerrainType.Rocks);
  112.                         }
  113.                         else
  114.                         {
  115.                             neighbourTile = WangCornerMapping
  116.                                 .EmptyTileFromTerrainTypes(TerrainType.Plateau, TerrainType.Land);
  117.                         }
  118.                         shouldFillCorner = true;
  119.                         break;
  120.                     }
  121.  
  122.                     default:
  123.                         shouldFillCorner = true;
  124.                         neighbourTile = WangCornerMapping
  125.                             .EmptyTileFromTerrainTypes(sourceTerrainType, TerrainType.Land);
  126.                         break;
  127.                 }
  128.             }
  129.  
  130.             if (shouldFillCorner)
  131.             {
  132.                 if (neighbourCornerToCheck == WangCornerMapping.BL)
  133.                     neighbourTile = neighbourTile.WithBottomLeftCornerFilled();
  134.                 else if (neighbourCornerToCheck == WangCornerMapping.BR)
  135.                     neighbourTile = neighbourTile.WithBottomRightCornerFilled();
  136.                 else if (neighbourCornerToCheck == WangCornerMapping.TL)
  137.                     neighbourTile = neighbourTile.WithTopLeftCornerFilled();
  138.                 else if (neighbourCornerToCheck == WangCornerMapping.TR)
  139.                     neighbourTile = neighbourTile.WithTopRightCornerFilled();
  140.             }
  141.             else
  142.             {
  143.                 if (neighbourCornerToCheck == WangCornerMapping.BL)
  144.                     neighbourTile = neighbourTile.WithBottomLeftCornerCleared();
  145.                 else if (neighbourCornerToCheck == WangCornerMapping.BR)
  146.                     neighbourTile = neighbourTile.WithBottomRightCornerCleared();
  147.                 else if (neighbourCornerToCheck == WangCornerMapping.TL)
  148.                     neighbourTile = neighbourTile.WithTopLeftCornerCleared();
  149.                 else if (neighbourCornerToCheck == WangCornerMapping.TR)
  150.                     neighbourTile = neighbourTile.WithTopRightCornerCleared();
  151.             }
  152.            
  153.             return true;
  154.         }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement