зеркало из https://github.com/mozilla/Spoke.git
Fix animation import issues
This commit is contained in:
Родитель
f173d23b65
Коммит
07e1e045d9
|
@ -41,10 +41,10 @@ export default class KitPieceNode extends EditorNodeMixin(Model) {
|
||||||
const clipIndex = node.model.animations.findIndex(animation => animation.name === clip);
|
const clipIndex = node.model.animations.findIndex(animation => animation.name === clip);
|
||||||
|
|
||||||
if (clipIndex !== -1) {
|
if (clipIndex !== -1) {
|
||||||
node.activeClipIndices = [clipIndex];
|
node.activeClipItems = node.getActiveItems([clipIndex]);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
node.activeClipIndices = activeClipIndices;
|
node.activeClipItems = node.getActiveItems(activeClipIndices);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -514,7 +514,7 @@ export default class KitPieceNode extends EditorNodeMixin(Model) {
|
||||||
receive: this.receiveShadow
|
receive: this.receiveShadow
|
||||||
});
|
});
|
||||||
|
|
||||||
const activeClipIndices = this.getActiveClipIndices().map(index => {
|
const clipIndices = this.activeClipIndices.map(index => {
|
||||||
return ctx.animations.indexOf(this.model.animations[index]);
|
return ctx.animations.indexOf(this.model.animations[index]);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -526,9 +526,9 @@ export default class KitPieceNode extends EditorNodeMixin(Model) {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
if (activeClipIndices.length > 0) {
|
if (clipIndices.length > 0) {
|
||||||
this.addGLTFComponent("loop-animation", {
|
this.addGLTFComponent("loop-animation", {
|
||||||
activeClipIndices
|
activeClipIndices: clipIndices
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -61,10 +61,10 @@ export default class ModelNode extends EditorNodeMixin(Model) {
|
||||||
const clipIndex = node.model.animations.findIndex(animation => animation.name === clip);
|
const clipIndex = node.model.animations.findIndex(animation => animation.name === clip);
|
||||||
|
|
||||||
if (clipIndex !== -1) {
|
if (clipIndex !== -1) {
|
||||||
node.activeClipIndices = [clipIndex];
|
node.activeClipItems = node.getActiveItems([clipIndex]);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
node.activeClipIndices = activeClipIndices;
|
node.activeClipItems = node.getActiveItems(activeClipIndices);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -370,7 +370,7 @@ export default class ModelNode extends EditorNodeMixin(Model) {
|
||||||
receive: this.receiveShadow
|
receive: this.receiveShadow
|
||||||
});
|
});
|
||||||
|
|
||||||
const activeClipIndices = this.getActiveClipIndices().map(index => {
|
const clipIndices = this.activeClipIndices.map(index => {
|
||||||
return ctx.animations.indexOf(this.model.animations[index]);
|
return ctx.animations.indexOf(this.model.animations[index]);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -382,9 +382,9 @@ export default class ModelNode extends EditorNodeMixin(Model) {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
if (activeClipIndices.length > 0) {
|
if (clipIndices.length > 0) {
|
||||||
this.addGLTFComponent("loop-animation", {
|
this.addGLTFComponent("loop-animation", {
|
||||||
activeClipIndices
|
activeClipIndices: clipIndices
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,7 +12,7 @@ export default class Model extends Object3D {
|
||||||
this._castShadow = false;
|
this._castShadow = false;
|
||||||
this._receiveShadow = false;
|
this._receiveShadow = false;
|
||||||
this._combine = true;
|
this._combine = true;
|
||||||
this.activeClipIndices = [];
|
this.activeClipItems = [];
|
||||||
this.animationMixer = null;
|
this.animationMixer = null;
|
||||||
this.currentActions = [];
|
this.currentActions = [];
|
||||||
}
|
}
|
||||||
|
@ -70,7 +70,19 @@ export default class Model extends Object3D {
|
||||||
return clipOptions;
|
return clipOptions;
|
||||||
}
|
}
|
||||||
|
|
||||||
getActiveClipIndices() {
|
getActiveItems(indices) {
|
||||||
|
if (this.model && this.model.animations) {
|
||||||
|
return indices
|
||||||
|
.filter(item => item >= 0 && this.model.animations[item])
|
||||||
|
.map(item => {
|
||||||
|
const clip = this.model.animations[item];
|
||||||
|
return { label: clip.name, value: item };
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
get activeClipIndices() {
|
||||||
const activeClipIndices = this.activeClips.map(clip => {
|
const activeClipIndices = this.activeClips.map(clip => {
|
||||||
const index = this.model.animations.indexOf(clip);
|
const index = this.model.animations.indexOf(clip);
|
||||||
if (index === -1) {
|
if (index === -1) {
|
||||||
|
@ -85,7 +97,7 @@ export default class Model extends Object3D {
|
||||||
|
|
||||||
get activeClips() {
|
get activeClips() {
|
||||||
if (this.model && this.model.animations) {
|
if (this.model && this.model.animations) {
|
||||||
return this.activeClipIndices
|
return this.activeClipItems
|
||||||
.filter(item => item.value >= 0)
|
.filter(item => item.value >= 0)
|
||||||
.map(item => this.model.animations.find(({ name }) => name === item.label));
|
.map(item => this.model.animations.find(({ name }) => name === item.label));
|
||||||
}
|
}
|
||||||
|
@ -246,7 +258,7 @@ export default class Model extends Object3D {
|
||||||
}
|
}
|
||||||
|
|
||||||
this._src = source._src;
|
this._src = source._src;
|
||||||
this.activeClipIndices = source.activeClipIndices;
|
this.activeClipItems = source.activeClipItems;
|
||||||
|
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
|
@ -102,8 +102,8 @@ export default class KitPieceNodeEditor extends Component {
|
||||||
this.props.editor.loadMaterialSlotSelected(subPiece.id, materialSlot.id, materialId);
|
this.props.editor.loadMaterialSlotSelected(subPiece.id, materialSlot.id, materialId);
|
||||||
};
|
};
|
||||||
|
|
||||||
onChangeAnimation = activeClipIndices => {
|
onChangeAnimation = activeClipItems => {
|
||||||
this.props.editor.setPropertySelected("activeClipIndices", activeClipIndices || []);
|
this.props.editor.setPropertySelected("activeClipItems", activeClipItems || []);
|
||||||
};
|
};
|
||||||
|
|
||||||
onChangeCollidable = collidable => {
|
onChangeCollidable = collidable => {
|
||||||
|
@ -177,7 +177,7 @@ export default class KitPieceNodeEditor extends Component {
|
||||||
<SelectInput
|
<SelectInput
|
||||||
disabled={this.isAnimationPropertyDisabled()}
|
disabled={this.isAnimationPropertyDisabled()}
|
||||||
options={node.getClipOptions()}
|
options={node.getClipOptions()}
|
||||||
value={node.activeClipIndices}
|
value={node.activeClipItems}
|
||||||
onChange={this.onChangeAnimation}
|
onChange={this.onChangeAnimation}
|
||||||
className="basic-multi-select"
|
className="basic-multi-select"
|
||||||
classNamePrefix="select"
|
classNamePrefix="select"
|
||||||
|
|
|
@ -23,8 +23,8 @@ export default class ModelNodeEditor extends Component {
|
||||||
this.props.editor.setPropertiesSelected({ ...initialProps, src });
|
this.props.editor.setPropertiesSelected({ ...initialProps, src });
|
||||||
};
|
};
|
||||||
|
|
||||||
onChangeAnimation = activeClipIndices => {
|
onChangeAnimation = activeClipItems => {
|
||||||
this.props.editor.setPropertySelected("activeClipIndices", activeClipIndices || []);
|
this.props.editor.setPropertySelected("activeClipItems", activeClipItems || []);
|
||||||
};
|
};
|
||||||
|
|
||||||
onChangeCollidable = collidable => {
|
onChangeCollidable = collidable => {
|
||||||
|
@ -69,7 +69,7 @@ export default class ModelNodeEditor extends Component {
|
||||||
<SelectInput
|
<SelectInput
|
||||||
disabled={this.isAnimationPropertyDisabled()}
|
disabled={this.isAnimationPropertyDisabled()}
|
||||||
options={node.getClipOptions()}
|
options={node.getClipOptions()}
|
||||||
value={node.activeClipIndices}
|
value={node.activeClipItems}
|
||||||
onChange={this.onChangeAnimation}
|
onChange={this.onChangeAnimation}
|
||||||
className="basic-multi-select"
|
className="basic-multi-select"
|
||||||
classNamePrefix="select"
|
classNamePrefix="select"
|
||||||
|
|
Загрузка…
Ссылка в новой задаче