Loading

Revision differences

Old revision #pdbjhwad9New revision #ps9wzxlin
19    int delta = TileOffsByDiagDir(dir_rot);  19    int delta = TileOffsByDiagDir(dir_rot);  
20  20  
21    for (int m = -1; m <= 1; m += 2) {  21    for (int m = -1; m <= 1; m += 2) {  
22        if (IsValidTile(tile + m * delta_mid)) {  22        TileIndex t_dm = tile + m * delta_mid;
23            if (DistanceFromEdgeDir(tile + m * delta_mid, dir) == 0 || DistanceFromEdgeDir(tile + m * delta_mid, ReverseDiagDir(dir)) == 0) {  23        if (IsValidTile(t_dm)) {
   24            if (DistanceFromEdgeDir(t_dm, dir) == 0 || DistanceFromEdgeDir(t_dm, ReverseDiagDir(dir)) == 0) {
24                return false;  25                return false;  
25            }  26            }  
26  27  
27            if (IsValidTile(tile + m * 2 * delta_mid)) {  28            for (int d = -1; d <= 1; d += 2) {
28                if (!IsTileFlat(tile + m * 2 * delta_mid)) {  29                if (IsValidTile(t_dm + d * delta)) {
   30                    if (!IsTileFlat(t_dm + d * delta) &&
   31                            (GetInclinedSlopeDirection(GetTileSlope(t_dm + d * delta)) == dir_rot ||
   32                            GetInclinedSlopeDirection(GetTileSlope(t_dm + d * delta)) == ReverseDiagDir(dir_rot)) &&
   33                            FlowsLock(t_dm + d * delta)) {
   34                        return false;
   35                    }
   36
   37                    if (IsValidTile(t_dm + d * 2 * delta)) {
   38                        if (!IsTileFlat(t_dm + d * 2 * delta) &&
   39                            (GetInclinedSlopeDirection(GetTileSlope(t_dm + d * 2 * delta)) == dir_rot ||
   40                                GetInclinedSlopeDirection(GetTileSlope(t_dm + d * 2 * delta)) == ReverseDiagDir(dir_rot)) &&
   41                            FlowsLock(t_dm + d * 2 * delta)) {
   42                            return false;
   43                        }
   44                    }
   45                }
   46            }
   47
   48            TileIndex t_2dm = t_dm + m * delta_mid;
   49            if (IsValidTile(t_2dm)) {
   50                if (!IsTileFlat(t_2dm)) {
29                    return false;  51                    return false;  
30                }  52                }  
31  53  
32                if (IsValidTile(tile + m * 3 * delta_mid)) {  32                for (int d = -1; d <= 1; d += 2) {
33                    if ((GetInclinedSlopeDirection(GetTileSlope(tile + m * 3 * delta_mid)) == dir ||  33                    if (IsValidTile(t_2dm + d * delta)) {
34                            GetInclinedSlopeDirection(GetTileSlope(tile + m * 3 * delta_mid)) == ReverseDiagDir(dir)) &&  34                        if (IsTileFlat(t_dm + d * delta) && !IsTileFlat(t_2dm + d * delta)) {
35                            FlowsLock(tile + m * 3 * delta_mid)) {  35                            return false;
36                        return false;  36                        }
37                    }    
38                }    
39            }    
40        }    
41  59  
42        for (int d = -1; d <= 1; d += 2) {  42                        if (!IsTileFlat(t_2dm + d * delta) &&
43            if (IsValidTile(tile + m * delta_mid + d * delta)) {  43                                (GetInclinedSlopeDirection(GetTileSlope(t_2dm + d * delta)) == dir_rot ||
44                if (!IsTileFlat(tile + m * delta_mid + d * delta) &&  44                                GetInclinedSlopeDirection(GetTileSlope(t_2dm + d * delta)) == ReverseDiagDir(dir_rot)) &&
45                        (GetInclinedSlopeDirection(GetTileSlope(tile + m * delta_mid + d * delta)) == dir_rot ||  45                                FlowsLock(t_2dm + d * delta)) {
46                        GetInclinedSlopeDirection(GetTileSlope(tile + m * delta_mid + d * delta)) == ReverseDiagDir(dir_rot)) &&  46                            return false;
47                        FlowsLock(tile + m * delta_mid + d * delta)) {  47                        }
48                    return false;    
49                }    
50    
51                if (IsValidTile(tile + m * delta_mid + d * 2 * delta)) {    
52                    if (!IsTileFlat(tile + m * delta_mid + d * 2 * delta) &&    
53                            (GetInclinedSlopeDirection(GetTileSlope(tile + m * delta_mid + d * 2 * delta)) == dir_rot ||    
54                            GetInclinedSlopeDirection(GetTileSlope(tile + m * delta_mid + d * 2 * delta)) == ReverseDiagDir(dir_rot)) &&    
55                            FlowsLock(tile + m * delta_mid + d * 2 * delta)) {    
56                        return false;    
57                    }  66                    }  
58                }  67                }  
59  68  
60                if (IsValidTile(tile + m * 2 * delta_mid + d * delta)) {  69                TileIndex t_3dm = t_2dm + m * delta_mid;
61                    if (IsTileFlat(tile + m * delta_mid + d * delta) && !IsTileFlat(tile + m * 2 * delta_mid + d * delta)) {  70                if (IsValidTile(t_3dm)) {
   71                    if ((GetInclinedSlopeDirection(GetTileSlope(t_3dm)) == dir ||
   72                            GetInclinedSlopeDirection(GetTileSlope(t_3dm)) == ReverseDiagDir(dir)) &&
   73                            FlowsLock(t_3dm)) {
62                        return false;  74                        return false;  
63                    }    
64    
65                    if (!IsTileFlat(tile + m * 2 * delta_mid + d * delta) &&    
66                            (GetInclinedSlopeDirection(GetTileSlope(tile + m * 2 * delta_mid + d * delta)) == dir_rot ||    
67                            GetInclinedSlopeDirection(GetTileSlope(tile + m * 2 * delta_mid + d * delta)) == ReverseDiagDir(dir_rot)) &&    
68                            FlowsLock(tile + m * 2 * delta_mid + d * delta)) {    
69                        return false;    
70                    }    
71    
72                    if (IsValidTile(tile + m * 3 * delta_mid + d * delta)) {    
73                        if ((GetInclinedSlopeDirection(GetTileSlope(tile + m * 3 * delta_mid + d * delta)) == dir ||    
74                                GetInclinedSlopeDirection(GetTileSlope(tile + m * 3 * delta_mid + d * delta)) == ReverseDiagDir(dir)) &&    
75                                FlowsLock(tile + m * 3 * delta_mid + d * delta)) {    
76                            return false;    
77                        }    
78                    }  75                    }  
79                }  76                }  
80            }  77            }