public void OnNewResourceable <T>(IResourceable <T> resourceable, T item) where T : IKeyed, INameable { if (!_resourceHooks.TryGetValue(resourceable, out var hooksObj)) { return; } ((ResourceHook <T>)hooksObj)(item); }
public string addRessourcableObject(Player owner, IResourceable resourceObject) { string resourceId = ""; Type resourceType = resourceObject.GetType(); if (resourceType == typeof(clsUnitType)) { // Todo: Anstatt eine neue Instanz erstellen evtl. in der Ressource nur Info-Objekte speichern? Resource<clsUnitType> resUnit = new Resource<clsUnitType>(); resUnit.Owner = owner; resUnit.resourceId = Guid.NewGuid(); resUnit.resourceHandler = this; m_lstUnusedUnitResources.Add(resUnit); resourceId = resUnit.resourceId.ToString(); } return resourceId; }
/// <inheritdoc cref="IResourceManager.FreezeResourceable{T}"/> public void FreezeResourceable <T>(IResourceable <T> resourceable) where T : IKeyed, INameable { if (resourceable.IsFrozen) { throw new ArgumentException("This message is only to be called by IResourceable"); } if (!_resourceHooks.TryGetValue(resourceable, out var hooksObj)) { return; } var hooks = (ResourceHook <T>)hooksObj; var e = resourceable.GetResourceables(); foreach (var item in e) { hooks(item); } }
public void AddHook <T>(IResourceable <T> resourceable, ResourceHook <T> hook) where T : IKeyed, INameable { if (resourceable.IsFrozen) { var e = resourceable.GetResourceables(); foreach (var item in e) { hook(item); } } ResourceHook <T> hooks; if (_resourceHooks.TryGetValue(resourceable, out var hooksObj)) { hooks = (ResourceHook <T>)hooksObj; hooks += hook; } else { hooks = hook; } _resourceHooks[resourceable] = hooks; }