Browse Source

Merge branch 'GroundPlaneAssetify' of https://github.com/Areloch/Torque3D into Preview4_0

Areloch 4 năm trước cách đây
mục cha
commit
3821ddd15a
20 tập tin đã thay đổi với 274 bổ sung122 xóa
  1. 110 92
      Engine/source/T3D/assets/MaterialAsset.cpp
  2. 16 9
      Engine/source/T3D/assets/MaterialAsset.h
  3. 2 0
      Engine/source/T3D/assets/assetImporter.cpp
  4. 97 17
      Engine/source/T3D/groundPlane.cpp
  5. 12 0
      Engine/source/T3D/groundPlane.h
  6. 6 0
      Templates/BaseGame/game/core/rendering/materials/NoMaterial.asset.taml
  7. 6 0
      Templates/BaseGame/game/core/rendering/materials/NoMaterial.cs
  8. 1 0
      Templates/BaseGame/game/data/Prototyping/Materials/DetailBlue.asset.taml
  9. 1 0
      Templates/BaseGame/game/data/Prototyping/Materials/FloorGray.asset.taml
  10. 1 0
      Templates/BaseGame/game/data/Prototyping/Materials/InteractiveRed.asset.taml
  11. 1 0
      Templates/BaseGame/game/data/Prototyping/Materials/NatureBrown.asset.taml
  12. 1 0
      Templates/BaseGame/game/data/Prototyping/Materials/NatureGreen.asset.taml
  13. 1 0
      Templates/BaseGame/game/data/Prototyping/Materials/NullPink.asset.taml
  14. 1 0
      Templates/BaseGame/game/data/Prototyping/Materials/TrimYellow.asset.taml
  15. 1 0
      Templates/BaseGame/game/data/Prototyping/Materials/WallOrange.asset.taml
  16. 1 0
      Templates/BaseGame/game/data/Prototyping/Materials/WaterBlue.asset.taml
  17. 1 0
      Templates/BaseGame/game/data/Prototyping/shapes/kork_chan.asset.taml
  18. 6 0
      Templates/BaseGame/game/tools/assetBrowser/scripts/editAsset.cs
  19. 1 1
      Templates/BaseGame/game/tools/levels/DefaultEditorLevel.asset.taml
  20. 8 3
      Templates/BaseGame/game/tools/levels/DefaultEditorLevel.mis

+ 110 - 92
Engine/source/T3D/assets/MaterialAsset.cpp

@@ -85,6 +85,35 @@ ConsoleSetType(TypeMaterialAssetPtr)
    Con::warnf("(TypeMaterialAssetPtr) - Cannot set multiple args to a single asset.");
 }
 
+
+ConsoleType(assetIdString, TypeMaterialAssetId, String, ASSET_ID_FIELD_PREFIX)
+
+ConsoleGetType(TypeMaterialAssetId)
+{
+   // Fetch asset Id.
+   return *((const char**)(dptr));
+}
+
+ConsoleSetType(TypeMaterialAssetId)
+{
+   // Was a single argument specified?
+   if (argc == 1)
+   {
+      // Yes, so fetch field value.
+      const char* pFieldValue = argv[0];
+
+      // Fetch asset Id.
+      StringTableEntry* assetId = (StringTableEntry*)(dptr);
+
+      // Update asset value.
+      *assetId = StringTable->insert(pFieldValue);
+
+      return;
+   }
+
+   // Warn.
+   Con::warnf("(TypeMaterialAssetId) - Cannot set multiple args to a single asset.");
+}
 //-----------------------------------------------------------------------------
 
 MaterialAsset::MaterialAsset()
@@ -180,6 +209,51 @@ DefineEngineMethod(MaterialAsset, compileShader, void, (), , "Compiles the mater
    object->compileShader();
 }
 
+//------------------------------------------------------------------------------
+StringTableEntry MaterialAsset::getAssetIdByMaterialName(StringTableEntry matName)
+{
+   StringTableEntry materialAssetId = StringTable->EmptyString();
+
+   AssetQuery* query = new AssetQuery();
+   U32 foundCount = AssetDatabase.findAssetType(query, "MaterialAsset");
+   if (foundCount == 0)
+   {
+      //Didn't work, so have us fall back to a placeholder asset
+      materialAssetId = StringTable->insert("Core_Rendering:noMaterial");
+   }
+   else
+   {
+      for (U32 i = 0; i < foundCount; i++)
+      {
+         MaterialAsset* matAsset = AssetDatabase.acquireAsset<MaterialAsset>(query->mAssetList[i]);
+         if (matAsset && matAsset->getMaterialDefinitionName() == matName)
+         {
+            materialAssetId = matAsset->getAssetId();
+            break;
+         }
+      }
+   }
+
+   return materialAssetId;
+}
+
+bool MaterialAsset::getAssetById(StringTableEntry assetId, AssetPtr<MaterialAsset>* materialAsset)
+{
+   (*materialAsset) = assetId;
+
+   if (!materialAsset->isNull())
+      return true;
+
+   //Didn't work, so have us fall back to a placeholder asset
+   StringTableEntry noImageId = StringTable->insert("Core_Rendering:noMaterial");
+   materialAsset->setAssetId(noImageId);
+
+   if (!materialAsset->isNull())
+      return true;
+
+   return false;
+}
+
 //-----------------------------------------------------------------------------
 // GuiInspectorTypeAssetId
 //-----------------------------------------------------------------------------
@@ -187,7 +261,7 @@ DefineEngineMethod(MaterialAsset, compileShader, void, (), , "Compiles the mater
 IMPLEMENT_CONOBJECT(GuiInspectorTypeMaterialAssetPtr);
 
 ConsoleDocClass(GuiInspectorTypeMaterialAssetPtr,
-   "@brief Inspector field type for Material Asset Objects\n\n"
+   "@brief Inspector field type for Shapes\n\n"
    "Editor use only.\n\n"
    "@internal"
 );
@@ -202,70 +276,36 @@ void GuiInspectorTypeMaterialAssetPtr::consoleInit()
 GuiControl* GuiInspectorTypeMaterialAssetPtr::constructEditControl()
 {
    // Create base filename edit controls
-   mUseHeightOverride = true;
-   mHeightOverride = 100;
-
-   mMatEdContainer = new GuiControl();
-   mMatEdContainer->registerObject();
-
-   addObject(mMatEdContainer);
-
-   // Create "Open in ShapeEditor" button
-   mMatPreviewButton = new GuiBitmapButtonCtrl();
-
-   const char* matAssetId = getData();
-
-   MaterialAsset* matAsset = AssetDatabase.acquireAsset< MaterialAsset>(matAssetId);
-
-   Material* materialDef = nullptr;
-
-   char bitmapName[512] = "tools/worldEditor/images/toolbar/shape-editor";
-
-   StringTableEntry matDefName = matAsset ? matAsset->getMaterialDefinitionName() : matAssetId;
-
-   if (!Sim::findObject(matDefName, materialDef))
-   {
-      Con::errorf("GuiInspectorTypeMaterialAssetPtr::constructEditControl() - unable to find material in asset");
-   }
-   else
-   {
-      mMatPreviewButton->setBitmap(materialDef->mDiffuseMapFilename[0]);
-   }
-
-   mMatPreviewButton->setPosition(0, 0);
-   mMatPreviewButton->setExtent(100,100);
+   GuiControl* retCtrl = Parent::constructEditControl();
+   if (retCtrl == NULL)
+      return retCtrl;
 
    // Change filespec
    char szBuffer[512];
-   dSprintf(szBuffer, sizeof(szBuffer), "AssetBrowser.showDialog(\"MaterialAsset\", \"AssetBrowser.changeAsset\", %d, %s);",
-      mInspector->getComponentGroupTargetId(), mCaption);
-   mMatPreviewButton->setField("Command", szBuffer);
-
-   mMatPreviewButton->setDataField(StringTable->insert("Profile"), NULL, "GuiButtonProfile");
-   mMatPreviewButton->setDataField(StringTable->insert("tooltipprofile"), NULL, "GuiToolTipProfile");
-   mMatPreviewButton->setDataField(StringTable->insert("hovertime"), NULL, "1000");
+   dSprintf(szBuffer, sizeof(szBuffer), "AssetBrowser.showDialog(\"MaterialAsset\", \"AssetBrowser.changeAsset\", %s, %s);",
+      mInspector->getInspectObject()->getIdString(), mCaption);
+   mBrowseButton->setField("Command", szBuffer);
 
-   StringBuilder strbld;
-   strbld.append(matDefName);
-   strbld.append("\n");
-   strbld.append("Open this file in the Material Editor");
+   setDataField(StringTable->insert("targetObject"), NULL, mInspector->getInspectObject()->getIdString());
 
-   mMatPreviewButton->setDataField(StringTable->insert("tooltip"), NULL, strbld.data());
+   // Create "Open in Editor" button
+   mEditButton = new GuiBitmapButtonCtrl();
 
-   _registerEditControl(mMatPreviewButton);
-   //mMatPreviewButton->registerObject();
-   mMatEdContainer->addObject(mMatPreviewButton);
+   dSprintf(szBuffer, sizeof(szBuffer), "AssetBrowser.editAsset(%d.getText());", retCtrl->getId());
+   mEditButton->setField("Command", szBuffer);
 
-   mMatAssetIdTxt = new GuiTextEditCtrl();
-   mMatAssetIdTxt->registerObject();
-   mMatAssetIdTxt->setActive(false);
+   char bitmapName[512] = "tools/worldEditor/images/toolbar/material-editor";
+   mEditButton->setBitmap(bitmapName);
 
-   mMatAssetIdTxt->setText(matAssetId);
+   mEditButton->setDataField(StringTable->insert("Profile"), NULL, "GuiButtonProfile");
+   mEditButton->setDataField(StringTable->insert("tooltipprofile"), NULL, "GuiToolTipProfile");
+   mEditButton->setDataField(StringTable->insert("hovertime"), NULL, "1000");
+   mEditButton->setDataField(StringTable->insert("tooltip"), NULL, "Open this file in the Material Editor");
 
-   mMatAssetIdTxt->setBounds(100, 0, 150, 18);
-   mMatEdContainer->addObject(mMatAssetIdTxt);
+   mEditButton->registerObject();
+   addObject(mEditButton);
 
-   return mMatEdContainer;
+   return retCtrl;
 }
 
 bool GuiInspectorTypeMaterialAssetPtr::updateRects()
@@ -279,54 +319,32 @@ bool GuiInspectorTypeMaterialAssetPtr::updateRects()
    mEditCtrlRect.set(fieldExtent.x - dividerPos + dividerMargin, 1, dividerPos - dividerMargin - 34, fieldExtent.y);
 
    bool resized = mEdit->resize(mEditCtrlRect.point, mEditCtrlRect.extent);
-
-   if (mMatEdContainer != nullptr && mMatPreviewButton != nullptr)
+   if (mBrowseButton != NULL)
    {
-      mMatPreviewButton->resize(mEditCtrlRect.point, mEditCtrlRect.extent);
+      mBrowseRect.set(fieldExtent.x - 32, 2, 14, fieldExtent.y - 4);
+      resized |= mBrowseButton->resize(mBrowseRect.point, mBrowseRect.extent);
    }
 
-   if (mMatPreviewButton != nullptr)
+   if (mEditButton != NULL)
    {
-      mMatPreviewButton->resize(Point2I::Zero, Point2I(100, 100));
-   }
-
-   if (mMatAssetIdTxt != nullptr)
-   {
-      mMatAssetIdTxt->resize(Point2I(100, 0), Point2I(mEditCtrlRect.extent.x - 100, 18));
+      RectI shapeEdRect(fieldExtent.x - 16, 2, 14, fieldExtent.y - 4);
+      resized |= mEditButton->resize(shapeEdRect.point, shapeEdRect.extent);
    }
 
    return resized;
 }
 
-bool GuiInspectorTypeMaterialAssetPtr::resize(const Point2I& newPosition, const Point2I& newExtent)
-{
-   if (!Parent::resize(newPosition, newExtent))
-      return false;
-
-   if (mMatEdContainer != NULL)
-   {
-      return updateRects();
-   }
+IMPLEMENT_CONOBJECT(GuiInspectorTypeMaterialAssetId);
 
-   return false;
-}
-
-void GuiInspectorTypeMaterialAssetPtr::setMaterialAsset(String assetId)
-{
-   mTargetObject->setDataField(mCaption, "", assetId);
-
-   //force a refresh
-   SimObject* obj = mInspector->getInspectObject();
-   mInspector->inspectObject(obj);
-}
+ConsoleDocClass(GuiInspectorTypeMaterialAssetId,
+   "@brief Inspector field type for Material Assets\n\n"
+   "Editor use only.\n\n"
+   "@internal"
+);
 
-DefineEngineMethod(GuiInspectorTypeMaterialAssetPtr, setMaterialAsset, void, (String assetId), (""),
-   "Gets a particular shape animation asset for this shape.\n"
-   "@param animation asset index.\n"
-   "@return Shape Animation Asset.\n")
+void GuiInspectorTypeMaterialAssetId::consoleInit()
 {
-   if (assetId == String::EmptyString)
-      return;
+   Parent::consoleInit();
 
-   return object->setMaterialAsset(assetId);
+   ConsoleBaseType::getType(TypeMaterialAssetId)->setInspectorFieldType("GuiInspectorTypeMaterialAssetId");
 }

+ 16 - 9
Engine/source/T3D/assets/MaterialAsset.h

@@ -42,9 +42,7 @@
 #include "gfx/gfxDevice.h"
 #endif
 
-#ifndef _GUI_INSPECTOR_TYPES_H_
 #include "gui/editor/guiInspectorTypes.h"
-#endif
 
 #include "materials/matTextureTarget.h"
 #include "materials/materialDefinition.h"
@@ -77,6 +75,9 @@ public:
 
    inline StringTableEntry getScriptPath(void) const { return mScriptPath; };
 
+   static StringTableEntry getAssetIdByMaterialName(StringTableEntry fileName);
+   static bool getAssetById(StringTableEntry assetId, AssetPtr<MaterialAsset>* materialAsset);
+
    /// Declare Console Object.
    DECLARE_CONOBJECT(MaterialAsset);
 
@@ -89,26 +90,32 @@ protected:
 };
 
 DefineConsoleType(TypeMaterialAssetPtr, MaterialAsset)
+DefineConsoleType(TypeMaterialAssetId, String)
 
 //-----------------------------------------------------------------------------
 // TypeAssetId GuiInspectorField Class
 //-----------------------------------------------------------------------------
-class GuiInspectorTypeMaterialAssetPtr : public GuiInspectorField
+class GuiInspectorTypeMaterialAssetPtr : public GuiInspectorTypeFileName
 {
-   typedef GuiInspectorField Parent;
+   typedef GuiInspectorTypeFileName Parent;
 public:
 
-   GuiControl*       mMatEdContainer;
-   GuiBitmapButtonCtrl  *mMatPreviewButton;
-   GuiTextEditCtrl *mMatAssetIdTxt;
+   GuiBitmapButtonCtrl* mEditButton;
 
    DECLARE_CONOBJECT(GuiInspectorTypeMaterialAssetPtr);
    static void consoleInit();
 
    virtual GuiControl* constructEditControl();
    virtual bool updateRects();
-   virtual bool resize(const Point2I& newPosition, const Point2I& newExtent);
-   void setMaterialAsset(String assetId);
+};
+
+class GuiInspectorTypeMaterialAssetId : public GuiInspectorTypeMaterialAssetPtr
+{
+   typedef GuiInspectorTypeMaterialAssetPtr Parent;
+public:
+
+   DECLARE_CONOBJECT(GuiInspectorTypeMaterialAssetId);
+   static void consoleInit();
 };
 
 #endif // _ASSET_BASE_H_

+ 2 - 0
Engine/source/T3D/assets/assetImporter.cpp

@@ -2628,6 +2628,8 @@ Torque::Path AssetImporter::importMaterialAsset(AssetImportObject* assetItem)
    newAsset->setAssetName(assetName);
    newAsset->setScriptFile(scriptName.c_str());
    newAsset->setDataField(StringTable->insert("originalFilePath"), nullptr, qualifiedFromFile);
+   newAsset->setDataField(StringTable->insert("materialDefinitionName"), nullptr, assetName);
+   
 
    //iterate through and write out the material maps dependencies
    S32 dependencySlotId = 0;

+ 97 - 17
Engine/source/T3D/groundPlane.cpp

@@ -85,6 +85,9 @@ GroundPlane::GroundPlane()
 
    mConvexList = new Convex;
    mTypeMask |= TerrainLikeObjectType;
+
+   mMaterialAsset = StringTable->EmptyString();
+   mMaterialAssetId = StringTable->EmptyString();
 }
 
 GroundPlane::~GroundPlane()
@@ -103,7 +106,14 @@ void GroundPlane::initPersistFields()
       addField( "squareSize",    TypeF32,          Offset( mSquareSize, GroundPlane ), "Square size in meters to which %GroundPlane subdivides its geometry." );
       addField( "scaleU",        TypeF32,          Offset( mScaleU, GroundPlane ), "Scale of texture repeat in the U direction." );
       addField( "scaleV",        TypeF32,          Offset( mScaleV, GroundPlane ), "Scale of texture repeat in the V direction." );
-      addField( "material",      TypeMaterialName, Offset( mMaterialName, GroundPlane ), "Name of Material used to render %GroundPlane's surface." );
+
+      addProtectedField("materialAsset", TypeMaterialAssetId, Offset(mMaterialAssetId, GroundPlane),
+         &GroundPlane::_setMaterialAsset, &defaultProtectedGetFn,
+         "The material asset.");
+
+      addProtectedField("material", TypeMaterialName, Offset(mMaterialName, GroundPlane),
+         &GroundPlane::_setMaterialName, &defaultProtectedGetFn,
+         "The material name.");
 
    endGroup( "Plane" );
    
@@ -114,6 +124,72 @@ void GroundPlane::initPersistFields()
    removeField( "rotation" );
 }
 
+bool GroundPlane::_setMaterialAsset(void* obj, const char* index, const char* data)
+{
+   GroundPlane* gp = static_cast<GroundPlane*>(obj);// ->setFile(FileName(data));
+
+   gp->mMaterialAssetId = StringTable->insert(data);
+
+   return gp->setMaterialAsset(gp->mMaterialAssetId);
+}
+
+bool GroundPlane::_setMaterialName(void* obj, const char* index, const char* data)
+{
+   GroundPlane* gp = static_cast<GroundPlane*>(obj);// ->setFile(FileName(data));
+
+   StringTableEntry assetId = MaterialAsset::getAssetIdByMaterialName(StringTable->insert(data));
+   if (assetId != StringTable->EmptyString())
+   {
+      //Special exception case. If we've defaulted to the 'no shape' mesh, don't save it out, we'll retain the original ids/paths so it doesn't break
+      //the TSStatic
+      if (gp->setMaterialAsset(assetId))
+      {
+         if (assetId == StringTable->insert("Core_Rendering:noMaterial"))
+         {
+            gp->mMaterialName = data;
+            gp->mMaterialAssetId = StringTable->EmptyString();
+
+            return true;
+         }
+         else
+         {
+            gp->mMaterialAssetId = assetId;
+            gp->mMaterialName = StringTable->EmptyString();
+
+            return false;
+         }
+      }
+   }
+   else
+   {
+      gp->mMaterialAsset = StringTable->EmptyString();
+      gp->mMaterialName = data;
+   }
+
+   return true;
+}
+
+bool GroundPlane::setMaterialAsset(const StringTableEntry materialAssetId)
+{
+   if (MaterialAsset::getAssetById(materialAssetId, &mMaterialAsset))
+   {
+      //Special exception case. If we've defaulted to the 'no shape' mesh, don't save it out, we'll retain the original ids/paths so it doesn't break
+      //the TSStatic
+      if (mMaterialAsset.getAssetId() != StringTable->insert("Core_Rendering:noMaterial"))
+      {
+         mMaterialName = StringTable->EmptyString();
+      }
+
+      _updateMaterial();
+
+      setMaskBits(-1);
+
+      return true;
+   }
+
+   return false;
+}
+
 bool GroundPlane::onAdd()
 {
    if( !Parent::onAdd() )
@@ -187,6 +263,7 @@ U32 GroundPlane::packUpdate( NetConnection* connection, U32 mask, BitStream* str
    stream->write( mSquareSize );
    stream->write( mScaleU );
    stream->write( mScaleV );
+   stream->writeString( mMaterialAsset.getAssetId() );
    stream->write( mMaterialName );
 
    return retMask;
@@ -199,6 +276,11 @@ void GroundPlane::unpackUpdate( NetConnection* connection, BitStream* stream )
    stream->read( &mSquareSize );
    stream->read( &mScaleU );
    stream->read( &mScaleV );
+
+   char buffer[256];
+   stream->readString(buffer);
+   setMaterialAsset(StringTable->insert(buffer));
+
    stream->read( &mMaterialName );
 
    // If we're added then something possibly changed in 
@@ -213,23 +295,14 @@ void GroundPlane::unpackUpdate( NetConnection* connection, BitStream* stream )
 
 void GroundPlane::_updateMaterial()
 {
-   if( mMaterialName.isEmpty() )
+   if (!mMaterialAsset.isNull())
    {
-      Con::warnf( "GroundPlane::_updateMaterial - no material set; defaulting to 'WarningMaterial'" );
-      mMaterialName = "WarningMaterial";
-   }
-
-   // If the material name matches then don't 
-   // bother updating it.
-   if (  mMaterial && 
-         mMaterialName.compare( mMaterial->getMaterial()->getName() ) == 0 )
-      return;
+      String matName = mMaterialAsset->getMaterialDefinitionName();
 
-   SAFE_DELETE( mMaterial );
-
-   mMaterial = MATMGR->createMatInstance( mMaterialName, getGFXVertexFormat< VertexType >() );
-   if ( !mMaterial )
-      Con::errorf( "GroundPlane::_updateMaterial - no material called '%s'", mMaterialName.c_str() );
+      mMaterial = MATMGR->createMatInstance(matName, getGFXVertexFormat< VertexType >());
+      if (!mMaterial)
+         Con::errorf("GroundPlane::_updateMaterial - no material called '%s'", matName.c_str());
+   }
 }
 
 bool GroundPlane::castRay( const Point3F& start, const Point3F& end, RayInfo* info )
@@ -582,6 +655,13 @@ void GroundPlane::generateGrid( U32 width, U32 height, F32 squareSize,
    outPrimitives.unlock();
 }
 
+void GroundPlane::getUtilizedAssets(Vector<StringTableEntry>* usedAssetsList)
+{
+   if (!mMaterialAsset.isNull() && mMaterialAsset->getAssetId() != StringTable->insert("Core_Rendering:noMaterial"))
+      usedAssetsList->push_back_unique(mMaterialAsset->getAssetId());
+
+}
+
 DefineEngineMethod( GroundPlane, postApply, void, (),,
                    "Intended as a helper to developers and editor scripts.\n"
                    "Force trigger an inspectPostApply. This will transmit "
@@ -589,4 +669,4 @@ DefineEngineMethod( GroundPlane, postApply, void, (),,
                    )
 {
 	object->inspectPostApply();
-}
+}

+ 12 - 0
Engine/source/T3D/groundPlane.h

@@ -33,6 +33,8 @@
 #include "gfx/gfxPrimitiveBuffer.h"
 #endif
 
+#include "T3D/assets/MaterialAsset.h"
+
 class PhysicsBody;
 class BaseMatInstance;
 
@@ -62,6 +64,9 @@ public:
    GroundPlane();
    virtual ~GroundPlane();
 
+   static bool _setMaterialAsset(void* obj, const char* index, const char* data);
+   static bool _setMaterialName(void* obj, const char* index, const char* data);
+
    virtual bool      onAdd();
    virtual void      onRemove();
    virtual U32       packUpdate( NetConnection* connection, U32 mask, BitStream* stream );
@@ -76,6 +81,10 @@ public:
 
    static void       initPersistFields();
 
+   bool setMaterialAsset(const StringTableEntry materialAssetId);
+
+   virtual void getUtilizedAssets(Vector<StringTableEntry>* usedAssetsList);
+
 protected:
 
    typedef GFXVertexPNTBT VertexType;
@@ -103,6 +112,9 @@ private:
    String            mMaterialName; ///< Object name of material to use.
    BaseMatInstance*  mMaterial;     ///< Instantiated material based on given material name.
 
+   AssetPtr<MaterialAsset> mMaterialAsset;
+   StringTableEntry mMaterialAssetId;
+
    PhysicsBody *mPhysicsRep;
 
    /// @name Rendering State

+ 6 - 0
Templates/BaseGame/game/core/rendering/materials/NoMaterial.asset.taml

@@ -0,0 +1,6 @@
+<MaterialAsset
+    canSave="true"
+    canSaveDynamicFields="true"
+    AssetName="NoMaterial"
+    scriptFile="@assetFile=NoMaterial.cs"
+    materialDefinitionName="NoMaterial" />

+ 6 - 0
Templates/BaseGame/game/core/rendering/materials/NoMaterial.cs

@@ -0,0 +1,6 @@
+//--- OBJECT WRITE BEGIN ---
+singleton Material(NoMaterial) {
+   mapTo="NoMaterial";
+   DiffuseMap = "core/rendering/images/warnMat";
+};
+//--- OBJECT WRITE END ---

+ 1 - 0
Templates/BaseGame/game/data/Prototyping/Materials/DetailBlue.asset.taml

@@ -3,5 +3,6 @@
     canSaveDynamicFields="true"
     AssetName="DetailBlue"
     scriptFile="@assetFile=DetailBlue.cs"
+    materialDefinitionName="DetailBlue"
     imageMap0="@Asset=Prototyping:DetailBlue_ALBEDO"
     originalFilePath="D:/Gamedev/art/Blockout/DetailBlue.png" />

+ 1 - 0
Templates/BaseGame/game/data/Prototyping/Materials/FloorGray.asset.taml

@@ -3,5 +3,6 @@
     canSaveDynamicFields="true"
     AssetName="FloorGray"
     scriptFile="@assetFile=FloorGray.cs"
+    materialDefinitionName="FloorGray"
     imageMap0="@Asset=Prototyping:FloorGray_ALBEDO"
     originalFilePath="D:/Gamedev/art/Blockout/FloorGray.png" />

+ 1 - 0
Templates/BaseGame/game/data/Prototyping/Materials/InteractiveRed.asset.taml

@@ -3,5 +3,6 @@
     canSaveDynamicFields="true"
     AssetName="InteractiveRed"
     scriptFile="@assetFile=InteractiveRed.cs"
+    materialDefinitionName="InteractiveRed"
     imageMap0="@Asset=Prototyping:InteractiveRed_ALBEDO"
     originalFilePath="D:/Gamedev/art/Blockout/InteractiveRed.png" />

+ 1 - 0
Templates/BaseGame/game/data/Prototyping/Materials/NatureBrown.asset.taml

@@ -3,5 +3,6 @@
     canSaveDynamicFields="true"
     AssetName="NatureBrown"
     scriptFile="@assetFile=NatureBrown.cs"
+    materialDefinitionName="NatureBrown"
     imageMap0="@Asset=Prototyping:NatureBrown_ALBEDO"
     originalFilePath="D:/Gamedev/art/Blockout/NatureBrown.png" />

+ 1 - 0
Templates/BaseGame/game/data/Prototyping/Materials/NatureGreen.asset.taml

@@ -3,5 +3,6 @@
     canSaveDynamicFields="true"
     AssetName="NatureGreen"
     scriptFile="@assetFile=NatureGreen.cs"
+    materialDefinitionName="NatureGreen"
     imageMap0="@Asset=Prototyping:NatureGreen_ALBEDO"
     originalFilePath="D:/Gamedev/art/Blockout/NatureGreen.png" />

+ 1 - 0
Templates/BaseGame/game/data/Prototyping/Materials/NullPink.asset.taml

@@ -3,5 +3,6 @@
     canSaveDynamicFields="true"
     AssetName="NullPink"
     scriptFile="@assetFile=NullPink.cs"
+    materialDefinitionName="NullPink"
     imageMap0="@Asset=Prototyping:NullPink_ALBEDO"
     originalFilePath="D:/Gamedev/art/Blockout/NullPink.png" />

+ 1 - 0
Templates/BaseGame/game/data/Prototyping/Materials/TrimYellow.asset.taml

@@ -3,5 +3,6 @@
     canSaveDynamicFields="true"
     AssetName="TrimYellow"
     scriptFile="@assetFile=TrimYellow.cs"
+    materialDefinitionName="TrimYellow"
     imageMap0="@Asset=Prototyping:TrimYellow_ALBEDO"
     originalFilePath="D:/Gamedev/art/Blockout/TrimYellow.png" />

+ 1 - 0
Templates/BaseGame/game/data/Prototyping/Materials/WallOrange.asset.taml

@@ -3,5 +3,6 @@
     canSaveDynamicFields="true"
     AssetName="WallOrange"
     scriptFile="@assetFile=WallOrange.cs"
+    materialDefinitionName="WallOrange"
     imageMap0="@Asset=Prototyping:WallOrange_ALBEDO"
     originalFilePath="D:/Gamedev/art/Blockout/WallOrange.png" />

+ 1 - 0
Templates/BaseGame/game/data/Prototyping/Materials/WaterBlue.asset.taml

@@ -3,5 +3,6 @@
     canSaveDynamicFields="true"
     AssetName="WaterBlue"
     scriptFile="@assetFile=WaterBlue.cs"
+    materialDefinitionName="WaterBlue"
     imageMap0="@Asset=Prototyping:WaterBlue_ALBEDO"
     originalFilePath="D:/Gamedev/art/Blockout/WaterBlue.png" />

+ 1 - 0
Templates/BaseGame/game/data/Prototyping/shapes/kork_chan.asset.taml

@@ -3,5 +3,6 @@
     canSaveDynamicFields="true"
     AssetName="kork_chan"
     scriptFile="@assetFile=kork_chan.cs"
+    materialDefinitionName="kork_chan"
     imageMap0="@Asset=Prototyping:kork_chan_ALBEDO"
     originalFilePath="D:/Gamedev/T3DMIT/Resources/Prototyping/Shapes" />

+ 6 - 0
Templates/BaseGame/game/tools/assetBrowser/scripts/editAsset.cs

@@ -28,6 +28,12 @@ function AssetBrowser::editAsset(%this, %assetDef)
          }
       }
    }
+   else if(!isObject(%assetDef) && strchrpos(%assetDef, ":") != -1)
+   {
+      //Turns out we were passed an assetid, not an asset definition. 
+      //Grab the asset def from that  
+      %assetDef = AssetDatabase.acquireAsset(%assetDef);
+   }
       
       
    %assetType = %assetDef.getClassName();

+ 1 - 1
Templates/BaseGame/game/tools/levels/DefaultEditorLevel.asset.taml

@@ -6,5 +6,5 @@
     LevelName="DefaultEditorLevel"
     isSubScene="false"
     description="An empty room"
-    staticObjectAssetDependency0="@Asset=FPSGameplay:station01"
+    staticObjectAssetDependency0="@Asset=Prototyping:FloorGray"
     VersionId="1" />

+ 8 - 3
Templates/BaseGame/game/tools/levels/DefaultEditorLevel.mis

@@ -5,6 +5,7 @@ new Scene(EditorTemplateLevel) {
    isSubScene = "0";
    isEditing = "0";
    isDirty = "0";
+   EditPostEffects = "0";
       cdTrack = "2";
       CTF_scoreLimit = "5";
       Enabled = "1";
@@ -35,6 +36,7 @@ new Scene(EditorTemplateLevel) {
       Material = "BlankSkyMat";
       drawBottom = "0";
       fogBandHeight = "0";
+      dirtyGameObject = "0";
       position = "0 0 0";
       rotation = "1 0 0 0";
       scale = "1 1 1";
@@ -48,8 +50,6 @@ new Scene(EditorTemplateLevel) {
       ambient = "0.337255 0.533333 0.619608 1";
       brightness = "1";
       castShadows = "1";
-      staticRefreshFreq = "250";
-      dynamicRefreshFreq = "8";
       coronaEnabled = "1";
       coronaScale = "0.5";
       coronaTint = "1 1 1 1";
@@ -68,6 +68,7 @@ new Scene(EditorTemplateLevel) {
       representedInLightmap = "0";
       shadowDarkenColor = "0 0 0 -1";
       includeLightmappedGeometryInShadow = "0";
+      dirtyGameObject = "0";
       position = "0 0 0";
       rotation = "1 0 0 0";
       scale = "1 1 1";
@@ -75,6 +76,7 @@ new Scene(EditorTemplateLevel) {
       canSaveDynamicFields = "1";
          bias = "0.1";
          Blur = "1";
+         dynamicRefreshFreq = "8";
          Enabled = "1";
          height = "1024";
          lightBleedFactor = "0.8";
@@ -82,13 +84,15 @@ new Scene(EditorTemplateLevel) {
          pointShadowType = "PointShadowType_Paraboloid";
          shadowBox = "-100 -100 -100 100 100 100";
          splitFadeDistances = "1 1 1 1";
+         staticRefreshFreq = "250";
          width = "3072";
    };
    new GroundPlane() {
       squareSize = "128";
       scaleU = "25";
       scaleV = "25";
-      Material = "Grid_512_Grey";
+      MaterialAsset = "Prototyping:FloorGray";
+      dirtyGameObject = "0";
       canSave = "1";
       canSaveDynamicFields = "1";
          Enabled = "1";
@@ -99,6 +103,7 @@ new Scene(EditorTemplateLevel) {
    new Skylight() {
       Enabled = "1";
       ReflectionMode = "Baked Cubemap";
+      dirtyGameObject = "0";
       position = "1.37009 -5.23561 46.5817";
       rotation = "1 0 0 0";
       canSave = "1";