Exemplo n.º 1
0
        public async UniTask <BuildingRender> Build(BuildingModel model, Vector3 position)
        {
            if (cancellationTokenSource != null)
            {
                return(null);
            }

            Dispose();

            cancellationTokenSource = new CancellationTokenSource();

            var prefab   = buildingAssets.FindBuilding(model.Id);
            var building = GameObject.Instantiate(prefab, root);

            var delay = TimeSpan.FromMilliseconds(model.Сonditions.BuildDuration);
            var token = cancellationTokenSource.Token;

            building.Root.position = position;

            progressConstructor.Progress(building.Root.gameObject, delay);

            await UniTask.Delay(delay, cancellationToken : token);

            cancellationTokenSource = null;
            progressConstructor.Stop(building.Root.gameObject);

            return(building);
        }
Exemplo n.º 2
0
        public void Visit(MiningBuildingModel model)
        {
            var goal             = new MiningGoal(model.Mining, db, buildingService);
            var progressRoot     = building.Root.gameObject;
            var progressDuration = TimeSpan.FromMilliseconds(model.Mining.Delay);

            goal.Mining
            .Where(isActive => isActive)
            .Subscribe(_ => progressConstructor.Progress(progressRoot, progressDuration))
            .AddTo(building);

            building.Disabled
            .Subscribe(_ => goal.Dispose())
            .AddTo(building);

            building.Interactived
            .Subscribe(_ => goal.Execute())
            .AddTo(building);

            goal.Start();
        }