minor tweaks

This commit is contained in:
Garux
2025-08-04 16:01:03 +05:00
parent a9635dbf74
commit dff8b0ea87
3 changed files with 46 additions and 40 deletions
+17 -13
View File
@@ -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
View File
@@ -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 );
}
}
+2
View File
@@ -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 );