コード例 #1
0
ファイル: FactoryBuilding.cs プロジェクト: gormel/rts
        protected async Task <bool> QueueUnit(int cost, TimeSpan productionTime, Func <IGameObjectFactory, Vector2, Task <Unit> > createUnit)
        {
            var point = await mPlacementService.TryAllocatePoint();

            if (point == PlacementPoint.Invalid)
            {
                return(false);
            }

            if (!Player.Money.Spend(cost))
            {
                await mPlacementService.ReleasePoint(point.ID);

                return(false);
            }

            Queued++;
            mOrders.Enqueue(new Order(productionTime, async() =>
            {
                Queued--;
                var unit = await createUnit(Player, point.Position);
                await mGame.PlaceObject(unit);
                await mPlacementService.ReleasePoint(point.ID);
                if (!new Rect(Position, Size).Contains(Waypoint))
                {
                    await unit.GoTo(Waypoint);
                }
                ;
            }));
            return(true);
        }
コード例 #2
0
        public override void Update(TimeSpan deltaTime)
        {
            var k = AttachedWorkers <= 0 ? 0 : 1;

            mBuildTime = mBuildTime.Subtract(TimeSpan.FromSeconds(deltaTime.TotalSeconds * MathUtils.Pow(1 + WorkerInvest, AttachedWorkers - 1) * k));
            Progress   = (float)(1 - mBuildTime.TotalSeconds / mFullBuildTime.TotalSeconds);
            Health     = Math.Max(Progress * MaxHealth, 5);

            if (mBuildTime <= TimeSpan.Zero)
            {
                mGame.RemoveObject(ID);
                mCreateBuilding(Position).ContinueWith(t => mGame.PlaceObject(t.Result));
            }
        }