Browse Source

Merge pull request #507 from AtomicGameEngine/JME-ATOMIC-506

Enable Navigation library component creation, add 3d ParticleEffect importer
JoshEngebretson 10 years ago
parent
commit
fb4ca86361

+ 1 - 1
Build/CMake/Modules/AtomicDesktop.cmake

@@ -1,6 +1,6 @@
 include_directories(${CMAKE_SOURCE_DIR}/Source/ThirdParty/Poco/Foundation/include)
 
-add_definitions( -DATOMIC_TBUI -DATOMIC_FILEWATCHER -DPOCO_NO_AUTOMATIC_LIBS -DPOCO_STATIC )
+add_definitions( -DATOMIC_NAVIGATION -DATOMIC_TBUI -DATOMIC_FILEWATCHER -DPOCO_NO_AUTOMATIC_LIBS -DPOCO_STATIC )
 
 set (ATOMIC_LINK_LIBRARIES ${ATOMIC_LINK_LIBRARIES} LibCpuId SQLite)
 

+ 12 - 0
Data/AtomicEditor/ExampleInfo/Examples.json

@@ -84,6 +84,18 @@
 				],
 				"module" : "2D"
 			},
+			{
+				"name": "ParticleEmitter3D",
+				"desc" : "An example of 3d particles driven by script",
+				"screenshot" : "ParticleEmitter3D.png",
+				"templates" : [
+					{
+						"language" : "JavaScript",
+						"folder" : "ParticleEmitter3D"
+					}
+				],
+				"module" : "3D"
+			},
 			{
 				"name": "Butterflies",
 				"desc" : "An example of particles driven by script",

BIN
Data/AtomicEditor/ExampleInfo/ParticleEmitter3D.png


+ 17 - 12
Script/AtomicEditor/ui/frames/inspector/CreateComponentButton.ts

@@ -28,27 +28,32 @@ var geometryCreateSource = new Atomic.UIMenuItemSource();
 geometryCreateSource.addItem(new Atomic.UIMenuItem("StaticModel", "StaticModel"));
 geometryCreateSource.addItem(new Atomic.UIMenuItem("AnimatedModel", "AnimatedModel"));
 geometryCreateSource.addItem(new Atomic.UIMenuItem("AnimationController", "AnimationController"));
-geometryCreateSource.addItem(new Atomic.UIMenuItem("BillboardSet", "create component"));
-geometryCreateSource.addItem(new Atomic.UIMenuItem("CustomGeometry", "create component"));
-geometryCreateSource.addItem(new Atomic.UIMenuItem("ParticleEmitter", "create component"));
+geometryCreateSource.addItem(new Atomic.UIMenuItem("BillboardSet", "BillboardSet"));
+geometryCreateSource.addItem(new Atomic.UIMenuItem("CustomGeometry", "CustomGeometry"));
+geometryCreateSource.addItem(new Atomic.UIMenuItem("ParticleEmitter", "ParticleEmitter"));
 geometryCreateSource.addItem(new Atomic.UIMenuItem("Skybox", "SkyBox"));
-geometryCreateSource.addItem(new Atomic.UIMenuItem("StaticModelGroup", "create component"));
-geometryCreateSource.addItem(new Atomic.UIMenuItem("Terrain", "create component"));
+geometryCreateSource.addItem(new Atomic.UIMenuItem("StaticModelGroup", "StaticModelGroup"));
+geometryCreateSource.addItem(new Atomic.UIMenuItem("Terrain", "Terrain"));
 geometryCreateSource.addItem(new Atomic.UIMenuItem("Text3D", "create component"));
-geometryCreateSource.addItem(new Atomic.UIMenuItem("Water", "create component"));
+geometryCreateSource.addItem(new Atomic.UIMenuItem("Water", "Water"));
 
 var logicCreateSource = new Atomic.UIMenuItemSource();
 
 logicCreateSource.addItem(new Atomic.UIMenuItem("JSComponent", "JSComponent"));
 logicCreateSource.addItem(new Atomic.UIMenuItem("CSComponent", "CSComponent"));
-logicCreateSource.addItem(new Atomic.UIMenuItem("AnimationController", "create component"));
-logicCreateSource.addItem(new Atomic.UIMenuItem("SplinePath", "create component"));
+logicCreateSource.addItem(new Atomic.UIMenuItem("AnimationController", "AnimationController"));
+logicCreateSource.addItem(new Atomic.UIMenuItem("SplinePath", "SplinePath"));
 
 var navigationCreateSource = new Atomic.UIMenuItemSource();
 
-navigationCreateSource.addItem(new Atomic.UIMenuItem("Navigable", "create component"));
-navigationCreateSource.addItem(new Atomic.UIMenuItem("NavigationMesh", "create component"));
-navigationCreateSource.addItem(new Atomic.UIMenuItem("OffMeshConnection", "create component"));
+navigationCreateSource.addItem(new Atomic.UIMenuItem("CrowdAgent", "CrowdAgent"));
+navigationCreateSource.addItem(new Atomic.UIMenuItem("CrowdManager", "CrowdManager"));
+navigationCreateSource.addItem(new Atomic.UIMenuItem("NavArea", "NavArea"));
+navigationCreateSource.addItem(new Atomic.UIMenuItem("Navigable", "Navigable"));
+navigationCreateSource.addItem(new Atomic.UIMenuItem("NavigationMesh", "NavigationMesh"));
+navigationCreateSource.addItem(new Atomic.UIMenuItem("DynamicNavigationMesh", "DynamicNavigationMesh"));
+navigationCreateSource.addItem(new Atomic.UIMenuItem("Obstacle", "Obstacle"));
+navigationCreateSource.addItem(new Atomic.UIMenuItem("OffMeshConnection", "OffMeshConnection"));
 
 var networkCreateSource = new Atomic.UIMenuItemSource();
 
@@ -57,7 +62,7 @@ networkCreateSource.addItem(new Atomic.UIMenuItem("Network Priority", "create co
 var physicsCreateSource = new Atomic.UIMenuItemSource();
 
 physicsCreateSource.addItem(new Atomic.UIMenuItem("CollisionShape", "CollisionShape"));
-physicsCreateSource.addItem(new Atomic.UIMenuItem("Constraint", "create component"));
+physicsCreateSource.addItem(new Atomic.UIMenuItem("Constraint", "Constraint"));
 physicsCreateSource.addItem(new Atomic.UIMenuItem("RigidBody", "RigidBody"));
 
 var sceneCreateSource = new Atomic.UIMenuItemSource();

+ 5 - 0
Source/ToolCore/Assets/Asset.cpp

@@ -28,6 +28,7 @@
 #include "TextImporter.h"
 #include "NETAssemblyImporter.h"
 #include "TypeScriptImporter.h"
+#include "ParticleEffectImporter.h"
 
 #include "AssetEvents.h"
 #include "Asset.h"
@@ -298,6 +299,10 @@ bool Asset::CreateImporter()
         {
             importer_ = new PEXImporter(context_, this);
         }
+        else if (ext == ".peffect")
+        {
+            importer_ = new ParticleEffectImporter(context_, this);
+        }
         else if (ext == ".txt")
         {
             importer_ = new TextImporter(context_, this);

+ 1 - 0
Source/ToolCore/Assets/AssetDatabase.cpp

@@ -537,6 +537,7 @@ String AssetDatabase::GetResourceImporterName(const String& resourceTypeName)
         resourceTypeToImporterType_["JSComponentFile"] = "JavascriptImporter";        
         resourceTypeToImporterType_["JSONFile"] = "JSONImporter";
         resourceTypeToImporterType_["ParticleEffect2D"] = "PEXImporter";
+        resourceTypeToImporterType_["ParticleEffect"] = "ParticleEffectImporter";
 
         resourceTypeToImporterType_["Animation"] = "ModelImporter";
 

+ 71 - 0
Source/ToolCore/Assets/ParticleEffectImporter.cpp

@@ -0,0 +1,71 @@
+//
+// Copyright (c) 2014-2015, THUNDERBEAST GAMES LLC All rights reserved
+// LICENSE: Atomic Game Engine Editor and Tools EULA
+// Please see LICENSE_ATOMIC_EDITOR_AND_TOOLS.md in repository root for
+// license information: https://github.com/AtomicGameEngine/AtomicGameEngine
+//
+
+#include <Atomic/Resource/ResourceCache.h>
+#include <Atomic/Resource/Image.h>
+#include <Atomic/Atomic3D/ParticleEffect.h>
+
+#include "Asset.h"
+#include "AssetDatabase.h"
+#include "ParticleEffectImporter.h"
+
+namespace ToolCore
+{
+
+ParticleEffectImporter::ParticleEffectImporter(Context* context, Asset *asset) : AssetImporter(context, asset)
+{
+
+}
+
+ParticleEffectImporter::~ParticleEffectImporter()
+{
+
+}
+
+void ParticleEffectImporter::SetDefaults()
+{
+    AssetImporter::SetDefaults();
+}
+
+bool ParticleEffectImporter::Import()
+{
+    return true;
+}
+
+bool ParticleEffectImporter::LoadSettingsInternal(JSONValue& jsonRoot)
+{
+    if (!AssetImporter::LoadSettingsInternal(jsonRoot))
+        return false;
+
+    JSONValue import = jsonRoot.Get("ParticleEffectImporter");
+
+    return true;
+}
+
+bool ParticleEffectImporter::SaveSettingsInternal(JSONValue& jsonRoot)
+{
+    if (!AssetImporter::SaveSettingsInternal(jsonRoot))
+        return false;
+
+    JSONValue import(JSONValue::emptyObject);
+    jsonRoot.Set("ParticleEffectImporter", import);
+
+
+    return true;
+}
+
+Resource* ParticleEffectImporter::GetResource(const String& typeName)
+{
+    ResourceCache* cache = GetSubsystem<ResourceCache>();
+
+    ParticleEffect* particleEffect = cache->GetResource<ParticleEffect>(asset_->GetPath());
+
+    return particleEffect;
+
+}
+
+}

+ 37 - 0
Source/ToolCore/Assets/ParticleEffectImporter.h

@@ -0,0 +1,37 @@
+//
+// Copyright (c) 2014-2015, THUNDERBEAST GAMES LLC All rights reserved
+// LICENSE: Atomic Game Engine Editor and Tools EULA
+// Please see LICENSE_ATOMIC_EDITOR_AND_TOOLS.md in repository root for
+// license information: https://github.com/AtomicGameEngine/AtomicGameEngine
+//
+
+#pragma once
+
+#include "AssetImporter.h"
+
+namespace ToolCore
+{
+
+class ParticleEffectImporter : public AssetImporter
+{
+    OBJECT(ParticleEffectImporter);
+
+public:
+    /// Construct.
+    ParticleEffectImporter(Context* context, Asset* asset);
+    virtual ~ParticleEffectImporter();
+
+    virtual void SetDefaults();
+
+    Resource* GetResource(const String& typeName);
+
+protected:
+
+    bool Import();
+
+    virtual bool LoadSettingsInternal(JSONValue& jsonRoot);
+    virtual bool SaveSettingsInternal(JSONValue& jsonRoot);
+
+};
+
+}