Beispiel #1
0
        public void BeginResearch(ResearchOption option)
        {
            if (_resourceContainer.TrySpend(option.ResourceCost))
            {
                option.OnCompleted += ResearchCompleted;
                _inProgress.Add(option);

                option.BeginResearch();
                OnResearchBegun?.Invoke(option);
            }
        }
Beispiel #2
0
        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));