Refactor the story->camera converter to be a part of the camera.

This commit is contained in:
Zed A. Shaw 2026-02-22 23:02:02 -05:00
parent 024d0cfae7
commit 088f9e022e
3 changed files with 19 additions and 14 deletions

View file

@ -115,4 +115,17 @@ namespace cinematic {
void Camera::play() {
anim.play();
}
void Camera::from_story(components::Storyboard& story) {
anim.sequences.clear();
anim.forms.clear();
for(auto& [timecode, cell, transform] : story.beats) {
animate2::Sequence seq{.frames={0}, .durations={60}};
anim.sequences.try_emplace(timecode, seq);
animate2::Form form{timecode, transform};
anim.forms.try_emplace(timecode, form);
}
}
}

View file

@ -3,6 +3,10 @@
#include "constants.hpp"
#include <SFML/Graphics/RenderTexture.hpp>
namespace components {
struct Storyboard;
}
namespace cinematic {
struct Camera {
animate2::Animate2 anim;
@ -26,6 +30,7 @@ namespace cinematic {
void style(const std::string &name);
void reset(sf::RenderTexture& target);
void update_camera_bounds(sf::Vector2f size);
void from_story(components::Storyboard& story);
};
void init();

View file

@ -17,20 +17,7 @@ namespace storyboard {
auto config = settings::get("stories");
$story = components::convert<components::Storyboard>(config[story_name]);
$audio = sound::get_sound_pair($story.audio).sound;
config_camera($camera);
}
void UI::config_camera(cinematic::Camera &camera) {
camera.anim.sequences.clear();
camera.anim.forms.clear();
for(auto& [timecode, cell, transform] : $story.beats) {
animate2::Sequence seq{.frames={0}, .durations={60}};
camera.anim.sequences.try_emplace(timecode, seq);
animate2::Form form{timecode, transform};
camera.anim.forms.try_emplace(timecode, form);
}
$camera.from_story($story);
}
void UI::init() {