- Deleted redundant components (`AddActionButton`, `AlertBox`, `AlertStack`, `BackButton`, `CancelButton`, and `CollapsableArea`) and related files. - Removed unused models (`Book`, `BookSerie`, `BookTables`, `Character`, and `Chapter`) to reduce codebase clutter. - Updated project structure and references to reflect these removals.
431 lines
20 KiB
TypeScript
431 lines
20 KiB
TypeScript
import {Dispatch, SetStateAction} from "react";
|
|
import {VerbalTimeProps} from "@/lib/types/story";
|
|
|
|
export function getVerbesStyle(verbalTimeValue: number, level: number): VerbalTimeProps {
|
|
switch (verbalTimeValue) {
|
|
case 1:
|
|
return {
|
|
actions: level === 1 ? 'Passé composé' : 'Passé simple',
|
|
descriptions: 'Imparfait',
|
|
dialogues: 'Passé composé',
|
|
thoughts: level === 3 ? 'Subjonctif imparfait' : 'Plus-que-parfait',
|
|
summary: '→ Narrations épurées, style classique',
|
|
};
|
|
case 2:
|
|
return {
|
|
actions: 'Passé composé',
|
|
descriptions: level === 1 ? 'Imparfait' : level === 2 ? 'Imparfait + infinitifs' : 'Conditionnel présent',
|
|
dialogues: level === 1 ? 'Présent' : level === 2 ? 'Présent + impératif' : 'Impératif',
|
|
thoughts: level === 1 ? 'Futur proche' : level === 2 ? 'Conditionnel présent' : 'Subjonctif présent',
|
|
summary: '→ Témoignages, récits autobiographiques',
|
|
};
|
|
case 3:
|
|
return {
|
|
actions: level === 1 ? 'Plus-que-parfait' : 'Passé antérieur',
|
|
descriptions: level === 1 ? 'Imparfait' : level === 2 ? 'Plus-que-parfait' : 'Conditionnel passé',
|
|
dialogues: level === 3 ? 'Passé antérieur' : 'Passé simple',
|
|
thoughts: level === 1 ? 'Plus-que-parfait' : 'Subjonctif imparfait',
|
|
summary: '→ Flashbacks littéraires, tragédies',
|
|
};
|
|
case 4:
|
|
return {
|
|
actions: level === 1 ? 'Présent simple' : level === 2 ? 'Présent' : 'Présent + participe présent',
|
|
descriptions: level === 1 ? 'Participe présent' : level === 2 ? 'Participe présent + infinitifs' : 'Participes présents enchaînés',
|
|
dialogues: level === 1 ? 'Présent' : level === 2 ? 'Impératif' : 'Impératif + infinitifs',
|
|
thoughts: level === 1 ? 'Futur proche' : level === 2 ? 'Futur simple' : 'Futur antérieur',
|
|
summary: '→ Urgence, immersion totale',
|
|
};
|
|
case 5:
|
|
return {
|
|
actions: 'Présent',
|
|
descriptions: level === 1 ? 'Gérondif' : level === 2 ? 'Gérondif + infinitifs' : 'Gérondif + conditionnel',
|
|
dialogues: level === 1 ? 'Présent' : level === 2 ? 'Conditionnel présent' : 'Infinitif',
|
|
thoughts: level === 1 ? 'Infinitif' : 'Infinitif passé',
|
|
summary: '→ Méditations philosophiques',
|
|
};
|
|
case 6:
|
|
return {
|
|
actions: level === 1 ? 'Futur simple' : 'Futur antérieur',
|
|
descriptions: level === 1 ? 'Futur proche' : level === 2 ? 'Futur antérieur' : 'Futur antérieur',
|
|
dialogues: level === 1 ? 'Futur simple' : 'Futur proche',
|
|
thoughts: level === 1 ? 'Futur proche' : 'Futur antérieur',
|
|
summary: '→ Prophéties, plans stratégiques',
|
|
};
|
|
case 7:
|
|
return {
|
|
actions: level === 1 ? 'Futur simple' : 'Futur antérieur',
|
|
descriptions: level === 1 ? 'Futur proche' : level === 2 ? 'Futur simple + conditionnel' : 'Conditionnel passé',
|
|
dialogues: level === 1 ? 'Futur proche' : level === 2 ? 'Futur antérieur' : 'Futur simple',
|
|
thoughts: level === 1 ? 'Futur simple' : level === 2 ? 'Conditionnel passé' : 'Futur antérieur',
|
|
summary: '→ Dystopies, récits post-apocalyptiques',
|
|
};
|
|
case 8:
|
|
return {
|
|
actions: 'Imparfait',
|
|
descriptions: level === 1 ? 'Imparfait' : level === 2 ? 'Conditionnel présent' : 'Conditionnel passé',
|
|
dialogues: level === 1 ? 'Présent' : level === 2 ? 'Infinitif' : 'Infinitifs',
|
|
thoughts: level === 1 ? 'Subjonctif présent' : level === 2 ? 'Subjonctif imparfait' : 'Subjonctif imparfait',
|
|
summary: '→ Rêves, souvenirs déformés',
|
|
};
|
|
case 9:
|
|
return {
|
|
actions: 'Conditionnel présent',
|
|
descriptions: 'Conditionnel passé',
|
|
dialogues: 'Subjonctif imparfait',
|
|
thoughts: level === 3 ? 'Subjonctif imparfait' : 'Plus-que-parfait',
|
|
summary: '→ Uchronies, réalités alternatives',
|
|
};
|
|
case 10:
|
|
return {
|
|
actions: level === 1 ? 'Subjonctif présent' : 'Subjonctif imparfait',
|
|
descriptions: level === 1 ? 'Subjonctif présent' : 'Subjonctif imparfait',
|
|
dialogues: 'Impératif',
|
|
thoughts: level === 3 ? 'Subjonctif imparfait' : 'Conditionnel passé',
|
|
summary: '→ Drames psychologiques, dilemmes',
|
|
};
|
|
case 11:
|
|
return {
|
|
actions: 'Passé composé',
|
|
descriptions: 'Imparfait',
|
|
dialogues: 'Plus-que-parfait',
|
|
thoughts: 'Infinitif passé',
|
|
summary: '→ Regrets, introspection nostalgique',
|
|
};
|
|
case 12:
|
|
return {
|
|
actions: 'Présent',
|
|
descriptions: level === 1 ? 'Passé composé' : 'Passé composé + futur antérieur',
|
|
dialogues: level === 1 ? 'Futur proche' : 'Futur antérieur',
|
|
thoughts: 'Participe présent',
|
|
summary: '→ Crise en cours, compte à rebours',
|
|
};
|
|
case 13:
|
|
return {
|
|
actions: level === 1 ? 'Présent simple' : level === 2 ? 'Présent + participe présent' : 'Participes présents enchaînés',
|
|
descriptions: level === 1 ? 'Imparfait' : level === 2 ? 'Participe présent + adjectifs' : 'Subjonctif présent',
|
|
dialogues: level === 1 ? 'Présent' : level === 2 ? 'Conditionnel présent' : 'Subjonctif présent',
|
|
thoughts: level === 1 ? 'Infinitif' : level === 2 ? 'Infinitif passé' : 'Subjonctif imparfait',
|
|
summary: '→ Émotions intenses, introspections vives (romances, drames psychologiques)',
|
|
};
|
|
case 14:
|
|
return {
|
|
actions: 'Présent',
|
|
descriptions: level === 1 ? 'Gérondif' : level === 2 ? 'Gérondif + infinitifs' : 'Conditionnel présent',
|
|
dialogues: level === 1 ? 'Présent' : level === 2 ? 'Impératif' : 'Infinitif',
|
|
thoughts: level === 1 ? 'Infinitif' : level === 2 ? 'Infinitif passé' : 'Subjonctif imparfait',
|
|
summary: '→ Réflexions profondes, analyse des émotions (nouvelles philosophiques, récits introspectifs)',
|
|
};
|
|
case 15:
|
|
return {
|
|
actions: level === 1 ? 'Présent simple' : level === 2 ? 'Présent + passé simple' : 'Présent + passé antérieur',
|
|
descriptions: level === 1 ? 'Imparfait' : level === 2 ? 'Passé composé' : 'Conditionnel passé',
|
|
dialogues: level === 1 ? 'Présent' : level === 2 ? 'Passé simple' : 'Futur antérieur',
|
|
thoughts: level === 1 ? 'Infinitif' : level === 2 ? 'Plus-que-parfait' : 'Subjonctif imparfait',
|
|
summary: '→ Histoires historiques avec une intensité immédiate (batailles, moments décisifs)',
|
|
};
|
|
case 16:
|
|
return {
|
|
actions: level === 1 ? 'Passé composé' : level === 2 ? 'Imparfait + passé simple' : 'Plus-que-parfait',
|
|
descriptions: level === 1 ? 'Imparfait' : level === 2 ? 'Participe passé' : 'Conditionnel passé',
|
|
dialogues: level === 1 ? 'Présent' : level === 2 ? 'Imparfait' : 'Subjonctif imparfait',
|
|
thoughts: level === 1 ? 'Infinitif' : level === 2 ? 'Infinitif passé' : 'Subjonctif présent',
|
|
summary: '→ Récits introspectifs, auto-analyse (autofictions, récits de croissance personnelle)',
|
|
};
|
|
case 17:
|
|
return {
|
|
actions: level === 1 ? 'Futur simple' : level === 2 ? 'Futur antérieur' : 'Conditionnel passé',
|
|
descriptions: level === 1 ? 'Futur proche' : level === 2 ? 'Futur antérieur' : 'Conditionnel présent',
|
|
dialogues: level === 1 ? 'Futur simple' : level === 2 ? 'Futur antérieur' : 'Subjonctif présent',
|
|
thoughts: level === 1 ? 'Infinitif' : level === 2 ? 'Futur antérieur' : 'Conditionnel passé',
|
|
summary: '→ Prophéties, visions apocalyptiques (récits mystiques, romans de science-fiction)',
|
|
};
|
|
case 18:
|
|
return {
|
|
actions: level === 1 ? 'Conditionnel présent' : level === 2 ? 'Conditionnel passé' : 'Subjonctif imparfait',
|
|
descriptions: level === 1 ? 'Conditionnel présent' : level === 2 ? 'Conditionnel passé' : 'Subjonctif présent',
|
|
dialogues: level === 1 ? 'Conditionnel présent' : level === 2 ? 'Subjonctif imparfait' : 'Impératif',
|
|
thoughts: level === 1 ? 'Infinitif' : level === 2 ? 'Infinitif passé' : 'Subjonctif imparfait',
|
|
summary: '→ Mondes parallèles, uchronies (romans alternatifs, récits de fantasy)',
|
|
};
|
|
case 19:
|
|
return {
|
|
actions: level === 1 ? 'Imparfait' : level === 2 ? 'Imparfait + participe présent' : 'Participes présents enchaînés',
|
|
descriptions: level === 1 ? 'Imparfait' : level === 2 ? 'Participe présent + adjectifs' : 'Subjonctif présent',
|
|
dialogues: level === 1 ? 'Présent' : level === 2 ? 'Imparfait' : 'Subjonctif imparfait',
|
|
thoughts: level === 1 ? 'Infinitif' : level === 2 ? 'Infinitif passé' : 'Subjonctif présent',
|
|
summary: '→ Lyrisme, poésie narrative (récits oniriques, nouvelles littéraires)',
|
|
};
|
|
case 20:
|
|
return {
|
|
actions: level === 1 ? 'Présent simple' : level === 2 ? 'Imparfait' : 'Futur simple',
|
|
descriptions: level === 1 ? 'Imparfait' : level === 2 ? 'Participe présent' : 'Conditionnel présent',
|
|
dialogues: level === 1 ? 'Présent' : level === 2 ? 'Imparfait' : 'Futur proche',
|
|
thoughts: level === 1 ? 'Infinitif' : level === 2 ? 'Plus-que-parfait' : 'Subjonctif présent',
|
|
summary: '→ Immersion totale (récits interactifs, jeux de rôle, romans à choix multiples)',
|
|
};
|
|
default:
|
|
return {
|
|
actions: 'Passé simple',
|
|
descriptions: 'Imparfait',
|
|
dialogues: 'Passé composé',
|
|
thoughts: 'Plus-que-parfait',
|
|
summary: '→ Narrations épurées, style classique',
|
|
};
|
|
}
|
|
}
|
|
|
|
export function presetStoryType(
|
|
presetType: string,
|
|
setTone: Dispatch<SetStateAction<string>>,
|
|
setAtmosphere: Dispatch<SetStateAction<string>>,
|
|
setVerbTense: Dispatch<SetStateAction<string>>,
|
|
setPerson: Dispatch<SetStateAction<string>>,
|
|
setDialogueType: Dispatch<SetStateAction<string>>,
|
|
setIsExplicit: Dispatch<SetStateAction<boolean>>,
|
|
): void {
|
|
switch (presetType) {
|
|
case '1':
|
|
setTone('Suspense angoissant, mystère troublant');
|
|
setAtmosphere('Tension oppressante, ombres menaçantes');
|
|
setVerbTense('3');
|
|
setPerson('1');
|
|
setDialogueType('3');
|
|
setIsExplicit(false);
|
|
break;
|
|
case '2':
|
|
setTone('Brutalité crue, terreur psychologique');
|
|
setAtmosphere('Claustrophobie, clair-obscur sinistre');
|
|
setVerbTense('10');
|
|
setPerson('4');
|
|
setDialogueType('4');
|
|
setIsExplicit(true);
|
|
break;
|
|
case '3':
|
|
setTone('Magie envoûtante, innocence poétique');
|
|
setAtmosphere('Forêt luminescente, brume enchantée');
|
|
setVerbTense('19');
|
|
setPerson('3');
|
|
setDialogueType('1');
|
|
setIsExplicit(false);
|
|
break;
|
|
case '4':
|
|
setTone('Froidure technologique, désespoir systémique');
|
|
setAtmosphere('Métal rouillé, lumières néon vacillantes');
|
|
setVerbTense('7');
|
|
setPerson('5');
|
|
setDialogueType('3');
|
|
setIsExplicit(false);
|
|
break;
|
|
case '5':
|
|
setTone('Passion tourmentée, mélancolie sensuelle');
|
|
setAtmosphere('Pluie fine, chambres aux rideaux lourds');
|
|
setVerbTense('13');
|
|
setPerson('1');
|
|
setDialogueType('1');
|
|
setIsExplicit(true);
|
|
break;
|
|
case '6':
|
|
setTone('Héroïsme grandiose, dangers exaltants');
|
|
setAtmosphere('Vastes paysages, ruines anciennes');
|
|
setVerbTense('4');
|
|
setPerson('6');
|
|
setDialogueType('3');
|
|
setIsExplicit(false);
|
|
break;
|
|
case '7':
|
|
setTone('Méditation existentielle, questions sans réponses');
|
|
setAtmosphere('Bibliothèque poussiéreuse, nuit silencieuse');
|
|
setVerbTense('5');
|
|
setPerson('5');
|
|
setDialogueType('4');
|
|
setIsExplicit(true);
|
|
break;
|
|
case '8':
|
|
setTone('Tension psychologique, suspense mental');
|
|
setAtmosphere('Isolation, paranoïa croissante');
|
|
setVerbTense('10');
|
|
setPerson('4');
|
|
setDialogueType('4');
|
|
setIsExplicit(true);
|
|
break;
|
|
case '9':
|
|
setTone('Mystère obscur, surnaturel inquiétant');
|
|
setAtmosphere('Forêts sombres, créatures cachées');
|
|
setVerbTense('3');
|
|
setPerson('1');
|
|
setDialogueType('3');
|
|
setIsExplicit(false);
|
|
break;
|
|
case '10':
|
|
setTone('Amour interdit, passion à travers les âges');
|
|
setAtmosphere('Châteaux majestueux, bals somptueux');
|
|
setVerbTense('1');
|
|
setPerson('3');
|
|
setDialogueType('1');
|
|
setIsExplicit(true);
|
|
break;
|
|
case '11':
|
|
setTone('Dure réalité, enquête sombre');
|
|
setAtmosphere('Rues sombres, ambiance de crime');
|
|
setVerbTense('16');
|
|
setPerson('5');
|
|
setDialogueType('4');
|
|
setIsExplicit(true);
|
|
break;
|
|
case '12':
|
|
setTone('Espoir futuriste, société idéale');
|
|
setAtmosphere('Villes lumineuses, technologie avancée');
|
|
setVerbTense('6');
|
|
setPerson('4');
|
|
setDialogueType('3');
|
|
setIsExplicit(false);
|
|
break;
|
|
case '13':
|
|
setTone('Magie contemporaine, réalisme enchanté');
|
|
setAtmosphere('Ville moderne, éléments féeriques');
|
|
setVerbTense('4');
|
|
setPerson('1');
|
|
setDialogueType('1');
|
|
setIsExplicit(true);
|
|
break;
|
|
case '14':
|
|
setTone('Conflits émotionnels, relations complexes');
|
|
setAtmosphere('Intérieur chaleureux, tensions sous-jacentes');
|
|
setVerbTense('13');
|
|
setPerson('1');
|
|
setDialogueType('1');
|
|
setIsExplicit(true);
|
|
break;
|
|
case '15':
|
|
setTone('Exploration audacieuse, dangers marins');
|
|
setAtmosphere('Océan infini, navires anciens');
|
|
setVerbTense('4');
|
|
setPerson('6');
|
|
setDialogueType('3');
|
|
setIsExplicit(false);
|
|
break;
|
|
case '16':
|
|
setTone('Quête héroïque, magie puissante');
|
|
setAtmosphere('Mondes imaginaires, créatures mythiques');
|
|
setVerbTense('19');
|
|
setPerson('3');
|
|
setDialogueType('1');
|
|
setIsExplicit(true);
|
|
break;
|
|
case '17':
|
|
setTone('Amour moderne, relations actuelles');
|
|
setAtmosphere('Ville animée, cafés cosy');
|
|
setVerbTense('13');
|
|
setPerson('1');
|
|
setDialogueType('1');
|
|
setIsExplicit(true);
|
|
break;
|
|
case '18':
|
|
setTone("Intrigue internationale, secrets d'État");
|
|
setAtmosphere('Villes étrangères, tensions diplomatiques');
|
|
setVerbTense('16');
|
|
setPerson('5');
|
|
setDialogueType('4');
|
|
setIsExplicit(true);
|
|
break;
|
|
case '19':
|
|
setTone('Survie désespérée, monde en ruines');
|
|
setAtmosphere('Paysages dévastés, ressources rares');
|
|
setVerbTense('7');
|
|
setPerson('4');
|
|
setDialogueType('3');
|
|
setIsExplicit(false);
|
|
break;
|
|
case '20':
|
|
setTone('Leçons de vie, valeurs profondes');
|
|
setAtmosphere('Village paisible, nature environnante');
|
|
setVerbTense('1');
|
|
setPerson('3');
|
|
setDialogueType('1');
|
|
setIsExplicit(true);
|
|
break;
|
|
}
|
|
}
|
|
|
|
export function getNarrativePerson(value: number, level: number): string {
|
|
if (level === 1) {
|
|
switch (value) {
|
|
case 1:
|
|
return 'Première personne (Je acteur) - Parfait pour les débuts (ex: Je marchais)';
|
|
case 3:
|
|
return 'Troisième omnisciente - Narration globale (ex: Il marchait)';
|
|
default:
|
|
return 'Première personne';
|
|
}
|
|
} else if (level === 2) {
|
|
switch (value) {
|
|
case 1:
|
|
return 'Première personne (Je acteur)';
|
|
case 2:
|
|
return 'Première personne (Je témoin) - Observateur (ex: Je le regardais marcher)';
|
|
case 3:
|
|
return 'Troisième omnisciente';
|
|
case 4:
|
|
return 'Troisième limitée - Focus sur un personnage (ex: Il marchait, ignorant le danger)';
|
|
default:
|
|
return 'Première personne';
|
|
}
|
|
} else if (level === 3) {
|
|
switch (value) {
|
|
case 1:
|
|
return 'Première personne (Je acteur)';
|
|
case 2:
|
|
return 'Première personne (Je témoin)';
|
|
case 3:
|
|
return 'Troisième omnisciente';
|
|
case 4:
|
|
return 'Troisième limitée';
|
|
case 5:
|
|
return 'Deuxième personne (Tu) - Immersion forte (ex: Tu marches vers la mort)';
|
|
case 6:
|
|
return 'Nous collectif - Voix chorale (ex: Nous marchions, unis par le destin)';
|
|
default:
|
|
return 'Troisième omnisciente';
|
|
}
|
|
}
|
|
return 'Première personne';
|
|
}
|
|
|
|
export function getDialogueType(value: number, level: number): string {
|
|
if (level === 1) {
|
|
switch (value) {
|
|
case 1:
|
|
return 'Dialogue direct - Paroles exactes (ex: "Je t\'aime !")';
|
|
case 2:
|
|
return 'Dialogue indirect - Résumé par le narrateur (ex: Il dit qu\'il m\'aime)';
|
|
default:
|
|
return 'Dialogue direct';
|
|
}
|
|
} else if (level === 2) {
|
|
switch (value) {
|
|
case 1:
|
|
return 'Dialogue direct';
|
|
case 2:
|
|
return 'Dialogue indirect';
|
|
case 3:
|
|
return 'Dialogue mixte (ex: "Je t\'aime" dit-il, puis explique ses sentiments)';
|
|
default:
|
|
return 'Dialogue direct';
|
|
}
|
|
} else if (level === 3) {
|
|
switch (value) {
|
|
case 1:
|
|
return 'Dialogue direct';
|
|
case 2:
|
|
return 'Dialogue indirect';
|
|
case 3:
|
|
return 'Dialogue mixte';
|
|
case 4:
|
|
return 'Monologue intérieur (ex: *Je ne peux pas le perdre...*)';
|
|
default:
|
|
return 'Dialogue direct';
|
|
}
|
|
}
|
|
return 'Dialogue direct';
|
|
}
|