- Ordenació alfabètica dels actors de cada habitació per als arxius i l'editor

This commit is contained in:
2024-09-17 20:02:25 +02:00
parent 1d255b70e0
commit f1f37d7801
3 changed files with 56 additions and 2 deletions

View File

@@ -281,6 +281,57 @@ namespace actor
return "NONE";
}
actor_t *alpha = nullptr;
const bool a_is_greater_than_b(actor_t *a, actor_t *b)
{
return strcmp(a->name, b->name) >= 0;
}
void order(actor_t *act)
{
if (!act) return;
if (!a_is_greater_than_b(act, alpha))
{
act->next_alpha = alpha;
alpha = act;
}
else
{
actor_t *other = alpha;
actor_t *prev = nullptr;
while (a_is_greater_than_b(act, other))
{
if (other->next_alpha)
{
prev = other;
other = other->next_alpha;
}
else
{
other->next_alpha = act;
return;
}
}
prev->next_alpha = act;
act->next_alpha = other;
}
}
actor_t *alphaOrder(actor_t *act)
{
if (!act) return nullptr;
alpha = act;
act->next_alpha = nullptr;
act = act->next;
while (act)
{
act->next_alpha = nullptr;
order(act);
act = act->next;
}
return alpha;
}
void saveToFile(FILE *f, actor_t *act)
{
fprintf(f, "\nactor{\n");

View File

@@ -100,6 +100,7 @@ namespace actor
actor_t *prev;
actor_t *next;
actor_t *next_alpha;
int inner_x;
int inner_y;
@@ -131,6 +132,8 @@ namespace actor
void setUniqueName(actor_t *act);
actor_t *alphaOrder(actor_t *act);
void saveToFile(FILE *f, actor_t *act);
void setDirty(actor_t *act, const bool force=false);

View File

@@ -572,11 +572,11 @@ namespace room
if (exits[ZP]!=-1) fprintf(f, "exit-zp: %i\n", exits[ZP]);
if (exits[ZN]!=-1) fprintf(f, "exit-zn: %i\n", exits[ZN]);
actor::actor_t *act = actor::getFirst();
actor::actor_t *act = actor::alphaOrder(actor::getFirst());
while (act)
{
if ( (act->flags&(FLAG_HERO|FLAG_NOEDITOR))==0 ) actor::saveToFile(f, act);
act = act->next;
act = act->next_alpha;
}
fclose(f);