/// \file Personnage.cs
/// \brief Contient la définition de la classe Personnage.
///
/// La classe Personnage représente les différents personnages avec leur nom, épithète, leur prime, leur âge, leur taille, leur origine, leur biographie et une citation.
///
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Runtime.CompilerServices;
using System.Runtime.Serialization;
namespace Model.Classes
{
///
/// Représente un personnage de l'univers de One Piece.
///
[DataContract(Name = "personnage")]
public class Personnage : ObjetOhara
{
///
/// Obtient ou définit la prime du personnage.
///
[DataMember(Name = "prime")]
private double prime;
public double Prime {
get=>prime;
set
{
prime = value;
OnPropertyChanged();
}
}
///
/// Obtient ou définit l'épithète du personnage.
///
[DataMember(Name = "epithete")]
private string? epithete;
public string? Epithete {
get=>epithete;
set
{
epithete = value;
}
}
///
/// Obtient ou définit l'âge du personnage.
///
[DataMember(Name = "age")]
private int age;
public int Age {
get=>age;
set
{
age = value;
OnPropertyChanged();
}
}
///
/// Obtient ou définit la taille du personnage.
///
[DataMember(Name = "taille")]
private double taille;
public double Taille {
get=>taille;
set
{
taille = value;
OnPropertyChanged();
}
}
///
/// Obtient ou définit l'origine du personnage.
///
[DataMember(Name = "origine")]
private string? origine;
public string? Origine {
get=>origine;
set
{
origine = value;
OnPropertyChanged();
}
}
///
/// Obtient ou définit la biographie du personnage.
///
[DataMember(Name = "biographie")]
private string? biographie;
public string? Biographie {
get=>biographie;
set
{
biographie = value;
OnPropertyChanged();
}
}
///
/// Obtient ou définit la citation du personnage.
///
[DataMember(Name = "citation")]
private string? citation;
public string? Citation {
get=>citation;
set
{
citation = value;
OnPropertyChanged();
}
}
///
/// Obtient ou définit l'équipage auquel le personnage appartient.
///
[DataMember(Name = "equipage", EmitDefaultValue = false)]
private Equipage? equipage;
public Equipage? Equipage {
get => equipage;
set
{
equipage = value;
OnPropertyChanged();
}
}
///
/// Obtient la collection en lecture seule des fruits du démon détenus par le personnage.
///
[DataMember(Name = "fruit", EmitDefaultValue = false)]
private ObservableCollection fruit = new ObservableCollection();
public IReadOnlyCollection Fruit {
get=>fruit;
}
///
/// Ajoute un fruit du démon à la collection du personnage.
///
/// Le fruit du démon à ajouter.
public void AjouterFruit(FruitDuDemon? f)
{
if (f == null) return;
fruit.Add(f);
}
///
/// Retire un fruit du démon de la collection du personnage.
///
/// Le fruit du démon à retirer.
public void RetierFruit(FruitDuDemon? f)
{
if (f == null) return;
fruit.Remove(f);
}
///
/// Vide la collection des fruits du démon du personnage.
///
public void ViderFruit() => fruit.Clear();
///
/// Initialise une nouvelle instance de la classe Personnage avec un nom et des informations supplémentaires.
///
/// Le nom du personnage.
/// La prime du personnage.
/// L'épithète du personnage.
/// L'âge du personnage.
/// La taille du personnage.
/// L'origine du personnage.
/// La biographie du personnage.
/// La citation du personnage.
public Personnage(string nom, double prime, string epithete, int age, double taille, string origine, string biographie, string citation) : base(nom)
{
if (prime < 0)
{
Prime = 0;
}
else
{
Prime = prime;
}
Epithete = epithete;
Age = age;
if (taille < 0)
{
Taille = 0;
}
else
{
Taille = taille;
}
Origine = origine;
Biographie = biographie;
Citation = citation;
}
///
/// Initialise une nouvelle instance de la classe Personnage avec un nom, des informations supplémentaires et une image.
///
/// Le nom du personnage.
/// La prime du personnage.
/// L'épithète du personnage.
/// L'âge du personnage.
/// La taille du personnage.
/// L'origine du personnage.
/// La biographie du personnage.
/// La citation du personnage.
/// Le chemin de l'image du personnage.
public Personnage(string nom, double prime, string epithete, int age, double taille, string origine, string biographie, string citation, string image) : this(nom, prime, epithete, age, taille, origine, biographie, citation)
{
if (String.IsNullOrWhiteSpace(image))
image = "baseimage.png";
Image = image;
}
///
/// Détermine si l'objet spécifié est égal à l'objet actuel.
///
/// L'objet à comparer avec l'objet actuel.
/// true si les objets sont égaux, sinon false.
public override bool Equals(object? obj)
{
if (obj == null) return false;
if (this.GetType() != obj.GetType())
{
return false;
}
else
{
Personnage o = (Personnage)obj;
return o.Nom == Nom;
}
}
///
/// Retourne le code de hachage de l'objet actuel.
///
/// Code de hachage calculé à partir des propriétés de l'objet.
public override int GetHashCode()
{
return HashCode.Combine(Prime, Epithete, Age, Origine,Biographie, Citation,Equipage,Fruit);
}
///
/// Retourne une chaîne qui représente l'objet actuel.
///
/// Chaîne représentant l'objet actuel.
public override string ToString()
{
return "Personnage : " + Nom + " " + EstFavori + " " + Prime + " " + Epithete + " " + Age + " " + Origine + " " + Biographie + " "+ Citation+" " +Equipage+" " + Fruit+" "+ Image;
}
}
}