File size: 2,501 Bytes
d091da8
 
33d38e5
 
39c89a5
d091da8
 
39c89a5
d091da8
 
39c89a5
33d38e5
1e8f4c6
 
 
 
 
 
 
 
 
 
 
 
eca7f7a
4b02dd9
 
eca7f7a
39c89a5
 
d091da8
33d38e5
 
 
 
 
 
eca7f7a
39c89a5
d091da8
 
 
 
 
 
 
 
4b02dd9
d091da8
 
4b02dd9
 
 
d091da8
 
 
 
33d38e5
eca7f7a
 
33d38e5
 
 
 
 
d091da8
eca7f7a
d091da8
39c89a5
 
 
33d38e5
39c89a5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
import { LAYOUTS, getNextLayoutType } from "./config";

// Map to store layout types for each segment
const segmentLayoutMap = new Map();

// Function to group segments into layouts
export function groupSegmentsIntoLayouts(segments) {
  if (!segments || segments.length === 0) return [];

  const layouts = [];

  segments.forEach((segment, index) => {
    // Ne pas créer de layout si le segment n'a pas d'images chargées
    if (!segment.images || segment.images.length === 0) {
      return;
    }

    const imageCount = segment.images.length;

    // Si le segment a déjà un layoutType défini, l'utiliser
    if (segment.layoutType) {
      layouts.push({ type: segment.layoutType, segments: [segment] });
      return;
    }

    // Si c'est le premier segment ou le dernier (mort/victoire), créer un layout COVER
    if (segment.is_first_step || segment.is_last_step) {
      layouts.push({ type: "COVER", segments: [segment] });
      return;
    }

    // Pour tous les autres segments, utiliser le layout existant ou en créer un nouveau
    let layoutType = segmentLayoutMap.get(segment.text);
    if (!layoutType) {
      layoutType = getNextLayoutType(layouts.length, imageCount);
      segmentLayoutMap.set(segment.text, layoutType);
    }
    layouts.push({ type: layoutType, segments: [segment] });
  });

  return layouts;
}

// Function to get panel dimensions for next image
export function getNextPanelDimensions(segments) {
  const nonChoiceSegments = segments.filter((segment) => !segment.isChoice);

  // Si c'est le premier segment ou le dernier (mort/victoire), utiliser le format COVER
  if (
    nonChoiceSegments.length === 0 ||
    (nonChoiceSegments.length === 1 && nonChoiceSegments[0].is_first_step) ||
    (nonChoiceSegments.length > 0 &&
      nonChoiceSegments[nonChoiceSegments.length - 1].is_last_step)
  ) {
    return LAYOUTS.COVER.panels[0];
  }

  // Pour les segments du milieu, utiliser le layout existant ou en créer un nouveau
  const lastSegment = nonChoiceSegments[nonChoiceSegments.length - 1];
  const imageCount = lastSegment.images?.length || 0;
  let layoutType = segmentLayoutMap.get(lastSegment.text);
  if (!layoutType) {
    layoutType = getNextLayoutType(nonChoiceSegments.length - 1, imageCount);
    segmentLayoutMap.set(lastSegment.text, layoutType);
  }

  return LAYOUTS[layoutType].panels[0];
}

// Function to reset layout map (call this when starting a new story)
export function resetLayoutMap() {
  segmentLayoutMap.clear();
}