NazaraEngine/tests/Engine/Platform/EventHandler.cpp

82 lines
2.3 KiB
C++

#include <Nazara/Graphics/ColorBackground.hpp>
#include <Nazara/Renderer/RenderWindow.hpp>
#include <NazaraSDK/Application.hpp>
#include <NazaraSDK/StateMachine.hpp>
#include <NazaraSDK/World.hpp>
#include <NazaraSDK/Components/CameraComponent.hpp>
#include <NazaraSDK/Components/NodeComponent.hpp>
#include <NazaraSDK/Systems/RenderSystem.hpp>
#include "EventHandler/StateContext.hpp"
#include "EventHandler/StateFactory.hpp"
#include <Catch/catch.hpp>
Ndk::EntityHandle AddCamera(Ndk::World& world, Nz::RenderWindow& window);
/*!
Known issues on Linux:
- There is no real double click event in X11
- Should always the key be repeated in key pressed mode ?
- No smooth wheel, only 1.f or -1.f
- Modify dimension of window updates position (which is not wrong)
- Text entered is never repeated
*/
SCENARIO("EventHandler", "[PLATFORM][EVENTHANDLER][INTERACTIVE][.]")
{
GIVEN("An application")
{
Ndk::Application& app = *Ndk::Application::Instance();
auto& window = app.AddWindow<Nz::RenderWindow>();
if (!window.Create(Nz::VideoMode(1024, 768, 32), "EventHandler"))
{
NazaraError("Failed to create window. See NazaraLog.log for further informations");
REQUIRE(false);
}
window.EnableVerticalSync(true);
auto& world = app.AddWorld();
auto camera = AddCamera(world, window);
StateContext context(window, world);
StateFactory::Initialize(context);
Ndk::StateMachine fsm(StateFactory::Get(EventStatus::Menu));
Nz::Clock elapsedTimeClock;
while (app.Run())
{
window.Display();
float elapsedTime = elapsedTimeClock.Restart() / 1'000'000;
if (!fsm.Update(elapsedTime))
{
NazaraError("Failed to update state machine.");
REQUIRE(false);
}
}
StateFactory::Uninitialize();
REQUIRE(true);
}
}
Ndk::EntityHandle AddCamera(Ndk::World& world, Nz::RenderWindow& window)
{
Ndk::EntityHandle view = world.CreateEntity();
auto& node = view->AddComponent<Ndk::NodeComponent>();
node.SetPosition(Nz::Vector3f::Zero());
auto& cam = view->AddComponent<Ndk::CameraComponent>();
cam.SetProjectionType(Nz::ProjectionType_Orthogonal); // 2D
cam.SetTarget(&window);
world.GetSystem<Ndk::RenderSystem>().SetGlobalUp(Nz::Vector3f::Down());
world.GetSystem<Ndk::RenderSystem>().SetDefaultBackground(Nz::ColorBackground::New(Nz::Color::Black));
return view;
}