@@ -874,44 +874,46 @@ Dictionary TerrainGen::generate(
874
874
// Water Corners
875
875
// -------------------------//
876
876
877
+ // TODO : Water Corner's Logic is incorrect
878
+
877
879
// Water's Corner WEST
878
880
// +----+----+ +---+---+
879
- // | n1 | n2 | | 0 | 0 |
881
+ // | n1 | n2 | | 0 | 1 |
880
882
// +----+----+ +---+---+
881
- // | n3 | n4 | | 0 | 1 |
883
+ // | n3 | n4 | | 1 | 1 |
882
884
// +----+----+ +---+---+
883
885
//
884
- if (n1 == 0 && n2 == 0 && n3 == 0 && n4 > 0 ) {
886
+ if (n1 == 0 && n2 > 0 && n3 > 0 && n4 > 0 ) {
885
887
tileMap[x][y] = WATER_CORNER;
886
888
}
887
889
// Water's Corner EAST
888
890
// +----+----+ +---+---+
889
- // | n1 | n2 | | 1 | 0 |
891
+ // | n1 | n2 | | 1 | 1 |
890
892
// +----+----+ +---+---+
891
- // | n3 | n4 | | 0 | 0 |
893
+ // | n3 | n4 | | 1 | 0 |
892
894
// +----+----+ +---+---+
893
895
//
894
- else if (n1 > 0 && n2 == 0 && n3 == 0 && n4 == 0 ) {
896
+ else if (n4 == 0 && n1 > 0 && n2 > 0 && n3 > 0 ) {
895
897
tileMap[x][y] = WATER_CORNER;
896
898
}
897
899
// Water's Corner SOUTH
898
900
// +----+----+ +---+---+
899
- // | n1 | n2 | | 0 | 1 |
901
+ // | n1 | n2 | | 1 | 1 |
900
902
// +----+----+ +---+---+
901
- // | n3 | n4 | | 0 | 0 |
903
+ // | n3 | n4 | | 0 | 1 |
902
904
// +----+----+ +---+---+
903
905
//
904
- else if (n1 == 0 && n2 > 0 && n3 == 0 && n4 == 0 ) {
906
+ else if (n3 == 0 && n1 > 0 && n2 > 0 && n4 > 0 ) {
905
907
tileMap[x][y] = WATER_CORNER;
906
908
}
907
909
// Water's Corner NORTH
908
910
// +----+----+ +---+---+
909
- // | n1 | n2 | | 0 | 0 |
911
+ // | n1 | n2 | | 1 | 0 |
910
912
// +----+----+ +---+---+
911
- // | n3 | n4 | | 1 | 0 |
913
+ // | n3 | n4 | | 1 | 1 |
912
914
// +----+----+ +---+---+
913
915
//
914
- else if (n1 == 0 && n2 == 0 && n3 > 0 && n4 == 0 ) {
916
+ else if (n2 == 0 && n1 > 0 && n3 > 0 && n4 > 0 ) {
915
917
tileMap[x][y] = WATER_CORNER;
916
918
}
917
919
@@ -966,9 +968,9 @@ Dictionary TerrainGen::generate(
966
968
}
967
969
// Corner SOUTH
968
970
// +----+----+ +---+---+
969
- // | n1 | n2 | | 0 | 0 |
971
+ // | n1 | n2 | | 1 | 1 |
970
972
// +----+----+ +---+---+
971
- // | n3 | n4 | | 1 | 0 |
973
+ // | n3 | n4 | | 2 | 1 |
972
974
// +----+----+ +---+---+
973
975
//
974
976
else if (n1 > 0 && n2 > 0 && n3 > 0 && n4 > 0 && n3 > n1 && n3 > n2 && n3 > n4) {
@@ -1270,13 +1272,14 @@ Dictionary TerrainGen::generate(
1270
1272
1271
1273
// Decide which tile types count as "edge" for the current corner type
1272
1274
auto is_edge_for_corner = [&](TileType t) -> bool {
1273
- if (tile_id == WATER_CORNER) {
1274
- return t == WATER_EDGE;
1275
- } else if (tile_id == CLIFF_CORNER) {
1276
- return t == CLIFF;
1277
- } else {
1278
- return t == RAMP;
1279
- }
1275
+ return t == CLIFF || t == RAMP || t == WATER_EDGE;
1276
+ // if (tile_id == WATER_CORNER) {
1277
+ // return t == WATER_EDGE;
1278
+ // } else if (tile_id == CLIFF_CORNER) {
1279
+ // return t == CLIFF;
1280
+ // } else {
1281
+ // return t == RAMP;
1282
+ // }
1280
1283
};
1281
1284
1282
1285
// Convenience flags for cardinal neighbors
@@ -1304,65 +1307,48 @@ Dictionary TerrainGen::generate(
1304
1307
// Corner's Higher Elevation Point : South West / m6
1305
1308
// NE (m3), SE (m8), SW (m6), NW (m1)
1306
1309
// if -1, not ground tile
1307
- vector<int > dElevation = { -1 , -1 , -1 , -1 };
1308
- if (neGround) {
1309
- dElevation[0 ] = neHeight;
1310
- }
1311
-
1312
- if (seGround) {
1313
- dElevation[1 ] = seHeight;
1314
- }
1315
-
1316
- if (swGround) {
1317
- dElevation[2 ] = swHeight;
1318
- }
1319
-
1320
- if (nwGround) {
1321
- dElevation[3 ] = nwHeight;
1322
- }
1323
-
1324
- if (!(nEdge && eEdge)) { // m2 + m5 | NOT m3
1325
- dElevation[0 ] = -1 ;
1326
- }
1327
-
1328
- if (!(sEdge && eEdge)) { // m5 + m7 | NOT m8
1329
- dElevation[1 ] = -1 ;
1330
- }
1310
+ //
1311
+ // Corner Edge Tiles Start pointing (-x,+z) SW
1312
+ // No clue why different tiles are requiring different ROT/Orientation values
1331
1313
1332
- if (!(sEdge && wEdge)) { // m4 + m7 | NOT m6
1333
- dElevation[2 ] = -1 ;
1314
+ // North East
1315
+ if (nEdge && eEdge && !sEdge && !wEdge) { // m2 + m5 | NOT m3
1316
+ if (tile_id == CLIFF_CORNER)
1317
+ rotation_val = WEST;
1318
+ if (tile_id == RAMP_CORNER)
1319
+ rotation_val = EAST;
1320
+ if (tile_id == WATER_CORNER)
1321
+ rotation_val = EAST;
1334
1322
}
1335
1323
1336
- if (!(nEdge && wEdge)) { // m4 + m2 | NOT m1
1337
- dElevation[3 ] = -1 ;
1324
+ // South East
1325
+ if (sEdge && eEdge && !nEdge && !wEdge) { // m5 + m7 | NOT m8
1326
+ if (tile_id == CLIFF_CORNER)
1327
+ rotation_val = NORTH;
1328
+ if (tile_id == RAMP_CORNER)
1329
+ rotation_val = SOUTH;
1330
+ if (tile_id == WATER_CORNER)
1331
+ rotation_val = SOUTH;
1338
1332
}
1339
1333
1340
- int maxElevation = dElevation[ 0 ];
1341
- int dEleIndex = 0 ;
1342
-
1343
- for ( size_t i = 1 ; i < dElevation. size (); ++i) {
1344
- if (dElevation[i] > maxElevation) {
1345
- maxElevation = dElevation[i] ;
1346
- dEleIndex = static_cast < int >(i);
1347
- }
1334
+ // South West
1335
+ if ( sEdge && wEdge && !nEdge && !eEdge) { // m4 + m7 | NOT m6
1336
+ if (tile_id == CLIFF_CORNER)
1337
+ rotation_val = EAST;
1338
+ if (tile_id == RAMP_CORNER)
1339
+ rotation_val = WEST ;
1340
+ if (tile_id == WATER_CORNER)
1341
+ rotation_val = WEST;
1348
1342
}
1349
1343
1350
- switch (dEleIndex) {
1351
- case 0 :
1352
- rotation_val = WEST;
1353
- break ;
1354
- case 1 :
1355
- rotation_val = NORTH;
1356
- break ;
1357
- case 2 :
1358
- rotation_val = EAST;
1359
- break ;
1360
- case 3 :
1344
+ // North West
1345
+ if (nEdge && wEdge && !sEdge && !eEdge) { // m4 + m2 | NOT m1
1346
+ if (tile_id == CLIFF_CORNER)
1361
1347
rotation_val = SOUTH;
1362
- break ;
1363
- default :
1348
+ if (tile_id == RAMP_CORNER)
1349
+ rotation_val = NORTH;
1350
+ if (tile_id == WATER_CORNER)
1364
1351
rotation_val = NORTH;
1365
- break ;
1366
1352
}
1367
1353
}
1368
1354
@@ -1407,6 +1393,9 @@ Dictionary TerrainGen::generate(
1407
1393
// | n3 | n4 | | r2 | g2 | | g2 | c2 | | c2 | g1 | | g1 | r2 | | r2 | c2 |
1408
1394
// +----+----+ +----+----+ +----+----+ +----+----+ +----+----+ +----+----+
1409
1395
//
1396
+
1397
+ // EDGE CASE : Ramps surround a Ramp tile
1398
+ // Two higher ramps and two lower ramps with a ramp tile in the center
1410
1399
}
1411
1400
}
1412
1401
0 commit comments