Sidebar.Animation.js 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. Sidebar.Animation = function ( editor ) {
  2. var signals = editor.signals;
  3. var options = {};
  4. var possibleAnimations = {};
  5. var container = new UI.Panel();
  6. container.setDisplay( 'none' );
  7. container.add( new UI.Text( 'Animation' ) );
  8. container.add( new UI.Break(), new UI.Break() );
  9. var AnimationsRow = new UI.Panel();
  10. var Animations = new UI.Select().setOptions( options ).setWidth( '130px' ).setColor( '#444' ).setFontSize( '12px' );
  11. AnimationsRow.add( new UI.Text( 'animations' ).setWidth( '90px' ) );
  12. AnimationsRow.add( Animations );
  13. container.add( AnimationsRow );
  14. container.add( new UI.Break() );
  15. var PlayRow = new UI.Panel();
  16. var playButton = new UI.Button().setLabel("Play").onClick(play);
  17. PlayRow.add( playButton );
  18. container.add( PlayRow );
  19. container.add( new UI.Break() );
  20. function play() {
  21. var value = Animations.getValue();
  22. if ( possibleAnimations[ value ] ) {
  23. var anims = possibleAnimations[value]
  24. for ( var i = 0; i < anims.length; i ++ ) {
  25. anims[ i ].play();
  26. }
  27. signals.playAnimations.dispatch( anims );
  28. };
  29. }
  30. signals.objectAdded.add( function ( object ) {
  31. if ( object instanceof THREE.Mesh ) {
  32. if ( object.geometry && object.geometry.animation ) {
  33. var name = object.geometry.animation.name;
  34. options[name] = name
  35. Animations.setOptions( options );
  36. THREE.AnimationHandler.add( object.geometry.animation );
  37. var animation = new THREE.Animation( object, name, THREE.AnimationHandler.CATMULLROM );
  38. if ( possibleAnimations[ name ] ){
  39. possibleAnimations[ name ].push( animation );
  40. } else {
  41. possibleAnimations[ name ] = [ animation ];
  42. }
  43. }
  44. }
  45. } );
  46. signals.objectSelected.add( function ( object ) {
  47. if ( object && object.geometry && object.geometry.animation ) {
  48. container.setDisplay( 'block' );
  49. } else {
  50. container.setDisplay( 'none' );
  51. }
  52. } );
  53. return container;
  54. }