| 17 | constexpr World::Pos3 kBBSizeBase2x2 = { 38, 38, 0 }; |
| 18 | |
| 19 | static void paintDocksBuilding(PaintSession& session, const World::StationElement& elStation, const DockObject& dockObj, const World::Pos3& imageOffset, const World::Pos3& bbOffset, const World::Pos3& bbSize, const ImageId& baseColour, const uint8_t rotation) |
| 20 | { |
| 21 | const auto ticks = ScenarioManager::getScenarioTicks(); |
| 22 | const auto variation = elStation.buildingType(); |
| 23 | const auto parts = dockObj.getBuildingParts(variation); |
| 24 | |
| 25 | auto sectionImageOffset = imageOffset; |
| 26 | const auto partHeights = dockObj.getBuildingPartHeights(); |
| 27 | const auto partAnimations = dockObj.getBuildingPartAnimations(); |
| 28 | for (const auto part : parts) |
| 29 | { |
| 30 | const auto partAnimation = partAnimations[part]; |
| 31 | |
| 32 | const auto frameMask = partAnimation.numFrames - 1; |
| 33 | const auto cl = partAnimation.animationSpeed & 0x7F; |
| 34 | auto tickThing = ticks >> cl; |
| 35 | if (partAnimation.animationSpeed & (1 << 7)) |
| 36 | { |
| 37 | const auto pos = World::toTileSpace(session.getUnkPosition()); |
| 38 | tickThing += pos.x * 5; |
| 39 | tickThing += pos.y * 3; |
| 40 | } |
| 41 | const auto adjustedPart = part + (frameMask & tickThing); |
| 42 | |
| 43 | const auto sectionHeight = partHeights[adjustedPart]; |
| 44 | const uint32_t imageIdx = adjustedPart * 4 + dockObj.buildingImage + rotation; |
| 45 | const auto image = baseColour.withIndex(imageIdx); |
| 46 | session.addToPlotListAsChild(image, sectionImageOffset, bbOffset, bbSize); |
| 47 | sectionImageOffset.z += sectionHeight; |
| 48 | } |
| 49 | } |
| 50 | |
| 51 | // 0x0048B86E |
| 52 | void paintDocks(PaintSession& session, const World::StationElement& elStation) |
no test coverage detected