T IReferences.GetOrCreateObject <T>(JObject parent, string name, Func <ModelDataAccessor, T> factory, bool createIfNull) { if (_objects.TryGet(parent, name, out T obj)) { return(obj); } var property = Get(parent, name); if (property == null) { if (createIfNull) { var jObj = _refs.Create(); if (parent.ContainsKey(name)) { parent[name] = jObj; } else { parent.Add(name, jObj); } property = new ModelDataAccessor(jObj, this); } else { return(default(T)); } } obj = (factory ?? Mappings.GetFactory <T>()).Invoke(property); _objects.Add(parent, name, obj); return(obj); }
public object CreateObject(JObject jObj, Func <ModelDataAccessor, object> factory) { var accessor = new ModelDataAccessor(jObj, this); var obj = factory.Invoke(accessor); var id = jObj.Property("$id").Value.Value <string>(); _objects.Add(id, obj); return(obj); }
public ListAccessor(JArray array, IReferences refs, Func <ModelDataAccessor, T> factory) { _array = array; _refs = refs; _factory = factory; _items = array .Select(t => { var obj = refs.GetReferred((JObject)t); var accessor = new ModelDataAccessor(obj, _refs); return(factory.Invoke(accessor)); }) .ToList() ?? new List <T>(); }
public T GetRoot <T>(Func <ModelDataAccessor, T> factory = null) where T : Model { if (_root != null) { return((T)_root); } var accessor = new ModelDataAccessor(_json, _refs); var root = (factory ?? Mappings.GetFactory <T>()).Invoke(accessor); _root = root; return(root); }
public T Add(Action <IReferences, JObject> init = null) { JObject obj; if (typeof(T).IsSubclassOf(typeof(RefModel))) { obj = _refs.Create(); } else { obj = new JObject(); } init?.Invoke(_refs, obj); var accessor = new ModelDataAccessor(obj, _refs); var item = _factory.Invoke(accessor); _array.Add(obj); _items.Add(item); CollectionChanged?.Invoke(this, new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Add, item)); return(item); }
public PlayerModel(ModelDataAccessor accessor) : base(accessor) { N.On(Kingdom, nameof(Kingdom.Disabled), nameof(IsKingdomEnabled)); }
public FeaturesModel(ModelDataAccessor accessor) : base(accessor) { }
public PlayerKingdomChangeModel(ModelDataAccessor accessor) : base(accessor) { }
public UISettingsModel(ModelDataAccessor accessor, string characterBlueprint) : base(accessor) { _characterBlueprint = characterBlueprint; }
public WeaponItemModel(ModelDataAccessor accessor) : base(accessor) { }
public StatsModel(ModelDataAccessor accessor) : base(accessor) { }
public PlayerKingdomLeaderModel(ModelDataAccessor accessor) : base(accessor) { }
public PlayerKingdomStatsModel(ModelDataAccessor accessor) : base(accessor) { }
public ProgressionModel(ModelDataAccessor accessor) : base(accessor) { }
public RefModel(ModelDataAccessor accessor) : base(accessor) { }
public ClassModel(ModelDataAccessor accessor) : base(accessor) { }
public CharacterModel(ModelDataAccessor accessor) : base(accessor) { N.On(nameof(CustomName), nameof(Name)); }
public InventoryModel(ModelDataAccessor accessor) : base(accessor) { //N.On(nameof(Items), nameof(UnequipedItems)); }
public PartyModel(ModelDataAccessor accessor) : base(accessor) { }
public CharacterAttributeModel(ModelDataAccessor accessor) : base(accessor) { }
public PlayerKingdomEventHistoryModel(ModelDataAccessor accessor) : base(accessor) { }
public Model(ModelDataAccessor accessor) { A = accessor; N = new NotifyChangeTracker(this, () => _propertyChanged); A.SetChangeTracker(N); }
public BodyModel(ModelDataAccessor accessor) : base(accessor) { }
public FactContextModel(ModelDataAccessor accessor) : base(accessor) { }