Преглед изворни кода

Invader sample: Rename event listener and instancer for clarity

Michael Ragazzon пре 3 година
родитељ
комит
1a13d4d07f

+ 4 - 4
CMake/SampleFileList.cmake

@@ -161,12 +161,12 @@ set(invaders_HDR_FILES
     ${PROJECT_SOURCE_DIR}/Samples/invaders/src/DecoratorStarfield.h
     ${PROJECT_SOURCE_DIR}/Samples/invaders/src/Defender.h
     ${PROJECT_SOURCE_DIR}/Samples/invaders/src/ElementGame.h
-    ${PROJECT_SOURCE_DIR}/Samples/invaders/src/Event.h
     ${PROJECT_SOURCE_DIR}/Samples/invaders/src/EventHandler.h
     ${PROJECT_SOURCE_DIR}/Samples/invaders/src/EventHandlerHighScore.h
     ${PROJECT_SOURCE_DIR}/Samples/invaders/src/EventHandlerOptions.h
     ${PROJECT_SOURCE_DIR}/Samples/invaders/src/EventHandlerStartGame.h
-    ${PROJECT_SOURCE_DIR}/Samples/invaders/src/EventInstancer.h
+    ${PROJECT_SOURCE_DIR}/Samples/invaders/src/EventListener.h
+    ${PROJECT_SOURCE_DIR}/Samples/invaders/src/EventListenerInstancer.h
     ${PROJECT_SOURCE_DIR}/Samples/invaders/src/EventManager.h
     ${PROJECT_SOURCE_DIR}/Samples/invaders/src/Game.h
     ${PROJECT_SOURCE_DIR}/Samples/invaders/src/GameDetails.h
@@ -184,12 +184,12 @@ set(invaders_SRC_FILES
     ${PROJECT_SOURCE_DIR}/Samples/invaders/src/DecoratorStarfield.cpp
     ${PROJECT_SOURCE_DIR}/Samples/invaders/src/Defender.cpp
     ${PROJECT_SOURCE_DIR}/Samples/invaders/src/ElementGame.cpp
-    ${PROJECT_SOURCE_DIR}/Samples/invaders/src/Event.cpp
     ${PROJECT_SOURCE_DIR}/Samples/invaders/src/EventHandler.cpp
     ${PROJECT_SOURCE_DIR}/Samples/invaders/src/EventHandlerHighScore.cpp
     ${PROJECT_SOURCE_DIR}/Samples/invaders/src/EventHandlerOptions.cpp
     ${PROJECT_SOURCE_DIR}/Samples/invaders/src/EventHandlerStartGame.cpp
-    ${PROJECT_SOURCE_DIR}/Samples/invaders/src/EventInstancer.cpp
+    ${PROJECT_SOURCE_DIR}/Samples/invaders/src/EventListener.cpp
+    ${PROJECT_SOURCE_DIR}/Samples/invaders/src/EventListenerInstancer.cpp
     ${PROJECT_SOURCE_DIR}/Samples/invaders/src/EventManager.cpp
     ${PROJECT_SOURCE_DIR}/Samples/invaders/src/Game.cpp
     ${PROJECT_SOURCE_DIR}/Samples/invaders/src/GameDetails.cpp

+ 0 - 8
Samples/invaders/src/EventHandler.h

@@ -31,14 +31,6 @@
 
 #include <RmlUi/Core/Types.h>
 
-namespace Rml {
-namespace Core {
-
-class Event;
-
-}
-}
-
 /**
 	@author Peter Curry
  */

+ 5 - 5
Samples/invaders/src/Event.cpp → Samples/invaders/src/EventListener.cpp

@@ -26,25 +26,25 @@
  *
  */
 
-#include "Event.h"
+#include "EventListener.h"
 #include "EventManager.h"
 
-Event::Event(const Rml::String& value) : value(value)
+EventListener::EventListener(const Rml::String& value) : value(value)
 {
 }
 
-Event::~Event()
+EventListener::~EventListener()
 {
 }
 
 // Sends the event value through to Invader's event processing system.
-void Event::ProcessEvent(Rml::Event& event)
+void EventListener::ProcessEvent(Rml::Event& event)
 {
 	EventManager::ProcessEvent(event, value);
 }
 
 // Destroys the event.
-void Event::OnDetach(Rml::Element* RMLUI_UNUSED_PARAMETER(element))
+void EventListener::OnDetach(Rml::Element* RMLUI_UNUSED_PARAMETER(element))
 {
 	RMLUI_UNUSED(element);
 

+ 5 - 5
Samples/invaders/src/Event.h → Samples/invaders/src/EventListener.h

@@ -26,8 +26,8 @@
  *
  */
 
-#ifndef RMLUI_INVADERS_EVENT_H
-#define RMLUI_INVADERS_EVENT_H
+#ifndef RMLUI_INVADERS_EVENTLISTENER_H
+#define RMLUI_INVADERS_EVENTLISTENER_H
 
 #include <RmlUi/Core/EventListener.h>
 
@@ -35,11 +35,11 @@
 	@author Peter Curry
  */
 
-class Event : public Rml::EventListener
+class EventListener : public Rml::EventListener
 {
 public:
-	Event(const Rml::String& value);
-	virtual ~Event();
+	EventListener(const Rml::String& value);
+	virtual ~EventListener();
 
 	/// Sends the event value through to Invader's event processing system.
 	void ProcessEvent(Rml::Event& event) override;

+ 6 - 6
Samples/invaders/src/EventInstancer.cpp → Samples/invaders/src/EventListenerInstancer.cpp

@@ -26,19 +26,19 @@
  *
  */
 
-#include "EventInstancer.h"
-#include "Event.h"
+#include "EventListenerInstancer.h"
+#include "EventListener.h"
 
-EventInstancer::EventInstancer()
+EventListenerInstancer::EventListenerInstancer()
 {
 }
 
-EventInstancer::~EventInstancer()
+EventListenerInstancer::~EventListenerInstancer()
 {
 }
 
 // Instances a new event handle for Invaders.
-Rml::EventListener* EventInstancer::InstanceEventListener(const Rml::String& value, Rml::Element* /*element*/)
+Rml::EventListener* EventListenerInstancer::InstanceEventListener(const Rml::String& value, Rml::Element* /*element*/)
 {
-	return new Event(value);
+	return new EventListener(value);
 }

+ 6 - 6
Samples/invaders/src/EventInstancer.h → Samples/invaders/src/EventListenerInstancer.h

@@ -26,8 +26,8 @@
  *
  */
 
-#ifndef RMLUI_INVADERS_EVENTINSTANCER_H
-#define RMLUI_INVADERS_EVENTINSTANCER_H
+#ifndef RMLUI_INVADERS_EVENTLISTENERINSTANCER_H
+#define RMLUI_INVADERS_EVENTLISTENERINSTANCER_H
 
 #include <RmlUi/Core/EventListenerInstancer.h>
 
@@ -35,13 +35,13 @@
 	@author Peter Curry
  */
 
-class EventInstancer : public Rml::EventListenerInstancer
+class EventListenerInstancer : public Rml::EventListenerInstancer
 {
 public:
-	EventInstancer();
-	virtual ~EventInstancer();
+	EventListenerInstancer();
+	virtual ~EventListenerInstancer();
 
-	/// Instances a new event handle for Invaders.
+	/// Instances a new event listener for Invaders.
 	Rml::EventListener* InstanceEventListener(const Rml::String& value, Rml::Element* element) override;
 
 };

+ 10 - 18
Samples/invaders/src/EventManager.cpp

@@ -42,7 +42,7 @@ extern Rml::Context* context;
 static EventHandler* event_handler = nullptr;
 
 // The event handlers registered with the manager.
-typedef Rml::SmallUnorderedMap< Rml::String, EventHandler* > EventHandlerMap;
+using EventHandlerMap = Rml::SmallUnorderedMap<Rml::String, Rml::UniquePtr<EventHandler>>;
 EventHandlerMap event_handlers;
 
 EventManager::EventManager()
@@ -56,22 +56,15 @@ EventManager::~EventManager()
 // Releases all event handlers registered with the manager.
 void EventManager::Shutdown()
 {
-	for (EventHandlerMap::iterator i = event_handlers.begin(); i != event_handlers.end(); ++i)
-		delete (*i).second;
-
 	event_handlers.clear();
 	event_handler = nullptr;
 }
 
 // Registers a new event handler with the manager.
-void EventManager::RegisterEventHandler(const Rml::String& handler_name, EventHandler* handler)
+void EventManager::RegisterEventHandler(const Rml::String& handler_name, Rml::UniquePtr<EventHandler> handler)
 {
-	// Release any handler bound under the same name.
-	EventHandlerMap::iterator iterator = event_handlers.find(handler_name);
-	if (iterator != event_handlers.end())
-		delete (*iterator).second;
-
-	event_handlers[handler_name] = handler;
+	// Any handler bound under the same name will be released.
+	event_handlers[handler_name] = std::move(handler);
 }
 
 // Processes an event coming through from RmlUi.
@@ -127,7 +120,7 @@ void EventManager::ProcessEvent(Rml::Event& event, const Rml::String& value)
 		}
 		else
 		{
-			if (event_handler != nullptr)
+			if (event_handler)
 				event_handler->ProcessEvent(event, commands[i]);
 		}
 	}
@@ -138,24 +131,23 @@ Rml::ElementDocument* EventManager::LoadWindow(const Rml::String& window_name)
 {
 	// Set the event handler for the new screen, if one has been registered.
 	EventHandler* old_event_handler = event_handler;
-	EventHandlerMap::iterator iterator = event_handlers.find(window_name);
-	if (iterator != event_handlers.end())
-		event_handler = (*iterator).second;
+	auto it = event_handlers.find(window_name);
+	if (it != event_handlers.end())
+		event_handler = it->second.get();
 	else
 		event_handler = nullptr;
 
 	// Attempt to load the referenced RML document.
 	Rml::String document_path = Rml::String("invaders/data/") + window_name + Rml::String(".rml");
 	Rml::ElementDocument* document = context->LoadDocument(document_path.c_str());
-	if (document == nullptr)
+	if (!document)
 	{
 		event_handler = old_event_handler;
 		return nullptr;
 	}
 
 	// Set the element's title on the title; IDd 'title' in the RML.
-	Rml::Element* title = document->GetElementById("title");
-	if (title != nullptr)
+	if (Rml::Element* title = document->GetElementById("title"))
 		title->SetInnerRML(document->GetTitle());
 
 	document->Show();

+ 3 - 2
Samples/invaders/src/EventManager.h

@@ -29,8 +29,9 @@
 #ifndef RMLUI_INVADERS_EVENTMANAGER_H
 #define RMLUI_INVADERS_EVENTMANAGER_H
 
-#include <RmlUi/Core/Event.h>
 #include <RmlUi/Core/ElementDocument.h>
+#include <RmlUi/Core/Event.h>
+#include <RmlUi/Core/Types.h>
 
 class EventHandler;
 
@@ -47,7 +48,7 @@ public:
 	/// Registers a new event handler with the manager.
 	/// @param[in] handler_name The name of the handler; this must be the same as the window it is handling events for.
 	/// @param[in] handler The event handler.
-	static void RegisterEventHandler(const Rml::String& handler_name, EventHandler* handler);
+	static void RegisterEventHandler(const Rml::String& handler_name, Rml::UniquePtr<EventHandler> handler);
 
 	/// Processes an event coming through from RmlUi.
 	/// @param[in] event The RmlUi event that spawned the application event.

+ 6 - 6
Samples/invaders/src/main.cpp

@@ -32,7 +32,7 @@
 #include "EventHandlerHighScore.h"
 #include "EventHandlerOptions.h"
 #include "EventHandlerStartGame.h"
-#include "EventInstancer.h"
+#include "EventListenerInstancer.h"
 #include "EventManager.h"
 #include "HighScores.h"
 #include <RmlUi/Core.h>
@@ -98,13 +98,13 @@ int main(int /*argc*/, char** /*argv*/)
 	// Construct the game singletons.
 	HighScores::Initialise(context);
 
-	// Initialise the event instancer and handlers.
-	EventInstancer event_listener_instancer;
+	// Initialise the event listener instancer and handlers.
+	EventListenerInstancer event_listener_instancer;
 	Rml::Factory::RegisterEventListenerInstancer(&event_listener_instancer);
 
-	EventManager::RegisterEventHandler("start_game", new EventHandlerStartGame());
-	EventManager::RegisterEventHandler("high_score", new EventHandlerHighScore());
-	EventManager::RegisterEventHandler("options", new EventHandlerOptions());
+	EventManager::RegisterEventHandler("start_game", Rml::MakeUnique<EventHandlerStartGame>());
+	EventManager::RegisterEventHandler("high_score", Rml::MakeUnique<EventHandlerHighScore>());
+	EventManager::RegisterEventHandler("options", Rml::MakeUnique<EventHandlerOptions>());
 
 	// Start the game.
 	bool running = (EventManager::LoadWindow("background") && EventManager::LoadWindow("main_menu"));