You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

117 rivejä
2.3 KiB

  1. define([
  2. 'js/events',
  3. 'js/generator',
  4. 'js/renderer',
  5. 'js/input',
  6. 'ui/factory',
  7. 'js/client'
  8. ], function (
  9. events,
  10. generator,
  11. renderer,
  12. input,
  13. uiFactory,
  14. client
  15. ) {
  16. return {
  17. init: function () {
  18. client.init(this.events.onConnected.bind(this));
  19. },
  20. render: function () {
  21. if (renderer.dirty)
  22. renderer.render(generator.nodes, generator.links);
  23. window.requestAnimationFrame(this.render.bind(this));
  24. },
  25. events: {
  26. onConnected: function () {
  27. generator.init();
  28. renderer.init();
  29. input.init();
  30. events.on('onMouseDown', this.events.onMouseDown.bind(this, true));
  31. events.on('onMouseUp', this.events.onMouseDown.bind(this, false));
  32. events.on('onMouseMove', this.events.onMouseMove.bind(this));
  33. events.on('onMouseWheel', this.events.onMouseWheel.bind(this));
  34. events.on('onKeyDown', this.events.onKeyDown.bind(this));
  35. uiFactory.build('loadSave');
  36. renderer.center(generator.nodes[0]);
  37. this.render();
  38. },
  39. onMouseDown: function (isDown, e) {
  40. var success = false;
  41. if ((input.isKeyDown('shift')) && (e.button == 2)) {
  42. success = true;
  43. if (e.down)
  44. events.emit('onStartAreaSelect', e);
  45. else
  46. events.emit('onEndAreaSelect', e);
  47. } else if (isDown) {
  48. var action = ([
  49. 'addNode',
  50. 'connectNode',
  51. 'selectNode'
  52. ])[e.button];
  53. success = generator.callAction(action, {
  54. x: e.x,
  55. y: e.y,
  56. shiftDown: input.isKeyDown('shift')
  57. });
  58. } else if ((!isDown) && (e.button != 1) && (generator.getSelected().length <= 1))
  59. generator.callAction('selectNode', {});
  60. if ((!isDown) || (!success))
  61. renderer.pan(e.raw, isDown ? 'down' : 'up');
  62. renderer.makeDirty();
  63. },
  64. onMouseMove: function (e) {
  65. if ((!e.down) || (e.button != 2) || (input.isKeyDown('shift')))
  66. return;
  67. if (generator.callAction('moveNode', {
  68. x: e.x,
  69. y: e.y
  70. }))
  71. return;
  72. renderer.pan(e.raw, 'move');
  73. },
  74. onMouseWheel: function (e) {
  75. var action = ([
  76. 'resizeNode',
  77. 'recolorNode'
  78. ])[(e.delta > 0) ? 1 : 0];
  79. if (!action)
  80. return;
  81. generator.callAction(action, {});
  82. renderer.makeDirty();
  83. },
  84. onKeyDown: function (key) {
  85. var action = ({
  86. d: 'deleteNode'
  87. })[key];
  88. if (!action)
  89. return;
  90. generator.callAction(action, {});
  91. renderer.makeDirty();
  92. }
  93. }
  94. };
  95. });