1
0
mirror of https://github.com/OpenRCT2/OpenRCT2 synced 2026-02-01 11:15:13 +01:00

More efficiently search viewports for playing Audio

This commit is contained in:
Harry Hopkinson
2025-05-23 12:59:55 +01:00
parent 371dcc28f5
commit 994cc858e8
6 changed files with 15 additions and 21 deletions

View File

@@ -11,6 +11,7 @@
- Improved: [#24417] Improve the fallback vehicle sprites for Dive Loops.
- Improved: [#24433] The ride, new ride, scenery, path, viewport, park and tool windows no longer redraw every frame if they have not changed.
- Improved: [#24467] Apply tweening only to on-screen entities when not zoomed out for better performance with uncapped FPS.
- Improved: [#24474] More efficiently search viewports when playing Audio.
- Improved: [#24479] More descriptive error messages for `set` commands in the in-game console.
- Change: [#24342] g2.dat is now split into g2.dat and fonts.dat.
- Change: [#24362] The Windows installer now prevents installing to the same folder as RollerCoaster Tycoon 2 or Classic.

View File

@@ -159,20 +159,19 @@ namespace OpenRCT2::Audio
uint8_t rotation = GetCurrentRotation();
auto pos2 = Translate3DTo2DWithZ(rotation, location);
// Get all active viewports
auto viewports = WindowGetActiveViewports();
for (auto* viewport : viewports)
const auto& activeViewports = GetAllViewports();
for (const auto& viewport : activeViewports)
{
if (viewport->flags & VIEWPORT_FLAG_SOUND_ON)
if (viewport.flags & VIEWPORT_FLAG_SOUND_ON)
{
int16_t vx = pos2.x - viewport->viewPos.x;
params.pan = viewport->pos.x + viewport->zoom.ApplyInversedTo(vx);
int16_t vx = pos2.x - viewport.viewPos.x;
params.pan = viewport.pos.x + viewport.zoom.ApplyInversedTo(vx);
auto sampleModifier = obj->GetSampleModifier(sampleIndex);
auto viewModifier = ((viewport->zoom.ApplyTo(-1024) - 1) * (1 << volumeDown)) + 1;
auto viewModifier = ((viewport.zoom.ApplyTo(-1024) - 1) * (1 << volumeDown)) + 1;
params.volume = sampleModifier + viewModifier;
if (!viewport->Contains(pos2) || params.volume < -10000)
if (!viewport.Contains(pos2) || params.volume < -10000)
{
params.in_range = false;
return params;

View File

@@ -1717,6 +1717,11 @@ namespace OpenRCT2
return IsSpriteInteractedWithPaletteSet(rt, imageId, coords, paletteMap, imageType);
}
const std::list<Viewport>& GetAllViewports()
{
return _viewports;
}
/**
*
* rct2: 0x0068862C

View File

@@ -183,6 +183,8 @@ namespace OpenRCT2
void ViewportCreate(WindowBase* w, const ScreenCoordsXY& screenCoords, int32_t width, int32_t height, const Focus& focus);
void ViewportRemove(Viewport* viewport);
const std::list<Viewport>& GetAllViewports();
void ViewportsInvalidate(int32_t x, int32_t y, int32_t z0, int32_t z1, ZoomLevel maxZoom);
void ViewportsInvalidate(const CoordsXYZ& pos, int32_t width, int32_t minHeight, int32_t maxHeight, ZoomLevel maxZoom);
void ViewportsInvalidate(const ScreenRect& screenRect, ZoomLevel maxZoom = ZoomLevel{ -1 });

View File

@@ -916,18 +916,6 @@ static constexpr float kWindowScrollLocations[][2] = {
});
}
std::vector<Viewport*> WindowGetActiveViewports()
{
std::vector<Viewport*> viewports;
WindowVisitEach([&viewports](WindowBase* w) {
if (w->viewport != nullptr && !(w->flags & WF_DEAD))
{
viewports.push_back(w->viewport);
}
});
return viewports;
}
Viewport* WindowGetPreviousViewport(Viewport* current)
{
bool foundPrevious = (current == nullptr);

View File

@@ -333,7 +333,6 @@ namespace OpenRCT2
void TextinputCancel();
std::vector<Viewport*> WindowGetActiveViewports();
Viewport* WindowGetPreviousViewport(Viewport* current);
void WindowInitAll();