bygfoot/src/finance.c

96 lines
2.6 KiB
C
Raw Normal View History

2005-03-16 21:48:25 +01:00
#include "finance.h"
#include "maths.h"
#include "option.h"
#include "player.h"
#include "user.h"
/** Weekly update of finances. */
void
finance_update_user_weekly(User *user)
{
gint i;
Team *tm = user->tm;
gfloat physio_factor[4] =
{const_float("float_finance_physio_factor1"),
const_float("float_finance_physio_factor2"),
const_float("float_finance_physio_factor3"),
const_float("float_finance_physio_factor4")};
gfloat scout_factor[4] =
{const_float("float_finance_scout_factor1"),
const_float("float_finance_scout_factor2"),
const_float("float_finance_scout_factor3"),
const_float("float_finance_scout_factor4")};
if(week % 2 == 1)
{
for(i=0;i<MON_OUT_END;i++)
{
user->money_out[0][i] = user->money_out[1][i];
user->money_out[1][i] = 0;
}
for(i=0;i<MON_IN_END;i++)
{
user->money_in[0][i] = user->money_in[1][i];
user->money_in[1][i] = 0;
}
}
for(i=0;i<tm->players->len;i++)
{
user->money_out[1][MON_OUT_WAGE] -= player_of(tm, i)->wage;
if(player_of(tm, i)->health > 0)
user->money_out[1][MON_OUT_PHYSIO] -=
(gint)(finance_wage_unit(tm) * physio_factor[user->physio % 10]);
}
user->money_out[1][MON_OUT_SCOUT] -= (gint)(finance_wage_unit(tm) * scout_factor[user->scout % 10]);
user->debt = (gint)rint((gfloat)user->debt * const_float("float_finance_interest"));
for(i=0;i<MON_OUT_END;i++)
user->money += user->money_out[1][i];
}
/** Return a base value for team finances.
Scout wages etc. depend on this value. */
gfloat
finance_wage_unit(const Team *tm)
{
gint i;
gfloat sum = 0;
for(i=0;i<tm->players->len;i++)
sum += player_of(tm, i)->wage;
return sum / (gfloat)tm->players->len;
}
/** Calculate the drawing credit or maximum loan of a team
based on player values and stadium data. */
gint
finance_team_drawing_credit_loan(const Team *tm, gboolean loan)
{
gint i;
gfloat sum = 0;
for(i=0;i<tm->players->len;i++)
sum += player_of(tm, i)->value;
/* printf("pl %.0f stad %.0f\n", sum, */
/* (gfloat)tm->stadium.capacity * powf(tm->stadium.safety, */
/* const_float("float_finance_credit_stadium_safety_exponent"))); */
sum = (sum * const_float("float_finance_credit_player_value_weight")) +
((gfloat)tm->stadium.capacity * powf(tm->stadium.safety,
const_float("float_finance_credit_stadium_safety_exponent"))
* (1 - const_float("float_finance_credit_player_value_weight")));
/* printf(" sum %.0f\n", sum); */
sum *= (loan) ? const_float("float_finance_credit_factor_loan") :
const_float("float_finance_credit_factor_drawing");
return (gint)rint(sum);
}