Scene Management

PinePaper’s Scene Manager enables multi-scene presentations and transitions.

Scene Concept

A Scene contains:

  • Interactive items (ItemRegistry)
  • Relations between items (RelationRegistry)
  • Decorative background (DecorativeRegistry)
  • Background configuration

Creating Scenes

// Create empty scene
const sceneId = app.sceneManager.createScene('intro');

// Save current state as scene
app.sceneManager.saveCurrentAsScene('main-content');

Loading Scenes

app.sceneManager.loadScene('intro');

Listing Scenes

const scenes = app.sceneManager.listScenes();
// ['intro', 'main-content', 'outro']

Deleting Scenes

app.sceneManager.deleteScene('old-scene');

Scene Transitions

Define Transitions

// Time-based transition
app.sceneManager.defineTransition('intro', 'main', {
  condition: 'after',
  value: 3000,  // 3 seconds
  animation: 'fade'
});

// Event-based transition
app.sceneManager.defineTransition('main', 'outro', {
  condition: 'on',
  event: 'click',
  target: 'nextButton'
});

Chain Scenes

app.sceneManager.chain(['intro', 'main', 'outro'], {
  loop: false,
  autoPlay: true
});

Export/Import

// Export scene
const sceneData = app.sceneManager.exportScene('intro');
const json = JSON.stringify(sceneData);

// Import scene
app.sceneManager.importScene(JSON.parse(json));

Scene Structure

{
  id: 'scene_intro',
  name: 'Introduction',
  items: ['item_1', 'item_2'],
  relations: [
    { from: 'item_1', to: 'item_2', type: 'orbits', params: {...} }
  ],
  decorative: [
    { type: 'generator', name: 'drawSunburst', params: {...} }
  ],
  background: { color: '#1e293b' }
}

Current Scene

// Get current scene ID
const current = app.sceneManager.currentSceneId;

// Check if scene is modified
const dirty = app.sceneManager.isDirty;