Browse Source

Adding Player log window which logs overs the IPC channel

Josh Engebretson 10 years ago
parent
commit
30926181da

+ 10 - 0
Script/AtomicEditor/editor/EditorEvents.ts

@@ -9,6 +9,16 @@ export interface ModalErrorEvent {
 
 
 }
 }
 
 
+export const PlayerStarted = "EditorPlayerStarted";
+export const PlayerLog = "EditorPlayerLog";
+export interface PlayerLogEvent {
+
+  message: string;
+  level: number;
+
+}
+
+
 export const ActiveSceneChange = "EditorActiveSceneChange";
 export const ActiveSceneChange = "EditorActiveSceneChange";
 export const ActiveNodeChange = "EditorActiveNodeChange";
 export const ActiveNodeChange = "EditorActiveNodeChange";
 export const SceneClosed = "EditorSceneClosed";
 export const SceneClosed = "EditorSceneClosed";

+ 2 - 1
Script/AtomicEditor/tsconfig.json

@@ -53,6 +53,7 @@
         "./ui/modal/ProgressModal.ts",
         "./ui/modal/ProgressModal.ts",
         "./ui/modal/ResourceSelection.ts",
         "./ui/modal/ResourceSelection.ts",
         "./ui/modal/UIResourceOps.ts",
         "./ui/modal/UIResourceOps.ts",
-        "./ui/playmode/PlayMode.ts"
+        "./ui/playmode/PlayMode.ts",
+        "./ui/playmode/PlayerOutput.ts"
     ]
     ]
 }
 }

+ 9 - 0
Script/AtomicEditor/ui/playmode/PlayMode.ts

@@ -1,5 +1,6 @@
 
 
 import EditorEvents = require("../../editor/EditorEvents");
 import EditorEvents = require("../../editor/EditorEvents");
+import PlayerOutput = require("./PlayerOutput");
 
 
 class PlayMode extends Atomic.ScriptObject {
 class PlayMode extends Atomic.ScriptObject {
 
 
@@ -10,9 +11,17 @@ class PlayMode extends Atomic.ScriptObject {
         super();
         super();
 
 
         this.subscribeToEvent("IPCJSError", (ev: Atomic.IPCJSErrorEvent) => this.handleIPCJSError(ev));
         this.subscribeToEvent("IPCJSError", (ev: Atomic.IPCJSErrorEvent) => this.handleIPCJSError(ev));
+        this.subscribeToEvent(EditorEvents.PlayerStarted, (ev) => this.handlePlayerStarted(ev));
 
 
     }
     }
 
 
+    handlePlayerStarted(ev) {
+
+        this.inErrorState = false;
+
+        new PlayerOutput();
+    }
+
     handleIPCJSError(ev: Atomic.IPCJSErrorEvent) {
     handleIPCJSError(ev: Atomic.IPCJSErrorEvent) {
 
 
         if (this.inErrorState)
         if (this.inErrorState)

+ 48 - 0
Script/AtomicEditor/ui/playmode/PlayerOutput.ts

@@ -0,0 +1,48 @@
+
+import EditorEvents = require("../../editor/EditorEvents");
+import EditorUI = require("../EditorUI");
+
+class PlayerOutput extends Atomic.UIWindow {
+
+    output: Atomic.UIEditField;
+
+    constructor() {
+
+        super();
+
+        var view = EditorUI.getView();
+        view.addChild(this);
+
+        this.text = "Player Output";
+
+        this.load("AtomicEditor/editor/ui/playeroutput.tb.txt")
+
+        this.output = <Atomic.UIEditField> this.getWidget("output");
+
+        this.subscribeToEvent(this, "WidgetEvent", (data) => this.handleWidgetEvent(data));
+        this.subscribeToEvent(EditorEvents.PlayerLog, (ev: EditorEvents.PlayerLogEvent) => this.handlePlayerLog(ev));
+
+        this.resizeToFitContent();
+        this.center();
+        this.setFocus();
+
+    }
+
+    handlePlayerLog(ev: EditorEvents.PlayerLogEvent) {
+
+        var text = this.output.text;
+        if (text.length > 32768)
+          text = "";
+        text += ev.message;
+        this.output.text = text + "\n";
+        this.output.scrollTo(0, 0xffffff);
+    }
+
+
+    handleWidgetEvent(ev: Atomic.UIWidgetEvent) {
+
+    }
+
+}
+
+export = PlayerOutput;

+ 1 - 0
Script/TypeScript/Atomic.d.ts

@@ -7051,6 +7051,7 @@ declare module Atomic {
       setTextAlign(align: TEXT_ALIGN): void;
       setTextAlign(align: TEXT_ALIGN): void;
       setEditType(type: UI_EDIT_TYPE): void;
       setEditType(type: UI_EDIT_TYPE): void;
       setReadOnly(readonly: boolean): void;
       setReadOnly(readonly: boolean): void;
+      scrollTo(x: number, y: number): void;
       setWrapping(wrap: boolean): void;
       setWrapping(wrap: boolean): void;
       getWrapping(): boolean;
       getWrapping(): boolean;
 
 

+ 12 - 0
Source/Atomic/UI/UIEditField.cpp

@@ -71,6 +71,18 @@ void UIEditField::SetEditType(UI_EDIT_TYPE type)
 
 
 }
 }
 
 
+void UIEditField::ScrollTo(int x, int y)
+{
+    if (!widget_)
+        return;
+
+    // safe cast?
+    TBEditField* w = (TBEditField*) widget_;
+
+    w->ScrollTo(x, y);
+
+}
+
 void UIEditField::SetTextAlign(TEXT_ALIGN align)
 void UIEditField::SetTextAlign(TEXT_ALIGN align)
 {
 {
     if (!widget_)
     if (!widget_)

+ 2 - 0
Source/Atomic/UI/UIEditField.h

@@ -40,6 +40,8 @@ public:
 
 
     void SetReadOnly(bool readonly);
     void SetReadOnly(bool readonly);
 
 
+    void ScrollTo(int x, int y);
+
     void SetWrapping(bool wrap);
     void SetWrapping(bool wrap);
     bool GetWrapping();
     bool GetWrapping();
 
 

+ 11 - 2
Source/AtomicEditorWork/EditorMode/AEEditorMode.cpp

@@ -33,6 +33,9 @@ void EditorMode::HandleIPCWorkerStarted(StringHash eventType, VariantMap& eventD
 {
 {
     VariantMap startupData;
     VariantMap startupData;
     playerBroker_->PostMessage(E_IPCINITIALIZE, startupData);
     playerBroker_->PostMessage(E_IPCINITIALIZE, startupData);
+
+    SendEvent("EditorPlayerStarted");
+
 }
 }
 
 
 void EditorMode::HandleIPCWorkerExit(StringHash eventType, VariantMap& eventData)
 void EditorMode::HandleIPCWorkerExit(StringHash eventType, VariantMap& eventData)
@@ -43,9 +46,15 @@ void EditorMode::HandleIPCWorkerExit(StringHash eventType, VariantMap& eventData
 void EditorMode::HandleIPCWorkerLog(StringHash eventType, VariantMap& eventData)
 void EditorMode::HandleIPCWorkerLog(StringHash eventType, VariantMap& eventData)
 {
 {
     using namespace IPCWorkerLog;
     using namespace IPCWorkerLog;
-    const String&  message = eventData[P_MESSAGE].GetString();
 
 
-    LOGINFOF("From Player: %s", message.CString());
+    // convert to a player log
+
+    VariantMap playerLogData;
+
+    playerLogData["message"]  = eventData[P_MESSAGE].GetString();
+    playerLogData["level"]  = eventData[P_LEVEL].GetInt();
+
+    SendEvent("EditorPlayerLog", playerLogData);
 
 
 }
 }