from typing import Any from flask import jsonify, request from werkzeug.wrappers import Response import screens from core.flask_app import app @app.route("/game//scene-objects//collision", methods=["POST"]) def scene_object_collision(slug: str, object_id: int) -> Response | tuple[Response, int]: """Boîte de collision d'un objet de scène (voir "🧱 Collision" dans templates/scene_edit.html, static/js/play/conditions.js:: elementsOverlap pour son usage au jeu).""" body = request.get_json(silent=True) or {} obj = screens.get_scene_object(slug, object_id) if not obj: return jsonify({"error": "objet introuvable"}), 404 settings: dict[str, Any] = {"enabled": bool(body.get("enabled", True))} settings["shape"] = body.get("shape") if body.get("shape") in screens.COLLISION_SHAPES else "rectangle" for key in ("width", "height"): try: value = body.get(key) settings[key] = float(value) if value not in (None, "") else None except (TypeError, ValueError): settings[key] = None for key in ("offset_x", "offset_y"): try: settings[key] = float(body.get(key) or 0) except (TypeError, ValueError): settings[key] = 0 screens.set_scene_object_collision(slug, object_id, settings) obj = screens.get_scene_object(slug, object_id) assert obj is not None, ( # nosec B101 # noqa: S101 - narrowing de type, sur par construction "object_id valide (deja lu ci-dessus, rien ne l'a supprime entre-temps)" ) return jsonify({"ok": True, "collision": screens.resolve_collision_settings(obj)})