Sidebar.Animation.js 1.9 KB

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