add: physics in game scene
This commit is contained in:
@@ -15,10 +15,20 @@ This document describes the code that exists today in the repository.
|
|||||||
- either the map scene or the debug physics test scene
|
- either the map scene or the debug physics test scene
|
||||||
- the player rig when the active camera mode is `player`
|
- the player rig when the active camera mode is `player`
|
||||||
- `src/world/GameMap.tsx` loads map nodes from `public/map.json`, resolves available models, and builds the collision octree.
|
- `src/world/GameMap.tsx` loads map nodes from `public/map.json`, resolves available models, and builds the collision octree.
|
||||||
|
- `src/world/GameStageContent.tsx` is wrapped in Rapier `Physics` in the production game scene so stage gameplay objects can use physics without moving the map or player to Rapier.
|
||||||
- `src/world/debug/TestMap.tsx` provides a debug-oriented interaction and physics map.
|
- `src/world/debug/TestMap.tsx` provides a debug-oriented interaction and physics map.
|
||||||
- `src/world/player/Player.tsx` mounts the camera and controller.
|
- `src/world/player/Player.tsx` mounts the camera and controller.
|
||||||
- `src/world/player/PlayerController.tsx` owns pointer lock movement, jump handling, and interaction input.
|
- `src/world/player/PlayerController.tsx` owns pointer lock movement, jump handling, and interaction input.
|
||||||
|
|
||||||
|
## Physics Boundaries
|
||||||
|
|
||||||
|
The project currently uses two collision layers with separate responsibilities:
|
||||||
|
|
||||||
|
- `GameMap` builds an octree used by the player controller for map collision.
|
||||||
|
- `GameStageContent` is wrapped in Rapier `Physics` for gameplay objects such as repair triggers, cases, grabbables, and future mission-specific objects.
|
||||||
|
|
||||||
|
Keep the player and map octree outside the Rapier provider until there is a deliberate migration plan. This avoids mixing player movement rules with object physics before the gameplay systems need it.
|
||||||
|
|
||||||
## Interaction Model
|
## Interaction Model
|
||||||
|
|
||||||
- `src/managers/InteractionManager.ts` is the current interaction state source.
|
- `src/managers/InteractionManager.ts` is the current interaction state source.
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ This document lists features that are implemented in the current codebase.
|
|||||||
- Fullscreen React Three Fiber scene
|
- Fullscreen React Three Fiber scene
|
||||||
- Main map scene loaded from `public/map.json` and matching `public/models/{name}/model.glb` or `model.gltf` assets
|
- Main map scene loaded from `public/map.json` and matching `public/models/{name}/model.glb` or `model.gltf` assets
|
||||||
- Debug physics test scene selectable from the debug panel
|
- Debug physics test scene selectable from the debug panel
|
||||||
|
- Rapier physics context available for production stage gameplay objects
|
||||||
- Ambient and directional lighting
|
- Ambient and directional lighting
|
||||||
- Environment background setup
|
- Environment background setup
|
||||||
|
|
||||||
@@ -23,6 +24,7 @@ This document lists features that are implemented in the current codebase.
|
|||||||
- Focus detection by distance and raycast
|
- Focus detection by distance and raycast
|
||||||
- Trigger interactions activated with `E`
|
- Trigger interactions activated with `E`
|
||||||
- Grab interactions activated with the primary mouse button
|
- Grab interactions activated with the primary mouse button
|
||||||
|
- Physics-backed gameplay objects can be mounted inside stage content without replacing player octree collision
|
||||||
- Interaction prompt shown for trigger interactions
|
- Interaction prompt shown for trigger interactions
|
||||||
|
|
||||||
## Audio
|
## Audio
|
||||||
|
|||||||
@@ -98,10 +98,20 @@ Ce document décrit le code réellement présent aujourd'hui dans le dépôt.
|
|||||||
- soit la carte principale, soit la scène de test physique debug
|
- soit la carte principale, soit la scène de test physique debug
|
||||||
- le rig joueur quand le mode caméra actif est \`player\`
|
- le rig joueur quand le mode caméra actif est \`player\`
|
||||||
- \`src/world/GameMap.tsx\` charge les modèles de carte disponibles et construit l'octree de collision.
|
- \`src/world/GameMap.tsx\` charge les modèles de carte disponibles et construit l'octree de collision.
|
||||||
|
- \`src/world/GameStageContent.tsx\` est enveloppé dans le contexte Rapier \`Physics\` dans la scène de jeu de production afin que les objets gameplay de stage puissent utiliser la physique sans migrer la carte ou le joueur vers Rapier.
|
||||||
- \`src/world/debug/TestMap.tsx\` fournit une carte orientée debug pour les interactions et la physique.
|
- \`src/world/debug/TestMap.tsx\` fournit une carte orientée debug pour les interactions et la physique.
|
||||||
- \`src/world/player/Player.tsx\` monte la caméra et le contrôleur.
|
- \`src/world/player/Player.tsx\` monte la caméra et le contrôleur.
|
||||||
- \`src/world/player/PlayerController.tsx\` gère le mouvement pointer lock, le saut et les inputs d'interaction.
|
- \`src/world/player/PlayerController.tsx\` gère le mouvement pointer lock, le saut et les inputs d'interaction.
|
||||||
|
|
||||||
|
## Frontières physiques
|
||||||
|
|
||||||
|
Le projet utilise actuellement deux couches de collision avec des responsabilités séparées :
|
||||||
|
|
||||||
|
- \`GameMap\` construit une octree utilisée par le contrôleur joueur pour les collisions avec la carte.
|
||||||
|
- \`GameStageContent\` est enveloppé dans Rapier \`Physics\` pour les objets gameplay comme les triggers de réparation, les mallettes, les objets saisissables et les futurs objets spécifiques aux missions.
|
||||||
|
|
||||||
|
Le joueur et l'octree de carte doivent rester hors du provider Rapier tant qu'il n'existe pas de plan de migration volontaire. Cela évite de mélanger les règles de déplacement joueur avec la physique d'objets avant que les systèmes gameplay en aient besoin.
|
||||||
|
|
||||||
## Modèle d'interaction
|
## Modèle d'interaction
|
||||||
|
|
||||||
- \`src/managers/InteractionManager.ts\` est la source d'état actuelle des interactions.
|
- \`src/managers/InteractionManager.ts\` est la source d'état actuelle des interactions.
|
||||||
@@ -392,6 +402,7 @@ Ce document liste les fonctionnalités présentes dans le code actuel.
|
|||||||
- Scène React Three Fiber plein écran
|
- Scène React Three Fiber plein écran
|
||||||
- Carte principale chargée depuis \`public/models/{name}/model.glb\`, avec fallback vers \`model.gltf\`
|
- Carte principale chargée depuis \`public/models/{name}/model.glb\`, avec fallback vers \`model.gltf\`
|
||||||
- Scène de test physique debug sélectionnable depuis le panneau debug
|
- Scène de test physique debug sélectionnable depuis le panneau debug
|
||||||
|
- Contexte physique Rapier disponible pour les objets gameplay de stage en production
|
||||||
- Éclairage ambiant et directionnel
|
- Éclairage ambiant et directionnel
|
||||||
- Configuration de l'environnement de fond
|
- Configuration de l'environnement de fond
|
||||||
|
|
||||||
@@ -408,6 +419,7 @@ Ce document liste les fonctionnalités présentes dans le code actuel.
|
|||||||
- Détection de focus par distance et raycast
|
- Détection de focus par distance et raycast
|
||||||
- Interactions trigger activées avec \`E\`
|
- Interactions trigger activées avec \`E\`
|
||||||
- Interactions grab activées avec le bouton principal de la souris
|
- Interactions grab activées avec le bouton principal de la souris
|
||||||
|
- Les objets gameplay avec physique peuvent être montés dans le contenu de stage sans remplacer la collision octree du joueur
|
||||||
- Prompt d'interaction affiché pour les interactions trigger
|
- Prompt d'interaction affiché pour les interactions trigger
|
||||||
|
|
||||||
## Audio
|
## Audio
|
||||||
|
|||||||
+4
-1
@@ -1,4 +1,5 @@
|
|||||||
import { useState } from "react";
|
import { useState } from "react";
|
||||||
|
import { Physics } from "@react-three/rapier";
|
||||||
import type { Octree } from "three/addons/math/Octree.js";
|
import type { Octree } from "three/addons/math/Octree.js";
|
||||||
import {
|
import {
|
||||||
PLAYER_SPAWN_POSITION_GAME,
|
PLAYER_SPAWN_POSITION_GAME,
|
||||||
@@ -43,7 +44,9 @@ export function World(): React.JSX.Element {
|
|||||||
<>
|
<>
|
||||||
<GameMusic />
|
<GameMusic />
|
||||||
<GameMap onOctreeReady={setOctree} />
|
<GameMap onOctreeReady={setOctree} />
|
||||||
<GameStageContent />
|
<Physics>
|
||||||
|
<GameStageContent />
|
||||||
|
</Physics>
|
||||||
</>
|
</>
|
||||||
) : (
|
) : (
|
||||||
<TestMap onOctreeReady={setOctree} />
|
<TestMap onOctreeReady={setOctree} />
|
||||||
|
|||||||
Reference in New Issue
Block a user