ripple-tool / Ripple-Data / Base / Actors / Group.cs
Group.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;
using System.Xml.Linq;

namespace Ripple_Data.Base.Actors
{
    [MoonSharpUserData]
    [Serializable]
    public class Group : Actor, IRelationalData, IIdentifyable
    {
        public List<Affinity>? Affinities { get; private set; }
        public Dictionary<Group, Status> GroupAffiliation { get; private set; } = new Dictionary<Group, Status>();
        public Dictionary<ISocial, Status> Opinions { get; private set; } = new Dictionary<ISocial, Status>();

        public new int ID { get; private set; }

        public new IIdentifyable Self { get; private set; }

        public new List<GameRule> Rules { get; private set; }

        public new List<Condition> Conditions {get; private set; }
        public Group(string name, List<Affinity>? affinities, Dictionary<Group, Status> groupAffiliation, Dictionary<ISocial, Status> opinions, int iD, List<GameRule> rules, List<Condition> conditions, string? description = null) : base(name, rules, conditions, description)
        {
            Affinities = affinities;
            GroupAffiliation = groupAffiliation;
            Opinions = opinions;
            ID = GiveID(this);
            Self = this;
            Rules = rules;
            Conditions = conditions;
            GetInstance(this).Objects.Add(this);
        }

        public Group() : base()
        { 
            ID = 0;
            Rules = new List<GameRule>();
            Conditions = new List<Condition>();
            Self = this;
        }

        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("Rules", Rules);
            info.AddValue("Conditions", Conditions);
        }
    }
}