unreal-toolkit-next 0.1.11 → 0.1.14

Sign up to get free protection for your applications and to get access to all the features.
package/README.md CHANGED
@@ -1,10 +1,10 @@
1
1
  # Unreal Toolkit - Next Edition
2
- A universal runtime library for advanced Unreal Engine web game development. The **Unreal Toolkit** enables interoperability
2
+ A runtime library for advanced Unreal Engine web game development. The **Unreal Toolkit** enables interoperability
3
3
  with your hosted Unreal Engine streaming web application.
4
4
 
5
5
  <a href="https://www.npmjs.com/package/unreal-toolkit">Classic Edition (UMD)</a>
6
6
  <br/>
7
- <a href="https://github.com/MackeyK24/UnrealToolkit/tree/master/Runtime">Browser Edition (CDN)</a>
7
+ <a href="https://github.com/codewrxai/UnrealToolkit/cdn">Browser Edition (CDN)</a>
8
8
 
9
9
 
10
10
  ## Default Installation (ES6)
@@ -16,3 +16,37 @@ npm install unreal-toolkit-next
16
16
  ```javascript
17
17
  import UnrealToolkit from 'unreal-toolkit';
18
18
  ```
19
+
20
+ * Unreal Toolkit Message Bus Usage
21
+ ```typescript
22
+ // Post WM_HELLO message to Unreal Engine
23
+ UnrealToolkit.EventBus.PostWindowMessage("WM_HELLO", ["Hello World!"]);
24
+
25
+ // Handle WM_MY_EVENT message from Unreal Engine
26
+ UnrealToolkit.EventBus.OnWindowMessage("WM_MY_EVENT", (args:string[]) => {
27
+ console.log("My Event Args: ", args);
28
+ });
29
+ ```
30
+
31
+ * Unreal Toolkit Content Frame Style
32
+ ```css
33
+ iframe {
34
+ position: absolute;
35
+ width: 100%;
36
+ height: 100%;
37
+ min-height: 100vh;
38
+ border: none;
39
+ outline: none;
40
+ z-index: 0;
41
+ }
42
+ ```
43
+
44
+ * Unreal Toolkit Content Frame Window
45
+ ```html
46
+ <iframe
47
+ src="your.unrealtoolkitproject.com"
48
+ crossorigin="anonymous"
49
+ allow="cross-origin-isolated"
50
+ sandbox="allow-same-origin allow-scripts allow-popups allow-forms allow-pointer-lock">
51
+ </iframe>
52
+ ```
package/dist/index.d.ts CHANGED
@@ -8,13 +8,13 @@ export declare class UnrealToolkit {
8
8
  /** Unreal Toolkit event message bus
9
9
  * @example
10
10
  * ```typescript
11
- * // Handle myevent message
12
- * UnrealToolkit.EventBus.OnMessage("myevent", (data:string) => {
13
- * console.log("My Event Data: " + data);
14
- * });
11
+ * // Post WM_HELLO message to Unreal Engine
12
+ * UnrealToolkit.EventBus.PostWindowMessage("WM_HELLO", ["Hello World!"]);
15
13
  *
16
- * // Post myevent message
17
- * UnrealToolkit.EventBus.PostMessage("myevent", "Hello World!");
14
+ * // Handle WM_MY_EVENT message from Unreal Engine
15
+ * UnrealToolkit.EventBus.OnWindowMessage("WM_MY_EVENT", (args:string[]) => {
16
+ * console.log("My Event Args: ", args);
17
+ * });
18
18
  * ```
19
19
  */
20
20
  static get EventBus(): UnrealMessageBus;
@@ -24,28 +24,28 @@ export declare class UnrealToolkit {
24
24
  * @class UnrealMessageBus - All rights reserved (c) 2024 Mackey Kinard
25
25
  */
26
26
  export declare class UnrealMessageBus {
27
- RequiredOrigin: string;
27
+ static AllowedOrigin: string;
28
+ static TargetOrigin: string;
29
+ static ContentFrames: NodeListOf<HTMLIFrameElement>;
28
30
  constructor();
29
- /** Handle event bus message
30
- * @param message The message to handle
31
- * @param data The data to handle
31
+ /** Post event bus message
32
+ * @param name The message to post
33
+ * @param args The args to post
32
34
  * @returns void
33
35
  */
34
- OnMessage(message: string, handler: (data: string) => void): void;
35
- /** Post event bus message
36
- * @param message The message to post
37
- * @param data The data to post
38
- * @param target The target to post
39
- * @param transfer The transfer to post
36
+ PostWindowMessage(name: string, args?: string[]): void;
37
+ /** Handle event bus message
38
+ * @param name The name to handle
39
+ * @param args The args to handle
40
40
  * @returns void
41
41
  */
42
- PostMessage(message: string, data?: string, targetOrigin?: string): void;
42
+ OnWindowMessage(name: string, handler: (args: string[]) => void): void;
43
43
  /** Remove event bus message handler
44
44
  * @param message The message to remove
45
45
  * @param handler The handler to remove
46
46
  * @returns void
47
47
  */
48
- RemoveHandler(message: string, handler: (data: string) => void): void;
48
+ RemoveHandler(message: string, handler: (args: string[]) => void): void;
49
49
  /** Clear and reset all event bus message handlers
50
50
  * @returns void
51
51
  */
@@ -54,14 +54,18 @@ export declare class UnrealMessageBus {
54
54
  * @returns void
55
55
  */
56
56
  Dispose(): void;
57
+ /** Resets the content frame list
58
+ * @returns void
59
+ */
60
+ ResetContentFrames(): void;
57
61
  /** Handle window message event
58
62
  * @param event The message event to handle
59
63
  * @returns void
60
64
  */
61
65
  private HandleWindowMessage;
62
66
  /** Dispatch internal event bus message
63
- * @param message The message to dispatch
64
- * @param data The data to dispatch
67
+ * @param name The name to dispatch
68
+ * @param args The args to dispatch
65
69
  * @returns void
66
70
  */
67
71
  private OnDispatchMessage;
package/dist/index.js CHANGED
@@ -7,13 +7,13 @@ export class UnrealToolkit {
7
7
  /** Unreal Toolkit event message bus
8
8
  * @example
9
9
  * ```typescript
10
- * // Handle myevent message
11
- * UnrealToolkit.EventBus.OnMessage("myevent", (data:string) => {
12
- * console.log("My Event Data: " + data);
13
- * });
10
+ * // Post WM_HELLO message to Unreal Engine
11
+ * UnrealToolkit.EventBus.PostWindowMessage("WM_HELLO", ["Hello World!"]);
14
12
  *
15
- * // Post myevent message
16
- * UnrealToolkit.EventBus.PostMessage("myevent", "Hello World!");
13
+ * // Handle WM_MY_EVENT message from Unreal Engine
14
+ * UnrealToolkit.EventBus.OnWindowMessage("WM_MY_EVENT", (args:string[]) => {
15
+ * console.log("My Event Args: ", args);
16
+ * });
17
17
  * ```
18
18
  */
19
19
  static get EventBus() {
@@ -29,47 +29,57 @@ UnrealToolkit._EventBus = null;
29
29
  */
30
30
  export class UnrealMessageBus {
31
31
  constructor() {
32
- this.RequiredOrigin = "*";
33
32
  this.ListenerDictionary = {};
34
- if (window && window.top) {
35
- this.HandleWindowMessage = this.HandleWindowMessage.bind(this);
36
- window.top.addEventListener("message", this.HandleWindowMessage);
33
+ this.HandleWindowMessage = this.HandleWindowMessage.bind(this);
34
+ window.addEventListener("message", this.HandleWindowMessage);
35
+ }
36
+ /** Post event bus message
37
+ * @param name The message to post
38
+ * @param args The args to post
39
+ * @returns void
40
+ */
41
+ PostWindowMessage(name, args) {
42
+ try {
43
+ if (UnrealMessageBus.ContentFrames == null) {
44
+ UnrealMessageBus.ContentFrames = document.querySelectorAll("iframe");
45
+ }
46
+ if (UnrealMessageBus.ContentFrames != null) {
47
+ UnrealMessageBus.ContentFrames.forEach((frame) => {
48
+ var _a;
49
+ try {
50
+ (_a = frame.contentWindow) === null || _a === void 0 ? void 0 : _a.postMessage({ source: "unrealtoolkit", message: name, args: args }, UnrealMessageBus.TargetOrigin);
51
+ }
52
+ catch (e) {
53
+ console.warn(e);
54
+ }
55
+ });
56
+ }
57
+ else {
58
+ console.warn("UnrealMessageBus: No Content Frames Found!");
59
+ }
37
60
  }
38
- else {
39
- console.warn("UnrealMessageBus: No Top Window Available");
61
+ catch (e) {
62
+ console.warn(e);
40
63
  }
41
64
  }
42
65
  /** Handle event bus message
43
- * @param message The message to handle
44
- * @param data The data to handle
66
+ * @param name The name to handle
67
+ * @param args The args to handle
45
68
  * @returns void
46
69
  */
47
- OnMessage(message, handler) {
70
+ OnWindowMessage(name, handler) {
48
71
  let listeners;
49
- if (this.ListenerDictionary[message] == null) {
72
+ if (this.ListenerDictionary[name] == null) {
50
73
  listeners = [];
51
- this.ListenerDictionary[message] = listeners;
74
+ this.ListenerDictionary[name] = listeners;
52
75
  }
53
76
  else {
54
- listeners = this.ListenerDictionary[message];
77
+ listeners = this.ListenerDictionary[name];
55
78
  }
56
79
  const index = listeners.findIndex((e) => { return handler == e; });
57
80
  if (index < 0)
58
81
  listeners.push(handler);
59
82
  }
60
- /** Post event bus message
61
- * @param message The message to post
62
- * @param data The data to post
63
- * @param target The target to post
64
- * @param transfer The transfer to post
65
- * @returns void
66
- */
67
- PostMessage(message, data, targetOrigin = "*") {
68
- if (window && window.top)
69
- window.top.postMessage({ source: "unrealmessagebus", message: message, data: data }, targetOrigin);
70
- else
71
- console.warn("UnrealMessageBus: No Top Window Available");
72
- }
73
83
  /** Remove event bus message handler
74
84
  * @param message The message to remove
75
85
  * @param handler The handler to remove
@@ -94,41 +104,86 @@ export class UnrealMessageBus {
94
104
  */
95
105
  Dispose() {
96
106
  this.ResetHandlers();
97
- if (window && window.top)
98
- window.top.removeEventListener("message", this.HandleWindowMessage);
107
+ window.removeEventListener("message", this.HandleWindowMessage);
108
+ }
109
+ /** Resets the content frame list
110
+ * @returns void
111
+ */
112
+ ResetContentFrames() {
113
+ UnrealMessageBus.ContentFrames = null;
99
114
  }
100
115
  /** Handle window message event
101
116
  * @param event The message event to handle
102
117
  * @returns void
103
118
  */
104
119
  HandleWindowMessage(event) {
105
- if (event == null || event.data == null)
120
+ if (event == null || event.origin == null || event.data == null)
106
121
  return;
107
- const originMatchRequired = (this.RequiredOrigin != null && this.RequiredOrigin !== "" && this.RequiredOrigin !== "*");
108
- if (originMatchRequired === true && event.origin !== this.RequiredOrigin)
122
+ if (UnrealMessageBus.AllowedOrigin != null && UnrealMessageBus.AllowedOrigin !== "" && UnrealMessageBus.AllowedOrigin !== "*" && event.origin !== UnrealMessageBus.AllowedOrigin) {
123
+ console.warn("UnrealMessageBus: Invalid Origin: " + event.origin);
109
124
  return;
110
- if (event.data.message != null && event.data.source != null && event.data.source == "unrealmessagebus") {
111
- this.OnDispatchMessage(event.data.message, (event.data.data != null) ? event.data.data : null);
125
+ }
126
+ var postMessage = null;
127
+ var postArguments = null;
128
+ if (event.data.type != null) {
129
+ if (event.data.type === "progress" && event.data.value != null) {
130
+ postMessage = "WM_PROGRESS";
131
+ postArguments = [event.data.value.toString()];
132
+ }
133
+ else if (event.data.type === "LoadComplete") {
134
+ postMessage = "WM_LOAD_COMPLETE";
135
+ postArguments = null;
136
+ }
137
+ else if (event.data.type === "focus") {
138
+ postMessage = "WM_FOCUS";
139
+ postArguments = null;
140
+ }
141
+ else if (event.data.type === "blur") {
142
+ postMessage = "WM_BLUR";
143
+ postArguments = null;
144
+ }
145
+ else if (event.data.type === "pointer-lock-active") {
146
+ postMessage = "WM_POINTER_LOCK_ACTIVE";
147
+ postArguments = null;
148
+ }
149
+ else if (event.data.type === "pointer-lock-inactive") {
150
+ postMessage = "WM_POINTER_LOCK_INACTIVE";
151
+ postArguments = null;
152
+ }
153
+ }
154
+ else if (event.data.source != null && event.data.source === "unrealtoolkit" && event.data.message != null) {
155
+ postMessage = event.data.message;
156
+ postArguments = (event.data.args != null) ? event.data.args : null;
157
+ }
158
+ try {
159
+ if (postMessage != null)
160
+ this.OnDispatchMessage(postMessage, postArguments);
161
+ }
162
+ catch (e) {
163
+ console.warn(e);
112
164
  }
113
165
  }
114
166
  /** Dispatch internal event bus message
115
- * @param message The message to dispatch
116
- * @param data The data to dispatch
167
+ * @param name The name to dispatch
168
+ * @param args The args to dispatch
117
169
  * @returns void
118
170
  */
119
- OnDispatchMessage(message, data = null) {
120
- const listeners = this.ListenerDictionary[message];
171
+ OnDispatchMessage(name, args = null) {
172
+ const listeners = this.ListenerDictionary[name];
121
173
  if (listeners == null)
122
174
  return;
123
175
  listeners.forEach((listener) => { try {
124
176
  if (listener)
125
- listener(data);
177
+ listener(args);
126
178
  }
127
179
  catch (e) {
128
180
  console.warn(e);
129
181
  } });
130
182
  }
131
183
  }
184
+ UnrealMessageBus.AllowedOrigin = "*";
185
+ UnrealMessageBus.TargetOrigin = "*";
186
+ UnrealMessageBus.ContentFrames = null;
132
187
  /** Unreal Toolkit Runtime Module */
133
188
  console.log("Unreal Toolkit Runtime - Version 0.1.8");
134
189
  export default UnrealToolkit;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "unreal-toolkit-next",
3
- "version": "0.1.11",
3
+ "version": "0.1.14",
4
4
  "description": "Unreal Toolkit Runtime Library (ES6)",
5
5
  "module": "dist/index.js",
6
6
  "types": "dist/index.d.ts",