@@ -55,9 +55,9 @@ const KeyFrames = () => {
5555 animProg :state . animProg , setAnimProg :state . setAnimProg
5656 } ) ) )
5757
58- const { keyFrames, frames, useTime, frameRate, timeRate, currentFrame, setCurrentFrame} = useImageExportStore ( useShallow ( state => ( {
59- keyFrames :state . keyFrames , frames :state . frames , currentFrame :state . currentFrame ,
60- useTime :state . useTime , frameRate :state . frameRate , timeRate :state . timeRate , setCurrentFrame :state . setCurrentFrame
58+ const { keyFrames, frames, useTime, frameRate, timeRate, orbit , currentFrame, setCurrentFrame, setFrames } = useImageExportStore ( useShallow ( state => ( {
59+ keyFrames :state . keyFrames , frames :state . frames , orbit : state . orbit , currentFrame :state . currentFrame ,
60+ useTime :state . useTime , frameRate :state . frameRate , timeRate :state . timeRate , setCurrentFrame :state . setCurrentFrame , setFrames : state . setFrames
6161 } ) ) )
6262 const timeRatio = timeRate / frameRate
6363 const keyFrameList = keyFrames ? Array . from ( keyFrames . keys ( ) ) . sort ( ( a , b ) => a - b ) : null ;
@@ -91,24 +91,51 @@ const KeyFrames = () => {
9191 color = 'var(--play-background)'
9292 onClick = { ( ) => useImageExportStore . getState ( ) . setKeyFrameEditor ( false ) }
9393 />
94- < div className = 'flex justify-center items-center' >
95- < Button
96- className = 'cursor-pointer'
97- onClick = { ( ) => { SetKeyFrame ( currentFrame ) } }
98- > Add Keyframe
99- </ Button >
100- < Button
101- disabled = { ! keyFrameList }
102- className = 'cursor-pointer'
103- onClick = { ( ) => { useImageExportStore . setState ( { keyFrames : undefined } ) } }
104- > Clear Keyframes
105- </ Button >
106- < Button
107- disabled = { ! keyFrameList }
108- className = 'cursor-pointer'
109- onClick = { ( ) => { useImageExportStore . getState ( ) . PreviewKeyFrames ( ) } }
110- > Preview Full Animation
111- </ Button >
94+ < div className = 'flex justify-between items-center' >
95+ { /* Information */ }
96+ < div className = 'ml-4' >
97+ < div style = { { visibility : orbit ? "visible" : "hidden" } } >
98+ < b > Camera Motion overwriten by orbit</ b >
99+ </ div >
100+ </ div >
101+
102+ { /* Buttons */ }
103+ < div className = 'flex justify-center items-center' >
104+ < Button
105+ className = 'cursor-pointer'
106+ onClick = { ( ) => { SetKeyFrame ( currentFrame ) } }
107+ > Add Keyframe
108+ </ Button >
109+ < Button
110+ disabled = { ! keyFrameList }
111+ className = 'cursor-pointer'
112+ onClick = { ( ) => { useImageExportStore . setState ( { keyFrames : undefined } ) } }
113+ > Clear Keyframes
114+ </ Button >
115+ < Button
116+ disabled = { ! keyFrameList }
117+ className = 'cursor-pointer'
118+ onClick = { ( ) => { useImageExportStore . getState ( ) . PreviewKeyFrames ( ) } }
119+ > Preview Full Animation
120+ </ Button >
121+ </ div >
122+
123+ { /* Frame Information */ }
124+ < div className = 'flex justify-center' >
125+ < div className = 'flex justify-end items-center mr-2' >
126+ < label htmlFor = "frames" > < b > Frames:</ b > </ label >
127+ < Input className = 'w-[80px] ml-2' id = "frames" type = 'number' step = { 1 } value = { frames } onChange = { e => setFrames ( Math . max ( parseInt ( e . target . value ) , 2 ) ) } />
128+ </ div >
129+ < div className = 'flex justify-end items-center' >
130+ < b > Frame:</ b >
131+ < Input value = { currentFrame } type = 'number'
132+ className = 'w-[80px] ml-2'
133+ min = { 1 }
134+ step = { 1 }
135+ onChange = { e => parseInt ( e . target . value ) ? setCurrentFrame ( Math . max ( parseInt ( e . target . value ) , 1 ) ) : 1 }
136+ />
137+ </ div >
138+ </ div >
112139 </ div >
113140 < div className = "relative w-full my-2 px-2 bg-[var(--background)] drop-shadow-[0_0_4px_var(--notice-shadow)] rounded-lg" >
114141 { keyFrameList ?. map ( ( frame ) => {
@@ -123,7 +150,8 @@ const KeyFrames = () => {
123150 top :0 ,
124151 transform :"translate(-50%, -50%)" ,
125152 zIndex : 0 ,
126- cursor :"pointer"
153+ cursor :"pointer" ,
154+ visibility :percent <= 100 ? "visible" : "hidden"
127155 } }
128156 color = 'red'
129157 size = { 18 }
@@ -149,15 +177,7 @@ const KeyFrames = () => {
149177 } }
150178 />
151179 </ div >
152- < div className = 'flex justify-end items-center absolute top-[8px] right-[8px]' >
153- < b > Frame:</ b >
154- < Input value = { currentFrame } type = 'number'
155- className = 'w-[80px] ml-2'
156- min = { 1 }
157- step = { 1 }
158- onChange = { e => parseInt ( e . target . value ) ? setCurrentFrame ( Math . max ( parseInt ( e . target . value ) , 1 ) ) : 1 }
159- />
160- </ div >
180+
161181 </ div >
162182 )
163183}
0 commit comments