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
This commit is contained in:
AzaezelX 2025-09-19 09:09:55 -05:00
parent 12db0500e8
commit 82435693dd
4 changed files with 30 additions and 12 deletions

View file

@ -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 )
{

View file

@ -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 )

View file

@ -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 );
}

View file

@ -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) );
}