Files
titan_react_node_sqllite/src/store/configuratorStore.ts
T
digifoxkurama 10bd0a085f
CI/CD Pipeline / Build & Validate (push) Canceled after 0s
CI/CD Pipeline / Docker Build Validation (push) Canceled after 0s
feat: initial release of Titan 3D Web Application
2026-08-28 18:04:12 +05:30

55 lines
1.5 KiB
TypeScript

import { create } from 'zustand';
export type MappingMode = 'imported' | 'planar' | 'box' | 'cylindrical' | 'triplanar';
export interface UVTransforms {
scale: [number, number];
repeat: [number, number];
offset: [number, number];
rotation: number;
}
export interface TriplanarTransforms {
scale: number;
blendSharpness: number;
rotation: [number, number, number];
worldSpace: boolean;
}
interface ConfiguratorState {
mappingMode: MappingMode;
uvTransforms: UVTransforms;
triplanarTransforms: TriplanarTransforms;
projectionAxis: 'x' | 'y' | 'z';
// Actions
setMappingMode: (mode: MappingMode) => void;
setUVTransforms: (transforms: Partial<UVTransforms>) => void;
setTriplanarTransforms: (transforms: Partial<TriplanarTransforms>) => void;
setProjectionAxis: (axis: 'x' | 'y' | 'z') => void;
}
export const useConfiguratorStore = create<ConfiguratorState>((set) => ({
mappingMode: 'imported',
projectionAxis: 'z',
uvTransforms: {
scale: [1, 1],
repeat: [1, 1],
offset: [0, 0],
rotation: 0,
},
triplanarTransforms: {
scale: 1,
blendSharpness: 5.0,
rotation: [0, 0, 0],
worldSpace: false,
},
setMappingMode: (mode) => set({ mappingMode: mode }),
setUVTransforms: (transforms) =>
set((state) => ({ uvTransforms: { ...state.uvTransforms, ...transforms } })),
setTriplanarTransforms: (transforms) =>
set((state) => ({ triplanarTransforms: { ...state.triplanarTransforms, ...transforms } })),
setProjectionAxis: (axis) => set({ projectionAxis: axis }),
}));