Changed dice scene name and added handlers for pointer cancel and leave
This commit is contained in:
parent
8432176014
commit
2775fc6e16
@ -8,7 +8,7 @@ import usePreventTouch from "../../../helpers/usePreventTouch";
|
|||||||
|
|
||||||
const diceThrowSpeed = 2;
|
const diceThrowSpeed = 2;
|
||||||
|
|
||||||
function DiceScene({ onSceneMount, onPointerDown, onPointerUp }) {
|
function DiceInteraction({ onSceneMount, onPointerDown, onPointerUp }) {
|
||||||
const sceneRef = useRef();
|
const sceneRef = useRef();
|
||||||
const engineRef = useRef();
|
const engineRef = useRef();
|
||||||
const canvasRef = useRef();
|
const canvasRef = useRef();
|
||||||
@ -92,16 +92,17 @@ function DiceScene({ onSceneMount, onPointerDown, onPointerUp }) {
|
|||||||
function handlePointerUp() {
|
function handlePointerUp() {
|
||||||
const selectedMesh = selectedMeshRef.current;
|
const selectedMesh = selectedMeshRef.current;
|
||||||
const velocityWindow = selectedMeshVelocityWindowRef.current;
|
const velocityWindow = selectedMeshVelocityWindowRef.current;
|
||||||
// Average velocity window
|
|
||||||
let velocity = BABYLON.Vector3.Zero();
|
|
||||||
for (let v of velocityWindow) {
|
|
||||||
velocity.addInPlace(v);
|
|
||||||
}
|
|
||||||
if (velocityWindow.length > 0) {
|
|
||||||
velocity.scaleInPlace(1 / velocityWindow.length);
|
|
||||||
}
|
|
||||||
const scene = sceneRef.current;
|
const scene = sceneRef.current;
|
||||||
if (selectedMesh && scene) {
|
if (selectedMesh && scene) {
|
||||||
|
// Average velocity window
|
||||||
|
let velocity = BABYLON.Vector3.Zero();
|
||||||
|
for (let v of velocityWindow) {
|
||||||
|
velocity.addInPlace(v);
|
||||||
|
}
|
||||||
|
if (velocityWindow.length > 0) {
|
||||||
|
velocity.scaleInPlace(1 / velocityWindow.length);
|
||||||
|
}
|
||||||
|
|
||||||
selectedMesh.physicsImpostor.applyImpulse(
|
selectedMesh.physicsImpostor.applyImpulse(
|
||||||
velocity.scale(diceThrowSpeed * selectedMesh.physicsImpostor.mass),
|
velocity.scale(diceThrowSpeed * selectedMesh.physicsImpostor.mass),
|
||||||
selectedMesh.physicsImpostor.getObjectCenter()
|
selectedMesh.physicsImpostor.getObjectCenter()
|
||||||
@ -136,6 +137,8 @@ function DiceScene({ onSceneMount, onPointerDown, onPointerUp }) {
|
|||||||
<canvas
|
<canvas
|
||||||
onPointerDown={handlePointerDown}
|
onPointerDown={handlePointerDown}
|
||||||
onPointerUp={handlePointerUp}
|
onPointerUp={handlePointerUp}
|
||||||
|
onPointerCancel={handlePointerUp}
|
||||||
|
onPointerLeave={handlePointerUp}
|
||||||
ref={canvasRef}
|
ref={canvasRef}
|
||||||
style={{ outline: "none" }}
|
style={{ outline: "none" }}
|
||||||
/>
|
/>
|
||||||
@ -144,9 +147,9 @@ function DiceScene({ onSceneMount, onPointerDown, onPointerUp }) {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
DiceScene.defaultProps = {
|
DiceInteraction.defaultProps = {
|
||||||
onPointerDown() {},
|
onPointerDown() {},
|
||||||
onPointerUp() {},
|
onPointerUp() {},
|
||||||
};
|
};
|
||||||
|
|
||||||
export default DiceScene;
|
export default DiceInteraction;
|
@ -10,7 +10,7 @@ import { Box } from "theme-ui";
|
|||||||
|
|
||||||
import environment from "../../../dice/environment.dds";
|
import environment from "../../../dice/environment.dds";
|
||||||
|
|
||||||
import Scene from "./DiceScene";
|
import DiceInteraction from "./DiceInteraction";
|
||||||
import DiceControls from "./DiceControls";
|
import DiceControls from "./DiceControls";
|
||||||
import Dice from "../../../dice/Dice";
|
import Dice from "../../../dice/Dice";
|
||||||
import LoadingOverlay from "../../LoadingOverlay";
|
import LoadingOverlay from "../../LoadingOverlay";
|
||||||
@ -228,7 +228,7 @@ function DiceTrayOverlay({ isOpen }) {
|
|||||||
}}
|
}}
|
||||||
bg="background"
|
bg="background"
|
||||||
>
|
>
|
||||||
<Scene
|
<DiceInteraction
|
||||||
onSceneMount={handleSceneMount}
|
onSceneMount={handleSceneMount}
|
||||||
onPointerDown={() => {
|
onPointerDown={() => {
|
||||||
sceneInteractionRef.current = true;
|
sceneInteractionRef.current = true;
|
||||||
|
Loading…
Reference in New Issue
Block a user