bygfoot/src/player_struct.h

234 lines
6.5 KiB
C

/*
player_struct.h
Bygfoot Football Manager -- a small and simple GTK2-based
football management game.
http://bygfoot.sourceforge.net
Copyright (C) 2005 Gyözö Both (gyboth@bygfoot.com)
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
#ifndef PLAYER_STRUCT_H
#define PLAYER_STRUCT_H
#include "bygfoot.h"
#include "enums.h"
#include "team_struct.h"
/**
Player positions.
*/
enum PlayerPos
{
PLAYER_POS_GOALIE = 0,
PLAYER_POS_DEFENDER,
PLAYER_POS_MIDFIELDER,
PLAYER_POS_FORWARD,
PLAYER_POS_ANY,
PLAYER_POS_END
};
/** Streaks a player can go on. */
enum PlayerStreak
{
PLAYER_STREAK_COLD = -1,
PLAYER_STREAK_NONE,
PLAYER_STREAK_HOT
};
/**
Cards in different cups are counted separately for players;
for each league or cup the cards are stored in such a struct.
*/
typedef struct
{
/** Numerical id of the league or cup. */
gint clid;
/** Number of yellow cards. */
gint yellow;
/** Number of weeks the player is banned. */
gint red;
} PlayerCard;
/**
Goals and games in different leagues and cups are counted separately for players.
*/
typedef struct
{
/** Numerical id of the league or cup. */
gint clid;
/** Number of games the player played. */
gint games;
/** Number of goals (scored for field players or conceded for goalies). */
gint goals;
/** Number of shots (taken or faced). */
gint shots;
} PlayerGamesGoals;
enum PlayerInjury
{
PLAYER_INJURY_NONE = 0,
PLAYER_INJURY_CONCUSSION,
PLAYER_INJURY_PULLED_MUSCLE,
PLAYER_INJURY_HAMSTRING,
PLAYER_INJURY_GROIN,
PLAYER_INJURY_FRAC_ANKLE,
PLAYER_INJURY_RIB,
PLAYER_INJURY_LEG,
PLAYER_INJURY_BROK_ANKLE,
PLAYER_INJURY_ARM,
PLAYER_INJURY_SHOULDER,
PLAYER_INJURY_LIGAMENT,
PLAYER_INJURY_CAREER_STOP,
PLAYER_INJURY_END
};
/** Enum for different player data. */
enum PlayerValue
{
PLAYER_VALUE_GAMES = 0,
PLAYER_VALUE_GOALS,
PLAYER_VALUE_SHOTS,
PLAYER_VALUE_CARD_YELLOW,
PLAYER_VALUE_CARD_RED,
PLAYER_VALUE_END
};
/** Enumeration for the yellow/red
card status during the live game. */
enum PlayerCardStatus
{
PLAYER_CARD_STATUS_NONE = 0,
PLAYER_CARD_STATUS_YELLOW,
PLAYER_CARD_STATUS_RED
};
/**
Representation of a player.
@see #PlayerAttributes
*/
typedef struct
{
gchar *name;
gint pos, /**< Position. @see #PlayerPos */
cpos, /**< Current position. @see #PlayerPos */
health, /**< Health. An integer signifying an injury or
good health. @see #PlayerInjury */
recovery, /**< Weeks until the player gets healthy. */
id, /**< Id of the player within the team. */
value, /**< Value of the player. */
wage, /**< Wage of the player. */
offers, /**< Number of times the player received a contract offer. */
streak, /**< The streak the player is on. */
card_status; /**< The card status of the player during a live game. */
gfloat skill, /**< Skill. Between 0 and a constant
(specified in the constants file). */
cskill, /**< Current Skill. */
talent, /**< Talent. The peak ability (which isn't always reached). */
etal[QUALITY_END], /**< Estimated talent (the user never sees the actual talent).
Depends on scout quality. */
fitness, /**< Fitness. Between 0 and 1. */
lsu, /**< Last skill update. Number of weeks since the player
skill was last updated. */
age, /**< Age in years. */
peak_age, /**< Age at which the player reaches his peak ability. */
peak_region, /**< Region around the peak age during which the player's
ability is at the peak (in years). */
contract, /**< The years until the player's contract expires. */
streak_prob, /**< This number determines how probable it is that a player
goes on a hot/cold streak. Between -1 and 1. */
streak_count; /**< How many weeks the streak goes (or how
long a new streak may not begin if the value
is negative). */
/** Whether the player participated in the team's last match. */
gboolean participation;
/** Array of games and goals; one item per league and cup.
@see PlayerGamesGoals */
GArray *games_goals;
/** Array of cards; one item per league and cup.
@see PlayerCard*/
GArray *cards;
/** Career goals, games etc. */
gint career[PLAYER_VALUE_END];
/** Pointer to the player's team. */
Team *team;
} Player;
/** Enum for player attributes that can be shown in a player list. */
enum PlayerListAttributeValue
{
PLAYER_LIST_ATTRIBUTE_NAME = 0,
PLAYER_LIST_ATTRIBUTE_CPOS,
PLAYER_LIST_ATTRIBUTE_POS,
PLAYER_LIST_ATTRIBUTE_CSKILL,
PLAYER_LIST_ATTRIBUTE_SKILL,
PLAYER_LIST_ATTRIBUTE_FITNESS,
PLAYER_LIST_ATTRIBUTE_GAMES,
PLAYER_LIST_ATTRIBUTE_SHOTS,
PLAYER_LIST_ATTRIBUTE_GOALS,
PLAYER_LIST_ATTRIBUTE_STATUS,
PLAYER_LIST_ATTRIBUTE_CARDS,
PLAYER_LIST_ATTRIBUTE_AGE,
PLAYER_LIST_ATTRIBUTE_ETAL,
PLAYER_LIST_ATTRIBUTE_VALUE,
PLAYER_LIST_ATTRIBUTE_WAGE,
PLAYER_LIST_ATTRIBUTE_CONTRACT,
PLAYER_LIST_ATTRIBUTE_TEAM,
PLAYER_LIST_ATTRIBUTE_LEAGUE_CUP,
PLAYER_LIST_ATTRIBUTE_END
};
enum PlayerInfoAttributeValue
{
PLAYER_INFO_ATTRIBUTE_NAME = 0,
PLAYER_INFO_ATTRIBUTE_POS,
PLAYER_INFO_ATTRIBUTE_CPOS,
PLAYER_INFO_ATTRIBUTE_SKILL,
PLAYER_INFO_ATTRIBUTE_CSKILL,
PLAYER_INFO_ATTRIBUTE_FITNESS,
PLAYER_INFO_ATTRIBUTE_ETAL,
PLAYER_INFO_ATTRIBUTE_AGE,
PLAYER_INFO_ATTRIBUTE_HEALTH,
PLAYER_INFO_ATTRIBUTE_VALUE,
PLAYER_INFO_ATTRIBUTE_WAGE,
PLAYER_INFO_ATTRIBUTE_CONTRACT,
PLAYER_INFO_ATTRIBUTE_GAMES_GOALS,
PLAYER_INFO_ATTRIBUTE_YELLOW_CARDS,
PLAYER_INFO_ATTRIBUTE_BANNED,
PLAYER_INFO_ATTRIBUTE_STREAK,
PLAYER_INFO_ATTRIBUTE_CAREER,
PLAYER_INFO_ATTRIBUTE_OFFERS,
PLAYER_INFO_ATTRIBUTE_END
};
/** A struct telling us which player attributes to show in a player list.
@see #PlayerListAttributeValue*/
typedef struct
{
gboolean on_off[PLAYER_LIST_ATTRIBUTE_END];
} PlayerListAttribute;
#endif