Browse Source

Merge pull request #1029 from AtomicGameEngine/JME-ATOMICNET-WORK2

Atomic new build prep work
JoshEngebretson 9 years ago
parent
commit
6366b4a900

+ 4 - 0
Build/CMake/Modules/AtomicCommon.cmake

@@ -22,6 +22,10 @@
 
 include (CMakeParseArguments)
 
+if ($ENV{ATOMIC_BUILD_DIST})
+  add_definitions(-DATOMIC_BUILD_DIST=1)
+endif()
+
 # Urho compatibility
 add_definitions(-DATOMIC_CXX11=1)
 

BIN
Resources/EditorData/AtomicEditor/editor/images/atomicnet_info_header.png


BIN
Resources/EditorData/AtomicEditor/editor/images/newbuilddetected_header.jpg


+ 14 - 0
Resources/EditorData/AtomicEditor/editor/ui/atomicnetwindow.tb.txt

@@ -0,0 +1,14 @@
+TBLayout: axis: y, distribution: gravity
+    TBImageWidget: filename: "AtomicEditor/editor/images/atomicnet_info_header.png"
+        lp: width: 500, height: 167, min-width: 500, min-height: 167
+    TBEditField: multiline: 1, styling: 1, gravity: all, id: atomicnet_text, readonly: 1, adapt-to-content: 0
+        font: size: 13
+        lp: min-width: 480, min-height: 140
+        text: "..."
+    TBSeparator: gravity: left right, skin: AESeparator
+    TBLayout:
+        TBButton: text: "...", id: download_button, skin: TBButton.greentext
+            font: size: 16
+            lp: min-width: 128, min-height: 64
+        TBButton: text: Ok, id: ok
+            lp: min-width: 64, min-height: 64

+ 5 - 6
Resources/EditorData/AtomicEditor/editor/ui/newbuildwindow.tb.txt

@@ -1,15 +1,14 @@
-TBLayout: axis: y
-    gravity all
+TBLayout: axis: y, distribution: gravity
+    TBImageWidget: filename: "AtomicEditor/editor/images/newbuilddetected_header.jpg"
+        lp: width: 500, height: 167, min-width: 500, min-height: 167
     TBEditField: multiline: 1, styling: 1, gravity: all, id: newbuild_text, readonly: 1, adapt-to-content: 0
-        font: size: 14
-        lp: max-width: 640, min-width: 640, min-height: 460, max-height: 460
+        font: size: 13
+        lp: min-width: 480, min-height: 274
         text: "..."
     TBLayout:
         TBCheckBox: id: newbuild_check
         TBTextField: text: "Don't show me again until a new build is installed"
             font: size: 16
     TBLayout:
-        TBButton: text: Current Funding Information, id: cfi
-            lp: min-width: 128, min-height: 48
         TBButton: text: Ok, id: ok
             lp: min-width: 128, min-height: 48

+ 4 - 4
Script/AtomicEditor/editor/EditorLicense.ts

@@ -43,16 +43,16 @@ class EditorLicense extends Atomic.ScriptObject {
 
     handleLicenseEulaAccepted(eventData) {
 
-        // Disabled for now
-        /*
-        var sha = Atomic.getGitRevision();
+        if (!Atomic.AtomicBuildInfo.getDistBuild())
+            return;
+
+        var sha = Atomic.AtomicBuildInfo.getGitSHA();
 
         if (sha == "Unversioned Build" || Preferences.getInstance().editorBuildData.lastEditorBuildSHA == sha)
             return;
 
         var ops = EditorUI.getModelOps();
         ops.showNewBuildWindow();
-        */
 
     }
 

+ 10 - 0
Script/AtomicEditor/ui/modal/CreateProject.ts

@@ -108,6 +108,16 @@ class CreateProject extends ModalWindow {
             let templateDetail: ProjectTemplates.ProjectTemplateDetail;
             let selectedLanguage = this.projectLanguageField.text;
 
+            // Check whether we have a required IDE installed for C# projects
+            if (selectedLanguage == "CSharp" || selectedLanguage == "C#") {
+
+                if (!ToolCore.netProjectSystem.getIDEAvailable()) {
+                    this.hide();
+                    EditorUI.getModelOps().showAtomicNETWindow();
+                    return false;
+                }
+            }
+
             for (let i = 0; i < this.projectTemplate.templates.length; i++) {
                 if (this.projectTemplate.templates[i].language === selectedLanguage) {
                     templateDetail = this.projectTemplate.templates[i];

+ 12 - 1
Script/AtomicEditor/ui/modal/ModalOps.ts

@@ -27,7 +27,6 @@ import NewProject = require("./NewProject");
 import CreateProject = require("./CreateProject");
 
 import EULAWindow = require("./license/EULAWindow");
-import NewBuildWindow = require("./license/NewBuildWindow");
 
 import BuildWindow = require("./build/BuildWindow");
 import BuildOutput = require("./build/BuildOutput");
@@ -43,6 +42,8 @@ import ExtensionWindow = require("./ExtensionWindow");
 
 import ProjectTemplates = require("../../resources/ProjectTemplates");
 
+import NewBuildWindow = require("./info/NewBuildWindow");
+import AtomicNETWindow = require("./info/AtomicNETWindow");
 
 class ModalOps extends Atomic.ScriptObject {
 
@@ -236,6 +237,16 @@ class ModalOps extends Atomic.ScriptObject {
 
     }
 
+    showAtomicNETWindow() {
+
+        if (this.show()) {
+
+            this.opWindow = new AtomicNETWindow();
+
+        }
+
+    }
+
     // TODO: standardize  to same pattern as other modal windows
     showError(windowText: string, message: string) {
         var view = EditorUI.getView();

+ 105 - 0
Script/AtomicEditor/ui/modal/info/AtomicNETWindow.ts

@@ -0,0 +1,105 @@
+//
+// Copyright (c) 2014-2016 THUNDERBEAST GAMES LLC
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+//
+
+import EditorUI = require("../../EditorUI");
+import ModalWindow = require("../ModalWindow");
+
+class AtomicNETWindow extends ModalWindow {
+
+    constructor() {
+
+        super();
+
+        this.settings = Atomic.UI_WINDOW_SETTINGS_DEFAULT & ~Atomic.UI_WINDOW_SETTINGS_CLOSE_BUTTON;
+
+        // we're not calling this.init here as it calls resizeToFitContent
+        // and center, which screw up the generated About text being resized
+
+        this.text = "Atomic C# Requirements";
+        this.load("AtomicEditor/editor/ui/atomicnetwindow.tb.txt");
+
+        this.downloadButton = <Atomic.UIButton>this.getWidget("download_button");
+
+        this.atomicnet_text = <Atomic.UIEditField>this.getWidget("atomicnet_text");
+        this.atomicnet_text.text = this.generateAtomicNETText();
+
+        this.resizeToFitContent();
+        this.center();
+
+    }
+
+    handleWidgetEvent(ev: Atomic.UIWidgetEvent) {
+
+        if (ev.type == Atomic.UI_EVENT_TYPE_CLICK) {
+
+            var id = ev.target.id;
+
+            if (id == "ok") {
+
+                this.hide();
+
+                return true;
+            }
+
+            if (id == "download_button") {
+
+                this.hide();
+
+                Atomic.fileSystem.systemOpen(Atomic.platform == "Windows" ?
+                "https://www.visualstudio.com/en-us/products/visual-studio-community-vs.aspx" :
+                "https://www.xamarin.com/download");
+
+            }
+        }
+    }
+
+
+    generateAtomicNETText(): string {
+
+        var installText:string;
+
+        var ideText:string = Atomic.platform == "Windows" ? "Visual Studio" : "Xamarin Studio";
+
+        var installText = `Please install ${ideText} with <color #D4FB79>Xamarin.Android</color> and <color #D4FB79>Xamarin.iOS</color>`;
+
+        this.downloadButton.text = `Download ${ideText}`;
+
+        var text = "";
+
+        text += `
+Atomic C# is integrated with <color #D4FB79>Visual Studio</color> and <color #D4FB79>Xamarin Studio</color> to provide a first class editing, debugging, and deployment experience.
+
+${installText}
+
+<color #76D6FF>Visual Studio Code support is also coming soon!</color>
+
+`;
+
+        return text;
+
+    }
+
+    atomicnet_text: Atomic.UIEditField;
+    downloadButton: Atomic.UIButton;
+}
+
+export = AtomicNETWindow;

+ 19 - 8
Script/AtomicEditor/ui/modal/license/NewBuildWindow.ts → Script/AtomicEditor/ui/modal/info/NewBuildWindow.ts

@@ -35,7 +35,7 @@ class NewBuildWindow extends ModalWindow {
         // we're not calling this.init here as it calls resizeToFitContent
         // and center, which screw up the generated About text being resized
 
-        this.text = "New Atomic Editor Build Detected";
+        this.text = "New Build Detected";
         this.load("AtomicEditor/editor/ui/newbuildwindow.tb.txt");
 
         this.newbuild_text = <Atomic.UIEditField>this.getWidget("newbuild_text");
@@ -65,7 +65,7 @@ class NewBuildWindow extends ModalWindow {
 
                 if (this.newBuildCheck.value) {
 
-                    Preferences.getInstance().editorBuildData.lastEditorBuildSHA = Atomic.getGitRevision();
+                    Preferences.getInstance().editorBuildData.lastEditorBuildSHA = Atomic.AtomicBuildInfo.getGitSHA();
                     Preferences.getInstance().write();
 
                 }
@@ -79,17 +79,28 @@ class NewBuildWindow extends ModalWindow {
 
         var text = "";
 
-        text += `<widget TBImageWidget: filename: 'AtomicEditor/editor/images/atomic_logo.png'>
-
+        // TODO: this needs to be externally generated
+        text += `
 <color #D4FB79>Hello and thanks for installing a new build of the Atomic Editor!</color>
+<color #AAAAAA>(Git SHA: ${Atomic.AtomicBuildInfo.getGitSHA()})</color>
+
+<color #76D6FF>Latest Updates:</color>
+
+• Support for <color #D4FB79>Atomic C#</color> scripting on Windows, macOS, Linux, Android, and iOS
+
+• <color #D4FB79>Visual Studio</color> and <color #D4FB79>Xamarin Studio</color> integration (with VSCode support coming soon!)
+
+• Physically Based Rendering (PBR) - Thanks to @dragonCASTjosh
+
+• New examples and project templates
 
-A cross platform game engine targeting 6 platforms is a lot of work! We need to raise funds in order to continue developing features such as integrated debugging, C# scripting, editor workflow improvements, platform updates, and to address a growing list of issues. There are also other project expenses such as CI hardware, web site updates, hosting costs, etc.
+• Revamped build targeting JavaScript, TypeScript, C#, and native C++
 
-In addition to monetary funding, we need help reviewing pull requests, addressing open issues, providing support in chat, etc.
+• Updated to Urho3D 1.6 and SDL 2.0.4 with a great number of platform improvements
 
-<color #D4FB79>Thanks for your support!</color>
+• Updated to to Monaco VSCode editor 0.6
 
-<widget TBImageWidget: filename: 'AtomicEditor/editor/images/josh.jpg'> - Josh Engebretson on behalf of the Atomic Community
+• Bug fixed, improvements, and optimization
 `;
 
         return text;

+ 1 - 1
Script/AtomicNET/AtomicNET/Application/Application.cs

@@ -34,7 +34,7 @@ namespace AtomicEngine
 #endif
 
 
-#if ATOMIC_ANDROID || ATOMIC_IOS
+#if ATOMIC_MOBILE
 
             app = NETAtomicPlayer.Create(args);
             

+ 5 - 5
Script/AtomicNET/AtomicNET/Scene/CSComponentCore.cs

@@ -11,7 +11,7 @@ namespace AtomicEngine
         public CSComponentInfo(Type type)
         {
 
-#if ATOMIC_DESKTOP || ATOMIC_ANDROID
+#if ATOMIC_DESKTOP || ATOMIC_MOBILE
 
             this.Type = type;
 
@@ -56,7 +56,7 @@ namespace AtomicEngine
         {
             // FIXME: This will need to be optimized, specifically to use uint key hashes for value lookup
 
-#if ATOMIC_DESKTOP || ATOMIC_ANDROID
+#if ATOMIC_DESKTOP || ATOMIC_MOBILE
 
             fieldMap.CopyVariantMap(fieldValuePtr);
 
@@ -334,7 +334,7 @@ namespace AtomicEngine
 
         void HandleComponentAssemblyReference(uint eventType, ScriptVariantMap eventData)
         {
-#if ATOMIC_DESKTOP || ATOMIC_ANDROID
+#if ATOMIC_DESKTOP || ATOMIC_MOBILE
             string assemblyPath = eventData["AssemblyPath"];
 
             string assemblyName = Path.GetFileNameWithoutExtension(assemblyPath);
@@ -349,7 +349,7 @@ namespace AtomicEngine
 
         void ParseComponents()
         {
-#if ATOMIC_DESKTOP || ATOMIC_ANDROID
+#if ATOMIC_DESKTOP || ATOMIC_MOBILE
 
             var assemblies = AppDomain.CurrentDomain.GetAssemblies().ToList();
 
@@ -362,7 +362,7 @@ namespace AtomicEngine
 
         void ParseAssembly(Assembly assembly)
         {
-#if ATOMIC_DESKTOP || ATOMIC_ANDROID
+#if ATOMIC_DESKTOP || ATOMIC_MOBILE
             String assemblyPath = assembly.GetName().Name;
 
             Dictionary<string, CSComponentInfo> assemblyTypes = null;

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

@@ -6,7 +6,6 @@
 declare module Atomic {
 
     export function print(...args: any[]);
-    export function getGitRevision():string;
 
     export var platform: string;
 

+ 2 - 1
Script/tsconfig.json

@@ -82,8 +82,9 @@
         "./AtomicEditor/ui/modal/build/platforms/WindowsSettingsWidget.ts",
         "./AtomicEditor/ui/modal/CreateProject.ts",
         "./AtomicEditor/ui/modal/ExtensionWindow.ts",
+        "./AtomicEditor/ui/modal/info/AtomicNETWindow.ts",
+        "./AtomicEditor/ui/modal/info/NewBuildWindow.ts",
         "./AtomicEditor/ui/modal/license/EULAWindow.ts",
-        "./AtomicEditor/ui/modal/license/NewBuildWindow.ts",
         "./AtomicEditor/ui/modal/MessageModal.ts",
         "./AtomicEditor/ui/modal/ModalOps.ts",
         "./AtomicEditor/ui/modal/ModalWindow.ts",

+ 8 - 1
Source/Atomic/BuildInfo/AtomicBuildInfo.cpp

@@ -35,6 +35,13 @@ String AtomicBuildInfo::GetBuildName()
 #endif
 }
 
-
+bool AtomicBuildInfo::GetDistBuild()
+{
+#ifdef ATOMIC_BUILD_DIST
+    return true;
+#else
+    return false;
+#endif
+}
 
 }

+ 3 - 0
Source/Atomic/BuildInfo/AtomicBuildInfo.h

@@ -52,6 +52,9 @@ class AtomicBuildInfo : public RefCounted
     /// Get the build string in form (BuildName): BuildDate BuildTime Git:SHA
     static String GetBuildString();
 
+    /// Get whether this is a dist build
+    static bool GetDistBuild();
+
 };