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
65 lines
1.7 KiB
C++
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
|