예제 #1
0
void clConsole::SetPropertyC( const LString& Param )
{
	LString ObjID = LStr::GetToken( Param, 1 );
	LString PropID = LStr::GetToken( Param, 2 );
	LString PropVal = LStr::GetToken( Param, 3 );

	if ( ObjID.empty() || PropID.empty() || PropVal.empty() )
	{
		Env->Console->DisplayInfoTip( "Usage: SETPROPERTY <ObjectID> <Property name> <Property value>" );
		return;
	}

	Env->Linker->SetObjectProperty( ObjID, PropID, PropVal );
}
예제 #2
0
LString GetCorrectMapName( sEnvironment* Env, const LString& Name )
{
	if ( Env->FileSystem->FileExists( Name ) )
	{
		return Name;
	}

	LString FileName;
	LString FileExt;
	Env->FileSystem->SplitPath( Name, NULL, NULL, &FileName, &FileExt );

	LString MapName = FileName + FileExt;

	if ( Env->FileSystem->FileExists( MapName ) )
	{
		return MapName;
	}

	if ( !Name.empty() )
	{
		Env->Console->DisplayError( "Material map not found: " + Name );
	}

	return "";
}
예제 #3
0
LStr::clStringsVector clConsole::GetAutocompleteCommand( const LString& CMDName ) const
{
	LStr::clStringsVector Result;

	if ( CMDName.empty() ) { return Result; }

	LString CMD = LStr::GetUpper( CMDName );
	size_t Len = CMD.length();

	bool Lower = LStr::IsLower( CMDName[CMDName.size()-1] );

	for ( clCommandsList::const_iterator i = FCommandsList.begin(); i != FCommandsList.end(); ++i )
	{
		if ( LStr::StartsWith( i->first, CMD ) )
		{
			LString Tail = LStr::CopyFromPosToEnd( i->first, Len );
			Result.push_back( CMDName + ( Lower ? LStr::GetLower( Tail ) : Tail ) );
		}
	}

	for ( clAliasesList::const_iterator i = FAliasesList.begin(); i != FAliasesList.end(); ++i )
	{
		if ( LStr::StartsWith( i->first, CMD ) )
		{
			LString Tail = LStr::CopyFromPosToEnd( i->first, Len );
			Result.push_back( CMDName + ( Lower ? LStr::GetLower( Tail ) : Tail ) );
		}
	}

	return Result;
}
void clResourcesManager::ReCacheC( const LString& Param )
{
	guard( "%s", Param.c_str() );

	if ( Param.empty() )
	{
		Env->Console->DisplayInfoTip( "Usage: RECACHE <file name>" );
		return;
	}

	iResource* Resource = Env->Resources->FindResourceInGraph( FResourcesGraph, Param );

	if ( !Resource )
	{
		Env->Console->DisplayError( "Unable to find resource: " + Param );
		return;
	}

	Env->Console->DisplayInfoTip( Resource->GetFileName() );
	Env->Console->Display( "Recaching " + Resource->ClassName() );

	Resource->ReloadResource( true );

	unguard();
}
예제 #5
0
void clAudioThread::InitOpenAL()
{
#if L_AUDIO_USE_OPENAL
	guard();

//	Env->Logger->Log( L_LOG, "Initializing OpenAL..." );

	LString DeviceName = Env->Console->GetVarValueStr( "Audio.AudioDeviceName", "" );

	FDevice = alcOpenDevice( DeviceName.empty() ? NULL : DeviceName.c_str() );

	FATAL( !FDevice, "Unable to open OpenAL device" );

	FContext = alcCreateContext( FDevice, NULL );

	FATAL( !FContext, "Unable to create OpenAL context" );

	FATAL( !alcMakeContextCurrent( FContext ), "Unable to select OpenAL context" );

	Env->Logger->LogP( L_LOG, "OpenAL (%s, %s, %s), extensions : %s", alGetString( AL_VERSION ), alGetString( AL_VENDOR ), alGetString( AL_RENDERER ), alGetString( AL_EXTENSIONS ) );
//	Env->Logger->Log( L_LOG, "OpenAL vendor    : " + LString(  ) );
//	Env->Logger->Log( L_LOG, "OpenAL renderer  : " + LString( alGetString( AL_RENDERER ) ) );
//	Env->Logger->Log( L_LOG, "OpenAL extensions: " );
	/*
	   {
	      LString Extensions;
	      Extensions.assign( alGetString( AL_EXTENSIONS ) );
	      LStr::ReplaceAll( &Extensions, ' ', '\n' );
	      Env->Logger->Log( L_LOG, '\n' + Extensions );
	   }
	*/
	unguard();
#endif
}
예제 #6
0
void clConsole::SetLogLevelC(const LString& Params)
{
	if(Params.empty())
	{
		Env->Console->DisplayInfoTip( "Usage: SetLogLevel <Level: Paranoid, Debug, Notice, Log, Warning>" );
		return;
	}

	Env->SetLogLevel( StringToLogLevel( LStr::GetTrimmedSpaces(Params) ) );
}
예제 #7
0
void clConsole::AliasC( const LString& Param )
{
	guard();

	LString Alias   = LStr::GetUpper( LStr::GetToken( Param, 1 ) );
	LString Command = LStr::GetToken( Param, 2 );

	if ( Alias.empty() || Command.empty() )
	{
		DisplayInfoTip( "Usage: ALIAS <Alias name> <Command>" );
		return;
	}

	FATAL( FCommandsList.find( Command ) != FCommandsList.end(), "Aliases cann't override commands: " + Alias );

	FAliasesList[ Alias ] = Command;

	unguard();
}
예제 #8
0
void clConsole::ExecC( const LString& Param )
{
	guard();

	LString Parameter = Param;
	LStr::TrimSpaces( &Parameter );

	if ( Parameter.empty() )
	{
		DisplayInfoTip( "Usage: EXEC <File Name>" );
		return;
	}

	LString FName = LStr::GetToken( Parameter, 1 );

	Env->Logger->LogP( L_DEBUG, "Exec: %s", FName.c_str() );

	if ( Env->FileSystem->FileExists( FName ) )
	{
		iIStream* FCFGStream = Env->FileSystem->CreateFileReader( FName );

		while ( !FCFGStream->Eof() )
		{
			LString Cmd = FCFGStream->ReadLine();
			LStr::TrimSpaces( &Cmd );

			if ( !Cmd.empty() && Cmd.at( 0 ) != ';' )
			{
				SendCommand( Cmd );
			}
		}

		delete( FCFGStream );
	}
	else
	{
		Env->Logger->LogP( L_WARNING, "Config file %s not found", FName.c_str() );

		DisplayError( "Config file \"" + FName + "\" not found" );
	}

	unguard();
}
void clResourcesManager::PreCacheC( const LString& Param )
{
	if ( Param.empty() )
	{
		Env->Console->DisplayInfoTip( "Usage: PRECACHE <shader or texture file name>" );
		return;
	}

	Env->Console->Display( "Precaching shader... " + Param );

	Env->Resources->LoadShader( Param );
}
예제 #10
0
LString LoadMaterialMap( sEnvironment* Env, const LString& FileName, clRenderState* Shader, LMatSysSlot Slot, iTexture* OverridenTex, const LString& Define, LTextureType Type )
{
	if ( OverridenTex )
	{
		Shader->SetTexture( Slot, OverridenTex, false );

		return Define;
	}

	if ( !FileName.empty() )
	{
		Shader->SetTexture( Slot, Env->Resources->LoadImg( FileName, Type )->GetTexture(), false );

		return Define;
	}

	return "";
}
예제 #11
0
void clConsole::SaveVarsC( const LString& Param )
{
	if ( Param.empty() )
	{
		DisplayInfoTip( "Usage: SAVEVARS <FileName>" );
		return;
	}

	iOStream* Output = Env->FileSystem->CreateFileWriter( Param );

	for ( size_t i = 0; i != FCVars.size(); ++i )
	{
		Output->WriteLine( FCVars[i]->GetObjectID() + " \"" + FCVars[i]->GetString() + "\"" );
	}

	delete( Output );

	DisplayInfoTip( LStr::ToStr( ( int )FCVars.size() ) + " vars were saved into " + Param );
}
예제 #12
0
LString clConsole::ExecuteScriptCode( const LString& ScriptCode, bool DisplayResult )
{
	// delayed initilaization :
	if ( !FScriptCompiler->IsInitialized() )
	{
		InitializeScript();
	}

	LString Code = FScriptCompiler->CompileStatement( ScriptCode );

	if ( !Code.empty() )
	{
		std::vector<LString> CodeLines;
		LStr::LineToMultiline( Code, CodeLines );

		LString Result = Env->Linker->ExecuteCode( CodeLines );

		if ( DisplayResult )
		{
			Display( "Result = " + Result );
		}

		FSendCommandResult = Result;
	}
	else
	{
		if ( DisplayResult )
		{
			Display( "Error while compiling statement" );
		}

		FSendCommandResult.assign( "" );
	}

	return FSendCommandResult;
}
예제 #13
0
clRenderState* sMaterialDesc::GetRenderStateForPass( sEnvironment* Env, const sMaterialDesc& Material, LMatSysPass Pass ) const
{
	guard();

	bool MaterialExists = Env->FileSystem->FileExists( Material.FMaterialName.ToString() );

	if ( MaterialExists && LStr::ContainsSubStr( Material.FMaterialName.ToString(), ".shader" ) )
	{
		// just load .shader and don't do anything here
		// NOTE: subject to deprecation...
		return Env->Resources->LoadShader( Material.FMaterialName.ToString() );
	}

	LString ShaderProgramName = "MaterialSystem/default.sp";

	if ( IsDeferredPass( Pass ) )
	{
		ShaderProgramName = "MaterialSystem/default_pass1.sp";
	}

	LString AmbientName    = GetCorrectMapName( Env, Material.FAmbientMap.ToString() );
	LString DiffuseName    = GetCorrectMapName( Env, Material.FDiffuseMap.ToString() );
	LString SpecularName   = GetCorrectMapName( Env, Material.FSpecularMap.ToString() );
	LString BumpName       = GetCorrectMapName( Env, Material.FBumpMap.ToString() );
	LString NoiseName      = "Textures/NoiseVolume.dds";
	LString ReflectionName = GetCorrectMapName( Env, Material.FReflectionMap.ToString() );

	clRenderState* Shader = Env->Resources->CreateShader();

	LString EnabledMaps( "" );

	switch ( Pass )
	{
		case L_MATSYS_PASS_NORMAL:
			EnabledMaps = "MATSYS_PASS_NORMAL ";
			break;
		case L_MATSYS_PASS_SHADOW:
			EnabledMaps = "MATSYS_PASS_SHADOW ";
			break;
		case L_MATSYS_PASS_REFL:
			EnabledMaps = "MATSYS_PASS_NORMAL MATSYS_PASS_REFL ";
			break;
		case L_MATSYS_PASS_DEFERRED_NORMAL:
			EnabledMaps = "L_MATSYS_PASS_DEFERRED_NORMAL ";
			break;
		case L_MATSYS_PASS_DEFERRED_SHADOW:
			EnabledMaps = "L_MATSYS_PASS_DEFERRED_SHADOW ";
			break;
	}

	LString MaterialClass = LStr::GetUpper( Material.FMaterialClass.ToString() );

	if ( MaterialClass.empty() ) { MaterialClass = "DEFAULT"; }

	// parse custom material class
	/*
	   if ( MaterialClass == "CUSTOM" )
	   {
	      EnabledMaps += "MATSYS_CUSTOM_MATERIAL ";
	   }
	   // parse known material classes
	   else if ( MaterialClass == "WOOD"   )
	   {
	      EnabledMaps += "MATSYS_WOOD_MATERIAL ";
	   }
	   else if ( MaterialClass == "MARBLE" )
	   {
	      EnabledMaps += "MATSYS_MARBLE_MATERIAL ";
	   }
	   else if ( MaterialClass == "WATER"  )
	   {
	      EnabledMaps += "MATSYS_WATER_MATERIAL ";
	   }
	   else
	   {
	      EnabledMaps += "MATSYS_DEFAULT_MATERIAL ";
	   }
	*/
	EnabledMaps += "MATSYS_" + MaterialClass + "_MATERIAL ";

	EnabledMaps += LoadMaterialMap( Env, AmbientName,    Shader, L_MAT_SLOT_AMBIENT,  FAmbientMapOverride, "MATSYS_USE_AMBIENT_MAP ",  L_TEXTURE_2D );
	EnabledMaps += LoadMaterialMap( Env, DiffuseName,    Shader, L_MAT_SLOT_DIFFUSE,  FDiffuseMapOverride, "MATSYS_USE_DIFFUSE_MAP ",  L_TEXTURE_2D );
	EnabledMaps += LoadMaterialMap( Env, SpecularName,   Shader, L_MAT_SLOT_SPECULAR, FSpecularMapOverride, "MATSYS_USE_SPECULAR_MAP ", L_TEXTURE_2D );
	EnabledMaps += LoadMaterialMap( Env, BumpName,       Shader, L_MAT_SLOT_BUMP,     FBumpMapOverride,    "MATSYS_USE_BUMP_MAP ",     L_TEXTURE_2D );
	EnabledMaps += LoadMaterialMap( Env, NoiseName,      Shader, L_MAT_SLOT_NOISE,    NULL,                "",                         L_TEXTURE_3D );
	EnabledMaps += LoadMaterialMap( Env, ReflectionName, Shader, L_MAT_SLOT_REFLECT,  FReflectionMapOverride, "MATSYS_USE_REFLECTION_MAP ", L_TEXTURE_CUBE );

	Env->Logger->Log( L_NOTICE, "Setting transparency" );

	if ( Material.FProperties.FTransparency > 0.0f )
	{
		Shader->SetBlending( L_SRC_ALPHA, L_ONE_MINUS_SRC_ALPHA );
		EnabledMaps += "MATSYS_TRANSPARENT ";
	}

	if ( Material.FAlphaTransparency )
	{
		Shader->SetBlending( L_SRC_ALPHA, L_ONE_MINUS_SRC_ALPHA );
		EnabledMaps += "MATSYS_ALPHATRANSPARENCY ";
	}

	if ( FTesselation > 0.0f )
	{
		EnabledMaps += "MATSYS_TESS ";
	}

	EnabledMaps += "\"~MATERIAL_CLASS_NAME " + MaterialClass + "\" ";

	iShaderProgram* AutoSP = NULL;

	Env->Logger->Log( L_DEBUG, "Looking for precached shader program" );

	// look in cache first
	std::map<LString, iShaderProgram*>::const_iterator Iter = Env->Resources->FPrecompiledPrograms.find( ShaderProgramName + EnabledMaps );

	if ( Iter == Env->Resources->FPrecompiledPrograms.end() )
	{
		// load new shader program
		AutoSP = Env->Resources->LoadSP( ShaderProgramName, EnabledMaps );

		Env->Resources->FPrecompiledPrograms[ShaderProgramName + EnabledMaps] = AutoSP; //.insert( std::pair<LString, iShaderProgram*>( DEFAULT_SHADER_PROGRAM + EnabledMaps, AutoSP ) );
	}
	else
	{
		// apply cached shader program
		AutoSP = Iter->second;
	}

	// bind colors
	AutoSP->SetMaterialUniforms( Material, true );

	Shader->SetShaderProgram( AutoSP );

	return Shader;

	unguard();
}
예제 #14
0
void iGUIView::BindConsoleVariableS( const LString& VarName )
{
	if ( !VarName.empty() ) { FConsoleVariable = Env->Console->GetVar( VarName ); }
	else { FConsoleVariable = NULL; }
}
예제 #15
0
void iPostprocessor::SetEnableVarName( const LString& EnableVarName )
{
	FEnableVar = EnableVarName.empty() ? NULL : Env->Console->GetVar( EnableVarName );
}