public void BeginResearch(ResearchOption option) { if (_resourceContainer.TrySpend(option.ResourceCost)) { option.OnCompleted += ResearchCompleted; _inProgress.Add(option); option.BeginResearch(); OnResearchBegun?.Invoke(option); } }
public void Handle(IContentCachedPrefab prefab) { GameObject go = prefab.GetCache(); IPurchasable purchasable = go.GetComponent <IPurchasable>(); IResourceContainer resources = GetComponent <IResourceContainer>(); if (resources.HasEnough(purchasable.Cost)) { GameObject instance = prefab.Instantiate(); ReflectionUtils.DynamicBroadcastInvoke(instance, "OnInstantiated", true); // Definitively hacky, but better than immidiate alternative. instance.SetActive(true); ISimplePlacement placement = GetPlacement(purchasable, resources); placement.Pickup(instance); placement.OnPlaced += (obj) => resources.TrySpend(purchasable.Cost); PlacementController.Instance.TakePlacement(placement); } }
private bool TryClaimResource() => _resourceContainer.TrySpend(new SingleResourceCost(ConsumingResource, ConsumingResource.BinaryValue));