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();
}
|