Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- private bool ModifyNeighbourCorner(
- int sourceCornerToCheck,
- int neighbourCornerToCheck,
- WangCornerMapping sourceTile,
- ref WangCornerMapping neighbourTile)
- {
- var sourceTerrainType = GetTerrainTypeByMask(sourceTile, sourceCornerToCheck);
- var neighbourTerrainType = GetTerrainTypeByMask(neighbourTile, neighbourCornerToCheck);
- if (sourceTerrainType.GetIdentity() == neighbourTerrainType.GetIdentity())
- return false;
- bool shouldFillCorner;
- if (neighbourTile.MainTerrainType.GetIdentity() == sourceTerrainType.GetIdentity())
- {
- shouldFillCorner = true;
- }
- else if (neighbourTile.OutTerrainType.GetIdentity() == sourceTerrainType.GetIdentity())
- {
- shouldFillCorner = false;
- }
- else
- {
- switch (sourceTerrainType)
- {
- case TerrainType.Land:
- {
- switch (neighbourTile.MainTerrainType)
- {
- case TerrainType.Flowers:
- neighbourTile = WangCornerMapping
- .WholeTileFromTerrainTypes(TerrainType.Grass, TerrainType.Land);
- break;
- case TerrainType.HighRock:
- neighbourTile = WangCornerMapping
- .WholeTileFromTerrainTypes(TerrainType.Rocks, TerrainType.Land);
- break;
- default:
- neighbourTile = WangCornerMapping
- .WholeTileFromTerrainTypes(neighbourTile.MainTerrainType, TerrainType.Land);
- break;
- }
- shouldFillCorner = false;
- break;
- }
- case TerrainType.Rocks when neighbourTile.MainTerrainType == TerrainType.Plateau &&
- neighbourTile.WeightMask - sourceCornerToCheck != WangCornerMapping.TL &&
- neighbourTile.WeightMask - sourceCornerToCheck != WangCornerMapping.TR &&
- neighbourTile.WeightMask - sourceCornerToCheck != WangCornerMapping.BL &&
- neighbourTile.WeightMask - sourceCornerToCheck != WangCornerMapping.BR:
- shouldFillCorner = false;
- neighbourTile = WangCornerMapping
- .WholeTileFromTerrainTypes(TerrainType.Plateau, TerrainType.Rocks);
- break;
- case TerrainType.Rocks:
- shouldFillCorner = true;
- neighbourTile = WangCornerMapping
- .EmptyTileFromTerrainTypes(sourceTerrainType, TerrainType.Land);
- break;
- case TerrainType.Savannah when neighbourTile.MainTerrainType == TerrainType.Flowers &&
- neighbourTile.WeightMask - sourceCornerToCheck != WangCornerMapping.TL &&
- neighbourTile.WeightMask - sourceCornerToCheck != WangCornerMapping.TR &&
- neighbourTile.WeightMask - sourceCornerToCheck != WangCornerMapping.BL &&
- neighbourTile.WeightMask - sourceCornerToCheck != WangCornerMapping.BR:
- shouldFillCorner = false;
- neighbourTile = WangCornerMapping
- .WholeTileFromTerrainTypes(TerrainType.Flowers, TerrainType.Savannah);
- break;
- case TerrainType.Savannah:
- shouldFillCorner = true;
- neighbourTile = WangCornerMapping
- .EmptyTileFromTerrainTypes(TerrainType.Savannah, TerrainType.Land);
- break;
- case TerrainType.HighRock:
- shouldFillCorner = true;
- neighbourTile = WangCornerMapping
- .EmptyTileFromTerrainTypes(TerrainType.HighRock, TerrainType.Rocks);
- break;
- case TerrainType.Flowers:
- {
- shouldFillCorner = true;
- switch (neighbourTile.MainTerrainType)
- {
- case TerrainType.Savannah when neighbourTile.WeightMask - sourceCornerToCheck != WangCornerMapping.TL &&
- neighbourTile.WeightMask - sourceCornerToCheck != WangCornerMapping.TR &&
- neighbourTile.WeightMask - sourceCornerToCheck != WangCornerMapping.BL &&
- neighbourTile.WeightMask - sourceCornerToCheck != WangCornerMapping.BR:
- neighbourTile = WangCornerMapping
- .EmptyTileFromTerrainTypes(TerrainType.Flowers, TerrainType.Savannah);
- break;
- default:
- neighbourTile = WangCornerMapping
- .EmptyTileFromTerrainTypes(TerrainType.Grass, TerrainType.Land);
- break;
- }
- break;
- }
- case TerrainType.Plateau:
- {
- if (neighbourTile.MainTerrainType == TerrainType.Rocks &&
- neighbourTile.WeightMask - sourceCornerToCheck != WangCornerMapping.TL &&
- neighbourTile.WeightMask - sourceCornerToCheck != WangCornerMapping.TR &&
- neighbourTile.WeightMask - sourceCornerToCheck != WangCornerMapping.BL &&
- neighbourTile.WeightMask - sourceCornerToCheck != WangCornerMapping.BR)
- {
- neighbourTile = WangCornerMapping
- .EmptyTileFromTerrainTypes(TerrainType.Plateau, TerrainType.Rocks);
- }
- else
- {
- neighbourTile = WangCornerMapping
- .EmptyTileFromTerrainTypes(TerrainType.Plateau, TerrainType.Land);
- }
- shouldFillCorner = true;
- break;
- }
- default:
- shouldFillCorner = true;
- neighbourTile = WangCornerMapping
- .EmptyTileFromTerrainTypes(sourceTerrainType, TerrainType.Land);
- break;
- }
- }
- if (shouldFillCorner)
- {
- if (neighbourCornerToCheck == WangCornerMapping.BL)
- neighbourTile = neighbourTile.WithBottomLeftCornerFilled();
- else if (neighbourCornerToCheck == WangCornerMapping.BR)
- neighbourTile = neighbourTile.WithBottomRightCornerFilled();
- else if (neighbourCornerToCheck == WangCornerMapping.TL)
- neighbourTile = neighbourTile.WithTopLeftCornerFilled();
- else if (neighbourCornerToCheck == WangCornerMapping.TR)
- neighbourTile = neighbourTile.WithTopRightCornerFilled();
- }
- else
- {
- if (neighbourCornerToCheck == WangCornerMapping.BL)
- neighbourTile = neighbourTile.WithBottomLeftCornerCleared();
- else if (neighbourCornerToCheck == WangCornerMapping.BR)
- neighbourTile = neighbourTile.WithBottomRightCornerCleared();
- else if (neighbourCornerToCheck == WangCornerMapping.TL)
- neighbourTile = neighbourTile.WithTopLeftCornerCleared();
- else if (neighbourCornerToCheck == WangCornerMapping.TR)
- neighbourTile = neighbourTile.WithTopRightCornerCleared();
- }
- return true;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement