Simplify map flashing flags and move into map

This commit is contained in:
duncanspumpkin 2024-03-28 08:02:37 +00:00 committed by Gymnasiast
parent 4810a72232
commit f6c34ddd59
No known key found for this signature in database
GPG Key ID: DBFFF47AB2CA3EDD
6 changed files with 30 additions and 37 deletions

View File

@ -141,24 +141,6 @@ public:
{
_inGameConsole.Update();
// the flickering frequency is reduced by 4, compared to the original
// it was done due to inability to reproduce original frequency
// and decision that the original one looks too fast
if (gCurrentRealTimeTicks % 4 == 0)
gWindowMapFlashingFlags ^= MapFlashingFlags::SwitchColour;
// Handle guest map flashing
gWindowMapFlashingFlags &= ~MapFlashingFlags::FlashGuests;
if (gWindowMapFlashingFlags & MapFlashingFlags::GuestListOpen)
gWindowMapFlashingFlags |= MapFlashingFlags::FlashGuests;
gWindowMapFlashingFlags &= ~MapFlashingFlags::GuestListOpen;
// Handle staff map flashing
gWindowMapFlashingFlags &= ~MapFlashingFlags::FlashStaff;
if (gWindowMapFlashingFlags & MapFlashingFlags::StaffListOpen)
gWindowMapFlashingFlags |= MapFlashingFlags::FlashStaff;
gWindowMapFlashingFlags &= ~MapFlashingFlags::StaffListOpen;
_windowManager->UpdateMapTooltip();
WindowDispatchUpdateAll();

View File

@ -275,8 +275,6 @@ static Widget window_guest_list_widgets[] = {
if (_tabAnimationIndex >= (_selectedTab == TabId::Individual ? 24uL : 32uL))
_tabAnimationIndex = 0;
InvalidateWidget(WIDX_TAB_1 + static_cast<int32_t>(_selectedTab));
gWindowMapFlashingFlags |= MapFlashingFlags::GuestListOpen;
}
void OnMouseUp(WidgetIndex widgetIndex) override

View File

@ -184,6 +184,13 @@ static constexpr ScreenCoordsXY MiniMapOffsets[] = {
MapColour(PALETTE_INDEX_0), // TILE_ELEMENT_TYPE_BANNER
};
namespace MapFlashingFlags
{
constexpr uint16_t FlashGuests = (1 << 1);
constexpr uint16_t FlashStaff = (1 << 3);
constexpr uint16_t SwitchColour = (1 << 15); // Every couple ticks the colour switches
} // namespace MapFlashingFlags
class MapWindow final : public Window
{
uint8_t _rotation;
@ -200,6 +207,7 @@ static constexpr ScreenCoordsXY MiniMapOffsets[] = {
X,
Y,
} _resizeDirection{ ResizeDirection::Both };
uint16_t _flashingFlags = 0;
public:
MapWindow()
@ -387,6 +395,22 @@ static constexpr ScreenCoordsXY MiniMapOffsets[] = {
void OnUpdate() override
{
// the flickering frequency is reduced by 4, compared to the original
// it was done due to inability to reproduce original frequency
// and decision that the original one looks too fast
if (gCurrentRealTimeTicks % 4 == 0)
_flashingFlags ^= MapFlashingFlags::SwitchColour;
// Handle guest map flashing
_flashingFlags &= ~MapFlashingFlags::FlashGuests;
if (WindowFindByClass(WindowClass::GuestList) != nullptr)
_flashingFlags |= MapFlashingFlags::FlashGuests;
// Handle staff map flashing
_flashingFlags &= ~MapFlashingFlags::FlashStaff;
if (WindowFindByClass(WindowClass::StaffList) != nullptr)
_flashingFlags |= MapFlashingFlags::FlashStaff;
if (GetCurrentRotation() != _rotation)
{
_rotation = GetCurrentRotation();
@ -1269,25 +1293,25 @@ static constexpr ScreenCoordsXY MiniMapOffsets[] = {
GfxFillRect(dpi, { leftTop, rightBottom }, colour);
}
static uint8_t GetGuestFlashColour()
uint8_t GetGuestFlashColour() const
{
uint8_t colour = DefaultPeepMapColour;
if ((gWindowMapFlashingFlags & MapFlashingFlags::FlashGuests) != 0)
if ((_flashingFlags & MapFlashingFlags::FlashGuests) != 0)
{
colour = GuestMapColour;
if ((gWindowMapFlashingFlags & MapFlashingFlags::SwitchColour) == 0)
if ((_flashingFlags & MapFlashingFlags::SwitchColour) == 0)
colour = GuestMapColourAlternate;
}
return colour;
}
static uint8_t GetStaffFlashColour()
uint8_t GetStaffFlashColour() const
{
uint8_t colour = DefaultPeepMapColour;
if ((gWindowMapFlashingFlags & MapFlashingFlags::FlashStaff) != 0)
if ((_flashingFlags & MapFlashingFlags::FlashStaff) != 0)
{
colour = StaffMapColour;
if ((gWindowMapFlashingFlags & MapFlashingFlags::SwitchColour) == 0)
if ((_flashingFlags & MapFlashingFlags::SwitchColour) == 0)
colour = StaffMapColourAlternate;
}
return colour;

View File

@ -198,7 +198,6 @@ static Widget _staffListWidgets[] = {
// Enable highlighting of these staff members in map window
if (WindowFindByClass(WindowClass::Map) != nullptr)
{
gWindowMapFlashingFlags |= MapFlashingFlags::StaffListOpen;
for (auto peep : EntityList<Staff>())
{
EntitySetFlashing(peep, false);

View File

@ -48,7 +48,6 @@ WindowBase* gWindowAudioExclusive;
WindowCloseModifier gLastCloseModifier = { { WindowClass::Null, 0 }, CloseWindowModifier::None };
uint32_t gWindowUpdateTicks;
uint16_t gWindowMapFlashingFlags;
colour_t gCurrentWindowColours[4];
// converted from uint16_t values at 0x009A41EC - 0x009A4230

View File

@ -489,15 +489,6 @@ constexpr int8_t kWindowLimitReserved = 4; // Used to reserve room for the main
extern WindowBase* gWindowAudioExclusive;
extern uint32_t gWindowUpdateTicks;
namespace MapFlashingFlags
{
constexpr uint16_t GuestListOpen = (1 << 0);
constexpr uint16_t FlashGuests = (1 << 1);
constexpr uint16_t StaffListOpen = (1 << 2);
constexpr uint16_t FlashStaff = (1 << 3);
constexpr uint16_t SwitchColour = (1 << 15); // Every couple ticks the colour switches
} // namespace MapFlashingFlags
extern uint16_t gWindowMapFlashingFlags;
extern colour_t gCurrentWindowColours[4];