Browse Source

Merge pull request #1422 from AtomicGameEngine/TSH-ATOMIC-1302

Atomic Script Events
JoshEngebretson 9 years ago
parent
commit
7c436cb0dc
2 changed files with 28 additions and 8 deletions
  1. 5 8
      Script/TypeScript/AtomicWork.d.ts
  2. 23 0
      Source/AtomicJS/Javascript/JSAtomic.cpp

+ 5 - 8
Script/TypeScript/AtomicWork.d.ts

@@ -27,23 +27,20 @@ declare module Atomic {
     // end subsystems
 
     // Base interface for events, contains eventType string and callback
-    interface EventMetaData
-    {
+    interface EventMetaData {
         _eventType: string;
         _callback: any;
     }
 
-    interface NativeEvent extends EventMetaData
-    {
-    }
+    interface NativeEvent extends EventMetaData { }
 
-    interface ScriptEvent extends EventMetaData
-    {
-    }
+    interface ScriptEvent extends EventMetaData { }
 
     // typed callback generic
     type EventCallback<T extends EventMetaData> = (data: T) => void;
 
+    export function ScriptEvent<T extends Atomic.EventMetaData>(eventType: string, callback: Atomic.EventCallback<T>): Atomic.EventMetaData;
+
     export interface PathInfo {
 
         pathName: string;

+ 23 - 0
Source/AtomicJS/Javascript/JSAtomic.cpp

@@ -217,6 +217,26 @@ static int js_atomic_script(duk_context* ctx)
     return 1;
 }
 
+
+static int js_atomic_ScriptEvent(duk_context* ctx)
+{
+    if (duk_get_top(ctx) != 2 || !duk_is_string(ctx, 0) || !duk_is_function(ctx, 1))
+    {
+        duk_push_string(ctx, "Atomic.ScriptEvent(eventType:string, callback:function); - passed invalid parameters");
+        duk_throw(ctx);
+        return 0;
+    }
+
+    String eventType = duk_get_string(ctx, 0);
+    duk_push_object(ctx);
+    duk_push_string(ctx, eventType.CString());
+    duk_put_prop_string(ctx, -2, "_eventType");
+    duk_dup(ctx, 1);
+    duk_put_prop_string(ctx, -2, "_callback");
+
+    return 1;
+}
+
 static void js_atomic_destroy_node(Node* node, duk_context* ctx, bool root = false)
 {
 
@@ -435,6 +455,9 @@ void jsapi_init_atomic(JSVM* vm)
     duk_push_c_function(ctx, js_atomic_destroy, 1);
     duk_put_prop_string(ctx, -2, "destroy");
 
+    duk_push_c_function(ctx, js_atomic_ScriptEvent, 2);
+    duk_put_prop_string(ctx, -2, "ScriptEvent");
+
 
     duk_pop(ctx);