Browse Source

Make use of SDL_UserEvent::code instead of SDL_Event::type

pull/8014/head
staphen 10 months ago committed by Anders Jenbo
parent
commit
88b39dc97d
  1. 2
      Source/diablo.cpp
  2. 6
      Source/engine/demomode.cpp
  3. 26
      Source/interfac.cpp
  4. 6
      Source/interfac.h
  5. 6
      Source/player.cpp

2
Source/diablo.cpp

@ -811,7 +811,7 @@ void GameEventHandler(const SDL_Event &event, uint16_t modState)
nthread_ignore_mutex(true);
PaletteFadeOut(8);
sound_stop();
ShowProgress(GetCustomEvent(event.type));
ShowProgress(GetCustomEvent(event));
RedrawEverything();
if (!HeadlessMode) {

6
Source/engine/demomode.cpp

@ -280,7 +280,7 @@ bool CreateSdlEvent(const DemoMsg &dmsg, SDL_Event &event, uint16_t &modState)
return true;
default:
if (type >= DemoMsg::MinCustomEvent) {
event.type = CustomEventToSdlEvent(static_cast<interface_mode>(type - DemoMsg::MinCustomEvent));
CustomEventToSdlEvent(event, static_cast<interface_mode>(type - DemoMsg::MinCustomEvent));
return true;
}
event.type = static_cast<SDL_EventType>(0);
@ -377,7 +377,7 @@ bool CreateSdlEvent(const DemoMsg &dmsg, SDL_Event &event, uint16_t &modState)
return true;
default:
if (type >= DemoMsg::MinCustomEvent) {
event.type = CustomEventToSdlEvent(static_cast<interface_mode>(type - DemoMsg::MinCustomEvent));
CustomEventToSdlEvent(event, static_cast<interface_mode>(type - DemoMsg::MinCustomEvent));
return true;
}
event.type = static_cast<SDL_EventType>(0);
@ -802,7 +802,7 @@ void RecordMessage(const SDL_Event &event, uint16_t modState)
default:
if (IsCustomEvent(event.type)) {
WriteDemoMsgHeader(static_cast<DemoMsg::EventType>(
DemoMsg::MinCustomEvent + static_cast<uint8_t>(GetCustomEvent(event.type))));
DemoMsg::MinCustomEvent + static_cast<uint8_t>(GetCustomEvent(event))));
}
break;
}

26
Source/interfac.cpp

@ -73,8 +73,7 @@ const int BarPos[3][2] = { { 53, 37 }, { 53, 421 }, { 53, 37 } };
OptionalOwnedClxSpriteList ArtCutsceneWidescreen;
SdlEventType CustomEventsBegin = SDL_USEREVENT;
constexpr uint16_t NumCustomEvents = WM_LAST - WM_FIRST + 1;
SdlEventType CustomEventType = SDL_USEREVENT;
Cutscenes GetCutSceneFromLevelType(dungeon_type type)
{
@ -413,7 +412,7 @@ void DoLoad(interface_mode uMsg)
if (!loadResult.has_value()) {
#if SDL_PUSH_EVENT_BG_THREAD_WORKS
SDL_Event event;
event.type = CustomEventToSdlEvent(WM_ERROR);
CustomEventToSdlEvent(event, WM_ERROR);
event.user.data1 = new std::string(std::move(loadResult).error());
if (SDL_PushEvent(&event) < 0) {
LogError("Failed to send WM_ERROR {}", SDL_GetError());
@ -428,7 +427,7 @@ void DoLoad(interface_mode uMsg)
#if SDL_PUSH_EVENT_BG_THREAD_WORKS
SDL_Event event;
event.type = CustomEventToSdlEvent(WM_DONE);
CustomEventToSdlEvent(event, WM_DONE);
if (SDL_PushEvent(&event) < 0) {
LogError("Failed to send WM_DONE {}", SDL_GetError());
SDL_ClearError();
@ -485,7 +484,7 @@ void ProgressEventHandler(const SDL_Event &event, uint16_t modState)
DisableInputEventHandler(event, modState);
if (!IsCustomEvent(event.type)) return;
const interface_mode customEvent = GetCustomEvent(event.type);
const interface_mode customEvent = GetCustomEvent(event);
switch (customEvent) {
case WM_PROGRESS:
if (!HeadlessMode && ProgressEventHandlerState.drawnProgress != sgdwProgress && !ProgressEventHandlerState.skipRendering) {
@ -557,23 +556,24 @@ void ProgressEventHandler(const SDL_Event &event, uint16_t modState)
void RegisterCustomEvents()
{
#ifndef USE_SDL1
CustomEventsBegin = SDL_RegisterEvents(NumCustomEvents);
CustomEventType = SDL_RegisterEvents(1);
#endif
}
bool IsCustomEvent(SdlEventType eventType)
{
return eventType >= CustomEventsBegin && eventType < CustomEventsBegin + NumCustomEvents;
return eventType == CustomEventType;
}
interface_mode GetCustomEvent(SdlEventType eventType)
interface_mode GetCustomEvent(const SDL_Event &event)
{
return static_cast<interface_mode>(eventType - CustomEventsBegin);
return static_cast<interface_mode>(event.user.code);
}
SdlEventType CustomEventToSdlEvent(interface_mode eventType)
void CustomEventToSdlEvent(SDL_Event &event, interface_mode eventType)
{
return CustomEventsBegin + eventType;
event.type = CustomEventType;
event.user.code = static_cast<int>(eventType);
}
void interface_msg_pump()
@ -598,7 +598,7 @@ void IncProgress(uint32_t steps)
if (!HeadlessMode && sgdwProgress != prevProgress) {
#if SDL_PUSH_EVENT_BG_THREAD_WORKS
SDL_Event event;
event.type = CustomEventToSdlEvent(WM_PROGRESS);
CustomEventToSdlEvent(event, WM_PROGRESS);
if (SDL_PushEvent(&event) < 0) {
LogError("Failed to send WM_PROGRESS {}", SDL_GetError());
SDL_ClearError();
@ -691,7 +691,7 @@ void ShowProgress(interface_mode uMsg)
}
#if !SDL_PUSH_EVENT_BG_THREAD_WORKS
if (const int customEventType = NextCustomEvent.type.exchange(-1); customEventType != -1) {
event.type = CustomEventToSdlEvent(static_cast<interface_mode>(customEventType));
CustomEventToSdlEvent(event, static_cast<interface_mode>(customEventType));
if (static_cast<interface_mode>(customEventType) == static_cast<int>(WM_ERROR)) {
event.user.data1 = &NextCustomEvent.error;
}

6
Source/interfac.h

@ -7,6 +7,8 @@
#include <cstdint>
#include <SDL.h>
#include "utils/ui_fwd.h"
namespace devilution {
@ -45,9 +47,9 @@ using SdlEventType = uint8_t;
bool IsCustomEvent(SdlEventType eventType);
interface_mode GetCustomEvent(SdlEventType eventType);
interface_mode GetCustomEvent(const SDL_Event &event);
SdlEventType CustomEventToSdlEvent(interface_mode eventType);
void CustomEventToSdlEvent(SDL_Event &event, interface_mode eventType);
enum Cutscenes : uint8_t {
CutStart,

6
Source/player.cpp

@ -2861,7 +2861,7 @@ StartNewLvl(Player &player, interface_mode fom, int lvl)
player._pmode = PM_NEWLVL;
player._pInvincible = true;
SDL_Event event;
event.type = CustomEventToSdlEvent(fom);
CustomEventToSdlEvent(event, fom);
SDL_PushEvent(&event);
if (gbIsMultiplayer) {
NetSendCmdParam2(true, CMD_NEWLVL, fom, lvl);
@ -2887,7 +2887,7 @@ void RestartTownLvl(Player &player)
if (&player == MyPlayer) {
player._pInvincible = true;
SDL_Event event;
event.type = CustomEventToSdlEvent(WM_DIABRETOWN);
CustomEventToSdlEvent(event, WM_DIABRETOWN);
SDL_PushEvent(&event);
}
}
@ -2912,7 +2912,7 @@ void StartWarpLvl(Player &player, size_t pidx)
player._pmode = PM_NEWLVL;
player._pInvincible = true;
SDL_Event event;
event.type = CustomEventToSdlEvent(WM_DIABWARPLVL);
CustomEventToSdlEvent(event, WM_DIABWARPLVL);
SDL_PushEvent(&event);
}
}

Loading…
Cancel
Save