mirror of
https://github.com/Garux/netradiant-custom.git
synced 2026-09-28 00:00:03 +02:00
minor tweaks
This commit is contained in:
+17
-13
@@ -57,9 +57,9 @@ EClassModules& EntityClassManager_getEClassModules();
|
||||
*/
|
||||
|
||||
void CleanEntityList( EntityClasses& entityClasses ){
|
||||
for ( EntityClasses::iterator i = entityClasses.begin(); i != entityClasses.end(); ++i )
|
||||
for ( auto [ name, eclass ] : entityClasses )
|
||||
{
|
||||
( *i ).second->free( ( *i ).second );
|
||||
eclass->free( eclass );
|
||||
}
|
||||
entityClasses.clear();
|
||||
}
|
||||
@@ -70,11 +70,11 @@ void Eclass_Clear(){
|
||||
}
|
||||
|
||||
EntityClass* EClass_InsertSortedList( EntityClasses& entityClasses, EntityClass *entityClass ){
|
||||
std::pair<EntityClasses::iterator, bool> result = entityClasses.insert( EntityClasses::value_type( entityClass->name(), entityClass ) );
|
||||
if ( !result.second ) {
|
||||
auto [ it, inserted ] = entityClasses.insert( EntityClasses::value_type( entityClass->name(), entityClass ) );
|
||||
if ( !inserted ) {
|
||||
entityClass->free( entityClass );
|
||||
}
|
||||
return ( *result.first ).second;
|
||||
return it->second;
|
||||
}
|
||||
|
||||
EntityClass* Eclass_InsertAlphabetized( EntityClass *e ){
|
||||
@@ -82,9 +82,9 @@ EntityClass* Eclass_InsertAlphabetized( EntityClass *e ){
|
||||
}
|
||||
|
||||
void Eclass_forEach( EntityClassVisitor& visitor ){
|
||||
for ( EntityClasses::iterator i = g_entityClasses.begin(); i != g_entityClasses.end(); ++i )
|
||||
for ( auto [ name, eclass ] : g_entityClasses )
|
||||
{
|
||||
visitor.visit( ( *i ).second );
|
||||
visitor.visit( eclass );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -92,10 +92,10 @@ void Eclass_forEach( EntityClassVisitor& visitor ){
|
||||
class RadiantEclassCollector : public EntityClassCollector
|
||||
{
|
||||
public:
|
||||
void insert( EntityClass* eclass ){
|
||||
void insert( EntityClass* eclass ) override {
|
||||
Eclass_InsertAlphabetized( eclass );
|
||||
}
|
||||
void insert( const char* name, const ListAttributeType& list ){
|
||||
void insert( const char* name, const ListAttributeType& list ) override {
|
||||
g_listTypes.insert( ListAttributeTypes::value_type( name, list ) );
|
||||
}
|
||||
};
|
||||
@@ -157,8 +157,6 @@ public:
|
||||
}
|
||||
}
|
||||
|
||||
// for a given name, we grab the first .def in the vfs
|
||||
// this allows to override baseq3/scripts/entities.def for instance
|
||||
const auto relPath = StringStream( m_directory, name );
|
||||
|
||||
scanner.scanFile( g_collector, relPath );
|
||||
@@ -182,6 +180,12 @@ void EntityClassQuake3_constructDirectory( const char* directory, const char* ex
|
||||
}
|
||||
|
||||
|
||||
/* facts:
|
||||
modules are alpha sorted, so .def .ent loading order
|
||||
all base & mod files of the same type are alpha sorted together
|
||||
equal file name in mod is ignored
|
||||
equal eclass name inserted later is ignored
|
||||
*/
|
||||
void EntityClassQuake3_Construct(){
|
||||
const auto baseDirectory = StringStream( GlobalRadiant().getGameToolsPath(), GlobalRadiant().getRequiredGameDescriptionKeyValue( "basegame" ), '/' );
|
||||
const auto gameDirectory = StringStream( GlobalRadiant().getGameToolsPath(), GlobalRadiant().getGameName(), '/' );
|
||||
@@ -201,9 +205,9 @@ void EntityClassQuake3_Construct(){
|
||||
EntityClassQuake3_constructDirectory( gameDirectory, table.getExtension(), paths );
|
||||
}
|
||||
|
||||
for ( Paths::iterator i = paths.begin(); i != paths.end(); ++i )
|
||||
for ( const auto& [ name, path ] : paths )
|
||||
{
|
||||
EntityClassesLoadFile( table, ( *i ).second ) ( ( *i ).first.c_str() );
|
||||
EntityClassesLoadFile( table, path ) ( name.c_str() );
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
+27
-27
@@ -52,41 +52,41 @@ ListAttributeTypes g_listTypesFGD;
|
||||
|
||||
void EntityClassFGD_clear(){
|
||||
g_EntityClassFGD_classes.clear();
|
||||
for ( BaseClasses::iterator i = g_EntityClassFGD_bases.begin(); i != g_EntityClassFGD_bases.end(); ++i )
|
||||
for ( auto [ name, eclass ] : g_EntityClassFGD_bases )
|
||||
{
|
||||
( *i ).second->free( ( *i ).second );
|
||||
eclass->free( eclass );
|
||||
}
|
||||
g_EntityClassFGD_bases.clear();
|
||||
g_listTypesFGD.clear();
|
||||
}
|
||||
|
||||
EntityClass* EntityClassFGD_insertUniqueBase( EntityClass* entityClass, bool allowfree = true ){
|
||||
std::pair<BaseClasses::iterator, bool> result = g_EntityClassFGD_bases.insert( BaseClasses::value_type( entityClass->name(), entityClass ) );
|
||||
if ( !result.second ) {
|
||||
auto [ it, inserted ] = g_EntityClassFGD_bases.insert( BaseClasses::value_type( entityClass->name(), entityClass ) );
|
||||
if ( !inserted ) {
|
||||
globalErrorStream() << "duplicate base class: " << makeQuoted( entityClass->name() ) << '\n';
|
||||
if( allowfree ){
|
||||
eclass_capture_state( entityClass );
|
||||
entityClass->free( entityClass );
|
||||
}
|
||||
}
|
||||
return ( *result.first ).second;
|
||||
return it->second;
|
||||
}
|
||||
|
||||
EntityClass* EntityClassFGD_insertUnique( EntityClass* entityClass ){
|
||||
EntityClassFGD_insertUniqueBase( entityClass, false );
|
||||
std::pair<EntityClasses::iterator, bool> result = g_EntityClassFGD_classes.insert( EntityClasses::value_type( entityClass->name(), entityClass ) );
|
||||
if ( !result.second ) {
|
||||
auto [ it, inserted ] = g_EntityClassFGD_classes.insert( EntityClasses::value_type( entityClass->name(), entityClass ) );
|
||||
if ( !inserted ) {
|
||||
globalErrorStream() << "duplicate entity class: " << makeQuoted( entityClass->name() ) << '\n';
|
||||
eclass_capture_state( entityClass );
|
||||
entityClass->free( entityClass );
|
||||
}
|
||||
return ( *result.first ).second;
|
||||
return it->second;
|
||||
}
|
||||
|
||||
void EntityClassFGD_forEach( EntityClassVisitor& visitor ){
|
||||
for ( EntityClasses::iterator i = g_EntityClassFGD_classes.begin(); i != g_EntityClassFGD_classes.end(); ++i )
|
||||
for ( auto [ name, eclass ] : g_EntityClassFGD_classes )
|
||||
{
|
||||
visitor.visit( ( *i ).second );
|
||||
visitor.visit( eclass );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -448,10 +448,10 @@ void EntityClassFGD_parseClass( Tokeniser& tokeniser, bool fixedsize, bool isBas
|
||||
tokeniser.nextLine();
|
||||
}
|
||||
|
||||
for ( ListAttributeType::const_iterator i = listType.begin(); i != listType.end(); ++i )
|
||||
for ( const auto& [ name, value ] : listType )
|
||||
{
|
||||
if ( string_equal( attribute.m_value.c_str(), ( *i ).first.c_str() ) ) {
|
||||
attribute.m_value = ( *i ).second;
|
||||
if ( string_equal( attribute.m_value.c_str(), name.c_str() ) ) {
|
||||
attribute.m_value = value;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -634,11 +634,11 @@ const ListAttributeType* EntityClassFGD_findListType( const char *name ){
|
||||
void EntityClassFGD_resolveInheritance( EntityClass* derivedClass ){
|
||||
if ( derivedClass->inheritanceResolved == false ) {
|
||||
derivedClass->inheritanceResolved = true;
|
||||
for ( StringList::iterator j = derivedClass->m_parent.begin(); j != derivedClass->m_parent.end(); ++j )
|
||||
for ( const auto& parentName : derivedClass->m_parent )
|
||||
{
|
||||
BaseClasses::iterator i = g_EntityClassFGD_bases.find( ( *j ).c_str() );
|
||||
BaseClasses::iterator i = g_EntityClassFGD_bases.find( parentName.c_str() );
|
||||
if ( i == g_EntityClassFGD_bases.end() ) {
|
||||
globalErrorStream() << "failed to find entityDef " << makeQuoted( ( *j ).c_str() ) << " inherited by " << makeQuoted( derivedClass->name() ) << '\n';
|
||||
globalErrorStream() << "failed to find entityDef " << makeQuoted( parentName.c_str() ) << " inherited by " << makeQuoted( derivedClass->name() ) << '\n';
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -654,9 +654,9 @@ void EntityClassFGD_resolveInheritance( EntityClass* derivedClass ){
|
||||
derivedClass->maxs = parentClass->maxs;
|
||||
}
|
||||
|
||||
for ( EntityClassAttributes::iterator k = parentClass->m_attributes.begin(); k != parentClass->m_attributes.end(); ++k )
|
||||
for ( const auto& [ key, attr ] : parentClass->m_attributes )
|
||||
{
|
||||
EntityClass_insertAttribute( *derivedClass, ( *k ).first.c_str(), ( *k ).second );
|
||||
EntityClass_insertAttribute( *derivedClass, key.c_str(), attr );
|
||||
}
|
||||
|
||||
for( size_t flag = 0; flag < MAX_FLAGS; ++flag ){
|
||||
@@ -713,23 +713,23 @@ public:
|
||||
}
|
||||
|
||||
{
|
||||
for ( EntityClasses::iterator i = g_EntityClassFGD_classes.begin(); i != g_EntityClassFGD_classes.end(); ++i )
|
||||
for ( auto [ name, eclass ] : g_EntityClassFGD_classes )
|
||||
{
|
||||
EntityClassFGD_resolveInheritance( ( *i ).second );
|
||||
if ( ( *i ).second->fixedsize && ( *i ).second->m_modelpath.empty() ) {
|
||||
if ( !( *i ).second->sizeSpecified ) {
|
||||
globalErrorStream() << "size not specified for entity class: " << makeQuoted( ( *i ).second->name() ) << '\n';
|
||||
EntityClassFGD_resolveInheritance( eclass );
|
||||
if ( eclass->fixedsize && eclass->m_modelpath.empty() ) {
|
||||
if ( !eclass->sizeSpecified ) {
|
||||
globalErrorStream() << "size not specified for entity class: " << makeQuoted( eclass->name() ) << '\n';
|
||||
}
|
||||
if ( !( *i ).second->colorSpecified ) {
|
||||
globalErrorStream() << "color not specified for entity class: " << makeQuoted( ( *i ).second->name() ) << '\n';
|
||||
if ( !eclass->colorSpecified ) {
|
||||
globalErrorStream() << "color not specified for entity class: " << makeQuoted( eclass->name() ) << '\n';
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
{
|
||||
for ( BaseClasses::iterator i = g_EntityClassFGD_bases.begin(); i != g_EntityClassFGD_bases.end(); ++i )
|
||||
for ( auto [ name, eclass ] : g_EntityClassFGD_bases )
|
||||
{
|
||||
eclass_capture_state( ( *i ).second );
|
||||
eclass_capture_state( eclass );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -529,6 +529,8 @@ const char* GetExtension(){
|
||||
void ScanFile( EntityClassCollector& collector, const char *filename ){
|
||||
TextFileInputStream inputFile( filename );
|
||||
if ( !inputFile.failed() ) {
|
||||
globalOutputStream() << "parsing entity classes from " << makeQuoted( filename ) << '\n';
|
||||
|
||||
XMLStreamParser parser( inputFile );
|
||||
|
||||
EclassXMLImporter importer( collector );
|
||||
|
||||
Reference in New Issue
Block a user