Replace anonymous union in Event with pointer to appropriate struct

master
Piotr Dziwinski 2015-08-06 17:51:28 +02:00
parent 28163cc008
commit f95980456a
37 changed files with 533 additions and 435 deletions

View File

@ -941,12 +941,13 @@ int CApplication::Run()
if (event.type == EVENT_SYS_QUIT)
goto end; // exit the loop
if (event.type != EVENT_NULL)
m_eventQueue->AddEvent(event);
Event virtualEvent = CreateVirtualEvent(event);
if (event.type != EVENT_NULL)
m_eventQueue->AddEvent(std::move(event));
if (virtualEvent.type != EVENT_NULL)
m_eventQueue->AddEvent(virtualEvent);
m_eventQueue->AddEvent(std::move(virtualEvent));
}
}
@ -961,15 +962,16 @@ int CApplication::Run()
goto end; // exit the loop
if (event.type != EVENT_NULL)
m_eventQueue->AddEvent(event);
m_eventQueue->AddEvent(std::move(event));
}
// Enter game update & frame rendering only if active
if (m_active)
{
Event event;
while (m_eventQueue->GetEvent(event))
while (! m_eventQueue->IsEmpty())
{
Event event = m_eventQueue->GetEvent();
if (event.type == EVENT_SYS_QUIT || event.type == EVENT_QUIT)
goto end; // exit both loops
@ -988,7 +990,7 @@ int CApplication::Run()
StartPerformanceCounter(PCNT_UPDATE_ALL);
// Prepare and process step simulation event
event = CreateUpdateEvent();
Event event = CreateUpdateEvent();
if (event.type != EVENT_NULL && m_controller != nullptr)
{
LogEvent(event);
@ -1067,22 +1069,26 @@ Event CApplication::ProcessSystemEvent()
else
event.type = EVENT_KEY_UP;
event.key.virt = false;
event.key.key = m_private->currentEvent.key.keysym.sym;
event.key.unicode = m_private->currentEvent.key.keysym.unicode;
auto data = MakeUnique<KeyEventData>();
data->virt = false;
data->key = m_private->currentEvent.key.keysym.sym;
data->unicode = m_private->currentEvent.key.keysym.unicode;
event.kmodState = m_private->currentEvent.key.keysym.mod;
// Some keyboards return numerical enter keycode instead of normal enter
// See issue #427 for details
if (event.key.key == KEY(KP_ENTER))
event.key.key = KEY(RETURN);
if (data->key == KEY(KP_ENTER))
data->key = KEY(RETURN);
if (event.key.key == KEY(TAB) && ((event.kmodState & KEY_MOD(ALT)) != 0))
if (data->key == KEY(TAB) && ((event.kmodState & KEY_MOD(ALT)) != 0))
{
GetLogger()->Debug("Minimize to taskbar\n");
SDL_WM_IconifyWindow();
event.type = EVENT_NULL;
}
event.data = std::move(data);
}
else if ( (m_private->currentEvent.type == SDL_MOUSEBUTTONDOWN) ||
(m_private->currentEvent.type == SDL_MOUSEBUTTONUP) )
@ -1090,23 +1096,34 @@ Event CApplication::ProcessSystemEvent()
if ((m_private->currentEvent.button.button == SDL_BUTTON_WHEELUP) ||
(m_private->currentEvent.button.button == SDL_BUTTON_WHEELDOWN))
{
if (m_private->currentEvent.type == SDL_MOUSEBUTTONDOWN) // ignore the following up event
{
event.type = EVENT_MOUSE_WHEEL;
auto data = MakeUnique<MouseWheelEventData>();
if (m_private->currentEvent.button.button == SDL_BUTTON_WHEELDOWN)
event.mouseWheel.dir = WHEEL_DOWN;
data->dir = WHEEL_DOWN;
else
event.mouseWheel.dir = WHEEL_UP;
data->dir = WHEEL_UP;
event.data = std::move(data);
}
}
else
{
auto data = MakeUnique<MouseButtonEventData>();
if (m_private->currentEvent.type == SDL_MOUSEBUTTONDOWN)
event.type = EVENT_MOUSE_BUTTON_DOWN;
else
event.type = EVENT_MOUSE_BUTTON_UP;
event.mouseButton.button = static_cast<MouseButton>(1 << m_private->currentEvent.button.button);
data->button = static_cast<MouseButton>(1 << m_private->currentEvent.button.button);
event.data = std::move(data);
}
}
else if (m_private->currentEvent.type == SDL_MOUSEMOTION)
@ -1119,8 +1136,10 @@ Event CApplication::ProcessSystemEvent()
{
event.type = EVENT_JOY_AXIS;
event.joyAxis.axis = m_private->currentEvent.jaxis.axis;
event.joyAxis.value = m_private->currentEvent.jaxis.value;
auto data = MakeUnique<JoyAxisEventData>();
data->axis = m_private->currentEvent.jaxis.axis;
data->value = m_private->currentEvent.jaxis.value;
event.data = std::move(data);
}
else if ( (m_private->currentEvent.type == SDL_JOYBUTTONDOWN) ||
(m_private->currentEvent.type == SDL_JOYBUTTONUP) )
@ -1130,20 +1149,26 @@ Event CApplication::ProcessSystemEvent()
else
event.type = EVENT_JOY_BUTTON_UP;
event.joyButton.button = m_private->currentEvent.jbutton.button;
auto data = MakeUnique<JoyButtonEventData>();
data->button = m_private->currentEvent.jbutton.button;
event.data = std::move(data);
}
else if (m_private->currentEvent.type == SDL_ACTIVEEVENT)
{
event.type = EVENT_ACTIVE;
if (m_private->currentEvent.active.type & SDL_APPINPUTFOCUS)
event.active.flags |= ACTIVE_INPUT;
if (m_private->currentEvent.active.type & SDL_APPMOUSEFOCUS)
event.active.flags |= ACTIVE_MOUSE;
if (m_private->currentEvent.active.type & SDL_APPACTIVE)
event.active.flags |= ACTIVE_APP;
auto data = MakeUnique<ActiveEventData>();
event.active.gain = m_private->currentEvent.active.gain == 1;
if (m_private->currentEvent.active.type & SDL_APPINPUTFOCUS)
data->flags |= ACTIVE_INPUT;
if (m_private->currentEvent.active.type & SDL_APPMOUSEFOCUS)
data->flags |= ACTIVE_MOUSE;
if (m_private->currentEvent.active.type & SDL_APPACTIVE)
data->flags |= ACTIVE_APP;
data->gain = m_private->currentEvent.active.gain == 1;
event.data = std::move(data);
}
m_input->EventProcess(event);
@ -1176,29 +1201,47 @@ void CApplication::LogEvent(const Event &event)
{
case EVENT_KEY_DOWN:
case EVENT_KEY_UP:
l->Trace(" virt = %s\n", (event.key.virt) ? "true" : "false");
l->Trace(" key = %d\n", event.key.key);
l->Trace(" unicode = 0x%04x\n", event.key.unicode);
{
auto data = event.GetData<KeyEventData>();
l->Trace(" virt = %s\n", data->virt ? "true" : "false");
l->Trace(" key = %d\n", data->key);
l->Trace(" unicode = 0x%04x\n", data->unicode);
break;
}
case EVENT_MOUSE_BUTTON_DOWN:
case EVENT_MOUSE_BUTTON_UP:
l->Trace(" button = %d\n", event.mouseButton.button);
{
auto data = event.GetData<MouseButtonEventData>();
l->Trace(" button = %d\n", data->button);
break;
}
case EVENT_MOUSE_WHEEL:
l->Trace(" dir = %s\n", (event.mouseWheel.dir == WHEEL_DOWN) ? "WHEEL_DOWN" : "WHEEL_UP");
break;
case EVENT_JOY_AXIS:
l->Trace(" axis = %d\n", event.joyAxis.axis);
l->Trace(" value = %d\n", event.joyAxis.value);
{
auto data = event.GetData<MouseWheelEventData>();
l->Trace(" dir = %s\n", (data->dir == WHEEL_DOWN) ? "WHEEL_DOWN" : "WHEEL_UP");
break;
}
case EVENT_JOY_AXIS:
{
auto data = event.GetData<JoyAxisEventData>();
l->Trace(" axis = %d\n", data->axis);
l->Trace(" value = %d\n", data->value);
break;
}
case EVENT_JOY_BUTTON_DOWN:
case EVENT_JOY_BUTTON_UP:
l->Trace(" button = %d\n", event.joyButton.button);
{
auto data = event.GetData<JoyButtonEventData>();
l->Trace(" button = %d\n", data->button);
break;
}
case EVENT_ACTIVE:
l->Trace(" flags = 0x%x\n", event.active.flags);
l->Trace(" gain = %s\n", event.active.gain ? "true" : "false");
{
auto data = event.GetData<ActiveEventData>();
l->Trace(" flags = 0x%x\n", data->flags);
l->Trace(" gain = %s\n", data->gain ? "true" : "false");
break;
}
default:
break;
}
@ -1221,13 +1264,23 @@ Event CApplication::CreateVirtualEvent(const Event& sourceEvent)
if ((sourceEvent.type == EVENT_KEY_DOWN) || (sourceEvent.type == EVENT_KEY_UP))
{
virtualEvent.type = sourceEvent.type;
virtualEvent.key = sourceEvent.key;
virtualEvent.key.key = GetVirtualKey(sourceEvent.key.key);
virtualEvent.key.virt = true;
auto sourceData = sourceEvent.GetData<KeyEventData>();
auto virtualKey = GetVirtualKey(sourceData->key);
if (virtualEvent.key.key == sourceEvent.key.key)
if (virtualKey == sourceData->key)
{
virtualEvent.type = EVENT_NULL;
}
else
{
virtualEvent.type = sourceEvent.type;
auto data = sourceData->Clone();
auto keyData = static_cast<KeyEventData*>(data.get());
keyData->key = virtualKey;
keyData->virt = true;
virtualEvent.data = std::move(data);
}
}
else if ((sourceEvent.type == EVENT_JOY_BUTTON_DOWN) || (sourceEvent.type == EVENT_JOY_BUTTON_UP))
{
@ -1236,9 +1289,13 @@ Event CApplication::CreateVirtualEvent(const Event& sourceEvent)
else
virtualEvent.type = EVENT_KEY_UP;
virtualEvent.key.virt = true;
virtualEvent.key.key = VIRTUAL_JOY(sourceEvent.joyButton.button);
virtualEvent.key.unicode = 0;
auto sourceData = sourceEvent.GetData<JoyButtonEventData>();
auto data = MakeUnique<KeyEventData>();
data->virt = true;
data->key = VIRTUAL_JOY(sourceData->button);
data->unicode = 0;
virtualEvent.data = std::move(data);
}
else
{

View File

@ -78,8 +78,8 @@ CInput::CInput()
void CInput::EventProcess(Event& event)
{
if(event.type == EVENT_KEY_DOWN ||
event.type == EVENT_KEY_UP)
if (event.type == EVENT_KEY_DOWN ||
event.type == EVENT_KEY_UP)
{
// Use the occasion to update kmods
m_kmodState = event.kmodState;
@ -88,18 +88,21 @@ void CInput::EventProcess(Event& event)
// Use the occasion to update mouse button state
if (event.type == EVENT_MOUSE_BUTTON_DOWN)
{
m_mouseButtonsState |= event.mouseButton.button;
auto data = event.GetData<MouseButtonEventData>();
m_mouseButtonsState |= data->button;
}
if(event.type == EVENT_MOUSE_BUTTON_UP)
if (event.type == EVENT_MOUSE_BUTTON_UP)
{
m_mouseButtonsState &= ~event.mouseButton.button;
auto data = event.GetData<MouseButtonEventData>();
m_mouseButtonsState &= ~data->button;
}
if(event.type == EVENT_KEY_DOWN ||
event.type == EVENT_KEY_UP)
if (event.type == EVENT_KEY_DOWN ||
event.type == EVENT_KEY_UP)
{
event.key.slot = FindBinding(event.key.key);
auto data = event.GetData<KeyEventData>();
data->slot = FindBinding(data->key);
}
event.kmodState = m_kmodState;
@ -110,7 +113,8 @@ void CInput::EventProcess(Event& event)
if (event.type == EVENT_KEY_DOWN ||
event.type == EVENT_KEY_UP)
{
m_keyPresses[event.key.slot] = (event.type == EVENT_KEY_DOWN);
auto data = event.GetData<KeyEventData>();
m_keyPresses[data->slot] = (event.type == EVENT_KEY_DOWN);
}
@ -119,41 +123,47 @@ void CInput::EventProcess(Event& event)
if (event.type == EVENT_KEY_DOWN && !(event.kmodState & KEY_MOD(ALT) ) )
{
if (event.key.slot == INPUT_SLOT_UP ) m_keyMotion.y = 1.0f;
if (event.key.slot == INPUT_SLOT_DOWN ) m_keyMotion.y = -1.0f;
if (event.key.slot == INPUT_SLOT_LEFT ) m_keyMotion.x = -1.0f;
if (event.key.slot == INPUT_SLOT_RIGHT) m_keyMotion.x = 1.0f;
if (event.key.slot == INPUT_SLOT_GUP ) m_keyMotion.z = 1.0f;
if (event.key.slot == INPUT_SLOT_GDOWN) m_keyMotion.z = -1.0f;
auto data = event.GetData<KeyEventData>();
if (data->slot == INPUT_SLOT_UP ) m_keyMotion.y = 1.0f;
if (data->slot == INPUT_SLOT_DOWN ) m_keyMotion.y = -1.0f;
if (data->slot == INPUT_SLOT_LEFT ) m_keyMotion.x = -1.0f;
if (data->slot == INPUT_SLOT_RIGHT) m_keyMotion.x = 1.0f;
if (data->slot == INPUT_SLOT_GUP ) m_keyMotion.z = 1.0f;
if (data->slot == INPUT_SLOT_GDOWN) m_keyMotion.z = -1.0f;
}
else if (event.type == EVENT_KEY_UP)
{
if (event.key.slot == INPUT_SLOT_UP ) m_keyMotion.y = 0.0f;
if (event.key.slot == INPUT_SLOT_DOWN ) m_keyMotion.y = 0.0f;
if (event.key.slot == INPUT_SLOT_LEFT ) m_keyMotion.x = 0.0f;
if (event.key.slot == INPUT_SLOT_RIGHT) m_keyMotion.x = 0.0f;
if (event.key.slot == INPUT_SLOT_GUP ) m_keyMotion.z = 0.0f;
if (event.key.slot == INPUT_SLOT_GDOWN) m_keyMotion.z = 0.0f;
auto data = event.GetData<KeyEventData>();
if (data->slot == INPUT_SLOT_UP ) m_keyMotion.y = 0.0f;
if (data->slot == INPUT_SLOT_DOWN ) m_keyMotion.y = 0.0f;
if (data->slot == INPUT_SLOT_LEFT ) m_keyMotion.x = 0.0f;
if (data->slot == INPUT_SLOT_RIGHT) m_keyMotion.x = 0.0f;
if (data->slot == INPUT_SLOT_GUP ) m_keyMotion.z = 0.0f;
if (data->slot == INPUT_SLOT_GDOWN) m_keyMotion.z = 0.0f;
}
else if (event.type == EVENT_JOY_AXIS)
{
if (event.joyAxis.axis == GetJoyAxisBinding(JOY_AXIS_SLOT_X).axis)
auto data = event.GetData<JoyAxisEventData>();
if (data->axis == GetJoyAxisBinding(JOY_AXIS_SLOT_X).axis)
{
m_joyMotion.x = Math::Neutral(event.joyAxis.value / 32768.0f, m_joystickDeadzone);
m_joyMotion.x = Math::Neutral(data->value / 32768.0f, m_joystickDeadzone);
if (GetJoyAxisBinding(JOY_AXIS_SLOT_X).invert)
m_joyMotion.x *= -1.0f;
}
if (event.joyAxis.axis == GetJoyAxisBinding(JOY_AXIS_SLOT_Y).axis)
if (data->axis == GetJoyAxisBinding(JOY_AXIS_SLOT_Y).axis)
{
m_joyMotion.y = Math::Neutral(event.joyAxis.value / 32768.0f, m_joystickDeadzone);
m_joyMotion.y = Math::Neutral(data->value / 32768.0f, m_joystickDeadzone);
if (GetJoyAxisBinding(JOY_AXIS_SLOT_Y).invert)
m_joyMotion.y *= -1.0f;
}
if (event.joyAxis.axis == GetJoyAxisBinding(JOY_AXIS_SLOT_Z).axis)
if (data->axis == GetJoyAxisBinding(JOY_AXIS_SLOT_Z).axis)
{
m_joyMotion.z = Math::Neutral(event.joyAxis.value / 32768.0f, m_joystickDeadzone);
m_joyMotion.z = Math::Neutral(data->value / 32768.0f, m_joystickDeadzone);
if (GetJoyAxisBinding(JOY_AXIS_SLOT_Z).invert)
m_joyMotion.z *= -1.0f;
}

View File

@ -558,9 +558,14 @@ CEventQueue::CEventQueue()
CEventQueue::~CEventQueue()
{}
bool CEventQueue::IsEmpty()
{
return m_head == m_tail;
}
/** If the maximum size of queue has been reached, returns \c false.
Else, adds the event to the queue and returns \c true. */
bool CEventQueue::AddEvent(const Event &event)
bool CEventQueue::AddEvent(Event&& event)
{
bool result{};
@ -574,7 +579,7 @@ bool CEventQueue::AddEvent(const Event &event)
}
else
{
m_fifo[m_head++] = event;
m_fifo[m_head++] = std::move(event);
if (m_head >= MAX_EVENT_QUEUE)
m_head = 0;
@ -589,31 +594,28 @@ bool CEventQueue::AddEvent(const Event &event)
return result;
}
/** If the queue is empty, returns \c false.
Else, gets the event from the front, puts it into \a event and returns \c true. */
bool CEventQueue::GetEvent(Event &event)
Event CEventQueue::GetEvent()
{
bool result{};
Event event;
SDL_LockMutex(*m_mutex);
if (m_head == m_tail)
{
result = false;
event.type = EVENT_NULL;
}
else
{
event = m_fifo[m_tail++];
event = std::move(m_fifo[m_tail++]);
if (m_tail >= MAX_EVENT_QUEUE)
m_tail = 0;
m_total--;
result = true;
}
SDL_UnlockMutex(*m_mutex);
return result;
return event;
}

View File

@ -24,14 +24,16 @@
#pragma once
#include "common/key.h"
#include "common/make_unique.h"
#include "common/thread/sdl_mutex_wrapper.h"
#include "math/point.h"
#include "math/vector.h"
#include <memory>
/**
\enum EventType
\brief Type of event message
@ -543,13 +545,29 @@ enum EventType
EVENT_FORCE_LONG = 0x7fffffff
};
/**
* \struct EventData
* \brief Base class for additional event data
*/
struct EventData
{
virtual ~EventData()
{}
virtual std::unique_ptr<EventData> Clone() const = 0;
};
/**
* \struct KeyEventData
* \brief Additional data for keyboard event
*/
struct KeyEventData
struct KeyEventData : public EventData
{
std::unique_ptr<EventData> Clone() const override
{
return MakeUnique<KeyEventData>(*this);
}
//! If true, the key is a virtual code generated by certain key modifiers or joystick buttons
bool virt = false;
//! Key symbol: KEY(...) macro value or virtual key VIRTUAL_... (from common/key.h)
@ -580,8 +598,13 @@ enum MouseButton
* \struct MouseButtonEventData
* \brief Additional data mouse button event
*/
struct MouseButtonEventData
struct MouseButtonEventData : public EventData
{
std::unique_ptr<EventData> Clone() const override
{
return MakeUnique<MouseButtonEventData>(*this);
}
//! The mouse button
MouseButton button = {};
};
@ -600,8 +623,13 @@ enum WheelDirection
* \struct MouseWheelEventData
* \brief Additional data for mouse wheel event.
*/
struct MouseWheelEventData
struct MouseWheelEventData : public EventData
{
std::unique_ptr<EventData> Clone() const override
{
return MakeUnique<MouseWheelEventData>(*this);
}
//! Wheel direction
WheelDirection dir = {};
};
@ -610,8 +638,13 @@ struct MouseWheelEventData
* \struct JoyAxisEventData
* \brief Additional data for joystick axis event
*/
struct JoyAxisEventData
struct JoyAxisEventData : public EventData
{
std::unique_ptr<EventData> Clone() const override
{
return MakeUnique<JoyAxisEventData>(*this);
}
//! The joystick axis index
unsigned char axis = 0;
//! The axis value (range: -32768 to 32767)
@ -622,8 +655,13 @@ struct JoyAxisEventData
* \struct JoyButtonEventData
* \brief Additional data for joystick button event
*/
struct JoyButtonEventData
struct JoyButtonEventData : public EventData
{
std::unique_ptr<EventData> Clone() const override
{
return MakeUnique<JoyButtonEventData>(*this);
}
//! The joystick button index
unsigned char button = 0;
};
@ -647,15 +685,19 @@ enum ActiveEventFlags
* \struct ActiveEventData
* \brief Additional data for active event
*/
struct ActiveEventData
struct ActiveEventData : public EventData
{
std::unique_ptr<EventData> Clone() const override
{
return MakeUnique<ActiveEventData>(*this);
}
//! Flags (bitmask of enum values ActiveEventFlags)
unsigned char flags = 0;
//! True if the focus was gained; false otherwise
bool gain = false;
};
/**
* \struct Event
* \brief Event sent by system, interface or game
@ -669,6 +711,49 @@ struct ActiveEventData
**/
struct Event
{
explicit Event(EventType type = EVENT_NULL)
: type(type),
rTime(0.0f),
kmodState(0),
mouseButtonsState(0),
customParam(0)
{}
//! Convenience function for getting appropriate EventData subclass
template<typename EventDataSubclass>
EventDataSubclass* GetData()
{
return static_cast<EventDataSubclass*>(data.get());
}
//! Convenience function for getting appropriate EventData subclass
template<typename EventDataSubclass>
const EventDataSubclass* GetData() const
{
return static_cast<EventDataSubclass*>(data.get());
}
//! Returns a clone of this event
Event Clone() const
{
Event clone;
clone.type = type;
clone.rTime = rTime;
clone.motionInput = motionInput;
clone.kmodState = kmodState;
clone.mousePos = mousePos;
clone.mouseButtonsState = mouseButtonsState;
clone.customParam = customParam;
if (data != nullptr)
{
clone.data = data->Clone();
}
return clone;
}
//! Type of event
EventType type;
@ -697,30 +782,8 @@ struct Event
//! Scope: some interface events
long customParam;
//! Union with additional data, applicable only to some events
union
{
//! Additional data for EVENT_KEY_DOWN and EVENT_KEY_UP
KeyEventData key;
//! Additional data for EVENT_MOUSE_BUTTON_DOWN and EVENT_MOUSE_BUTTON_UP
MouseButtonEventData mouseButton;
//! Additional data for EVENT_MOUSE_WHEEL
MouseWheelEventData mouseWheel;
//! Additional data for EVENT_JOY
JoyAxisEventData joyAxis;
//! Additional data for EVENT_JOY_AXIS
JoyButtonEventData joyButton;
//! Additional data for EVENT_ACTIVE
ActiveEventData active;
};
explicit Event(EventType _type = EVENT_NULL)
: type(_type)
, rTime(0.0f)
, kmodState(0)
, mouseButtonsState(0)
, customParam(0)
{}
//! Additional data for some events
std::unique_ptr<EventData> data;
};
@ -754,10 +817,12 @@ public:
//! Object's destructor
~CEventQueue();
//! Checks if queue is empty
bool IsEmpty();
//! Adds an event to the queue
bool AddEvent(const Event &event);
//! Removes and returns an event from queue front
bool GetEvent(Event &event);
bool AddEvent(Event&& event);
//! Removes and returns an event from queue front; if queue is empty, returns event of type EVENT_NULL
Event GetEvent();
protected:
CSDLMutexWrapper m_mutex;

View File

@ -1055,7 +1055,7 @@ bool CCamera::EventProcess(const Event &event)
break;
case EVENT_MOUSE_WHEEL:
EventMouseWheel(event.mouseWheel.dir);
EventMouseWheel(event.GetData<MouseWheelEventData>()->dir);
break;
default:

View File

@ -407,19 +407,21 @@ bool CEngine::ProcessEvent(const Event &event)
{
if (event.type == EVENT_KEY_DOWN)
{
if (event.key.key == KEY(F12))
auto data = event.GetData<KeyEventData>();
if (data->key == KEY(F12))
{
m_showStats = !m_showStats;
return false;
}
if (event.key.key == KEY(F11))
if (data->key == KEY(F11))
{
m_debugLights = !m_debugLights;
return false;
}
if (event.key.key == KEY(F10))
if (data->key == KEY(F10))
{
m_debugDumpLights = true;
return false;
@ -524,8 +526,7 @@ void CEngine::WriteScreenShotThread(std::unique_ptr<WriteScreenShotData> data)
GetLogger()->Error("%s!\n", data->img->GetError().c_str());
}
Event event(EVENT_WRITE_SCENE_FINISHED);
CApplication::GetInstancePointer()->GetEventQueue()->AddEvent(event);
CApplication::GetInstancePointer()->GetEventQueue()->AddEvent(Event(EVENT_WRITE_SCENE_FINISHED));
}
bool CEngine::GetPause()

View File

@ -120,7 +120,6 @@ void CAutoBase::Start(int param)
bool CAutoBase::EventProcess(const Event &event)
{
Math::Matrix* mat;
Event newEvent;
CObject* pObj;
Math::Vector pos, speed, vibCir, iPos;
Math::Point dim, p;
@ -804,8 +803,7 @@ begin:
else
{
m_soundChannel = -1;
newEvent.type = EVENT_WIN;
m_eventQueue->AddEvent(newEvent);
m_eventQueue->AddEvent(Event(EVENT_WIN));
m_phase = ABP_WAIT;
m_progress = 0.0f;
@ -1054,7 +1052,6 @@ begin:
bool CAutoBase::Abort()
{
Event newEvent;
CObject* pObj;
int i;
@ -1137,8 +1134,7 @@ bool CAutoBase::Abort()
m_phase == ABP_TOWAIT ||
m_phase == ABP_TAKEOFF ) // off?
{
newEvent.type = EVENT_WIN;
m_eventQueue->AddEvent(newEvent);
m_eventQueue->AddEvent(Event(EVENT_WIN));
}
}
@ -1384,9 +1380,7 @@ Error CAutoBase::TakeOff(bool printMsg)
m_main->SetMovieLock(true); // blocks everything until the end
m_main->DeselectAll();
Event newEvent;
newEvent.type = EVENT_UPDINTERFACE;
m_eventQueue->AddEvent(newEvent);
m_eventQueue->AddEvent(Event(EVENT_UPDINTERFACE));
m_camera->SetType(Gfx::CAM_TYPE_SCRIPT);

View File

@ -226,9 +226,14 @@ bool CBrain::EventProcess(const Event &event)
action = EVENT_NULL;
if ( event.type == EVENT_KEY_DOWN &&
event.key.slot == INPUT_SLOT_ACTION &&
!m_main->GetEditLock() )
bool isActionSlot = false;
if (event.type == EVENT_KEY_DOWN && !m_main->GetEditLock())
{
auto data = event.GetData<KeyEventData>();
isActionSlot = data->slot == INPUT_SLOT_ACTION;
}
if (isActionSlot)
{
pw = static_cast< Ui::CWindow* >(m_interface->SearchControl(EVENT_WINDOW0));
if ( pw != 0 )
@ -248,19 +253,21 @@ bool CBrain::EventProcess(const Event &event)
action = event.type;
}
if(event.type == EVENT_KEY_DOWN && m_object->GetSelect())
if (event.type == EVENT_KEY_DOWN && m_object->GetSelect())
{
bool bControl = (event.kmodState & KEY_MOD(CTRL)) != 0;
bool bAlt = (event.kmodState & KEY_MOD(ALT)) != 0;
auto data = event.GetData<KeyEventData>();
bool control = (event.kmodState & KEY_MOD(CTRL)) != 0;
bool alt = (event.kmodState & KEY_MOD(ALT)) != 0;
CEventQueue* queue = CApplication::GetInstancePointer()->GetEventQueue();
if(event.key.slot == INPUT_SLOT_ACTION && bControl)
if (data->slot == INPUT_SLOT_ACTION && control)
{
queue->AddEvent(Event(m_studio == nullptr ? EVENT_OBJECT_PROGEDIT : EVENT_STUDIO_OK));
return false;
}
if(event.key.slot == INPUT_SLOT_ACTION && bAlt)
if (data->slot == INPUT_SLOT_ACTION && alt)
{
pw = static_cast< Ui::CWindow* >(m_interface->SearchControl(EVENT_WINDOW0));
if ( pw != 0 )
@ -277,16 +284,16 @@ bool CBrain::EventProcess(const Event &event)
return false;
}
if(bAlt)
if (alt)
{
int index = GetSelScript();
if(event.key.slot == INPUT_SLOT_UP)
if(data->slot == INPUT_SLOT_UP)
index--;
else if(event.key.slot == INPUT_SLOT_DOWN)
else if(data->slot == INPUT_SLOT_DOWN)
index++;
else if(event.key.key >= KEY(1) && event.key.key <= KEY(9))
index = event.key.key-KEY(1);
else if(event.key.key == KEY(0))
else if(data->key >= KEY(1) && data->key <= KEY(9))
index = data->key-KEY(1);
else if(data->key == KEY(0))
index = 9;
if(index < 0) index = m_program.size()-1;
if(index > static_cast<int>(m_program.size())-1) index = 0;
@ -295,9 +302,7 @@ bool CBrain::EventProcess(const Event &event)
{
SetSelScript(index);
Event newEvent = event;
newEvent.type = EVENT_OBJECT_PROGLIST;
queue->AddEvent(newEvent);
queue->AddEvent(Event(EVENT_OBJECT_PROGLIST));
return false;
}
}

View File

@ -666,11 +666,11 @@ bool CRobotMain::ProcessEvent(Event &event)
// Management of the console.
if (event.type == EVENT_KEY_DOWN &&
event.key.key == KEY(BACKQUOTE)) // Pause ?
event.GetData<KeyEventData>()->key == KEY(BACKQUOTE)) // Pause ?
{
if (m_phase != PHASE_PLAYER_SELECT &&
!m_movie->IsExist() &&
!m_movieLock && !m_editLock)
!m_movie->IsExist() &&
!m_movieLock && !m_editLock)
{
Ui::CEdit* pe = static_cast<Ui::CEdit*>(m_interface->SearchControl(EVENT_CMD));
if (pe == nullptr) return false;
@ -681,8 +681,9 @@ bool CRobotMain::ProcessEvent(Event &event)
}
return false;
}
if (event.type == EVENT_KEY_DOWN &&
event.key.key == KEY(RETURN) && m_cmdEdit)
event.GetData<KeyEventData>()->key == KEY(RETURN) && m_cmdEdit)
{
char cmd[50];
Ui::CEdit* pe = static_cast<Ui::CEdit*>(m_interface->SearchControl(EVENT_CMD));
@ -724,9 +725,11 @@ bool CRobotMain::ProcessEvent(Event &event)
if (event.type == EVENT_KEY_DOWN)
{
if (event.key.slot == INPUT_SLOT_HELP ||
event.key.slot == INPUT_SLOT_PROG ||
event.key.key == KEY(ESCAPE))
auto data = event.GetData<KeyEventData>();
if (data->slot == INPUT_SLOT_HELP ||
data->slot == INPUT_SLOT_PROG ||
data->key == KEY(ESCAPE))
{
StopDisplayInfo();
}
@ -749,21 +752,24 @@ bool CRobotMain::ProcessEvent(Event &event)
switch (event.type)
{
case EVENT_KEY_DOWN:
KeyCamera(event.type, event.key.slot);
{
auto data = event.GetData<KeyEventData>();
KeyCamera(event.type, data->slot);
HiliteClear();
if (event.key.key == KEY(F11))
if (data->key == KEY(F11))
{
m_particle->WriteWheelTrace("Savegame/t.png", 256, 256, Math::Vector(16.0f, 0.0f, -368.0f), Math::Vector(140.0f, 0.0f, -248.0f));
return false;
}
if (m_editLock) // current edition?
{
if (event.key.slot == INPUT_SLOT_HELP)
if (data->slot == INPUT_SLOT_HELP)
{
StartDisplayInfo(SATCOM_HUSTON, false);
return false;
}
if (event.key.slot == INPUT_SLOT_PROG)
if (data->slot == INPUT_SLOT_PROG)
{
StartDisplayInfo(SATCOM_PROG, false);
return false;
@ -772,8 +778,8 @@ bool CRobotMain::ProcessEvent(Event &event)
}
if (m_movieLock) // current movie?
{
if (event.key.slot == INPUT_SLOT_QUIT ||
event.key.key == KEY(ESCAPE))
if (data->slot == INPUT_SLOT_QUIT ||
data->key == KEY(ESCAPE))
{
AbortMovie();
}
@ -781,18 +787,18 @@ bool CRobotMain::ProcessEvent(Event &event)
}
if (m_camera->GetType() == Gfx::CAM_TYPE_VISIT)
{
if (event.key.slot == INPUT_SLOT_VISIT)
if (data->slot == INPUT_SLOT_VISIT)
{
StartDisplayVisit(EVENT_NULL);
}
if (event.key.slot == INPUT_SLOT_QUIT ||
event.key.key == KEY(ESCAPE))
if (data->slot == INPUT_SLOT_QUIT ||
data->key == KEY(ESCAPE))
{
StopDisplayVisit();
}
return false;
}
if (event.key.slot == INPUT_SLOT_QUIT)
if (data->slot == INPUT_SLOT_QUIT)
{
if (m_movie->IsExist())
StartDisplayInfo(SATCOM_HUSTON, false);
@ -803,7 +809,7 @@ bool CRobotMain::ProcessEvent(Event &event)
else if (!m_cmdEdit)
m_ui->GetDialog()->StartPauseMenu(); // do you want to leave?
}
if (event.key.slot == INPUT_SLOT_PAUSE)
if (data->slot == INPUT_SLOT_PAUSE)
{
if (!m_movieLock && !m_editLock && !m_cmdEdit &&
m_camera->GetType() != Gfx::CAM_TYPE_VISIT &&
@ -812,70 +818,70 @@ bool CRobotMain::ProcessEvent(Event &event)
ChangePause(m_pause->GetPause(PAUSE_USER) || m_pause->GetPause(PAUSE_CODE_BATTLE_LOCK) ? PAUSE_NONE : PAUSE_USER);
}
}
if (event.key.slot == INPUT_SLOT_CAMERA)
if (data->slot == INPUT_SLOT_CAMERA)
{
ChangeCamera();
}
if (event.key.slot == INPUT_SLOT_DESEL)
if (data->slot == INPUT_SLOT_DESEL)
{
if (m_shortCut)
DeselectObject();
}
if (event.key.slot == INPUT_SLOT_HUMAN)
if (data->slot == INPUT_SLOT_HUMAN)
{
SelectHuman();
}
if (event.key.slot == INPUT_SLOT_NEXT && ((event.kmodState & KEY_MOD(CTRL)) != 0))
if (data->slot == INPUT_SLOT_NEXT && ((event.kmodState & KEY_MOD(CTRL)) != 0))
{
m_short->SelectShortcut(EVENT_OBJECT_SHORTCUT_MODE); // switch bots <-> buildings
return false;
}
if (event.key.slot == INPUT_SLOT_NEXT)
if (data->slot == INPUT_SLOT_NEXT)
{
if (m_shortCut)
m_short->SelectNext();
}
if (event.key.slot == INPUT_SLOT_HELP)
if (data->slot == INPUT_SLOT_HELP)
{
StartDisplayInfo(SATCOM_HUSTON, true);
}
if (event.key.slot == INPUT_SLOT_PROG)
if (data->slot == INPUT_SLOT_PROG)
{
StartDisplayInfo(SATCOM_PROG, true);
}
if (event.key.slot == INPUT_SLOT_VISIT)
if (data->slot == INPUT_SLOT_VISIT)
{
StartDisplayVisit(EVENT_NULL);
}
if (event.key.slot == INPUT_SLOT_SPEED05)
if (data->slot == INPUT_SLOT_SPEED05)
{
SetSpeed(0.5f);
}
if (event.key.slot == INPUT_SLOT_SPEED10)
if (data->slot == INPUT_SLOT_SPEED10)
{
SetSpeed(1.0f);
}
if (event.key.slot == INPUT_SLOT_SPEED15)
if (data->slot == INPUT_SLOT_SPEED15)
{
SetSpeed(1.5f);
}
if (event.key.slot == INPUT_SLOT_SPEED20)
if (data->slot == INPUT_SLOT_SPEED20)
{
SetSpeed(2.0f);
}
if (event.key.slot == INPUT_SLOT_SPEED30)
if (data->slot == INPUT_SLOT_SPEED30)
{
SetSpeed(3.0f);
}
if (event.key.slot == INPUT_SLOT_SPEED40)
if (data->slot == INPUT_SLOT_SPEED40)
{
SetSpeed(4.0f);
}
if (event.key.slot == INPUT_SLOT_SPEED60)
if (data->slot == INPUT_SLOT_SPEED60)
{
SetSpeed(6.0f);
}
if (event.key.key == KEY(c) && ((event.kmodState & KEY_MOD(CTRL)) != 0) && m_engine->GetShowStats())
if (data->key == KEY(c) && ((event.kmodState & KEY_MOD(CTRL)) != 0) && m_engine->GetShowStats())
{
CObject* obj = GetSelect();
if (obj != nullptr)
@ -893,13 +899,18 @@ bool CRobotMain::ProcessEvent(Event &event)
}
}
break;
}
case EVENT_KEY_UP:
KeyCamera(event.type, event.key.slot);
{
auto data = event.GetData<KeyEventData>();
KeyCamera(event.type, data->slot);
break;
}
case EVENT_MOUSE_BUTTON_DOWN:
if (event.mouseButton.button != MOUSE_BUTTON_LEFT) // only left mouse button
{
if (event.GetData<MouseButtonEventData>()->button != MOUSE_BUTTON_LEFT) // only left mouse button
break;
obj = DetectObject(event.mousePos);
@ -917,11 +928,14 @@ bool CRobotMain::ProcessEvent(Event &event)
}
}
else
{
SelectObject(obj);
}
break;
}
case EVENT_MOUSE_BUTTON_UP:
if (event.mouseButton.button != MOUSE_BUTTON_LEFT) // only left mouse button
if (event.GetData<MouseButtonEventData>()->button != MOUSE_BUTTON_LEFT) // only left mouse button
break;
m_cameraPan = 0.0f;
@ -1026,8 +1040,11 @@ bool CRobotMain::ProcessEvent(Event &event)
switch (event.type)
{
case EVENT_KEY_DOWN:
if (event.key.key == KEY(ESCAPE) ||
event.key.key == KEY(RETURN))
{
auto data = event.GetData<KeyEventData>();
if (data->key == KEY(ESCAPE) ||
data->key == KEY(RETURN))
{
if (m_winTerminate)
ChangePhase(PHASE_MAIN_MENU);
@ -1035,6 +1052,7 @@ bool CRobotMain::ProcessEvent(Event &event)
ChangePhase(PHASE_LEVEL_LIST);
}
break;
}
case EVENT_BUTTON_OK:
if (m_winTerminate)

View File

@ -373,7 +373,7 @@ bool CScript::Continue(const Event &event)
if( m_botProg == 0 ) return true;
if ( !m_bRun ) return true;
m_event = event;
m_event = event.Clone();
if ( m_bStepMode ) // step by step mode?
{
@ -452,7 +452,7 @@ bool CScript::Step(const Event &event)
// TODO: m_app StepSimulation??? m_engine->StepSimulation(0.01f); // advance of 10ms
// ??? m_engine->SetPause(true);
m_event = event;
m_event = event.Clone();
if ( m_botProg->Run(m_object, 0) ) // step mode
{

View File

@ -89,16 +89,14 @@ bool CButton::EventProcess(const Event &event)
{
m_repeat = DELAY2;
Event newEvent = event;
newEvent.type = m_eventType;
m_event->AddEvent(newEvent);
m_event->AddEvent(Event(m_eventType));
return false;
}
}
}
if ( event.type == EVENT_MOUSE_BUTTON_DOWN &&
event.mouseButton.button == MOUSE_BUTTON_LEFT &&
event.GetData<MouseButtonEventData>()->button == MOUSE_BUTTON_LEFT &&
(m_state & STATE_VISIBLE) &&
(m_state & STATE_ENABLE) )
{
@ -109,9 +107,7 @@ bool CButton::EventProcess(const Event &event)
if ( m_bImmediat || m_bRepeat )
{
Event newEvent = event;
newEvent.type = m_eventType;
m_event->AddEvent(newEvent);
m_event->AddEvent(Event(m_eventType));
}
return false;
}
@ -122,16 +118,14 @@ bool CButton::EventProcess(const Event &event)
}
if ( event.type == EVENT_MOUSE_BUTTON_UP && //left
event.mouseButton.button == MOUSE_BUTTON_LEFT &&
event.GetData<MouseButtonEventData>()->button == MOUSE_BUTTON_LEFT &&
m_bCapture )
{
if ( CControl::Detect(event.mousePos) )
{
if ( !m_bImmediat && !m_bRepeat )
{
Event newEvent = event;
newEvent.type = m_eventType;
m_event->AddEvent(newEvent);
m_event->AddEvent(Event(m_eventType));
}
}

View File

@ -70,15 +70,13 @@ bool CCheck::EventProcess(const Event &event)
CControl::EventProcess(event);
if ( event.type == EVENT_MOUSE_BUTTON_DOWN &&
event.mouseButton.button == MOUSE_BUTTON_LEFT &&
event.GetData<MouseButtonEventData>()->button == MOUSE_BUTTON_LEFT &&
(m_state & STATE_VISIBLE) &&
(m_state & STATE_ENABLE) )
{
if ( CControl::Detect(event.mousePos) )
{
Event newEvent = event;
newEvent.type = m_eventType;
m_event->AddEvent(newEvent);
m_event->AddEvent(Event(m_eventType));
return false;
}
}

View File

@ -93,16 +93,14 @@ bool CColor::EventProcess(const Event &event)
{
m_repeat = DELAY2;
Event newEvent = event;
newEvent.type = m_eventType;
m_event->AddEvent(newEvent);
m_event->AddEvent(Event(m_eventType));
return false;
}
}
}
if ( event.type == EVENT_MOUSE_BUTTON_DOWN &&
event.mouseButton.button == MOUSE_BUTTON_LEFT &&
event.GetData<MouseButtonEventData>()->button == MOUSE_BUTTON_LEFT &&
(m_state & STATE_VISIBLE) &&
(m_state & STATE_ENABLE) )
{
@ -110,14 +108,13 @@ bool CColor::EventProcess(const Event &event)
{
m_repeat = DELAY1;
Event newEvent = event;
newEvent.type = m_eventType;
m_event->AddEvent(newEvent);
m_event->AddEvent(Event(m_eventType));
return false;
}
}
if ( event.type == EVENT_MOUSE_BUTTON_UP && event.mouseButton.button == MOUSE_BUTTON_LEFT)
if (event.type == EVENT_MOUSE_BUTTON_UP &&
event.GetData<MouseButtonEventData>()->button == MOUSE_BUTTON_LEFT)
{
m_repeat = 0.0f;
}

View File

@ -62,16 +62,12 @@ bool CCompass::EventProcess(const Event &event)
{
CControl::EventProcess(event);
if ( event.type == EVENT_MOUSE_BUTTON_DOWN &&
event.mouseButton.button == MOUSE_BUTTON_LEFT)
if (event.type == EVENT_MOUSE_BUTTON_DOWN &&
event.GetData<MouseButtonEventData>()->button == MOUSE_BUTTON_LEFT &&
Detect(event.mousePos))
{
if ( CControl::Detect(event.mousePos) )
{
Event newEvent = event;
newEvent.type = m_eventType;
m_event->AddEvent(newEvent);
return false;
}
m_event->AddEvent(Event(m_eventType));
return false;
}
return true;

View File

@ -329,7 +329,8 @@ bool CControl::EventProcess(const Event &event)
}
}
if ( event.type == EVENT_MOUSE_BUTTON_DOWN && event.mouseButton.button == MOUSE_BUTTON_LEFT)
if (event.type == EVENT_MOUSE_BUTTON_DOWN &&
event.GetData<MouseButtonEventData>()->button == MOUSE_BUTTON_LEFT)
{
if ( Detect(event.mousePos) )
{
@ -350,7 +351,9 @@ bool CControl::EventProcess(const Event &event)
}
}
if ( event.type == EVENT_MOUSE_BUTTON_UP && m_bCapture && event.mouseButton.button == MOUSE_BUTTON_LEFT)
if (event.type == EVENT_MOUSE_BUTTON_UP &&
m_bCapture &&
event.GetData<MouseButtonEventData>()->button == MOUSE_BUTTON_LEFT)
{
m_bCapture = false;
ClearState(STATE_PRESS);

View File

@ -239,17 +239,17 @@ bool CEdit::EventProcess(const Event &event)
if ( (m_state & STATE_VISIBLE) == 0 ) return true;
if (event.type == EVENT_MOUSE_WHEEL &&
event.mouseWheel.dir == WHEEL_UP &&
Detect(event.mousePos) )
Detect(event.mousePos))
{
Scroll(m_lineFirst-3, true);
return true;
}
if (event.type == EVENT_MOUSE_WHEEL &&
event.mouseWheel.dir == WHEEL_DOWN &&
Detect(event.mousePos) )
{
Scroll(m_lineFirst+3, true);
auto data = event.GetData<MouseWheelEventData>();
if (data->dir == WHEEL_UP)
{
Scroll(m_lineFirst - 3, true);
}
else
{
Scroll(m_lineFirst + 3, true);
}
return true;
}
@ -307,95 +307,95 @@ bool CEdit::EventProcess(const Event &event)
if ( event.type == EVENT_KEY_DOWN && m_bFocus )
{
if ( (event.key.key == KEY(x) && !bShift && bControl) ||
(event.key.key == KEY(DELETE) && bShift && !bControl) )
auto data = event.GetData<KeyEventData>();
if ( (data->key == KEY(x) && !bShift && bControl) ||
(data->key == KEY(DELETE) && bShift && !bControl) )
{
Cut();
return true;
}
if ( (event.key.key == KEY(c) && !bShift && bControl) ||
(event.key.key == KEY(INSERT) && !bShift && bControl) )
if ( (data->key == KEY(c) && !bShift && bControl) ||
(data->key == KEY(INSERT) && !bShift && bControl) )
{
Copy();
return true;
}
if ( (event.key.key == KEY(v) && !bShift && bControl) ||
(event.key.key == KEY(INSERT) && bShift && !bControl) )
if ( (data->key == KEY(v) && !bShift && bControl) ||
(data->key == KEY(INSERT) && bShift && !bControl) )
{
Paste();
return true;
}
if ( event.key.key == KEY(a) && !bShift && bControl )
if ( data->key == KEY(a) && !bShift && bControl )
{
SetCursor(999999, 0);
return true;
}
if ( event.key.key == KEY(o) && !bShift && bControl )
if ( data->key == KEY(o) && !bShift && bControl )
{
Event newEvent(EVENT_STUDIO_OPEN);
m_event->AddEvent(newEvent);
m_event->AddEvent(Event(EVENT_STUDIO_OPEN));
}
if ( event.key.key == KEY(s) && !bShift && bControl )
if ( data->key == KEY(s) && !bShift && bControl )
{
Event newEvent( EVENT_STUDIO_SAVE );
m_event->AddEvent(newEvent);
m_event->AddEvent(Event(EVENT_STUDIO_SAVE));
}
if ( event.key.key == KEY(z) && !bShift && bControl )
if ( data->key == KEY(z) && !bShift && bControl )
{
Undo();
return true;
}
if ( event.key.key == KEY(u) && !bShift && bControl )
if ( data->key == KEY(u) && !bShift && bControl )
{
if ( MinMaj(false) ) return true;
}
if ( event.key.key == KEY(u) && bShift && bControl )
if ( data->key == KEY(u) && bShift && bControl )
{
if ( MinMaj(true) ) return true;
}
if ( event.key.key == KEY(TAB) && !bShift && !bControl && !m_bAutoIndent )
if ( data->key == KEY(TAB) && !bShift && !bControl && !m_bAutoIndent )
{
if ( Shift(false) ) return true;
}
if ( event.key.key == KEY(TAB) && bShift && !bControl && !m_bAutoIndent )
if ( data->key == KEY(TAB) && bShift && !bControl && !m_bAutoIndent )
{
if ( Shift(true) ) return true;
}
if ( m_bEdit )
{
if ( event.key.key == KEY(LEFT) )
if ( data->key == KEY(LEFT) )
{
MoveChar(-1, bControl, bShift);
return true;
}
if ( event.key.key == KEY(RIGHT) )
if ( data->key == KEY(RIGHT) )
{
MoveChar(1, bControl, bShift);
return true;
}
if ( event.key.key == KEY(UP) && m_bMulti )
if ( data->key == KEY(UP) && m_bMulti )
{
MoveLine(-1, bControl, bShift);
return true;
}
if ( event.key.key == KEY(DOWN) && m_bMulti )
if ( data->key == KEY(DOWN) && m_bMulti )
{
MoveLine(1, bControl, bShift);
return true;
}
if ( event.key.key == KEY(PAGEUP) && m_bMulti ) // PageUp ?
if ( data->key == KEY(PAGEUP) && m_bMulti ) // PageUp ?
{
MoveLine(-(m_lineVisible-1), bControl, bShift);
return true;
}
if ( event.key.key == KEY(PAGEDOWN) && m_bMulti ) // PageDown ?
if ( data->key == KEY(PAGEDOWN) && m_bMulti ) // PageDown ?
{
MoveLine(m_lineVisible-1, bControl, bShift);
return true;
@ -403,62 +403,62 @@ bool CEdit::EventProcess(const Event &event)
}
else
{
if ( event.key.key == KEY(LEFT) ||
event.key.key == KEY(UP) )
if ( data->key == KEY(LEFT) ||
data->key == KEY(UP) )
{
Scroll(m_lineFirst-1, true);
return true;
}
if ( event.key.key == KEY(RIGHT) ||
event.key.key == KEY(DOWN) )
if ( data->key == KEY(RIGHT) ||
data->key == KEY(DOWN) )
{
Scroll(m_lineFirst+1, true);
return true;
}
if ( event.key.key == KEY(PAGEUP) ) // PageUp ?
if ( data->key == KEY(PAGEUP) ) // PageUp ?
{
Scroll(m_lineFirst-(m_lineVisible-1), true);
return true;
}
if ( event.key.key == KEY(PAGEDOWN) ) // PageDown ?
if ( data->key == KEY(PAGEDOWN) ) // PageDown ?
{
Scroll(m_lineFirst+(m_lineVisible-1), true);
return true;
}
}
if ( event.key.key == KEY(HOME) )
if ( data->key == KEY(HOME) )
{
MoveHome(bControl, bShift);
return true;
}
if ( event.key.key == KEY(END) )
if ( data->key == KEY(END) )
{
MoveEnd(bControl, bShift);
return true;
}
if ( event.key.key == KEY(BACKSPACE) && !bControl ) // backspace ( <- ) ?
if ( data->key == KEY(BACKSPACE) && !bControl ) // backspace ( <- ) ?
{
Delete(-1);
SendModifEvent();
return true;
}
if ( event.key.key == KEY(DELETE) && !bControl )
if ( data->key == KEY(DELETE) && !bControl )
{
Delete(1);
SendModifEvent();
return true;
}
if ( event.key.key == KEY(RETURN) && !bControl )
if ( data->key == KEY(RETURN) && !bControl )
{
Insert('\n');
SendModifEvent();
return true;
}
if ( event.key.key == KEY(TAB) && !bControl )
if ( data->key == KEY(TAB) && !bControl )
{
Insert('\t');
SendModifEvent();
@ -468,9 +468,10 @@ bool CEdit::EventProcess(const Event &event)
if ( event.type == EVENT_KEY_DOWN && !bControl && m_bFocus )
{
if (event.key.unicode >= ' ')
auto data = event.GetData<KeyEventData>();
if (data->unicode >= ' ')
{
Insert(static_cast<char>(event.key.unicode)); // TODO: insert utf-8 char
Insert(static_cast<char>(data->unicode)); // TODO: insert utf-8 char
SendModifEvent();
return true;
}
@ -488,8 +489,8 @@ bool CEdit::EventProcess(const Event &event)
}
}
if ( event.type == EVENT_MOUSE_BUTTON_DOWN &&
event.mouseButton.button == MOUSE_BUTTON_LEFT)
if (event.type == EVENT_MOUSE_BUTTON_DOWN &&
event.GetData<MouseButtonEventData>()->button == MOUSE_BUTTON_LEFT)
{
m_mouseFirstPos = event.mousePos;
m_mouseLastPos = event.mousePos;
@ -519,8 +520,8 @@ bool CEdit::EventProcess(const Event &event)
MouseMove(m_mouseLastPos);
}
if ( event.type == EVENT_MOUSE_BUTTON_UP &&
event.mouseButton.button == MOUSE_BUTTON_LEFT)
if (event.type == EVENT_MOUSE_BUTTON_UP &&
event.GetData<MouseButtonEventData>()->button == MOUSE_BUTTON_LEFT)
{
if ( Detect(event.mousePos) )
{
@ -548,10 +549,7 @@ bool CEdit::EventProcess(const Event &event)
void CEdit::SendModifEvent()
{
Event newEvent (m_eventType);
// m_event->MakeEvent(newEvent, m_eventType);
m_event->AddEvent(newEvent);
m_event->AddEvent(Event(m_eventType));
}

View File

@ -157,7 +157,7 @@ bool CEditValue::EventProcess(const Event &event)
{
if ( m_edit->GetFocus() &&
event.type == EVENT_KEY_DOWN &&
event.key.key == KEY(RETURN) )
event.GetData<KeyEventData>()->key == KEY(RETURN) )
{
value = GetValue();
if ( value > m_maxValue ) value = m_maxValue;
@ -169,8 +169,7 @@ bool CEditValue::EventProcess(const Event &event)
if ( event.type == m_edit->GetEventType() )
{
Event newEvent(m_eventType);
m_event->AddEvent(newEvent);
m_event->AddEvent(Event(m_eventType));
}
}
@ -199,7 +198,7 @@ bool CEditValue::EventProcess(const Event &event)
}
if (event.type == EVENT_MOUSE_WHEEL &&
event.mouseWheel.dir == WHEEL_UP &&
event.GetData<MouseWheelEventData>()->dir == WHEEL_UP &&
Detect(event.mousePos))
{
value = GetValue()+m_stepValue;
@ -207,8 +206,8 @@ bool CEditValue::EventProcess(const Event &event)
SetValue(value, true);
HiliteValue(event);
}
if ( event.type == EVENT_KEY_DOWN &&
event.mouseWheel.dir == WHEEL_DOWN &&
if ( event.type == EVENT_MOUSE_WHEEL &&
event.GetData<MouseWheelEventData>()->dir == WHEEL_DOWN &&
Detect(event.mousePos))
{
value = GetValue()-m_stepValue;
@ -238,10 +237,10 @@ void CEditValue::HiliteValue(const Event &event)
m_edit->SetCursor(pos, 0);
m_interface->SetFocus(m_edit);
Event newEvent = event;
Event newEvent = event.Clone();
newEvent.type = EVENT_FOCUS;
newEvent.customParam = m_edit->GetEventType();
m_event->AddEvent(newEvent); // defocus the other objects
m_event->AddEvent(std::move(newEvent)); // defocus the other objects
}
@ -315,8 +314,7 @@ void CEditValue::SetValue(float value, bool bSendMessage)
if ( bSendMessage )
{
Event newEvent(m_eventType);
m_event->AddEvent(newEvent);
m_event->AddEvent(Event(m_eventType));
}
}

View File

@ -60,9 +60,7 @@ bool CGauge::EventProcess(const Event &event)
{
if ( CControl::Detect(event.mousePos) )
{
Event newEvent = event;
newEvent.type = m_eventType;
m_event->AddEvent(newEvent);
m_event->AddEvent(Event(m_eventType));
return false;
}
}

View File

@ -68,14 +68,14 @@ bool CKey::EventProcess(const Event &event)
if (event.type == EVENT_MOUSE_BUTTON_DOWN)
{
if (event.mouseButton.button == MOUSE_BUTTON_LEFT) // left
if (event.GetData<MouseButtonEventData>()->button == MOUSE_BUTTON_LEFT) // left
m_catch = Detect(event.mousePos);
}
if (event.type == EVENT_KEY_DOWN && m_catch)
{
m_catch = false;
unsigned int key = GetVirtualKey(event.key.key);
unsigned int key = GetVirtualKey(event.GetData<KeyEventData>()->key);
if (TestKey(key)) // impossible ?
{
@ -95,9 +95,7 @@ bool CKey::EventProcess(const Event &event)
}
m_sound->Play(SOUND_CLICK);
Event newEvent = event;
newEvent.type = m_eventType;
m_event->AddEvent(newEvent);
m_event->AddEvent(Event(m_eventType));
}
return false;
}

View File

@ -270,10 +270,9 @@ bool CList::ClearState(int state)
bool CList::EventProcess(const Event &event)
{
int i;
if (m_bBlink && event.type == EVENT_FRAME)
{
i = m_selectLine-m_firstLine;
int i = m_selectLine-m_firstLine;
if (i >= 0 && i < 4 && m_button[i] != nullptr)
{
@ -296,19 +295,20 @@ bool CList::EventProcess(const Event &event)
if ((m_state & STATE_ENABLE) == 0)
return true;
if (event.type == EVENT_MOUSE_WHEEL && event.mouseWheel.dir == WHEEL_UP && Detect(event.mousePos))
if (event.type == EVENT_MOUSE_WHEEL && Detect(event.mousePos))
{
if (m_firstLine > 0)
m_firstLine--;
UpdateScroll();
UpdateButton();
return true;
}
auto data = event.GetData<MouseWheelEventData>();
if (data->dir == WHEEL_UP)
{
if (m_firstLine > 0)
m_firstLine--;
}
else
{
if (m_firstLine < m_totalLine - m_displayLine)
m_firstLine++;
}
if (event.type == EVENT_MOUSE_WHEEL && event.mouseWheel.dir == WHEEL_DOWN && Detect(event.mousePos))
{
if (m_firstLine < m_totalLine - m_displayLine)
m_firstLine++;
UpdateScroll();
UpdateButton();
return true;
@ -319,7 +319,7 @@ bool CList::EventProcess(const Event &event)
if (event.type == EVENT_MOUSE_MOVE && Detect(event.mousePos))
{
m_engine->SetMouseType(Gfx::ENG_MOUSE_NORM);
for (i = 0; i < m_displayLine; i++)
for (int i = 0; i < m_displayLine; i++)
{
if (i + m_firstLine >= m_totalLine)
break;
@ -330,7 +330,7 @@ bool CList::EventProcess(const Event &event)
if (m_bSelectCap)
{
for (i = 0; i < m_displayLine; i++)
for (int i = 0; i < m_displayLine; i++)
{
if (i + m_firstLine >= m_totalLine)
break;
@ -344,9 +344,7 @@ bool CList::EventProcess(const Event &event)
{
SetSelect(m_firstLine + i);
Event newEvent = event;
newEvent.type = m_eventType;
m_event->AddEvent(newEvent); // selected line changes
m_event->AddEvent(Event(m_eventType)); // selected line changes
}
}
}

View File

@ -191,8 +191,6 @@ bool CMap::GetFixImage()
bool CMap::EventProcess(const Event &event)
{
bool bInMap;
if ( (m_state & STATE_VISIBLE) == 0 )
return true;
@ -204,11 +202,13 @@ bool CMap::EventProcess(const Event &event)
if ( event.type == EVENT_MOUSE_MOVE && Detect(event.mousePos) )
{
m_engine->SetMouseType(Gfx::ENG_MOUSE_NORM);
if ( DetectObject(event.mousePos, bInMap) != 0 )
bool inMap = false;
if (DetectObject(event.mousePos, inMap) != nullptr)
m_engine->SetMouseType(Gfx::ENG_MOUSE_HAND);
}
if ( event.type == EVENT_MOUSE_BUTTON_DOWN && event.mouseButton.button == MOUSE_BUTTON_LEFT )
if (event.type == EVENT_MOUSE_BUTTON_DOWN &&
event.GetData<MouseButtonEventData>()->button == MOUSE_BUTTON_LEFT)
{
if ( CControl::Detect(event.mousePos) )
{

View File

@ -218,9 +218,7 @@ bool CScroll::EventProcess(const Event &event)
if ( m_visibleValue < 0.0f ) m_visibleValue = 0.0f;
AdjustGlint();
Event newEvent = event;
newEvent.type = m_eventType;
m_event->AddEvent(newEvent);
m_event->AddEvent(Event(m_eventType));
}
if ( event.type == m_eventDown && m_step > 0.0f )
@ -229,17 +227,15 @@ bool CScroll::EventProcess(const Event &event)
if ( m_visibleValue > 1.0f ) m_visibleValue = 1.0f;
AdjustGlint();
Event newEvent = event;
newEvent.type = m_eventType;
m_event->AddEvent(newEvent);
m_event->AddEvent(Event(m_eventType));
}
hButton = m_buttonUp?m_dim.x/0.75f:0.0f;
if ( event.type == EVENT_MOUSE_BUTTON_DOWN &&
event.mouseButton.button == MOUSE_BUTTON_LEFT &&
(m_state & STATE_VISIBLE) &&
(m_state & STATE_ENABLE) )
if (event.type == EVENT_MOUSE_BUTTON_DOWN &&
event.GetData<MouseButtonEventData>()->button == MOUSE_BUTTON_LEFT &&
(m_state & STATE_VISIBLE) &&
(m_state & STATE_ENABLE) )
{
if ( CControl::Detect(event.mousePos) )
{
@ -257,9 +253,7 @@ bool CScroll::EventProcess(const Event &event)
m_visibleValue = value;
AdjustGlint();
Event newEvent = event;
newEvent.type = m_eventType;
m_event->AddEvent(newEvent);
m_event->AddEvent(Event(m_eventType));
}
m_bCapture = true;
m_pressPos = event.mousePos;
@ -281,37 +275,31 @@ bool CScroll::EventProcess(const Event &event)
m_visibleValue = value;
AdjustGlint();
Event newEvent = event;
newEvent.type = m_eventType;
m_event->AddEvent(newEvent);
m_event->AddEvent(Event(m_eventType));
}
}
}
if ( event.type == EVENT_MOUSE_BUTTON_UP &&
event.mouseButton.button == MOUSE_BUTTON_LEFT &&
m_bCapture )
if (event.type == EVENT_MOUSE_BUTTON_UP &&
event.GetData<MouseButtonEventData>()->button == MOUSE_BUTTON_LEFT &&
m_bCapture)
{
m_bCapture = false;
}
if (event.type == EVENT_MOUSE_WHEEL &&
event.mouseWheel.dir == WHEEL_UP &&
event.GetData<MouseWheelEventData>()->dir == WHEEL_UP &&
Detect(event.mousePos) &&
m_buttonUp != 0)
m_buttonUp != nullptr)
{
Event newEvent = event;
newEvent.type = m_buttonUp->GetEventType();
m_event->AddEvent(newEvent);
m_event->AddEvent(Event(m_buttonUp->GetEventType()));
}
if (event.type == EVENT_MOUSE_WHEEL &&
event.mouseWheel.dir == WHEEL_DOWN &&
event.GetData<MouseWheelEventData>()->dir == WHEEL_DOWN &&
Detect(event.mousePos) &&
m_buttonDown != 0)
m_buttonDown != nullptr)
{
Event newEvent = event;
newEvent.type = m_buttonDown->GetEventType();
m_event->AddEvent(newEvent);
m_event->AddEvent(Event(m_buttonDown->GetEventType()));
}
return true;

View File

@ -68,14 +68,12 @@ bool CShortcut::EventProcess(const Event &event)
m_time += event.rTime;
}
if ( event.type == EVENT_MOUSE_BUTTON_DOWN &&
event.mouseButton.button == MOUSE_BUTTON_LEFT)
if (event.type == EVENT_MOUSE_BUTTON_DOWN &&
event.GetData<MouseButtonEventData>()->button == MOUSE_BUTTON_LEFT)
{
if ( CControl::Detect(event.mousePos) )
{
Event newEvent = event;
newEvent.type = m_eventType;
m_event->AddEvent(newEvent);
m_event->AddEvent(Event(m_eventType));
return false;
}
}

View File

@ -270,9 +270,7 @@ bool CSlider::EventProcess(const Event &event)
if ( m_visibleValue > 1.0f ) m_visibleValue = 1.0f;
AdjustGlint();
Event newEvent = event;
newEvent.type = m_eventType;
m_event->AddEvent(newEvent);
m_event->AddEvent(Event(m_eventType));
}
if ( event.type == m_eventDown && m_step > 0.0f )
@ -282,15 +280,13 @@ bool CSlider::EventProcess(const Event &event)
if ( m_visibleValue > 1.0f ) m_visibleValue = 1.0f;
AdjustGlint();
Event newEvent = event;
newEvent.type = m_eventType;
m_event->AddEvent(newEvent);
m_event->AddEvent(Event(m_eventType));
}
if ( event.type == EVENT_MOUSE_BUTTON_DOWN &&
(event.mouseButton.button == MOUSE_BUTTON_LEFT ) &&
(m_state & STATE_VISIBLE) &&
(m_state & STATE_ENABLE) )
if (event.type == EVENT_MOUSE_BUTTON_DOWN &&
event.GetData<MouseButtonEventData>()->button == MOUSE_BUTTON_LEFT &&
(m_state & STATE_VISIBLE) &&
(m_state & STATE_ENABLE))
{
if ( CControl::Detect(event.mousePos) )
{
@ -313,9 +309,7 @@ bool CSlider::EventProcess(const Event &event)
m_visibleValue = value;
AdjustGlint();
Event newEvent = event;
newEvent.type = m_eventType;
m_event->AddEvent(newEvent);
m_event->AddEvent(Event(m_eventType));
m_bCapture = true;
m_pressPos = event.mousePos;
@ -347,37 +341,31 @@ bool CSlider::EventProcess(const Event &event)
m_visibleValue = value;
AdjustGlint();
Event newEvent = event;
newEvent.type = m_eventType;
m_event->AddEvent(newEvent);
m_event->AddEvent(Event(m_eventType));
}
}
if ( ( event.type == EVENT_MOUSE_BUTTON_UP ) &&
( event.mouseButton.button == MOUSE_BUTTON_LEFT ) &&
m_bCapture )
if (event.type == EVENT_MOUSE_BUTTON_UP &&
event.GetData<MouseButtonEventData>()->button == MOUSE_BUTTON_LEFT &&
m_bCapture)
{
m_bCapture = false;
}
if (event.type == EVENT_MOUSE_WHEEL &&
event.mouseWheel.dir == WHEEL_UP &&
event.GetData<MouseWheelEventData>()->dir == WHEEL_UP &&
Detect(event.mousePos) &&
m_buttonLeft != 0)
m_buttonLeft != nullptr)
{
Event newEvent = event;
newEvent.type = m_buttonLeft->GetEventType();
m_event->AddEvent(newEvent);
m_event->AddEvent(Event(m_buttonLeft->GetEventType()));
}
if (event.type == EVENT_MOUSE_WHEEL &&
event.mouseWheel.dir == WHEEL_DOWN &&
event.GetData<MouseWheelEventData>()->dir == WHEEL_DOWN &&
Detect(event.mousePos) &&
m_buttonRight != 0)
m_buttonRight != nullptr)
{
Event newEvent = event;
newEvent.type = m_buttonRight->GetEventType();
m_event->AddEvent(newEvent);
m_event->AddEvent(Event(m_buttonRight->GetEventType()));
}
return true;

View File

@ -74,7 +74,7 @@ bool CTarget::EventProcess(const Event &event)
}
if ( event.type == EVENT_MOUSE_BUTTON_DOWN &&
event.mouseButton.button == MOUSE_BUTTON_LEFT &&
event.GetData<MouseButtonEventData>()->button == MOUSE_BUTTON_LEFT &&
(m_state & STATE_VISIBLE) &&
(m_state & STATE_ENABLE) )
{
@ -107,9 +107,7 @@ bool CTarget::EventProcess(const Event &event)
{
m_engine->SetMouseType(Gfx::ENG_MOUSE_TARGET);
Event newEvent = event;
newEvent.type = m_eventType;
m_event->AddEvent(newEvent);
m_event->AddEvent(Event(m_eventType));
return false;
}
else
@ -120,18 +118,16 @@ bool CTarget::EventProcess(const Event &event)
}
}
if ( event.type == EVENT_MOUSE_BUTTON_DOWN &&
event.mouseButton.button == MOUSE_BUTTON_LEFT &&
(m_state & STATE_VISIBLE) &&
(m_state & STATE_ENABLE) )
if (event.type == EVENT_MOUSE_BUTTON_DOWN &&
event.GetData<MouseButtonEventData>()->button == MOUSE_BUTTON_LEFT &&
(m_state & STATE_VISIBLE) &&
(m_state & STATE_ENABLE))
{
if ( CControl::Detect(event.mousePos) )
{
if ( !m_main->GetFriendAim() )
{
Event newEvent = event;
newEvent.type = EVENT_OBJECT_FIRE;
m_event->AddEvent(newEvent);
m_event->AddEvent(Event(EVENT_OBJECT_FIRE));
return false;
}
}

View File

@ -998,8 +998,9 @@ bool CWindow::EventProcess(const Event &event)
}
}
if ( m_bTrashEvent && event.type == EVENT_MOUSE_BUTTON_DOWN &&
event.mouseButton.button == MOUSE_BUTTON_LEFT)
if (m_bTrashEvent &&
event.type == EVENT_MOUSE_BUTTON_DOWN &&
event.GetData<MouseButtonEventData>()->button == MOUSE_BUTTON_LEFT)
{
if ( Detect(event.mousePos) )
{
@ -1064,12 +1065,12 @@ bool CWindow::EventProcess(const Event &event)
m_pressPos = pos;
AdjustButtons();
Event newEvent = event;
newEvent.type = m_eventType;
m_event->AddEvent(newEvent);
m_event->AddEvent(Event(m_eventType));
}
if ( event.type == EVENT_MOUSE_BUTTON_UP && event.mouseButton.button == MOUSE_BUTTON_LEFT && m_bCapture )
if (event.type == EVENT_MOUSE_BUTTON_UP &&
event.GetData<MouseButtonEventData>()->button == MOUSE_BUTTON_LEFT &&
m_bCapture )
{
m_bCapture = false;
}

View File

@ -116,9 +116,7 @@ bool CDisplayInfo::EventProcess(const Event &event)
{
if ( event.type == pw->GetEventTypeClose() )
{
Event newEvent = event;
newEvent.type = EVENT_OBJECT_INFOOK;
m_event->AddEvent(newEvent);
m_event->AddEvent(Event(EVENT_OBJECT_INFOOK));
}
if ( event.type == EVENT_SATCOM_HUSTON )
@ -204,8 +202,8 @@ bool CDisplayInfo::EventProcess(const Event &event)
}
}
if ( ( event.type == EVENT_MOUSE_BUTTON_DOWN && event.mouseButton.button == MOUSE_BUTTON_LEFT )||
( event.type == EVENT_MOUSE_BUTTON_UP && event.mouseButton.button == MOUSE_BUTTON_LEFT ))
if ((event.type == EVENT_MOUSE_BUTTON_DOWN || event.type == EVENT_MOUSE_BUTTON_UP) &&
event.GetData<MouseButtonEventData>()->button == MOUSE_BUTTON_LEFT)
{
UpdateCopyButton();
}

View File

@ -77,11 +77,11 @@ bool CMainDialog::EventProcess(const Event &event)
}
EventType pressedButton = event.type;
if (event.type == EVENT_KEY_DOWN && event.key.key == KEY(RETURN) )
if (event.type == EVENT_KEY_DOWN && event.GetData<KeyEventData>()->key == KEY(RETURN) )
{
pressedButton = EVENT_DIALOG_OK;
}
if (event.type == EVENT_KEY_DOWN && event.key.key == KEY(ESCAPE) )
if (event.type == EVENT_KEY_DOWN && event.GetData<KeyEventData>()->key == KEY(ESCAPE) )
{
pressedButton = EVENT_DIALOG_CANCEL;
}

View File

@ -315,15 +315,19 @@ bool CScreenApperance::EventProcess(const Event &event)
switch( event.type )
{
case EVENT_KEY_DOWN:
if ( event.key.key == KEY(RETURN) )
{
auto data = event.GetData<KeyEventData>();
if (data->key == KEY(RETURN))
{
m_main->ChangePhase(PHASE_MAIN_MENU);
}
if ( event.key.key == KEY(ESCAPE) )
if (data->key == KEY(ESCAPE))
{
m_main->ChangePhase(PHASE_PLAYER_SELECT);
}
break;
}
case EVENT_INTERFACE_PHEAD:
m_apperanceTab = 0;

View File

@ -126,7 +126,7 @@ bool CScreenIORead::EventProcess(const Event &event)
if ( event.type == pw->GetEventTypeClose() ||
event.type == EVENT_INTERFACE_BACK ||
(event.type == EVENT_KEY_DOWN && event.key.key == KEY(ESCAPE)) )
(event.type == EVENT_KEY_DOWN && event.GetData<KeyEventData>()->key == KEY(ESCAPE)) )
{
m_main->ChangePhase(PHASE_LEVEL_LIST);
return false;
@ -139,7 +139,7 @@ bool CScreenIORead::EventProcess(const Event &event)
if ( event.type == pw->GetEventTypeClose() ||
event.type == EVENT_INTERFACE_BACK ||
(event.type == EVENT_KEY_DOWN && event.key.key == KEY(ESCAPE)) )
(event.type == EVENT_KEY_DOWN && event.GetData<KeyEventData>()->key == KEY(ESCAPE)) )
{
m_interface->DeleteControl(EVENT_WINDOW5);
m_main->ChangePhase(PHASE_SIMUL);

View File

@ -127,7 +127,7 @@ bool CScreenIOWrite::EventProcess(const Event &event)
if ( event.type == pw->GetEventTypeClose() ||
event.type == EVENT_INTERFACE_BACK ||
(event.type == EVENT_KEY_DOWN && event.key.key == KEY(ESCAPE)) )
(event.type == EVENT_KEY_DOWN && event.GetData<KeyEventData>()->key == KEY(ESCAPE)) )
{
m_interface->DeleteControl(EVENT_WINDOW5);
m_main->ChangePhase(PHASE_SIMUL);

View File

@ -245,7 +245,7 @@ bool CScreenLevelList::EventProcess(const Event &event)
if ( event.type == pw->GetEventTypeClose() ||
event.type == EVENT_INTERFACE_BACK ||
(event.type == EVENT_KEY_DOWN && event.key.key == KEY(ESCAPE)) )
(event.type == EVENT_KEY_DOWN && event.GetData<KeyEventData>()->key == KEY(ESCAPE)) )
{
m_main->ChangePhase(PHASE_MAIN_MENU);
return false;

View File

@ -167,7 +167,7 @@ bool CScreenMainMenu::EventProcess(const Event &event)
switch (event.type)
{
case EVENT_KEY_DOWN:
if ( event.key.key == KEY(ESCAPE) )
if ( event.GetData<KeyEventData>()->key == KEY(ESCAPE) )
{
m_sound->Play(SOUND_TZOING);
m_main->ChangePhase(PHASE_QUIT_SCREEN);

View File

@ -158,11 +158,13 @@ bool CScreenPlayerSelect::EventProcess(const Event &event)
switch( event.type )
{
case EVENT_KEY_DOWN:
if ( event.key.key == KEY(RETURN) )
{
auto data = event.GetData<KeyEventData>();
if (data->key == KEY(RETURN))
{
NameSelect();
}
if ( event.key.key == KEY(ESCAPE) )
if (data->key == KEY(ESCAPE))
{
pw = static_cast<CWindow*>(m_interface->SearchControl(EVENT_WINDOW5));
if ( pw == 0 ) break;
@ -174,6 +176,7 @@ bool CScreenPlayerSelect::EventProcess(const Event &event)
}
}
break;
}
case EVENT_INTERFACE_NEDIT:
UpdateNameList();

View File

@ -111,7 +111,7 @@ bool CScreenQuit::EventProcess(const Event &event)
if ( event.type == EVENT_KEY_DOWN )
{
if ( event.key.key == KEY(ESCAPE) )
if ( event.GetData<KeyEventData>()->key == KEY(ESCAPE) )
{
m_main->ChangePhase(PHASE_MAIN_MENU);
return false;

View File

@ -151,7 +151,7 @@ bool CScreenSetup::EventProcess(const Event &event)
if ( event.type == pw->GetEventTypeClose() ||
event.type == EVENT_INTERFACE_BACK ||
(event.type == EVENT_KEY_DOWN && event.key.key == KEY(ESCAPE)) )
(event.type == EVENT_KEY_DOWN && event.GetData<KeyEventData>()->key == KEY(ESCAPE)) )
{
m_settings->SaveSettings();
m_engine->ApplyChange();
@ -192,7 +192,7 @@ bool CScreenSetup::EventProcess(const Event &event)
if ( event.type == pw->GetEventTypeClose() ||
event.type == EVENT_INTERFACE_BACK ||
(event.type == EVENT_KEY_DOWN && event.key.key == KEY(ESCAPE)) )
(event.type == EVENT_KEY_DOWN && event.GetData<KeyEventData>()->key == KEY(ESCAPE)) )
{
m_settings->SaveSettings();
m_engine->ApplyChange();

View File

@ -124,9 +124,7 @@ bool CStudio::EventProcess(const Event &event)
if ( event.type == pw->GetEventTypeClose() )
{
Event newEvent = event;
newEvent.type = EVENT_STUDIO_OK;
m_event->AddEvent(newEvent);
m_event->AddEvent(Event(EVENT_STUDIO_OK));
}
if ( event.type == EVENT_STUDIO_EDIT ) // text modifief?
@ -209,9 +207,7 @@ bool CStudio::EventProcess(const Event &event)
{
if ( m_script->IsRunning() )
{
Event newEvent = event;
newEvent.type = EVENT_OBJECT_PROGSTOP;
m_event->AddEvent(newEvent); // stop
m_event->AddEvent(Event(EVENT_OBJECT_PROGSTOP));
}
else
{
@ -219,9 +215,7 @@ bool CStudio::EventProcess(const Event &event)
{
SetInfoText("", false);
Event newEvent = event;
newEvent.type = EVENT_OBJECT_PROGSTART;
m_event->AddEvent(newEvent); // start
m_event->AddEvent(Event(EVENT_OBJECT_PROGSTART));
}
else
{
@ -361,9 +355,7 @@ bool CStudio::EventFrame(const Event &event)
GetResource(RES_TEXT, RT_STUDIO_PROGSTOP, res);
SetInfoText(res, false);
Event newEvent = event;
newEvent.type = EVENT_OBJECT_PROGSTOP;
m_event->AddEvent(newEvent); // stop
m_event->AddEvent(Event(EVENT_OBJECT_PROGSTOP));
}
if ( m_script->IsRunning() && !m_bRunning ) // starting?
@ -1393,7 +1385,7 @@ bool CStudio::EventDialog(const Event &event)
}
if ( event.type == EVENT_DIALOG_OK ||
(event.type == EVENT_KEY_DOWN && event.key.key == KEY(RETURN)) )
(event.type == EVENT_KEY_DOWN && event.GetData<KeyEventData>()->key == KEY(RETURN)) )
{
if ( m_dialog == SD_OPEN )
{
@ -1409,7 +1401,7 @@ bool CStudio::EventDialog(const Event &event)
}
if ( event.type == EVENT_DIALOG_CANCEL ||
(event.type == EVENT_KEY_DOWN && event.key.key == KEY(ESCAPE)) ||
(event.type == EVENT_KEY_DOWN && event.GetData<KeyEventData>()->key == KEY(ESCAPE)) ||
event.type == pw->GetEventTypeClose() )
{
StopDialog();