Intègre un chat IA capable de manipuler la scène via les mêmes fonctions que l'éditeur manuel (objets, variables, déclencheurs, images générées), avec conversations multiples par écran façon Claude. Corrige au passage le rafraîchissement pjax hors-ordre, l'onglet IA/déclencheurs vide après sélection d'un objet, la comparaison de booléens dans les conditions, et le blocage du glisser-déposer hors du cadre caméra après un redimensionnement de fond par l'IA. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
140 lines
7.6 KiB
Python
140 lines
7.6 KiB
Python
"""
|
|
screens.py — écrans de jeu : un seul moteur d'écran, la scène 2D "jeu_2d"
|
|
(voir screens/scenes/) — objets posés en pixels, enchaînement des écrans,
|
|
et logique déclenchée par clic/collision/clavier/minuteur (voir
|
|
screens/flow/).
|
|
|
|
Tout est stocké dans la même base SQLite que le reste du jeu
|
|
(projects/<slug>/game.db) :
|
|
- _screens : un écran du jeu (une scène...)
|
|
- _scene_objects : chaque objet posé sur une scène (personnage,
|
|
décor, fond, widgets d'interface...)
|
|
- _flow_nodes/_flow_edges : le graphe de logique de chaque écran
|
|
|
|
Ce fichier est désormais un package (voir les sous-dossiers) organisé
|
|
selon "un fichier = une fonction, un dossier = une responsabilité" ; ce
|
|
module se contente de ré-exporter l'intégralité de l'API publique
|
|
utilisée par app.py et les templates, afin que `import screens` continue
|
|
de fonctionner à l'identique.
|
|
"""
|
|
|
|
from .data_definitions.data_definition_options import data_definition_options
|
|
|
|
from .labels.action_type_labels import ACTION_TYPE_LABELS
|
|
from .labels.element_action_properties import (
|
|
ELEMENT_ORIENTATION_VALUES, ELEMENT_ORIENTATION_LABELS,
|
|
)
|
|
from .labels.element_visibility import ELEMENT_VISIBILITY_VALUES, ELEMENT_VISIBILITY_LABELS
|
|
from .labels.data_operations import DATA_OPERATIONS, DATA_OPERATION_LABELS
|
|
from .labels.sprite_library import PUBLIC_SPRITE_LIBRARY
|
|
from .labels.animal_sprite_library import ADMIN_SPRITE_LIBRARY
|
|
|
|
# SPRITE_LIBRARY (fusionné) : utilisé par resolve_personnage_animations
|
|
# pour la résolution RUNTIME (jeu jouable, tous rôles confondus — voir le
|
|
# plan "Bibliothèque de sprites animaux CraftPix" : aucun filtrage par
|
|
# rôle au runtime, seulement à la galerie/l'écriture). Les routes qui
|
|
# alimentent la galerie de l'éditeur doivent utiliser PUBLIC_SPRITE_LIBRARY
|
|
# ou ADMIN_SPRITE_LIBRARY selon le rôle, jamais SPRITE_LIBRARY directement.
|
|
SPRITE_LIBRARY = {**PUBLIC_SPRITE_LIBRARY, **ADMIN_SPRITE_LIBRARY}
|
|
ADMIN_ONLY_CHARACTER_SLUGS = set(ADMIN_SPRITE_LIBRARY)
|
|
from .labels.sprite_gallery import sprite_gallery_families
|
|
from .labels.background_library import BACKGROUND_LIBRARY
|
|
# Un seul pack aujourd'hui, licence CraftPix — tout BACKGROUND_LIBRARY est
|
|
# admin-only (voir core/sprite_gate.py::forbid_admin_only_background),
|
|
# jamais de version "publique" comme pour les personnages Kenney.
|
|
ADMIN_ONLY_BACKGROUND_SLUGS = set(BACKGROUND_LIBRARY)
|
|
from .rendering.list_used_forge_characters import list_used_forge_characters
|
|
|
|
from .flow.constants import (
|
|
TRIGGER_EVENTS, CONDITION_OPERATORS, CONDITION_OPERATOR_LABELS, CLICKED_ROW_ID, LAST_INSERTED_ROW_ID,
|
|
)
|
|
|
|
from .rendering.trigger_for import _trigger_for
|
|
from .rendering.personnage_data import resolve_personnage_data, resolve_personnage_animations, resolve_personnage_idle_frame
|
|
from .rendering.personnage_role import resolve_personnage_role, PERSONNAGE_ROLES, PERSONNAGE_ROLE_LABELS, DEFAULT_PERSONNAGE_ROLE
|
|
from .rendering.collision_settings import resolve_collision_settings, DEFAULT_COLLISION_SETTINGS, COLLISION_SHAPES
|
|
from .rendering.collision_rules import (
|
|
resolve_collision_rules, sanitize_collision_rules, set_dialogue_lines_in_rules, set_then_action_in_rules,
|
|
)
|
|
from .rendering.personnage_commands import resolve_personnage_commands, DEFAULT_PERSONNAGE_COMMANDS, sanitize_extra_commands
|
|
from .rendering.scene_object_names import list_named_scene_object_names
|
|
from .rendering.dialogue_box_style import resolve_dialogue_box_style, sanitize_dialogue_box_style, DEFAULT_DIALOGUE_BOX_STYLE, FONT_WEIGHT_CHOICES
|
|
|
|
from .screens_repo.ensure_schema import ensure_schema
|
|
from .screens_repo.list_screens import list_screens
|
|
from .screens_repo.get_screen import get_screen
|
|
from .screens_repo.create_screen import create_screen
|
|
from .screens_repo.rename_screen import rename_screen
|
|
from .screens_repo.delete_screen import delete_screen
|
|
from .screens_repo.move_screen import move_screen
|
|
from .screens_repo.screens_referencing import screens_referencing
|
|
from .screens_repo.set_scene_size import set_scene_size
|
|
from .screens_repo.set_screen_background_music import set_screen_background_music
|
|
|
|
from .scenes.ensure_scene_schema import ensure_scene_schema
|
|
from .scenes.add_scene_object import add_scene_object
|
|
from .scenes.list_scene_objects import list_scene_objects
|
|
from .scenes.resolve_scene_world_size import resolve_scene_world_size
|
|
from .scenes.get_scene_object import get_scene_object
|
|
from .scenes.update_scene_object_geometry import update_scene_object_geometry
|
|
from .scenes.delete_scene_object import delete_scene_object
|
|
from .scenes.set_scene_object_personnage_data import set_scene_object_personnage_data
|
|
from .scenes.set_scene_object_commands import set_scene_object_commands
|
|
from .scenes.set_scene_object_role import set_scene_object_role
|
|
from .scenes.set_scene_object_collision import set_scene_object_collision
|
|
from .scenes.set_scene_object_collision_rules import set_scene_object_collision_rules
|
|
from .scenes.set_scene_object_name import set_scene_object_name
|
|
from .scenes.set_scene_object_dialogue_box_style import set_scene_object_dialogue_box_style
|
|
from .scenes.render_scene_object import render_scene_object
|
|
from .scenes.build_collision_rule_objects import build_collision_rule_objects
|
|
from .scenes.append_action_to_trigger import append_action_to_trigger
|
|
from .rendering.trigger_graph import (
|
|
list_all_triggers, list_all_collision_objects, collect_all_dialogue_lines,
|
|
list_completable_dialogue_ids,
|
|
)
|
|
from .scenes.flow_palette import TRIGGER_EVENTS_2D, ACTION_TYPE_LABELS_2D, OBJECT_ACTION_PROPERTIES
|
|
|
|
from .flow.ensure_flow_schema import ensure_flow_schema
|
|
from .flow.list_flow_nodes import list_flow_nodes
|
|
from .flow.list_flow_edges import list_flow_edges
|
|
from .flow.get_flow_node import get_flow_node
|
|
from .flow.add_flow_node import add_flow_node
|
|
from .flow.move_flow_node import move_flow_node
|
|
from .flow.delete_flow_node import delete_flow_node
|
|
from .flow.add_flow_edge import add_flow_edge
|
|
from .flow.delete_flow_edge import delete_flow_edge
|
|
|
|
from .flow.blocks.list_flow_blocks import list_flow_blocks
|
|
from .flow.blocks.get_flow_block import get_flow_block
|
|
from .flow.blocks.create_flow_block import create_flow_block
|
|
from .flow.blocks.update_flow_block import update_flow_block
|
|
from .flow.blocks.delete_flow_block import delete_flow_block
|
|
from .flow.blocks.blocks_view import blocks_view
|
|
|
|
from .data_actions.apply_data_action import apply_data_action
|
|
from .data_actions.apply_variable_action import apply_variable_action
|
|
from .data_actions.apply_score_action import apply_score_action
|
|
from .data_actions.apply_status_action import apply_status_action
|
|
from .data_actions.apply_add_row_action import apply_add_row_action
|
|
|
|
from .animations.ensure_animation_schema import ensure_animation_schema
|
|
from .animations.list_animation_clips import list_animation_clips
|
|
from .animations.get_animation_clip import get_animation_clip
|
|
from .animations.add_animation_clip import add_animation_clip
|
|
from .animations.update_animation_clip import update_animation_clip
|
|
from .animations.delete_animation_clip import delete_animation_clip
|
|
from .animations.animate_css_catalog import ANIMATE_CSS_CATALOG, ANIMATE_CSS_LABELS
|
|
|
|
from .custom_events.list_custom_event_usages import list_custom_event_usages
|
|
from .custom_events.delete_custom_event import delete_custom_event
|
|
|
|
from .payload.full_game_payload import full_game_payload
|
|
|
|
from .ia.ensure_ia_chat_schema import ensure_ia_chat_schema
|
|
from .ia.list_ia_chat_messages import list_ia_chat_messages
|
|
from .ia.add_ia_chat_message import add_ia_chat_message
|
|
from .ia.create_ia_conversation import create_ia_conversation
|
|
from .ia.list_ia_conversations import list_ia_conversations
|
|
from .ia.get_ia_conversation import get_ia_conversation
|
|
from .ia.delete_ia_conversation import delete_ia_conversation
|