From c0dd314c1255adc5ff300c076761f5c3592226fa Mon Sep 17 00:00:00 2001 From: Areloch Date: Mon, 23 Dec 2019 12:37:55 -0600 Subject: [PATCH] Changed default terrain paths to go into data/terrains if nothing is set Added default terrianmat definition for warning_material Corrected separator-h image path for a few GUI controls Corrected SelectAssetPathWindow reference so it focuses the window right Changed new asset window to work with new Select Path window and address system Added call to force AssetBrowser to load/initialize when the tools are initialized(ensures anything utilizing assets in other tools don't have reference issues) Standardized drag-n-drop move behavior in the Asset browser so dragging onto the folder tree and a folder in the browser both behave more predictably If import config is set to not allow importing with errors, then the Done button is disabled when errors are detected Updated the example assettype file for the AB Fixed up move/delete/rename behavior for folders in AB Begun full standardization of move/delete/rename actions for other asset types in AB Added standardized call for New Asset field fillouts by letting the asset types populate them Moved terrain block creation to the standard create call so it can accept other normal fields like resolution Updated the 'Do you want to create' terrain block prompts to generate the asset if yes, and if no it'll prompt to go find an existing terrain asset Added placeholder image for terrain material asset for preview Updated refresh behavior for terrain material assets so they properly populate on creation now Added standardized functions to the directoryHandling class for folder/file manipulation Corrected some warnMat image references --- Engine/source/terrain/terrData.cpp | 2 +- .../game/core/rendering/Core_Rendering.cs | 1 + .../scripts/gfxData/warningTerrainMat.cs | 7 + .../tools/VPathEditor/GUI/VPathEditor.gui | 2 +- .../assetBrowser/art/terrainMaterialIcon.png | Bin 0 -> 7889 bytes .../tools/assetBrowser/guis/assetImport.gui | 4 +- .../game/tools/assetBrowser/guis/newAsset.gui | 123 +++++++++++------- .../tools/assetBrowser/guis/selectPath.gui | 2 +- .../BaseGame/game/tools/assetBrowser/main.cs | 4 + .../assetBrowser/scripts/addModuleWindow.cs | 1 - .../assetBrowser/scripts/assetBrowser.cs | 89 ++++++++++--- .../tools/assetBrowser/scripts/assetImport.cs | 25 ++-- .../scripts/assetTypes/assetTypeExample.cs | 77 ++++++----- .../assetBrowser/scripts/assetTypes/folder.cs | 59 +++------ .../assetBrowser/scripts/assetTypes/level.cs | 13 +- .../assetBrowser/scripts/assetTypes/script.cs | 79 ++++++++++- .../scripts/assetTypes/terrain.cs | 72 +++++++++- .../scripts/assetTypes/terrainMaterial.cs | 10 +- .../assetBrowser/scripts/directoryHandling.cs | 78 +++++++++++ .../tools/assetBrowser/scripts/editAsset.cs | 36 ++--- .../tools/assetBrowser/scripts/newAsset.cs | 53 ++++---- .../tools/assetBrowser/scripts/popupMenus.cs | 36 ++--- .../interface/materialFieldType.cs | 4 +- .../game/tools/navEditor/NavEditorToolbar.gui | 2 +- .../BaseGame/game/tools/roadEditor/main.cs | 2 +- .../shapeEditor/scripts/shapeEditor.ed.cs | 2 +- .../gui/guiTerrainMaterialDlg.ed.gui | 2 +- .../scripts/editors/terrainEditor.ed.cs | 8 +- .../interfaces/terrainMaterialDlg.ed.cs | 6 +- .../worldEditor/scripts/menuHandlers.ed.cs | 3 +- .../tools/worldEditor/scripts/menus.ed.cs | 4 +- 31 files changed, 557 insertions(+), 249 deletions(-) create mode 100644 Templates/BaseGame/game/core/rendering/scripts/gfxData/warningTerrainMat.cs create mode 100644 Templates/BaseGame/game/tools/assetBrowser/art/terrainMaterialIcon.png diff --git a/Engine/source/terrain/terrData.cpp b/Engine/source/terrain/terrData.cpp index a961b260f..a9c70080f 100644 --- a/Engine/source/terrain/terrData.cpp +++ b/Engine/source/terrain/terrData.cpp @@ -1000,7 +1000,7 @@ bool TerrainBlock::onAdd() String terrainDirectory(Con::getVariable("$pref::Directories::Terrain")); if (terrainDirectory.isEmpty()) { - terrainDirectory = "art/terrains/"; + terrainDirectory = "data/terrains/"; } mTerrFileName.replace("tools/levels/", terrainDirectory); mTerrFileName.replace("levels/", terrainDirectory); diff --git a/Templates/BaseGame/game/core/rendering/Core_Rendering.cs b/Templates/BaseGame/game/core/rendering/Core_Rendering.cs index 06271eb0c..e7c1df920 100644 --- a/Templates/BaseGame/game/core/rendering/Core_Rendering.cs +++ b/Templates/BaseGame/game/core/rendering/Core_Rendering.cs @@ -18,6 +18,7 @@ function Core_Rendering::onCreate(%this) exec("./scripts/gfxData/shaders.cs"); exec("./scripts/gfxData/terrainBlock.cs"); exec("./scripts/gfxData/water.cs"); + exec("./scripts/gfxData/warningTerrainMat.cs"); } function Core_Rendering::onDestroy(%this) diff --git a/Templates/BaseGame/game/core/rendering/scripts/gfxData/warningTerrainMat.cs b/Templates/BaseGame/game/core/rendering/scripts/gfxData/warningTerrainMat.cs new file mode 100644 index 000000000..275874d58 --- /dev/null +++ b/Templates/BaseGame/game/core/rendering/scripts/gfxData/warningTerrainMat.cs @@ -0,0 +1,7 @@ +new TerrainMaterial() +{ + diffuseSize = "200"; + detailSize = "10"; + internalName = "warning_material"; + diffuseMap = "core/rendering/images/warnMat"; +}; \ No newline at end of file diff --git a/Templates/BaseGame/game/tools/VPathEditor/GUI/VPathEditor.gui b/Templates/BaseGame/game/tools/VPathEditor/GUI/VPathEditor.gui index 9deb0e197..d9941f9db 100644 --- a/Templates/BaseGame/game/tools/VPathEditor/GUI/VPathEditor.gui +++ b/Templates/BaseGame/game/tools/VPathEditor/GUI/VPathEditor.gui @@ -162,7 +162,7 @@ new VPathEditor(EVPathEditor) { canSaveDynamicFields = "0"; }; new GuiBitmapButtonCtrl() { - bitmap = "core/art/gui/images/new"; + bitmap = "core/gui/images/new"; groupNum = "-1"; buttonType = "PushButton"; useMouseEvents = "0"; diff --git a/Templates/BaseGame/game/tools/assetBrowser/art/terrainMaterialIcon.png b/Templates/BaseGame/game/tools/assetBrowser/art/terrainMaterialIcon.png new file mode 100644 index 0000000000000000000000000000000000000000..0e6c456a644cf50a23d8fd1abf5609681bcda256 GIT binary patch literal 7889 zcmeHsXH=6}+ivU*7MhCEqJZE~rT5?rAShKK6e&?4fKp;06bS*HIS8Suj6guh2u?6m z0YL~5Ktm#3YG?sWXraZ3kkHS=th3g9->>()-?z?>bJqFstiAJOKlk4I-gmj~Yh&$g zElvrD3xGhNQ#UNlZi7Gvf$l-j@uNWVBXVF9XpVYWS(pLs7Z3>+Gr$0PKRvW`4F!Qt zi0(fJK-sU(122!EZrGR~`+8LTh@9?94IvMBC3WA?1!al|3W5itfS(|cX$brt3hr|; z;y%j%qQwmxdmmN!F%U>v`-a&sj*+9w40M)HgvZoZ1az&GRKGc4{2?zuLlZ}N*7ht* z=+|jQe|x-#&@U~wobJW7UK2S25Bs!vaZBjq4_CMxYES(2CQO*%|O`Il-@4^6a6N>33hQ=re3u3B;K+TCS-v0!; z2CNcLfe;Av80Z}afi42g0TAdo=wJNxZw~(tll<>U{}03eS<`=Mo%@ph5%Dj#^`9p` z4$Ap&ef=+V_@5{HNAv&wY5Xrq|A@E-`nS&Y-yHsrg**nm`+vfS?y`xMKY?6S1u`4* zr!}zP=&q+BfY|^iam}pc86MQG@AJc*zJk8GBEAUI=(z+<82-Ro7-S;qEOhD3mrfN_YOD9v~}>2;kIk54Z@0tKruy!?jdx z{bskf5D_J5f;_22;uS|9OiXo<4GK!{-r&V6TxUI6yPzhitUeppEc_TgYpNi4Zf9#D zo5ZiKseb8-`}NYq;H~Y3-*dK3NA&`F^jlniJ)viit3v8b$(4|GeR2py*9oJfqFAqD zO^jZq7#>A8`UCr~(v}bgFB-a|aI1^rOl=j96J%B0@L!!_CnbRHj)qBCxU^gnw$L_IuS~ zgFi^@9)+zmYUCwO>%pm#T7fBj$WX+UvPBoLwt3lBtQ~!pPe1hg>h3TDs?AL@kMYXt zoVmGcT`@fR0$NdB1F0E!<85VQ&|O@b)}_t%zX3J();N2r%~4C<;TGQ7Tvb5bCy6zaJ zWwa&Ubxz>9%CwhOW>SG>I?~@)LmDrc#<4v~i%@v#t%t7?&iu(+`+R5C6o>S|TEZN&sxsKa1(whtV_>e-h9WUvD zgjdfI=d&KWh+}A0=4lfR#A4PBIo9Vmx>+c6Eo}#_icgcWn~*@qPT!0R$)ktj$D;XF zVPX_3@i8wq4^wj(jUBDJ8_f3^AE;N$Q%1H@e{HZ()VMgeQGN4_0CzM4%0+wRu=+L$ zk6@EuM{u=4Q!d+F?2h{TW{V@X5t5m#?FCeWO#e9(*GWmk1#vIaFb}Q2iez#vuR~-A z0vqSsyQr_(flK&qs)K_l*Fr&1xt&z@UcJt-rc@TB)LG!bLed|?wgW@wUUf7O>Xf>R z%aSmf>8szfnnos!=Q3l>C}I|yyNt{|uc!dprun1sY#&9>Ns_$hSc4*DBvxwzvrYVL za7Mqdcrk~S&M;&u^qtVX=NJkN+qR_>_-jMj+^t4C8eUKm_I>OxO{i488=X@Ap)~14 zl6!DYazc^ib<-lnp}~PxD7UlDWajW=^|p{Hxn})8vi%iaT2oUza%N{LZpS4o8t9zy znEm~-yyBf(gW1+pLjzrkU`^9S)wjeCzvLCDig1ZxhRl^!Rktr{d*H!a9ugl)o322b zxXjOT8MCzZBFC`tO5XsO(1|XGD-vTm7tiRv^7!& zwBq$=MCGKUR07A>qTxzUMRnPw6-Lw}_vgWt>Uq_FkyKa4Hq*HosVnAnDL(?-oM^^# zFzMXYtE#ih9Y4ziFAWQ!)gte?PgeiDz_{CyWd?e+eCsi)NU>~j{NYfV!$Mz^VD@^1 zZ7JY_GhK$>WA|Upqsm61nb@rlp2CKUV!Thh7n=nB?4wL`bO^V}U(L>sd2Gy6NVj}U z8dvn-5H)LBAK58MzKYT~ZEZuD9jz0*zvG0Ch@PT6(S(R@7K-0tZk*~0-No32YwaSZ z9nC%t#D=opmZkI{8st>RwsKvFbF#4K!HMO8BWG3MF>N#7H);`HdSr->5YO%;ZI>M= ziN_^!qgB7hC7?7ectEu)D&(ay2|%bf4FF8eX??q!IQWHQVu+1R7 zwT1U5ElBs~@&_U%ae2vkBkc1XT~wb-;A*VToAfq+Yo}Jy!svV%F=<(Qjr)M|P4t3}it%i(7=w)oa)4!@MjK8piZIW6@p%LU~m-lj0fH1g5g$b@x zww&-{oaIsX?{8|XpDrlkRBmd%(N*jp4;B~vSd9z6pOkMoYp&n=sFRti-`^KGBVVVDsDSQklHx%bptH6 zW8n>j1~o*iW#o5w41JL_$z&(Qo;R+Z8hbOYwr5dQfTa7!8eLTvLCe#alupN!bAGb0 zgts^3@>Oxk-9_0hP^jqG0}19w($m^XvVOQqZ`D`|pz?$4jxLJdQFNkhO@%DueAAbK z3ozwX(-i=uBpz)o+)Sg+i{yG$vwIQSpH~p@Zae#f*jXpK%gVBDdb2v!B|x(L?*zD!U+#5vIL#c)H9Td)&C-j zUoz3)y}5%;2sAPj+ePW*Wp`7JML${X?%cHwk#|4pLU7wWZLSL2KC!{@$m!T@daw_Y z@LRloqPr?!37@aWrcOfE%}#b@K>GL7d1#EA`(&NE(@TEtR&1WpRYd&GoQ8xj!l0pW zdbpNU5!S1ELIRhI<*ltGrKB-L={%!qAKw8jd0|ioWr7_TT|tRwpAdIrny+-^4mq);N3>s* zJM+8`%|kr!aN`E8;hwN6*02bgjl#Oxi0lKZ+`+pSYU`5Okyg@2uAE_dm=kuo=2qdx z-8a_;HOT%tc$Vn1rC<-Y?;#};QF%r4GX-EZmd3C%d{n6h5>Ke)_7ygP>(h)Dg2Mn= zQ%e{HLy<{w31w1ebyqG|v^sS1`Qo6B6!Mqn`k(jiO*^)(6je(upcST%s$GOOCW`rch zC}!iEbo|!7m2GeJS;CB-ODT~$)v8MpPeJ#%y1V<32}ua*j^!;^v>Y+^-g3X{NtM%C zoBK9UULL%ly!khloa^0f{pqnrs=<=`RK4hKn@A&SC`(JK3Zy3{CxW!XYW^rrC)U1R zG|77t=1sqj-dlaQV@0&etq1FvxcSU}PDn6}-#QnxvUaSh;Bsc&+isP}lp7fWGk%}6Uj*~N; zy70FO{`!@qOV)ljZ5ua-r%h&iTx0cqQwR;REkxAYUtX3xDzGz>*!!yi1t*KLR5Qu*NG8p^6f=X&+CA!oI{0OI0{gUx?`db-QHbuQkH zB5{Y_S=UJ&Woq7K=sZ-uE>H*G*v31L3E}4_gq?M3qBI@lKpA_Sxk1%qn)0q1(|lKh z94j6H*udwI2DaU6Axa8y4hv+MQAyrMpc(XfLD3La#juVR#MA#-{O^(qUON*-bBz0AP^%{)FA>rlr& z|0*}7W!&0F?a@YJbopOW5ZZpSP|@W{87+f8&#fXuCtKiaMxt@Qj#qFWaY;jiem^*A zwtg(Ms4N#T(i<5VqP%WvLm{&RlXGgS8$gzN(W(1~aGPwPBV>|w9&2Umowr(leT!8= z!~&A`{MR-LcYax&qCAWaey2b-3Tej-_uO6+$dMBON|krY(Qi5S(c!FCxY}Mz`mv0` zRW#h&ZQJvCj-)Z2e%-d!rg4igc30Zw?DtzR=KI{Dc=9>@+;=kP(_g8WD0ZheU06tw zb(k6a5kZY-=3!?vkEh2aq?Ir{L(Y*B68167OH)Cb9hk2R)>>80QNy^@OguWM#QJ?~ zf8$bB!rWem_>S={liHHJv6UL_3R#a$dDUZu^30+_PTE+!ZKSF4W30vsX=uKtSn0R@ zt$GD7nuwcTCYWMELX=k|A$28rbVN-U;6e|>4LoZ&Pa^vei6>^wE;uI#z9m+@b^`5h zl#+b*JC`WJlWqEoV}B;2x6OUA_yH?X!!|g2tXIKnuk(#=%Rz(N)OCh?dd=%@RHTy-|`6~`v|5BJ%`O@jXog4Y$i zrcloq-&Lbr)tXwT{#T$DgSm+dVReS7MEB-DEJsb!5ouo>4t3rOS+oTI!oqaiFOspZ40aZTA>ao0sYeQKm-_ zNc7x8SQ}h*zev}qm3^iD(}cpSE{QkE1!K$5!MUYXHNWq<8ICh~dznw|sDT$OE<@gj zyUCrHXrjs;2X%jmya3aY==mDZv*l|AzR9>nx35@ZcXa`!*-h|~+V|w2CkE?UB!;sN zA85wus~bW?aG5$aP+zz}TrIhv684}GZnS6BZv$kbv`qb(AK-F*ld_U;q^_BEl!N3L zSLV<@;Cko2q~aHi<3JV z9=ss(`(|^I_kwov8)F~H2*(ar>ywca@QNX=R^aF#&#<0gd;8GMYc|{yxVSBmZ5(x- z-%_K*f}Y*YPf3VGRsNVZ6f4x^G6n3KLwC3evM}oFsqTeQ{^p}h=&t3p*Fxp@7n0*Y zz%FpyLSqI9w~wX+#(P(PV>a@UXyQ0&OGm`R3N?X1^c~yhB+%mE87HT^?t$ za^%_#FxybFX>dYn5Pou(P_)2z;T_@bYR}PfKPj-t035q&C_?ikctN|EpB%!N5CGAa%Vuvx2cG3LlmdiWhU1k(Cn%A1D zu#(brVd>|9kAKEp#dWkw{cg;y1R(RA33r))ZSt2x`$**7tDPNyXB!}MXe~#!ceu}& z{2Lxj9;(>-T%dm2#Q>+g!NccB~Ej&_{i_%+G>uy>*|G9 zrP%Snaeb6b%<`8!m(^hgwY#zsvNuuAHtFc&r%`8!i_PS<8*wTUcc^)kIh* z>YJ!+G;+W4=ZU6B8bI_x-bd11VxyOV8ewIqn(HRT@YCjY`KXFbcBE2_;oaZDNz(Yd zgvC^ovm6MZeBAvsXWa;DkB@;D!>DUI{NV#2!0VicNkT5{8I6KR9)i8RU(8$tZkPuB zXG-?jY7QzWk^Z41l{&!Ioq0|KmfR;6adMr48JT%>aE!1(;ZcIf}2JFtuYUqS!!{_y|21-$|o!N%CsBEbutton.assetName = %assetName; + %previewButton-->button.moduleName = %moduleName; + %previewButton-->button.assetType = %assetType; + if(%assetType $= "ShapeAsset") { %previewButton-->shapeAssetView.setModel(%previewImage); @@ -718,7 +721,7 @@ function AssetPreviewButton::onRightClick(%this) EditLevelAssetPopup.showPopup(Canvas); else if(%assetType $= "Folder") { - EditFolderPopup.dirPath = %this.getParent().assetPath; + EditFolderPopup.dirPath = %this.getParent().moduleName @ "/" @ %this.getParent().assetName; EditFolderPopup.showPopup(Canvas); } else @@ -1246,8 +1249,11 @@ function AssetBrowser::toggleFolderCollapseButton(%this) function AssetPreviewButton::onMouseDragged(%this) { %payload = new GuiBitmapButtonCtrl(); - %payload.assignFieldsFrom( %this ); - %payload.className = "AssetPreviewControl"; + //%payload.assignFieldsFrom( %this ); + %payload.assetName = %this.assetName; + %payload.assetType = %this.assetType ; + %payload.moduleName = %this.moduleName; + %payload.class = "AssetPreviewControl"; %payload.position = "0 0"; %payload.dragSourceControl = %this; %payload.bitmap = %this.icon; @@ -1318,7 +1324,6 @@ function AssetPreviewButton::onControlDropped( %this, %payload, %position ) { Canvas.popDialog(EditorDragAndDropLayer); - // Make sure this is a color swatch drag operation. if( !%payload.parentGroup.isInNamespaceHierarchy( "AssetPreviewControlType_AssetDrop" ) ) return; @@ -1327,22 +1332,43 @@ function AssetPreviewButton::onControlDropped( %this, %payload, %position ) if( %payload.dragSourceControl == %this ) return; + + %assetType = %payload.dragSourceControl.parentGroup.assetType; + %assetName = %payload.dragSourceControl.parentGroup.assetName; + %moduleName = %payload.dragSourceControl.parentGroup.moduleName; + + %targetAssetName = %this.assetName; + %targetAssetType = %this.assetType; + %targetModuleName = %this.moduleName; - // If a swatch button control is dropped onto this control, - // copy it's color. - - if( %payload.isMemberOfClass( "AssetPreviewButton" ) ) + if( %payload.dragSourceControl.class $= "AssetPreviewButton" && %targetAssetType $= "Folder") { - // If the swatch button is part of a color-type inspector field, - // remember the inspector field so we can later set the color - // through it. - - if( %this.parentGroup.isMemberOfClass( "GuiInspectorTypeColorI" ) ) - %this.parentGroup.apply( ColorFloatToInt( %payload.color ) ); - else if( %this.parentGroup.isMemberOfClass( "GuiInspectorTypeColorF" ) ) - %this.parentGroup.apply( %payload.color ); + %destination = %targetModuleName @ "/" @ %targetAssetName; + + if(%assetType $= "Folder") + { + %originFolder = %moduleName @ "/" @ %assetName; + %destination = %destination @ "/" @ %assetName; + + //Do any cleanup required given the type + if(AssetBrowser.isMethod("moveFolder")) + eval(AssetBrowser @ ".moveFolder(\""@%originFolder@"\",\""@%destination@"\");"); + } else - %this.setColor( %payload.color ); + { + %assetId = %moduleName @ ":" @ %assetName; + %assetDef = AssetDatabase.acquireAsset(%assetId); + %assetType = AssetDatabase.getAssetType(%assetId); + + //Do any cleanup required given the type + if(AssetBrowser.isMethod("move"@%assetType)) + { + %command = AssetBrowser @ ".move" @ %assetType @ "(" @ %assetDef @ ",\"" @ %destination @ "\");"; + eval(AssetBrowser @ ".move" @ %assetType @ "(" @ %assetDef @ ",\"" @ %destination @ "\");"); + } + } + + AssetBrowser.refresh(); } } @@ -1477,8 +1503,31 @@ function AssetBrowserFilterTree::onControlDropped( %this, %payload, %position ) if(%path !$= AssetBrowser.dirHandler.CurrentAddress) { //we're trying to move the asset to a different module! - MessageBoxYesNo( "Move Asset", "Do you wish to move asset " @ %assetName @ " to " @ %path @ "?", - "AssetBrowser.moveAsset(\""@ %moduleName @ ":" @ %assetName @"\", \""@%path@"\");", ""); + //MessageBoxYesNo( "Move Asset", "Do you wish to move asset " @ %assetName @ " to " @ %path @ "?", + // "AssetBrowser.moveAsset(\""@ %moduleName @ ":" @ %assetName @"\", \""@%path@"\");", ""); + + if(%assetType $= "Folder") + { + %originFolder = %moduleName @ "/" @ %assetName; + %path = %path @ "/" @ %assetName; + + //Do any cleanup required given the type + if(AssetBrowser.isMethod("moveFolder")) + eval(AssetBrowser @ ".moveFolder(\""@%originFolder@"\",\""@%path@"\");"); + } + else + { + %assetId = %moduleName @ ":" @ %assetName; + %assetDef = AssetDatabase.acquireAsset(%assetId); + %assetType = AssetDatabase.getAssetType(%assetId); + + //Do any cleanup required given the type + if(AssetBrowser.isMethod("move"@%assetType)) + { + %command = AssetBrowser @ ".move" @ %assetType @ "(" @ %assetDef @ ",\"" @ %path @ "\");"; + eval(AssetBrowser @ ".move" @ %assetType @ "(" @ %assetDef @ ",\"" @ %path @ "\");"); + } + } } } } diff --git a/Templates/BaseGame/game/tools/assetBrowser/scripts/assetImport.cs b/Templates/BaseGame/game/tools/assetBrowser/scripts/assetImport.cs index 2d6408ddc..8f31d6985 100644 --- a/Templates/BaseGame/game/tools/assetBrowser/scripts/assetImport.cs +++ b/Templates/BaseGame/game/tools/assetBrowser/scripts/assetImport.cs @@ -194,6 +194,15 @@ function AssetBrowser::onEndDropFiles( %this ) ImportAssetWindow.visible = true; ImportAssetWindow.selectWindow(); } + + if(%hasIssues && getAssetImportConfigValue("General/PreventImportWithErrors", "0") == 1) + { + DoAssetImportButton.enabled = false; + } + else + { + DoAssetImportButton.enabled = true; + } // Update object library GuiFormManager::SendContentMessage($LBCreateSiderBar, %this, "refreshAll 1"); @@ -506,11 +515,7 @@ function ImportAssetWindow::processNewImportAssets(%this, %id) //%assetConfigObj.assetName = %assetItem.assetName; - if(%assetItem.assetType $= "Model") - { - AssetBrowser.prepareImportShapeAsset(%assetItem); - } - else if(%assetItem.assetType $= "Animation") + if(%assetItem.assetType $= "Animation") { //if we don't have our own file, that means we're gunna be using our parent shape's file so reference that if(!isFile(%assetItem.filePath)) @@ -518,13 +523,11 @@ function ImportAssetWindow::processNewImportAssets(%this, %id) %assetItem.filePath = %assetItem.parentAssetItem.filePath; } } - else if(%assetItem.assetType $= "Material") + + if(AssetBrowser.isMethod("prepareImport" @ %assetItem.assetType)) { - AssetBrowser.prepareImportMaterialAsset(%assetItem); - } - else if(%assetItem.assetType $= "Image") - { - AssetBrowser.prepareImportImageAsset(%assetItem); + %command = AssetBrowser @ ".prepareImport" @ %assetItem.assetType @ "(" @ %assetItem @ ");"; + eval(%command); } %assetItem.processed = true; diff --git a/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/assetTypeExample.cs b/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/assetTypeExample.cs index 3cbdcd6cb..8ab6e3e6b 100644 --- a/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/assetTypeExample.cs +++ b/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/assetTypeExample.cs @@ -1,33 +1,3 @@ -function AssetBrowser::create_Asset(%this) -{ -} - -function AssetBrowser::edit_Asset(%this, %assetDef) -{ -} - -function AssetBrowser::duplicate_Asset(%this, %assetDef, %targetModule) -{ -} - -function AssetBrowser::import_Asset(%this, %assetDef) -{ -} - -function AssetBrowser::dragAndDrop_Asset(%this, %assetDef, %dropTarget) -{ - if(!isObject(%dropTarget)) - return; -} - -function AssetBrowser::rename_Asset(%this, %assetDef, %newAssetId, %originalName, %newName) -{ -} - -function AssetBrowser::delete_Asset(%this, %assetDef) -{ -} - function AssetBrowser::build_AssetPreview(%this, %assetDef, %previewData) { %previewData.assetName = %assetDef.assetName; @@ -41,6 +11,53 @@ function AssetBrowser::build_AssetPreview(%this, %assetDef, %previewData) %previewData.tooltip = %assetDef.gameObjectName; } +function AssetBrowser::prepareImport_Asset(%this, %assetItem) +{ + +} + +function AssetBrowser::setupCreateNew_Asset(%this) +{ +} + +function AssetBrowser::create_Asset(%this) +{ +} + +function AssetBrowser::import_Asset(%this, %assetDef) +{ +} + +function AssetBrowser::edit_Asset(%this, %assetDef) +{ +} + +function AssetBrowser::duplicate_Asset(%this, %assetDef, %targetModule) +{ +} + +function AssetBrowser::rename_Asset(%this, %assetDef, %newAssetName) +{ +} + +function AssetBrowser::delete_Asset(%this, %assetDef) +{ +} + +function AssetBrowser::move_Asset(%this, %assetDef, %destinationFolder) +{ +} + +function AssetBrowser::dragAndDrop_Asset(%this, %assetDef, %dropTarget) +{ + if(!isObject(%dropTarget)) + return; +} + +function AssetBrowser::on_AssetEditorDropped(%this, %assetDef, %position) +{ +} + function GuiInspectorType_AssetPtr::onClick( %this, %fieldName ) { //Get our data diff --git a/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/folder.cs b/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/folder.cs index 209c56b0c..b15a41a28 100644 --- a/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/folder.cs +++ b/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/folder.cs @@ -68,55 +68,17 @@ function AssetBrowser::renameFolder(%this, %folderPath, %newFolderName) //so, we nix any assets active for the module, do the delete action on the old folder, and then re-acquire our assets. //This will have the added benefit of updating paths for asset items - %module = AssetBrowser.getModuleFromAddress(AssetBrowser.dirHandler.currentAddress); + %module = AssetBrowser.dirHandler.getModuleFromAddress(AssetBrowser.dirHandler.currentAddress); %moduleId = %module.ModuleId; AssetDatabase.removeDeclaredAssets(%moduleId); - %copiedSuccess = pathCopy(%fullPath, %basePath @ "/" @ %newFolderName); - %this.deleteFolder(%fullPath); - - AssetDatabase.addModuleDeclaredAssets(%moduleId); -} - -function AssetBrowser::deleteFolder(%this, %folderPath) -{ - doDeleteFolder(%folderPath); + %copiedSuccess = %this.dirHandler.copyFolder(%fullPath, %basePath @ "/" @ %newFolderName); + %this.dirHandler.deleteFolder(%fullPath); %this.loadDirectories(); -} - -function doDeleteFolder(%folderPath) -{ - %fullPath = makeFullPath(%folderPath); - //First, wipe out any files inside the folder first - %file = findFirstFileMultiExpr( %fullPath @ "/*.*", true); - - while( %file !$= "" ) - { - %success = fileDelete( %file ); - - if(!%success) - { - error("doDeleteFolder - unable to delete file " @ %file); - return; - } - - %file = findNextFileMultiExpr( %fullPath @ "/*.*" ); - } - - //next, walk through and delete any subfolders that may be remaining - while(fileDelete(%fullPath) == 0) - { - //We couldn't delete the folder, so get a directory list and recurse through it, deleteing them as we go - %paths = getDirectoryList(%fullPath); - for(%i=0; %i < getFieldCount(%paths); %i++) - { - %childPath = getField(%paths, %i); - doDeleteFolder(%fullPath @ "/" @ %childPath); - } - } + AssetDatabase.addModuleDeclaredAssets(%moduleId); } function AssetBrowser::moveFolder(%this, %folderPath, %newFolderPath) @@ -131,8 +93,10 @@ function AssetBrowser::moveFolder(%this, %folderPath, %newFolderPath) %basePath = getTokens(%fullPath, "/", 0, %count-2); %oldName = getToken(%fullPath, "/", %count-1); - %copiedSuccess = pathCopy(%fullPath, %newFullPath @ "/" @ %newFolderName); - %this.deleteFolder(%fullPath); + %copiedSuccess = %this.dirHandler.copyFolder(%fullPath, %newFullPath); + %this.dirHandler.deleteFolder(%fullPath); + + %this.loadDirectories(); //thrash the modules and reload them %oldModule = %this.dirHandler.getModuleFromAddress(%folderPath); @@ -153,4 +117,11 @@ function AssetBrowser::moveFolder(%this, %folderPath, %newFolderPath) ModuleDatabase.unloadExplicit(%newModule.getModuleId()); ModuleDatabase.loadExplicit(%newModule.getModuleId()); } +} + +function AssetBrowser::deleteFolder(%this, %folderPath) +{ + %this.dirHandler.deleteFolder(%folderPath); + + %this.refresh(); } \ No newline at end of file diff --git a/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/level.cs b/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/level.cs index 446708529..079282d18 100644 --- a/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/level.cs +++ b/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/level.cs @@ -1,3 +1,12 @@ +function AssetBrowser::setupCreateNewLevelAsset(%this) +{ + NewAssetPropertiesInspector.startGroup("Level"); + NewAssetPropertiesInspector.addField("LevelName", "Level Name", "String", "Human-readable name of new level", "", "", %this.newAssetSettings); + NewAssetPropertiesInspector.addField("levelPreviewImage", "Level Preview Image", "Image", "Preview Image for the level", "", "", %this.newAssetSettings); + + NewAssetPropertiesInspector.endGroup(); +} + function AssetBrowser::createLevelAsset(%this) { %moduleName = AssetBrowser.newAssetSettings.moduleName; @@ -36,9 +45,9 @@ function AssetBrowser::createLevelAsset(%this) PostFXManager::savePresetHandler( %assetPath @ %asset.PostFXPresetFile ); %moduleDef = ModuleDatabase.findModule(%moduleName, 1); - AssetDatabase.addDeclaredAsset(%moduleDef, %tamlpath); + %addSuccess = AssetDatabase.addDeclaredAsset(%moduleDef, %tamlpath); - AssetBrowser.loadFilters(); + AssetBrowser.refresh(); %treeItemId = AssetBrowserFilterTree.findItemByName(%moduleName); %smItem = AssetBrowserFilterTree.findChildItemByName(%treeItemId, "Levels"); diff --git a/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/script.cs b/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/script.cs index bee3ddaf2..4bf459838 100644 --- a/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/script.cs +++ b/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/script.cs @@ -47,18 +47,93 @@ function AssetBrowser::importScriptAsset(%this, %assetId) { } -function AssetBrowser::dragAndDropScriptAsset(%this, %assetDef, %dropTarget) +function AssetBrowser::onScriptAssetEditorDropped(%this, %assetDef, %position) { if(!isObject(%dropTarget)) return; } -function AssetBrowser::renameScriptAsset(%this, %assetDef, %originalName, %newName) +function AssetBrowser::renameScriptAsset(%this, %assetDef, %newAssetName) { + %assetId = %assetDef.getAssetID(); + + %module = AssetDatabase.getAssetModule(%assetId); + + %scriptPath = %assetDef.scriptFile; + %newScriptPath = filePath(%scriptPath) @ "/" @ %newAssetName @ fileExt(%scriptPath); + %copiedSuccess = pathCopy(%scriptPath, %newScriptPath); + + %looseFilepath = fileName(%newScriptPath); + + %assetDef.scriptFile = "\"@AssetFile=" @ %looseFilepath @ "\""; + %assetDef.saveAsset(); + + AssetDatabase.renameDeclaredAsset("\"" @ %module @ ":" @ %newAssetName @ "\""); + + //%assetFilePath = makeFullPath(AssetDatabase.getAssetFilePath(%assetId)); + //%newAssetFilePath = %newFullPath @ "/" @ fileName(%assetFilePath); + //%copiedSuccess = pathCopy(%assetFilePath, %newAssetFilePath); + + fileDelete(%scriptPath); + + //ModuleDatabase.unloadExplicit(%module.getModuleId()); + //ModuleDatabase.loadExplicit(%module.getModuleId()); } function AssetBrowser::deleteScriptAsset(%this, %assetDef) { + %assetId = %assetDef.getAssetID(); + + %module = AssetDatabase.getAssetModule(%assetId); + + %assetFilePath = makeFullPath(AssetDatabase.getAssetFilePath(%assetId)); + %scriptPath = %assetDef.scriptFile; + + fileDelete(%assetFilePath); + fileDelete(%scriptPath); + + //they're different moduels now, so we gotta unload/reload both + ModuleDatabase.unloadExplicit(%module.getModuleId()); + ModuleDatabase.unloadExplicit(%newModule.getModuleId()); +} + +function AssetBrowser::moveScriptAsset(%this, %assetDef, %destination) +{ + %newFullPath = makeFullPath(%destination); + + %assetId = %assetDef.getAssetID(); + + %module = AssetDatabase.getAssetModule(%assetId); + + %assetFilePath = makeFullPath(AssetDatabase.getAssetFilePath(%assetId)); + %newAssetFilePath = %newFullPath @ "/" @ fileName(%assetFilePath); + %copiedSuccess = pathCopy(%assetFilePath, %newAssetFilePath); + + %scriptPath = %assetDef.scriptFile; + %newScriptPath = %newFullPath @ "/" @ fileName(%scriptPath); + %copiedSuccess = pathCopy(%scriptPath, %newScriptPath); + + fileDelete(%assetFilePath); + fileDelete(%scriptPath); + + //thrash the modules and reload them + %newModule = %this.dirHandler.getModuleFromAddress(%newFullPath); + + //if we didn't move modules, then we don't need to do anything other than refresh the assets within it + if(%module == %newModule) + { + //only do a refresh to update asset loose file paths + AssetDatabase.refreshAllAssets(); + } + else + { + //they're different moduels now, so we gotta unload/reload both + ModuleDatabase.unloadExplicit(%module.getModuleId()); + ModuleDatabase.loadExplicit(%module.getModuleId()); + + ModuleDatabase.unloadExplicit(%newModule.getModuleId()); + ModuleDatabase.loadExplicit(%newModule.getModuleId()); + } } function AssetBrowser::buildScriptAssetPreview(%this, %assetDef, %previewData) diff --git a/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/terrain.cs b/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/terrain.cs index e608410ff..069fc61a3 100644 --- a/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/terrain.cs +++ b/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/terrain.cs @@ -1,3 +1,11 @@ +function AssetBrowser::setupCreateNewTerrainAsset(%this) +{ + NewAssetPropertiesInspector.startGroup("Terrain"); + NewAssetPropertiesInspector.addField("resolution", "Terrain Texture Resolution", "list", "Is this script used on the server?", "1024", "256,512,1024,2048,4096", %this.newAssetSettings); + NewAssetPropertiesInspector.addField("genWithNoise", "Generate Terrain With Noise", "bool", "Is this script used on the server?", "0", "2", %this.newAssetSettings); + NewAssetPropertiesInspector.endGroup(); +} + function AssetBrowser::createTerrainAsset(%this) { %moduleName = AssetBrowser.newAssetSettings.moduleName; @@ -6,7 +14,10 @@ function AssetBrowser::createTerrainAsset(%this) %assetName = AssetBrowser.newAssetSettings.assetName; %assetType = AssetBrowser.newAssetSettings.assetType; - %assetPath = AssetBrowser.dirHandler.currentAddress @ "/"; + %assetPath = AssetBrowser.dirHandler.currentAddress @ "/"; + + //Ensure anything we generate goes into the right directory + $pref::Directories::Terrain = %assetPath; %tamlpath = %assetPath @ %assetName @ ".asset.taml"; %terPath = %assetPath @ %assetName @ ".ter"; @@ -16,6 +27,8 @@ function AssetBrowser::createTerrainAsset(%this) AssetName = %assetName; versionId = 1; terrainFile = %assetName @ ".ter"; + resolution = %this.newAssetSettings.resolution; + genWithNoise = %this.newAssetSettings.genWithNoise; }; TamlWrite(%asset, %tamlpath); @@ -23,18 +36,65 @@ function AssetBrowser::createTerrainAsset(%this) %moduleDef = ModuleDatabase.findModule(%moduleName, 1); AssetDatabase.addDeclaredAsset(%moduleDef, %tamlpath); - AssetBrowser.loadFilters(); - - AssetBrowserFilterTree.onSelect(%smItem); + AssetBrowser.refresh(); //Save out a basic terrain block here - %terrBlock = new TerrainBlock() { terrainFile = %terPath; }; + /*%terrBlock = new TerrainBlock() { terrainFile = %terPath; }; %terrBlock.save(%terPath); - %terrBlock.delete(); + %terrBlock.delete();*/ + + //the terrain block creation is...weird and does coded path stuff engine-side. + //this needs reworking, but this is a sidestep for now + %misFile = $Client::MissionFile; + $Client::MissionFile = %terPath; + + // + $createdTerrainBlock = TerrainBlock::createNew( %assetName, %this.newAssetSettings.resolution, "", %this.newAssetSettings.genWithNoise ); + + $Client::MissionFile = %misFile; return %tamlpath; } +//Called if we create the terrain asset as a launch-prompt action of any of the editors +function createTerrainBlock(%assetId) +{ + %assetDef = AssetDatabase.acquireAsset(%assetId); + + if( %assetDef.genWithNoise ) + ETerrainEditor.isDirty = true; + + if(!isObject($createdTerrainBlock)) + { + $createdTerrainBlock = new TerrainBlock() { terrainAsset = %assetId; }; + //$createdTerrainBlock = new TerrainBlock() { terrainFile = %assetDef.terrainFile; }; + } + + if( isObject( $createdTerrainBlock ) ) + { + getRootScene().add($createdTerrainBlock); + + // Submit an undo action. + MECreateUndoAction::submit($createdTerrainBlock); + + assert( isObject( EWorldEditor ), + "ObjectBuilderGui::processNewObject - EWorldEditor is missing!" ); + + // Select it in the editor. + EWorldEditor.clearSelection(); + EWorldEditor.selectObject($createdTerrainBlock); + + // When we drop the selection don't store undo + // state for it... the creation deals with it. + EWorldEditor.dropSelection( true ); + } + else + { + + } + // +} + function AssetBrowser::editTerrainAsset(%this, %assetDef) { } diff --git a/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/terrainMaterial.cs b/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/terrainMaterial.cs index 302480b57..4f90f3050 100644 --- a/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/terrainMaterial.cs +++ b/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/terrainMaterial.cs @@ -23,10 +23,12 @@ function AssetBrowser::createTerrainMaterialAsset(%this) %moduleDef = ModuleDatabase.findModule(%moduleName, 1); AssetDatabase.addDeclaredAsset(%moduleDef, %tamlpath); - - AssetBrowser.loadFilters(); - AssetBrowserFilterTree.onSelect(%smItem); + AssetDatabase.acquireAsset("\"" @ %moduleName @ ":" @ %assetName @ "\""); + + AssetBrowser.refresh(); + + //AssetBrowserFilterTree.onSelect(%smItem); %file = new FileObject(); %templateFile = new FileObject(); @@ -95,7 +97,7 @@ function AssetBrowser::buildTerrainMaterialAssetPreview(%this, %assetDef, %previ %previewData.assetPath = ""; %previewData.doubleClickCommand = ""; - %previewData.previewImage = "tools/assetBrowser/art/gameObjectIcon"; + %previewData.previewImage = "tools/assetBrowser/art/terrainMaterialIcon"; %previewData.assetFriendlyName = %assetDef.gameObjectName; %previewData.assetDesc = %assetDef.description; diff --git a/Templates/BaseGame/game/tools/assetBrowser/scripts/directoryHandling.cs b/Templates/BaseGame/game/tools/assetBrowser/scripts/directoryHandling.cs index 2bea81bc6..d0f960fa3 100644 --- a/Templates/BaseGame/game/tools/assetBrowser/scripts/directoryHandling.cs +++ b/Templates/BaseGame/game/tools/assetBrowser/scripts/directoryHandling.cs @@ -204,4 +204,82 @@ function directoryHandler::expandTreeToAddress(%this, %address) %curItem = %this.treeCtrl.findChildItemByName(%curItem, %folderName); %this.treeCtrl.expandItem(%curItem); } +} + +function directoryHandler::createFolder(%this, %folderPath) +{ + //make a dummy file + %file = new FileObject(); + %file.openForWrite(%folderPath @ "/test"); + %file.close(); + + fileDelete(%folderPath @ "/test"); +} + +function directoryHandler::deleteFolder(%this, %folderPath) +{ + %fullPath = makeFullPath(%folderPath); + + //First, wipe out any files inside the folder first + %file = findFirstFileMultiExpr( %fullPath @ "/*.*", true); + + while( %file !$= "" ) + { + %success = fileDelete( %file ); + + if(!%success) + { + error("doDeleteFolder - unable to delete file " @ %file); + return; + } + + %file = findNextFileMultiExpr( %fullPath @ "/*.*" ); + } + + //next, walk through and delete any subfolders that may be remaining + while(IsDirectory(%fullPath) && fileDelete(%fullPath) == 0) + { + //We couldn't delete the folder, so get a directory list and recurse through it, deleteing them as we go + %paths = getDirectoryList(%fullPath); + for(%i=0; %i < getFieldCount(%paths); %i++) + { + %childPath = getField(%paths, %i); + %this.deleteFolder(%fullPath @ "/" @ %childPath); + } + } +} + +function directoryHandler::copyFolder(%this, %fromFolder, %toFolder) +{ + if(!isDirectory(%toFolder)) + %this.createFolder(%toFolder); + + %file = findFirstFileMultiExpr( %fromFolder @ "/*.*", false); + + while( %file !$= "" ) + { + %copiedFile = strreplace(%file, %fromFolder, %toFolder); + + %copiedPath = filePath(%copiedFile); + + if(!isDirectory(%copiedPath)) + createPath(%copiedPath); + + %success = pathCopy(%file, %copiedFile, false); + if(!%success) + error("copyProjectFolder() - failed to copy file: " @ %file); + + %file = findNextFileMultiExpr( %fullPath @ "/*.*" ); + } + + //do sub directories + %paths = getDirectoryList(%fromFolder); + for(%i=0; %i < getFieldCount(%paths); %i++) + { + %childPath = getField(%paths, %i); + + %this.copyFolder(%fromFolder @ %childPath @ "/", %toFolder @ %childPath @ "/"); + } + + return true; } \ No newline at end of file diff --git a/Templates/BaseGame/game/tools/assetBrowser/scripts/editAsset.cs b/Templates/BaseGame/game/tools/assetBrowser/scripts/editAsset.cs index 2061e2cc0..8e499dfeb 100644 --- a/Templates/BaseGame/game/tools/assetBrowser/scripts/editAsset.cs +++ b/Templates/BaseGame/game/tools/assetBrowser/scripts/editAsset.cs @@ -83,8 +83,11 @@ function AssetBrowser::renameAsset(%this) if(%curFirstResponder != 0) %curFirstResponder.clearFirstResponder(); - AssetBrowser.selectedAssetPreview-->AssetNameLabel.setActive(true); - AssetBrowser.selectedAssetPreview-->AssetNameLabel.setFirstResponder(); + if(EditFolderPopup.visible == false) + { + AssetBrowser.selectedAssetPreview-->AssetNameLabel.setActive(true); + AssetBrowser.selectedAssetPreview-->AssetNameLabel.setFirstResponder(); + } } function AssetBrowser::performRenameAsset(%this, %originalAssetName, %newName) @@ -92,32 +95,17 @@ function AssetBrowser::performRenameAsset(%this, %originalAssetName, %newName) //if the name is different to the asset's original name, rename it! if(%originalAssetName !$= %newName) { + %moduleName = AssetBrowser.selectedModule; + if(EditAssetPopup.assetType !$= "Folder") { - %moduleName = AssetBrowser.selectedModule; - - //do a rename! - %success = AssetDatabase.renameDeclaredAsset(%moduleName @ ":" @ %originalAssetName, %moduleName @ ":" @ %newName); - - if(%success) - echo("AssetBrowser - renaming of asset " @ %moduleName @ ":" @ %originalAssetName @ " to " @ %moduleName @ ":" @ %newName @ " was a success."); - else - echo("AssetBrowser - renaming of asset " @ %moduleName @ ":" @ %originalAssetName @ " to " @ %moduleName @ ":" @ %newName @ " was a failure."); - - if(%success) + if(%this.isMethod("rename" @ EditAssetPopup.assetType)) { - %newAssetId = %moduleName @ ":" @ %newName; - %assetPath = AssetDatabase.getAssetFilePath(%newAssetId); - - //Rename any associated files as well - %assetDef = AssetDatabase.acquireAsset(%newAssetId); - %assetType = %assetDef.getClassName(); - - //rename the file to match - %path = filePath(%assetPath); + %oldAssetId = %moduleName @ ":" @ %originalAssetName; + %assetDef = AssetDatabase.acquireAsset(%oldAssetId); //Do the rename command - %buildCommand = %this @ ".rename" @ %assetType @ "(" @ %assetDef @ "," @ %newAssetId @ ");"; + %buildCommand = %this @ ".rename" @ EditAssetPopup.assetType @ "(" @ %assetDef @ "," @ %newName @ ");"; eval(%buildCommand); } } @@ -159,7 +147,7 @@ function AssetBrowser::moveAsset(%this, %assetId, %destination) { //Do any cleanup required given the type if(%this.isMethod("moveFolder")) - eval(%this @ ".moveFolder("@EditAssetPopup.assetId@",\""@%destination@"\");"); + eval(%this @ ".moveFolder("@%assetId@",\""@%destination@"\");"); } else { diff --git a/Templates/BaseGame/game/tools/assetBrowser/scripts/newAsset.cs b/Templates/BaseGame/game/tools/assetBrowser/scripts/newAsset.cs index c6b78c3d7..861ac1b15 100644 --- a/Templates/BaseGame/game/tools/assetBrowser/scripts/newAsset.cs +++ b/Templates/BaseGame/game/tools/assetBrowser/scripts/newAsset.cs @@ -26,8 +26,9 @@ function CreateAssetButton::onClick(%this) function AssetBrowser_newAsset::onWake(%this) { - NewAssetModuleList.refresh(); - //NewComponentParentClass.setText("Component"); + NewAssetTargetAddress.text = AssetBrowser.dirHandler.currentAddress; + NewAssetTargetModule.text = AssetBrowser.dirHandler.getModuleFromAddress(AssetBrowser.dirHandler.currentAddress).ModuleId; + } function AssetBrowser_newAssetWindow::onClose(%this) @@ -75,12 +76,12 @@ function AssetBrowser::setupCreateNewAsset(%this, %assetType, %moduleName, %call { Canvas.pushDialog(AssetBrowser_newAsset); - AssetBrowser_newAssetWindow.text = "New" SPC %assetType SPC "Asset"; + %shortAssetTypeName = strreplace(%assetType, "Asset", ""); + + AssetBrowser_newAssetWindow.text = "New" SPC %shortAssetTypeName SPC "Asset"; NewAssetPropertiesInspector.clearFields(); - NewAssetModuleList.setText(%moduleName); - AssetBrowser_newAsset.callbackFunc = %callback; //get rid of the old one if we had one. @@ -92,39 +93,28 @@ function AssetBrowser::setupCreateNewAsset(%this, %assetType, %moduleName, %call %this.newAssetSettings.assetType = %assetType; %this.newAssetSettings.moduleName = %moduleName; - %shortAssetTypeName = strreplace(%assetType, "Asset", ""); - NewAssetPropertiesInspector.startGroup("General"); NewAssetPropertiesInspector.addField("assetName", "New Asset Name", "String", "Name of the new asset", "New" @ %shortAssetTypeName, "", %this.newAssetSettings); //NewAssetPropertiesInspector.addField("AssetType", "New Asset Type", "List", "Type of the new asset", %assetType, "Component,Image,Material,Shape,Sound,State Machine", %newAssetSettings); //NewAssetPropertiesInspector.addField("friendlyName", "Friendly Name", "String", "Human-readable name of new asset", "", "", %this.newAssetSettings); - NewAssetPropertiesInspector.addField("description", "Description", "Command", "Description of the new asset", "", "", %this.newAssetSettings); + NewAssetPropertiesInspector.addCallbackField("description", "Description", "Command", "Description of the new asset", "", "", "updateNewAssetField", %this.newAssetSettings); NewAssetPropertiesInspector.endGroup(); - if(%assetType $= "ComponentAsset") + if(%this.isMethod("setupCreateNew"@%assetType)) + { + %command = %this @ ".setupCreateNew"@%assetType @"();"; + eval(%command); + } + /*if(%assetType $= "ComponentAsset") { NewAssetPropertiesInspector.startGroup("Components"); NewAssetPropertiesInspector.addField("parentClass", "New Asset Parent Class", "String", "Name of the new asset's parent class", "Component", "", %this.newAssetSettings); NewAssetPropertiesInspector.addField("componentGroup", "Component Group", "String", "Name of the group of components this component asset belongs to", "", "", %this.newAssetSettings); //NewAssetPropertiesInspector.addField("componentName", "Component Name", "String", "Name of the new component", "", "", %this.newAssetSettings); NewAssetPropertiesInspector.endGroup(); - } - else if(%assetType $= "LevelAsset") - { - NewAssetPropertiesInspector.startGroup("Level"); - NewAssetPropertiesInspector.addField("LevelName", "Level Name", "String", "Human-readable name of new level", "", "", %this.newAssetSettings); - NewAssetPropertiesInspector.addField("levelPreviewImage", "Level Preview Image", "Image", "Preview Image for the level", "", "", %this.newAssetSettings); - - NewAssetPropertiesInspector.endGroup(); - } - else if(%assetType $= "ScriptAsset") - { - NewAssetPropertiesInspector.startGroup("Script"); - NewAssetPropertiesInspector.addField("isServerScript", "Is Server Script", "bool", "Is this script used on the server?", "1", "", %this.newAssetSettings); - NewAssetPropertiesInspector.endGroup(); - } + }*/ //Special case, we only do this via internal means like baking /*else if(%assetType $= "ShapeAsset") { @@ -147,6 +137,19 @@ function AssetBrowser::setupCreateNewAsset(%this, %assetType, %moduleName, %call }*/ } +function NewAssetPropertiesInspector::updateNewAssetField(%this) +{ + %this.schedule(32, "update"); +} + +function newAssetUpdatePath(%newPath) +{ + AssetBrowser.navigateTo(%newPath); + + NewAssetTargetAddress.text = %newPath; + NewAssetTargetModule.text = AssetBrowser.dirHandler.getModuleFromAddress(AssetBrowser.dirHandler.currentAddress).ModuleId; +} + //We do a quick validation that mandatory fields are filled in before passing along to the asset-type specific function function CreateNewAsset() { @@ -159,7 +162,7 @@ function CreateNewAsset() } //get the selected module data - %moduleName = NewAssetModuleList.getText(); + %moduleName = NewAssetTargetModule.getText(); if(%moduleName $= "") { diff --git a/Templates/BaseGame/game/tools/assetBrowser/scripts/popupMenus.cs b/Templates/BaseGame/game/tools/assetBrowser/scripts/popupMenus.cs index 0232166ad..859282dab 100644 --- a/Templates/BaseGame/game/tools/assetBrowser/scripts/popupMenus.cs +++ b/Templates/BaseGame/game/tools/assetBrowser/scripts/popupMenus.cs @@ -104,24 +104,24 @@ function AssetBrowser::buildPopupMenus(%this) class = "EditorWorldMenu"; //isPopup = true; - item[ 0 ] = "Material" TAB "" TAB "AssetBrowser.setupCreateNewAsset(\"MaterialAsset\", AssetBrowser.selectedModule);";//"createNewMaterialAsset(\"NewMaterial\", AssetBrowser.selectedModule);"; - item[ 1 ] = "Terrain Material" TAB "" TAB "AssetBrowser.setupCreateNewAsset(\"TerrainMaterialAsset\", AssetBrowser.selectedModule);";//"AssetBrowser.createNewImageAsset(\"NewImage\", AssetBrowser.selectedModule);"; - item[ 2 ] = "Image" TAB "" TAB "AssetBrowser.setupCreateNewAsset(\"ImageAsset\", AssetBrowser.selectedModule);";//"AssetBrowser.createNewImageAsset(\"NewImage\", AssetBrowser.selectedModule);"; + item[ 0 ] = "Create Material" TAB "" TAB "AssetBrowser.setupCreateNewAsset(\"MaterialAsset\", AssetBrowser.selectedModule);";//"createNewMaterialAsset(\"NewMaterial\", AssetBrowser.selectedModule);"; + item[ 1 ] = "Create Terrain Material" TAB "" TAB "AssetBrowser.setupCreateNewAsset(\"TerrainMaterialAsset\", AssetBrowser.selectedModule);";//"AssetBrowser.createNewImageAsset(\"NewImage\", AssetBrowser.selectedModule);"; + item[ 2 ] = "Create Image" TAB "" TAB "AssetBrowser.setupCreateNewAsset(\"ImageAsset\", AssetBrowser.selectedModule);";//"AssetBrowser.createNewImageAsset(\"NewImage\", AssetBrowser.selectedModule);"; item[ 3 ] = "-"; - item[ 4 ] = "Terrain Data" TAB "" TAB "AssetBrowser.setupCreateNewAsset(\"TerrainAsset\", AssetBrowser.selectedModule);"; + item[ 4 ] = "Create Terrain Data" TAB "" TAB "AssetBrowser.setupCreateNewAsset(\"TerrainAsset\", AssetBrowser.selectedModule);"; item[ 5 ] = "-"; - item[ 6 ] = "Shape" TAB "" TAB "AssetBrowser.setupCreateNewAsset(\"Shape\", AssetBrowser.selectedModule);"; - item[ 7 ] = "Shape Animation" TAB "" TAB "AssetBrowser.setupCreateNewAsset(\"ShapeAnimationAsset\", AssetBrowser.selectedModule);";//"AssetBrowser.createNewShapeAnimationAsset(\"NewShapeAnimation\", AssetBrowser.selectedModule);"; + 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 ] = "GUI" TAB "" TAB "AssetBrowser.setupCreateNewAsset(\"GUIAsset\", AssetBrowser.selectedModule);";//"AssetBrowser.createNewGUIAsset(\"NewGUI\", AssetBrowser.selectedModule);"; + item[ 9 ] = "Create GUI" TAB "" TAB "AssetBrowser.setupCreateNewAsset(\"GUIAsset\", AssetBrowser.selectedModule);";//"AssetBrowser.createNewGUIAsset(\"NewGUI\", AssetBrowser.selectedModule);"; item[ 10 ] = "-"; - item[ 11 ] = "Post Effect" TAB "" TAB "AssetBrowser.setupCreateNewAsset(\"PostEffectAsset\", AssetBrowser.selectedModule);";//"AssetBrowser.createNewPostEffectAsset(\"NewPostEffect\", AssetBrowser.selectedModule);"; + item[ 11 ] = "Create Post Effect" TAB "" TAB "AssetBrowser.setupCreateNewAsset(\"PostEffectAsset\", AssetBrowser.selectedModule);";//"AssetBrowser.createNewPostEffectAsset(\"NewPostEffect\", AssetBrowser.selectedModule);"; item[ 12 ] = "-"; - item[ 13 ] = "Sound" TAB "" TAB "AssetBrowser.setupCreateNewAsset(\"SoundAsset\", AssetBrowser.selectedModule);";//"AssetBrowser.createNewSoundAsset(\"NewSound\", AssetBrowser.selectedModule);"; + item[ 13 ] = "Create Sound" TAB "" TAB "AssetBrowser.setupCreateNewAsset(\"SoundAsset\", AssetBrowser.selectedModule);";//"AssetBrowser.createNewSoundAsset(\"NewSound\", AssetBrowser.selectedModule);"; item[ 14 ] = "-"; - item[ 15 ] = "Particle Effect" TAB "" TAB "AssetBrowser.setupCreateNewAsset(\"ParticleEffectAsset\", AssetBrowser.selectedModule);";//"AssetBrowser.createNewParticleEffectAsset(\"NewParticleEffect\", AssetBrowser.selectedModule);"; + item[ 15 ] = "Create Particle Effect" TAB "" TAB "AssetBrowser.setupCreateNewAsset(\"ParticleEffectAsset\", AssetBrowser.selectedModule);";//"AssetBrowser.createNewParticleEffectAsset(\"NewParticleEffect\", AssetBrowser.selectedModule);"; item[ 16 ] = "-"; - item[ 17 ] = "Cubemap" TAB "" TAB "AssetBrowser.setupCreateNewAsset(\"CubemapAsset\", AssetBrowser.selectedModule);"; + item[ 17 ] = "Create Cubemap" TAB "" TAB "AssetBrowser.setupCreateNewAsset(\"CubemapAsset\", AssetBrowser.selectedModule);"; }; } @@ -139,7 +139,7 @@ function AssetBrowser::buildPopupMenus(%this) item[ 3 ] = "Create Component Class" TAB "" TAB "AssetBrowser.setupCreateNewAsset(\"CppComponentAsset\", AssetBrowser.selectedModule);"; item[ 4 ] = "Create Script Class" TAB "" TAB "AssetBrowser.setupCreateNewAsset(\"CppScriptClass\", AssetBrowser.selectedModule);";*/ - item[ 0 ] = "C++ Class" TAB "" TAB "AssetBrowser.setupCreateNewAsset(\"CppAsset\", AssetBrowser.selectedModule);"; + item[ 0 ] = "Create C++ Class" TAB "" TAB "AssetBrowser.setupCreateNewAsset(\"CppAsset\", AssetBrowser.selectedModule);"; }; //%this.AddNewScriptAssetPopup.insertSubMenu(0, "Create Component", AddNewComponentAssetPopup); } @@ -151,17 +151,17 @@ function AssetBrowser::buildPopupMenus(%this) superClass = "MenuBuilder"; class = "EditorWorldMenu"; - item[0] = "Folder" TAB "" TAB "AssetBrowser.CreateNewFolder();"; + item[0] = "Create Folder" TAB "" TAB "AssetBrowser.CreateNewFolder();"; item[1] = "-"; - item[2] = "Code Asset" TAB AddNewScriptAssetPopup; + item[2] = "Create Code Asset" TAB AddNewScriptAssetPopup; item[3] = "-"; - item[4] = "Art Asset" TAB AddNewArtAssetPopup; + item[4] = "Create Art Asset" TAB AddNewArtAssetPopup; item[5] = "-"; - item[6] = "Level" TAB "" TAB "AssetBrowser.setupCreateNewAsset(\"LevelAsset\", AssetBrowser.selectedModule);";//"AssetBrowser.createNewLevelAsset(\"NewLevel\", AssetBrowser.selectedModule);"; + item[6] = "Create Level" TAB "" TAB "AssetBrowser.setupCreateNewAsset(\"LevelAsset\", AssetBrowser.selectedModule);";//"AssetBrowser.createNewLevelAsset(\"NewLevel\", AssetBrowser.selectedModule);"; item[7] = "-"; - item[8] = "C++ Asset" TAB AddNewCppAssetPopup; + item[8] = "Create C++ Asset" TAB AddNewCppAssetPopup; item[9] = "-"; - item[10] = "New Module" TAB "" TAB "AssetBrowser.CreateNewModule();"; + item[10] = "Create New Module" TAB "" TAB "AssetBrowser.CreateNewModule();"; }; } diff --git a/Templates/BaseGame/game/tools/componentEditor/interface/materialFieldType.cs b/Templates/BaseGame/game/tools/componentEditor/interface/materialFieldType.cs index 6a2de3108..589ba596f 100644 --- a/Templates/BaseGame/game/tools/componentEditor/interface/materialFieldType.cs +++ b/Templates/BaseGame/game/tools/componentEditor/interface/materialFieldType.cs @@ -215,14 +215,14 @@ function GuiInspectorComponentGroup::buildMaterialField(%this, %component, %fiel %matName = %currentMaterial.getInternalName(); if( %materialDef.diffuseMap $= "") - %previewImage = "core/art/warnmat"; + %previewImage = "core/rendering/images/warnmat"; else %previewImage = %materialDef.diffuseMap; } else if( %materialDef.toneMap[0] $= "" && %materialDef.diffuseMap[0] $= "" && !isObject(%materialDef.cubemap) ) { %matName = %materialDef.name; - %previewImage = "core/art/warnmat"; + %previewImage = "core/rendering/images/warnmat"; } else { diff --git a/Templates/BaseGame/game/tools/navEditor/NavEditorToolbar.gui b/Templates/BaseGame/game/tools/navEditor/NavEditorToolbar.gui index 68e74d32e..b38fd953a 100644 --- a/Templates/BaseGame/game/tools/navEditor/NavEditorToolbar.gui +++ b/Templates/BaseGame/game/tools/navEditor/NavEditorToolbar.gui @@ -40,7 +40,7 @@ canSaveDynamicFields = "0"; }; new GuiBitmapCtrl() { - bitmap = "core/art/gui/images/separator-h.png"; + bitmap = "core/gui/images/separator-h.png"; wrap = "0"; position = "90 3"; extent = "2 26"; diff --git a/Templates/BaseGame/game/tools/roadEditor/main.cs b/Templates/BaseGame/game/tools/roadEditor/main.cs index 25757a965..471c479ae 100644 --- a/Templates/BaseGame/game/tools/roadEditor/main.cs +++ b/Templates/BaseGame/game/tools/roadEditor/main.cs @@ -166,7 +166,7 @@ function RoadEditorPlugin::setEditorFunction( %this ) %terrainExists = parseMissionGroup( "TerrainBlock" ); if( %terrainExists == false ) - MessageBoxYesNoCancel("No Terrain","Would you like to create a New Terrain?", "Canvas.pushDialog(CreateNewTerrainGui);"); + MessageBoxYesNoCancel("No Terrain","Would you like to create a New Terrain?", "AssetBrowser.setupCreateNewAsset(\"TerrainAsset\", AssetBrowser.selectedModule, createTerrainBlock);"); return %terrainExists; } diff --git a/Templates/BaseGame/game/tools/shapeEditor/scripts/shapeEditor.ed.cs b/Templates/BaseGame/game/tools/shapeEditor/scripts/shapeEditor.ed.cs index 226473129..427fa62cf 100644 --- a/Templates/BaseGame/game/tools/shapeEditor/scripts/shapeEditor.ed.cs +++ b/Templates/BaseGame/game/tools/shapeEditor/scripts/shapeEditor.ed.cs @@ -3346,7 +3346,7 @@ function ShapeEdMountWindow::mountShape( %this, %slot ) %type = %this-->mountType.getText(); if ( %model $= "Browse..." ) - %model = "core/art/shapes/octahedron.dts"; + %model = "core/shapes/octahedron.dts"; if ( ShapeEdShapeView.mountShape( %model, %node, %type, %slot ) ) { diff --git a/Templates/BaseGame/game/tools/worldEditor/gui/guiTerrainMaterialDlg.ed.gui b/Templates/BaseGame/game/tools/worldEditor/gui/guiTerrainMaterialDlg.ed.gui index 47fdf9249..22a4b0ac6 100644 --- a/Templates/BaseGame/game/tools/worldEditor/gui/guiTerrainMaterialDlg.ed.gui +++ b/Templates/BaseGame/game/tools/worldEditor/gui/guiTerrainMaterialDlg.ed.gui @@ -164,7 +164,7 @@ canSaveDynamicFields = "0"; new GuiBitmapCtrl() { - bitmap = "core/art/gui/images/separator-v"; + bitmap = "core/gui/images/separator-v"; color = "White"; wrap = "0"; position = "1 0"; diff --git a/Templates/BaseGame/game/tools/worldEditor/scripts/editors/terrainEditor.ed.cs b/Templates/BaseGame/game/tools/worldEditor/scripts/editors/terrainEditor.ed.cs index 63d185541..3bd5d3b73 100644 --- a/Templates/BaseGame/game/tools/worldEditor/scripts/editors/terrainEditor.ed.cs +++ b/Templates/BaseGame/game/tools/worldEditor/scripts/editors/terrainEditor.ed.cs @@ -389,7 +389,9 @@ function TerrainEditorPlugin::setEditorFunction(%this) %terrainExists = parseMissionGroup( "TerrainBlock" ); if( %terrainExists == false ) - MessageBoxYesNoCancel("No Terrain","Would you like to create a New Terrain?", "Canvas.pushDialog(CreateNewTerrainGui);"); + MessageBoxYesNoCancel("No Terrain","Would you like to create a New Terrain? No to Select Existing Terrain Block Asset", + "AssetBrowser.setupCreateNewAsset(\"TerrainAsset\", AssetBrowser.selectedModule, createTerrainBlock);", + "AssetBrowser.showDialog(\"TerrainAsset\", createTerrainBlock, \"\", \"\", \"\");"); return %terrainExists; } @@ -399,7 +401,9 @@ function TerrainPainterPlugin::setEditorFunction(%this, %overrideGroup) %terrainExists = parseMissionGroup( "TerrainBlock" ); if( %terrainExists == false ) - MessageBoxYesNoCancel("No Terrain","Would you like to create a New Terrain?", "Canvas.pushDialog(CreateNewTerrainGui);"); + MessageBoxYesNoCancel("No Terrain","Would you like to create a New Terrain? No to Select Existing Terrain Block Asset", + "AssetBrowser.setupCreateNewAsset(\"TerrainAsset\", AssetBrowser.selectedModule, createTerrainBlock);", + "AssetBrowser.showDialog(\"TerrainAsset\", createTerrainBlock, \"\", \"\", \"\");"); return %terrainExists; } diff --git a/Templates/BaseGame/game/tools/worldEditor/scripts/interfaces/terrainMaterialDlg.ed.cs b/Templates/BaseGame/game/tools/worldEditor/scripts/interfaces/terrainMaterialDlg.ed.cs index ac969bb91..bc277ca9e 100644 --- a/Templates/BaseGame/game/tools/worldEditor/scripts/interfaces/terrainMaterialDlg.ed.cs +++ b/Templates/BaseGame/game/tools/worldEditor/scripts/interfaces/terrainMaterialDlg.ed.cs @@ -347,7 +347,7 @@ function TerrainMaterialDlg::newMat( %this ) %scene = getRootScene(); %path = filePath(%scene.getFilename()); - %module = AssetBrowser.getModuleFromAddress(%path); + %module = AssetBrowser.dirHandler.getModuleFromAddress(%path); AssetBrowser.selectedModule = %module.moduleID; AssetBrowser.dirHandler.currentAddress = "data/" @ %module.moduleID; @@ -575,7 +575,7 @@ function TerrainMaterialDlg::saveDirtyMaterial( %this, %mat ) %fileName = %mat.getFileName(); if( %fileName $= "" ) - %fileName = "art/terrains/materials.cs"; + %fileName = "data/terrains/materials.cs"; ETerrainMaterialPersistMan.setDirty( %mat, %fileName ); } @@ -663,7 +663,7 @@ function TerrainMaterialDlg::restoreMaterials( %this ) function TerrainMaterialDlg::_selectTextureFileDialog( %this, %defaultFileName ) { if( $Pref::TerrainEditor::LastPath $= "" ) - $Pref::TerrainEditor::LastPath = "art/terrains"; + $Pref::TerrainEditor::LastPath = "data/"; %dlg = new OpenFileDialog() { diff --git a/Templates/BaseGame/game/tools/worldEditor/scripts/menuHandlers.ed.cs b/Templates/BaseGame/game/tools/worldEditor/scripts/menuHandlers.ed.cs index c94b63dfe..097d0ddb7 100644 --- a/Templates/BaseGame/game/tools/worldEditor/scripts/menuHandlers.ed.cs +++ b/Templates/BaseGame/game/tools/worldEditor/scripts/menuHandlers.ed.cs @@ -332,7 +332,8 @@ function EditorSaveMissionAs( %levelAsset ) %missionName = %missionName @ ".mis"; //Make sure we have a selected module so we can create our module - Canvas.pushDialog(AssetBrowser_selectModule); + //if(AssetBrowser.selectedModule $= "") + // Canvas.pushDialog( } function EditorOpenMission(%levelAsset) diff --git a/Templates/BaseGame/game/tools/worldEditor/scripts/menus.ed.cs b/Templates/BaseGame/game/tools/worldEditor/scripts/menus.ed.cs index fcc2887d9..c864f6946 100644 --- a/Templates/BaseGame/game/tools/worldEditor/scripts/menus.ed.cs +++ b/Templates/BaseGame/game/tools/worldEditor/scripts/menus.ed.cs @@ -149,7 +149,9 @@ function EditorGui::buildMenus(%this) %fileMenu.appendItem( "-" ); } - %fileMenu.appendItem("Create Blank Terrain" TAB "" TAB "Canvas.pushDialog( CreateNewTerrainGui );"); + //%fileMenu.appendItem("Create Blank Terrain" TAB "" TAB "Canvas.pushDialog( CreateNewTerrainGui );"); + %fileMenu.appendItem("Create Blank Terrain" TAB "" TAB "AssetBrowser.setupCreateNewAsset(\"TerrainAsset\", AssetBrowser.selectedModule, createTerrainBlock);"); + %fileMenu.appendItem("Import Terrain Heightmap" TAB "" TAB "Canvas.pushDialog( TerrainImportGui );"); %fileMenu.appendItem("Export Terrain Heightmap" TAB "" TAB "Canvas.pushDialog( TerrainExportGui );");