Update FirstScene to use EventHandler and remove useless lines (#151)

* Update FirstScene to use EventHandler and remove useless lines

* Update strange indentations made by VS

* Oops

* fix a little error

* fixed stranges comments

* fix littles errors

* fix indent

* Re fix Indent

* fix last errors

* fix errors fund by alexandre jannaiux

* fix lisibility of comments
This commit is contained in:
Faymoon 2018-01-15 23:46:52 +01:00 committed by Jérôme Leclercq
parent 0b2d5b9332
commit e86e29f822
1 changed files with 49 additions and 60 deletions

View File

@ -34,7 +34,6 @@ int main()
{
// Ndk::Application est une classe s'occupant de l'initialisation du moteur ainsi que de la gestion de beaucoup de choses
Ndk::Application application;
Nz::Initializer<Nz::Network> network;
// Nazara étant initialisé, nous pouvons créer le monde pour contenir notre scène.
// Dans un ECS, le monde représente bien ce que son nom indique, c'est l'ensemble de ce qui existe au niveau de l'application.
@ -275,66 +274,56 @@ int main()
consoleOverlay.lua.PushGlobal("Spaceship", spaceship->CreateHandle());
consoleOverlay.lua.PushGlobal("World", world->CreateHandle());
//Gestion des Evenements
Nz::EventHandler& eventHandler = window.GetEventHandler();
eventHandler.OnMouseMoved.Connect([&camAngles, &cameraNode, &window](const Nz::EventHandler*, const Nz::WindowEvent::MouseMoveEvent& event)
{
if (Ndk::Application::Instance()->IsConsoleEnabled())
{
Ndk::Application::ConsoleOverlay& consoleOverlay = Ndk::Application::Instance()->GetConsoleOverlay();
if (consoleOverlay.console->IsVisible())
return;
}
// Gestion de la caméra free-fly (Rotation)
float sensitivity = 0.3f; // Sensibilité de la souris
// On modifie l'angle de la caméra grâce au déplacement relatif sur X de la souris
camAngles.yaw = Nz::NormalizeAngle(camAngles.yaw - event.deltaX*sensitivity);
// Idem, mais pour éviter les problèmes de calcul de la matrice de vue, on restreint les angles
camAngles.pitch = Nz::Clamp(camAngles.pitch - event.deltaY*sensitivity, -89.f, 89.f);
// On applique les angles d'Euler à notre caméra
cameraNode.SetRotation(camAngles);
// Pour éviter que le curseur ne sorte de l'écran, nous le renvoyons au centre de la fenétre
// Cette fonction est codée de sorte à ne pas provoquer d'événement MouseMoved
Nz::Vector2ui size = window.GetSize();
Nz::Mouse::SetPosition(size.x / 2, size.y / 2, window);
});
eventHandler.OnKeyPressed.Connect([&targetPos, &cameraNode, &smoothMovement, &window](const Nz::EventHandler*, const Nz::WindowEvent::KeyEvent& event)
{
// Une touche a été pressée !
if (event.code == Nz::Keyboard::Key::Escape)
window.Close();
else if (event.code == Nz::Keyboard::F1)
{
if (smoothMovement)
{
targetPos = cameraNode.GetPosition();
smoothMovement = false;
}
else
smoothMovement = true;
}
});
// Début de la boucle de rendu du programme (s'occupant par exemple de mettre à jour le monde)
while (application.Run())
{
// Ensuite nous allons traiter les évènements (Étape indispensable pour la fenêtre)
Nz::WindowEvent event;
while (window.PollEvent(&event))
{
switch (event.type)
{
case Nz::WindowEventType_MouseMoved: // La souris a bougé
{
if (application.IsConsoleEnabled())
{
Ndk::Application::ConsoleOverlay& consoleOverlay = application.GetConsoleOverlay();
if (consoleOverlay.console->IsVisible())
break;
}
// Gestion de la caméra free-fly (Rotation)
float sensitivity = 0.3f; // Sensibilité de la souris
// On modifie l'angle de la caméra grâce au déplacement relatif sur X de la souris
camAngles.yaw = Nz::NormalizeAngle(camAngles.yaw - event.mouseMove.deltaX*sensitivity);
// Idem, mais pour éviter les problèmes de calcul de la matrice de vue, on restreint les angles
camAngles.pitch = Nz::Clamp(camAngles.pitch - event.mouseMove.deltaY*sensitivity, -89.f, 89.f);
// On applique les angles d'Euler à notre caméra
cameraNode.SetRotation(camAngles);
// Pour éviter que le curseur ne sorte de l'écran, nous le renvoyons au centre de la fenêtre
// Cette fonction est codée de sorte à ne pas provoquer d'évènement MouseMoved
Nz::Vector2ui size = window.GetSize();
Nz::Mouse::SetPosition(size.x / 2, size.y / 2, window);
break;
}
case Nz::WindowEventType_Quit: // L'utilisateur a cliqué sur la croix, ou l'OS veut terminer notre programme
application.Quit();
break;
case Nz::WindowEventType_KeyPressed: // Une touche a été pressée !
if (event.key.code == Nz::Keyboard::Key::Escape)
window.Close();
else if (event.key.code == Nz::Keyboard::F1)
{
if (smoothMovement)
{
targetPos = cameraNode.GetPosition();
smoothMovement = false;
}
else
smoothMovement = true;
}
break;
default:
break;
}
}
Nz::UInt64 elapsedUS = updateClock.GetMicroseconds();
// On relance l'horloge
@ -370,7 +359,7 @@ int main()
// Pour que nos déplacement soient liés à la rotation de la caméra, nous allons utiliser
// les directions locales de la caméra
// Si la flèche du haut ou la touche Z (vive ZQSD) est pressée, on avance
// Si la flèche du haut ou la touche Z (vive ZQSD !!) est pressée, on avance
if (Nz::Keyboard::IsKeyPressed(Nz::Keyboard::Up) || Nz::Keyboard::IsKeyPressed(Nz::Keyboard::Z))
targetPos += cameraNode.GetForward() * cameraSpeed;
@ -429,7 +418,7 @@ Nz::Vector3f DampedString(const Nz::Vector3f& currentPos, const Nz::Vector3f& ta
const float dampConstant = 0.000065f; // Something v.small to offset 1/ displacement length
// the strength of the spring increases the further away the camera is from the target.
float springMagitude = springStrength*displacementLength + dampConstant*invDisplacementLength;
float springMagitude = springStrength * displacementLength + dampConstant * invDisplacementLength;
// Normalise the displacement and scale by the spring magnitude
// and the amount of time passed