This commit enables McRogueFace to compile without SFML dependencies when built with -DMCRF_HEADLESS, a prerequisite for Emscripten/WebAssembly support. Changes: - Add src/platform/HeadlessTypes.h (~900 lines of SFML type stubs) - Consolidate all SFML includes through src/Common.h (15 files fixed) - Wrap ImGui-SFML with #ifndef MCRF_HEADLESS guards - Disable debug console/explorer in headless builds - Add comprehensive research document: docs/EMSCRIPTEN_RESEARCH.md The headless build compiles successfully but uses stub implementations that return failure/no-op. This proves the abstraction boundary is clean and enables future work on alternative backends (VRSFML, Emscripten). What still works in headless mode: - Python interpreter and script execution - libtcod integrations (pathfinding, FOV, noise, BSP, heightmaps) - Timer system and scene management - All game logic and data structures Build commands: Normal: make Headless: cmake .. -DCMAKE_CXX_FLAGS="-DMCRF_HEADLESS" && make Addresses #158 Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
41 lines
No EOL
1 KiB
C++
41 lines
No EOL
1 KiB
C++
#pragma once
|
|
#include "Common.h"
|
|
#include <string>
|
|
#include <memory>
|
|
|
|
enum class TransitionType {
|
|
None,
|
|
Fade,
|
|
SlideLeft,
|
|
SlideRight,
|
|
SlideUp,
|
|
SlideDown
|
|
};
|
|
|
|
class SceneTransition {
|
|
public:
|
|
TransitionType type = TransitionType::None;
|
|
float duration = 0.0f;
|
|
float elapsed = 0.0f;
|
|
std::string fromScene;
|
|
std::string toScene;
|
|
|
|
// Render textures for transition
|
|
std::unique_ptr<sf::RenderTexture> oldSceneTexture;
|
|
std::unique_ptr<sf::RenderTexture> newSceneTexture;
|
|
|
|
// Sprites for rendering textures
|
|
sf::Sprite oldSprite;
|
|
sf::Sprite newSprite;
|
|
|
|
SceneTransition() = default;
|
|
|
|
void start(TransitionType t, const std::string& from, const std::string& to, float dur);
|
|
void update(float dt);
|
|
void render(sf::RenderTarget& target);
|
|
bool isComplete() const { return elapsed >= duration; }
|
|
float getProgress() const { return duration > 0 ? std::min(elapsed / duration, 1.0f) : 1.0f; }
|
|
|
|
// Easing function for smooth transitions
|
|
static float easeInOut(float t);
|
|
}; |