Decrease Window dependencies in Vehicle.cpp

This commit is contained in:
Marijn van der Werf 2018-01-15 06:34:56 +01:00 committed by Aaron van Geffen
parent 7d0417a366
commit d09134e64a
6 changed files with 74 additions and 46 deletions

View File

@ -354,6 +354,28 @@ public:
window_tile_inspector_auto_set_buttons(window);
break;
}
case INTENT_ACTION_INVALIDATE_VEHICLE_WINDOW:
{
rct_vehicle * vehicle = static_cast<rct_vehicle *>(intent.GetPointerExtra(INTENT_EXTRA_VEHICLE));
sint32 viewVehicleIndex;
Ride * ride;
rct_window * w;
w = window_find_by_number(WC_RIDE, vehicle->ride);
if (w == nullptr)
return;
ride = get_ride(vehicle->ride);
viewVehicleIndex = w->ride.view - 1;
if (viewVehicleIndex < 0 || viewVehicleIndex >= ride->num_vehicles)
return;
if (vehicle->sprite_index != ride->vehicles[viewVehicleIndex])
return;
window_invalidate(w);
}
}
}

View File

@ -2703,4 +2703,28 @@ rct_viewport * window_get_viewport(rct_window * w)
return w->viewport;
}
rct_window * window_get_listening()
{
for (rct_window * w = RCT2_LAST_WINDOW; w >= g_window_list; w--)
{
if (w->viewport == nullptr)
{
continue;
}
if (w->viewport->flags & VIEWPORT_FLAG_SOUND_ON)
{
return w;
}
}
return nullptr;
}
rct_windowclass window_get_classification(rct_window * window)
{
return window->classification;
}
}

View File

@ -549,6 +549,10 @@ typedef void (*close_callback)();
#define WINDOW_LIMIT_MAX 64
#define WINDOW_LIMIT_RESERVED 4 // Used to reserve room for the main viewport, toolbars, etc.
extern rct_window * gWindowFirst;
extern rct_window * gWindowNextSlot;
extern rct_window * gWindowAudioExclusive;
extern uint16 gWindowUpdateTicks;
extern uint8 gToolbarDirtyFlags;
extern uint16 gWindowMapFlashingFlags;
@ -723,6 +727,9 @@ extern uint8 _rideConstructionState2;
extern bool _stationConstructed;
extern bool _deferClose;
rct_window * window_get_listening();
rct_windowclass window_get_classification(rct_window * window);
#ifdef __cplusplus
}
#endif

View File

@ -103,9 +103,5 @@ struct rct_window {
// rct2: 0x01420078
extern rct_window g_window_list[WINDOW_LIMIT_MAX + WINDOW_LIMIT_RESERVED];
extern rct_window * gWindowFirst;
extern rct_window * gWindowNextSlot;
extern rct_window * gWindowAudioExclusive;
}
#endif

View File

@ -25,7 +25,6 @@
#include "../core/Util.hpp"
#include "../Game.h"
#include "../interface/Viewport.h"
#include "../interface/Window_internal.h"
#include "../localisation/Localisation.h"
#include "../management/NewsItem.h"
#include "../platform/platform.h"
@ -44,6 +43,7 @@
#include "Track.h"
#include "TrackData.h"
#include "VehicleData.h"
#include "../windows/Intent.h"
static void vehicle_update(rct_vehicle * vehicle);
@ -880,7 +880,7 @@ static void vehicle_update_sound_params(rct_vehicle * vehicle)
sint16 quarter_w = g_music_tracking_viewport->view_width / 4;
sint16 quarter_h = g_music_tracking_viewport->view_height / 4;
if (gWindowAudioExclusive->classification == WC_MAIN_WINDOW)
if (window_get_classification(gWindowAudioExclusive) == WC_MAIN_WINDOW)
{
left -= quarter_w;
bottom -= quarter_h;
@ -892,7 +892,7 @@ static void vehicle_update_sound_params(rct_vehicle * vehicle)
sint16 right = g_music_tracking_viewport->view_width + left;
sint16 top = g_music_tracking_viewport->view_height + bottom;
if (gWindowAudioExclusive->classification == WC_MAIN_WINDOW)
if (window_get_classification(gWindowAudioExclusive) == WC_MAIN_WINDOW)
{
right += quarter_w + quarter_w;
top += quarter_h + quarter_h;
@ -1010,31 +1010,23 @@ static sint32 vehicle_get_sound_priority_factor(rct_vehicle * vehicle)
static void vehicle_sounds_update_window_setup()
{
g_music_tracking_viewport = nullptr;
rct_viewport * viewport = nullptr;
rct_window * window = gWindowNextSlot;
while (true)
{
window--;
if (window < g_window_list)
{
break;
}
viewport = window->viewport;
if (viewport && viewport->flags & VIEWPORT_FLAG_SOUND_ON)
{
break;
}
}
g_music_tracking_viewport = viewport;
if (viewport == nullptr)
return;
if (window)
rct_window * window = window_get_listening();
if (window == nullptr)
{
gWindowAudioExclusive = window;
const uint8 ZoomToVolume[MAX_ZOOM_LEVEL + 1] = { 0, 35, 70, 70 };
gVolumeAdjustZoom = ZoomToVolume[viewport->zoom];
return;
}
rct_viewport * viewport = window_get_viewport(window);
if (viewport == nullptr)
{
return;
}
g_music_tracking_viewport = viewport;
gWindowAudioExclusive = window;
const uint8 ZoomToVolume[MAX_ZOOM_LEVEL + 1] = { 0, 35, 70, 70 };
gVolumeAdjustZoom = ZoomToVolume[viewport->zoom];
}
static uint8 vehicle_sounds_update_get_pan_volume(rct_vehicle_sound_params * sound_params)
@ -9873,21 +9865,7 @@ sint32 vehicle_get_total_num_peeps(rct_vehicle * vehicle)
*/
void vehicle_invalidate_window(rct_vehicle * vehicle)
{
sint32 viewVehicleIndex;
Ride * ride;
rct_window * w;
w = window_find_by_number(WC_RIDE, vehicle->ride);
if (w == nullptr)
return;
ride = get_ride(vehicle->ride);
viewVehicleIndex = w->ride.view - 1;
if (viewVehicleIndex < 0 || viewVehicleIndex >= ride->num_vehicles)
return;
if (vehicle->sprite_index != ride->vehicles[viewVehicleIndex])
return;
window_invalidate(w);
auto intent = Intent(INTENT_ACTION_INVALIDATE_VEHICLE_WINDOW);
intent.putExtra(INTENT_EXTRA_VEHICLE, vehicle);
context_broadcast_intent(&intent);
}

View File

@ -88,6 +88,7 @@ extern "C" {
INTENT_ACTION_SET_TILE_INSPECTOR_PAGE,
INTENT_ACTION_SET_TILE_INSPECTOR_BUTTONS,
INTENT_ACTION_REFRESH_STAFF_LIST,
INTENT_ACTION_INVALIDATE_VEHICLE_WINDOW,
};
Intent *intent_create(rct_windowclass clss);