Przeglądaj źródła

decal atlas support work
allow a textureCoordCount to be used raw when texrows and coumns are not >1 in order to let the transmitted vector actually be used

correct and augment editDecalDetails to now read
DecalEditorGui.editDecalDetails( %this.instanceId, %pos, %tan, %size, %uvID );
it needed the word split to begin with, and also added the uvID for instance frame tracking/overriding
same token added a getDecalFrame(%this.instanceId); method

todos: add a frame lookup and selector for the instance tab, modify decal display to account for non-square uv portions

AzaezelX 3 miesięcy temu
rodzic
commit
82435693dd

+ 9 - 6
Engine/source/T3D/decal/decalData.cpp

@@ -406,12 +406,15 @@ void DecalData::reloadRects()
 	bool canRenderColsByFrame = false;
 	S32 id = 0;
 	
-	texRect[id].point.x = 0.f;
-	texRect[id].extent.x = 1.f;
-	texRect[id].point.y = 0.f;
-	texRect[id].extent.y = 1.f;
-	
-	texCoordCount = (texRows * texCols) - 1;
+
+   if (texRows > 1 || texCols > 1)
+   {
+      texCoordCount = (texRows * texCols) - 1;
+      texRect[id].point.x = 0.f;
+      texRect[id].extent.x = 1.f;
+      texRect[id].point.y = 0.f;
+      texRect[id].extent.y = 1.f;
+   }
 
 	if( texCoordCount > 16 )
 	{

+ 8 - 2
Engine/source/gui/worldEditor/guiDecalEditorCtrl.cpp

@@ -854,7 +854,7 @@ DefineEngineMethod( GuiDecalEditorCtrl, selectDecal, void, ( U32 id ), , "select
 	object->selectDecal( decalInstance );
 }
 
-DefineEngineMethod( GuiDecalEditorCtrl, editDecalDetails, void, ( U32 id, Point3F pos, Point3F tan,F32 size ), , "editDecalDetails( S32 )()" )
+DefineEngineMethod( GuiDecalEditorCtrl, editDecalDetails, void, ( U32 id, Point3F pos, Point3F tan, F32 size, S32 uvID), , "editDecalDetails( S32,Point3F,Point3F,F32,S32 )()" )
 {
 	DecalInstance *decalInstance = gDecalManager->mDecalInstanceVec[id];
 	if( decalInstance == NULL )
@@ -864,7 +864,8 @@ DefineEngineMethod( GuiDecalEditorCtrl, editDecalDetails, void, ( U32 id, Point3
    decalInstance->mPosition = pos;
 	decalInstance->mTangent = tan;
 	decalInstance->mSize = size;
-	
+   decalInstance->mTextureRectIdx = uvID;
+
 	if ( decalInstance == object->mSELDecal )
 		object->setGizmoFocus( decalInstance );
 
@@ -873,6 +874,11 @@ DefineEngineMethod( GuiDecalEditorCtrl, editDecalDetails, void, ( U32 id, Point3
 	gDecalManager->notifyDecalModified( decalInstance );
 }
 
+DefineEngineMethod(GuiDecalEditorCtrl, getDecalFrame, S32, (U32 id), , "")
+{
+   return gDecalManager->mDecalInstanceVec[id]->mTextureRectIdx;
+}
+
 DefineEngineMethod( GuiDecalEditorCtrl, getSelectionCount, S32, (), , "" )
 {
    if ( object->mSELDecal != NULL )

+ 10 - 2
Templates/BaseGame/game/tools/decalEditor/decalEditorActions.tscript

@@ -71,7 +71,11 @@ function ActionEditNodeDetails::doit(%this)
    %count = getWordCount(%this.newTransformData);
    if(%this.instanceId !$= "" && %count == 7)
    {
-      DecalEditorGui.editDecalDetails( %this.instanceId, %this.newTransformData );
+      %pos = getwords(%this.newTransformData,0,2);
+      %tan = getwords(%this.newTransformData,3,5);
+      %size = getword(%this.newTransformData,6);
+      %uvID = DecalEditorGui.getDecalFrame(%this.instanceId);
+      DecalEditorGui.editDecalDetails( %this.instanceId, %pos, %tan, %size, %uvID  );
       DecalEditorGui.syncNodeDetails();
       DecalEditorGui.selectDecal( %this.instanceId );
       return true;
@@ -84,7 +88,11 @@ function ActionEditNodeDetails::undo(%this)
    %count = getWordCount(%this.oldTransformData);
    if(%this.instanceId !$= "" && %count == 7)
    {
-      DecalEditorGui.editDecalDetails( %this.instanceId, %this.oldTransformData );
+      %pos = getwords(%this.oldTransformData,0,2);
+      %tan = getwords(%this.oldTransformData,3,5);
+      %size = getword(%this.oldTransformData,6);
+      %uvID = DecalEditorGui.getDecalFrame(%this.instanceId);
+      DecalEditorGui.editDecalDetails( %this.instanceId, %pos, %tan, %size, %uvID );
       DecalEditorGui.syncNodeDetails();
       DecalEditorGui.selectDecal( %this.instanceId );
    }

+ 3 - 2
Templates/BaseGame/game/tools/decalEditor/decalEditorGui.tscript

@@ -341,7 +341,8 @@ function DecalEditorGui::prepGizmoTransform( %this, %decalId, %nodeDetails )
 // Activated in onMouseUp while gizmo is dirty
 function DecalEditorGui::completeGizmoTransform( %this, %decalId, %nodeDetails )
 {
-   DecalEditorGui.doEditNodeDetails( %decalId, %nodeDetails, true );
+   if( getWordCount(%nodeDetails) == 7 )
+      DecalEditorGui.doEditNodeDetails( %decalId, %nodeDetails, true );
 }
 
 function DecalEditorGui::onSleep( %this )
@@ -628,8 +629,8 @@ function DecalEditorGui::updateInstancePreview( %this, %material )
       if(AssetDatabase.isDeclaredAsset(%material))
       {
          %previewImage = %material;
-         }
       }
+   }
       
    DecalPreviewWindow-->instancePreview.setBitmap( getAssetPreviewImage(%previewImage) ); 
 }