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

This commit is contained in:
AzaezelX 2019-11-07 01:39:50 -06:00
commit 062e6f3364
95 changed files with 4237 additions and 2024 deletions

View file

@ -38,7 +38,73 @@
//----------------------------------------------------------------------------
// Phase 1
//----------------------------------------------------------------------------
function clientCmdMissionStartPhase1(%seq, %missionName)
$pref::Client::EnableDatablockCache = true;
$pref::Client::DatablockCacheFilename = "data/cache/client/datablock_cache_c.dbc";
function clientCmdMissionStartPhase1_LoadCache(%seq, %missionName)
{
if ($pref::Client::EnableDatablockCache && $loadFromDatablockCache)
{
if (!$pref::Video::disableVerticalSync)
{
warn("Disabling Vertical Sync during datablock cache load to avoid significant slowdown.");
$AFX_tempDisableVSync = true;
$pref::Video::disableVerticalSync = true;
Canvas.resetVideoMode();
}
echo("<<<< Loading Datablocks From Cache >>>>");
if (ServerConnection.loadDatablockCache_Begin())
{
schedule(10, 0, "updateLoadDatablockCacheProgress", %seq, %missionName);
}
}
}
function updateLoadDatablockCacheProgress(%seq, %missionName)
{
if (ServerConnection.loadDatablockCache_Continue())
{
$loadDatablockCacheProgressThread = schedule(10, 0, "updateLoadDatablockCacheProgress", %seq, %missionName);
return;
}
if ($AFX_tempDisableVSync)
{
warn("Restoring Vertical Sync setting.");
$AFX_tempDisableVSync = false;
$pref::Video::disableVerticalSync = false;
Canvas.resetVideoMode();
}
echo("<<<< Finished Loading Datablocks From Cache >>>>");
clientCmdMissionStartPhase2(%seq,%missionName);
}
function updateLoadDatablockCacheProgress(%seq, %missionName)
{
if (ServerConnection.loadDatablockCache_Continue())
{
$loadDatablockCacheProgressThread = schedule(10, 0, "updateLoadDatablockCacheProgress", %seq, %missionName);
return;
}
if ($AFX_tempDisableVSync)
{
warn("Restoring Vertical Sync setting.");
$AFX_tempDisableVSync = false;
$pref::Video::disableVerticalSync = false;
Canvas.resetVideoMode();
}
echo("<<<< Finished Loading Datablocks From Cache >>>>");
clientCmdMissionStartPhase2(%seq,%missionName);
}
function clientCmdMissionStartPhase1(%seq, %missionName, %cache_crc)
{
// These need to come after the cls.
echo ("*** New Mission: " @ %missionName);
@ -61,6 +127,56 @@ function clientCmdMissionStartPhase1(%seq, %missionName)
PostFXManager::settingsApplyDefaultPreset();
}
$loadFromDatablockCache = false;
if ($pref::Client::EnableDatablockCache)
{
%cache_filename = $pref::Client::DatablockCacheFilename;
// if cache CRC is provided, check for validity
if (%cache_crc !$= "")
{
// check for existence of cache file
if (isFile(%cache_filename))
{
// here we are not comparing the CRC of the cache itself, but the CRC of
// the server cache (stored in the header) when these datablocks were
// transmitted.
%my_cache_crc = extractDatablockCacheCRC(%cache_filename);
echo("<<<< client cache CRC:" SPC %my_cache_crc SPC ">>>>");
echo("<<<< comparing CRC codes:" SPC "s:" @ %cache_crc SPC "c:" @ %my_cache_crc SPC ">>>>");
if (%my_cache_crc == %cache_crc)
{
echo("<<<< cache CRC codes match, datablocks will be loaded from local cache. >>>>");
$loadFromDatablockCache = true;
}
else
{
echo("<<<< cache CRC codes differ, datablocks will be transmitted and cached. >>>>" SPC %cache_crc);
setDatablockCacheCRC(%cache_crc);
}
}
else
{
echo("<<<< client datablock cache does not exist, datablocks will be transmitted and cached. >>>>");
setDatablockCacheCRC(%cache_crc);
}
}
else
{
echo("<<<< server datablock caching is disabled, datablocks will be transmitted. >>>>");
}
if ($loadFromDatablockCache)
{
// skip datablock transmission and initiate a cache load
commandToServer('MissionStartPhase1Ack_UseCache', %seq);
return;
}
}
else if (%cache_crc !$= "")
{
echo("<<<< client datablock caching is disabled, datablocks will be transmitted. >>>>");
}
onMissionDownloadPhase("LOADING DATABLOCKS");
commandToServer('MissionStartPhase1Ack', %seq);
@ -164,7 +280,7 @@ function connect(%server)
{
%conn = new GameConnection(ServerConnection);
RootGroup.add(ServerConnection);
%conn.setConnectArgs($pref::Player::Name);
%conn.setConnectArgs($pref::Player::Name, $ConncetInfoKey);
%conn.setJoinPassword($Client::Password);
%conn.connect(%server);
}

View file

@ -46,8 +46,6 @@ $Pref::Server::ConnectionError =
// overrides pref::net::port for dedicated servers
$Pref::Server::Port = 28000;
$Pref::Server::EnableDatablockCache = true;
$Pref::Server::DatablockCacheFilename = "core/clientServer/scripts/server/afx/cache/afx_datablock_cache.dbc";
// If the password is set, clients must provide it in order
// to connect to the server

View file

@ -38,8 +38,26 @@
//----------------------------------------------------------------------------
// Phase 1
//----------------------------------------------------------------------------
$Pref::Server::EnableDatablockCache = true;
$pref::Server::DatablockCacheFilename = "data/cache/server/datablock_cache_c.dbc";
function GameConnection::loadMission(%this)
{
%cache_crc = "";
if ($Pref::Server::EnableDatablockCache)
{
if (!isDatablockCacheSaved())
{
echo("<<<< saving server datablock cache >>>>");
%this.saveDatablockCache();
}
if (isFile($Pref::Server::DatablockCacheFilename))
{
%cache_crc = getDatablockCacheCRC();
echo(" <<<< sending CRC to client:" SPC %cache_crc SPC ">>>>");
}
}
// Send over the information that will display the server info
// when we learn it got there, we'll send the data blocks
%this.currentPhase = 0;
@ -50,12 +68,41 @@ function GameConnection::loadMission(%this)
}
else
{
commandToClient(%this, 'MissionStartPhase1', $missionSequence, $Server::MissionFile);
commandToClient(%this, 'MissionStartPhase1', $missionSequence, $Server::MissionFile, %cache_crc);
echo("*** Sending mission load to client: " @ $Server::MissionFile);
}
}
function serverCmdMissionStartPhase1Ack_UseCache(%client, %seq)
{
echo("<<<< client will load datablocks from a cache >>>>");
echo(" <<<< skipping datablock transmission >>>>");
// Make sure to ignore calls from a previous mission load
if (%seq != $missionSequence || !$MissionRunning)
return;
if (%client.currentPhase != 0)
return;
%client.currentPhase = 1;
// Start with the CRC
%client.setMissionCRC( $missionCRC );
%client.onBeginDatablockCacheLoad($missionSequence);
}
function GameConnection::onBeginDatablockCacheLoad( %this, %missionSequence )
{
// Make sure to ignore calls from a previous mission load
if (%missionSequence != $missionSequence)
return;
if (%this.currentPhase != 1)
return;
%this.currentPhase = 1.5;
commandToClient(%this, 'MissionStartPhase1_LoadCache', $missionSequence, $Server::MissionFile);
}
function serverCmdMissionStartPhase1Ack(%client, %seq)
{
// Make sure to ignore calls from a previous mission load
@ -157,14 +204,6 @@ function serverCmdMissionStartPhase3Ack(%client, %seq)
// Set the control object to the default camera
if (!isObject(%client.camera))
{
if(!isObject(Observer))
{
datablock CameraData(Observer)
{
mode = "Observer";
};
}
//if (isDefined("$Game::DefaultCameraClass"))
%client.camera = spawnObject("Camera", Observer);
}

View file

@ -204,10 +204,11 @@ function onServerCreated()
loadDatablockFiles( DatablockFilesList, true );
callOnModules("onServerScriptExec", "Core");
callOnModules("onServerScriptExec", "Game");
// Keep track of when the game started
$Game::StartTime = $Sim::Time;
onServerCreatedAFX();
}
/// Shut down the server
@ -283,6 +284,9 @@ function onServerDestroyed()
MissionCleanup.delete();
clearServerPaths();
if ($Pref::Server::EnableDatablockCache)
resetDatablockCache();
}
/// Guid list maintenance functions

View file

@ -1,4 +1,4 @@
new ShaderData( BasicRibbonShader )
singleton ShaderData( BasicRibbonShader )
{
DXVertexShaderFile = $Core::CommonShaderPath @ "/ribbons/basicRibbonShaderV.hlsl";
DXPixelShaderFile = $Core::CommonShaderPath @ "/ribbons/basicRibbonShaderP.hlsl";
@ -26,7 +26,7 @@ singleton CustomMaterial( BasicRibbonMat )
preload = true;
};
new ShaderData( TexturedRibbonShader )
singleton ShaderData( TexturedRibbonShader )
{
DXVertexShaderFile = $Core::CommonShaderPath @ "/ribbons/texRibbonShaderV.hlsl";
DXPixelShaderFile = $Core::CommonShaderPath @ "/ribbons/texRibbonShaderP.hlsl";

View file

@ -22,7 +22,7 @@
// Vector Light State
new GFXStateBlockData( AL_VectorLightState )
singleton GFXStateBlockData( AL_VectorLightState )
{
blendDefined = true;
blendEnable = true;
@ -48,9 +48,7 @@ new GFXStateBlockData( AL_VectorLightState )
mSamplerNames[1] = "shadowMap";
samplerStates[2] = SamplerClampPoint; // Shadow Map (Do not change this to linear, as all cards can not filter equally.)
mSamplerNames[2] = "dynamicShadowMap";
samplerStates[3] = SamplerClampLinear; // SSAO Mask
mSamplerNames[3] = "ssaoMask";
samplerStates[4] = SamplerWrapPoint; // Random Direction Map
samplerStates[3] = SamplerWrapPoint; // Random Direction Map
cullDefined = true;
cullMode = GFXCullNone;
@ -61,7 +59,7 @@ new GFXStateBlockData( AL_VectorLightState )
};
// Vector Light Material
new ShaderData( AL_VectorLightShader )
singleton shaderData( AL_VectorLightShader )
{
DXVertexShaderFile = $Core::CommonShaderPath @ "/lighting/advanced/farFrustumQuadV.hlsl";
DXPixelShaderFile = $Core::CommonShaderPath @ "/lighting/advanced/vectorLightP.hlsl";
@ -72,11 +70,10 @@ new ShaderData( AL_VectorLightShader )
samplerNames[0] = "$deferredBuffer";
samplerNames[1] = "$shadowMap";
samplerNames[2] = "$dynamicShadowMap";
samplerNames[3] = "$ssaoMask";
samplerNames[4] = "$gTapRotationTex";
samplerNames[5] = "$lightBuffer";
samplerNames[6] = "$colorBuffer";
samplerNames[7] = "$matInfoBuffer";
samplerNames[3] = "$gTapRotationTex";
samplerNames[4] = "$lightBuffer";
samplerNames[5] = "$colorBuffer";
samplerNames[6] = "$matInfoBuffer";
pixVersion = 3.0;
};
@ -89,7 +86,6 @@ new CustomMaterial( AL_VectorLightMaterial )
sampler["deferredBuffer"] = "#deferred";
sampler["shadowMap"] = "$dynamiclight";
sampler["dynamicShadowMap"] = "$dynamicShadowMap";
sampler["ssaoMask"] = "#ssaoMask";
sampler["lightBuffer"] = "#specularLighting";
sampler["colorBuffer"] = "#color";
sampler["matInfoBuffer"] = "#matinfo";
@ -102,7 +98,7 @@ new CustomMaterial( AL_VectorLightMaterial )
//------------------------------------------------------------------------------
// Convex-geometry light states
new GFXStateBlockData( AL_ConvexLightState )
singleton GFXStateBlockData( AL_ConvexLightState )
{
blendDefined = true;
blendEnable = true;
@ -140,7 +136,7 @@ new GFXStateBlockData( AL_ConvexLightState )
};
// Point Light Material
new ShaderData( AL_PointLightShader )
singleton shaderData( AL_PointLightShader )
{
DXVertexShaderFile = $Core::CommonShaderPath @ "/lighting/advanced/convexGeometryV.hlsl";
DXPixelShaderFile = $Core::CommonShaderPath @ "/lighting/advanced/pointLightP.hlsl";
@ -179,7 +175,7 @@ new CustomMaterial( AL_PointLightMaterial )
};
// Spot Light Material
new ShaderData( AL_SpotLightShader )
singleton shaderData( AL_SpotLightShader )
{
DXVertexShaderFile = $Core::CommonShaderPath @ "/lighting/advanced/convexGeometryV.hlsl";
DXPixelShaderFile = $Core::CommonShaderPath @ "/lighting/advanced/spotLightP.hlsl";
@ -256,7 +252,7 @@ new Material( AL_DefaultShadowMaterial )
};
// Particle System Point Light Material
new ShaderData( AL_ParticlePointLightShader )
singleton shaderData( AL_ParticlePointLightShader )
{
DXVertexShaderFile = $Core::CommonShaderPath @ "/lighting/advanced/particlePointLightV.hlsl";
DXPixelShaderFile = $Core::CommonShaderPath @ "/lighting/advanced/particlePointLightP.hlsl";
@ -281,7 +277,7 @@ new CustomMaterial( AL_ParticlePointLightMaterial )
};
//Probe Processing
new ShaderData( IrradianceShader )
singleton shaderData( IrradianceShader )
{
DXVertexShaderFile = $Core::CommonShaderPath @ "/lighting/advanced/cubemapV.hlsl";
DXPixelShaderFile = $Core::CommonShaderPath @ "/lighting/advanced/irradianceP.hlsl";
@ -294,7 +290,7 @@ new ShaderData( IrradianceShader )
pixVersion = 3.0;
};
new ShaderData( PrefiterCubemapShader )
singleton shaderData( PrefiterCubemapShader )
{
DXVertexShaderFile = $Core::CommonShaderPath @ "/lighting/advanced/cubemapV.hlsl";
DXPixelShaderFile = $Core::CommonShaderPath @ "/lighting/advanced/prefilterP.hlsl";
@ -322,6 +318,7 @@ singleton ShaderData( PFX_ReflectionProbeArray )
samplerNames[3] = "$BRDFTexture";
samplerNames[4] = "$specularCubemapAR";
samplerNames[5] = "$irradianceCubemapAR";
samplerNames[6] = "$ssaoMask";
pixVersion = 2.0;
};
@ -350,4 +347,5 @@ singleton GFXStateBlockData( PFX_ReflectionProbeArrayStateBlock )
samplerStates[3] = SamplerClampPoint;
samplerStates[4] = SamplerClampLinear;
samplerStates[5] = SamplerClampLinear;
samplerStates[6] = SamplerClampPoint;
};

View file

@ -9,7 +9,7 @@ singleton ShaderData( DeferredColorShader )
pixVersion = 2.0;
};
new GFXStateBlockData( AL_DeferredCaptureState : PFX_DefaultStateBlock )
singleton GFXStateBlockData( AL_DeferredCaptureState : PFX_DefaultStateBlock )
{
blendEnable = false;
@ -27,7 +27,7 @@ new GFXStateBlockData( AL_DeferredCaptureState : PFX_DefaultStateBlock )
samplerStates[4] = SamplerWrapLinear;
};
new ShaderData( AL_ProbeShader )
singleton shaderData( AL_ProbeShader )
{
DXVertexShaderFile = $Core::CommonShaderPath @ "/postFX/postFxV.hlsl";
DXPixelShaderFile = $Core::CommonShaderPath @ "/lighting/advanced/probeShadingP.hlsl";

View file

@ -21,7 +21,7 @@
//-----------------------------------------------------------------------------
new ShaderData(BlurDepthShader)
singleton shaderData(BlurDepthShader)
{
DXVertexShaderFile = $Core::CommonShaderPath @ "/lighting/shadowMap/boxFilterV.hlsl";
DXPixelShaderFile = $Core::CommonShaderPath @ "/lighting/shadowMap/boxFilterP.hlsl";

View file

@ -146,7 +146,7 @@ singleton PostEffect( VolFogGlowPostFx )
texture[0] = "$backbuffer";
target = "$outTex";
targetScale = "0.5 0.5";
isEnabled = true;
isEnabled = false;
// Blur vertically
new PostEffect()
{

View file

@ -328,7 +328,7 @@ function HDRPostFX::onAdd( %this )
PostFXManager.registerPostEffect(%this);
//HDR should really be on at all times
%this.enable();
//%this.enable();
$HDRPostFX::enableToneMapping = 1;
}

View file

@ -35,8 +35,6 @@ singleton ShaderData( PFX_PassthruShader )
function postFXInit()
{
exec("core/postFX/guis/postFxManager.gui");
//Load the core postFX files themselves
if (!$Server::Dedicated)
{

View file

@ -34,7 +34,7 @@ $sequence = 16;
// Common stateblock definitions
new GFXSamplerStateData(SamplerClampLinear)
singleton GFXSamplerStateData(SamplerClampLinear)
{
textureColorOp = GFXTOPModulate;
addressModeU = GFXAddressClamp;
@ -45,7 +45,7 @@ new GFXSamplerStateData(SamplerClampLinear)
mipFilter = GFXTextureFilterLinear;
};
new GFXSamplerStateData(SamplerClampPoint)
singleton GFXSamplerStateData(SamplerClampPoint)
{
textureColorOp = GFXTOPModulate;
addressModeU = GFXAddressClamp;
@ -56,7 +56,7 @@ new GFXSamplerStateData(SamplerClampPoint)
mipFilter = GFXTextureFilterPoint;
};
new GFXSamplerStateData(SamplerWrapLinear)
singleton GFXSamplerStateData(SamplerWrapLinear)
{
textureColorOp = GFXTOPModulate;
addressModeU = GFXTextureAddressWrap;
@ -67,7 +67,7 @@ new GFXSamplerStateData(SamplerWrapLinear)
mipFilter = GFXTextureFilterLinear;
};
new GFXSamplerStateData(SamplerWrapPoint)
singleton GFXSamplerStateData(SamplerWrapPoint)
{
textureColorOp = GFXTOPModulate;
addressModeU = GFXTextureAddressWrap;

View file

@ -20,7 +20,7 @@
// IN THE SOFTWARE.
//-----------------------------------------------------------------------------
new GFXStateBlockData( ScatterSkySBData )
singleton GFXStateBlockData( ScatterSkySBData )
{
cullMode = "GFXCullNone";

View file

@ -57,7 +57,7 @@ singleton ShaderData( OffscreenParticleCompositeShaderData )
//-----------------------------------------------------------------------------
// Planar Reflection
//-----------------------------------------------------------------------------
new ShaderData( ReflectBump )
singleton shaderData( ReflectBump )
{
DXVertexShaderFile = $Core::CommonShaderPath @ "/planarReflectBumpV.hlsl";
DXPixelShaderFile = $Core::CommonShaderPath @ "/planarReflectBumpP.hlsl";
@ -72,7 +72,7 @@ new ShaderData( ReflectBump )
pixVersion = 2.0;
};
new ShaderData( Reflect )
singleton shaderData( Reflect )
{
DXVertexShaderFile = $Core::CommonShaderPath @ "/planarReflectV.hlsl";
DXPixelShaderFile = $Core::CommonShaderPath @ "/planarReflectP.hlsl";
@ -89,7 +89,7 @@ new ShaderData( Reflect )
//-----------------------------------------------------------------------------
// fxFoliageReplicator
//-----------------------------------------------------------------------------
new ShaderData( fxFoliageReplicatorShader )
singleton shaderData( fxFoliageReplicatorShader )
{
DXVertexShaderFile = $Core::CommonShaderPath @ "/fxFoliageReplicatorV.hlsl";
DXPixelShaderFile = $Core::CommonShaderPath @ "/fxFoliageReplicatorP.hlsl";

View file

@ -45,7 +45,7 @@ singleton ShaderData( WaterShader )
pixVersion = 3.0;
};
new GFXSamplerStateData(WaterSampler)
singleton GFXSamplerStateData(WaterSampler)
{
textureColorOp = GFXTOPModulate;
addressModeU = GFXAddressWrap;

View file

@ -81,6 +81,7 @@ struct Surface
float NdotV; // cos(angle between normal and view vector)
vec3 f0; // fresnel value (rgb)
float f90;
vec3 albedo; // diffuse light absorbtion value (rgb)
vec3 R; // reflection vector
vec3 F; // fresnel term computed from f0, N and V
@ -93,8 +94,8 @@ void updateSurface(inout Surface surface)
surface.albedo = surface.baseColor.rgb * (1.0 - surface.metalness);
surface.f0 = lerp(vec3(0.04f), surface.baseColor.rgb, surface.metalness);
surface.R = -reflect(surface.V, surface.N);
float f90 = saturate(50.0 * dot(surface.f0, vec3(0.33,0.33,0.33)));
surface.F = F_Schlick(surface.f0, f90, surface.NdotV);
surface.f90 = saturate(50.0 * dot(surface.f0, vec3(0.33,0.33,0.33)));
surface.F = F_Schlick(surface.f0, surface.f90, surface.NdotV);
}
Surface createSurface(vec4 normDepth, sampler2D colorBuffer, sampler2D matInfoBuffer, in vec2 uv, in vec3 wsEyePos, in vec3 wsEyeRay, in mat4 invView)
@ -229,6 +230,11 @@ vec3 getPunctualLight(in Surface surface, in SurfaceToLight surfaceToLight, vec3
return final;
}
float computeSpecOcclusion( float NdotV , float AO , float roughness )
{
return saturate (pow( abs(NdotV + AO) , exp2 ( -16.0f * roughness - 1.0f )) - 1.0f + AO );
}
vec4 compute4Lights( Surface surface,
vec4 shadowMask,
vec4 inLightPos[4],
@ -421,20 +427,18 @@ vec4 computeForwardProbes(Surface surface,
specular = mix(specular,textureLod(specularCubemapAR, vec4(surface.R, skylightCubemapIdx), lod).xyz, alpha);
}
vec3 F = FresnelSchlickRoughness(surface.NdotV, surface.f0, surface.roughness);
//energy conservation
vec3 kD = vec3(1.0,1.0,1.0) - F;
kD *= 1.0 - surface.metalness;
vec3 kD = 1.0f - surface.F;
kD *= 1.0f - surface.metalness;
//apply brdf
//Do it once to save on texture samples
vec2 brdf = textureLod(BRDFTexture, vec2(surface.roughness, 1.0-surface.NdotV),0).xy;
specular *= brdf.x * F + brdf.y;
float dfgNdotV = max( surface.NdotV , 0.0009765625f ); //0.5f/512.0f (512 is size of dfg/brdf lookup tex)
vec2 envBRDF = textureLod(BRDFTexture, vec2(dfgNdotV, surface.roughness),0).rg;
specular *= surface.F * envBRDF.x + surface.f90 * envBRDF.y;
irradiance *= kD * surface.baseColor.rgb;
//final diffuse color
vec3 diffuse = kD * irradiance * surface.baseColor.rgb;
vec4 finalColor = vec4(diffuse + specular * surface.ao, 1.0);
//AO
irradiance *= surface.ao;
specular *= computeSpecOcclusion(surface.NdotV, surface.ao, surface.roughness);
return finalColor;
return vec4(irradiance + specular, 0);//alpha writes disabled
}

View file

@ -85,6 +85,7 @@ struct Surface
float3 albedo; // diffuse light absorbtion value (rgb)
float3 R; // reflection vector
float3 F; // fresnel term computed from f0, N and V
float f90;
inline void Update()
{
@ -94,7 +95,7 @@ struct Surface
f0 = lerp(0.04.xxx, baseColor.rgb, metalness);
R = -reflect(V, N);
float f90 = saturate(50.0 * dot(f0, 0.33));
f90 = saturate(50.0 * dot(f0, 0.33));
F = F_Schlick(f0, f90, NdotV);
}
};
@ -235,6 +236,11 @@ inline float3 getPunctualLight(in Surface surface, in SurfaceToLight surfaceToLi
return final;
}
float computeSpecOcclusion( float NdotV , float AO , float roughness )
{
return saturate (pow( abs(NdotV + AO) , exp2 ( -16.0f * roughness - 1.0f )) - 1.0f + AO );
}
float4 compute4Lights( Surface surface,
float4 shadowMask,
float4 inLightPos[4],
@ -462,19 +468,18 @@ float4 computeForwardProbes(Surface surface,
specular = lerp(specular,TORQUE_TEXCUBEARRAYLOD(specularCubemapAR, surface.R, skylightCubemapIdx, lod).xyz,alpha);
}
float3 F = FresnelSchlickRoughness(surface.NdotV, surface.f0, surface.roughness);
//energy conservation
float3 kD = 1.0.xxx - F;
kD *= 1.0 - surface.metalness;
float3 kD = 1.0f - surface.F;
kD *= 1.0f - surface.metalness;
//apply brdf
//Do it once to save on texture samples
float2 brdf = TORQUE_TEX2DLOD(BRDFTexture,float4(surface.roughness, 1.0-surface.NdotV, 0.0, 0.0)).xy;
specular *= brdf.x * F + brdf.y;
float dfgNdotV = max( surface.NdotV , 0.0009765625f ); //0.5f/512.0f (512 is size of dfg/brdf lookup tex)
float2 envBRDF = TORQUE_TEX2DLOD(BRDFTexture, float4(dfgNdotV, surface.roughness,0,0)).rg;
specular *= surface.F * envBRDF.x + surface.f90 * envBRDF.y;
irradiance *= kD * surface.baseColor.rgb;
//final diffuse color
float3 diffuse = kD * irradiance * surface.baseColor.rgb;
float4 finalColor = float4(diffuse* surface.ao + specular * surface.ao, 1.0);
return finalColor;
//AO
irradiance *= surface.ao;
specular *= computeSpecOcclusion(surface.NdotV, surface.ao, surface.roughness);
return float4(irradiance + specular, 0);//alpha writes disabled
}

View file

@ -24,6 +24,11 @@ uniform int numProbes;
uniform samplerCubeArray specularCubemapAR;
uniform samplerCubeArray irradianceCubemapAR;
#ifdef USE_SSAO_MASK
uniform sampler2D ssaoMask;
uniform vec4 rtParams6;
#endif
uniform vec4 inProbePosArray[MAX_PROBES];
uniform vec4 inRefPosArray[MAX_PROBES];
uniform mat4 worldToObjArray[MAX_PROBES];
@ -52,6 +57,12 @@ void main()
{
discard;
}
#ifdef USE_SSAO_MASK
float ssao = 1.0 - texture( ssaoMask, viewportCoordToRenderTarget( uv0.xy, rtParams6 ) ).r;
surface.ao = min(surface.ao, ssao);
#endif
float alpha = 1;
@ -190,20 +201,19 @@ void main()
return;
#endif
vec3 F = FresnelSchlickRoughness(surface.NdotV, surface.f0, surface.roughness);
//energy conservation
vec3 kD = vec3(1,1,1) - F;
kD *= 1.0 - surface.metalness;
vec3 kD = 1.0f - surface.F;
kD *= 1.0f - surface.metalness;
//apply brdf
//Do it once to save on texture samples
vec2 brdf = textureLod(BRDFTexture, vec2(surface.roughness, surface.NdotV),0).xy;
specular *= brdf.x * F + brdf.y;
float dfgNdotV = max( surface.NdotV , 0.0009765625f ); //0.5f/512.0f (512 is size of dfg/brdf lookup tex)
vec2 envBRDF = textureLod(BRDFTexture, vec2(dfgNdotV, surface.roughness),0).rg;
specular *= surface.F * envBRDF.x + surface.f90 * envBRDF.y;
irradiance *= kD * surface.baseColor.rgb;
//final diffuse color
vec3 diffuse = kD * irradiance * surface.baseColor.rgb;
vec4 finalColor = vec4(diffuse + specular * surface.ao, 1.0);
//AO
irradiance *= surface.ao;
specular *= computeSpecOcclusion(surface.NdotV, surface.ao, surface.roughness);
OUT_col = finalColor;
OUT_col = vec4(irradiance + specular, 0);//alpha writes disabled
}

View file

@ -37,11 +37,6 @@ uniform sampler2D deferredBuffer;
uniform sampler2D shadowMap;
uniform sampler2D dynamicShadowMap;
#ifdef USE_SSAO_MASK
uniform sampler2D ssaoMask ;
uniform vec4 rtParams3;
#endif
uniform sampler2D colorBuffer;
uniform sampler2D matInfoBuffer;
uniform float lightBrightness;
@ -245,10 +240,6 @@ void main()
#endif
#endif //NO_SHADOW
// Sample the AO texture.
#ifdef USE_SSAO_MASK
surface.ao *= 1.0 - texture( ssaoMask, viewportCoordToRenderTarget( uv0.xy, rtParams3 ) ).r;
#endif
//get directional light contribution
vec3 lighting = getDirectionalLight(surface, surfaceToLight, lightingColor.rgb, lightBrightness, shadow);

View file

@ -21,6 +21,11 @@ uniform int numProbes;
TORQUE_UNIFORM_SAMPLERCUBEARRAY(specularCubemapAR, 4);
TORQUE_UNIFORM_SAMPLERCUBEARRAY(irradianceCubemapAR, 5);
#ifdef USE_SSAO_MASK
TORQUE_UNIFORM_SAMPLER2D(ssaoMask, 6);
uniform float4 rtParams6;
#endif
uniform float4 inProbePosArray[MAX_PROBES];
uniform float4 inRefPosArray[MAX_PROBES];
uniform float4x4 worldToObjArray[MAX_PROBES];
@ -49,6 +54,11 @@ float4 main(PFXVertToPix IN) : SV_TARGET
return TORQUE_TEX2D(colorBuffer, IN.uv0.xy);
}
#ifdef USE_SSAO_MASK
float ssao = 1.0 - TORQUE_TEX2D( ssaoMask, viewportCoordToRenderTarget( IN.uv0.xy, rtParams6 ) ).r;
surface.ao = min(surface.ao, ssao);
#endif
float alpha = 1;
#if SKYLIGHT_ONLY == 0
@ -182,19 +192,18 @@ float4 main(PFXVertToPix IN) : SV_TARGET
return float4(irradiance, 1);
#endif
float3 F = FresnelSchlickRoughness(surface.NdotV, surface.f0, surface.roughness);
//energy conservation
float3 kD = 1.0.xxx - F;
kD *= 1.0 - surface.metalness;
float3 kD = 1.0f - surface.F;
kD *= 1.0f - surface.metalness;
//apply brdf
//Do it once to save on texture samples
float2 brdf = TORQUE_TEX2DLOD(BRDFTexture, float4(surface.roughness, 1.0-surface.NdotV, 0.0, 0.0)).xy;
specular *= brdf.x * F + brdf.y;
float dfgNdotV = max( surface.NdotV , 0.0009765625f ); //0.5f/512.0f (512 is size of dfg/brdf lookup tex)
float2 envBRDF = TORQUE_TEX2DLOD(BRDFTexture, float4(dfgNdotV, surface.roughness,0,0)).rg;
specular *= surface.F * envBRDF.x + surface.f90 * envBRDF.y;
irradiance *= kD * surface.baseColor.rgb;
//final diffuse color
float3 diffuse = kD * irradiance * surface.baseColor.rgb;
float4 finalColor = float4(diffuse* surface.ao + specular * surface.ao, 1.0);
return finalColor;
//AO
irradiance *= surface.ao;
specular *= computeSpecOcclusion(surface.NdotV, surface.ao, surface.roughness);
return float4(irradiance + specular, 0);//alpha writes disabled
}

View file

@ -70,7 +70,7 @@ static float2 sNonUniformTaps[NUM_PRE_TAPS] =
/// The texture used to do per-pixel pseudorandom
/// rotations of the filter taps.
TORQUE_UNIFORM_SAMPLER2D(gTapRotationTex, 4);
TORQUE_UNIFORM_SAMPLER2D(gTapRotationTex, 3);
float softShadow_sampleTaps( TORQUE_SAMPLER2D(shadowMap1),
float2 sinCos,

View file

@ -33,13 +33,8 @@ TORQUE_UNIFORM_SAMPLER2D(deferredBuffer, 0);
TORQUE_UNIFORM_SAMPLER2D(shadowMap, 1);
TORQUE_UNIFORM_SAMPLER2D(dynamicShadowMap, 2);
#ifdef USE_SSAO_MASK
TORQUE_UNIFORM_SAMPLER2D(ssaoMask, 3);
uniform float4 rtParams3;
#endif
TORQUE_UNIFORM_SAMPLER2D(colorBuffer, 6);
TORQUE_UNIFORM_SAMPLER2D(matInfoBuffer, 7);
TORQUE_UNIFORM_SAMPLER2D(colorBuffer, 5);
TORQUE_UNIFORM_SAMPLER2D(matInfoBuffer, 6);
uniform float lightBrightness;
uniform float3 lightDirection;
@ -234,10 +229,6 @@ float4 main(FarFrustumQuadConnectP IN) : SV_TARGET
#endif
#endif //NO_SHADOW
// Sample the AO texture.
#ifdef USE_SSAO_MASK
surface.ao *= 1.0 - TORQUE_TEX2D( ssaoMask, viewportCoordToRenderTarget( IN.uv0.xy, rtParams3 ) ).r;
#endif
//get directional light contribution
float3 lighting = getDirectionalLight(surface, surfaceToLight, lightingColor.rgb, lightBrightness, shadow);

View file

@ -1,5 +1,12 @@
$traceModuleCalls=false;
$reportModuleFileConflicts=true;
if (!isObject(ExecFilesList))
new ArrayObject(ExecFilesList);
function callOnModules(%functionName, %moduleGroup)
{
//clear per module group file execution chain
ExecFilesList.empty();
//Get our modules so we can exec any specific client-side loading/handling
%modulesList = ModuleDatabase.findModules(false);
for(%i=0; %i < getWordCount(%modulesList); %i++)
@ -16,7 +23,14 @@ function callOnModules(%functionName, %moduleGroup)
{
eval(%module.scopeSet @ "." @ %functionName @ "();");
}
}
}
%execFilecount = ExecFilesList.count();
for (%i=0;%i<%execFilecount;%i++)
{
%filename = ExecFilesList.getKey(%i);
exec(%filename);
}
}
function loadModuleMaterials(%moduleGroup)
@ -69,10 +83,12 @@ function SimSet::getModulePath(%scopeSet)
return "";
}
function SimSet::registerDatablock(%scopeSet, %datablockFilePath)
function SimSet::registerDatablock(%scopeSet, %datablockFilePath, %isExclusive)
{
if ($traceModuleCalls)
warn("SimSet::registerDatablock");
%name = %scopeSet.getName();
%moduleDef = ModuleDatabase.findModule(%name);
%moduleDef = ModuleDatabase.findModule(%name, 1);
if(!isObject(%moduleDef))
{
@ -89,6 +105,176 @@ function SimSet::registerDatablock(%scopeSet, %datablockFilePath)
%relativePath = makeRelativePath(%datablockFilePath);
%fullPath = pathConcat(%moduleDef.ModulePath, %relativePath);
///go through all entries
%locked = false;
%dbFilecount = DatablockFilesList.count();
for (%i=0;%i<%dbFilecount;%i++)
{
%check = DatablockFilesList.getKey(%i);
//look for a substring match
%isMatch = strIsMatchExpr("*"@ %datablockFilePath,%check );
if (%isMatch)
{
//check if we're already locked in
//and kill off any duplicates
//do note that doing it in this order means setting exclusive twice
//allows one to override exclusive with exclusive
%locked = DatablockFilesList.getValue(%i);
if ((!%locked && !%isExclusive)&&($reportModuleFileConflicts))
error("found" SPC %datablockFilePath SPC "duplicate file!");
if (!%locked || (%locked && %isExclusive))
{
DatablockFilesList.erase(%i);
}
}
}
//if we're not locked, or we are exclusive, go ahead and add it to the pile
//(ensures exclusives get re-added after that erasure)
if (!%locked || %isExclusive)
DatablockFilesList.add(%fullPath,%isExclusive);
if ($traceModuleCalls)
DatablockFilesList.echo();
}
function SimSet::unRegisterDatablock(%scopeSet, %datablockFilePath)
{
if ($traceModuleCalls)
warn("SimSet::unRegisterDatablock");
%name = %scopeSet.getName();
%moduleDef = ModuleDatabase.findModule(%name, 1);
if(!isObject(%moduleDef))
{
error("Module::unRegisterDatablock() - unable to find a module with the moduleID of " @ %name);
return;
}
DatablockFilesList.add(%fullPath);
if(!isObject(DatablockFilesList))
{
error("Module::unRegisterDatablock() - DatablockFilesList array object doesn't exist!");
return;
}
%relativePath = makeRelativePath(%datablockFilePath);
%fullPath = pathConcat(%moduleDef.ModulePath, %relativePath);
///go through all entries
%locked = false;
%dbFilecount = DatablockFilesList.count();
for (%i=0;%i<%dbFilecount;%i++)
{
%check = DatablockFilesList.getKey(%i);
//look for a substring match
%isMatch = strIsMatchExpr("*"@ %datablockFilePath,%check );
if (%isMatch)
{
//check if we're already locked in. if not, kill it.
%locked = DatablockFilesList.getValue(%i);
if (!%locked)
{
DatablockFilesList.erase(%i);
}
}
}
if ($traceModuleCalls)
DatablockFilesList.echo();
}
function SimSet::queueExec(%scopeSet, %execFilePath, %isExclusive)
{
if ($traceModuleCalls)
warn("SimSet::queueExec");
%name = %scopeSet.getName();
%moduleDef = ModuleDatabase.findModule(%name, 1);
if(!isObject(%moduleDef))
{
error("Module::queueExec() - unable to find a module with the moduleID of " @ %name);
return;
}
if(!isObject(ExecFilesList))
{
error("Module::queueExec() - ExecFilesList array object doesn't exist!");
return;
}
if ($traceModuleCalls)
warn("module root path="@ makeRelativePath(%moduleDef.ModulePath));
%fullPath = makeRelativePath(%moduleDef.ModulePath) @ %execFilePath;
///go through all entries
%locked = false;
%execFilecount = ExecFilesList.count();
for (%i=0;%i<%execFilecount;%i++)
{
%check = ExecFilesList.getKey(%i);
//look for a substring match
%isMatch = strIsMatchExpr("*"@ %execFilePath,%check );
if (%isMatch)
{
//check if we're already locked in
//and kill off any duplicates
//do note that doing it in this order means setting exclusive twice
//allows one to override exclusive with exclusive
%locked = ExecFilesList.getValue(%i);
if ((!%locked && !%isExclusive)&&($reportModuleFileConflicts))
error("found" SPC %execFilePath SPC "duplicate file!");
if (!%locked || (%locked && %isExclusive))
{
ExecFilesList.erase(%i);
}
}
}
//if we're not locked, or we are exclusive, go ahead and add it to the pile
//(ensures exclusives get re-added after that erasure)
if (!%locked || %isExclusive)
ExecFilesList.add(%fullPath,%isExclusive);
if ($traceModuleCalls)
ExecFilesList.echo();
}
function SimSet::unQueueExec(%scopeSet, %execFilePath)
{
if ($traceModuleCalls)
warn("SimSet::unRegisterDatablock");
%name = %scopeSet.getName();
%moduleDef = ModuleDatabase.findModule(%name, 1);
if(!isObject(%moduleDef))
{
error("Module::unRegisterDatablock() - unable to find a module with the moduleID of " @ %name);
return;
}
if(!isObject(ExecFilesList))
{
error("Module::unRegisterDatablock() - ExecFilesList array object doesn't exist!");
return;
}
%relativePath = makeRelativePath(%execFilePath);
%fullPath = pathConcat(%moduleDef.ModulePath, %relativePath);
///go through all entries
%locked = false;
%execFilecount = ExecFilesList.count();
for (%i=0;%i<%execFilecount;%i++)
{
%check = ExecFilesList.getKey(%i);
//look for a substring match
%isMatch = strIsMatchExpr("*"@ %execFilePath,%check );
if (%isMatch)
{
//check if we're already locked in. if not, kill it.
%locked = ExecFilesList.getValue(%i);
if (!%locked)
{
ExecFilesList.erase(%i);
}
}
}
if ($traceModuleCalls)
ExecFilesList.echo();
}

View file

@ -4,7 +4,7 @@ function ExampleComponent::onAdd(%this)
{
}
//onAdd is called when the component is removed and deleted from it's owner entity.
//onRemove is called when the component is removed and deleted from it's owner entity.
function ExampleComponent::onRemove(%this)
{
@ -15,7 +15,7 @@ function ExampleComponent::onClientConnect(%this, %client)
}
//onClientDisconnect is called any time a client disconnects from the server.
function ExampleComponent::onClientDisonnect(%this, %client)
function ExampleComponent::onClientDisconnect(%this, %client)
{
}

View file

@ -367,7 +367,7 @@ function OptionsMenuBackSetting::onClick(%this)
//advance by one
%newSetting = getToken(%settingsList, ",", %currentSettingIdx);
eval(%settingCtrl.qualitySettingGroup@"::set("@%newSetting@");");
eval(%settingCtrl.qualitySettingGroup@"::set(\""@%newSetting@"\");");
%settingCtrl-->SettingText.setText( %newSetting );
if(%currentSettingIdx == %settingsListCount)

View file

@ -38,7 +38,14 @@ function DisplayMenu::apply(%this)
}
//Update the display settings now
$pref::Video::Resolution = getWord( $pref::Video::Resolution, 0 ) SPC getWord( $pref::Video::Resolution, 2 );
if (getWord( $pref::Video::Resolution, 2) == "")
{
$pref::Video::Resolution = getWord( $pref::Video::Resolution, 0 ) SPC getWord( $pref::Video::Resolution, 1 );
}
else
{
$pref::Video::Resolution = getWord( $pref::Video::Resolution, 0 ) SPC getWord( $pref::Video::Resolution, 2 );
}
/*if ( %newFullScreen $= "false" )
{

View file

@ -1,56 +1,56 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<AssetImportSettings>
<Group name="TestConfig">
<Group name="Meshes">
<Setting name="DoUpAxisOverride">0</Setting>
<Setting name="IgnoreNodeScale">0</Setting>
<Setting name="ScaleOverride">1</Setting>
<Setting name="CollapseSubmeshes">0</Setting>
<Setting name="AdjustCenter">0</Setting>
<Setting name="AdjustFloor">0</Setting>
<Setting name="UpAxisOverride">Z_AXIS</Setting>
<Setting name="LODType">TrailingNumber</Setting>
<Group name="Animations">
<Setting name="SeparateAnimations">1</Setting>
<Setting name="ImportAnimations">1</Setting>
</Group>
<Group name="Materials">
<Setting name="ImportMaterials">1</Setting>
<Setting name="CreateComposites">1</Setting>
<Setting name="UseDiffuseSuffixOnOriginImage">1</Setting>
<Setting name="UseExistingMaterials">1</Setting>
<Setting name="IgnoreMaterials">ColorEffect*,</Setting>
<Setting name="UseExistingMaterials">1</Setting>
<Setting name="UseDiffuseSuffixOnOriginImage">1</Setting>
<Setting name="CreateComposites">1</Setting>
<Setting name="ImportMaterials">1</Setting>
</Group>
<Group name="Meshes">
<Setting name="AdjustFloor">0</Setting>
<Setting name="CollapseSubmeshes">0</Setting>
<Setting name="IgnoreNodeScale">0</Setting>
<Setting name="UpAxisOverride">Z_AXIS</Setting>
<Setting name="ScaleOverride">1</Setting>
<Setting name="LODType">TrailingNumber</Setting>
<Setting name="AdjustCenter">0</Setting>
<Setting name="DoUpAxisOverride">0</Setting>
</Group>
<Group name="Images">
<Setting name="AOTypeSuffixes">_AO,_AMBIENT,_AMBIENTOCCLUSION</Setting>
<Setting name="MetalnessTypeSuffixes">_METAL,_MET,_METALNESS,_METALLIC</Setting>
<Setting name="PopulateMaterialMaps">1</Setting>
<Setting name="UseMips">1</Setting>
<Setting name="Compressed">1</Setting>
<Setting name="TextureFilteringMode">Bilinear</Setting>
<Setting name="GenerateMaterialOnImport">1</Setting>
<Setting name="RoughnessTypeSuffixes">_ROUGH,_ROUGHNESS</Setting>
<Setting name="IsHDR">0</Setting>
<Setting name="Scaling">1.0</Setting>
<Setting name="DiffuseTypeSuffixes">_ALBEDO,_DIFFUSE,_ALB,_DIF,_COLOR,_COL,_baseColor,</Setting>
<Setting name="CompositeTypeSuffixes">_COMP,_COMPOSITE</Setting>
<Setting name="ImageType">N/A</Setting>
<Setting name="SmoothnessTypeSuffixes">_SMOOTH,_SMOOTHNESS</Setting>
<Setting name="UseMips">1</Setting>
<Setting name="TextureFilteringMode">Bilinear</Setting>
<Setting name="IsHDR">0</Setting>
<Setting name="MetalnessTypeSuffixes">_METAL,_MET,_METALNESS,_METALLIC</Setting>
<Setting name="NormalTypeSuffixes">_NORMAL,_NORM</Setting>
<Setting name="AOTypeSuffixes">_AO,_AMBIENT,_AMBIENTOCCLUSION</Setting>
<Setting name="ImageType">N/A</Setting>
<Setting name="Compressed">1</Setting>
<Setting name="RoughnessTypeSuffixes">_ROUGH,_ROUGHNESS</Setting>
<Setting name="SmoothnessTypeSuffixes">_SMOOTH,_SMOOTHNESS</Setting>
<Setting name="DiffuseTypeSuffixes">_ALBEDO,_DIFFUSE,_ALB,_DIF,_COLOR,_COL,_baseColor,_a,</Setting>
<Setting name="PopulateMaterialMaps">1</Setting>
<Setting name="GenerateMaterialOnImport">1</Setting>
<Setting name="CompositeTypeSuffixes">_COMP,_COMPOSITE</Setting>
</Group>
<Group name="Collision">
<Setting name="GenerateLOSCollisions">1</Setting>
<Setting name="GenerateCollisions">1</Setting>
<Setting name="LOSCollisionMeshPrefix">LOS</Setting>
<Setting name="CollisionMeshPrefix">Col</Setting>
<Setting name="GenCollisionType">CollisionMesh</Setting>
<Setting name="GenerateCollisions">1</Setting>
<Setting name="LOSCollisionMeshPrefix">LOS</Setting>
<Setting name="GenLOSCollisionType">CollisionMesh</Setting>
</Group>
<Group name="Animations">
<Setting name="ImportAnimations">1</Setting>
<Setting name="SeparateAnimations">1</Setting>
</Group>
<Group name="Sounds">
<Setting name="PitchAdjust">1.0</Setting>
<Setting name="Compressed">0</Setting>
<Setting name="VolumeAdjust">1.0</Setting>
<Setting name="Compressed">0</Setting>
</Group>
<Group name="General">
<Setting name="DuplicatAutoResolution">AutoPrune</Setting>

View file

@ -13,13 +13,23 @@
isContainer = "1";
canSave = "1";
canSaveDynamicFields = "1";
AddNewArtAssetPopup = "18222";
AddNewAssetPopup = "18223";
AddNewScriptAssetPopup = "18221";
AddNewArtAssetPopup = "18110";
AddNewAssetPopup = "18112";
AddNewCppAssetPopup = "18111";
AddNewScriptAssetPopup = "18109";
coreModulesFilter = "0";
currentPreviewPage = "0";
enabled = "1";
Enabled = "1";
importAssetFinalListArray = "20689";
ImportAssetResolutionsPopup = "18119";
importAssetUnprocessedListArray = "20688";
importingFilesArray = "20687";
isReImportingAsset = "0";
navigationHistoryIdx = "0";
onlyShowModulesWithAssets = "0";
previewData = "19953";
previewSize = "80";
templateFilesPath = "tools/assetBrowser/scripts/templateFiles/";
totalPages = "1";
treeFilterMode = "list";
@ -201,7 +211,7 @@
groupNum = "-1";
buttonType = "PushButton";
useMouseEvents = "0";
position = "50 22";
position = "52 22";
extent = "45 19";
minExtent = "8 2";
horizSizing = "right";
@ -215,97 +225,107 @@
canSave = "1";
canSaveDynamicFields = "0";
};
new GuiWindowCtrl(TagFilterWindow) {
text = "New Window";
resizeWidth = "1";
resizeHeight = "1";
canMove = "1";
canClose = "0";
canMinimize = "0";
canMaximize = "0";
canCollapse = "0";
edgeSnap = "1";
docking = "None";
margin = "4 4 4 4";
padding = "0 0 0 0";
anchorTop = "0";
anchorBottom = "0";
anchorLeft = "0";
anchorRight = "0";
position = "129 62";
extent = "161 250";
minExtent = "161 86";
horizSizing = "windowRelative";
vertSizing = "windowRelative";
profile = "ToolsGuiToolbarWindowProfile";
visible = "0";
new GuiBitmapButtonCtrl(AssetBrowser_NavigateBackBtn) {
bitmap = "tools/gui/images/folderUp.png";
bitmapMode = "Centered";
autoFitExtents = "0";
useModifiers = "0";
useStates = "1";
masked = "0";
groupNum = "-1";
buttonType = "PushButton";
useMouseEvents = "0";
position = "98 21";
extent = "22 22";
minExtent = "8 2";
horizSizing = "right";
vertSizing = "bottom";
profile = "GuiDefaultProfile";
visible = "1";
active = "1";
command = "AssetBrowser.navigateHistoryBack();";
tooltipProfile = "GuiToolTipProfile";
hovertime = "1000";
isContainer = "0";
canSave = "1";
canSaveDynamicFields = "0";
};
new GuiBitmapButtonCtrl(AssetBrowser_NavigateForwardBtn) {
bitmap = "tools/gui/images/folderDown.png";
bitmapMode = "Centered";
autoFitExtents = "0";
useModifiers = "0";
useStates = "1";
masked = "0";
groupNum = "-1";
buttonType = "PushButton";
useMouseEvents = "0";
position = "120 21";
extent = "22 22";
minExtent = "8 2";
horizSizing = "right";
vertSizing = "bottom";
profile = "GuiDefaultProfile";
visible = "1";
active = "1";
command = "AssetBrowser.navigateHistoryForward();";
tooltipProfile = "GuiToolTipProfile";
hovertime = "1000";
isContainer = "0";
canSave = "1";
canSaveDynamicFields = "0";
};
new GuiStackControl(AssetBrowser_BreadcrumbBar) {
stackingType = "Horizontal";
horizStacking = "Left to Right";
vertStacking = "Top to Bottom";
padding = "0";
dynamicSize = "0";
dynamicNonStackExtent = "0";
dynamicPos = "0";
changeChildSizeToFit = "0";
changeChildPosition = "1";
position = "156 21";
extent = "326 23";
minExtent = "16 16";
horizSizing = "width";
vertSizing = "bottom";
profile = "GuiDefaultProfile";
visible = "1";
active = "1";
tooltipProfile = "GuiToolTipProfile";
hovertime = "1000";
isContainer = "1";
internalName = "VisibilityLayerWindow";
hidden = "1";
canSave = "1";
canSaveDynamicFields = "0";
new GuiScrollCtrl() {
willFirstRespond = "1";
hScrollBar = "alwaysOff";
vScrollBar = "dynamic";
lockHorizScroll = "1";
lockVertScroll = "0";
constantThumbHeight = "0";
childMargin = "2 0";
mouseWheelScrollSpeed = "-1";
docking = "Client";
margin = "0 0 0 0";
padding = "0 0 0 0";
anchorTop = "1";
anchorBottom = "0";
anchorLeft = "1";
anchorRight = "0";
position = "1 9";
extent = "159 238";
minExtent = "8 2";
horizSizing = "width";
vertSizing = "height";
profile = "ToolsGuiScrollProfile";
visible = "1";
active = "1";
tooltipProfile = "ToolsGuiToolTipProfile";
hovertime = "1000";
isContainer = "1";
canSave = "1";
canSaveDynamicFields = "0";
new GuiStackControl(TagFilterList) {
stackingType = "Vertical";
horizStacking = "Left to Right";
vertStacking = "Top to Bottom";
padding = "-2";
dynamicSize = "1";
dynamicNonStackExtent = "0";
dynamicPos = "0";
changeChildSizeToFit = "1";
changeChildPosition = "1";
position = "3 1";
extent = "153 16";
minExtent = "16 16";
horizSizing = "width";
vertSizing = "bottom";
profile = "ToolsGuiDefaultProfile";
visible = "1";
active = "1";
tooltipProfile = "ToolsGuiToolTipProfile";
hovertime = "1000";
isContainer = "1";
internalName = "theVisOptionsList";
canSave = "1";
canSaveDynamicFields = "0";
};
};
};
new GuiSplitContainer() {
new GuiBitmapButtonCtrl(AssetBrowser_VisibilityOptions) {
bitmap = "tools/gui/images/visible";
bitmapMode = "Centered";
autoFitExtents = "0";
useModifiers = "0";
useStates = "1";
masked = "0";
groupNum = "-1";
buttonType = "PushButton";
useMouseEvents = "0";
position = "487 21";
extent = "23 23";
minExtent = "8 2";
horizSizing = "left";
vertSizing = "bottom";
profile = "ToolsGuiSolidDefaultProfile";
visible = "1";
active = "1";
command = "AssetBrowser.showVisibiltyOptions();";
tooltipProfile = "GuiToolTipProfile";
tooltip = "Visibility Options";
hovertime = "1000";
isContainer = "0";
canSave = "1";
canSaveDynamicFields = "0";
};
new GuiSplitContainer(AssetBrowser_MainSplit) {
orientation = "Vertical";
splitterSize = "2";
splitPoint = "149 100";
@ -323,7 +343,7 @@
minExtent = "64 64";
horizSizing = "relative";
vertSizing = "height";
profile = "ToolsGuiDefaultProfile";
profile = "ToolsGuiSolidDefaultProfile";
visible = "1";
active = "1";
tooltipProfile = "GuiToolTipProfile";
@ -332,7 +352,7 @@
canSave = "1";
canSaveDynamicFields = "0";
new GuiPanel() {
new GuiPanel(AssetBrowser_FoldersPanel) {
docking = "Client";
margin = "0 0 0 0";
padding = "0 0 0 0";
@ -342,10 +362,10 @@
anchorRight = "0";
position = "0 0";
extent = "147 509";
minExtent = "16 16";
minExtent = "0 0";
horizSizing = "right";
vertSizing = "bottom";
profile = "ToolsGuiDefaultProfile";
profile = "ToolsGuiSolidDefaultProfile";
visible = "1";
active = "1";
tooltipProfile = "GuiToolTipProfile";
@ -376,8 +396,13 @@
canSave = "1";
canSaveDynamicFields = "0";
new GuiTextCtrl() {
text = "Filters";
new GuiTextEditCtrl(AssetBrowserFolderSearchFilter) {
historySize = "0";
tabComplete = "0";
sinkAllKeyEvents = "0";
password = "0";
passwordMask = "*";
text = "Search Folders...";
maxLength = "1024";
margin = "0 0 0 0";
padding = "0 0 0 0";
@ -385,23 +410,24 @@
anchorBottom = "0";
anchorLeft = "1";
anchorRight = "0";
position = "5 0";
extent = "30 16";
position = "0 0";
extent = "148 18";
minExtent = "8 2";
horizSizing = "right";
vertSizing = "bottom";
profile = "ToolsGuiDefaultProfile";
horizSizing = "width";
vertSizing = "height";
profile = "ToolsGuiTextEditProfile";
visible = "1";
active = "1";
tooltipProfile = "GuiToolTipProfile";
hovertime = "1000";
isContainer = "1";
class = "AssetBrowserSearchFilterTxt";
canSave = "1";
canSaveDynamicFields = "0";
};
new GuiBitmapButtonCtrl() {
bitmap = "tools/gui/images/visible";
bitmapMode = "Stretched";
new GuiBitmapButtonCtrl(AssetBrowser_ClearFolderFilterBtn) {
bitmap = "tools/gui/images/clear-icon";
bitmapMode = "Centered";
autoFitExtents = "0";
useModifiers = "0";
useStates = "1";
@ -409,17 +435,15 @@
groupNum = "-1";
buttonType = "PushButton";
useMouseEvents = "0";
position = "128 -1";
extent = "18 19";
position = "132 0";
extent = "15 15";
minExtent = "8 2";
horizSizing = "right";
horizSizing = "left";
vertSizing = "bottom";
profile = "ToolsGuiDefaultProfile";
profile = "GuiDefaultProfile";
visible = "1";
active = "1";
command = "AssetBrowser.showFilterPopup();";
tooltipProfile = "GuiToolTipProfile";
tooltip = "Views assets via module-oriented list tree.";
hovertime = "1000";
isContainer = "0";
canSave = "1";
@ -438,7 +462,7 @@
minExtent = "8 2";
horizSizing = "width";
vertSizing = "height";
profile = "ToolsGuiDefaultProfile";
profile = "ToolsGuiSolidDefaultProfile";
visible = "1";
active = "1";
tooltipProfile = "GuiToolTipProfile";
@ -471,7 +495,7 @@
profile = "GuiEditorScrollProfile";
visible = "1";
active = "1";
tooltipProfile = "ToolsGuiDefaultProfile";
tooltipProfile = "ToolsGuiSolidDefaultProfile";
hovertime = "1000";
isContainer = "1";
canSave = "1";
@ -500,7 +524,7 @@
canRenameObjects = "1";
renameInternal = "0";
position = "1 1";
extent = "145 252";
extent = "145 147";
minExtent = "8 2";
horizSizing = "right";
vertSizing = "bottom";
@ -517,7 +541,7 @@
};
};
};
new GuiPanel() {
new GuiPanel(AssetBrowser_AssetsPanel) {
docking = "Client";
margin = "0 0 0 0";
padding = "0 0 0 0";
@ -530,7 +554,7 @@
minExtent = "16 16";
horizSizing = "right";
vertSizing = "bottom";
profile = "ToolsGuiDefaultProfile";
profile = "ToolsGuiSolidDefaultProfile";
visible = "1";
active = "1";
tooltipProfile = "GuiToolTipProfile";
@ -548,7 +572,7 @@
anchorLeft = "1";
anchorRight = "0";
position = "1 0";
extent = "354 41";
extent = "354 19";
minExtent = "8 2";
horizSizing = "width";
vertSizing = "bottom";
@ -561,65 +585,13 @@
canSave = "1";
canSaveDynamicFields = "0";
new GuiBitmapButtonCtrl() {
bitmap = "tools/gui/images/new";
bitmapMode = "Stretched";
autoFitExtents = "0";
useModifiers = "0";
useStates = "1";
masked = "0";
groupNum = "-1";
buttonType = "PushButton";
useMouseEvents = "0";
position = "42 22";
extent = "15 15";
minExtent = "8 2";
horizSizing = "right";
vertSizing = "bottom";
profile = "ToolsGuiDefaultProfile";
visible = "1";
active = "1";
command = "AssetBrowser.createNewAsset();";
tooltipProfile = "GuiToolTipProfile";
tooltip = "Create New Asset";
hovertime = "1000";
isContainer = "0";
canSave = "1";
canSaveDynamicFields = "0";
};
new GuiBitmapButtonCtrl() {
bitmap = "tools/gui/images/delete";
bitmapMode = "Stretched";
autoFitExtents = "0";
useModifiers = "0";
useStates = "1";
masked = "0";
groupNum = "-1";
buttonType = "PushButton";
useMouseEvents = "0";
position = "23 22";
extent = "15 15";
minExtent = "8 2";
horizSizing = "right";
vertSizing = "bottom";
profile = "ToolsGuiDefaultProfile";
visible = "1";
active = "1";
command = "AssetBrowser.showDeleteDialog();";
tooltipProfile = "GuiToolTipProfile";
tooltip = "Delete Asset";
hovertime = "1000";
isContainer = "0";
canSave = "1";
canSaveDynamicFields = "0";
};
new GuiTextEditCtrl(AssetBrowserSearchFilter) {
historySize = "0";
tabComplete = "0";
sinkAllKeyEvents = "0";
password = "0";
passwordMask = "*";
text = "\c2Filter...";
text = "Search Assets...";
maxLength = "1024";
margin = "0 0 0 0";
padding = "0 0 0 0";
@ -627,8 +599,8 @@
anchorBottom = "0";
anchorLeft = "1";
anchorRight = "0";
position = "62 19";
extent = "273 18";
position = "21 1";
extent = "314 18";
minExtent = "8 2";
horizSizing = "width";
vertSizing = "bottom";
@ -638,12 +610,12 @@
tooltipProfile = "GuiToolTipProfile";
hovertime = "1000";
isContainer = "1";
class = "AssetBrowserSearchFilterText";
class = "AssetBrowserSearchFilterTxt";
canSave = "1";
canSaveDynamicFields = "0";
};
new GuiBitmapButtonCtrl(TagFilterButton) {
bitmap = "tools/gui/images/visible";
new GuiBitmapButtonCtrl(AssetBrowser_ClearAssetFilterBtn) {
bitmap = "tools/gui/images/clear-icon";
bitmapMode = "Stretched";
autoFitExtents = "0";
useModifiers = "0";
@ -652,46 +624,49 @@
groupNum = "-1";
buttonType = "PushButton";
useMouseEvents = "0";
position = "4 19";
extent = "20 20";
position = "321 1";
extent = "15 15";
minExtent = "8 2";
horizSizing = "right";
horizSizing = "left";
vertSizing = "bottom";
profile = "ToolsGuiDefaultProfile";
profile = "ToolsGuiSolidDefaultProfile";
visible = "1";
active = "1";
command = "AssetBrowser.toggleTagFilterPopup();";
tooltipProfile = "GuiToolTipProfile";
tooltip = "Create New Asset";
hovertime = "1000";
isContainer = "0";
canSave = "1";
canSaveDynamicFields = "0";
};
new GuiTextCtrl() {
text = "Assets";
maxLength = "1024";
margin = "0 0 0 0";
padding = "0 0 0 0";
anchorTop = "1";
anchorBottom = "0";
anchorLeft = "1";
anchorRight = "0";
position = "5 0";
extent = "53 16";
new GuiBitmapButtonCtrl(AssetBrowser_ToggleFolderPanel) {
bitmap = "tools/gui/images/iconList.png";
bitmapMode = "Centered";
autoFitExtents = "0";
useModifiers = "0";
useStates = "1";
masked = "0";
groupNum = "-1";
buttonType = "PushButton";
useMouseEvents = "0";
position = "1 1";
extent = "15 15";
minExtent = "8 2";
horizSizing = "right";
vertSizing = "bottom";
profile = "ToolsGuiDefaultProfile";
profile = "ToolsGuiSolidDefaultProfile";
visible = "1";
active = "1";
command = "AssetBrowser.toggleFolderCollapseButton();";
tooltipProfile = "GuiToolTipProfile";
tooltip = "Toggles the display of the folders panel";
hovertime = "1000";
isContainer = "1";
isContainer = "0";
canSave = "1";
canSaveDynamicFields = "0";
};
new GuiBitmapButtonCtrl() {
bitmap = "tools/gui/images/delete";
new GuiBitmapButtonCtrl(AssetBrowser_FilterOptionsBtn) {
bitmap = "tools/gui/images/filter.png";
bitmapMode = "Stretched";
autoFitExtents = "0";
useModifiers = "0";
@ -700,17 +675,17 @@
groupNum = "-1";
buttonType = "PushButton";
useMouseEvents = "0";
position = "337 22";
position = "337 1";
extent = "15 15";
minExtent = "8 2";
horizSizing = "left";
vertSizing = "bottom";
profile = "ToolsGuiDefaultProfile";
profile = "ToolsGuiSolidDefaultProfile";
visible = "1";
active = "1";
command = "AssetBrowser.showDeleteDialog();";
command = "AssetBrowser.showFilterOptions();";
tooltipProfile = "GuiToolTipProfile";
tooltip = "Delete Asset";
tooltip = "Filter Options";
hovertime = "1000";
isContainer = "0";
canSave = "1";
@ -724,12 +699,12 @@
anchorBottom = "0";
anchorLeft = "1";
anchorRight = "1";
position = "1 40";
extent = "354 468";
position = "1 17";
extent = "354 487";
minExtent = "8 2";
horizSizing = "width";
vertSizing = "height";
profile = "ToolsGuiDefaultProfile";
profile = "ToolsGuiSolidDefaultProfile";
visible = "1";
active = "1";
tooltipProfile = "GuiToolTipProfile";
@ -755,19 +730,35 @@
anchorLeft = "1";
anchorRight = "0";
position = "0 0";
extent = "354 448";
extent = "354 467";
minExtent = "8 8";
horizSizing = "width";
vertSizing = "height";
profile = "GuiEditorScrollProfile";
visible = "1";
active = "1";
tooltipProfile = "ToolsGuiDefaultProfile";
tooltipProfile = "ToolsGuiSolidDefaultProfile";
hovertime = "1000";
isContainer = "1";
canSave = "1";
canSaveDynamicFields = "0";
new GuiMouseEventCtrl(AssetListPanelInputs) {
lockMouse = "0";
position = "1 0";
extent = "339 467";
minExtent = "8 2";
horizSizing = "width";
vertSizing = "height";
profile = "GuiDefaultProfile";
visible = "1";
active = "1";
tooltipProfile = "GuiToolTipProfile";
hovertime = "1000";
isContainer = "0";
canSave = "1";
canSaveDynamicFields = "0";
};
new GuiStackControl() {
stackingType = "Vertical";
horizStacking = "Left to Right";
@ -778,8 +769,8 @@
dynamicPos = "0";
changeChildSizeToFit = "1";
changeChildPosition = "0";
position = "1 1";
extent = "352 254";
position = "2 1";
extent = "339 124";
minExtent = "16 16";
horizSizing = "width";
vertSizing = "bottom";
@ -792,25 +783,10 @@
canSave = "1";
canSaveDynamicFields = "0";
new GuiControl() {
position = "0 0";
extent = "352 4";
minExtent = "8 2";
horizSizing = "right";
vertSizing = "bottom";
profile = "ToolsGuiDefaultProfile";
visible = "1";
active = "1";
tooltipProfile = "GuiToolTipProfile";
hovertime = "1000";
isContainer = "1";
canSave = "1";
canSaveDynamicFields = "0";
};
new GuiDynamicCtrlArrayControl() {
colCount = "3";
colSize = "100";
rowCount = "2";
rowCount = "1";
rowSize = "124";
rowSpacing = "2";
colSpacing = "2";
@ -819,8 +795,8 @@
fillRowFirst = "1";
dynamicSize = "1";
padding = "0 0 0 0";
position = "3 4";
extent = "352 250";
position = "3 0";
extent = "339 124";
minExtent = "8 8";
horizSizing = "width";
vertSizing = "bottom";
@ -830,7 +806,7 @@
tooltipProfile = "GuiToolTipProfile";
hovertime = "1000";
isContainer = "1";
internalName = "materialSelection";
internalName = "assetList";
canSave = "1";
canSaveDynamicFields = "0";
};
@ -844,12 +820,12 @@
anchorBottom = "0";
anchorLeft = "1";
anchorRight = "0";
position = "0 448";
position = "0 467";
extent = "354 20";
minExtent = "8 2";
horizSizing = "width";
vertSizing = "height";
profile = "ToolsGuiDefaultProfile";
profile = "ToolsGuiSolidDefaultProfile";
visible = "1";
active = "1";
tooltipProfile = "GuiToolTipProfile";
@ -859,13 +835,35 @@
canSave = "1";
canSaveDynamicFields = "0";
};
new GuiTextCtrl(AssetBrowser_FooterText) {
maxLength = "1024";
margin = "0 0 0 0";
padding = "0 0 0 0";
anchorTop = "1";
anchorBottom = "0";
anchorLeft = "1";
anchorRight = "0";
position = "0 470";
extent = "269 23";
minExtent = "8 2";
horizSizing = "right";
vertSizing = "top";
profile = "ToolsGuiTextProfile";
visible = "1";
active = "1";
tooltipProfile = "GuiToolTipProfile";
hovertime = "1000";
isContainer = "1";
canSave = "1";
canSaveDynamicFields = "0";
};
};
new GuiButtonCtrl() {
text = "Select";
groupNum = "-1";
buttonType = "PushButton";
useMouseEvents = "0";
position = "242 491";
position = "301 488";
extent = "53 19";
minExtent = "8 2";
horizSizing = "left";
@ -882,26 +880,6 @@
canSave = "1";
canSaveDynamicFields = "0";
};
new GuiButtonCtrl() {
text = "Cancel";
groupNum = "-1";
buttonType = "PushButton";
useMouseEvents = "0";
position = "300 491";
extent = "52 19";
minExtent = "8 2";
horizSizing = "left";
vertSizing = "top";
profile = "ToolsGuiButtonProfile";
visible = "1";
active = "1";
command = "AssetBrowser.hideDialog();";
tooltipProfile = "GuiToolTipProfile";
hovertime = "1000";
isContainer = "0";
canSave = "1";
canSaveDynamicFields = "0";
};
};
};
};

View file

@ -224,7 +224,7 @@
canSave = "1";
canSaveDynamicFields = "0";
};
new GuiScrollCtrl() {
new GuiScrollCtrl(ImportAssetConfigEditorScroll) {
willFirstRespond = "1";
hScrollBar = "dynamic";
vScrollBar = "dynamic";

View file

@ -30,6 +30,32 @@ function initializeAssetBrowser()
{
echo(" % - Initializing Asset Browser");
$AssetBrowser::importConfigsFile = "tools/assetBrowser/assetImportConfigs.xml";
$AssetBrowser::currentImportConfig = "";
if(!isObject(AssetFilterTypeList))
{
new ArrayObject(AssetFilterTypeList);
AssetFilterTypeList.add("Component");
AssetFilterTypeList.add("Cpp");
AssetFilterTypeList.add("Cubemap");
AssetFilterTypeList.add("GameObjects");
AssetFilterTypeList.add("GUIs");
AssetFilterTypeList.add("Images");
AssetFilterTypeList.add("Levels");
AssetFilterTypeList.add("Materials");
AssetFilterTypeList.add("Particles");
AssetFilterTypeList.add("PostFXs");
AssetFilterTypeList.add("Scripts");
AssetFilterTypeList.add("Shapes");
AssetFilterTypeList.add("ShapeAnimations");
AssetFilterTypeList.add("Sounds");
AssetFilterTypeList.add("StateMachines");
AssetFilterTypeList.add("Terrain");
AssetFilterTypeList.add("TerrainMaterials");
}
exec("./guis/assetBrowser.gui");
exec("./guis/addModuleWindow.gui");
exec("./guis/gameObjectCreator.gui");
@ -67,6 +93,9 @@ function initializeAssetBrowser()
exec("./scripts/assetTypes/sound.cs");
exec("./scripts/assetTypes/stateMachine.cs");
exec("./scripts/assetTypes/cubemap.cs");
exec("./scripts/assetTypes/folder.cs");
exec("./scripts/assetTypes/terrain.cs");
exec("./scripts/assetTypes/terrainMaterial.cs");
exec("./scripts/fieldTypes/fieldTypes.cs");
exec("./scripts/fieldTypes/listField.cs");

View file

@ -85,6 +85,7 @@ function AssetBrowser::onBeginDropFiles( %this )
//prep the import control
Canvas.pushDialog(AssetImportCtrl);
AssetImportCtrl.setHidden(true);
ImportAssetTree.clear();
ImportAssetTree.insertItem(0, "Importing Assets");
AssetBrowser.unprocessedAssetsCount = 0;
@ -161,136 +162,39 @@ function AssetBrowser::onDropZipFile(%this, %filePath)
}
}
function AssetBrowser::onDropImageFile(%this, %filePath)
{
if(!%this.isVisible())
return;
// File Information madness
%fileName = %filePath;
%fileOnlyName = fileName( %fileName );
%fileBase = validateDatablockName(fileBase( %fileName ) @ "ImageMap");
// [neo, 5/17/2007 - #3117]
// Check if the file being dropped is already in data/images or a sub dir by checking if
// the file path up to length of check path is the same as check path.
%defaultPath = EditorSettings.value( "WorldEditor/defaultMaterialsPath" );
%checkPath = expandFilename( "^"@%defaultPath );
%fileOnlyPath = expandFileName( %filePath ); //filePath( expandFileName( %filePath ) );
%fileBasePath = getSubStr( %fileOnlyPath, 0, strlen( %checkPath ) );
if( %checkPath !$= %fileBasePath )
{
// No match so file is from outside images directory and we need to copy it in
%fileNewLocation = expandFilename("^"@%defaultPath) @ "/" @ fileBase( %fileName ) @ fileExt( %fileName );
// Move to final location
if( !pathCopy( %filePath, %fileNewLocation ) )
return;
}
else
{
// Already in images path somewhere so just link to it
%fileNewLocation = %filePath;
}
addResPath( filePath( %fileNewLocation ) );
%matName = fileBase( %fileName );
// Create Material
%imap = new Material(%matName)
{
mapTo = fileBase( %matName );
diffuseMap[0] = %defaultPath @ "/" @ fileBase( %fileName ) @ fileExt( %fileName );
};
//%imap.setName( %fileBase );
//%imap.imageName = %fileNewLocation;
//%imap.imageMode = "FULL";
//%imap.filterPad = false;
//%imap.compile();
%diffusecheck = %imap.diffuseMap[0];
// Bad Creation!
if( !isObject( %imap ) )
return;
%this.addDatablock( %fileBase, false );
}
function AssetBrowser::onDropSoundFile(%this, %filePath)
{
if(!%this.isVisible())
return;
// File Information madness
%fileName = %filePath;
%fileOnlyName = fileName( %fileName );
%fileBase = validateDatablockName(fileBase( %fileName ) @ "ImageMap");
// [neo, 5/17/2007 - #3117]
// Check if the file being dropped is already in data/images or a sub dir by checking if
// the file path up to length of check path is the same as check path.
%defaultPath = EditorSettings.value( "WorldEditor/defaultMaterialsPath" );
%checkPath = expandFilename( "^"@%defaultPath );
%fileOnlyPath = expandFileName( %filePath ); //filePath( expandFileName( %filePath ) );
%fileBasePath = getSubStr( %fileOnlyPath, 0, strlen( %checkPath ) );
if( %checkPath !$= %fileBasePath )
{
// No match so file is from outside images directory and we need to copy it in
%fileNewLocation = expandFilename("^"@%defaultPath) @ "/" @ fileBase( %fileName ) @ fileExt( %fileName );
// Move to final location
if( !pathCopy( %filePath, %fileNewLocation ) )
return;
}
else
{
// Already in images path somewhere so just link to it
%fileNewLocation = %filePath;
}
addResPath( filePath( %fileNewLocation ) );
%matName = fileBase( %fileName );
// Create Material
%imap = new Material(%matName)
{
mapTo = fileBase( %matName );
diffuseMap[0] = %defaultPath @ "/" @ fileBase( %fileName ) @ fileExt( %fileName );
};
//%imap.setName( %fileBase );
//%imap.imageName = %fileNewLocation;
//%imap.imageMode = "FULL";
//%imap.filterPad = false;
//%imap.compile();
%diffusecheck = %imap.diffuseMap[0];
// Bad Creation!
if( !isObject( %imap ) )
return;
%this.addDatablock( %fileBase, false );
}
function AssetBrowser::onEndDropFiles( %this )
{
if(!%this.isVisible())
return;
//we have assets to import, so go ahead and display the window for that now
AssetImportCtrl.setHidden(false);
ImportAssetWindow.visible = true;
//ImportAssetWindow.validateAssets();
ImportAssetWindow.refresh();
ImportAssetWindow.selectWindow();
%hasIssues = ImportAssetWindow.validateAssets();
//If we have a valid config file set and we've set to auto-import, and we have no
//issues for importing, then go ahead and run the import immediately, don't
//bother showing the window.
//If any of these conditions fail, we'll display the import window so it can be handled
//by the user
if(ImportAssetWindow.importConfigsList.count() != 0 &&
EditorSettings.value("Assets/AssetImporDefaultConfig") !$= "" &&
EditorSettings.value("Assets/AutoImport", false) == true
&& %hasIssues == false)
{
AssetImportCtrl.setHidden(true);
ImportAssetWindow.visible = false;
//Go ahead and check if we have any issues, and if not, run the import!
ImportAssetWindow.ImportAssets();
}
else
{
//we have assets to import, so go ahead and display the window for that now
AssetImportCtrl.setHidden(false);
ImportAssetWindow.visible = true;
ImportAssetWindow.selectWindow();
}
// Update object library
GuiFormManager::SendContentMessage($LBCreateSiderBar, %this, "refreshAll 1");
@ -503,9 +407,6 @@ function ImportAssetWindow::onWake(%this)
//Lets refresh our list
if(!ImportAssetWindow.isVisible())
return;
$AssetBrowser::importConfigsFile = "tools/assetBrowser/assetImportConfigs.xml";
$AssetBrowser::currentImportConfig = "";
if(!isObject(AssetImportSettings))
{
@ -526,7 +427,11 @@ function ImportAssetWindow::onWake(%this)
function ImportAssetWindow::reloadImportOptionConfigs(%this)
{
ImportAssetWindow.importConfigsList = new ArrayObject();
if(!isObject(ImportAssetWindow.importConfigsList))
ImportAssetWindow.importConfigsList = new ArrayObject();
else
ImportAssetWindow.importConfigsList.empty();
ImportAssetConfigList.clear();
%xmlDoc = new SimXMLDocument();
@ -1168,10 +1073,12 @@ function ImportAssetWindow::validateAssets(%this)
//Clear any status
%this.resetAssetsValidationStatus();
ImportAssetWindow.importIssues = false;
%id = ImportAssetTree.getChild(1);
%hasIssues = %this.validateAsset(%id);
if(%hasIssues)
if(ImportAssetWindow.importIssues == false)
return false;
else
return true;
@ -1179,6 +1086,7 @@ function ImportAssetWindow::validateAssets(%this)
function ImportAssetWindow::validateAsset(%this, %id)
{
%moduleName = ImportAssetModuleList.getText();
while (%id > 0)
@ -1229,21 +1137,17 @@ function ImportAssetWindow::validateAsset(%this, %id)
{
%foundCollision = true;
%assetItem.status = "Warning";
%assetItem.status = "error";
%assetItem.statusType = "DuplicateAsset";
%assetItem.statusInfo = "Duplicate asset names found with the target module!\nAsset \"" @
%assetItem.assetName @ "\" of type \"" @ %assetItem.assetType @ "\" has a matching name.\nPlease rename it and try again!";
//Clean up our queries
%assetQuery.delete();
break;
}
}
if(%foundCollision == true)
{
%hasIssues = true;
//yup, a collision, prompt for the change and bail out
/*MessageBoxOK( "Error!", "Duplicate asset names found with the target module!\nAsset \"" @
%assetItemA.assetName @ "\" of type \"" @ %assetItemA.assetType @ "\" has a matching name.\nPlease rename it and try again!");*/
@ -1259,7 +1163,6 @@ function ImportAssetWindow::validateAsset(%this, %id)
//Check if we were given a file path(so not generated) but somehow isn't a valid file
if(%assetItem.filePath !$= "" && !%assetItem.generatedAsset && !isFile(%assetItem.filePath))
{
%hasIssues = true;
%assetItem.status = "error";
%assetItem.statusType = "MissingFile";
%assetItem.statusInfo = "Unable to find file to be imported. Please select asset file.";
@ -1273,6 +1176,9 @@ function ImportAssetWindow::validateAsset(%this, %id)
}
}
if(%assetItem.status $= "error")
ImportAssetWindow.importIssues = true;
if(ImportAssetTree.isParentItem(%id))
{
%childItem = ImportAssetTree.getChild(%id);

View file

@ -9,7 +9,9 @@ function ImportAssetConfigList::onSelect( %this, %id, %text )
ImportAssetWindow.activeImportConfigIndex = %id;
ImportAssetWindow.activeImportConfig = ImportAssetWindow.importConfigsList.getKey(%id);
AssetBrowser.reloadImportingFiles();
//If we were trying to import anything, refresh it with the new config
if( AssetBrowser.importingFilesArray.count() != 0)
AssetBrowser.reloadImportingFiles();
}
function setupImportConfigSettingsList()
@ -428,8 +430,9 @@ function ImportOptionsConfigList::changeEditorSetting(%this, %varName, %value)
if(%oldValue !$= %value)
{
%id = %this.getSelectedRow();
%this.setSelectedRow(%id);
%scollPos = ImportAssetConfigEditorScroll.getScrollPosition();
ImportAssetConfigEditorWindow.populateConfigList(ImportAssetWindow.activeImportConfig);
ImportAssetConfigEditorScroll.setScrollPosition(%scollPos.x, %scollPos.y);
}
}

View file

@ -76,7 +76,7 @@ function AssetBrowser::duplicateComponentAsset(%this, %assetId)
}
function AssetBrowser::renameGameObjectAsset(%this, %assetDef, %newAssetId, %originalName, %newName)
function AssetBrowser::renameComponentAsset(%this, %assetDef, %newAssetId, %originalName, %newName)
{
%assetPath = AssetDatabase.getAssetFilePath(%newAssetId);

View file

@ -0,0 +1,95 @@
function AssetBrowser::buildFolderPreview(%this, %assetDef, %previewData)
{
%previewData.assetName = %assetDef.assetName;
%previewData.assetPath = %assetDef.dirPath;
//%previewData.previewImage = "tools/assetBrowser/art/folderIcon";
%previewData.previewImage = "tools/gui/images/folder";
//%previewData.assetFriendlyName = %assetDef.assetName;
%previewData.assetDesc = %assetDef.description;
%previewData.tooltip = %assetDef.dirPath;
%previewData.doubleClickCommand = "AssetBrowser.navigateTo(\""@ %assetDef.dirPath @ "/" @ %assetDef.assetName @"\")";//browseTo %assetDef.dirPath / %assetDef.assetName
}
function AssetBrowser::renameFolder(%this, %folderPath, %newFolderName)
{
%fullPath = makeFullPath(%folderPath);
%newFullPath = makeFullPath(%folderPath);
%fullPath = strreplace(%fullPath, "//", "/");
%count = getTokenCount(%fullPath, "/");
%basePath = getTokens(%fullPath, "/", 0, %count-2);
%oldName = getToken(%fullPath, "/", %count-1);
//We need to ensure that no files are 'active' while we try and clean up behind ourselves with the delete action
//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.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);
%this.loadFilters();
}
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);
}
}
}
function AssetBrowser::moveFolder(%this, %folderPath, %newFolderPath)
{
%fullPath = makeFullPath(%folderPath);
%newFullPath = makeFullPath(%newFolderPath);
%fullPath = strreplace(%fullPath, "//", "/");
%newFullPath = strreplace(%newFullPath, "//", "/");
%count = getTokenCount(%fullPath, "/");
%basePath = getTokens(%fullPath, "/", 0, %count-2);
%oldName = getToken(%fullPath, "/", %count-1);
%copiedSuccess = pathCopy(%fullPath, %newFullPath @ "/" @ %newFolderName);
%this.deleteFolder(%fullPath);
}

View file

@ -5,9 +5,11 @@ function AssetBrowser::createGUIAsset(%this)
%assetName = AssetBrowser.newAssetSettings.assetName;
%tamlpath = %modulePath @ "/GUIs/" @ %assetName @ ".asset.taml";
%guipath = %modulePath @ "/GUIs/" @ %assetName @ ".gui";
%scriptPath = %modulePath @ "/GUIs/" @ %assetName @ ".cs";
%assetPath = AssetBrowser.currentAddress @ "/";
%tamlpath = %assetPath @ %assetName @ ".asset.taml";
%guipath = %assetPath @ %assetName @ ".gui";
%scriptPath = %assetPath @ %assetName @ ".cs";
%asset = new GUIAsset()
{

View file

@ -117,7 +117,7 @@ function AssetBrowser::importImageAsset(%this, %assetItem)
%assetImportSuccessful = false;
%assetId = %moduleName@":"@%assetName;
%assetPath = "data/" @ %moduleName @ "/Images";
%assetPath = AssetBrowser.currentAddress @ "/";
%assetFullPath = %assetPath @ "/" @ fileName(%filePath);
%newAsset = new ImageAsset()

View file

@ -5,14 +5,20 @@ function AssetBrowser::createLevelAsset(%this)
%assetName = AssetBrowser.newAssetSettings.assetName;
%tamlpath = %modulePath @ "/levels/" @ %assetName @ ".asset.taml";
%levelPath = %modulePath @ "/levels/" @ %assetName @ ".mis";
%assetPath = AssetBrowser.currentAddress @ "/";
%tamlpath = %assetPath @ %assetName @ ".asset.taml";
%levelPath = %assetPath @ %assetName @ ".mis";
%asset = new LevelAsset()
{
AssetName = %assetName;
versionId = 1;
LevelFile = %assetName @ ".mis";
DecalsFile = %assetName @ ".mis.decals";
PostFXPresetFile = %assetName @ ".postfxpreset.cs";
ForestFile = %assetName @ ".forest";
NavmeshFile = %assetName @ ".nav";
LevelName = AssetBrowser.newAssetSettings.levelName;
AssetDescription = AssetBrowser.newAssetSettings.description;
PreviewImage = AssetBrowser.newAssetSettings.levelPreviewImage;
@ -24,6 +30,10 @@ function AssetBrowser::createLevelAsset(%this)
{
echo("Unable to copy template level file!");
}
//Generate the associated files
DecalManagerSave( %assetPath @ %asset.DecalsFile );
PostFXManager::savePresetHandler( %assetPath @ %asset.PostFXPresetFile );
%moduleDef = ModuleDatabase.findModule(%moduleName, 1);
AssetDatabase.addDeclaredAsset(%moduleDef, %tamlpath);

View file

@ -278,10 +278,10 @@ function AssetBrowser::importMaterialAsset(%this, %assetItem)
%assetImportSuccessful = false;
%assetId = %moduleName@":"@%assetName;
%assetPath = "data/" @ %moduleName @ "/materials";
%tamlpath = %assetPath @ "/" @ %assetName @ ".asset.taml";
%sgfPath = %assetPath @ "/" @ %assetName @ ".sgf";
%scriptPath = %assetPath @ "/" @ %assetName @ ".cs";
%assetPath = AssetBrowser.currentAddress @ "/";
%tamlpath = %assetPath @ %assetName @ ".asset.taml";
%sgfPath = %assetPath @ %assetName @ ".sgf";
%scriptPath = %assetPath @ %assetName @ ".cs";
%newAsset = new MaterialAsset()
{

View file

@ -3,10 +3,12 @@ function AssetBrowser::createScriptAsset(%this)
%moduleName = AssetBrowser.newAssetSettings.moduleName;
%modulePath = "data/" @ %moduleName;
%assetName = AssetBrowser.newAssetSettings.assetName;
%assetName = AssetBrowser.newAssetSettings.assetName;
%tamlpath = %modulePath @ "/scripts/" @ %assetName @ ".asset.taml";
%scriptPath = %modulePath @ "/scripts/" @ %assetName @ ".cs";
%assetPath = AssetBrowser.currentAddress @ "/";
%tamlpath = %assetPath @ %assetName @ ".asset.taml";
%scriptPath = %assetPath @ %assetName @ ".cs";
%asset = new ScriptAsset()
{

View file

@ -5,8 +5,10 @@ function AssetBrowser::createShapeAsset(%this)
%assetName = AssetBrowser.newAssetSettings.assetName;
%tamlpath = %modulePath @ "/shapes/" @ %assetName @ ".asset.taml";
%shapeFilePath = %modulePath @ "/shapes/" @ %assetName @ ".dae";
%assetPath = AssetBrowser.currentAddress @ "/";
%tamlpath = %assetPath @ %assetName @ ".asset.taml";
%shapeFilePath = %assetPath @ %assetName @ ".dae";
%asset = new ShapeAsset()
{

View file

@ -1,5 +1,38 @@
function AssetBrowser::createTerrainAsset(%this)
{
%moduleName = AssetBrowser.newAssetSettings.moduleName;
%modulePath = "data/" @ %moduleName;
%assetName = AssetBrowser.newAssetSettings.assetName;
%assetType = AssetBrowser.newAssetSettings.assetType;
%assetPath = AssetBrowser.currentAddress @ "/";
%tamlpath = %assetPath @ %assetName @ ".asset.taml";
%terPath = %assetPath @ %assetName @ ".ter";
%asset = new TerrainAsset()
{
AssetName = %assetName;
versionId = 1;
terrainFile = %assetName @ ".ter";
};
TamlWrite(%asset, %tamlpath);
%moduleDef = ModuleDatabase.findModule(%moduleName, 1);
AssetDatabase.addDeclaredAsset(%moduleDef, %tamlpath);
AssetBrowser.loadFilters();
AssetBrowserFilterTree.onSelect(%smItem);
//Save out a basic terrain block here
%terrBlock = new TerrainBlock() { terrainFile = %terPath; };
%terrBlock.save(%terPath);
%terrBlock.delete();
return %tamlpath;
}
function AssetBrowser::editTerrainAsset(%this, %assetDef)

View file

@ -1,9 +1,70 @@
function AssetBrowser::createTerrainMaterialAsset(%this)
{
%moduleName = AssetBrowser.newAssetSettings.moduleName;
%modulePath = "data/" @ %moduleName;
%assetName = AssetBrowser.newAssetSettings.assetName;
%assetType = AssetBrowser.newAssetSettings.assetType;
%assetPath = AssetBrowser.currentAddress @ "/";
%tamlpath = %assetPath @ %assetName @ ".asset.taml";
%scriptPath = %assetPath @ %assetName @ ".cs";
%asset = new TerrainMaterialAsset()
{
AssetName = %assetName;
versionId = 1;
scriptFile = %assetName @ ".cs";
materialDefinitionName = %assetName;
};
TamlWrite(%asset, %tamlpath);
%moduleDef = ModuleDatabase.findModule(%moduleName, 1);
AssetDatabase.addDeclaredAsset(%moduleDef, %tamlpath);
AssetBrowser.loadFilters();
AssetBrowserFilterTree.onSelect(%smItem);
%file = new FileObject();
%templateFile = new FileObject();
%templateFilePath = %this.templateFilesPath @ "terrainMaterial.cs.template";
if(%file.openForWrite(%scriptPath) && %templateFile.openForRead(%templateFilePath))
{
while( !%templateFile.isEOF() )
{
%line = %templateFile.readline();
%line = strreplace( %line, "@", %assetName );
%file.writeline(%line);
//echo(%line);
}
%file.close();
%templateFile.close();
}
else
{
%file.close();
%templateFile.close();
warnf("CreateNewTerrainMaterialAsset - Something went wrong and we couldn't write thescript file!");
}
//If we've got the terrain mat editor open, go ahead and update it all
TerrainMaterialDlg.onWake();
return %tamlpath;
}
function AssetBrowser::editTerrainMaterialAsset(%this, %assetDef)
{
TerrainMaterialDlg.show(0, 0, 0);
TerrainMaterialDlg.setActiveMaterial(%assetDef.assetName);
}
function AssetBrowser::duplicateTerrainMaterialAsset(%this, %assetDef, %targetModule)

View file

@ -76,7 +76,7 @@ function AssetBrowser::refreshAsset(%this, %assetId)
function AssetBrowser::renameAsset(%this)
{
//Find out what type it is
%assetDef = AssetDatabase.acquireAsset(EditAssetPopup.assetId);
//%assetDef = AssetDatabase.acquireAsset(EditAssetPopup.assetId);
%curFirstResponder = AssetBrowser.getFirstResponder();
@ -92,36 +92,56 @@ 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;
//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(EditAssetPopup.assetType !$= "Folder")
{
%newAssetId = %moduleName @ ":" @ %newName;
%assetPath = AssetDatabase.getAssetFilePath(%newAssetId);
%moduleName = AssetBrowser.selectedModule;
//Rename any associated files as well
%assetDef = AssetDatabase.acquireAsset(%newAssetId);
%assetType = %assetDef.getClassName();
//do a rename!
%success = AssetDatabase.renameDeclaredAsset(%moduleName @ ":" @ %originalAssetName, %moduleName @ ":" @ %newName);
//rename the file to match
%path = filePath(%assetPath);
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.");
//Do the rename command
%buildCommand = %this @ ".rename" @ %assetType @ "(" @ %assetDef @ "," @ %newAssetId @ ");";
eval(%buildCommand);
if(%success)
{
%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);
//Do the rename command
%buildCommand = %this @ ".rename" @ %assetType @ "(" @ %assetDef @ "," @ %newAssetId @ ");";
eval(%buildCommand);
}
}
else
{
%buildCommand = %this @ ".renameFolder(\"" @ EditAssetPopup.assetId @ "\",\"" @ %newName @ "\");";
eval(%buildCommand);
}
}
//Make sure everything is refreshed
AssetBrowser.loadFilters();
//Update the selection to immediately jump to the new asset
AssetBrowser-->filterTree.clearSelection();
%ModuleItem = AssetBrowser-->filterTree.findItemByName(%moduleName);
%assetTypeId = AssetBrowser-->filterTree.findChildItemByName(%ModuleItem, %assetType);
AssetBrowser-->filterTree.selectItem(%assetTypeId);
%selectedItem = AssetBrowser-->filterTree.getSelectedItem();
AssetBrowser-->filterTree.scrollVisibleByObjectId(%selectedItem);
AssetBrowser-->filterTree.buildVisibleTree();
}
function AssetNameField::onReturn(%this)
@ -132,6 +152,26 @@ function AssetNameField::onReturn(%this)
AssetBrowser.performRenameAsset(%this.originalAssetName, %this.getText());
}
//------------------------------------------------------------
function AssetBrowser::moveAsset(%this, %destination)
{
if(EditAssetPopup.assetType $= "Folder")
{
//Do any cleanup required given the type
if(%this.isMethod("moveFolder"))
eval(%this @ ".moveFolder("@EditAssetPopup.assetId@",\""@%destination@"\");");
}
else
{
%assetDef = AssetDatabase.acquireAsset(EditAssetPopup.assetId);
%assetType = AssetDatabase.getAssetType(EditAssetPopup.assetType);
//Do any cleanup required given the type
if(%this.isMethod("move"@%assetType))
eval(%this @ ".move"@%assetType@"("@%assetDef@");");
}
}
//------------------------------------------------------------
function AssetBrowser::duplicateAsset(%this, %targetModule)
@ -157,10 +197,10 @@ function AssetBrowser::duplicateAsset(%this, %targetModule)
function AssetBrowser::deleteAsset(%this)
{
//Find out what type it is
%assetDef = AssetDatabase.acquireAsset(EditAssetPopup.assetId);
%assetType = %assetDef.getClassName();
//%assetDef = AssetDatabase.acquireAsset(EditAssetPopup.assetId);
//%assetType = %assetDef.getClassName();
MessageBoxOKCancel("Warning!", "This will delete the selected asset and the files associated to it, do you wish to continue?",
MessageBoxOKCancel("Warning!", "This will delete the selected content and the files associated to it, do you wish to continue?",
"AssetBrowser.confirmDeleteAsset();", "");
}
@ -169,14 +209,23 @@ function AssetBrowser::confirmDeleteAsset(%this)
%currentSelectedItem = AssetBrowserFilterTree.getSelectedItem();
%currentItemParent = AssetBrowserFilterTree.getParentItem(%currentSelectedItem);
%assetDef = AssetDatabase.acquireAsset(EditAssetPopup.assetId);
%assetType = AssetDatabase.getAssetType(EditAssetPopup.assetId);
//Do any cleanup required given the type
if(%this.isMethod("delete"@%assetType))
eval(%this @ ".delete"@%assetType@"("@%assetDef@");");
AssetDatabase.deleteAsset(EditAssetPopup.assetId, false);
if(EditAssetPopup.assetType $= "Folder")
{
//Do any cleanup required given the type
if(%this.isMethod("deleteFolder"))
eval(%this @ ".deleteFolder(\""@EditAssetPopup.assetId@"\");");
}
else
{
%assetDef = AssetDatabase.acquireAsset(EditAssetPopup.assetId);
%assetType = AssetDatabase.getAssetType(EditAssetPopup.assetType);
//Do any cleanup required given the type
if(%this.isMethod("delete"@%assetType))
eval(%this @ ".delete"@%assetType@"("@%assetDef@");");
AssetDatabase.deleteAsset(EditAssetPopup.assetId, false);
}
%this.loadFilters();

View file

@ -191,6 +191,18 @@ function CreateNewAsset()
%callbackCommand = "" @ AssetBrowser_newAsset.callbackFunc @ "(\"" @ %moduleName @ ":" @ %assetName @ "\");";
eval(%callbackCommand);
}
//Update the selection to immediately jump to the new asset
AssetBrowser-->filterTree.clearSelection();
%ModuleItem = AssetBrowser-->filterTree.findItemByName(%moduleName);
%assetTypeId = AssetBrowser-->filterTree.findChildItemByName(%ModuleItem, %assetType);
AssetBrowser-->filterTree.selectItem(%assetTypeId);
%selectedItem = AssetBrowser-->filterTree.getSelectedItem();
AssetBrowser-->filterTree.scrollVisibleByObjectId(%selectedItem);
AssetBrowser-->filterTree.buildVisibleTree();
}
function ParentComponentList::onWake(%this)

View file

@ -14,7 +14,8 @@ function AssetBrowser::buildPopupMenus(%this)
AddNewModulePopup.enableItem(1, false);
}
if( !isObject( EditAssetPopup ) )
{
new PopupMenu( EditAssetPopup )
@ -55,9 +56,9 @@ function AssetBrowser::buildPopupMenus(%this)
item[ 5 ] = "-";
Item[ 6 ] = "Duplicate Asset" TAB "" TAB "AssetBrowser.duplicateAsset();";
item[ 7 ] = "-";
item[ 8 ] = "Re-Import Asset" TAB "" TAB "AssetBrowser.reImportAsset();";
item[ 9 ] = "-";
item[ 10 ] = "Delete Asset" TAB "" TAB "AssetBrowser.deleteAsset();";
//item[ 8 ] = "Re-Import Asset" TAB "" TAB "AssetBrowser.reImportAsset();";
//item[ 9 ] = "-";
item[ 8 ] = "Delete Asset" TAB "" TAB "AssetBrowser.deleteAsset();";
jumpFileName = "";
jumpLineNumber = "";
@ -105,20 +106,23 @@ function AssetBrowser::buildPopupMenus(%this)
//isPopup = true;
item[ 0 ] = "Create Material" TAB "" TAB "AssetBrowser.setupCreateNewAsset(\"MaterialAsset\", AssetBrowser.selectedModule);";//"createNewMaterialAsset(\"NewMaterial\", AssetBrowser.selectedModule);";
item[ 1 ] = "Create Image" TAB "" TAB "AssetBrowser.setupCreateNewAsset(\"ImageAsset\", AssetBrowser.selectedModule);";//"AssetBrowser.createNewImageAsset(\"NewImage\", AssetBrowser.selectedModule);";
item[ 2 ] = "-";
item[ 3 ] = "Create Shape" TAB "" TAB "AssetBrowser.setupCreateNewAsset(\"Shape\", AssetBrowser.selectedModule);";
item[ 4 ] = "Create Shape Animation" TAB "" TAB "AssetBrowser.setupCreateNewAsset(\"ShapeAnimationAsset\", AssetBrowser.selectedModule);";//"AssetBrowser.createNewShapeAnimationAsset(\"NewShapeAnimation\", AssetBrowser.selectedModule);";
item[ 5 ] = "-";
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);";
item[ 9 ] = "-";
item[ 10 ] = "Create Sound" TAB "" TAB "AssetBrowser.setupCreateNewAsset(\"SoundAsset\", AssetBrowser.selectedModule);";//"AssetBrowser.createNewSoundAsset(\"NewSound\", AssetBrowser.selectedModule);";
item[ 11 ] = "-";
item[ 12 ] = "Create Particle Effect" TAB "" TAB "AssetBrowser.setupCreateNewAsset(\"ParticleEffectAsset\", AssetBrowser.selectedModule);";//"AssetBrowser.createNewParticleEffectAsset(\"NewParticleEffect\", AssetBrowser.selectedModule);";
item[ 13 ] = "-";
item[ 14 ] = "Create Cubemap" TAB "" TAB "AssetBrowser.setupCreateNewAsset(\"CubemapAsset\", 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 ] = "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);";
};
}
@ -148,15 +152,17 @@ function AssetBrowser::buildPopupMenus(%this)
superClass = "MenuBuilder";
class = "EditorWorldMenu";
item[0] = "Create Code Asset" TAB AddNewScriptAssetPopup;
item[0] = "Create Folder" TAB "" TAB "AssetBrowser.CreateNewFolder();";
item[1] = "-";
item[2] = "Create Art Asset" TAB AddNewArtAssetPopup;
item[2] = "Create Code Asset" TAB AddNewScriptAssetPopup;
item[3] = "-";
item[4] = "Create Level" TAB "" TAB "AssetBrowser.setupCreateNewAsset(\"LevelAsset\", AssetBrowser.selectedModule);";//"AssetBrowser.createNewLevelAsset(\"NewLevel\", AssetBrowser.selectedModule);";
item[4] = "Create Art Asset" TAB AddNewArtAssetPopup;
item[5] = "-";
item[6] = "Create C++ Asset" TAB AddNewCppAssetPopup;
item[6] = "Create Level" TAB "" TAB "AssetBrowser.setupCreateNewAsset(\"LevelAsset\", AssetBrowser.selectedModule);";//"AssetBrowser.createNewLevelAsset(\"NewLevel\", AssetBrowser.selectedModule);";
item[7] = "-";
item[8] = "Create New Module" TAB "" TAB "AssetBrowser.CreateNewModule();";
item[8] = "Create C++ Asset" TAB AddNewCppAssetPopup;
item[9] = "-";
item[10] = "Create New Module" TAB "" TAB "AssetBrowser.CreateNewModule();";
};
}
@ -181,10 +187,27 @@ function AssetBrowser::buildPopupMenus(%this)
}
//Some assets are not yet ready/implemented, so disable their creation here
AddNewArtAssetPopup.enableItem(3, false); //shape
AddNewArtAssetPopup.enableItem(4, false); //shape animation
AddNewArtAssetPopup.enableItem(10, false); //sound asset
AddNewArtAssetPopup.enableItem(12, false); //particle effect
AddNewArtAssetPopup.enableItem(6, false); //shape
AddNewArtAssetPopup.enableItem(7, false); //shape animation
AddNewArtAssetPopup.enableItem(13, false); //sound asset
AddNewArtAssetPopup.enableItem(15, false); //particle effect
if( !isObject( EditFolderPopup ) )
{
new PopupMenu( EditFolderPopup )
{
superClass = "MenuBuilder";
class = "EditorWorldMenu";
//isPopup = true;
Item[ 0 ] = "Create in Folder" TAB AddNewAssetPopup;
item[ 1 ] = "-";
item[ 2 ] = "Rename Folder" TAB "" TAB "AssetBrowser.renameAsset();";
Item[ 3 ] = "Duplicate Folder" TAB "" TAB "AssetBrowser.duplicateAsset();";
item[ 4 ] = "-";
item[ 5 ] = "Delete Folder" TAB "" TAB "AssetBrowser.deleteAsset();";
};
}
if( !isObject( EditAssetCategoryPopup ) )
{
@ -198,6 +221,38 @@ function AssetBrowser::buildPopupMenus(%this)
};
}
//Asset Preview size presets
if( !isObject( AssetPreviewSizePopup ) )
{
new PopupMenu( AssetPreviewSizePopup )
{
superClass = "MenuBuilder";
class = "EditorWorldMenu";
item[ 0 ] = "Small" TAB "" TAB "AssetBrowser.setPreviewSize(\"Small\");";
item[ 1 ] = "Medium" TAB "" TAB "AssetBrowser.setPreviewSize(\"Medium\");";
Item[ 2 ] = "Large" TAB "" TAB "AssetBrowser.setPreviewSize(\"Large\");";
};
AssetPreviewSizePopup.checkItem(0, true);
}
if( !isObject( AssetTypeListPopup ) )
{
new PopupMenu( AssetTypeListPopup )
{
superClass = "MenuBuilder";
class = "EditorWorldMenu";
//isPopup = true;
};
/*for(%i=0; %i < AssetFilterTypeList.Count(); %i++)
{
%assetTypeName = AssetFilterTypeList.getKey(%i);
AssetTypeListPopup.insertItem(%i, %assetTypeName, "", "AssetBrowser.toggleAssetTypeFilter(" @ %i @ ");");
}*/
}
//Browser visibility menu
if( !isObject( BrowserVisibilityPopup ) )
{
@ -208,13 +263,26 @@ function AssetBrowser::buildPopupMenus(%this)
//isPopup = true;
item[ 0 ] = "Toggle Show Core Modules" TAB "" TAB "AssetBrowser.viewCoreModulesFilter();";
item[ 1 ] = "Toggle Only Show Modules with Assets" TAB "" TAB "AssetBrowser.viewPopulatedModulesFilter();";
Item[ 2 ] = "-";
item[ 3 ] = "Show Assets as list" TAB "" TAB "AssetBrowser.viewListFilter();";
Item[ 4 ] = "Show Assets with tags" TAB "" TAB "AssetBrowser.viewTagsFilter();";
item[ 1 ] = "Toggle Show Tools Modules" TAB "" TAB "AssetBrowser.viewToolsModulesFilter();";
item[ 2 ] = "Toggle Only Show Modules with Assets" TAB "" TAB "AssetBrowser.viewPopulatedModulesFilter();";
Item[ 3 ] = "-";
item[ 4 ] = "Show Folders" TAB "" TAB "AssetBrowser.toggleShowingFolders();";
item[ 5 ] = "Show Empty Folders" TAB "" TAB "AssetBrowser.toggleShowingEmptyFolders();";
item[ 6 ] = "-";
item[ 7 ] = "Filter by Asset Type" TAB AssetTypeListPopup;
item[ 8 ] = "-";
item[ 9 ] = "Enable Auto-refresh" TAB "" TAB "AssetBrowser.toggleAutorefresh();";
Item[ 10 ] = "-";
Item[ 11 ] = "Asset Preview Size" TAB AssetPreviewSizePopup;
};
BrowserVisibilityPopup.enableItem(5, false);
BrowserVisibilityPopup.enableItem(7, false);
BrowserVisibilityPopup.enableItem(9, false);
}
//
//Import Legacy menus
if( !isObject( ImportAssetsPopup ) )
{
@ -266,6 +334,7 @@ function AssetBrowser::buildPopupMenus(%this)
};
}
}
function AddNewScriptAssetPopupMenu::onSelectItem(%this, %id, %text)

View file

@ -0,0 +1,24 @@
singleton Material(TerrainFX_@)
{
mapTo = "@";
footstepSoundId = 0;
terrainMaterials = "1";
ShowDust = "1";
showFootprints = "1";
materialTag0 = "Terrain";
effectColor[0] = "0.42 0.42 0 1";
effectColor[1] = "0.42 0.42 0 1";
impactSoundId = "0";
};
new TerrainMaterial(@)
{
internalName = "@";
diffuseMap = "";
detailMap = "";
detailSize = "10";
isManaged = "1";
detailBrightness = "1";
Enabled = "1";
diffuseSize = "200";
};

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.5 KiB

After

Width:  |  Height:  |  Size: 3.8 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.1 KiB

After

Width:  |  Height:  |  Size: 10 KiB

Before After
Before After

View file

@ -20,7 +20,7 @@
minExtent = "8 2";
horizSizing = "center";
vertSizing = "center";
profile = "ToolsGuiDefaultProfile";
profile = "ToolsGuiSolidDefaultProfile";
visible = "1";
active = "1";
tooltipProfile = "ToolsGuiToolTipProfile";

View file

@ -32,6 +32,7 @@ function ESettingsWindow::startup( %this )
%this.addEditorSettingsPage("ShapeEditor", "Shape Editor");
%this.addEditorSettingsPage("NavEditor", "Navigation Editor");
%this.addEditorSettingsPage("Theme", "Theme");
%this.addEditorSettingsPage("AssetEditing", "Asset Editing");
%this.addGameSettingsPage("GameGeneral", "General");
%this.addGameSettingsPage("Gameplay", "Gameplay");
@ -185,7 +186,7 @@ function SettingsInspector::changeEditorSetting(%this, %varName, %value)
%success = ProjectSettings.write();
if(%oldValue !$= %value)
ESettingsWindow.refresh();
ESettingsWindow.schedule(15,"refresh");
}
function GuiInspectorVariableGroup::buildOptionsSettingField(%this, %fieldName, %fieldLabel, %fieldDesc, %fieldDefaultVal, %fieldDataVals, %ownerObj)
@ -292,6 +293,12 @@ function ESettingsWindow::getGeneralSettings(%this)
SettingsInspector.addSettingsField("WorldEditor/Theme/windowTitleFontColor", "Window Title Text Color", "colorI", "");
SettingsInspector.addSettingsField("WorldEditor/Theme/mainTextColor", "Main Text Color", "colorI", "");
SettingsInspector.endGroup();
SettingsInspector.startGroup("Layout");
SettingsInspector.addSettingsField("WorldEditor/Layout/LayoutMode", "Editor Layout Mode", "list", "This dictates which layout style the editor should use." @
"WARNING - Modern layout is highlight experimental." @
"Updating this requires a restart of the program", "Classic,Modern");
SettingsInspector.endGroup();
}
function ESettingsWindow::getCameraSettings(%this)
@ -380,6 +387,7 @@ function ESettingsWindow::getThemeSettings(%this)
SettingsInspector.addSettingsField("Theme/fieldTextColor", "Field Text Color", "ColorI", "");
SettingsInspector.addSettingsField("Theme/fieldTextHLColor", "Field Text Highlight Color", "ColorI", "");
SettingsInspector.addSettingsField("Theme/fieldTextSELColor", "Field Text Selected Color", "ColorI", "");
SettingsInspector.addSettingsField("Theme/fieldTextNAColor", "Field Text N/A Color", "ColorI", "");
SettingsInspector.addSettingsField("Theme/fieldBGColor", "Field Background Color", "ColorI", "");
SettingsInspector.addSettingsField("Theme/fieldBGHLColor", "Field Background Highlight Color", "ColorI", "");
@ -431,9 +439,38 @@ function ESettingsWindow::getAssetManagementSettings(%this)
SettingsInspector.addSettingsField("AssetManagement/Assets/assetExtension", "Asset Extension", "string", "");
SettingsInspector.addSettingsField("AssetManagement/Assets/datablockCaching", "Cache Datablocks", "bool", "");
//SettingsInspector.addSettingsField("AssetManagement/Assets/moduleExtension", "Module Extension", "string", "");
SettingsInspector.endGroup();
}
function ESettingsWindow::getAssetEditingSettings(%this)
{
ImportAssetWindow::reloadImportOptionConfigs();
for(%i=0; %i < ImportAssetWindow.importConfigsList.Count(); %i++)
{
%configName = ImportAssetWindow.importConfigsList.getKey(%i);
%formattedConfigList = %i == 0 ? %configName : %formattedConfigList @ "," @ %configName;
}
SettingsInspector.startGroup("Assets Importing");
SettingsInspector.addSettingsField("Assets/AssetImporDefaultConfig", "Default Asset Import Config", "list", "", %formattedConfigList);
SettingsInspector.addSettingsField("Assets/AutoImport", "Automatically Import using default config", "bool", "If on, the asset importing process" @
"will attempt to automatically import any inbound assets"@
"using the default config, without prompting the import window."@
"The window will still display if any issues are detected", "");
SettingsInspector.endGroup();
SettingsInspector.startGroup("Asset Browser");
SettingsInspector.addSettingsField("Assets/Browser/showCoreModule", "Show Core Module in Asset Browser", "bool", "");
SettingsInspector.addSettingsField("Assets/Browser/showToolsModule", "Show Tools Module in Asset Browser", "bool", "");
SettingsInspector.addSettingsField("Assets/Browser/showOnlyPopulatedModule", "Show Only Modules with Assets in Asset Browser", "bool", "");
SettingsInspector.addSettingsField("Assets/Browser/showFolders", "Show Folders in Tiles view in Asset Browser", "bool", "");
SettingsInspector.addSettingsField("Assets/Browser/showEmptyFolders", "Show Empty Folders in Tiles view in Asset Browser", "bool", "");
SettingsInspector.addSettingsField("Assets/Browser/previewTileSize", "Asset Preview Tile Size", "bool", "");
SettingsInspector.endGroup();
}
function ESettingsWindow::getGameplaySettings(%this)
{
SettingsInspector.startGroup("Game Modes");

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

View file

@ -37,7 +37,7 @@ new GuiControlProfile (ToolsGuiDefaultProfile)
mouseOverSelected = false;
// fill color
opaque = true;
opaque = false;
fillColor = EditorSettings.value("Theme/tabsColor");
fillColorHL = EditorSettings.value("Theme/tabsGLColor");
fillColorSEL = EditorSettings.value("Theme/tabsSELColor");
@ -79,7 +79,7 @@ new GuiControlProfile (ToolsGuiDefaultProfile)
};
if( !isObject( ToolsGuiSolidDefaultProfile ) )
new GuiControlProfile (ToolsGuiSolidDefaultProfile)
new GuiControlProfile (ToolsGuiSolidDefaultProfile : ToolsGuiDefaultProfile)
{
opaque = true;
border = true;
@ -1109,7 +1109,7 @@ singleton GuiControlProfile( ToolsGuiMenuBarProfile )
fontColor = EditorSettings.value("Theme/headerTextColor");
fontColorSEL = EditorSettings.value("Theme/fieldTextSELColor");
fontColorHL = EditorSettings.value("Theme/fieldTextHLColor");
fontColorNA = EditorSettings.value("Theme/fieldTextSELColor");
fontColorNA = EditorSettings.value("Theme/fieldTextNAColor");
border = 0;
borderThickness = 1;
opaque = true;
@ -1123,6 +1123,8 @@ singleton GuiControlProfile( ToolsMenubarProfile : ToolsGuiDefaultProfile )
bitmap = "./menubar";
category = "Editor";
opaque = true;
fillColor = EditorSettings.value("Theme/headerColor");
fontColor = EditorSettings.value("Theme/headerTextColor");
fontColorHL = EditorSettings.value("Theme/fieldTextHLColor");

View file

@ -1,5 +1,193 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<EditorSettings>
<Group name="MeshRoadEditor">
<Setting name="HoverSplineColor">255 0 0 255</Setting>
<Setting name="SelectedSplineColor">0 255 0 255</Setting>
<Setting name="sideMaterialName">DefaultRoadMaterialOther</Setting>
<Setting name="DefaultWidth">10</Setting>
<Setting name="topMaterialName">DefaultRoadMaterialTop</Setting>
<Setting name="DefaultNormal">0 0 1</Setting>
</Group>
<Group name="TerrainEditor">
<Setting name="currentAction">lowerHeight</Setting>
<Group name="ActionValues">
<Setting name="softSelectRadius">50</Setting>
<Setting name="softSelectDefaultFilter">1.000000 0.833333 0.666667 0.500000 0.333333 0.166667 0.000000</Setting>
<Setting name="setHeightVal">100</Setting>
<Setting name="scaleVal">1</Setting>
<Setting name="softSelectFilter">1.000000 0.833333 0.666667 0.500000 0.333333 0.166667 0.000000</Setting>
<Setting name="SlopeMaxAngle">90</Setting>
<Setting name="SlopeMinAngle">0</Setting>
<Setting name="smoothFactor">0.1</Setting>
<Setting name="noiseFactor">1</Setting>
<Setting name="adjustHeightVal">10</Setting>
</Group>
<Group name="Brush">
<Setting name="brushSize">40 40</Setting>
<Setting name="maxBrushSize">40 40</Setting>
<Setting name="brushSoftness">1</Setting>
<Setting name="brushPressure">1</Setting>
<Setting name="brushType">ellipse</Setting>
</Group>
</Group>
<Group name="Theme">
<Setting name="dividerDarkColor">17 16 15 255</Setting>
<Setting name="fieldTextHLColor">234 232 230 255</Setting>
<Setting name="fieldTextColor">178 175 172 255</Setting>
<Setting name="fieldTextSELColor">255 255 255 255</Setting>
<Setting name="fieldBGHLColor">72 70 68 255</Setting>
<Setting name="dividerMidColor">50 49 48 255</Setting>
<Setting name="tooltipBGColor">43 43 43 255</Setting>
<Setting name="windowBackgroundColor">32 31 30 255</Setting>
<Setting name="fieldBGColor">59 58 57 255</Setting>
<Setting name="fieldBGSELColor">100 98 96 255</Setting>
<Setting name="tabsColor">37 36 35 255</Setting>
<Setting name="tabsHLColor">50 49 48 255</Setting>
<Setting name="headerColor">50 49 48 255</Setting>
<Setting name="fieldTextNAColor">77 77 77 255</Setting>
<Setting name="tooltipTextColor">255 255 255 255</Setting>
<Setting name="headerTextColor">236 234 232 255</Setting>
<Setting name="tooltipDividerColor">72 70 68 255</Setting>
<Setting name="tabsSELColor">59 58 57 255</Setting>
<Setting name="dividerLightColor">96 94 92 255</Setting>
</Group>
<Group name="GuiEditor">
<Setting name="lastPath">tools/worldEditor/gui</Setting>
<Setting name="previewResolution">1024 768</Setting>
<Group name="Library">
<Setting name="viewType">Categorized</Setting>
</Group>
<Group name="Snapping">
<Setting name="snapToCanvas">1</Setting>
<Setting name="snapToCenters">1</Setting>
<Setting name="sensitivity">2</Setting>
<Setting name="snap2Grid">0</Setting>
<Setting name="snap2GridSize">8</Setting>
<Setting name="snapToControls">1</Setting>
<Setting name="snapToEdges">1</Setting>
<Setting name="snapToGuides">1</Setting>
</Group>
<Group name="Rendering">
<Setting name="drawGuides">1</Setting>
<Setting name="drawBorderLines">1</Setting>
</Group>
<Group name="Help">
<Setting name="documentationURL">http://www.garagegames.com/products/torque-3d/documentation/user</Setting>
<Setting name="documentationReference">../../../Documentation/Torque 3D - Script Manual.chm</Setting>
<Setting name="documentationLocal">../../../Documentation/Official Documentation.html</Setting>
</Group>
<Group name="Selection">
<Setting name="fullBox">0</Setting>
</Group>
<Group name="EngineDevelopment">
<Setting name="showEditorProfiles">0</Setting>
<Setting name="toggleIntoEditor">0</Setting>
<Setting name="showEditorGuis">0</Setting>
</Group>
</Group>
<Group name="ShapeEditor">
<Setting name="SunAngleZ">135</Setting>
<Setting name="gridDimension">40 40</Setting>
<Setting name="gridSize">0.1</Setting>
<Setting name="showObjBox">1</Setting>
<Setting name="AdvancedWndVisible">1</Setting>
<Setting name="showNodes">1</Setting>
<Setting name="ShowGrid">1</Setting>
<Setting name="SunDiffuseColor">255 255 255 255</Setting>
<Setting name="SunAngleX">45</Setting>
<Setting name="highlightMaterial">1</Setting>
<Setting name="backgroundColor">0 0 0 100</Setting>
<Setting name="renderMounts">1</Setting>
<Setting name="RenderCollision">0</Setting>
<Setting name="showBounds">0</Setting>
<Setting name="SunAmbientColor">180 180 180 255</Setting>
</Group>
<Group name="WorldEditor">
<Setting name="forceLoadDAE">0</Setting>
<Setting name="torsionPath">AssetWork_Debug.exe</Setting>
<Setting name="orthoFOV">50</Setting>
<Setting name="undoLimit">40</Setting>
<Setting name="EditorLayoutMode">Modern</Setting>
<Setting name="dropType">screenCenter</Setting>
<Setting name="orthoShowGrid">1</Setting>
<Setting name="displayType">6</Setting>
<Setting name="currentEditor">TerrainPainterPlugin</Setting>
<Group name="Images">
<Setting name="selectHandle">tools/worldEditor/images/SelectHandle</Setting>
<Setting name="lockedHandle">tools/worldEditor/images/LockedHandle</Setting>
<Setting name="defaultHandle">tools/worldEditor/images/DefaultHandle</Setting>
</Group>
<Group name="Docs">
<Setting name="documentationURL">http://www.garagegames.com/products/torque-3d/documentation/user</Setting>
<Setting name="forumURL">http://www.garagegames.com/products/torque-3d/forums</Setting>
<Setting name="documentationLocal">../../../Documentation/Official Documentation.html</Setting>
<Setting name="documentationReference">../../../Documentation/Torque 3D - Script Manual.chm</Setting>
</Group>
<Group name="Theme">
<Setting name="windowTitleFontColor">215 215 215 255</Setting>
<Setting name="windowTitleFontHLColor">255 255 255 255</Setting>
<Setting name="windowTitleBGColor">50 50 50 255</Setting>
<Setting name="windowTitleBGHLColor">48 48 48 255</Setting>
<Setting name="windowTitleBGNAColor">180 180 180 255</Setting>
</Group>
<Group name="Grid">
<Setting name="gridColor">102 102 102 100</Setting>
<Setting name="gridOriginColor">255 255 255 100</Setting>
<Setting name="gridMinorColor">51 51 51 100</Setting>
<Setting name="gridSize">1</Setting>
<Setting name="gridSnap">1</Setting>
</Group>
<Group name="ObjectIcons">
<Setting name="fadeIcons">1</Setting>
<Setting name="fadeIconsStartDist">8</Setting>
<Setting name="fadeIconsEndDist">20</Setting>
<Setting name="fadeIconsEndAlpha">0</Setting>
<Setting name="fadeIconsStartAlpha">255</Setting>
</Group>
<Group name="Tools">
<Setting name="dropAtScreenCenterScalar">1</Setting>
<Setting name="TerrainSnapOffsetZ">0</Setting>
<Setting name="OffsetZValue">0.01</Setting>
<Setting name="objectsUseBoxCenter">1</Setting>
<Setting name="boundingBoxCollision">0</Setting>
<Setting name="dropAtScreenCenterMax">100</Setting>
<Setting name="snapGround">0</Setting>
<Setting name="snapSoft">0</Setting>
<Setting name="snapSoftSize">2</Setting>
</Group>
<Group name="Render">
<Setting name="renderObjText">1</Setting>
<Setting name="renderPopupBackground">1</Setting>
<Setting name="showMousePopupInfo">1</Setting>
<Setting name="renderSelectionBox">1</Setting>
<Setting name="renderObjHandle">1</Setting>
</Group>
<Group name="Color">
<Setting name="objMouseOverSelectColor">0 0 255 255</Setting>
<Setting name="objSelectColor">255 0 0 255</Setting>
<Setting name="objMouseOverColor">0 255 0 255</Setting>
<Setting name="dragRectColor">255 255 0 255</Setting>
<Setting name="objectTextColor">255 255 255 255</Setting>
<Setting name="selectionBoxColor">255 255 0 255</Setting>
<Setting name="popupBackgroundColor">100 100 100 255</Setting>
</Group>
<Group name="Layout">
<Setting name="LayoutMode">Classic</Setting>
</Group>
</Group>
<Group name="AssetCreation">
<Setting name="CubemapAssetSubdirectoryFormat">&lt;AssetType&gt;/</Setting>
<Setting name="LevelAssetSubdirectoryFormat">&lt;AssetType&gt;/&lt;AssetName&gt;/</Setting>
<Setting name="AssetImporDefaultConfig">TestConfig</Setting>
<Setting name="PostFXAssetSubdirectoryFormat">&lt;AssetType&gt;/</Setting>
<Setting name="CppAssetSubdirectoryFormat">&lt;AssetType&gt;/&lt;SpecialAssetTag&gt;/</Setting>
<Setting name="StatemachineAssetSubdirectoryFormat">&lt;AssetType&gt;/</Setting>
<Setting name="TerrainMatAssetSubdirectoryFormat">&lt;AssetType&gt;/</Setting>
<Setting name="ScriptAssetSubdirectoryFormat">&lt;AssetType&gt;/&lt;SpecialAssetTag&gt;/</Setting>
<Setting name="AutoImport">1</Setting>
<Setting name="TerrainAssetSubdirectoryFormat">&lt;AssetType&gt;/</Setting>
<Setting name="GUIAssetSubdirectoryFormat">&lt;AssetType&gt;/OtherFolder/</Setting>
</Group>
<Group name="LevelInformation">
<Setting name="levelsDirectory">data/FPSGameplay/levels</Setting>
<Group name="levels">
@ -11,209 +199,51 @@
</Group>
</Group>
</Group>
<Group name="MeshRoadEditor">
<Setting name="DefaultNormal">0 0 1</Setting>
<Setting name="DefaultWidth">10</Setting>
<Setting name="HoverSplineColor">255 0 0 255</Setting>
<Setting name="sideMaterialName">DefaultRoadMaterialOther</Setting>
<Setting name="topMaterialName">DefaultRoadMaterialTop</Setting>
<Setting name="SelectedSplineColor">0 255 0 255</Setting>
</Group>
<Group name="Theme">
<Setting name="fieldTextHLColor">234 232 230 255</Setting>
<Setting name="tooltipDividerColor">72 70 68 255</Setting>
<Setting name="tooltipTextColor">255 255 255 255</Setting>
<Setting name="headerColor">50 49 48 255</Setting>
<Setting name="fieldBGSELColor">100 98 96 255</Setting>
<Setting name="dividerMidColor">50 49 48 255</Setting>
<Setting name="dividerDarkColor">17 16 15 255</Setting>
<Setting name="dividerLightColor">96 94 92 255</Setting>
<Setting name="fieldBGHLColor">72 70 68 255</Setting>
<Setting name="fieldTextSELColor">255 255 255 255</Setting>
<Setting name="tooltipBGColor">43 43 43 255</Setting>
<Setting name="windowBackgroundColor">32 31 30 255</Setting>
<Setting name="tabsHLColor">50 49 48 255</Setting>
<Setting name="fieldTextColor">178 175 172 255</Setting>
<Setting name="fieldBGColor">59 58 57 255</Setting>
<Setting name="tabsColor">37 36 35 255</Setting>
<Setting name="tabsSELColor">59 58 57 255</Setting>
<Setting name="headerTextColor">236 234 232 255</Setting>
</Group>
<Group name="AxisGizmo">
<Setting name="renderInfoText">1</Setting>
<Setting name="mouseRotateScalar">0.8</Setting>
<Setting name="renderWhenUsed">0</Setting>
<Setting name="snapRotations">0</Setting>
<Setting name="axisGizmoMaxScreenLen">100</Setting>
<Setting name="mouseScaleScalar">0.8</Setting>
<Setting name="rotationSnap">15</Setting>
<Group name="Grid">
<Setting name="snapToGrid">0</Setting>
<Setting name="planeDim">500</Setting>
<Setting name="renderPlane">0</Setting>
<Setting name="gridSize">10 10 10</Setting>
<Setting name="gridColor">255 255 255 20</Setting>
<Setting name="renderPlaneHashes">0</Setting>
<Group name="Assets">
<Setting name="AssetImporDefaultConfig">TestConfig</Setting>
<Setting name="AutoImport">0</Setting>
<Group name="Browser">
<Setting name="previewTileSize">small</Setting>
</Group>
</Group>
<Group name="GuiEditor">
<Setting name="lastPath">tools/gui</Setting>
<Setting name="previewResolution">1024 768</Setting>
<Group name="EngineDevelopment">
<Setting name="showEditorProfiles">0</Setting>
<Setting name="toggleIntoEditor">0</Setting>
<Setting name="showEditorGuis">0</Setting>
</Group>
<Group name="Library">
<Setting name="viewType">Categorized</Setting>
</Group>
<Group name="Snapping">
<Setting name="snapToCenters">1</Setting>
<Setting name="snapToControls">1</Setting>
<Setting name="snap2GridSize">8</Setting>
<Setting name="snap2Grid">0</Setting>
<Setting name="snapToCanvas">1</Setting>
<Setting name="snapToGuides">1</Setting>
<Setting name="sensitivity">2</Setting>
<Setting name="snapToEdges">1</Setting>
</Group>
<Group name="Help">
<Setting name="documentationReference">../../../Documentation/Torque 3D - Script Manual.chm</Setting>
<Setting name="documentationLocal">../../../Documentation/Official Documentation.html</Setting>
<Setting name="documentationURL">http://www.garagegames.com/products/torque-3d/documentation/user</Setting>
</Group>
<Group name="Rendering">
<Setting name="drawBorderLines">1</Setting>
<Setting name="drawGuides">1</Setting>
</Group>
<Group name="Selection">
<Setting name="fullBox">0</Setting>
</Group>
</Group>
<Group name="WorldEditor">
<Setting name="orthoFOV">50</Setting>
<Setting name="orthoShowGrid">1</Setting>
<Setting name="torsionPath">AssetWork_Debug.exe</Setting>
<Setting name="forceLoadDAE">0</Setting>
<Setting name="displayType">6</Setting>
<Setting name="currentEditor">WorldEditorInspectorPlugin</Setting>
<Setting name="dropType">screenCenter</Setting>
<Setting name="undoLimit">40</Setting>
<Group name="Render">
<Setting name="showMousePopupInfo">1</Setting>
<Setting name="renderObjText">1</Setting>
<Setting name="renderSelectionBox">1</Setting>
<Setting name="renderObjHandle">1</Setting>
<Setting name="renderPopupBackground">1</Setting>
</Group>
<Group name="Color">
<Setting name="popupBackgroundColor">100 100 100 255</Setting>
<Setting name="objectTextColor">255 255 255 255</Setting>
<Setting name="dragRectColor">255 255 0 255</Setting>
<Setting name="objMouseOverColor">0 255 0 255</Setting>
<Setting name="selectionBoxColor">255 255 0 255</Setting>
<Setting name="objSelectColor">255 0 0 255</Setting>
<Setting name="objMouseOverSelectColor">0 0 255 255</Setting>
</Group>
<Group name="Grid">
<Setting name="gridMinorColor">51 51 51 100</Setting>
<Setting name="gridColor">102 102 102 100</Setting>
<Setting name="gridSize">1</Setting>
<Setting name="gridOriginColor">255 255 255 100</Setting>
<Setting name="gridSnap">0</Setting>
</Group>
<Group name="ObjectIcons">
<Setting name="fadeIconsEndDist">20</Setting>
<Setting name="fadeIconsStartDist">8</Setting>
<Setting name="fadeIcons">1</Setting>
<Setting name="fadeIconsEndAlpha">0</Setting>
<Setting name="fadeIconsStartAlpha">255</Setting>
</Group>
<Group name="Docs">
<Setting name="documentationReference">../../../Documentation/Torque 3D - Script Manual.chm</Setting>
<Setting name="documentationLocal">../../../Documentation/Official Documentation.html</Setting>
<Setting name="forumURL">http://www.garagegames.com/products/torque-3d/forums</Setting>
<Setting name="documentationURL">http://www.garagegames.com/products/torque-3d/documentation/user</Setting>
</Group>
<Group name="Tools">
<Setting name="boundingBoxCollision">0</Setting>
<Setting name="dropAtScreenCenterScalar">1</Setting>
<Setting name="objectsUseBoxCenter">1</Setting>
<Setting name="dropAtScreenCenterMax">100</Setting>
<Setting name="snapSoftSize">2</Setting>
<Setting name="snapSoft">0</Setting>
<Setting name="snapGround">0</Setting>
</Group>
<Group name="Theme">
<Setting name="windowTitleFontHLColor">255 255 255 255</Setting>
<Setting name="windowTitleBGColor">50 50 50 255</Setting>
<Setting name="windowTitleBGHLColor">48 48 48 255</Setting>
<Setting name="windowTitleFontColor">215 215 215 255</Setting>
<Setting name="windowTitleBGNAColor">180 180 180 255</Setting>
</Group>
<Group name="Images">
<Setting name="lockedHandle">tools/worldEditor/images/LockedHandle</Setting>
<Setting name="selectHandle">tools/worldEditor/images/SelectHandle</Setting>
<Setting name="defaultHandle">tools/worldEditor/images/DefaultHandle</Setting>
</Group>
</Group>
<Group name="ShapeEditor">
<Setting name="SunAmbientColor">180 180 180 255</Setting>
<Setting name="RenderCollision">0</Setting>
<Setting name="showBounds">0</Setting>
<Setting name="renderMounts">1</Setting>
<Setting name="gridSize">0.1</Setting>
<Setting name="SunAngleZ">135</Setting>
<Setting name="showNodes">1</Setting>
<Setting name="highlightMaterial">1</Setting>
<Setting name="showObjBox">1</Setting>
<Setting name="SunDiffuseColor">255 255 255 255</Setting>
<Setting name="backgroundColor">0 0 0 100</Setting>
<Setting name="AdvancedWndVisible">1</Setting>
<Setting name="SunAngleX">45</Setting>
<Setting name="ShowGrid">1</Setting>
<Setting name="gridDimension">40 40</Setting>
</Group>
<Group name="TerrainEditor">
<Setting name="currentAction">lowerHeight</Setting>
<Group name="Brush">
<Setting name="brushPressure">1</Setting>
<Setting name="brushSize">40 40</Setting>
<Setting name="maxBrushSize">40 40</Setting>
<Setting name="brushSoftness">1</Setting>
<Setting name="brushType">ellipse</Setting>
</Group>
<Group name="ActionValues">
<Setting name="setHeightVal">100</Setting>
<Setting name="scaleVal">1</Setting>
<Setting name="SlopeMinAngle">0</Setting>
<Setting name="adjustHeightVal">10</Setting>
<Setting name="softSelectRadius">50</Setting>
<Setting name="SlopeMaxAngle">90</Setting>
<Setting name="softSelectDefaultFilter">1.000000 0.833333 0.666667 0.500000 0.333333 0.166667 0.000000</Setting>
<Setting name="softSelectFilter">1.000000 0.833333 0.666667 0.500000 0.333333 0.166667 0.000000</Setting>
<Setting name="noiseFactor">1</Setting>
<Setting name="smoothFactor">0.1</Setting>
</Group>
</Group>
<Group name="RiverEditor">
<Setting name="DefaultNormal">0 0 1</Setting>
<Setting name="HoverNodeColor">255 255 255 255</Setting>
<Setting name="HoverSplineColor">255 0 0 255</Setting>
<Setting name="SelectedSplineColor">0 255 0 255</Setting>
<Setting name="DefaultWidth">10</Setting>
<Setting name="DefaultDepth">5</Setting>
</Group>
<Group name="NavEditor">
<Setting name="backgroundBuild">1</Setting>
<Setting name="SpawnClass">AIPlayer</Setting>
<Setting name="spawnDatablock">DefaultPlayerData</Setting>
<Setting name="SpawnClass">AIPlayer</Setting>
</Group>
<Group name="RiverEditor">
<Setting name="DefaultNormal">0 0 1</Setting>
<Setting name="HoverSplineColor">255 0 0 255</Setting>
<Setting name="DefaultWidth">10</Setting>
<Setting name="DefaultDepth">5</Setting>
<Setting name="HoverNodeColor">255 255 255 255</Setting>
<Setting name="SelectedSplineColor">0 255 0 255</Setting>
</Group>
<Group name="AxisGizmo">
<Setting name="rotationSnap">15</Setting>
<Setting name="mouseRotateScalar">0.8</Setting>
<Setting name="snapRotations">0</Setting>
<Setting name="mouseScaleScalar">0.8</Setting>
<Setting name="renderInfoText">1</Setting>
<Setting name="renderWhenUsed">0</Setting>
<Setting name="axisGizmoMaxScreenLen">100</Setting>
<Group name="Grid">
<Setting name="gridSize">1 1 1</Setting>
<Setting name="planeDim">500</Setting>
<Setting name="gridColor">255 255 255 20</Setting>
<Setting name="renderPlane">0</Setting>
<Setting name="snapToGrid">1</Setting>
<Setting name="renderPlaneHashes">0</Setting>
</Group>
</Group>
<Group name="AssetBrowser">
<Setting name="previewSize">Small</Setting>
</Group>
<Group name="RoadEditor">
<Setting name="HoverNodeColor">255 255 255 255</Setting>
<Setting name="DefaultWidth">10</Setting>
<Setting name="materialName">DefaultDecalRoadMaterial</Setting>
<Setting name="DefaultWidth">10</Setting>
<Setting name="SelectedSplineColor">0 255 0 255</Setting>
<Setting name="HoverNodeColor">255 255 255 255</Setting>
</Group>
<Group name="ConvexEditor">
<Setting name="materialName">Grid_512_Orange</Setting>

View file

@ -299,6 +299,20 @@
function CreateNewTerrainGui::onWake( %this )
{
%this-->theName.setText( "" );
//Run through and grab any TerrainMaterialAssets
%assetQuery = new AssetQuery();
AssetDatabase.findAssetType(%assetQuery, "TerrainMaterialAsset");
%count = %assetQuery.getCount();
for(%i=0; %i < %count; %i++)
{
%assetId = %assetQuery.getAsset(%i);
AssetDatabase.acquireAsset(%assetId);
}
%assetQuery.delete();
%matList = %this-->theMaterialList;
%matList.clear();
@ -313,8 +327,8 @@ function CreateNewTerrainGui::onWake( %this )
%rezList.add( "512", 512 );
%rezList.add( "1024", 1024 );
%rezList.add( "2048", 2048 );
//%rezList.add( "4096", 4096 );
%rezList.setSelected( 256 );
%rezList.add( "4096", 4096 );
%rezList.setSelected( 512 );
%this-->flatRadio.setStateOn( true );
}

View file

@ -227,6 +227,77 @@ function ObjectBuilderGui::gotFileName(%this, %name)
//%this.controls[%this.currentControl].setValue(%name);
}
//------------------------------------------------------------------------------
function ObjectBuilderGui::createTerrainAssetType(%this, %index)
{
if(%index >= %this.numFields || %this.field[%index, name] $= "")
{
error("ObjectBuilderGui::createTerrainAssetType: invalid field");
return;
}
//
if(%this.field[%index, text] $= "")
%name = %this.field[%index, name];
else
%name = %this.field[%index, text];
//
%this.textControls[%this.numControls] = new GuiTextCtrl() {
profile = "ToolsGuiTextRightProfile";
text = %name;
extent = %this.fieldNameExtent;
position = %this.curXPos @ " " @ %this.curYPos;
modal = "1";
};
//
%this.controls[%this.numControls] = new GuiButtonCtrl() {
HorizSizing = "width";
profile = "ToolsGuiButtonProfile";
extent = %this.fileButtonExtent;
position = %this.curXPos + %this.columnOffset @ " " @ %this.curYPos;
modal = "1";
command = %this @ ".getTerrainAsset(" @ %index @ ");";
};
%val = %this.field[%index, value];
%this.controls[%this.numControls].setValue(fileBase(%val) @ fileExt(%val));
%this.numControls++;
%this.curYPos += %this.defaultFieldStep;
}
function ObjectBuilderGui::getTerrainAsset(%this, %index)
{
if(%index >= %this.numFields || %this.field[%index, name] $= "")
{
error("ObjectBuilderGui::getTerrainAsset: invalid field");
return;
}
%val = %this.field[%index, ext];
//%path = filePath(%val);
//%ext = fileExt(%val);
%this.currentControl = %index;
AssetBrowser.showDialog("TerrainAsset", %this @ ".gotTerrainAsset", "", "", "");
//getLoadFilename( %val @ "|" @ %val, %this @ ".gotFileName", %this.lastPath );
}
function ObjectBuilderGui::gotTerrainAsset(%this, %name)
{
%index = %this.currentControl;
%this.field[%index, value] = %name;
%this.controls[%this.currentControl].setText(fileBase(%name) @ fileExt(%name));
%this.lastPath = %name;
// This doesn't work for button controls as getValue returns their state!
//%this.controls[%this.currentControl].setValue(%name);
}
//------------------------------------------------------------------------------
function ObjectBuilderGui::createMaterialNameType(%this, %index)
@ -489,6 +560,9 @@ function ObjectBuilderGui::process(%this)
case "TypeFile":
%this.createFileType(%i);
case "TypeTerrainAsset":
%this.createTerrainAssetType(%i);
case "TypeMaterialName":
%this.createMaterialNameType(%i);
@ -830,6 +904,7 @@ function ObjectBuilderGui::buildTerrainBlock(%this)
%this.createCallback = "ETerrainEditor.attachTerrain();";
%this.addField("terrainFile", "TypeFile", "Terrain file", "", "*.ter");
%this.addField("terrainAsset", "TypeTerrainAsset", "Terrain Asset", "", "");
%this.addField("squareSize", "TypeInt", "Square size", "8");
%this.process();

View file

@ -1885,6 +1885,9 @@ function Editor::open(%this)
Canvas.setContent(EditorGui);
$isFirstPersonVar = true;
EditorGui.syncCameraGui();
if(EditorSettings.value("WorldEditor/Layout/LayoutMode", "Classic") $= "Modern")
togglePanelLayout();
}
function Editor::close(%this, %gui)

View file

@ -164,7 +164,7 @@ function toggleEditor(%make)
//------------------------------------------------------------------------------
// The editor action maps are defined in editor.bind.cs
GlobalActionMap.bind(keyboard, "f11", toggleEditor);
GlobalActionMap.bind(keyboard, "f11", fastLoadWorldEdit);
// The scenario:

View file

@ -60,6 +60,8 @@ EditorSettings.endGroup();
EditorSettings.beginGroup( "Tools" );
EditorSettings.setDefaultValue( "snapGround", "0" );
EditorSettings.setDefaultValue( "TerrainSnapOffsetZ", "0" );
EditorSettings.setDefaultValue( "OffsetZValue", "0.01" );
EditorSettings.setDefaultValue( "snapSoft", "0" );
EditorSettings.setDefaultValue( "snapSoftSize", "2.0" );
EditorSettings.setDefaultValue( "boundingBoxCollision", "0" );
@ -215,6 +217,8 @@ function EditorGui::readWorldEditorSettings(%this)
EditorSettings.beginGroup( "Tools" );
EWorldEditor.stickToGround = EditorSettings.value("snapGround"); //$pref::WorldEditor::snapGround;
EWorldEditor.TerrainSnapOffsetZ = EditorSettings.value("TerrainSnapOffsetZ"); //$pref::WorldEditor::TerrainSnapOffsetZ;
EWorldEditor.OffsetZValue = EditorSettings.value("OffsetZValue"); //$pref::WorldEditor::OffsetZValue;
EWorldEditor.setSoftSnap( EditorSettings.value("snapSoft") ); //$pref::WorldEditor::snapSoft
EWorldEditor.setSoftSnapSize( EditorSettings.value("snapSoftSize") ); //$pref::WorldEditor::snapSoftSize
EWorldEditor.boundingBoxCollision = EditorSettings.value("boundingBoxCollision"); //$pref::WorldEditor::boundingBoxCollision;
@ -310,6 +314,8 @@ function EditorGui::writeWorldEditorSettings(%this)
EditorSettings.beginGroup( "Tools" );
EditorSettings.setValue( "snapGround", EWorldEditor.stickToGround ); //$Pref::WorldEditor::snapGround
EditorSettings.setValue( "TerrainSnapOffsetZ", EWorldEditor.TerrainSnapOffsetZ ); //$pref::WorldEditor::TerrainSnapOffsetZ;
EditorSettings.setValue( "OffsetZValue", EWorldEditor.OffsetZValue ); //$pref::WorldEditor::OffsetZValue;
EditorSettings.setValue( "snapSoft", EWorldEditor.getSoftSnap() ); //$Pref::WorldEditor::snapSoft
EditorSettings.setValue( "snapSoftSize", EWorldEditor.getSoftSnapSize() ); //$Pref::WorldEditor::snapSoftSize
EditorSettings.setValue( "boundingBoxCollision", EWorldEditor.boundingBoxCollision ); //$Pref::WorldEditor::boundingBoxCollision

View file

@ -83,6 +83,20 @@ function TerrainMaterialDlg::onWake( %this )
if( !isObject( TerrainMaterialDlgDeleteGroup ) )
new SimGroup( TerrainMaterialDlgDeleteGroup );
//Run through and grab any TerrainMaterialAssets
%assetQuery = new AssetQuery();
AssetDatabase.findAssetType(%assetQuery, "TerrainMaterialAsset");
%count = %assetQuery.getCount();
for(%i=0; %i < %count; %i++)
{
%assetId = %assetQuery.getAsset(%i);
AssetDatabase.acquireAsset(%assetId);
}
%assetQuery.delete();
// Snapshot the materials.
%this.snapshotMaterials();
@ -292,12 +306,33 @@ function TerrainMaterialDlg::changeNormal( %this )
%ctrl.setBitmap( %file );
}
//-----------------------------------------------------------------------------
function TerrainMaterialDlg::changePBRConfig( %this )
{
%ctrl = %this-->pbrConfigTexCtrl;
%file = %ctrl.bitmap;
if( getSubStr( %file, 0 , 6 ) $= "tools/" )
%file = "";
%file = TerrainMaterialDlg._selectTextureFileDialog( %file );
if( %file $= "" )
{
if( %ctrl.bitmap !$= "" )
%file = %ctrl.bitmap;
else
%file = "tools/materialEditor/gui/unknownImage";
}
%file = makeRelativePath( %file, getMainDotCsDir() );
%ctrl.setBitmap( %file );
}
//-----------------------------------------------------------------------------
function TerrainMaterialDlg::newMat( %this )
{
// Create a unique material name.
%matName = getUniqueInternalName( "newMaterial", TerrainMaterialSet, true );
/*%matName = getUniqueInternalName( "newMaterial", TerrainMaterialSet, true );
// Create the new material.
%newMat = new TerrainMaterial()
@ -308,12 +343,16 @@ function TerrainMaterialDlg::newMat( %this )
%newMat.setFileName( "art/terrains/materials.cs" );
// Mark it as dirty and to be saved in the default location.
ETerrainMaterialPersistMan.setDirty( %newMat, "art/terrains/materials.cs" );
%matLibTree = %this-->matLibTree;
%matLibTree.buildVisibleTree( true );
%item = %matLibTree.findItemByObjectId( %newMat );
%matLibTree.selectItem( %item );
ETerrainMaterialPersistMan.setDirty( %newMat, "art/terrains/materials.cs" );*/
%scene = getRootScene();
%path = filePath(%scene.getFilename());
%module = AssetBrowser.getModuleFromAddress(%path);
AssetBrowser.selectedModule = %module.moduleID;
AssetBrowser.currentAddress = "data/" @ %module.moduleID;
AssetBrowser.setupCreateNewAsset("TerrainMaterialAsset", AssetBrowser.selectedModule);
}
//-----------------------------------------------------------------------------
@ -380,6 +419,11 @@ function TerrainMaterialDlg::setActiveMaterial( %this, %mat )
}else{
%this-->baseTexCtrl.setBitmap( %mat.diffuseMap );
}
if (%mat.pbrConfigMap $= ""){
%this-->pbrConfigTexCtrl.setBitmap( "tools/materialEditor/gui/unknownImage" );
}else{
%this-->pbrConfigTexCtrl.setBitmap( %mat.pbrConfigMap );
}
if (%mat.detailMap $= ""){
%this-->detailTexCtrl.setBitmap( "tools/materialEditor/gui/unknownImage" );
}else{
@ -438,6 +482,11 @@ function TerrainMaterialDlg::saveDirtyMaterial( %this, %mat )
}else{
%newNormal = %this-->normTexCtrl.bitmap;
}
if (%this-->pbrConfigTexCtrl.bitmap $= "tools/materialEditor/gui/unknownImage"){
%newPBRConfig = "";
}else{
%newPBRConfig = %this-->pbrConfigTexCtrl.bitmap;
}
if (%this-->detailTexCtrl.bitmap $= "tools/materialEditor/gui/unknownImage"){
%newDetail = "";
}else{
@ -466,6 +515,7 @@ function TerrainMaterialDlg::saveDirtyMaterial( %this, %mat )
%mat.diffuseMap $= %newDiffuse &&
%mat.normalMap $= %newNormal &&
%mat.detailMap $= %newDetail &&
%mat.pbrConfigMap $= %newPBRConfig &&
%mat.macroMap $= %newMacro &&
%mat.detailSize == %detailSize &&
%mat.diffuseSize == %diffuseSize &&
@ -497,7 +547,8 @@ function TerrainMaterialDlg::saveDirtyMaterial( %this, %mat )
}
%mat.diffuseMap = %newDiffuse;
%mat.normalMap = %newNormal;
%mat.normalMap = %newNormal;
%mat.pbrConfigMap = %newPBRConfig;
%mat.detailMap = %newDetail;
%mat.macroMap = %newMacro;
%mat.detailSize = %detailSize;
@ -543,6 +594,7 @@ function TerrainMaterialDlg::snapshotMaterials( %this )
internalName = %mat.internalName;
diffuseMap = %mat.diffuseMap;
normalMap = %mat.normalMap;
pbrConfigMap = %mat.pbrConfigMap;
detailMap = %mat.detailMap;
macroMap = %mat.macroMap;
detailSize = %mat.detailSize;
@ -577,6 +629,7 @@ function TerrainMaterialDlg::restoreMaterials( %this )
%mat.setInternalName( %obj.internalName );
%mat.diffuseMap = %obj.diffuseMap;
%mat.normalMap = %obj.normalMap;
%mat.pbrConfigMap = %obj.pbrConfigMap;
%mat.detailMap = %obj.detailMap;
%mat.macroMap = %obj.macroMap;
%mat.detailSize = %obj.detailSize;

View file

@ -280,7 +280,17 @@ function EditorSaveMission()
initContainerTypeSearch($TypeMasks::TerrainObjectType);
while ((%terrainObject = containerSearchNext()) != 0)
%terrainObject.save(%terrainObject.terrainFile);
{
if(%terrainObject.terrainAsset !$= "")
{
//we utilize a terrain asset, so we'll update our dependencies while we're at it
%terrainObject.saveAsset();
}
else
{
%terrainObject.save(%terrainObject.terrainFile);
}
}
}
ETerrainPersistMan.saveDirty();

View file

@ -20,7 +20,7 @@
// IN THE SOFTWARE.
//-----------------------------------------------------------------------------
// Debug Shaders.
new ShaderData( AL_ColorBufferShader )
singleton shaderData( AL_ColorBufferShader )
{
DXVertexShaderFile = $Core::CommonShaderPath @ "/postFX/postFxV.hlsl";
DXPixelShaderFile = "./shaders/dbgColorBufferP.hlsl";
@ -59,7 +59,7 @@ function toggleColorBufferViz( %enable )
}
}
new ShaderData( AL_SpecMapShader )
singleton shaderData( AL_SpecMapShader )
{
DXVertexShaderFile = $Core::CommonShaderPath @ "/postFX/postFxV.hlsl";
DXPixelShaderFile = "./shaders/dbgSpecMapVisualizeP.hlsl";
@ -94,7 +94,7 @@ function toggleSpecMapViz( %enable )
AL_SpecMapVisualize.disable();
}
new GFXStateBlockData( AL_DepthVisualizeState )
singleton GFXStateBlockData( AL_DepthVisualizeState )
{
zDefined = true;
zEnable = false;
@ -105,7 +105,7 @@ new GFXStateBlockData( AL_DepthVisualizeState )
samplerStates[1] = SamplerClampLinear; // viz color lookup
};
new GFXStateBlockData( AL_DefaultVisualizeState )
singleton GFXStateBlockData( AL_DefaultVisualizeState )
{
blendDefined = true;
blendEnable = true;
@ -121,7 +121,7 @@ new GFXStateBlockData( AL_DefaultVisualizeState )
samplerStates[1] = SamplerClampLinear; // depthviz
};
new ShaderData( AL_DepthVisualizeShader )
singleton shaderData( AL_DepthVisualizeShader )
{
DXVertexShaderFile = $Core::CommonShaderPath @ "/postFX/postFxV.hlsl";
DXPixelShaderFile = "./shaders/dbgDepthVisualizeP.hlsl";
@ -157,7 +157,7 @@ function AL_DepthVisualize::onEnabled( %this )
return true;
}
new ShaderData( AL_GlowVisualizeShader )
singleton shaderData( AL_GlowVisualizeShader )
{
DXVertexShaderFile = $Core::CommonShaderPath @ "/postFX/postFxV.hlsl";
DXPixelShaderFile = "./shaders/dbgGlowVisualizeP.hlsl";
@ -178,7 +178,7 @@ singleton PostEffect( AL_GlowVisualize )
renderPriority = 9999;
};
new ShaderData( AL_NormalsVisualizeShader )
singleton shaderData( AL_NormalsVisualizeShader )
{
DXVertexShaderFile = $Core::CommonShaderPath @ "/postFX/postFxV.hlsl";
DXPixelShaderFile = "./shaders/dbgNormalVisualizeP.hlsl";
@ -214,7 +214,7 @@ function AL_NormalsVisualize::onEnabled( %this )
new ShaderData( AL_LightColorVisualizeShader )
singleton shaderData( AL_LightColorVisualizeShader )
{
DXVertexShaderFile = $Core::CommonShaderPath @ "/postFX/postFxV.hlsl";
DXPixelShaderFile = "./shaders/dbgLightColorVisualizeP.hlsl";
@ -249,7 +249,7 @@ function AL_LightColorVisualize::onEnabled( %this )
}
new ShaderData( AL_LightSpecularVisualizeShader )
singleton shaderData( AL_LightSpecularVisualizeShader )
{
DXVertexShaderFile = $Core::CommonShaderPath @ "/postFX/postFxV.hlsl";
DXPixelShaderFile = "./shaders/dbgLightSpecularVisualizeP.hlsl";

View file

@ -1,4 +1,4 @@
new GFXStateBlockData( Viz_DefaultVisualizeState )
singleton GFXStateBlockData( Viz_DefaultVisualizeState )
{
/*alphaDefined = true;
alphaTestEnable = true;
@ -39,7 +39,7 @@ new GFXStateBlockData( Viz_DefaultVisualizeState )
samplerStates[4] = SamplerClampLinear; // depthviz
};
new ShaderData( Viz_TexelDensity )
singleton shaderData( Viz_TexelDensity )
{
DXVertexShaderFile = $Core::CommonShaderPath @ "/postFX/postFxV.hlsl";
DXPixelShaderFile = "./shaders/Viz_TexelDensityP.hlsl";
@ -79,7 +79,7 @@ function toggleTexelDensityViz( %enable )
//
//
new ShaderData( Viz_SurfaceProperties )
singleton shaderData( Viz_SurfaceProperties )
{
DXVertexShaderFile = $Core::CommonShaderPath @ "/postFX/postFxV.hlsl";
DXPixelShaderFile = "./shaders/Viz_SurfacePropertiesP.hlsl";
@ -203,7 +203,7 @@ function Viz_SurfacePropertiesPFX::onEnabled( %this )
//
//
//
new ShaderData( Viz_ColorBlindness )
singleton shaderData( Viz_ColorBlindness )
{
DXVertexShaderFile = $Core::CommonShaderPath @ "/postFX/postFxV.hlsl";
DXPixelShaderFile = "./shaders/Viz_ColorblindnessP.hlsl";
@ -307,7 +307,7 @@ function Viz_ColorBlindnessPFX::onEnabled( %this )
//
//Material Complexity Viz
new ShaderData( Viz_MaterialComplexity )
singleton shaderData( Viz_MaterialComplexity )
{
DXVertexShaderFile = "./shaders/Viz_materialComplexityV.hlsl";
DXPixelShaderFile = "./shaders/Viz_materialComplexityP.hlsl";

View file

@ -20,7 +20,7 @@
// IN THE SOFTWARE.
//-----------------------------------------------------------------------------
new ShaderData( AL_ShadowVisualizeShader )
singleton shaderData( AL_ShadowVisualizeShader )
{
DXVertexShaderFile = $Core::CommonShaderPath @ "/guiMaterialV.hlsl";
DXPixelShaderFile = "./shaders/dbgShadowVisualizeP.hlsl";