| 1156 | } |
| 1157 | |
| 1158 | void OperMap::LogMap(int xMin, int xMax, int zMin, int zMax, int xs, int xe, int zs, int ze, bool locks) |
| 1159 | { |
| 1160 | #if _ENABLE_CHEATS |
| 1161 | int xsize = (xMax - xMin + 1) * OperItemRange; |
| 1162 | int zsize = (zMax - zMin + 1) * OperItemRange; |
| 1163 | int i, j; |
| 1164 | |
| 1165 | LOG_DEBUG(Script, "Fields: {}..{}, {}..{}", xMax, xMin, zMin, zMax); |
| 1166 | |
| 1167 | Temp<Temp<char>> map(zsize); |
| 1168 | for (i = 0; i < zsize; i++) |
| 1169 | map[i].Realloc(xsize * 2 + 1), memset(map[i], ' ', xsize * 2); |
| 1170 | |
| 1171 | for (i = zMin * OperItemRange; i < (zMax + 1) * OperItemRange; i++) |
| 1172 | { |
| 1173 | for (j = xMin * OperItemRange; j < (xMax + 1) * OperItemRange; j++) |
| 1174 | { |
| 1175 | if (!InRange(toIntFloor(i / OperItemRange), toIntFloor(j / OperItemRange))) |
| 1176 | continue; |
| 1177 | |
| 1178 | OperItem* item = nullptr; |
| 1179 | OperField* fld = nullptr; |
| 1180 | int x0 = j / OperItemRange; |
| 1181 | int z0 = i / OperItemRange; |
| 1182 | for (int k = 0; k < _fields.Size(); k++) |
| 1183 | if (_fields[k]->_x == x0 && _fields[k]->_z == z0) |
| 1184 | { |
| 1185 | fld = _fields[k]; |
| 1186 | x0 = j - x0 * OperItemRange; |
| 1187 | z0 = i - z0 * OperItemRange; |
| 1188 | item = &fld->_items[z0][x0]; |
| 1189 | } |
| 1190 | |
| 1191 | PoseidonAssert(fld && item); |
| 1192 | |
| 1193 | char ch = '?'; |
| 1194 | if (locks && GLOB_LAND->LockingCache()->IsLocked(j, i, false)) |
| 1195 | ch = 'L'; |
| 1196 | else if (!item) |
| 1197 | ch = ' '; |
| 1198 | else |
| 1199 | { |
| 1200 | switch (item->_typeSoldier) |
| 1201 | { |
| 1202 | case OITNormal: |
| 1203 | ch = '.'; |
| 1204 | break; |
| 1205 | case OITAvoidBush: |
| 1206 | ch = 'b'; |
| 1207 | break; |
| 1208 | case OITAvoidTree: |
| 1209 | ch = 't'; |
| 1210 | break; |
| 1211 | case OITAvoid: |
| 1212 | ch = 'x'; |
| 1213 | break; |
| 1214 | case OITWater: |
| 1215 | ch = 'W'; |
no test coverage detected