// Laboratorio 7 - Esercizio 1 - pg.c // Matteo Schiff - s295565 #ifndef PG_C_DEFINED #define PG_C_DEFINED #include #include #include #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