2020-03-06 21:22:51 +08:00

123 lines
3.1 KiB
JavaScript

import { PropertyGroup, NumberProperty } from '../../third_party';
import SetValueCommand from '../../command/SetValueCommand';
/**
* 相机组件
* @author tengge / https://github.com/tengge1
*/
class CameraComponent extends React.Component {
constructor(props) {
super(props);
this.state = {
show: false,
expanded: true,
fov: 70,
near: 0.1,
far: 1000
};
this.handleExpand = this.handleExpand.bind(this);
this.handleUpdate = this.handleUpdate.bind(this);
this.handleChangeFov = this.handleChangeFov.bind(this);
this.handleChangeNear = this.handleChangeNear.bind(this);
this.handleChangeFar = this.handleChangeFar.bind(this);
}
render() {
const { show, expanded, fov, near, far } = this.state;
if (!show) {
return null;
}
return <PropertyGroup title={_t('Camera Component')}
show={show}
expanded={expanded}
onExpand={this.handleExpand}
>
<NumberProperty label={_t('Fov')}
name={'fov'}
value={fov}
onChange={this.handleChangeFov}
/>
<NumberProperty label={_t('Near')}
name={'near'}
value={near}
onChange={this.handleChangeNear}
/>
<NumberProperty label={_t('Far')}
name={'far'}
value={far}
onChange={this.handleChangeFar}
/>
</PropertyGroup>;
}
componentDidMount() {
app.on(`objectSelected.CameraComponent`, this.handleUpdate);
app.on(`objectChanged.CameraComponent`, this.handleUpdate);
}
handleExpand(expanded) {
this.setState({
expanded
});
}
handleUpdate() {
const editor = app.editor;
// TODO: 应判断是否等于默认相机
if (!editor.selected || !(editor.selected instanceof THREE.PerspectiveCamera)) {
this.setState({
show: false
});
return;
}
this.selected = editor.selected;
this.setState({
show: true,
fov: this.selected.fov,
near: this.selected.near,
far: this.selected.far
});
}
handleChangeFov(value) {
if (value === null) {
this.setState({
fov: value
});
return;
}
app.editor.execute(new SetValueCommand(this.selected, 'fov', value));
}
handleChangeNear(value) {
if (value === null) {
this.setState({
near: value
});
return;
}
app.editor.execute(new SetValueCommand(this.selected, 'near', value));
}
handleChangeFar(value) {
if (value === null) {
this.setState({
far: value
});
return;
}
app.editor.execute(new SetValueCommand(this.selected, 'far', value));
}
}
export default CameraComponent;