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:
@@ -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.
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -1717,6 +1717,11 @@ namespace OpenRCT2
|
||||
return IsSpriteInteractedWithPaletteSet(rt, imageId, coords, paletteMap, imageType);
|
||||
}
|
||||
|
||||
const std::list<Viewport>& GetAllViewports()
|
||||
{
|
||||
return _viewports;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* rct2: 0x0068862C
|
||||
|
||||
@@ -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 });
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -333,7 +333,6 @@ namespace OpenRCT2
|
||||
|
||||
void TextinputCancel();
|
||||
|
||||
std::vector<Viewport*> WindowGetActiveViewports();
|
||||
Viewport* WindowGetPreviousViewport(Viewport* current);
|
||||
void WindowInitAll();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user