From 5a16af26965568dac9e577535baf9576c83f191e Mon Sep 17 00:00:00 2001 From: Persson-dev Date: Tue, 23 Jul 2024 01:17:42 +0200 Subject: [PATCH] refactor client main --- src/{main.cpp => ClientMain.cpp} | 225 +++++++++++++++++++------------ 1 file changed, 142 insertions(+), 83 deletions(-) rename src/{main.cpp => ClientMain.cpp} (54%) diff --git a/src/main.cpp b/src/ClientMain.cpp similarity index 54% rename from src/main.cpp rename to src/ClientMain.cpp index 61f99b4..61d1ad2 100644 --- a/src/main.cpp +++ b/src/ClientMain.cpp @@ -1,16 +1,17 @@ #include -#include "Network.h" - #include #include -#include -#include #include +#include +#include +#include #include -static Nz::Vector3f Get2DDirectionVectorFromRotation(float yaw) -{ +constexpr Nz::UInt32 RenderMaskUI = 0x00010000; +constexpr Nz::UInt32 RenderMask3D = 0x0000FFFF; + +static Nz::Vector3f Get2DDirectionVectorFromRotation(float yaw) { return { -std::sin(yaw), 0, @@ -18,15 +19,14 @@ static Nz::Vector3f Get2DDirectionVectorFromRotation(float yaw) }; } -static void CreateLight(Nz::EnttWorld &world) -{ +static void CreateLight(Nz::EnttWorld& world) { entt::handle lightEntity = world.CreateEntity(); { - auto &lightNode = lightEntity.emplace(); + auto& lightNode = lightEntity.emplace(); lightNode.SetPosition({0, 5, 0}); - auto &entityLight = lightEntity.emplace(); - auto &spotLight = entityLight.AddLight(1); + auto& entityLight = lightEntity.emplace(); + auto& spotLight = entityLight.AddLight(RenderMask3D); spotLight.EnableShadowCasting(true); spotLight.UpdateShadowMapSize(1024); spotLight.UpdateRadius(10.0f); @@ -34,8 +34,7 @@ static void CreateLight(Nz::EnttWorld &world) } } -static void CreateBoxes(Nz::EnttWorld &world) -{ +static void CreateBoxes(Nz::EnttWorld& world) { constexpr float BoxDims = 1.f; std::mt19937 rd(42); @@ -46,8 +45,7 @@ static void CreateBoxes(Nz::EnttWorld &world) std::shared_ptr boxMesh = Nz::GraphicalMesh::Build(Nz::Primitive::Box(Nz::Vector3f(1.f))); constexpr std::size_t BoxCount = 100; - for (std::size_t i = 0; i < BoxCount; ++i) - { + for (std::size_t i = 0; i < BoxCount; ++i) { float width = lengthDis(rd); float height = lengthDis(rd); float depth = lengthDis(rd); @@ -64,9 +62,9 @@ static void CreateBoxes(Nz::EnttWorld &world) std::shared_ptr sphereModel = std::make_shared(boxMesh); sphereModel->SetMaterial(0, std::move(boxMaterial)); - boxEntity.emplace(std::move(sphereModel)); + boxEntity.emplace(std::move(sphereModel), RenderMask3D); - auto &ballNode = boxEntity.emplace(); + auto& ballNode = boxEntity.emplace(); ballNode.SetPosition({xRandom(rd), yRandom(rd) + 20.0f, zRandom(rd)}); ballNode.SetScale({width, height, depth}); @@ -80,8 +78,7 @@ static void CreateBoxes(Nz::EnttWorld &world) } } -static void CreateModel(Nz::EnttWorld &world) -{ +static void CreateModel(Nz::EnttWorld& world) { std::filesystem::path resourceDir = "assets/models"; Nz::MeshParams meshParams; @@ -91,8 +88,7 @@ static void CreateModel(Nz::EnttWorld &world) meshParams.vertexDeclaration = Nz::VertexDeclaration::Get(Nz::VertexLayout::XYZ_Normal_UV_Tangent); std::shared_ptr deambuMesh = Nz::Mesh::LoadFromFile(resourceDir / "sol.obj", meshParams); - if (!deambuMesh) - { + if (!deambuMesh) { NazaraError("failed to load model"); return; } @@ -102,22 +98,21 @@ static void CreateModel(Nz::EnttWorld &world) entt::handle deambEntity = world.CreateEntity(); { - auto &entityGfx = deambEntity.emplace(); - entityGfx.AttachRenderable(deambModel); + auto& entityGfx = deambEntity.emplace(deambModel, RenderMask3D); + // entityGfx.AttachRenderable(deambModel); - auto &entityNode = deambEntity.emplace(); + auto& entityNode = deambEntity.emplace(); entityNode.SetPosition(Nz::Vector3f(0.f, 0.f, 0.f)); } std::shared_ptr device = Nz::Graphics::Instance()->GetRenderDevice(); std::shared_ptr material = Nz::MaterialInstance::Instantiate(Nz::MaterialType::Phong); - for (std::string_view passName : {"DepthPass", "ForwardPass"}) - { - material->UpdatePassStates(passName, [](Nz::RenderStates &states) - { + for (std::string_view passName : {"DepthPass", "ForwardPass"}) { + material->UpdatePassStates(passName, [](Nz::RenderStates& states) { states.depthClamp = true; - return true; }); + return true; + }); } std::mt19937 rd(42); @@ -141,46 +136,41 @@ static void CreateModel(Nz::EnttWorld &world) static Nz::EulerAnglesf camAngles(0.f, 0.f, 0.f); static Nz::MillisecondClock updateClock; -static void CreateCamera(Nz::EnttWorld &world, Nz::Window &window, Nz::Application &app) -{ - Nz::RenderSystem &renderSystem = world.AddSystem(); - - Nz::SwapchainParameters params; - params.presentMode.clear(); - params.presentMode.push_back(Nz::PresentMode::VerticalSync); - - Nz::WindowSwapchain &windowSwapchain = renderSystem.CreateSwapchain(window, params); - +static void CreateCamera(Nz::EnttWorld& world, Nz::Window& window, Nz::Application& app, + std::shared_ptr& renderTarget) { // Création de la caméra entt::handle cameraEntity = world.CreateEntity(); - auto &cameraNode = cameraEntity.emplace(); + auto& cameraNode = cameraEntity.emplace(); cameraNode.SetPosition({0, 2.5, 0}); - auto &cameraComponent = cameraEntity.emplace(std::make_shared(windowSwapchain), Nz::ProjectionType::Perspective); + auto& cameraComponent = cameraEntity.emplace(renderTarget, Nz::ProjectionType::Perspective); + cameraComponent.UpdateClearColor(Nz::Color(0.3f, 0.8f, 1.0f)); cameraComponent.UpdateZNear(0.1f); cameraComponent.UpdateZFar(100.0f); + cameraComponent.UpdateRenderMask(RenderMask3D); + cameraComponent.UpdateRenderOrder(-1); entt::handle playerEntity = world.CreateEntity(); - auto &playerNode = playerEntity.emplace(); + auto& playerNode = playerEntity.emplace(); playerNode.SetPosition({0, 5, 0}); cameraNode.SetParent(playerEntity); - window.GetEventHandler().OnMouseMoved.Connect([&](const Nz::WindowEventHandler * /*eventHandler*/, const Nz::WindowEvent::MouseMoveEvent &event) - { - constexpr float sensitivity = 0.3f; + window.GetEventHandler().OnMouseMoved.Connect( + [&](const Nz::WindowEventHandler* /*eventHandler*/, const Nz::WindowEvent::MouseMoveEvent& event) { + constexpr float sensitivity = 0.3f; - camAngles.yaw -= event.deltaX * sensitivity; - camAngles.yaw.Normalize(); + camAngles.yaw -= event.deltaX * sensitivity; + camAngles.yaw.Normalize(); - camAngles.pitch = Nz::Clamp(camAngles.pitch - event.deltaY * sensitivity, -89.f, 89.f); + camAngles.pitch = Nz::Clamp(camAngles.pitch - event.deltaY * sensitivity, -89.f, 89.f); - camAngles.roll = 0.0f; + camAngles.roll = 0.0f; - cameraNode.SetRotation(camAngles); - }); + cameraNode.SetRotation(camAngles); + }); Nz::Vector3f playerSize{0.5, 2, 0.5}; @@ -193,7 +183,7 @@ static void CreateCamera(Nz::EnttWorld &world, Nz::Window &window, Nz::Applicati std::shared_ptr sphereModel = std::make_shared(boxMesh); sphereModel->SetMaterial(0, std::move(boxMaterial)); - playerEntity.emplace(std::move(sphereModel)); + playerEntity.emplace(std::move(sphereModel), RenderMask3D); } std::shared_ptr boxCollider = std::make_shared(playerSize); @@ -206,18 +196,16 @@ static void CreateCamera(Nz::EnttWorld &world, Nz::Window &window, Nz::Applicati playerEntity.emplace(settings); - app.AddUpdaterFunc([playerEntity]() - { - if (std::optional deltaTime = updateClock.RestartIfOver(Nz::Time::Milliseconds(30))) - { + app.AddUpdaterFunc([playerEntity]() { + if (std::optional deltaTime = updateClock.RestartIfOver(Nz::Time::Milliseconds(30))) { Nz::Vector3f front = Get2DDirectionVectorFromRotation(camAngles.yaw.ToRadians()); - Nz::Vector3f left = Get2DDirectionVectorFromRotation(camAngles.yaw.ToRadians() + 3.1415926535/2.0); + Nz::Vector3f left = Get2DDirectionVectorFromRotation(camAngles.yaw.ToRadians() + 3.1415926535 / 2.0); auto& playerBody = playerEntity.get(); - - if (Nz::Keyboard::IsKeyPressed(Nz::Keyboard::VKey::Z)){ - std::cout << front << "\n"; - std::cout << "Pos : " << playerBody.GetPosition() << " \n"; + + if (Nz::Keyboard::IsKeyPressed(Nz::Keyboard::VKey::Z)) { + // std::cout << front << "\n"; + // std::cout << "Pos : " << playerBody.GetPosition() << " \n"; playerBody.AddForce(front * 10.f * playerMass, Nz::CoordSys::Global); } @@ -230,8 +218,8 @@ static void CreateCamera(Nz::EnttWorld &world, Nz::Window &window, Nz::Applicati if (Nz::Keyboard::IsKeyPressed(Nz::Keyboard::VKey::D)) playerBody.AddForce(-left * 10.f * playerMass, Nz::CoordSys::Local); - if (Nz::Keyboard::IsKeyPressed(Nz::Keyboard::VKey::Space)){ - playerBody.AddForce(Nz::Vector3f::Up() * 15.f * playerMass, Nz::CoordSys::Global); + if (Nz::Keyboard::IsKeyPressed(Nz::Keyboard::VKey::Space)) { + playerBody.AddForce(Nz::Vector3f::Up() * 15.f * playerMass, Nz::CoordSys::Global); } if (Nz::Keyboard::IsKeyPressed(Nz::Keyboard::VKey::R)) { @@ -240,28 +228,100 @@ static void CreateCamera(Nz::EnttWorld &world, Nz::Window &window, Nz::Applicati playerBody.SetPosition({0, 10, 0}); } - //playerBody.SetRotation({}); - } }); + // playerBody.SetRotation({}); + } + }); } -int Video(int argc, char **argv) { - Nz::Application app(argc, argv); +static void SetupWidgets(Nz::EnttWorld& world, std::shared_ptr renderTarget, Nz::Window& window) { + entt::handle cameraEntity = world.CreateEntity(); + { + cameraEntity.emplace(); - auto &windowing = app.AddComponent(); + auto& cameraComponent = cameraEntity.emplace(renderTarget, Nz::ProjectionType::Orthographic); + + cameraComponent.UpdateClearColor(Nz::Color(0.3f, 0.8f, 1.0f, 0.0f)); + cameraComponent.UpdateRenderMask(RenderMaskUI); + cameraComponent.UpdateRenderOrder(1); + // cameraComponent.UpdateSize({100, 100}); + } + + Nz::Canvas canvas(world.GetRegistry(), window.GetEventHandler(), window.GetCursorController().CreateHandle(), RenderMaskUI); + canvas.Resize({static_cast(window.GetSize().x), static_cast(window.GetSize().y)}); + canvas.EnableBackground(false); + auto widget = canvas.Add(); + widget->EnableBackground(false); + widget->EnableLineWrap(true); + widget->SetBackgroundColor(Nz::Color(0, 0, 0, 50)); + widget->SetCharacterSize(22); + widget->SetTextColor(Nz::Color::White()); + widget->SetTextOutlineThickness(1.f); + widget->SetReadOnly(true); + + auto m_chatEnteringBox = canvas.Add(); + m_chatEnteringBox->EnableBackground(false); + m_chatEnteringBox->SetBackgroundColor(Nz::Color(255, 255, 255, 150)); + m_chatEnteringBox->SetTextColor(Nz::Color::Black()); + m_chatEnteringBox->SetText("ceci est un test incroyable"); + // m_chatEnteringBox->SetMaximumWidth(m_chatEnteringBox->GetPreferredWidth()); + + auto versionLabel = canvas.Add(); + versionLabel->UpdateText( + Nz::SimpleTextDrawer::Draw(std::to_string(100000000) + "." + std::to_string(0) + "." + std::to_string(0), 14)); + versionLabel->Resize({500, 500}); + versionLabel->SetPosition({1000, 800}); + versionLabel->SetPosition({canvas.GetWidth() - versionLabel->GetWidth(), canvas.GetHeight() - versionLabel->GetHeight()}); + + + // Création d'un texte + Nz::SimpleTextDrawer textDrawer; + textDrawer.SetText("Hello world !"); + textDrawer.SetCharacterSize(72); + textDrawer.SetTextOutlineThickness(4.f); + + std::shared_ptr textSprite = std::make_shared(); + textSprite->Update(textDrawer); + + entt::handle textEntity = world.CreateEntity(); + { + auto& nodeComponent = textEntity.emplace(); + + auto& gfxComponent = textEntity.emplace(textSprite, RenderMaskUI); + + Nz::Boxf textBox = textSprite->GetAABB(); + Nz::Vector2ui windowSize = window.GetSize(); + nodeComponent.SetPosition({windowSize.x / 2 - textBox.width / 2, windowSize.y / 2 - textBox.height / 2}); + } +} + +int Video(int argc, char** argv) { + Nz::Application app(argc, argv); + + auto& windowing = app.AddComponent(); std::string windowTitle = "Blitz 2"; - Nz::Window &window = windowing.CreateWindow(Nz::VideoMode(1920, 1080, 32), windowTitle); + Nz::Window& window = windowing.CreateWindow(Nz::VideoMode(1920, 1080, 32), windowTitle); - auto &ecs = app.AddComponent(); + auto& ecs = app.AddComponent(); - auto &world = ecs.AddWorld(); + auto& world = ecs.AddWorld(); - auto &physSystem = world.AddSystem(); + auto& physSystem = world.AddSystem(); physSystem.GetPhysWorld().SetMaxStepCount(1); physSystem.GetPhysWorld().SetStepSize(Nz::Time::Milliseconds(20)); physSystem.GetPhysWorld().SetGravity(Nz::Vector3f::Down() * 9.81f); - CreateCamera(world, window, app); + Nz::RenderSystem& renderSystem = world.AddSystem(); + + Nz::SwapchainParameters params; + params.presentMode.clear(); + params.presentMode.push_back(Nz::PresentMode::VerticalSync); + + Nz::WindowSwapchain& windowSwapchain = renderSystem.CreateSwapchain(window, params); + + auto renderTarget = std::make_shared(windowSwapchain); + + CreateCamera(world, window, app, renderTarget); CreateBoxes(world); CreateModel(world); CreateLight(world); @@ -271,20 +331,19 @@ int Video(int argc, char **argv) { Nz::MillisecondClock fpsClock; unsigned int fps = 0; - app.AddUpdaterFunc([&]() - { - fps++; + app.AddUpdaterFunc([&]() { + fps++; - if (fpsClock.RestartIfOver(Nz::Time::Second())) - { - window.SetTitle(windowTitle + " - " + Nz::NumberToString(fps) + " FPS" + " - " + Nz::NumberToString(world.GetAliveEntityCount()) + " entities"); + if (fpsClock.RestartIfOver(Nz::Time::Second())) { + window.SetTitle(windowTitle + " - " + Nz::NumberToString(fps) + " FPS" + " - " + + Nz::NumberToString(world.GetAliveEntityCount()) + " entities"); fps = 0; - } }); + } + }); return app.Run(); } -int main(int argc, char **argv) -{ - TestNetwork(); +int main(int argc, char** argv) { + return Video(argc, argv); }