import * as React from "react"; import { Observable } from "babylonjs/Misc/observable"; import { PropertyChangedEvent } from "../../../../../components/propertyChangedEvent"; import { Animation } from "babylonjs/Animations/animation"; import { IconButtonLineComponent } from "../../../lines/iconButtonLineComponent"; import { NumericInputComponent } from "../../../lines/numericInputComponent"; import { AddAnimation } from "./addAnimation"; import { AnimationListTree, SelectedCoordinate } from "./animationListTree"; import { IAnimatable } from "babylonjs/Animations/animatable.interface"; import { TargetedAnimation } from "babylonjs/Animations/animationGroup"; import { LoadSnippet } from "./loadsnippet"; import { SaveSnippet } from "./saveSnippet"; import { LockObject } from "../lockObject"; interface IEditorControlsProps { isTargetedAnimation: boolean; entity: IAnimatable | TargetedAnimation; selected: Animation | null; lockObject: LockObject; onPropertyChangedObservable?: Observable; setNotificationMessage: (message: string) => void; selectAnimation: (selected: Animation, axis?: SelectedCoordinate) => void; } export class EditorControls extends React.Component< IEditorControlsProps, { isAnimationTabOpen: boolean; isEditTabOpen: boolean; isLoadTabOpen: boolean; isSaveTabOpen: boolean; isLoopActive: boolean; animationsCount: number; framesPerSecond: number; } > { constructor(props: IEditorControlsProps) { super(props); let count = this.props.isTargetedAnimation ? 1 : (this.props.entity as IAnimatable).animations?.length ?? 0; this.state = { isAnimationTabOpen: count === 0 ? true : false, isEditTabOpen: count === 0 ? false : true, isSaveTabOpen: false, isLoadTabOpen: false, isLoopActive: false, animationsCount: count, framesPerSecond: 60, }; } animationAdded() { this.setState({ animationsCount: this.recountAnimations(), isEditTabOpen: true, isAnimationTabOpen: false, }); } recountAnimations() { return (this.props.entity as IAnimatable).animations?.length ?? 0; } handleTabs(tab: number) { let state = { isAnimationTabOpen: true, isLoadTabOpen: false, isSaveTabOpen: false, isEditTabOpen: false, }; switch (tab) { case 0: state = { isAnimationTabOpen: true, isLoadTabOpen: false, isSaveTabOpen: false, isEditTabOpen: false, }; break; case 1: state = { isAnimationTabOpen: false, isLoadTabOpen: true, isSaveTabOpen: false, isEditTabOpen: false, }; break; case 2: state = { isAnimationTabOpen: false, isLoadTabOpen: false, isSaveTabOpen: true, isEditTabOpen: false, }; break; case 3: state = { isAnimationTabOpen: false, isLoadTabOpen: false, isSaveTabOpen: false, isEditTabOpen: true, }; break; } this.setState(state); } handleChangeFps(fps: number) { this.setState({ framesPerSecond: fps }); } emptiedList() { this.setState({ animationsCount: this.recountAnimations(), isEditTabOpen: false, isAnimationTabOpen: true, }); } render() { return (
{this.props.isTargetedAnimation ? null : ( this.handleTabs(0)} > )} this.handleTabs(1)} > this.handleTabs(2)} > {this.state.animationsCount === 0 ? null : ( this.handleTabs(3)} > )} {this.state.isEditTabOpen ? (
this.handleChangeFps(framesPerSecond) } />

fps

) : null} {this.state.isEditTabOpen ? ( { this.setState({ isLoopActive: !this.state.isLoopActive }); }} > ) : null}
{this.props.isTargetedAnimation ? null : ( { this.setState({ isAnimationTabOpen: false }); }} entity={this.props.entity as IAnimatable} setNotificationMessage={(message: string) => { this.props.setNotificationMessage(message); }} changed={() => this.animationAdded()} onPropertyChangedObservable={this.props.onPropertyChangedObservable} /> )} {this.state.isLoadTabOpen ? ( ) : null} {this.state.isSaveTabOpen ? ( ) : null} {this.state.isEditTabOpen ? ( this.emptiedList()} selectAnimation={this.props.selectAnimation} /> ) : null}
); } }