Sidebar.Animation.js 2.0 KB

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