ripple-tool / Ripple-Data / Base / Actors / Character.cs
Character.cs
Raw
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);
        }
    }
}