@@ -4,10 +4,11 @@ import { useState, useEffect } from "react"
44import { Canvas } from "@react-three/fiber"
55import { OrbitControls , Stars , Environment } from "@react-three/drei"
66import { PlanetShader } from "./PlanetShader"
7- import { SettingsPanel } from "./SettingsPanel" ;
7+ import { SettingsPanel } from "./SettingsPanel"
88import { Cog } from "lucide-react"
99import { Button } from "@/components/ui/button"
1010import { type PlanetStats , calculateDensity , defaultPlanetStats , mergeWithDefaults } from "@/lib/planet-physics"
11+ import { useSupabaseClient } from "@supabase/auth-helpers-react"
1112
1213export interface PlanetGeneratorProps {
1314 classificationConfig ?: any
@@ -28,17 +29,44 @@ export function PlanetGenerator({
2829 classificationConfig,
2930 content,
3031} : PlanetGeneratorProps ) {
31- // Initialize planet stats from planetConfiguration if provided, otherwise use defaults
32- const initialPlanetStats = planetConfiguration
33- ? mergeWithDefaults ( planetConfiguration )
34- : {
35- ...defaultPlanetStats ,
36- ...( biome ? { biome } : { } ) ,
37- ...( type ? { type } : { } ) ,
38- }
32+ const supabase = useSupabaseClient ( ) ;
3933
4034 const [ showSettings , setShowSettings ] = useState ( false )
41- const [ planetStats , setPlanetStats ] = useState < PlanetStats > ( initialPlanetStats )
35+ const [ planetStats , setPlanetStats ] = useState < PlanetStats > (
36+ planetConfiguration
37+ ? mergeWithDefaults ( planetConfiguration )
38+ : {
39+ ...defaultPlanetStats ,
40+ ...( biome ? { biome } : { } ) ,
41+ ...( type ? { type } : { } ) ,
42+ }
43+ )
44+
45+ // Fetch classification configuration and overwrite mass/radius if exportedValue is present
46+ useEffect ( ( ) => {
47+ const fetchExportedValues = async ( ) => {
48+ const idAsNumber = parseInt ( classificationId )
49+ if ( isNaN ( idAsNumber ) ) return
50+
51+ const { data, error } = await supabase
52+ . from ( "classifications" )
53+ . select ( "classificationConfiguration" )
54+ . eq ( "id" , idAsNumber )
55+ . single ( )
56+
57+ if ( error || ! data ?. classificationConfiguration ?. exportedValue ) return
58+
59+ const { exportedValue } = data . classificationConfiguration
60+
61+ setPlanetStats ( ( prev ) => ( {
62+ ...prev ,
63+ ...( exportedValue . mass && { mass : exportedValue . mass } ) ,
64+ ...( exportedValue . radius && { radius : exportedValue . radius } ) ,
65+ } ) )
66+ }
67+
68+ fetchExportedValues ( )
69+ } , [ classificationId ] )
4270
4371 // Update density when mass or radius changes
4472 useEffect ( ( ) => {
@@ -51,42 +79,43 @@ export function PlanetGenerator({
5179 return (
5280 < div className = "flex-1 w-full h-screen relative" >
5381 < div className = "absolute top-4 left-4 z-10 text-green-400 font-mono p-2 rounded border border-green-500/30 text-sm" >
54- < div >
55- < span className = "text-green-500/70" > ID:</ span > { classificationId }
56- </ div >
57- < div >
58- < span className = "text-green-500/70" > AUTHOR:</ span > { author }
59- </ div >
60- { type && (
6182 < div >
62- < span className = "text-green-500/70" > TYPE :</ span > { type }
83+ < span className = "text-green-500/70" > ID :</ span > { classificationId }
6384 </ div >
64- ) }
65- { biome && (
6685 < div >
67- < span className = "text-green-500/70" > BIOME :</ span > { biome }
86+ < span className = "text-green-500/70" > AUTHOR :</ span > { author }
6887 </ div >
69- ) }
88+ { type && (
89+ < div >
90+ < span className = "text-green-500/70" > TYPE:</ span > { type }
91+ </ div >
92+ ) }
93+ { biome && (
94+ < div >
95+ < span className = "text-green-500/70" > BIOME:</ span > { biome }
96+ </ div >
97+ ) }
7098 </ div >
7199
72100 { classificationConfig && (
73- < pre className = "text-xs text-white/70" > { JSON . stringify ( classificationConfig , null , 2 ) } </ pre >
74- ) }
101+ < pre className = "text-xs text-white/70" >
102+ { JSON . stringify ( classificationConfig , null , 2 ) }
103+ </ pre >
104+ ) }
75105
76106 < Canvas camera = { { position : [ 0 , 0 , 10 ] , fov : 45 } } >
77- { /* <color attach="background" args={["#020209"]} /> */ }
78- < ambientLight intensity = { 0.4 } />
79- < pointLight position = { [ 10 , 10 , 10 ] } intensity = { 2 } />
80- < pointLight position = { [ - 10 , - 10 , - 10 ] } intensity = { 0.5 } color = "#b0c4de" />
81- < directionalLight position = { [ 5 , 5 , 5 ] } intensity = { 1.5 } castShadow />
82- < Environment preset = "sunset" />
83- < PlanetShader planetStats = { planetStats } />
84- < Stars radius = { 100 } depth = { 50 } count = { 5000 } factor = { 4 } saturation = { 0 } fade speed = { 1 } />
85- < OrbitControls enableZoom = { true } enablePan = { true } enableRotate = { true } />
86- < mesh position = { [ 0 , 0 , - 15 ] } >
87- < sphereGeometry args = { [ 5 , 32 , 32 ] } />
88- < meshBasicMaterial color = "#4060ff" transparent opacity = { 0.03 } />
89- </ mesh >
107+ < ambientLight intensity = { 0.4 } />
108+ < pointLight position = { [ 10 , 10 , 10 ] } intensity = { 2 } />
109+ < pointLight position = { [ - 10 , - 10 , - 10 ] } intensity = { 0.5 } color = "#b0c4de" />
110+ < directionalLight position = { [ 5 , 5 , 5 ] } intensity = { 1.5 } castShadow />
111+ < Environment preset = "sunset" />
112+ < PlanetShader planetStats = { planetStats } />
113+ < Stars radius = { 100 } depth = { 50 } count = { 5000 } factor = { 4 } saturation = { 0 } fade speed = { 1 } />
114+ < OrbitControls enableZoom = { true } enablePan = { true } enableRotate = { true } />
115+ < mesh position = { [ 0 , 0 , - 15 ] } >
116+ < sphereGeometry args = { [ 5 , 32 , 32 ] } />
117+ < meshBasicMaterial color = "#4060ff" transparent opacity = { 0.03 } />
118+ </ mesh >
90119 </ Canvas >
91120
92121 < Button
@@ -95,17 +124,17 @@ export function PlanetGenerator({
95124 className = "absolute top-4 right-4 bg-black/50 hover:bg-black/70 text-white"
96125 onClick = { ( ) => setShowSettings ( ! showSettings ) }
97126 >
98- < Cog className = "h-4 w-4" />
127+ < Cog className = "h-4 w-4" />
99128 </ Button >
100129
101130 { showSettings && (
102131 < SettingsPanel
103- planetStats = { planetStats }
104- setPlanetStats = { setPlanetStats }
105- classificationId = { classificationId }
106- author = { author }
107- />
132+ planetStats = { planetStats }
133+ setPlanetStats = { setPlanetStats }
134+ classificationId = { classificationId }
135+ author = { author }
136+ />
108137 ) }
109138 </ div >
110- )
139+ ) ;
111140} ;
0 commit comments