public void Clear(ICounterId id, out IEnumerable <ICounterId> clearObjects) { var list = new List <ICounterId>(); var listClear = new List <NotificationBaseNode>(); var node = TryCreateNotificationNode(id); if (node.IsObject) { list.Add(id); } if (node.IsFinished) { listClear.Add(node); } RecurciveFindFinished(node, listClear); foreach (var clearNode in listClear) { if (clearNode.IsObject) { list.Add(clearNode.NotifyId); } SetTreeValue(clearNode.NotifyId, -clearNode.Count.Value); } clearObjects = list; }
public void SetClearObject(ICounterId id) { if (_saver.HasClearObject(id)) { return; } _tree.SetObjectId(id, false); _saver.SetObject(id, false); }
public void SetNewObject(ICounterId id) { if (_saver.HasNewObject(id) || _saver.HasClearObject(id)) { return; } _tree.SetObjectId(id, true); _saver.SetObject(id, true); }
public void ClearNotify(ICounterId id) { IEnumerable <ICounterId> ids; _tree.Clear(id, out ids); foreach (var clearId in ids) { _saver.SetObject(clearId, false); } }
public void Start() { var builder = CounterCreator.Builder; _root.ForEach(x => builder.AddNode(x.ToString())); _notifyId = builder.Build(); _service.GetNotification(_notifyId).Subscribe(x => { _notification?.SetFormatValue(x); }).AddTo(gameObject); }
public void SetObjectId(ICounterId id, bool isNew) { var node = TryCreateNotificationNode(id); if (!node.IsFinished) { throw new Exception("Attempting to set a value for a summing counter"); } node.SetObject(); SetTreeValue(id, isNew ? 1 : -1); }
public void SetObject(ICounterId id, bool isNew) { if (isNew) { _notificationsNew.Add(id.StringId); } else { _notificationsNew.Remove(id.StringId); _notificationsClear.Add(id.StringId); } Save(); }
private void SetTreeValue(ICounterId id, int value) { var parent = Root; foreach (var nodeId in id.Nodes) { NotificationBaseNode child; if (!parent.Childs.TryGetValue(nodeId, out child)) { throw new Exception($"Unknow id = {id.StringId}"); } child.ChangeValue(value); parent = child; } }
public void SetValue(ICounterId id, int value) { var node = TryCreateNotificationNode(id); if (!node.IsFinished) { throw new Exception("Attempting to set a value for a summing counter"); } var change = value - node.Count.Value; if (change == 0) { return; } SetTreeValue(id, change); }
public NotificationBaseNode TryCreateNotificationNode(ICounterId id) { var parent = Root; foreach (var nodeId in id.Nodes) { NotificationBaseNode child; if (!parent.Childs.TryGetValue(nodeId, out child)) { child = new NotificationBaseNode(nodeId, parent); parent.Childs.Add(nodeId, child); } parent = child; } return(parent); }
public void SetValue(ICounterId counterId) { throw new NotImplementedException(); }
public IReadOnlyReactiveProperty <int> GetNotificationValue(ICounterId id) { var node = TryCreateNotificationNode(id); return(node.Count); }
public void SetCount(ICounterId id, int count) { _tree.SetValue(id, count); }
public void RefreshObject(ICounterId id) { _saver.RefreshObject(id); }
public void RefreshObject(ICounterId id) { _notificationsClear.Remove(id.StringId); }
public bool HasClearObject(ICounterId id) { return(_notificationsClear.Contains(id.StringId)); }
public IReadOnlyReactiveProperty <int> GetNotification(ICounterId id) { return(_tree.GetNotificationValue(id)); }