//
// Mates.cs
//
// Copyright (c) František Boháček. All rights reserved.
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
using System.Collections;
using System.Collections.Concurrent;
using NosSmooth.Game.Data.Characters;
namespace NosSmooth.Game.Data.Mates;
///
/// Game mates state.
///
public class Mates : IEnumerable
{
private ConcurrentDictionary _partners;
private ConcurrentDictionary _pets;
///
/// Initializes a new instance of the class.
///
public Mates()
{
_partners = new ConcurrentDictionary();
_pets = new ConcurrentDictionary();
}
///
/// Gets all of the partners belonging to the character.
///
public IEnumerable Partners => _partners.Values;
///
/// Gets all of the pets belonging to the character.
///
public IEnumerable Pets => _pets.Values;
///
/// Gets the current skill of pet, if there is any.
///
public Skill? PetSkill { get; internal set; }
///
/// Get sthe current skills of partner(' sp).
///
public IReadOnlyList? PartnerSkills { get; internal set; }
///
/// Gets the current pet of the client.
///
public PartyPet? CurrentPet { get; internal set; }
///
/// Gets the current partner of the client.
///
public PartyPartner? CurrentPartner { get; internal set; }
///
public IEnumerator GetEnumerator()
=> _partners.Values.Cast().Concat(_pets.Values.Cast()).GetEnumerator();
///
IEnumerator IEnumerable.GetEnumerator()
=> GetEnumerator();
///
/// Sets pet of the given id.
///
/// The pet.
internal void SetPet(Pet pet)
{
_pets[pet.MateId] = pet;
}
///
/// Sets partner of the given id.
///
/// The partner.
internal void SetPartner(Partner partner)
{
_partners[partner.MateId] = partner;
}
///
/// Clears partners and pets.
///
internal void Clear()
{
_partners.Clear();
_pets.Clear();
}
}