202 lines
5.9 KiB
C++
202 lines
5.9 KiB
C++
#include <Nazara/Audio.hpp>
|
|
#include <Nazara/Core.hpp>
|
|
#include <Nazara/Graphics.hpp>
|
|
#include <Nazara/Network.hpp>
|
|
#include <Nazara/Renderer.hpp>
|
|
#include <NazaraSDK/Application.hpp>
|
|
#include <NazaraSDK/Components.hpp>
|
|
#include <NazaraSDK/Systems.hpp>
|
|
#include <NazaraSDK/StateMachine.hpp>
|
|
#include "LogoDemo.hpp"
|
|
#include "SpacebattleDemo.hpp"
|
|
#include <iostream>
|
|
|
|
int main()
|
|
{
|
|
Ndk::Application app;
|
|
|
|
// Mix all sounds in mono (in order to give them 3D position)
|
|
Nz::SoundBufferParams soundParams;
|
|
soundParams.forceMono = true;
|
|
|
|
Nz::SoundBufferManager::SetDefaultParameters(soundParams);
|
|
|
|
// Pour commencer le mode vidéo, celui-ci va définir la taille de la zone de rendu et le nombre de bits par pixels
|
|
Nz::VideoMode mode = Nz::VideoMode::GetDesktopMode(); // Nous récupérons le mode vidéo du bureau
|
|
|
|
// Nous allons prendre les trois quarts de la résolution du bureau pour notre fenêtre
|
|
mode.width = 3 * mode.width / 4;
|
|
mode.height = 3 * mode.height / 4;
|
|
|
|
Nz::ContextParameters targetParams;
|
|
targetParams.antialiasingLevel = 0;
|
|
|
|
Nz::RenderWindow& window = app.AddWindow<Nz::RenderWindow>(mode, "Nazara demo - Particles", Nz::WindowStyle_Closable, targetParams);
|
|
//Nz::RenderWindow& window = app.AddWindow<Nz::RenderWindow>(Nz::VideoMode(1920, 1080), "Nazara demo - Particles", Nz::WindowStyle_Fullscreen, targetParams);
|
|
|
|
app.EnableFPSCounter(true);
|
|
|
|
Ndk::World& world3D = app.AddWorld();
|
|
Ndk::World& world2D = app.AddWorld();
|
|
|
|
std::random_device randomDevice;
|
|
|
|
ExampleShared shared;
|
|
shared.randomGen.seed(randomDevice());
|
|
shared.target = &window;
|
|
shared.world2D = &world2D;
|
|
shared.world3D = &world3D;
|
|
|
|
shared.demoName = Nz::TextSprite::New();
|
|
shared.demoName->Update(Nz::SimpleTextDrawer::Draw("XX - DemoName", 48));
|
|
|
|
shared.fpsCount = Nz::TextSprite::New();
|
|
shared.fpsCount->Update(Nz::SimpleTextDrawer::Draw("XXXXX FPS", 24));
|
|
|
|
shared.particleCount = Nz::TextSprite::New();
|
|
shared.particleCount->Update(Nz::SimpleTextDrawer::Draw("XXXXX particles", 36));
|
|
|
|
world2D.GetSystem<Ndk::RenderSystem>().SetGlobalUp(Nz::Vector3f::Down());
|
|
world3D.GetSystem<Ndk::RenderSystem>().ChangeRenderTechnique<Nz::DeferredRenderTechnique>();
|
|
|
|
|
|
Ndk::EntityHandle viewEntity = world2D.CreateEntity();
|
|
viewEntity->AddComponent<Ndk::NodeComponent>();
|
|
|
|
Ndk::CameraComponent& viewer = viewEntity->AddComponent<Ndk::CameraComponent>();
|
|
viewer.SetTarget(&window);
|
|
viewer.SetProjectionType(Nz::ProjectionType_Orthogonal);
|
|
|
|
shared.viewer2D = viewEntity;
|
|
|
|
Ndk::EntityHandle cameraEntity = world3D.CreateEntity();
|
|
cameraEntity->AddComponent<Ndk::NodeComponent>();
|
|
cameraEntity->AddComponent<Ndk::ListenerComponent>();
|
|
|
|
Ndk::CameraComponent& camera = cameraEntity->AddComponent<Ndk::CameraComponent>();
|
|
camera.SetTarget(&window);
|
|
camera.SetZFar(10000.f);
|
|
|
|
shared.viewer3D = cameraEntity;
|
|
|
|
Ndk::EntityHandle demoNameEntity = world2D.CreateEntity();
|
|
Ndk::NodeComponent& demoNameNode = demoNameEntity->AddComponent<Ndk::NodeComponent>();
|
|
Ndk::GraphicsComponent& demoNameGfx = demoNameEntity->AddComponent<Ndk::GraphicsComponent>();
|
|
demoNameGfx.Attach(shared.demoName, 1);
|
|
|
|
Ndk::EntityHandle fpsCountEntity = world2D.CreateEntity();
|
|
Ndk::NodeComponent& fpsNode = fpsCountEntity->AddComponent<Ndk::NodeComponent>();
|
|
Ndk::GraphicsComponent& fpsGfx = fpsCountEntity->AddComponent<Ndk::GraphicsComponent>();
|
|
fpsGfx.Attach(shared.fpsCount, 1);
|
|
|
|
Ndk::EntityHandle particleCountEntity = world2D.CreateEntity();
|
|
Ndk::NodeComponent& particleCountNode = particleCountEntity->AddComponent<Ndk::NodeComponent>();
|
|
Ndk::GraphicsComponent& particleCountGfx = particleCountEntity->AddComponent<Ndk::GraphicsComponent>();
|
|
particleCountGfx.Attach(shared.particleCount, 1);
|
|
|
|
|
|
Nz::Boxf fpsCountBox = fpsGfx.GetAABB();
|
|
Nz::Boxf particleCountBox = particleCountGfx.GetAABB();
|
|
|
|
Nz::Vector2ui windowSize = window.GetSize();
|
|
demoNameNode.SetPosition(5.f, 5.f);
|
|
particleCountNode.SetPosition(5.f, windowSize.y - particleCountBox.height - 5.f);
|
|
fpsNode.SetPosition(5.f, windowSize.x - fpsCountBox.height - particleCountBox.height - 5.f);
|
|
|
|
|
|
shared.demos.push_back(std::make_shared<LogoExample>(shared));
|
|
shared.demos.push_back(std::make_shared<SpacebattleExample>(shared));
|
|
|
|
std::size_t demoIndex = 0;
|
|
Ndk::StateMachine stateMachine(shared.demos[demoIndex]);
|
|
|
|
window.EnableEventPolling(true);
|
|
|
|
while (app.Run())
|
|
{
|
|
Nz::WindowEvent event;
|
|
while (window.PollEvent(&event))
|
|
{
|
|
switch (event.type)
|
|
{
|
|
case Nz::WindowEventType_KeyPressed:
|
|
{
|
|
switch (event.key.virtualKey)
|
|
{
|
|
case Nz::Keyboard::VKey::Backspace:
|
|
stateMachine.ChangeState(shared.demos[demoIndex]);
|
|
break;
|
|
|
|
case Nz::Keyboard::VKey::Escape:
|
|
app.Quit();
|
|
break;
|
|
|
|
case Nz::Keyboard::VKey::Left:
|
|
{
|
|
if (shared.demos.size() <= 1)
|
|
break;
|
|
|
|
if (demoIndex == 0)
|
|
demoIndex = shared.demos.size();
|
|
|
|
demoIndex--;
|
|
stateMachine.ChangeState(shared.demos[demoIndex]);
|
|
break;
|
|
}
|
|
|
|
case Nz::Keyboard::VKey::Right:
|
|
{
|
|
if (shared.demos.size() <= 1)
|
|
break;
|
|
|
|
demoIndex++;
|
|
if (demoIndex == shared.demos.size())
|
|
demoIndex = 0;
|
|
|
|
stateMachine.ChangeState(shared.demos[demoIndex]);
|
|
break;
|
|
}
|
|
|
|
case Nz::Keyboard::VKey::Pause:
|
|
{
|
|
auto& velocitySystem = shared.world3D->GetSystem<Ndk::VelocitySystem>();
|
|
velocitySystem.Enable(!velocitySystem.IsEnabled());
|
|
break;
|
|
}
|
|
|
|
case Nz::Keyboard::VKey::F5:
|
|
{
|
|
Nz::Image screenshot;
|
|
screenshot.Create(Nz::ImageType_2D, Nz::PixelFormat_RGBA8, 1920, 1080);
|
|
window.CopyToImage(&screenshot);
|
|
|
|
static unsigned int counter = 1;
|
|
screenshot.SaveToFile("screenshot_" + std::to_string(counter++) + ".png");
|
|
break;
|
|
}
|
|
|
|
default:
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
|
|
case Nz::WindowEventType_Quit:
|
|
window.Close();
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
stateMachine.Update(app.GetUpdateTime());
|
|
|
|
window.Display();
|
|
}
|
|
|
|
shared.target = nullptr;
|
|
|
|
return EXIT_SUCCESS;
|
|
}
|