fix grid items to be linked to walls
This commit is contained in:
@@ -12,6 +12,7 @@ import {
|
|||||||
} from "@pascal-app/core";
|
} from "@pascal-app/core";
|
||||||
import { useViewer } from "@pascal-app/viewer";
|
import { useViewer } from "@pascal-app/viewer";
|
||||||
import { useFrame } from "@react-three/fiber";
|
import { useFrame } from "@react-three/fiber";
|
||||||
|
import { is } from "@react-three/fiber/dist/declarations/src/core/utils";
|
||||||
import { use, useEffect, useRef } from "react";
|
import { use, useEffect, useRef } from "react";
|
||||||
import { BoxGeometry, Line, Mesh, Vector3 } from "three";
|
import { BoxGeometry, Line, Mesh, Vector3 } from "three";
|
||||||
import { randInt } from "three/src/math/MathUtils.js";
|
import { randInt } from "three/src/math/MathUtils.js";
|
||||||
@@ -29,7 +30,6 @@ export const ItemTool: React.FC = () => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
let isOnWall = false;
|
let isOnWall = false;
|
||||||
let wallLocked = false;
|
|
||||||
let currentWallId: string | null = null;
|
let currentWallId: string | null = null;
|
||||||
|
|
||||||
const checkCanPlace = () => {
|
const checkCanPlace = () => {
|
||||||
@@ -90,6 +90,7 @@ export const ItemTool: React.FC = () => {
|
|||||||
|
|
||||||
const onGridMove = (event: GridEvent) => {
|
const onGridMove = (event: GridEvent) => {
|
||||||
if (!cursorRef.current) return;
|
if (!cursorRef.current) return;
|
||||||
|
|
||||||
if (isOnWall) return;
|
if (isOnWall) return;
|
||||||
|
|
||||||
gridPosition.current.set(
|
gridPosition.current.set(
|
||||||
@@ -128,11 +129,11 @@ export const ItemTool: React.FC = () => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const onWallEnter = (event: WallEvent) => {
|
const onWallEnter = (event: WallEvent) => {
|
||||||
event.stopPropagation();
|
|
||||||
if (
|
if (
|
||||||
draftItem.current?.asset.attachTo === "wall" ||
|
draftItem.current?.asset.attachTo === "wall" ||
|
||||||
draftItem.current?.asset.attachTo === "wall-side"
|
draftItem.current?.asset.attachTo === "wall-side"
|
||||||
) {
|
) {
|
||||||
|
event.stopPropagation();
|
||||||
isOnWall = true;
|
isOnWall = true;
|
||||||
currentWallId = event.node.id;
|
currentWallId = event.node.id;
|
||||||
gridPosition.current.set(
|
gridPosition.current.set(
|
||||||
@@ -173,13 +174,11 @@ export const ItemTool: React.FC = () => {
|
|||||||
|
|
||||||
const onWallClick = (event: WallEvent) => {
|
const onWallClick = (event: WallEvent) => {
|
||||||
event.stopPropagation();
|
event.stopPropagation();
|
||||||
if (wallLocked) {
|
if (!isOnWall) return;
|
||||||
return;
|
|
||||||
}
|
|
||||||
const currentLevelId = useViewer.getState().currentLevelId;
|
const currentLevelId = useViewer.getState().currentLevelId;
|
||||||
if (!currentLevelId || !draftItem.current || !checkCanPlace()) return;
|
if (!currentLevelId || !draftItem.current || !checkCanPlace()) return;
|
||||||
|
|
||||||
wallLocked = true;
|
|
||||||
useScene.temporal.getState().resume();
|
useScene.temporal.getState().resume();
|
||||||
useScene.getState().updateNode(draftItem.current.id, {
|
useScene.getState().updateNode(draftItem.current.id, {
|
||||||
position: [
|
position: [
|
||||||
@@ -198,8 +197,8 @@ export const ItemTool: React.FC = () => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const onWallMove = (event: WallEvent) => {
|
const onWallMove = (event: WallEvent) => {
|
||||||
|
if (isOnWall === false) return;
|
||||||
event.stopPropagation();
|
event.stopPropagation();
|
||||||
wallLocked = false;
|
|
||||||
if (!draftItem.current) return;
|
if (!draftItem.current) return;
|
||||||
gridPosition.current.set(
|
gridPosition.current.set(
|
||||||
Math.round(event.localPosition[0] * 2) / 2,
|
Math.round(event.localPosition[0] * 2) / 2,
|
||||||
|
|||||||
Reference in New Issue
Block a user