using MoonSharp.Interpreter; using Ripple_Data.Base.Actions.Base; using Ripple_Data.Base.Waves; using Ripple_Data.Control; using Ripple_Data.Control.Commands; using Ripple_Data.Quests; using System; using System.Collections.Generic; using System.Linq; using System.Runtime.Serialization; using System.Text; using System.Threading.Tasks; namespace Ripple_Data.Base.Actors { [Serializable] [MoonSharpUserData] public class Character : Actor, IIdentifyable, IRelationalData { public Dictionary<ISocial, Status> Opinions { get; private set; } = new Dictionary<ISocial, Status>(); public List<Affinity> Affinities { get; private set; } = new List<Affinity> { }; public Dictionary<Group, Status> GroupAffiliation { get; private set; } = new Dictionary<Group, Status>(); public List<Effect> CurrentEffects { get; private set; } = new List<Effect>(); public new int ID { get; private set; } public new IIdentifyable Self { get; private set; } public Character() : base (string.Empty, new List<GameRule>(), new List<Condition>()) { Self = this; ID = 0; } public Character(string name, Dictionary<ISocial, Status> opinions, List<Affinity> affinities, Dictionary<Group, Status> groupAffiliation, List<Effect> currentEffects, int iD, List<GameRule> rules, List<Condition> conditions, string? description) : base(name, rules, conditions, description) { Opinions = opinions; Affinities = affinities; GroupAffiliation = groupAffiliation; CurrentEffects = currentEffects; ID = iD; Self = this; Rules = rules; Conditions = conditions; GetInstance(this).Objects.Add(this); } public new List<GameRule> Rules { get; private set; } = new List<GameRule>(); public new List<Condition> Conditions { get; private set; } = new List<Condition>(); public new void GetObjectData(SerializationInfo info, StreamingContext context) { info.AddValue("Name", Name); info.AddValue("ID", ID); info.AddValue("Description", Description); info.AddValue("Opinions", Opinions); info.AddValue("GroupAffiliation", GroupAffiliation); info.AddValue("Affinities", Affinities); info.AddValue("CurrentEffects", CurrentEffects); info.AddValue("Rules", Rules); info.AddValue("Conditions", Conditions); } } }