| 345 | } |
| 346 | |
| 347 | bool AdaptReplaceableAreas(const float aaaGameAreas[2][2][2], const float aaaVisibleAreas[2][2][2], const CMapObject aObs[2], float aaaReplaceableAreas[2][2][2]) |
| 348 | { |
| 349 | float aDistance[2], aScreenPos[2]; |
| 350 | GetGameAreaDistance(aaaGameAreas, aObs, aaaVisibleAreas, aDistance); |
| 351 | GetSignificantScreenPos(aObs[0], aaaVisibleAreas[0], aaaReplaceableAreas[0], aScreenPos); |
| 352 | |
| 353 | for(int i = 0; i < 2; i++) |
| 354 | { |
| 355 | float aDestLine[2], aSourceLine[2], aVisibleLine[2]; |
| 356 | |
| 357 | aDestLine[0] = aObs[1].m_aaBaseArea[i][0] + (aScreenPos[i] + aDistance[i]) * aObs[1].m_aSpeed[i]; |
| 358 | aDestLine[1] = aDestLine[0] + (aObs[1].m_aaBaseArea[i][1] - aObs[1].m_aaBaseArea[i][0]); |
| 359 | |
| 360 | if(!GetLineIntersection(aDestLine, aaaVisibleAreas[1][i], aVisibleLine)) |
| 361 | return false; |
| 362 | |
| 363 | aSourceLine[0] = aaaVisibleAreas[0][i][0] + aDistance[i] - aaaReplaceableAreas[0][i][0]; |
| 364 | aSourceLine[1] = aaaVisibleAreas[0][i][1] + aDistance[i] + aaaReplaceableAreas[0][i][1] - aaaReplaceableAreas[0][i][0]; |
| 365 | |
| 366 | if(!GetLineIntersection(aSourceLine, aVisibleLine, aVisibleLine)) |
| 367 | return false; |
| 368 | |
| 369 | aaaReplaceableAreas[0][i][0] = aVisibleLine[0] - aSourceLine[0]; |
| 370 | aaaReplaceableAreas[1][i][0] = aVisibleLine[0] - aDestLine[0]; |
| 371 | } |
| 372 | |
| 373 | return true; |
| 374 | } |
| 375 | |
| 376 | void ReplaceAreaQuads(CDataFileReader aInputMaps[2], const float aaaGameAreas[][2][2], const CMapItemGroup *apLayerGroups[2], CMapItemLayer *apItem[2], const int ItemNumber) |
| 377 | { |
no test coverage detected