1
0
Files
2024-03-22 17:37:24 +01:00

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