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:
parent
0b2d5b9332
commit
e86e29f822
|
|
@ -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 est une classe s'occupant de l'initialisation du moteur ainsi que de la gestion de beaucoup de choses
|
||||||
Ndk::Application application;
|
Ndk::Application application;
|
||||||
Nz::Initializer<Nz::Network> network;
|
|
||||||
|
|
||||||
// Nazara étant initialisé, nous pouvons créer le monde pour contenir notre scène.
|
// 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.
|
// 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("Spaceship", spaceship->CreateHandle());
|
||||||
consoleOverlay.lua.PushGlobal("World", world->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)
|
// Début de la boucle de rendu du programme (s'occupant par exemple de mettre à jour le monde)
|
||||||
while (application.Run())
|
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();
|
Nz::UInt64 elapsedUS = updateClock.GetMicroseconds();
|
||||||
// On relance l'horloge
|
// 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
|
// Pour que nos déplacement soient liés à la rotation de la caméra, nous allons utiliser
|
||||||
// les directions locales de la caméra
|
// 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))
|
if (Nz::Keyboard::IsKeyPressed(Nz::Keyboard::Up) || Nz::Keyboard::IsKeyPressed(Nz::Keyboard::Z))
|
||||||
targetPos += cameraNode.GetForward() * cameraSpeed;
|
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
|
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.
|
// 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
|
// Normalise the displacement and scale by the spring magnitude
|
||||||
// and the amount of time passed
|
// and the amount of time passed
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue