using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Drawing; using System.Runtime.Serialization; using System.Linq; using Newtonsoft.Json; using Vintagestory.API.Client; using Vintagestory.API.Common; using Vintagestory.API.Common.Entities; using Vintagestory.API.MathTools; namespace Automap { public delegate void EntityDesignatorAction(ICoreClientAPI clientAPI, EntitiesOfInterest poi, BlockPos posn, Entity entity); /// /// Point of Interest Rule Designator /// [JsonObject(MemberSerialization.OptIn)] public class EntityDesignator { [JsonProperty] public Color Color; [JsonIgnore] public EntityDesignatorAction SpecialAction; [JsonProperty] public string SpecialActionName; [JsonProperty] public AssetLocation Pattern; [JsonProperty] public EnumEntityState? StateCheck;//Needed? [JsonProperty] public bool Enabled { get; set; } private EntityDesignator() { //throw new NotSupportedException(); } public EntityDesignator(AssetLocation pattern, Color color, EnumEntityState? state) { Pattern = pattern; Color = color; StateCheck = state; Enabled = true; } public EntityDesignator(AssetLocation pattern, Color color, EnumEntityState? state, EntityDesignatorAction specialAct) { Pattern = pattern; Color = color; StateCheck = state; SpecialAction = specialAct; SpecialActionName = specialAct.Method.Name; Enabled = true; } public override string ToString() => Pattern.ToShortString() + "|" + Color.Name + "|" + StateCheck ?? ""; [OnDeserialized] public void RelinkDesignator(StreamingContext sCtx) { if (SpecialAction == null && !String.IsNullOrEmpty(SpecialActionName)) { //TODO: still not truely dynamic... EntityDesignator delegateTarget = DefaultDesignators.DefaultEntityDesignators.FirstOrDefault((EntityDesignator arg) => arg.SpecialActionName == SpecialActionName); if (delegateTarget != null) this.SpecialAction = delegateTarget?.SpecialAction; } } } }