From ded99cd8cbd91e3569bb0740143c5e3bf11f848c Mon Sep 17 00:00:00 2001 From: Areloch Date: Fri, 26 Aug 2022 15:25:17 -0500 Subject: [PATCH] * Fixes handling for Image, Material and Shape Assets' inspector fields so they properly work with non-object targeted inspectors, such as the PostFXEditor * Updated PostFXEditor scripts to handle refreshing properly when certainl field types(assetId fields) are changed * Adjusted display handling of slider values on guiGameSettingsCtrl to show 0.x decimal format instead of 0.xxxxx * Fixed pad length of item names in guiTreeView for items that are marked to avoid console spam * Fixed local offseting for popupMenus so scaled/offset window position doesn't cause the popup menu to offset from mouse click position(courtesy OTHG_Mars) * Fix issue with terrain where, due to default value save validation, the global scope for the terrain collision list would be whiped when saving, causing players to fall through terrain. Moved to per-terrain convexLists * Fixed issue with the core camera model mesh and updated references so camera bookmarks display properly * Fixed console spam during asset browser initialization where it would try and expand the directory tree even though the dir tree isn't populated yet * Fixed handling of Open File Location RMB menu action to properly deal with script and datablock types * Removed unusuable "Create ___" asset type prompts from the RMB menus for the AB to avoid confusion * Improved slider offset positioning for various popup sliders on editor toolbars * Anchored the visibility popup menu to the button for more consistent formatting and better feel * Shifted various visibility toggles from 'in place' on the menu buttons to functions, allowing it to also properly mark the menu entries as checked or not, improving usability --- Engine/source/T3D/assets/ImageAsset.cpp | 50 ++++++++++------- Engine/source/T3D/assets/MaterialAsset.cpp | 19 +++++-- Engine/source/T3D/assets/ShapeAsset.cpp | 18 ++++-- .../gui/controls/guiGameSettingsCtrl.cpp | 2 +- .../source/gui/controls/guiTreeViewCtrl.cpp | 2 +- Engine/source/gui/editor/popupMenu.cpp | 2 +- Engine/source/terrain/terrCollision.cpp | 11 ++-- Engine/source/terrain/terrData.cpp | 5 +- Engine/source/terrain/terrData.h | 8 ++- .../datablocks/defaultDatablocks.tscript | 2 +- .../gameObjects/shapes/CameraMat.asset.taml | 1 + .../game/core/gameObjects/shapes/camera.dts | Bin 15241 -> 0 bytes .../game/core/gameObjects/shapes/camera.fbx | Bin 0 -> 19100 bytes .../shapes/camera_shape.asset.taml | 5 ++ .../gameObjects/shapes/camera_shape.tscript | 11 ++++ .../assetBrowser/scripts/assetBrowser.tscript | 40 +++++++++++--- .../assetBrowser/scripts/editAsset.tscript | 35 ++++++++++-- .../assetBrowser/scripts/popupMenus.tscript | 22 +------- .../forestEditor/forestEditToolbar.ed.gui | 12 ++-- .../game/tools/gui/postFxEditor.tscript | 7 +++ .../meshRoadEditor/meshRoadEditorToolbar.gui | 8 +-- .../tools/riverEditor/RiverEditorToolbar.gui | 8 +-- .../tools/roadEditor/RoadEditorToolbar.gui | 4 +- .../worldEditor/gui/TerrainEditToolbar.ed.gui | 16 +++--- .../gui/TerrainPainterToolbar.ed.gui | 24 ++++---- .../worldEditor/gui/WorldEditorToolbar.ed.gui | 4 +- .../worldEditor/scripts/EditorGui.ed.tscript | 6 +- .../scripts/visibility/miscViz.tscript | 52 ++++++++++++++++++ .../visibility/visibilityLayer.ed.tscript | 29 ++++++---- 29 files changed, 276 insertions(+), 127 deletions(-) delete mode 100644 Templates/BaseGame/game/core/gameObjects/shapes/camera.dts create mode 100644 Templates/BaseGame/game/core/gameObjects/shapes/camera.fbx create mode 100644 Templates/BaseGame/game/core/gameObjects/shapes/camera_shape.asset.taml create mode 100644 Templates/BaseGame/game/core/gameObjects/shapes/camera_shape.tscript diff --git a/Engine/source/T3D/assets/ImageAsset.cpp b/Engine/source/T3D/assets/ImageAsset.cpp index cb5db078c..a2227691e 100644 --- a/Engine/source/T3D/assets/ImageAsset.cpp +++ b/Engine/source/T3D/assets/ImageAsset.cpp @@ -470,9 +470,6 @@ void GuiInspectorTypeImageAssetPtr::consoleInit() GuiControl* GuiInspectorTypeImageAssetPtr::constructEditControl() { - if (mInspector->getInspectObject() == nullptr) - return nullptr; - // Create base filename edit controls GuiControl* retCtrl = Parent::constructEditControl(); if (retCtrl == NULL) @@ -480,16 +477,28 @@ GuiControl* GuiInspectorTypeImageAssetPtr::constructEditControl() retCtrl->getRenderTooltipDelegate().bind(this, &GuiInspectorTypeImageAssetPtr::renderTooltip); - // Change filespec - char szBuffer[512]; - dSprintf(szBuffer, sizeof(szBuffer), "AssetBrowser.showDialog(\"ImageAsset\", \"AssetBrowser.changeAsset\", %s, %s);", - mInspector->getIdString(), mCaption); - mBrowseButton->setField("Command", szBuffer); + if (mInspector->getInspectObject() != nullptr) + { + // Change filespec + char szBuffer[512]; + dSprintf(szBuffer, sizeof(szBuffer), "AssetBrowser.showDialog(\"ImageAsset\", \"AssetBrowser.changeAsset\", %s, %s);", + mInspector->getIdString(), mCaption); + mBrowseButton->setField("Command", szBuffer); - setDataField(StringTable->insert("targetObject"), NULL, mInspector->getInspectObject()->getIdString()); + setDataField(StringTable->insert("targetObject"), NULL, mInspector->getInspectObject()->getIdString()); + } + else + { + //if we don't have a target object, we'll be manipulating the desination value directly + char szBuffer[512]; + dSprintf(szBuffer, sizeof(szBuffer), "AssetBrowser.showDialog(\"ImageAsset\", \"AssetBrowser.changeAsset\", %s, %s);", + mInspector->getIdString(), mVariableName); + mBrowseButton->setField("Command", szBuffer); + } - // Create "Open in ShapeEditor" button - mImageEdButton = new GuiBitmapButtonCtrl(); + mImageEdButton = NULL; + // Create "Open in ImageEditor" button + /*mImageEdButton = new GuiBitmapButtonCtrl(); char bitmapName[512] = "ToolsModule:GameTSCtrl_image"; mImageEdButton->setBitmap(StringTable->insert(bitmapName)); @@ -498,10 +507,10 @@ GuiControl* GuiInspectorTypeImageAssetPtr::constructEditControl() mImageEdButton->setDataField(StringTable->insert("Profile"), NULL, "GuiButtonProfile"); mImageEdButton->setDataField(StringTable->insert("tooltipprofile"), NULL, "GuiToolTipProfile"); mImageEdButton->setDataField(StringTable->insert("hovertime"), NULL, "1000"); - mImageEdButton->setDataField(StringTable->insert("tooltip"), NULL, "Open this file in the Shape Editor"); + mImageEdButton->setDataField(StringTable->insert("tooltip"), NULL, "Open this file in the Image Editor"); mImageEdButton->registerObject(); - addObject(mImageEdButton); + addObject(mImageEdButton);*/ return retCtrl; } @@ -517,18 +526,21 @@ bool GuiInspectorTypeImageAssetPtr::updateRects() mEditCtrlRect.set(fieldExtent.x - dividerPos + dividerMargin, 1, dividerPos - dividerMargin - 34, fieldExtent.y); bool resized = mEdit->resize(mEditCtrlRect.point, mEditCtrlRect.extent); - if (mBrowseButton != NULL) - { - mBrowseRect.set(fieldExtent.x - 32, 2, 14, fieldExtent.y - 4); - resized |= mBrowseButton->resize(mBrowseRect.point, mBrowseRect.extent); - } - if (mImageEdButton != NULL) { RectI shapeEdRect(fieldExtent.x - 16, 2, 14, fieldExtent.y - 4); resized |= mImageEdButton->resize(shapeEdRect.point, shapeEdRect.extent); } + if (mBrowseButton != NULL) + { + if(mImageEdButton != NULL) + mBrowseRect.set(fieldExtent.x - 32, 2, 14, fieldExtent.y - 4); + else + mBrowseRect.set(fieldExtent.x - 16, 2, 14, fieldExtent.y - 4); + resized |= mBrowseButton->resize(mBrowseRect.point, mBrowseRect.extent); + } + return resized; } diff --git a/Engine/source/T3D/assets/MaterialAsset.cpp b/Engine/source/T3D/assets/MaterialAsset.cpp index 4e9198e8f..d68381e41 100644 --- a/Engine/source/T3D/assets/MaterialAsset.cpp +++ b/Engine/source/T3D/assets/MaterialAsset.cpp @@ -479,11 +479,22 @@ GuiControl* GuiInspectorTypeMaterialAssetPtr::constructEditControl() // Change filespec char szBuffer[512]; - dSprintf(szBuffer, sizeof(szBuffer), "AssetBrowser.showDialog(\"MaterialAsset\", \"AssetBrowser.changeAsset\", %s, %s);", - mInspector->getIdString(), mCaption); - mBrowseButton->setField("Command", szBuffer); - setDataField(StringTable->insert("targetObject"), NULL, mInspector->getInspectObject()->getIdString()); + if (mInspector->getInspectObject() != nullptr) + { + dSprintf(szBuffer, sizeof(szBuffer), "AssetBrowser.showDialog(\"MaterialAsset\", \"AssetBrowser.changeAsset\", %s, %s);", + mInspector->getIdString(), mCaption); + mBrowseButton->setField("Command", szBuffer); + + setDataField(StringTable->insert("targetObject"), NULL, mInspector->getInspectObject()->getIdString()); + } + else + { + //if we don't have a target object, we'll be manipulating the desination value directly + dSprintf(szBuffer, sizeof(szBuffer), "AssetBrowser.showDialog(\"MaterialAsset\", \"AssetBrowser.changeAsset\", %s, %s);", + mInspector->getIdString(), mVariableName); + mBrowseButton->setField("Command", szBuffer); + } // Create "Open in Editor" button mEditButton = new GuiBitmapButtonCtrl(); diff --git a/Engine/source/T3D/assets/ShapeAsset.cpp b/Engine/source/T3D/assets/ShapeAsset.cpp index 17145079c..e00cc73d0 100644 --- a/Engine/source/T3D/assets/ShapeAsset.cpp +++ b/Engine/source/T3D/assets/ShapeAsset.cpp @@ -749,11 +749,21 @@ GuiControl* GuiInspectorTypeShapeAssetPtr::constructEditControl() // Change filespec char szBuffer[512]; - dSprintf(szBuffer, sizeof(szBuffer), "AssetBrowser.showDialog(\"ShapeAsset\", \"AssetBrowser.changeAsset\", %s, %s);", - mInspector->getIdString(), mCaption); - mBrowseButton->setField("Command", szBuffer); + if (mInspector->getInspectObject() != nullptr) + { + dSprintf(szBuffer, sizeof(szBuffer), "AssetBrowser.showDialog(\"ShapeAsset\", \"AssetBrowser.changeAsset\", %s, %s);", + mInspector->getIdString(), mCaption); + mBrowseButton->setField("Command", szBuffer); - setDataField(StringTable->insert("targetObject"), NULL, mInspector->getInspectObject()->getIdString()); + setDataField(StringTable->insert("targetObject"), NULL, mInspector->getInspectObject()->getIdString()); + } + else + { + //if we don't have a target object, we'll be manipulating the desination value directly + dSprintf(szBuffer, sizeof(szBuffer), "AssetBrowser.showDialog(\"ShapeAsset\", \"AssetBrowser.changeAsset\", %s, %s);", + mInspector->getIdString(), mVariableName); + mBrowseButton->setField("Command", szBuffer); + } // Create "Open in ShapeEditor" button mShapeEdButton = new GuiBitmapButtonCtrl(); diff --git a/Engine/source/gui/controls/guiGameSettingsCtrl.cpp b/Engine/source/gui/controls/guiGameSettingsCtrl.cpp index 8de1f173a..3a1822e0a 100644 --- a/Engine/source/gui/controls/guiGameSettingsCtrl.cpp +++ b/Engine/source/gui/controls/guiGameSettingsCtrl.cpp @@ -393,7 +393,7 @@ void GuiGameSettingsCtrl::onRenderSliderOption(Point2I currentOffset) GFont* font = mProfile->mFont; char stringVal[32]; - dSprintf(stringVal, 32, "%f", mValue); + dSprintf(stringVal, 32, "%.1f", mValue); S32 stringWidth = font->getStrWidth(stringVal); Point2I textOffset(sliderRect.point.x + sliderRect.extent.x, 0); diff --git a/Engine/source/gui/controls/guiTreeViewCtrl.cpp b/Engine/source/gui/controls/guiTreeViewCtrl.cpp index ae5517a5e..60db14f65 100644 --- a/Engine/source/gui/controls/guiTreeViewCtrl.cpp +++ b/Engine/source/gui/controls/guiTreeViewCtrl.cpp @@ -1982,7 +1982,7 @@ bool GuiTreeViewCtrl::_hitTest(const Point2I & pnt, Item* & item, BitSet32 & fla min += mProfile->mTextOffset.x; FrameAllocatorMarker txtAlloc; - U32 bufLen = item->getDisplayTextLength() + 1; + U32 bufLen = item->getDisplayTextLength() + 2; char *buf = (char*)txtAlloc.alloc(bufLen); item->getDisplayText(bufLen, buf); diff --git a/Engine/source/gui/editor/popupMenu.cpp b/Engine/source/gui/editor/popupMenu.cpp index 6e7cb39ee..be160d08f 100644 --- a/Engine/source/gui/editor/popupMenu.cpp +++ b/Engine/source/gui/editor/popupMenu.cpp @@ -428,7 +428,7 @@ void PopupMenu::showPopup(GuiCanvas *owner, S32 x /* = -1 */, S32 y /* = -1 */) Point2I pos = Point2I::Zero; if (x == -1 && y == -1) - pos = owner->getCursorPos(); + pos = owner->getCursorPosLocal(); else pos = Point2I(x, y); diff --git a/Engine/source/terrain/terrCollision.cpp b/Engine/source/terrain/terrCollision.cpp index 0d2cb905f..ed1461920 100644 --- a/Engine/source/terrain/terrCollision.cpp +++ b/Engine/source/terrain/terrCollision.cpp @@ -34,9 +34,6 @@ static const U32 MaxExtent = 256; //---------------------------------------------------------------------------- - -Convex sTerrainConvexList; - // Number of vertices followed by point index S32 sVertexList[5][5] = { { 3, 1,2,3 }, // 135 B @@ -350,7 +347,7 @@ void TerrainBlock::buildConvex(const Box3F& box,Convex* convex) { PROFILE_SCOPE( TerrainBlock_buildConvex ); - sTerrainConvexList.collectGarbage(); + mTerrainConvexList.collectGarbage(); // First check to see if the query misses the // terrain elevation range. @@ -415,7 +412,7 @@ void TerrainBlock::buildConvex(const Box3F& box,Convex* convex) // Create a new convex. TerrainConvex* cp = new TerrainConvex; - sTerrainConvexList.registerObject(cp); + mTerrainConvexList.registerObject(cp); convex->addToWorkingList(cp); cp->halfA = true; cp->square = 0; @@ -448,7 +445,7 @@ void TerrainBlock::buildConvex(const Box3F& box,Convex* convex) cp->normal[1].normalize(); if (mDot(vp[3] - vp[1],cp->normal[0]) > 0) { TerrainConvex* nc = new TerrainConvex(*cp); - sTerrainConvexList.registerObject(nc); + mTerrainConvexList.registerObject(nc); convex->addToWorkingList(nc); nc->halfA = false; nc->square = cp; @@ -463,7 +460,7 @@ void TerrainBlock::buildConvex(const Box3F& box,Convex* convex) cp->normal[1].normalize(); if (mDot(vp[2] - vp[0],cp->normal[0]) > 0) { TerrainConvex* nc = new TerrainConvex(*cp); - sTerrainConvexList.registerObject(nc); + mTerrainConvexList.registerObject(nc); convex->addToWorkingList(nc); nc->halfA = false; nc->square = cp; diff --git a/Engine/source/terrain/terrData.cpp b/Engine/source/terrain/terrData.cpp index 29523e609..ccb53b8e2 100644 --- a/Engine/source/terrain/terrData.cpp +++ b/Engine/source/terrain/terrData.cpp @@ -220,13 +220,10 @@ TerrainBlock::TerrainBlock() mTerrainAssetId = StringTable->EmptyString(); } - -extern Convex sTerrainConvexList; - TerrainBlock::~TerrainBlock() { // Kill collision - sTerrainConvexList.nukeList(); + mTerrainConvexList.nukeList(); SAFE_DELETE(mLightMap); mLightMapTex = NULL; diff --git a/Engine/source/terrain/terrData.h b/Engine/source/terrain/terrData.h index 07a023371..de6f90488 100644 --- a/Engine/source/terrain/terrData.h +++ b/Engine/source/terrain/terrData.h @@ -55,7 +55,10 @@ #endif #ifndef TERRAINASSET_H #include "T3D/assets/TerrainAsset.h" -#endif +#endif +#ifndef _CONVEX_H_ +#include "collision/convex.h" +#endif class GBitmap; class TerrainBlock; @@ -217,6 +220,9 @@ protected: /// True if the zoning needs to be recalculated for the terrain. bool mZoningDirty; + /// Holds the generated convex list stuff for this terrain + Convex mTerrainConvexList; + String _getBaseTexCacheFileName() const; void _rebuildQuadtree(); diff --git a/Templates/BaseGame/game/core/gameObjects/datablocks/defaultDatablocks.tscript b/Templates/BaseGame/game/core/gameObjects/datablocks/defaultDatablocks.tscript index 008b5e352..1035f2d9a 100644 --- a/Templates/BaseGame/game/core/gameObjects/datablocks/defaultDatablocks.tscript +++ b/Templates/BaseGame/game/core/gameObjects/datablocks/defaultDatablocks.tscript @@ -139,7 +139,7 @@ datablock MissionMarkerData(SpawnSphereMarker) datablock MissionMarkerData(CameraBookmarkMarker) { category = "Misc"; - shapeAsset = "Core_GameObjects:Camera"; + shapeAsset = "Core_GameObjects:camera_shape"; }; datablock CameraData(Observer) diff --git a/Templates/BaseGame/game/core/gameObjects/shapes/CameraMat.asset.taml b/Templates/BaseGame/game/core/gameObjects/shapes/CameraMat.asset.taml index 60c126d02..3b5e068fe 100644 --- a/Templates/BaseGame/game/core/gameObjects/shapes/CameraMat.asset.taml +++ b/Templates/BaseGame/game/core/gameObjects/shapes/CameraMat.asset.taml @@ -5,6 +5,7 @@ materialDefinitionName="CameraMat" VersionId="1"> nsp-ic z{(d=+r!N=*ih4YrD8ME$)I0yD9%oL9fg;L!`m=nC_?nc;*}A8D;FxpDd-BOI{GSf3 zmb=xsfB^i@mhoeekknQEQ2sWEC@G_8xbW7D#wxi7A*IMA&GI(pBS z=|NY%wEgCsGQmNC72YF(k{BxmN*j;Q5o;MF(V#3~UDXmj9$%2mSE4(`OJG`g{N(=R z3^rHz%Afwu{=jFmR$C8d9rU*Uc#D-){u+B_mzg<<^OkPvHm01-iHk6yT;;pHalZ{T z-m!ZY`X#4cd%f3U4XrcJ`o3hK#M7%Sw?}k(X0G&Fk1Rabqy5ak+V!e;mHxy(gp9mxyQWo`5@*B;5WF1g;9%#~{u0++-dX?XVJ*zLiO%&%PQUg@u65?}x^u30bnf#}CIN9%h1vSyx%yyr8YuzazVH2Qh-J|@pH zYfA3+h+pf>pUld(_BGyS>WGJRBzJqnuXX199DDDB?@S%>u#V(zkNCCD{PTSqt^JQj zo99A2tRuPGBYv$jKUDTHt8(2srjB@6M{>7E{90%3e_@z)^5qy)M?9<}x!WUttuxp6 zl6Y80a<@nP)b(qj?*V;p=yTS7?a^nb{o13?NBgx$?_K+~NAFAfwMXw!`^Cfak^7ms z?2EbfXkGT@_Gn%9<@RV@_T~0yUH0YnXkGT@_Gn$sL3`>hOZ0E5{c6Bk^|Qr44>G@Q zx5uWwYVu&C>s))7(?h@3;rHsA+9SF4Fjv=#%;i1FI{b5*+arGMVa`8~iJx=h?|3UR zm$}>Tt}mW~>c}1sEC`%aQ`W}0+QXddq+jdsn===`_DHTh%&F6_b-s>j{pWbZuRYAw zzRX;{?oyw*+wZO~9;s7f-~sb{2JZp>p26Qam`fdZu03)l^vLVNTwAg0c=+r~9et0nrg-F>M$=g(Z;XJoF_ z39l#Ok-1!hc*5(6Tuauh_a*m|T&vqRll?1?Z3+zVZMN>8I^8R|==0Y6Vd-3ZB&SE7 zcfK#lbH`lfvcAr>N9xd{b;-GY?a_Hb9+ZeinmU)cdcUm0 zzi+BFZlbgDlV(o4gZ)foKQ%og(x?8?(ga8A>{I_CEhC}_UT~b$M=Ckh8;y4+-us)) ze&*4cw)DrpJ=4j$b!9}CanZ|Fyvg{b&&c_rM=!nHiQCcCW=t$S%*yXq)bu54o#QV@ z54JsRlI^TMZR{h%lWq3Lrh)8Yn7^-s@yk3J7oD+L z(N@m(IvGyeXKd%Gm8s5aYs)&np6KTk8(7=i?=mj>w=?3Mdv|wndbEvo8oc8~{Ix1w z?QD6guOs8)pHjD*vwH9-N5(~$>&dw2cfYmH{&HGfXXb(j?fs`KJD0zGg?&$xt0Mg> z!)~z~J@l9U`teMAX3zf4nUrVk(%t(;{L&xvbgq4{SC@z`{Sy8+?IRmoMRe)Q_2s&$ z>;AC&E`Qo)tnkWgd-Z*9n)8>ab&gA)aq_2@@yk3J7oG8J!`IAn!vljdds-z6<(?A zr2Sack#W)Ap4PxQv7@0QGm6g0{@k^L98ZtLgpI4O zGm-s=AN$(qjG{C0eeg(DlJPOR$5}_~^iS;bxVg?}9T%C%KKCP0bVlmZAKYz1WS;1Z zqBFAJH>$N+SGDNQCbI9TxiCSZ=!{%ne$}qV$4H+Z=X$kH|Lq-0*z4ceWi#^gW>3{b zd)%=@wnVLO?RduMwdR*LKK5mNcCTkF&Szx39v!xN>655+&eMHfk3Q-#@x7eQC#IR0 zcIK4TJJ)iasd1|jH0_iS^HPwS=H^f7e~KR?vWXP@KJXXJdXvrnBq(HnKCXFhM! zMmBW1ja+E6pBdfGF0((u=#1=FpV`5TOJ97VOBB6dN(;wZ?~X`4sW1BQ*)7fc(VdeU zIU@#CxBsY8&Gf1BeTaQVj&DA@G}0HJ=n_R=+r7Ty8*s$<`93N2MZb1=F~|SFvo_sxqoC_qUfwc|06Av?UY&rY{pDqZM*p5{`S`| zcD0Y3`p`O(A7kQOi-+3tI{j*SYF}#~AKpCT=REPBI2vzN4>YtH>2Li}nl)}jJDcx& z6?W9KvzAP-7`>bC^KOnQZ}bg6?6zcF^n+X9wetL-I;l@&I+dj4bjKwJR zB#O@Kv3{JtxlJEqk9i~P^&c0tsY}%QTC9`x>0>>voAub2D7x&2zx#!oFBE;jypvlu zJ@;_YgzP^vg3r#od(-$AS9BhDHsc(<+0MP2j#d1m^GcUT>oI40<*Z7N%Q=a;x(@z5 zKJst(;asjw{h!K1+X-Du*VKAA|7Wh5p7vl)gWbu_;WfwY^t7ru@9s->QXjprJka6J zbz}3Aol;AV+sv^rtl69s;zj425~hcH7Rh~K9g*$4 z_py*1dG;dDt=4t!LkGySdQQ$ECp2E5jv==5JRv!x8^izb_`O#ccL8;@N9VY7for%B&;OeHce;bYa69k0_F({=r)&TJi$~V!UQa=~@mzLt zoB7-tGe5;CWX|W)6RvZ~`L?_X=C#QAbeH`P<+IlOXEIIkV0s=Y8H!G0%Cg$y;+JZ&rvLb!@3~DLGzp-bZNXKOf#-j@iwBNj9&i z&b9x`V(p!u0SllR&{^7~`m zbI;MmvwHgQ;B)(aF|RlC1)tb-bDi*YJz7T{CtTm7JzCef_T+DUFwnM7=(FO+=yI&z$w;to0vc1armK>*dwDo~u1N*Pi$i zbrL@LDI<90qYrqsuGgbI!_;~@ZLDW~{7yzNVQM4)wygTz2e7tXKa~kgQ2R$%#abM5)|#4LZadozOLYm5(QU9U%baC@5jEPU@W z54ZDlUueMS+Vcs+nJ)PY}KCtqRm(F0cJp3a|Qp8q>9 zAwQ0}Z#>)~`0Us=W<7<;c_u^Ni_M*Tf9UtY>KBqjsK2~ zR-aLShlJl3DF*mm4u0o@-w)w;M)*Ase)ogl0pWKx_;SvKJK$}w2kZv#g7?5auovWk{os9Y5PSd*fRDjP;6v~!_yimRN5En58TbMm z1)qa2!Eta5d;`7)UxDwy3GgjA34Q?IgHzx~kPrR?eggjnXTZS=aO+ic00>ptUL2J+ov;%EH8_)s7gZ7{^ z=ma_fe(BB&5$gnpb|w-6h1$S z;xnT-J|`|S3ht(iP!fv#SrVTdrST~ejZcnp__U~i3TA#(k)p+lm$SADnWlxD`lq@`IIU+|AJaCQ7OJ+`w6dn@ z>*{LA&o2n2t!Yo0_PJ?8O`B<2Pt!)3Ho~-&l%%AT{QUfsyu8fJy!gEM_##E7Oeqpu zBsMm?Np_Q%?3kGB4I9RAVfZm7Zp;Rz8_@8BX`EhFX1p&y-xt%wHzn4Wl<$j;^~J~g zVq$#87MqkNR7{?J+ikNvW2a7#SzHsSjq{9aN%VjVYW;@G4sBew*kIDeiR!cc=-hQLqpl!+KoTxm>i2GH3sy-B7}gxiInu{6biMk2CH$zCJ^gXra* z3nkpPh5BHj$#R~8(e@-F&9nk~(an=P#)3*=Y%v`NSyKRliy~-9WSY)^%mqA|qt{S< zXr^M2tILx+)`Cp&VUSGcLjDHcd;-apN^vtC3;7J5{0SChPfs$PQz#9E15yT7Qwef~ z*d3+P2n*q5wI_)J@|ImlXAoUHNo)<7;upy($*L_`x(xaTX*75n;LUs~x~oFvf<=@FWos@iCrkA%c&~R+1}&T@c4pFjn7(u>~Z8 z2r_x{$C;6sepH$pon2DGTVhS}B_kVTm;B%<5i+29d66ibMi5|M3gj{MiIy~~H;Kj| zljs^M?$A-xdri0mED00fW=M7QK`85Ko&-c@Mqtp$6b}Lt3Ce>Tj$KjNoeJWoEpd18 zzlFi9gff5;K~-q3zk~D@kVXUfJPs1l7M@1-fRXFTRvmQFo9aVxHb-^4i zXnPjixDwqz6kcd!vL|VX?jv*Jv63`Ef?ng~;R1P% zhnqQ(&L9wdNp5_UI}4l*Prs0q`bhqxcKtDEOAa?P`9TlSzai9{g`w+n&|ya4$2faF z8BV`)U|&cM>o{=J2f%Ul`I`!+V%RzyY~;cFY=>t6t%EV)OF|mw!z|E^G^Ik5$Sor~ z9g84M-K;0W^TGs$ntStJWTZX4rEqm|cT)>i4~cK$fLRiW9+|3=iYolbs$vEUW~;Ic zoCX5_?HT9JM4-l!2xpEVkQfYbg7hsIHqu4kjPVV8)@2@=0Uq`~P@vk2-~yvZljnMG zeSb2Y?NG_!t)Y)NQwoFRLE=mUrr^?XEf^W<1ds{$laW0r{7KpUhJl4zROFDNVP;H& zpkU}m5#=_FQiVf_Ce41zA=_m^y8LUq22_~BhHe+yz?J^mZa?La?INz{f^blORpA0r zp~;79zr#ryu}#9r)j8y7D)@6L5awqzDG7MlAq!IbJhN(~w!VWhdR|xnl zA%ymZSO~nyYYa}F1BZA*GnEC^jYL2*1&QM0)jvy_qWMG&dV)AmgA3yTkr2Fz6bPMZ z40d14*jWgH{Q!4%c!2IWYYbp1JOcm{Og{kCn=k#X{BMsyL%35IJ&&>teCQ0SmoW`Q zU=5S)@XB7H2S9vM84@a%#&bg`dNH($j2(4-i~)ow3{&))50z11CI#0xZe{bVzvm%N zaqPaZ1LOXuI3D-`j>-`Vki_Q0g~^2g%L7*uo)ftu3#Rr5v23-(01b~a#G#5lTe12S zvKOesb=wfLCsZDoo&y@{6!KW(tf^GSI7ofzOjqH1&O}pIht6p zG(h27!B3%j`f!25ksgP44QEcHRHbY9%R@2-XUKs=$g5XV{b4c5_BFOJ;;A$>L-yd{ zys%9ORcEJPA4Gt21oJZ@(f@Z5%>WVgQyDJkGV=A7G_n`k6|jXhl?&OE%wV!Tj|-KG zEp?y{jy=})V8jX>Vx%(z2w&;4ge^ojsvn&nT?$5rED#z+vx7Csl?3i@I7+BFk`y+N zV?}7p^I8$=DRQNrk`T0Wjhx4M?7--TG$Awwy`UmD4KSf-07k7~z7&OXRz6^VGz!`y zftZHoO=a8TXejx~nIph%*kG42A<+MsN;qDxJj_wMg7%=3-j827!0zzJB382+YKLd;c&Ji0J0wmP|OH` zHjV`769%Nh=^7euXt`ugq6|+xPfrcj2#5rW@lkkeNh9^i21OCSG41ZhPf%^L{=r2G;om|A}B=X}tyz(8GW?17>l^2nv1Q@#ea zYA7ncs-q7@#aDAz`BM#HUByFD@#SzD>T2EUF2kD@MYF-LagdV}A^UJNUJ#JU9s8-p&`6fcInXF( z2IDt`<49{F#e+1W88%^Pj1f()?L%XXXkOKZUF@IxLiGQ4eF+&FV?=#5C>uFG%H>Uf^VoMDbv38IfwNhJ_hXk4_B>Gonrv4+6tc(7)=`eA!=RGZ1D(o$?wM zW<;I3gTZKkim(s|;xV)z<)%;Z@Eq9?Y99t*c=ha(q$oQ$YDGyp;KEH>4k)wwy9 zx=o+K-ELyXs6X!sUc;!cDHxgSdT&k`IwV~o#xmTH@KD2qEmXh3mQMmuCNr1Q!xfzB zFni$Ekvw2s>q~+SX825i0oyWg-tXh>O@&=y1UJZ@4rw3?ELOPt+4>AP_I5$vLBLlE z{`^l|&=JB33`LH^3)(3)rjbZHIGfl%H4BBftX~Pt@rJNlHW;6XKn|dh+sCF9w1;Hw z>M6@RSq+wlNC`+<`k0p=Y)_wwVXuLDAb1qBBJ94I>X!_tFg)r@4Aq!}isCnf%AKQr ze*Xn?uo-I7JdVz>?IskZ@od}u^g0NlGe&O&WzbVtd-2fAV&Nqb_Kt@tV&kG;>`g)R zFoM(rs~)5WG^z4#(T#(53$$TICVFN7cc>1Uw|I8x8ZlB7rTn_li?j|Ky#ybcJFKQH zw@@h_r9i+<19t1oD~P>LxUZC%3V6?>PE&)E%PhmE@vBVWKFN8+}CgCDXvk%_JU z2eI^5K!gl;HHQfG-^hzhr^7JiY&IkK{-dX1jdd~{PaqP^1dvbS;_;lc@f@!WKy1`? z0(!)cK3td#1{{kG$_{6*`x$rBo97`KV+Ru{>K+C+B5vw_<;D;;G<@ho3Fnuc_rAS& zMNkdu01r19+=#dd0dgc8BaUp4=Vm(?Zz6;l*s}ND!uJ-ZzZMYJELn2kS!nUP&;r`AVoHI{ltCI8Ilq4Z z9Fi%I&mzEqwT~x}HiXaO?9(JOJ}hwPZJ1r9LLzUPobV42=( z7&J(S>KsyJ9(|-n{@zpyij#&KMa%S#0R)l;G7vBW&heGICpy5VQihNRRA;AO4eLF| z)G{asMC51S)D}Y=kwiGi|L(V>X@7ko&dDu3(|~h)jwCydd*Eu`{C+mFQ5-u8aAkkj z;6z8kBu;=^haIP()74PLe$)YzZGSdA#X>Fa)Go@!;C|N|2o>^|a4O6m1&lxegA51Q zZZDt&k%>UAzrfyOFU@SMW@I|u+Pm0ij@T}hgy-p(!_S`)b@+p|Q+8s;<`ok(_V1o5 z_z&rxs@Uo!qrA>Gxn^1!zNW2-65qAld?WEs+4KvxN=615|C9wJ=azq8UQ(^18{Dp$ z%gp^~X4vUQyI6zt8xVAb#k%SeGh#8_>CQ^l z{GNR{N+@MQV5N?uS|LB+kahlxg_;NLR%Azs#$j*wRu`{pYqrnt{Q})jvua z-8{pEX1?*g{^QWvB`vCWO&Rag2Bkd}UDuwZmMj&bM|O2~H%lk!p8KTG zbS*m6of$o~N}YcEY{NfoJ{=bCyQimq2@zN|R)?epQ#`VaRbUxnmQ+us2bF@%hUCv) zu8{XZAu3m4TaJ332Y#B>U&J=s) zP#pH+hsMA|cG{^gIOIB*q{Os5}^?IFo68UapbtPAUvk)b`Uk^D)MMip*l&h$Tb~+n$HU*!0@L})h80F%Km*iBT+r{=h*3IQl&iUW!UYaTv5c;s` zUD>vMMNO^EHgU_3ZHdb_tlnDdcqcV3qNerOss-8gSrSKIR?NOLw@~9B`)Aj)a}J)n z;i+5Ha3JF!9jV*&$R2f%j2z2*F+rCCBLc;{skdip9o<|U7;pEf`*Zry0?pGb`&#?% zzv?B=wq7cjS5P*onGZStayvR z;V?<*wfU54mkQZ4vySgBoHO-;UdI7N)d_McZ+0uHj9I)zuVT))-FlNBjMkq#+R<9_ z{FvpDyT{t?dR^1ln?7Oms9h?ylh=*5G88vZY?>EoxK!VIjq9{3w@B0Jg>kN{G|TSn zTiLwme5BG;s~5}H7OtCFZewXW?P0-7>9#vDTeq%wG)IJBCe+eONZwlqVJx* z`tR*$d~@DBV=j61Qhvv`a^Ve0#xnUy`nno3og?Q^wnu4yESGL)J~9YpJ{cFm%pgRo zKA(}xOgD3EI-_x*<;3{;r(Mp>bU*DH?U(GaOEj=dJjT9kg42&ozu?BB^1)3}x{56) zS@s#@793f4ao?O1E5z2g$(xQgopXGdZ9=H|9lPwYw5KFFrsrRgbJrHET|}xqf8<>4 zrO-Wj)_B2#%fv4pKYI4!LAAf%rfWX9zeeNa520fv_~2u(m4Sqe=4&zbqRPmV9mH{h zR`&Gu4bu&()AzX&30``63P!U(x`IrcI>eO-60IGlL)7aHYd!Sm5)cHV*_(Zmf+qCU z%mF@xgpo~vq8WW3RQ*hd!UjV!4FZ8MjB^oSONhfQ-7N}YW7M_)Wcmx#o!;a*&1goJ zM!JN>f${st&r=s4FHvqJK1qI*l=Aqs2j+b+`(u9;PCsbTuGRSDV|SH0cW!C4UTq|G zD9ridMb(R{p}vbV%?|8u^4<7h#auhZeA$DlYiojw&n{BS7WvfRpHU^))m-<(r$U$2 z(@^_@Qq8QCq`8$D=4VsLuN8oBS4v7uIB&s$&7GPB>EuM{l`e$#xr zyLvmr=WaxAu-MHosg((F1P$A}3n^wL%6W?fBSe{E&FfYy87EqEPs2G!JW*=zbB~ll zq2MbHT@o9p>$TKnF0Q-n&>mhr=2`j-e9XqujFlD-@HUPaHTp3(D?JpK{8bky*3e=p zq|=c8u$mc5t8RVx;pEDbr(Gsjs6|Qk3a^(r^3>=;%Kxe?nWuF3)Z97MSup*r=y4$t zDTVe89^N`atr~%p&I>fhS4}61v}~40#B14%(I9VV-&qy*e2@Ivur#k4%cT5}YC_{< z4a&WC(%h3l&$MiEqGkoiN-%?ZRMlh@Bx;U{M3HJHuecfB{h>kTU_-QHQgp8|J6rOz3p;{SU*gH3CSzec$Z(V8A55XTQb2XaZ z#pbn}*Dk0Dev#ht#GU1p;&&`O;eod3&X`+mZTeR_&(rK*5mluWMDd9-f--^iZ<2w} zo;jE0Dhhxr-<22Y-wK|K@u~8@xKZ(B>ocvZ%=X8EkrSfQ8Y0WXp6gm^^(LPZIo#q< zoLFLFK3fNMUH3X8%7eB;YJb<-~G<1L9hB;=7)bM5jk2U#=ol!GIi!&bhm)C;#_=83kSEV-sEy{}TR zldS3Eupyu>D~zq&y4 ztukTKr8@~9Ug4AOx350f8dMt66NsNyW>Kd2K6)DC%F2!s{cOAnSu;4yiunyFZqqOL zq!s8&eT#Sam~CU%qM582+dP+6=vMP|x5)9Z1p11QR=MZ16;zZJBvhr+&Kp#)eC>iy z+5L~XZ|U}P;Z~+yws};C#FHVP(hU1xg-j$70SuYcnV>k%?cBF1q*e{a23jIxcv}pO0Y^>#P_ai#;u#a&$SIH^y+!UEE=6B`W{~#lG=82`(~{r^>2u)9&byJ_;^-dH!$~2 z@uP_ADT`%d56Q`FZ=d=i{rba+S<@CTZr>xC)@uL4V%ZBT&HRcyYF3Z1LUg)sb5)W; zWxHcmTU@8Hk4&P4anN$&d5Q0v>o%7@U^sldEbf@vCI9qY7cGl;rTN`7q1=F!LxB!j zhs*9eHhg(A!Nf|3S*P@}sh#=s@FSC~u#bBhmJ}ZU{>h;HW5BoL_myA8(!6r6$oEJu zWwcfq1sxx)DRjzjyopsyC#$-#<}*v6`{{`>_hZPb6xt_fIbOeU^h8*AME4<`vDa>I zmHCI(;C*M^#+zB~`FFptgvy`z)~rgflh$HnevK52o3M0_jIf89TRT>b-Gd zB70ZwXDnPbS*d)>VL2s(XA2JWV58WW$^X!9jeWdHHaN*#;musnuv);X8eYj0=jgjn*cL>Pa z_%8X|&b#_)H=W|tuSci2-SE48W70i$p*EAs8uiR1*X^mPRN@V(uA}i8)Mb=*rnZRj zW~T@rmQ4utM%6}|WKCwS_CeOyh|0awblSRBeKyyY`FM&prG{kAs?OJst!3TvS9yQk zNMjlCQ;|f-J=+`PjG)#B&zEYqZ48~ctu^y|!mX&;$|Y%Msg6+(-W_5(Cf|I1h#CDk zp?O~BS0{Y*xbC2t0V#LVZnu1IkSX{h@JWYX0qeDidRW|gueaX82XZwJIL)lC-y|lT z-dlgJqhY;rR;n|7CsVoR#9Hl!8z1+wEKv1+0o$h6|+JM@xVC8ca8W76Geet34o zv+;3Gtb(m&_@>@VMXLDV9og??gEvPt)N6;#Xs(W!9kFtLm)cloop05mI;t|SRp0HW zKS+4w+NqX!LQcBb;v{2~%-5>4!iuko@q)ctx`O^sI*7FsqT}Lkd6X#ztXt8j)N#OO_{Dve^R-%#4OpW_+oqQjs~|IkC|1He$>+%rw{5n zr;-Kz#cgkniGGl)m$%C=H+F%F@{jdW(;6RlWp$)Gy-;gB=zpeJD{pUV)w1qu#fj9! z;N6+GYi^VWjZzlx{hx{Vmxa|@H)XP@`*hb7;v9|Y#H%Og{%?BN(MCC){3hy#In@g) zG@GMKv`H>%Im*(t6%v202(i{ZaB@dU%F*#5+f!W5oxGVIrPo&Teag+7&D*SU%eHyb zXSZ2}*y(;TQ*-FGkI&F(mXAv-YI6Mkza~o=J16~`kB{4=w?3blC7140ry%(GuO0W^ zN_>%NS~{)BVe`s@odGkh%2W&fxEfPX-Cc_pOwF56E&5|d=^p=Q9?iK9_Dy5HUeej; zIM4sURl(@=NSp8D+ho2H4j2yza&*t@-U(wRN2$q||xREq00QbIS_&2E|4 zy1Ms?mT2m%*W&LJvwG)r+gw(@Co7^XzQb83Sg`v`?~Dz3lbYV=6`hfKw72(I-t4Tr z4GljEpPHz2$M1Mz??XO*x2dvwZQ48*qu8n>!LKOhky6zLlQY?qV;h&uI3pCeK5cH^ z@ze*SYF2%DC>`9j{Gm>Toc}Dzl}$IK64pIFr2V?`YKU?5BJ-eGfrQ*zfi!bp5k^K- z+f(%&7yUklxAbJ#bd;}bz_ZHeFX$Ug-ozBJ_K7wL7gby7=B3%?Is}&mUD%L@3la%; zVmGT%NOO=aEGt`aIKG0=dJSsJ09_w%( zVPWURQ=(P*!KK+ZS!)9Gbl;1%9``3W*+;xSapM)SC(FL^k3iRyTQb{IX66ToH$VL9 zfAy{dKB&ohQnhw%;SrBY*H1nVWZO-@9uGe8M6Ty;9LqcYlgYVD(zhJ{P7V|6{oV2D7_kUG=I!g z<1feSBkNDpPo7Mws;@tGr2ZJ?PlE^WBj4kER;{J}g#q=5hVOuoWNAzvSLBxuCf}yk`jK~o)FOPQ{P6Jm@azy?i>6mi8nb?WRIA?-{yCHczq>YfSCBq%lgBo z`kmo+;i1I*JuPd2v9p?Tbre4%&A2D=M8D@=!0YEd?^X!2+DZ%S6bkEd3+qw}>+TeK zv9juY=&T0{L3oGuvIfsUJ2IUNjaIJ_F}@r1-;K0EUB1V3bp!4=gjgw za*We%Q6DjNf_4_p{Is;_^0||5@=q1LnjUL8HCHXA@J^*$XY%H0QC4D!jZ<7vMii+t zd6iVpcE#EgEA};cpR5a#Fm|3b%Xx`($)fIa?Kf8Jsk^dsYsZAJJ4G5_=sKkVd7%w0 zvqQg93c{Pj>q}1F5_J`H%&2th>efG&*?fz7X>Rv{YGRjtvB0y)gZ?m$_b0v8{lUvr z-r$9MjL8mRA~A!4*?-_V^)H@+{&ng*EO#PQ=eJHpd(irxo&?yBorv-9FJlxnj1299 zkLR*WCxdyj6RcN%O-Zmrj4GgxjA3_|-9K+0DfESCZcyg~6mZi-Uh&+~Sn6G@OhjfBt|Ir91 z1YU|0;2dNlO`^^D>4yEv>(kOVD4Ym*+%#a?FU*!#%jPmYJoD)Blb-M0Tq7Y;jK@NY;;f)>JVyn;($*X#y}4HqXkK<3d;Do z&!cz-)c`B_1Blq}28ck`$SVzhEDx2=v;Q*gmxs5%!VUk;0iftnCSGHI0X*ioh50N9;{hK3a9PSbTAn71ahqcc=&K&wUkdJsuF@|6V6X79e z#l;)JVIU4Cy@n%?e|}fBSe;Q!fD^kTlS^2k!sP@hBg8v|>#C?(t{|EX7BZ z?(x|F1OqCC!a38WZ^DKua_s^J1T^mP_&$eg&c)t6Xf^KPX&gARkUp>upzwO(#N3wl>FuM@_Z>ImR)Uolv S*3Yel!L?NrOMN01P53{QaClk( literal 0 HcmV?d00001 diff --git a/Templates/BaseGame/game/core/gameObjects/shapes/camera_shape.asset.taml b/Templates/BaseGame/game/core/gameObjects/shapes/camera_shape.asset.taml new file mode 100644 index 000000000..9cef2545d --- /dev/null +++ b/Templates/BaseGame/game/core/gameObjects/shapes/camera_shape.asset.taml @@ -0,0 +1,5 @@ + diff --git a/Templates/BaseGame/game/core/gameObjects/shapes/camera_shape.tscript b/Templates/BaseGame/game/core/gameObjects/shapes/camera_shape.tscript new file mode 100644 index 000000000..ac4c5ba40 --- /dev/null +++ b/Templates/BaseGame/game/core/gameObjects/shapes/camera_shape.tscript @@ -0,0 +1,11 @@ + +singleton TSShapeConstructor(cameradts2) +{ + baseShapeAsset = "Core_GameObjects:Camera_shape"; + singleDetailSize = "0"; + flipUVCoords = "0"; + JoinIdenticalVerts = "0"; + reverseWindingOrder = "0"; + removeRedundantMats = "0"; + animFPS = "2"; +}; diff --git a/Templates/BaseGame/game/tools/assetBrowser/scripts/assetBrowser.tscript b/Templates/BaseGame/game/tools/assetBrowser/scripts/assetBrowser.tscript index 69e38bf2d..3e9c778ae 100644 --- a/Templates/BaseGame/game/tools/assetBrowser/scripts/assetBrowser.tscript +++ b/Templates/BaseGame/game/tools/assetBrowser/scripts/assetBrowser.tscript @@ -608,8 +608,11 @@ function AssetBrowser::doRefresh(%this) //Forces a clean collapse of the tree for any not-really-exposed items %dataItem = AssetBrowser-->filterTree.findItemByName("data"); - AssetBrowser-->filterTree.expandItem(%dataItem, false); - AssetBrowser-->filterTree.expandItem(%dataItem); + if(%dataItem != 0) + { + AssetBrowser-->filterTree.expandItem(%dataItem, false); + AssetBrowser-->filterTree.expandItem(%dataItem); + } %this.dirty = false; } @@ -985,14 +988,21 @@ function AssetBrowser::changeAsset(%this) %targetObject = %this.fieldTargetObject; %inspectorObject = ""; - if(%this.fieldTargetObject.isInNamespaceHierarchy("GuiInspector")) + if(isObject(%this.fieldTargetObject) && %this.fieldTargetObject.isInNamespaceHierarchy("GuiInspector")) { %inspectorObject = %this.fieldTargetObject; - %targetObject = %inspectorObject.getInspectObject(); - - %inspectorObject.setObjectField(%this.fieldTargetName, %this.selectedAsset); + if(%inspectorObject.getNumInspectObjects() != 0) + { + %targetObject = %inspectorObject.getInspectObject(); + %inspectorObject.setObjectField(%this.fieldTargetName, %this.selectedAsset); + } + else if(startsWith(%this.fieldTargetName, "$")) + { + //we're targeting a variable directly, so deal with that then + %cmd = %this.fieldTargetName @ "=\"" @ %this.selectedAsset @ "\";"; + } } - else + else if(isObject(%this.fieldTargetObject)) { //alright, we've selectd an asset for a field, so time to set it! if(%this.fieldTargetName $= "") @@ -1000,11 +1010,23 @@ function AssetBrowser::changeAsset(%this) else %cmd = %targetObject @ "." @ %this.fieldTargetName @ "=\"" @ %this.selectedAsset @ "\";"; //echo("Changing asset via the " @ %cmd @ " command"); - eval(%cmd); + } + else if(startsWith(%this.fieldTargetName, "$")) + { + //we're targeting a variable directly, so deal with that then + %cmd = %this.fieldTargetName @ "=\"" @ %this.selectedAsset @ "\";"; } + eval(%cmd); + //Force update our object with the field change - %targetObject.inspectPostApply(); + if(isObject(%targetObject)) + { + if(%this.fieldTargetObject.isInNamespaceHierarchy("GuiInspector")) + %this.fieldTargetObject.refresh(); + else + %targetObject.inspectPostApply(); + } //Flag us as dirty for editing purposes EWorldEditor.setSceneAsDirty(); diff --git a/Templates/BaseGame/game/tools/assetBrowser/scripts/editAsset.tscript b/Templates/BaseGame/game/tools/assetBrowser/scripts/editAsset.tscript index c9735fa58..700da0460 100644 --- a/Templates/BaseGame/game/tools/assetBrowser/scripts/editAsset.tscript +++ b/Templates/BaseGame/game/tools/assetBrowser/scripts/editAsset.tscript @@ -499,7 +499,30 @@ function AssetBrowser::openFileLocation(%this) %filePath = ""; if(EditAssetPopup.assetId !$= "") { - %filePath = AssetDatabase.getAssetPath(EditAssetPopup.assetId); + if(AssetDatabase.isDeclaredAsset(EditAssetPopup.assetId)) + { + %filePath = AssetDatabase.getAssetPath(EditAssetPopup.assetId); + } + else + { + //probably a file path + %pathSplit = strpos(EditAssetPopup.assetId, ":"); + if(%pathSplit != -1) + { + %path = getSubStr(EditAssetPopup.assetId, 0, %pathSplit); + %file = getSubStr(EditAssetPopup.assetId, %pathSplit + 1); + + //datablocks pack the originator file in the parent path as-is, so check that + if(fileExt(%path) !$= "") + { + %filePath = %path; + } + else + { + %filePath = %path @ "/" @ %file; + } + } + } } else if(EditLevelAssetPopup.assetId !$= "") { @@ -510,16 +533,20 @@ function AssetBrowser::openFileLocation(%this) %filePath = AssetDatabase.getAssetPath(EditAssetPopup.assetId); } - if(%filePath !$= "") + if(isFile(%filePath) || isDirectory(%filePath)) { + %fullPath = makeFullPath(%filePath); + if(fileExt(%fullPath) $= ".tscript") + %fullPath = filePath(%fullPath); + if($platform $= "windows") { - %cmd = "cd \"" @ makeFullPath(%filePath) @ "\" && start ."; + %cmd = "cd \"" @ %fullPath @ "\" && start ."; systemCommand(%cmd); } else { - %cmd = "open \"" @ makeFullPath(%filePath) @ "\""; + %cmd = "open \"" @ %fullPath @ "\""; systemCommand(%cmd); } } diff --git a/Templates/BaseGame/game/tools/assetBrowser/scripts/popupMenus.tscript b/Templates/BaseGame/game/tools/assetBrowser/scripts/popupMenus.tscript index 04db33fc4..469e742ac 100644 --- a/Templates/BaseGame/game/tools/assetBrowser/scripts/popupMenus.tscript +++ b/Templates/BaseGame/game/tools/assetBrowser/scripts/popupMenus.tscript @@ -137,18 +137,9 @@ function AssetBrowser::buildPopupMenus(%this) item[ 3 ] = "-"; item[ 4 ] = "Create Terrain Data" TAB "" TAB "AssetBrowser.setupCreateNewAsset(\"TerrainAsset\", AssetBrowser.selectedModule);"; item[ 5 ] = "-"; - item[ 6 ] = "Create Shape" TAB "" TAB "AssetBrowser.setupCreateNewAsset(\"Shape\", AssetBrowser.selectedModule);"; - item[ 7 ] = "Create Shape Animation" TAB "" TAB "AssetBrowser.setupCreateNewAsset(\"ShapeAnimationAsset\", AssetBrowser.selectedModule);";//"AssetBrowser.createNewShapeAnimationAsset(\"NewShapeAnimation\", AssetBrowser.selectedModule);"; - item[ 8 ] = "-"; - item[ 9 ] = "Create GUI" TAB "" TAB "AssetBrowser.setupCreateNewAsset(\"GUIAsset\", AssetBrowser.selectedModule);";//"AssetBrowser.createNewGUIAsset(\"NewGUI\", AssetBrowser.selectedModule);"; - item[ 10 ] = "-"; - item[ 11 ] = "Create Post Effect" TAB "" TAB "AssetBrowser.setupCreateNewAsset(\"PostEffectAsset\", AssetBrowser.selectedModule);";//"AssetBrowser.createNewPostEffectAsset(\"NewPostEffect\", AssetBrowser.selectedModule);"; - item[ 12 ] = "-"; - item[ 13 ] = "Create Sound" TAB "" TAB "AssetBrowser.setupCreateNewAsset(\"SoundAsset\", AssetBrowser.selectedModule);";//"AssetBrowser.createNewSoundAsset(\"NewSound\", AssetBrowser.selectedModule);"; - item[ 14 ] = "-"; - item[ 15 ] = "Create Particle Effect" TAB "" TAB "AssetBrowser.setupCreateNewAsset(\"ParticleEffectAsset\", AssetBrowser.selectedModule);";//"AssetBrowser.createNewParticleEffectAsset(\"NewParticleEffect\", AssetBrowser.selectedModule);"; - item[ 16 ] = "-"; - item[ 17 ] = "Create Cubemap" TAB "" TAB "AssetBrowser.setupCreateNewAsset(\"CubemapAsset\", AssetBrowser.selectedModule);"; + item[ 6 ] = "Create GUI" TAB "" TAB "AssetBrowser.setupCreateNewAsset(\"GUIAsset\", AssetBrowser.selectedModule);";//"AssetBrowser.createNewGUIAsset(\"NewGUI\", AssetBrowser.selectedModule);"; + item[ 7 ] = "-"; + item[ 8 ] = "Create Post Effect" TAB "" TAB "AssetBrowser.setupCreateNewAsset(\"PostEffectAsset\", AssetBrowser.selectedModule);";//"AssetBrowser.createNewPostEffectAsset(\"NewPostEffect\", AssetBrowser.selectedModule);"; }; } @@ -232,13 +223,6 @@ function AssetBrowser::buildPopupMenus(%this) }; } - //Some assets are not yet ready/implemented, so disable their creation here - AddNewArtAssetPopup.enableItem(6, false); //shape - AddNewArtAssetPopup.enableItem(7, false); //shape animation - AddNewArtAssetPopup.enableItem(13, false); //sound asset - AddNewArtAssetPopup.enableItem(15, false); //particle effect - AddNewArtAssetPopup.enableItem(17, false); //cubemap - if( !isObject( EditFolderPopup ) ) { new PopupMenu( EditFolderPopup ) diff --git a/Templates/BaseGame/game/tools/forestEditor/forestEditToolbar.ed.gui b/Templates/BaseGame/game/tools/forestEditor/forestEditToolbar.ed.gui index 1f6202b05..ad655d9de 100644 --- a/Templates/BaseGame/game/tools/forestEditor/forestEditToolbar.ed.gui +++ b/Templates/BaseGame/game/tools/forestEditor/forestEditToolbar.ed.gui @@ -362,8 +362,8 @@ new GuiMouseEventCtrl(ForestBrushSizeSliderCtrlContainer,EditorGuiGroup) { Profile = "ToolsGuiSliderBoxProfile"; HorizSizing = "right"; VertSizing = "bottom"; - position = firstWord(ForestBrushSizeTextEditContainer.position) + firstWord(ForestEditToolbar.position)+11 SPC - (getWord(ForestBrushSizeTextEditContainer, 1)) + 25; + position = ForestBrushSizeTextEditContainer.position.x + ForestEditToolbar.position.x + 50 SPC + ForestBrushSizeTextEditContainer.position.y + 50; Extent = "112 20"; MinExtent = "8 2"; canSave = "1"; @@ -392,8 +392,8 @@ new GuiMouseEventCtrl(ForestBrushPressureSliderCtrlContainer,EditorGuiGroup) { Profile = "ToolsGuiSliderBoxProfile"; HorizSizing = "right"; VertSizing = "bottom"; - position = firstWord(ForestBrushPressureTextEditContainer.position) + firstWord(ForestEditToolbar.position) SPC - (getWord(ForestBrushPressureTextEditContainer, 1)) + 25; + position = ForestBrushPressureTextEditContainer.position.x + ForestEditToolbar.position.x + 50 SPC + ForestBrushPressureTextEditContainer.position.y + 50; Extent = "112 20"; MinExtent = "8 2"; canSave = "1"; @@ -422,8 +422,8 @@ new GuiMouseEventCtrl(ForestBrushHardnessSliderCtrlContainer,EditorGuiGroup) { Profile = "ToolsGuiSliderBoxProfile"; HorizSizing = "right"; VertSizing = "bottom"; - position = firstWord(ForestBrushHardnessTextEditContainer.position) + firstWord(ForestEditToolbar.position) SPC - (getWord(TForestBrushHardnessTextEditContainer, 1)) + 25; + position = ForestBrushPressureTextEditContainer.position.x + ForestEditToolbar.position.x + 50 SPC + ForestBrushPressureTextEditContainer.position.y + 50; Extent = "112 20"; MinExtent = "8 2"; canSave = "1"; diff --git a/Templates/BaseGame/game/tools/gui/postFxEditor.tscript b/Templates/BaseGame/game/tools/gui/postFxEditor.tscript index d16e9e12d..4437ef2ba 100644 --- a/Templates/BaseGame/game/tools/gui/postFxEditor.tscript +++ b/Templates/BaseGame/game/tools/gui/postFxEditor.tscript @@ -42,9 +42,14 @@ function PostFXEditor::editDefaultPostFXSettings( %this ) PostFXEditorActionButton.command = "PostFXManager::savePresetHandler($PostFXManager::defaultPreset);"; } +function PostEffectEditorInspector::refresh(%this) +{ + PostFXEditor.refresh(); +} function PostFXEditor::refresh(%this) { + %selectedItem = PostEffectEditorList.getSelectedRow(); PostEffectEditorList.clear(); %count = PostFXManager.Count(); @@ -55,6 +60,8 @@ function PostFXEditor::refresh(%this) if(%postEffect.isEnabled()) PostEffectEditorList.addRow( %i, %postEffect.getName() ); } + + PostEffectEditorList.setSelectedRow(%selectedItem); } function PostFXEditor::apply(%this) diff --git a/Templates/BaseGame/game/tools/meshRoadEditor/meshRoadEditorToolbar.gui b/Templates/BaseGame/game/tools/meshRoadEditor/meshRoadEditorToolbar.gui index 0f0236a7f..cbdb3e527 100644 --- a/Templates/BaseGame/game/tools/meshRoadEditor/meshRoadEditorToolbar.gui +++ b/Templates/BaseGame/game/tools/meshRoadEditor/meshRoadEditorToolbar.gui @@ -302,8 +302,8 @@ new GuiMouseEventCtrl(MeshRoadDefaultWidthSliderCtrlContainer, EditorGuiGroup) { Profile = "ToolsGuiSliderBoxProfile"; HorizSizing = "right"; VertSizing = "bottom"; - position = firstWord(MeshRoadDefaultWidthTextEditContainer.position) + firstWord(MeshRoadEditorToolbar.position) + 10 SPC - (getWord(MeshRoadDefaultWidthTextEditContainer, 1)) + 25; + position = MeshRoadDefaultWidthTextEditContainer.position.x + MeshRoadEditorToolbar.position.x + 50 SPC + MeshRoadDefaultWidthTextEditContainer.position.y + 50; Extent = "112 20"; MinExtent = "8 2"; canSave = "1"; @@ -331,8 +331,8 @@ new GuiMouseEventCtrl(MeshRoadDefaultDepthSliderCtrlContainer, EditorGuiGroup) { Profile = "ToolsGuiSliderBoxProfile"; HorizSizing = "right"; VertSizing = "bottom"; - position = firstWord(MeshRoadDefaultDepthTextEditContainer.position) + firstWord(MeshRoadEditorToolbar.position) + 10 SPC - (getWord(MeshRoadDefaultDepthTextEditContainer, 1)) + 25; + position = MeshRoadDefaultDepthTextEditContainer.position.x + MeshRoadEditorToolbar.position.x + 50 SPC + MeshRoadDefaultDepthTextEditContainer.position.y + 50; Extent = "112 20"; MinExtent = "8 2"; canSave = "1"; diff --git a/Templates/BaseGame/game/tools/riverEditor/RiverEditorToolbar.gui b/Templates/BaseGame/game/tools/riverEditor/RiverEditorToolbar.gui index 42229f4b1..1ed4fb358 100644 --- a/Templates/BaseGame/game/tools/riverEditor/RiverEditorToolbar.gui +++ b/Templates/BaseGame/game/tools/riverEditor/RiverEditorToolbar.gui @@ -280,8 +280,8 @@ new GuiMouseEventCtrl(RiverDefaultWidthSliderCtrlContainer, EditorGuiGroup) { Profile = "ToolsGuiSliderBoxProfile"; HorizSizing = "right"; VertSizing = "bottom"; - position = firstWord(RiverDefaultWidthTextEditContainer.position) + firstWord(RiverEditorToolbar.position) + 10 SPC - (getWord(RiverDefaultWidthTextEditContainer, 1)) + 25; + position = RiverDefaultWidthTextEditContainer.position.x + RiverEditorToolbar.position.x + 50 SPC + RiverDefaultWidthTextEditContainer.position.y + 50; Extent = "112 20"; MinExtent = "8 2"; canSave = "1"; @@ -309,8 +309,8 @@ new GuiMouseEventCtrl(RiverDefaultDepthSliderCtrlContainer, EditorGuiGroup) { Profile = "ToolsGuiSliderBoxProfile"; HorizSizing = "right"; VertSizing = "bottom"; - position = firstWord(RiverDefaultDepthTextEditContainer.position) + firstWord(RiverEditorToolbar.position) + 10 SPC - (getWord(RiverDefaultDepthTextEditContainer, 1)) + 25; + position = RiverDefaultDepthTextEditContainer.position.x + RiverEditorToolbar.position.x + 50 SPC + RiverDefaultDepthTextEditContainer.position.y + 50; Extent = "112 20"; MinExtent = "8 2"; canSave = "1"; diff --git a/Templates/BaseGame/game/tools/roadEditor/RoadEditorToolbar.gui b/Templates/BaseGame/game/tools/roadEditor/RoadEditorToolbar.gui index 672a0d9be..aee198cf3 100644 --- a/Templates/BaseGame/game/tools/roadEditor/RoadEditorToolbar.gui +++ b/Templates/BaseGame/game/tools/roadEditor/RoadEditorToolbar.gui @@ -259,8 +259,8 @@ new GuiMouseEventCtrl(RoadDefaultWidthSliderCtrlContainer, EditorGuiGroup) { Profile = "ToolsGuiSliderBoxProfile"; HorizSizing = "right"; VertSizing = "bottom"; - position = firstWord(RoadDefaultWidthTextEditContainer.position) + firstWord(RoadEditorToolbar.position) + 10 SPC - (getWord(RoadDefaultWidthTextEditContainer, 1)) + 25; + position = RoadDefaultWidthTextEditContainer.position.x + RoadEditorToolbar.position.x + 50 SPC + RoadDefaultWidthTextEditContainer.position.y + 50; Extent = "112 20"; MinExtent = "8 2"; canSave = "1"; diff --git a/Templates/BaseGame/game/tools/worldEditor/gui/TerrainEditToolbar.ed.gui b/Templates/BaseGame/game/tools/worldEditor/gui/TerrainEditToolbar.ed.gui index 63d8c010d..d1c98df34 100644 --- a/Templates/BaseGame/game/tools/worldEditor/gui/TerrainEditToolbar.ed.gui +++ b/Templates/BaseGame/game/tools/worldEditor/gui/TerrainEditToolbar.ed.gui @@ -510,8 +510,8 @@ new GuiMouseEventCtrl(TerrainBrushSizeSliderCtrlContainer,EditorGuiGroup) { Profile = "ToolsGuiSliderBoxProfile"; HorizSizing = "right"; VertSizing = "bottom"; - position = firstWord(TerrainBrushSizeTextEditContainer.position) + firstWord(EWTerrainEditToolbar.position)+11 SPC - (getWord(TerrainBrushSizeTextEditContainer, 1)) + 25; + position = TerrainBrushSizeTextEditContainer.position.x + EWTerrainEditToolbar.position.x + 50 SPC + TerrainBrushSizeTextEditContainer.position.y + 50; Extent = "112 20"; MinExtent = "8 2"; canSave = "1"; @@ -540,8 +540,8 @@ new GuiMouseEventCtrl(TerrainBrushPressureSliderCtrlContainer,EditorGuiGroup) { Profile = "ToolsGuiSliderBoxProfile"; HorizSizing = "right"; VertSizing = "bottom"; - position = firstWord(TerrainBrushPressureTextEditContainer.position) + firstWord(EWTerrainEditToolbar.position) SPC - (getWord(TerrainBrushPressureTextEditContainer, 1)) + 25; + position = TerrainBrushPressureTextEditContainer.position.x + EWTerrainEditToolbar.position.x + 50 SPC + TerrainBrushPressureTextEditContainer.position.y + 50; Extent = "112 20"; MinExtent = "8 2"; canSave = "1"; @@ -570,8 +570,8 @@ new GuiMouseEventCtrl(TerrainBrushSoftnessSliderCtrlContainer,EditorGuiGroup) { Profile = "ToolsGuiSliderBoxProfile"; HorizSizing = "right"; VertSizing = "bottom"; - position = firstWord(TerrainBrushSoftnessTextEditContainer.position) + firstWord(EWTerrainEditToolbar.position) SPC - (getWord(TerrainBrushSoftnessTextEditContainer, 1)) + 25; + position = TerrainBrushSoftnessTextEditContainer.position.x + EWTerrainEditToolbar.position.x + 50 SPC + TerrainBrushSoftnessTextEditContainer.position.y + 50; Extent = "112 20"; MinExtent = "8 2"; canSave = "1"; @@ -600,8 +600,8 @@ new GuiMouseEventCtrl(TerrainSetHeightSliderCtrlContainer,EditorGuiGroup) { Profile = "ToolsGuiSliderBoxProfile"; HorizSizing = "right"; VertSizing = "bottom"; - position = firstWord(TerrainSetHeightTextEditContainer.position) + firstWord(EWTerrainEditToolbar.position) SPC - (getWord(TerrainSetHeightTextEditContainer, 1)) + 25; + position = TerrainSetHeightTextEditContainer.position.x + EWTerrainEditToolbar.position.x SPC + TerrainSetHeightTextEditContainer.position.y + 50; Extent = "112 20"; MinExtent = "8 2"; canSave = "1"; diff --git a/Templates/BaseGame/game/tools/worldEditor/gui/TerrainPainterToolbar.ed.gui b/Templates/BaseGame/game/tools/worldEditor/gui/TerrainPainterToolbar.ed.gui index 596ef9b7e..73b0d6e73 100644 --- a/Templates/BaseGame/game/tools/worldEditor/gui/TerrainPainterToolbar.ed.gui +++ b/Templates/BaseGame/game/tools/worldEditor/gui/TerrainPainterToolbar.ed.gui @@ -222,7 +222,7 @@ $guiContent = new GuiControl(EWTerrainPainterToolbar,EditorGuiGroup) { Profile = "ToolsGuiDefaultProfile"; HorizSizing = "right"; VertSizing = "bottom"; - Position = "222 5"; + Position = "245 5"; Extent = "256 50"; MinExtent = "8 2"; canSave = "1"; @@ -382,7 +382,7 @@ $guiContent = new GuiControl(EWTerrainPainterToolbar,EditorGuiGroup) { Profile = "ToolsGuiTransparentProfile"; HorizSizing = "right"; VertSizing = "bottom"; - position = "480 5"; + position = "490 5"; Extent = "120 50"; MinExtent = "8 2"; canSave = "1"; @@ -524,8 +524,8 @@ new GuiMouseEventCtrl(PaintBrushSizeSliderCtrlContainer,EditorGuiGroup) { Profile = "ToolsGuiSliderBoxProfile"; HorizSizing = "right"; VertSizing = "bottom"; - position = firstWord(PaintBrushSizeTextEditContainer.position) + firstWord(EWTerrainPainterToolbar.position)+11 SPC - (getWord(PaintBrushSizeTextEditContainer, 1)) + 25; + position = PaintBrushSizeTextEditContainer.position.x + EWTerrainPainterToolbar.position.x + 50 SPC + PaintBrushSizeTextEditContainer.position.y + 50; Extent = "112 20"; MinExtent = "8 2"; canSave = "1"; @@ -554,8 +554,8 @@ new GuiMouseEventCtrl(PaintBrushSlopeMinContainer,EditorGuiGroup) { Profile = "ToolsGuiSliderBoxProfile"; HorizSizing = "right"; VertSizing = "bottom"; - position = firstWord(PaintBrushSlopeControl.position) + firstWord(EWTerrainPainterToolbar.position)+firstWord(PaintBrushSlopeControl->SlopeMinAngle.position) - 40 SPC - (getWord(PaintBrushSlopeControl, 1)) + 25; + position = PaintBrushSlopeControl.position.x + EWTerrainPainterToolbar.position.x + PaintBrushSlopeControl->SlopeMinAngle.position.x - 40 SPC + PaintBrushSlopeControl.position.y + 50; Extent = "112 20"; MinExtent = "8 2"; canSave = "1"; @@ -589,8 +589,8 @@ new GuiMouseEventCtrl(PaintBrushSlopeMaxContainer,EditorGuiGroup) { Profile = "ToolsGuiSliderBoxProfile"; HorizSizing = "right"; VertSizing = "bottom"; - position = firstWord(PaintBrushSlopeControl.position) + firstWord(EWTerrainPainterToolbar.position)+firstWord(PaintBrushSlopeControl->SlopeMaxAngle.position) - 40 SPC - (getWord(PaintBrushSlopeControl, 1)) + 25; + position = PaintBrushSlopeControl.position.x + EWTerrainPainterToolbar.position.x + PaintBrushSlopeControl->SlopeMaxAngle.position.x - 40 SPC + PaintBrushSlopeControl.position.y + 50; Extent = "112 20"; MinExtent = "8 2"; canSave = "1"; @@ -629,8 +629,8 @@ new GuiMouseEventCtrl(PaintBrushPressureSliderCtrlContainer,EditorGuiGroup) { Profile = "ToolsGuiSliderBoxProfile"; HorizSizing = "right"; VertSizing = "bottom"; - position = firstWord(PaintBrushPressureTextEditContainer.position) + firstWord(EWTerrainPainterToolbar.position) SPC - (getWord(PaintBrushPressureTextEditContainer, 1)) + 25; + position = PaintBrushPressureTextEditContainer.position.x + EWTerrainPainterToolbar.position.x + 50 SPC + PaintBrushPressureTextEditContainer.position.y + 50; Extent = "112 20"; MinExtent = "8 2"; canSave = "1"; @@ -659,8 +659,8 @@ new GuiMouseEventCtrl(PaintBrushSoftnessSliderCtrlContainer,EditorGuiGroup) { Profile = "ToolsGuiSliderBoxProfile"; HorizSizing = "right"; VertSizing = "bottom"; - position = firstWord(PaintBrushSoftnessTextEditContainer.position) + firstWord(EWTerrainPainterToolbar.position) SPC - (getWord(PaintBrushSoftnessTextEditContainer, 1)) + 25; + position = PaintBrushSoftnessTextEditContainer.position.x + EWTerrainPainterToolbar.position.x + 50 SPC + PaintBrushSoftnessTextEditContainer.position.y + 50; Extent = "112 20"; MinExtent = "8 2"; canSave = "1"; diff --git a/Templates/BaseGame/game/tools/worldEditor/gui/WorldEditorToolbar.ed.gui b/Templates/BaseGame/game/tools/worldEditor/gui/WorldEditorToolbar.ed.gui index df639add2..d56c775c2 100644 --- a/Templates/BaseGame/game/tools/worldEditor/gui/WorldEditorToolbar.ed.gui +++ b/Templates/BaseGame/game/tools/worldEditor/gui/WorldEditorToolbar.ed.gui @@ -684,8 +684,8 @@ new GuiMouseEventCtrl(softSnapSizeSliderCtrlContainer, EditorGuiGroup) { Profile = "ToolsGuiSliderBoxProfile"; HorizSizing = "right"; VertSizing = "bottom"; - position = firstWord(EWorldEditorToolbar-->softSnapSizeTextEdit.getGlobalPosition()) - 12 SPC - (getWord(EWorldEditorToolbar-->softSnapSizeTextEdit.getGlobalPosition(), 1)) + 18; + position = EWorldEditorToolbar.position.x + EWorldEditorToolbar-->softSnapSizeTextEditContainer.position.x + 50 SPC + EWorldEditorToolbar-->softSnapSizeTextEdit.position.y + 50; Extent = "112 20"; MinExtent = "8 2"; canSave = "1"; diff --git a/Templates/BaseGame/game/tools/worldEditor/scripts/EditorGui.ed.tscript b/Templates/BaseGame/game/tools/worldEditor/scripts/EditorGui.ed.tscript index 58686e20e..8093822bc 100644 --- a/Templates/BaseGame/game/tools/worldEditor/scripts/EditorGui.ed.tscript +++ b/Templates/BaseGame/game/tools/worldEditor/scripts/EditorGui.ed.tscript @@ -734,7 +734,7 @@ function EditorGui::addCameraBookmarkByGui( %this ) // look for a NewCamera name to grab for(%i = 0; ; %i++){ %name = "NewCamera_" @ %i; - if( !CameraBookmarks.findObjectByInternalName(%name) ){ + if( !isObject(CameraBookmarks) || !CameraBookmarks.findObjectByInternalName(%name) ){ break; } } @@ -1340,7 +1340,9 @@ function CameraTypesDropdownToggle() function VisibilityDropdownToggle() { - EditorVisibilityOptions.showPopup(Canvas); + %pos = visibilityToggleBtn.getGlobalPosition(); + %pos.y += visibilityToggleBtn.extent.y; + EditorVisibilityOptions.showPopup(Canvas, %pos.x, %pos.y); } function CameraTypesDropdownDecoy::onMouseLeave() diff --git a/Templates/BaseGame/game/tools/worldEditor/scripts/visibility/miscViz.tscript b/Templates/BaseGame/game/tools/worldEditor/scripts/visibility/miscViz.tscript index c555d9138..8f5c6bd52 100644 --- a/Templates/BaseGame/game/tools/worldEditor/scripts/visibility/miscViz.tscript +++ b/Templates/BaseGame/game/tools/worldEditor/scripts/visibility/miscViz.tscript @@ -436,3 +436,55 @@ function toggleVolumeViz(%vizName) EVisibilityVolumeOptions.checkItem(7, $SFXSpace::isRenderable); } } + +// +// +function togglePlayerCollisionViz() +{ + $Player::renderCollision = !$Player::renderCollision; + EVisibilityDebugRenderOptions.checkItem(0, $Player::renderCollision); +} + +function toggleTerrainDebugViz() +{ + $TerrainBlock::debugRender = !$TerrainBlock::debugRender; + EVisibilityDebugRenderOptions.checkItem(1, $TerrainBlock::debugRender); +} + +function toggleDecalsDebugViz() +{ + $Decals::debugRender = !$Decals::debugRender; + EVisibilityDebugRenderOptions.checkItem(2, $Decals::debugRender); +} + +function toggleBoundingBoxesViz() +{ + $Scene::renderBoundingBoxes = !$Scene::renderBoundingBoxes; + EVisibilityDebugRenderOptions.checkItem(3, $Scene::renderBoundingBoxes); +} + +// +// +function toggleWireframeViz() +{ + $gfx::wireframe = !$gfx::wireframe; + EditorVisibilityOptions.checkItem(3, $gfx::wireframe); +} + +function toggleFrustumLockViz() +{ + $Scene::lockCull = !$Scene::lockCull; + EditorVisibilityOptions.checkItem(4, $Scene::lockCull); +} + +function toggleZoneCulling() +{ + $Scene::disableZoneCulling = !$Scene::disableZoneCulling; + EditorVisibilityOptions.checkItem(7, $Scene::disableZoneCulling); +} + +function toggleTerrainCulling() +{ + $Scene::disableTerrainOcclusion = !$Scene::disableTerrainOcclusion; + EditorVisibilityOptions.checkItem(8, $Scene::disableTerrainOcclusion); +} \ No newline at end of file diff --git a/Templates/BaseGame/game/tools/worldEditor/scripts/visibility/visibilityLayer.ed.tscript b/Templates/BaseGame/game/tools/worldEditor/scripts/visibility/visibilityLayer.ed.tscript index 5c0b467be..1d8d9e2f0 100644 --- a/Templates/BaseGame/game/tools/worldEditor/scripts/visibility/visibilityLayer.ed.tscript +++ b/Templates/BaseGame/game/tools/worldEditor/scripts/visibility/visibilityLayer.ed.tscript @@ -98,15 +98,17 @@ function setupEditorVisibilityMenu() superClass = "MenuBuilder"; class = "EditorWorldMenu"; - item[ 0 ] = "Show Player Collision" TAB "" TAB "$Player::renderCollision = !$Player::renderCollision;"; - item[ 1 ] = "Show Terrain Debug" TAB "" TAB "$TerrainBlock::debugRender = !$TerrainBlock::debugRender;"; - item[ 2 ] = "Show Decals Debug" TAB "" TAB "$Decals::debugRender = !$Decals::debugRender;"; - item[ 3 ] = "Show Bounding Boxes" TAB "" TAB "$Scene::renderBoundingBoxes = !$Scene::renderBoundingBoxes;"; + item[ 0 ] = "Show Player Collision" TAB "" TAB "togglePlayerCollisionViz();"; + item[ 1 ] = "Show Terrain Debug" TAB "" TAB "toggleTerrainDebugViz();"; + item[ 2 ] = "Show Decals Debug" TAB "" TAB "toggleDecalsDebugViz();"; + item[ 3 ] = "Show Bounding Boxes" TAB "" TAB "toggleBoundingBoxesViz();"; item[ 4 ] = "Show Physics World" TAB "" TAB "togglePhysicsDebugViz();"; item[ 5 ] = "Show Texel Density" TAB "" TAB "toggleTexelDensityViz();"; }; - %debugRenderpopup.enableItem(4, false); + if(!physicsPluginPresent()) + %debugRenderpopup.enableItem(4, false); + %debugRenderpopup.enableItem(5, false); // @@ -231,12 +233,12 @@ function setupEditorVisibilityMenu() item[ 0 ] = "Volumes Visibility" TAB EVisibilityVolumeOptions; item[ 1 ] = "Debug Rendering" TAB EVisibilityDebugRenderOptions; item[ 2 ] = "-" TAB "" TAB ""; - item[ 3 ] = "Wireframe" TAB "" TAB "$gfx::wireframe = !$gfx::wireframe;"; - item[ 4 ] = "Frustum Lock" TAB "" TAB "$Scene::lockCull = !$Scene::lockCull;"; + item[ 3 ] = "Wireframe" TAB "" TAB "toggleWireframeViz();"; + item[ 4 ] = "Frustum Lock" TAB "" TAB "toggleFrustumLockViz();"; item[ 5 ] = "Colorblindness" TAB EVisibilityColorblindnessOptions; item[ 6 ] = "-" TAB "" TAB ""; - item[ 7 ] = "Disable Zone Culling" TAB "" TAB "$Scene::disableZoneCulling = !$Scene::disableZoneCulling;"; - item[ 8 ] = "Disable Terrain Culling" TAB "" TAB "$Scene::disableTerrainOcclusion = !$Scene::disableTerrainOcclusion;"; + item[ 7 ] = "Disable Zone Culling" TAB "" TAB "toggleZoneCulling();"; + item[ 8 ] = "Disable Terrain Culling" TAB "" TAB "toggleTerrainCulling();"; item[ 9 ] = "-" TAB "" TAB ""; item[ 10 ] = "Lighting Modes" TAB EVisibilityLightingModesOptions; item[ 11 ] = "Lights" TAB EVisibilityLightsOptions; @@ -383,14 +385,17 @@ function EVisibility::addClassOptions( %this ) } } -function togglePhysicsDebugViz( %enable ) +function togglePhysicsDebugViz( ) { - $PhysicsWorld::render = %enable; + $PhysicsWorld::render = !$PhysicsWorld::render; if(physicsPluginPresent()) { - physicsDebugDraw(%enable); + physicsDebugDraw($PhysicsWorld::render); } + + EVisibilityDebugRenderOptions.checkItem(4, $PhysicsWorld::render); + } function disableVisualizers()