- Ordenació alfabètica dels actors de cada habitació per als arxius i l'editor
This commit is contained in:
@@ -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");
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user