00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #include "xrb_eventhandler.hpp"
00012
00013 #include "xrb_event.hpp"
00014 #include "xrb_eventqueue.hpp"
00015
00016 namespace Xrb
00017 {
00018
00019 EventHandler::EventHandler (EventQueue *const owner_event_queue)
00020 {
00021 m_owner_event_queue = owner_event_queue;
00022 m_is_blocking_events = false;
00023 m_most_recent_event_time = -1.0;
00024 m_current_event_time = -1.0;
00025 m_event_dt = -1.0;
00026 }
00027
00028 EventHandler::~EventHandler ()
00029 {
00030 if (m_owner_event_queue != NULL)
00031 {
00032 m_owner_event_queue->DeleteEventsBelongingToHandler(this);
00033 m_owner_event_queue = NULL;
00034 }
00035
00036 m_is_blocking_events = true;
00037 }
00038
00039 bool EventHandler::ProcessEvent (Event const *const e)
00040 {
00041 ASSERT1(e != NULL);
00042 ASSERT1(!e->IsScheduledForDeletion());
00043
00044
00045
00046 Float event_time = e->Time();
00047 if (event_time < m_most_recent_event_time)
00048 event_time = m_most_recent_event_time;
00049
00050
00051 if (IsBlockingEvents())
00052 return false;
00053
00054
00055 m_current_event_time = event_time;
00056
00057 if (m_most_recent_event_time < 0.0)
00058 m_most_recent_event_time = m_current_event_time;
00059
00060 m_event_dt = m_current_event_time - m_most_recent_event_time;
00061
00062 if (HandleEvent(e))
00063 {
00064
00065 m_most_recent_event_time = m_current_event_time;
00066
00067 return true;
00068 }
00069
00070
00071
00072 m_event_dt = -1.0;
00073
00074
00075 return false;
00076 }
00077
00078 void EventHandler::EnqueueEvent (Event const *const e)
00079 {
00080 ASSERT1(e != NULL);
00081 ASSERT0(m_owner_event_queue != NULL);
00082 m_owner_event_queue->EnqueueEvent(this, e);
00083 }
00084
00085 }