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 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
|
||||
|
|
|
|||
Loading…
Reference in New Issue