babylon.actionManager.ts 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. module BABYLON {
  2. export class ActionEvent {
  3. constructor(public source: AbstractMesh, public pointerX: number, public pointerY: number, public meshUnderPointer: AbstractMesh) {
  4. }
  5. public static CreateNew(source: AbstractMesh): ActionEvent {
  6. var scene = source.getScene();
  7. return new ActionEvent(source, scene.pointerX, scene.pointerY, scene.meshUnderPointer);
  8. }
  9. }
  10. export class ActionManager {
  11. // Statics
  12. private static _NothingTrigger = 0;
  13. private static _OnPickTrigger = 1;
  14. private static _OnLeftPickTrigger = 2;
  15. private static _OnRightPickTrigger = 3;
  16. private static _OnCenterPickTrigger = 4;
  17. private static _OnPointerOverTrigger = 5;
  18. private static _OnPointerOutTrigger = 6;
  19. private static _OnEveryFrameTrigger = 7;
  20. private static _OnIntersectionEnterTrigger = 8;
  21. private static _OnIntersectionExitTrigger = 9;
  22. public static get NothingTrigger(): number {
  23. return ActionManager._NothingTrigger;
  24. }
  25. public static get OnPickTrigger(): number {
  26. return ActionManager._OnPickTrigger;
  27. }
  28. public static get OnLeftPickTrigger(): number {
  29. return ActionManager._OnLeftPickTrigger;
  30. }
  31. public static get OnRightPickTrigger(): number {
  32. return ActionManager._OnRightPickTrigger;
  33. }
  34. public static get OnCenterPickTrigger(): number {
  35. return ActionManager._OnCenterPickTrigger;
  36. }
  37. public static get OnPointerOverTrigger(): number {
  38. return ActionManager._OnPointerOverTrigger;
  39. }
  40. public static get OnPointerOutTrigger(): number {
  41. return ActionManager._OnPointerOutTrigger;
  42. }
  43. public static get OnEveryFrameTrigger(): number {
  44. return ActionManager._OnEveryFrameTrigger;
  45. }
  46. public static get OnIntersectionEnterTrigger(): number {
  47. return ActionManager._OnIntersectionEnterTrigger;
  48. }
  49. public static get OnIntersectionExitTrigger(): number {
  50. return ActionManager._OnIntersectionExitTrigger;
  51. }
  52. // Members
  53. public actions = new Array<Action>();
  54. private _scene: Scene;
  55. constructor(scene: Scene) {
  56. this._scene = scene;
  57. scene._actionManagers.push(this);
  58. }
  59. // Methods
  60. public dispose(): void {
  61. var index = this._scene._actionManagers.indexOf(this);
  62. if (index > -1) {
  63. this._scene._actionManagers.splice(index, 1);
  64. }
  65. }
  66. public getScene(): Scene {
  67. return this._scene;
  68. }
  69. public hasSpecificTriggers(triggers: number[]): boolean {
  70. for (var index = 0; index < this.actions.length; index++) {
  71. var action = this.actions[index];
  72. if (triggers.indexOf(action.trigger) > -1) {
  73. return true;
  74. }
  75. }
  76. return false;
  77. }
  78. public get hasPointerTriggers(): boolean {
  79. for (var index = 0; index < this.actions.length; index++) {
  80. var action = this.actions[index];
  81. if (action.trigger >= ActionManager._OnPickTrigger && action.trigger <= ActionManager._OnPointerOutTrigger) {
  82. return true;
  83. }
  84. }
  85. return false;
  86. }
  87. public get hasPickTriggers(): boolean {
  88. for (var index = 0; index < this.actions.length; index++) {
  89. var action = this.actions[index];
  90. if (action.trigger >= ActionManager._OnPickTrigger && action.trigger <= ActionManager._OnCenterPickTrigger) {
  91. return true;
  92. }
  93. }
  94. return false;
  95. }
  96. public registerAction(action: Action): Action {
  97. if (action.trigger === ActionManager.OnEveryFrameTrigger) {
  98. if (this.getScene().actionManager !== this) {
  99. Tools.Warn("OnEveryFrameTrigger can only be used with scene.actionManager");
  100. return null;
  101. }
  102. }
  103. this.actions.push(action);
  104. action._actionManager = this;
  105. action._prepare();
  106. return action;
  107. }
  108. public processTrigger(trigger: number, evt: ActionEvent): void {
  109. for (var index = 0; index < this.actions.length; index++) {
  110. var action = this.actions[index];
  111. if (action.trigger === trigger) {
  112. action._executeCurrent(evt);
  113. }
  114. }
  115. }
  116. public _getEffectiveTarget(target: any, propertyPath: string): any {
  117. var properties = propertyPath.split(".");
  118. for (var index = 0; index < properties.length - 1; index++) {
  119. target = target[properties[index]];
  120. }
  121. return target;
  122. }
  123. public _getProperty(propertyPath: string): string {
  124. var properties = propertyPath.split(".");
  125. return properties[properties.length - 1];
  126. }
  127. }
  128. }