private ulong GetTileMappingIndex(Map map, CellTypeMap cellTypeMap, Vector2Int tileXY) { ulong x = (ulong)tileXY.x; ulong y = (ulong)tileXY.y; // Get default mapping index ulong mappingIndex = map.GetTileMappingIndex(x, y); // If no cell type map, return the map index. This will happen if there isn't any .opm mission file. if (cellTypeMap == null) { return(mappingIndex); } // Get TerrainType for mapping index, if available TerrainType terrainType; if (!GetTerrainTypeForMappingIndex(map, mappingIndex, out terrainType)) { return(mappingIndex); } // Predict starting CellType and remap to terrain type int wallTubeIndex; switch (TileMapData.GetWallTubeIndexForTile(cellTypeMap, tileXY, out wallTubeIndex)) { case CellType.DozedArea: mappingIndex = terrainType.bulldozedTileMappingIndex; break; case CellType.NormalWall: mappingIndex = terrainType.wallTileMappingIndexes[2 * 16 + wallTubeIndex]; break; case CellType.LavaWall: mappingIndex = terrainType.wallTileMappingIndexes[wallTubeIndex]; break; case CellType.MicrobeWall: mappingIndex = terrainType.wallTileMappingIndexes[1 * 16 + wallTubeIndex]; break; case CellType.Tube0: case CellType.Tube1: case CellType.Tube2: case CellType.Tube3: case CellType.Tube4: case CellType.Tube5: mappingIndex = terrainType.tubeTileMappingIndexes[wallTubeIndex]; break; } return(mappingIndex); }
private int GetTileMappingIndex(CellTypeMap cellTypeMap, Vector2Int tileXY) { int x = tileXY.x; int y = tileXY.y; // Get default mapping index int mappingIndex = UserData.current.map.GetTileMappingIndex(x, y); // Get TerrainType for mapping index, if available OP2UtilityDotNet.OP2Map.TerrainType terrainType; if (!GetTerrainTypeForMappingIndex(mappingIndex, out terrainType)) { return(mappingIndex); } // Predict starting CellType and remap to terrain type int wallTubeIndex; switch (TileMapData.GetWallTubeIndexForTile(cellTypeMap, tileXY, out wallTubeIndex)) { case OP2UtilityDotNet.OP2Map.CellType.DozedArea: mappingIndex = terrainType.bulldozedTileMappingIndex; break; case OP2UtilityDotNet.OP2Map.CellType.NormalWall: mappingIndex = terrainType.wallTileMappingIndexes[2, wallTubeIndex]; break; case OP2UtilityDotNet.OP2Map.CellType.LavaWall: mappingIndex = terrainType.wallTileMappingIndexes[0, wallTubeIndex]; break; case OP2UtilityDotNet.OP2Map.CellType.MicrobeWall: mappingIndex = terrainType.wallTileMappingIndexes[1, wallTubeIndex]; break; case OP2UtilityDotNet.OP2Map.CellType.Tube0: case OP2UtilityDotNet.OP2Map.CellType.Tube1: case OP2UtilityDotNet.OP2Map.CellType.Tube2: case OP2UtilityDotNet.OP2Map.CellType.Tube3: case OP2UtilityDotNet.OP2Map.CellType.Tube4: case OP2UtilityDotNet.OP2Map.CellType.Tube5: mappingIndex = terrainType.tubeTileMappingIndexes[wallTubeIndex]; break; } return(mappingIndex); }