diff --git a/app/src/modules/builder/aisle/aisleCreator/aisleCreator.tsx b/app/src/modules/builder/aisle/aisleCreator/aisleCreator.tsx
index fa25465..f8598fc 100644
--- a/app/src/modules/builder/aisle/aisleCreator/aisleCreator.tsx
+++ b/app/src/modules/builder/aisle/aisleCreator/aisleCreator.tsx
@@ -5,6 +5,8 @@ import { useActiveLayer, useSocketStore, useToggleView, useToolMode } from '../.
import { useAisleStore } from '../../../../store/builder/useAisleStore';
import ReferenceAisle from './referenceAisle';
import { useBuilderStore } from '../../../../store/builder/useBuilderStore';
+import ReferencePoint from '../../point/referencePoint';
+import Point from '../../point/point';
function AisleCreator() {
const { scene, camera, raycaster, gl, pointer } = useThree();
@@ -40,16 +42,8 @@ function AisleCreator() {
});
});
- // Add temporary points
- tempPoints.forEach(point => {
- if (!seenUuids.has(point.uuid)) {
- seenUuids.add(point.uuid);
- points.push(point);
- }
- });
-
return points;
- }, [aisles, tempPoints]);
+ }, [aisles]);
useEffect(() => {
@@ -252,17 +246,15 @@ function AisleCreator() {
return (
<>
+
+ {tempPoints.map((point) => (
+
+ ))}
+
+
{allPoints.map((point) => (
-
-
-
-
+
))}
diff --git a/app/src/modules/builder/point/point.tsx b/app/src/modules/builder/point/point.tsx
new file mode 100644
index 0000000..8160a9b
--- /dev/null
+++ b/app/src/modules/builder/point/point.tsx
@@ -0,0 +1,77 @@
+import * as THREE from 'three';
+import * as Constants from '../../../types/world/worldConstants';
+import { useRef, useState, useEffect, useMemo } from 'react';
+import { useToolMode } from '../../../store/builder/store';
+
+function Point({ point, userData }: { readonly point: Point, readonly userData: any }) {
+ const materialRef = useRef(null);
+ const [isHovered, setIsHovered] = useState(false);
+ const { toolMode } = useToolMode();
+
+ const boxScale: [number, number, number] = Constants.pointConfig.boxScale;
+ const defaultInnerColor = Constants.pointConfig.defaultInnerColor;
+ const borderColor = Constants.pointConfig.aisleOuterColor;
+
+ useEffect(() => {
+ if (materialRef.current && toolMode === 'move') {
+ materialRef.current.uniforms.uInnerColor.value.set(
+ isHovered ? borderColor : defaultInnerColor
+ );
+ materialRef.current.uniformsNeedUpdate = true;
+ } else if (materialRef.current && toolMode !== 'move') {
+ materialRef.current.uniforms.uInnerColor.value.set(defaultInnerColor);
+ materialRef.current.uniformsNeedUpdate = true;
+ }
+ }, [isHovered, borderColor, defaultInnerColor, toolMode]);
+
+ const uniforms = useMemo(() => ({
+ uColor: { value: new THREE.Color(borderColor) },
+ uInnerColor: { value: new THREE.Color(defaultInnerColor) },
+ }), [borderColor, defaultInnerColor]);
+
+ if (!point) {
+ return null;
+ }
+
+ return (
+ setIsHovered(true)}
+ onPointerOut={() => setIsHovered(false)}
+ userData={userData}
+ >
+
+ borderThickness && vUv.x < 1.0 - borderThickness &&
+ vUv.y > borderThickness && vUv.y < 1.0 - borderThickness) {
+ gl_FragColor = vec4(uInnerColor, 1.0); // Inner square
+ } else {
+ gl_FragColor = vec4(uColor, 1.0); // Border
+ }
+ }
+ `}
+ />
+
+ );
+}
+
+export default Point;
\ No newline at end of file
diff --git a/app/src/modules/builder/point/referencePoint.tsx b/app/src/modules/builder/point/referencePoint.tsx
new file mode 100644
index 0000000..88ea652
--- /dev/null
+++ b/app/src/modules/builder/point/referencePoint.tsx
@@ -0,0 +1,75 @@
+import * as THREE from 'three';
+import * as Constants from '../../../types/world/worldConstants';
+import { useRef, useState, useEffect, useMemo } from 'react';
+import { useToolMode } from '../../../store/builder/store';
+
+function ReferencePoint({ point }: { readonly point: Point }) {
+ const materialRef = useRef(null);
+ const [isHovered, setIsHovered] = useState(false);
+ const { toolMode } = useToolMode();
+
+ const boxScale: [number, number, number] = Constants.pointConfig.boxScale;
+ const defaultInnerColor = Constants.pointConfig.defaultInnerColor;
+ const borderColor = Constants.pointConfig.aisleOuterColor;
+
+ useEffect(() => {
+ if (materialRef.current && toolMode === 'move') {
+ materialRef.current.uniforms.uInnerColor.value.set(
+ isHovered ? borderColor : defaultInnerColor
+ );
+ materialRef.current.uniformsNeedUpdate = true;
+ } else if (materialRef.current && toolMode !== 'move') {
+ materialRef.current.uniforms.uInnerColor.value.set(defaultInnerColor);
+ materialRef.current.uniformsNeedUpdate = true;
+ }
+ }, [isHovered, borderColor, defaultInnerColor, toolMode]);
+
+ const uniforms = useMemo(() => ({
+ uColor: { value: new THREE.Color(borderColor) },
+ uInnerColor: { value: new THREE.Color(defaultInnerColor) },
+ }), [borderColor, defaultInnerColor]);
+
+ if (!point) {
+ return null;
+ }
+
+ return (
+ setIsHovered(true)}
+ onPointerOut={() => setIsHovered(false)}
+ >
+
+ borderThickness && vUv.x < 1.0 - borderThickness &&
+ vUv.y > borderThickness && vUv.y < 1.0 - borderThickness) {
+ gl_FragColor = vec4(uInnerColor, 1.0); // Inner square
+ } else {
+ gl_FragColor = vec4(uColor, 1.0); // Border
+ }
+ }
+ `}
+ />
+
+ );
+}
+
+export default ReferencePoint;
\ No newline at end of file