- 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";
|
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)
|
void saveToFile(FILE *f, actor_t *act)
|
||||||
{
|
{
|
||||||
fprintf(f, "\nactor{\n");
|
fprintf(f, "\nactor{\n");
|
||||||
|
|||||||
@@ -100,6 +100,7 @@ namespace actor
|
|||||||
|
|
||||||
actor_t *prev;
|
actor_t *prev;
|
||||||
actor_t *next;
|
actor_t *next;
|
||||||
|
actor_t *next_alpha;
|
||||||
|
|
||||||
int inner_x;
|
int inner_x;
|
||||||
int inner_y;
|
int inner_y;
|
||||||
@@ -131,6 +132,8 @@ namespace actor
|
|||||||
|
|
||||||
void setUniqueName(actor_t *act);
|
void setUniqueName(actor_t *act);
|
||||||
|
|
||||||
|
actor_t *alphaOrder(actor_t *act);
|
||||||
|
|
||||||
void saveToFile(FILE *f, actor_t *act);
|
void saveToFile(FILE *f, actor_t *act);
|
||||||
|
|
||||||
void setDirty(actor_t *act, const bool force=false);
|
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[ZP]!=-1) fprintf(f, "exit-zp: %i\n", exits[ZP]);
|
||||||
if (exits[ZN]!=-1) fprintf(f, "exit-zn: %i\n", exits[ZN]);
|
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)
|
while (act)
|
||||||
{
|
{
|
||||||
if ( (act->flags&(FLAG_HERO|FLAG_NOEDITOR))==0 ) actor::saveToFile(f, act);
|
if ( (act->flags&(FLAG_HERO|FLAG_NOEDITOR))==0 ) actor::saveToFile(f, act);
|
||||||
act = act->next;
|
act = act->next_alpha;
|
||||||
}
|
}
|
||||||
|
|
||||||
fclose(f);
|
fclose(f);
|
||||||
|
|||||||
Reference in New Issue
Block a user