static void DelFromDict(Dictionary <IntTag, List <Action> > dict, IntTag tag, Action action) { if (dict.ContainsKey(tag)) { dict[tag].Remove(action); } }
static void AddToDict(Dictionary <IntTag, List <Action> > dict, IntTag tag, Action action) { if (!dict.ContainsKey(tag)) { dict[tag] = new List <Action>(); } dict[tag].Add(action); }
void InvokeActions(IntTag tag, Dictionary <IntTag, List <Action> > dict) { if (dict.ContainsKey(tag)) { foreach (var action in dict[tag]) { action?.Invoke(); } } }
/// <summary> Returns Entity with specified Tag. Like Unity Find method. </summary> public static Entity FindWith(IntTag tag) { for (var i = 0; i < entities.Count; i++) { if (entities[i].Tags.Have(tag)) { return(entities[i]); } } return(null); }
/// <summary> Returns all Entities with specified Tag. Like Unity Find method. </summary> public static List <Entity> FindAllWith(IntTag tag) { var resultList = new List <Entity>(); for (var i = 0; i < entities.Count; i++) { if (entities[i].Tags.Have(tag)) { resultList.Add(entities[i]); } } return(resultList); }
public bool Have(IntTag tag) => addedTags.ContainsKey(tag);
public int Count(IntTag tag) { addedTags.TryGetValue(tag, out var count); return(count); }
void FirstAddTag(IntTag tag) { addedTags.Add(tag, 1); InvokeActions(tag, addSubscribers); }
public void UnsubscribeFromRemove(IntTag tag, Action action) => DelFromDict(removeSubscribers, tag, action);
public void SubscribeToRemove(IntTag tag, Action action) => AddToDict(removeSubscribers, tag, action);
public void UnsubscribeFromAdd(IntTag tag, Action action) => DelFromDict(addSubscribers, tag, action);
public void SubscribeToAdd(IntTag tag, Action action) => AddToDict(addSubscribers, tag, action);