59 lines
1.5 KiB
C
59 lines
1.5 KiB
C
// Laboratorio 7 - Esercizio 1 - pg.c
|
|
// Matteo Schiff - s295565
|
|
|
|
#ifndef PG_C_DEFINED
|
|
#define PG_C_DEFINED
|
|
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
#include <stdio.h>
|
|
|
|
#include "equipArray.h"
|
|
#include "pg.h"
|
|
|
|
void pg_calc_stats(pg_t *pgp, invArray_t invArray)
|
|
{
|
|
stat_copy(&pgp->eq_stat, &pgp->b_stat);
|
|
for (int i = 0; i < equipArray_inUse(pgp->equip); i++) {
|
|
int index = equipArray_getEquipByIndex(pgp->equip, i);
|
|
inv_t *item = invArray_getByIndex(invArray, index);
|
|
stat_sum(&pgp->eq_stat, &item->stat);
|
|
}
|
|
}
|
|
|
|
/* lettura e scrittura su file */
|
|
int pg_read(FILE *fp, pg_t *pgp)
|
|
{
|
|
if (fscanf(fp, " %49s %49s %49s", pgp->cod, pgp->nome, pgp->classe) != 3)
|
|
return 0;
|
|
|
|
stat_read(fp, &(pgp->b_stat));
|
|
pgp->equip = equipArray_init();
|
|
stat_copy(&pgp->eq_stat, &pgp->b_stat);
|
|
|
|
return 1;
|
|
}
|
|
/* non essendo struct dinamica, pulisce chiamando il distruttore di equipArray */
|
|
void pg_clean(pg_t *pgp)
|
|
{
|
|
free(pgp->equip);
|
|
}
|
|
|
|
void pg_print(FILE *fp, pg_t *pgp, invArray_t invArray)
|
|
{
|
|
fprintf(fp, "%s (%s)\n Classe: %s\n Statistiche - ", pgp->nome, pgp->cod, pgp->classe);
|
|
stat_print(fp, &(pgp->eq_stat), 0);
|
|
equipArray_print(fp, pgp->equip, invArray);
|
|
}
|
|
/* modifica personaggio aggiungendo/togliendo un equipaggiamento selezionato da inventario:
|
|
di fatto e' sufficiente chiamare l'opportuna funzione dal modulo equipArray */
|
|
void pg_updateEquip(pg_t *pgp, invArray_t invArray)
|
|
{
|
|
equipArray_update(pgp->equip, invArray);
|
|
pg_calc_stats(pgp, invArray);
|
|
}
|
|
|
|
/* Si possono aggiungere altre funzioni se ritenute necessarie */
|
|
|
|
#endif
|