Files
SEQUA-Engine/3d/src/null_adapter.cpp
T
Ange-Marie MAURIN - A2M Systèmes 98c778aa28 feat(input): entrees du joueur captees par l'adaptateur (ADR 0011)
L'adaptateur traduit clavier et manette en actions SEQUA (PlayerInput) ;
le Core ne recoit et n'enregistre que ces actions, le rejeu reste exact.

- SEQUA 3D : PlayerInput, poll_input(), capacite player_input
  (interface des adaptateurs en version 2)
- protocole Core - rendu 0.2 : render/input, envoye quand les actions
  changent ; entree remise au neutre si le rendu disparait
- Godot : InputMap du projet (ZQSD, fleches, espace, manette) ou script
  SequaInput.sequa_player_input() pour une correspondance avancee ;
  entree neutre sans focus ; exemple examples/sequa_input.gd
- adaptateur debug : entrees scriptees par numero d'image
- Studio : ligne "Entrees du joueur" du panneau Rendu
2026-11-07 20:48:26 +01:00

65 lines
1.7 KiB
C++

// SPDX-License-Identifier: MPL-2.0
#include "sequa/3d/null_adapter.hpp"
#include <utility>
namespace sequa::three_d {
NullEngineAdapter::NullEngineAdapter()
: NullEngineAdapter(EngineCapabilities{"null", "0", BufferSet::all(), false, true, 0, 0})
{
}
NullEngineAdapter::NullEngineAdapter(EngineCapabilities capabilities)
: capabilities_(std::move(capabilities))
{
}
std::optional<Error> NullEngineAdapter::start(const EngineConfig& config)
{
if (running_) {
return Error{Error::Code::already_started, "adaptateur déjà démarré"};
}
if (config.headless ? !capabilities_.headless : !capabilities_.windowed) {
return Error{Error::Code::unsupported, config.headless ? "rendu hors écran non pris en charge"
: "fenêtre non prise en charge"};
}
scene_.clear();
running_ = true;
return std::nullopt;
}
void NullEngineAdapter::stop() noexcept
{
running_ = false;
}
std::optional<Error> NullEngineAdapter::apply(const SceneDelta& delta)
{
if (!running_) {
return Error{Error::Code::not_started, "adaptateur arrêté"};
}
return scene_.apply(delta);
}
FrameOutcome NullEngineAdapter::render_frame(const FrameRequest& request)
{
if (!running_) {
return Error{Error::Code::not_started, "adaptateur arrêté"};
}
if (std::optional<Error> error = validate_request(request, capabilities_)) {
return *std::move(error);
}
return FrameResult{request.frame_index, scene_.world_version(), request.buffers, {}};
}
std::optional<PlayerInput> NullEngineAdapter::poll_input()
{
if (!running_ || !capabilities_.player_input) {
return std::nullopt;
}
return input_;
}
} // namespace sequa::three_d