public override int RemainingTimeActual(ProductionItem item)
        {
            var parallelBuilds = Queue.FindAll(i => !i.Paused && !i.Done)
                                 .GroupBy(i => i.Item)
                                 .ToList()
                                 .Count;

            return(item.RemainingTimeActual * parallelBuilds);
        }
Exemple #2
0
        public override int RemainingTimeActual(ProductionItem item)
        {
            var parallelBuilds = Queue.FindAll(i => !i.Paused && !i.Done)
                                 .GroupBy(i => i.Item)
                                 .ToList()
                                 .Count;

            return(item.RemainingTimeActual * parallelBuilds * info.ParallelPenaltyBuildTimeMultipliers[Math.Min(parallelBuilds - 1, info.ParallelPenaltyBuildTimeMultipliers.Length - 1)] / 100);
        }
 protected virtual void BeginProduction(ProductionItem item, bool hasPriority)
 {
     if (hasPriority && Queue.Count > 1)
     {
         Queue.Insert(1, item);
     }
     else
     {
         Queue.Add(item);
     }
 }
Exemple #4
0
        public void EndProduction(ProductionItem item)
        {
            Queue.Remove(item);

            if (item.Infinite)
            {
                Queue.Add(new ProductionItem(this, item.Item, item.TotalCost, playerPower, item.OnComplete)
                {
                    Infinite = true
                });
            }
        }
Exemple #5
0
        protected virtual void BeginProduction(ProductionItem item, bool hasPriority)
        {
            if (Queue.Any(i => i.Item == item.Item && i.Infinite))
            {
                return;
            }

            if (hasPriority && Queue.Count > 1)
            {
                Queue.Insert(1, item);
            }
            else
            {
                Queue.Add(item);
            }

            if (Info.InfiniteBuildLimit < 0)
            {
                return;
            }

            var queued = Queue.FindAll(i => i.Item == item.Item);

            if (queued.Count <= Info.InfiniteBuildLimit)
            {
                return;
            }

            queued[0].Infinite = true;

            for (var i = 1; i < queued.Count; i++)
            {
                // Refund what has been paid
                playerResources.GiveCash(queued[i].TotalCost - queued[i].RemainingCost);
                EndProduction(queued[i]);
            }
        }
		bool HandleMiddleClick(ProductionItem item, ProductionIcon icon, int handleCount)
		{
			if (item == null)
				return false;

			// Directly cancel, skipping "on-hold"
			Game.Sound.Play(TabClick);
			Game.Sound.PlayNotification(World.Map.Rules, World.LocalPlayer, "Speech", CurrentQueue.Info.CancelledAudio, World.LocalPlayer.Faction.InternalName);
			World.IssueOrder(Order.CancelProduction(CurrentQueue.Actor, icon.Name, handleCount));

			return true;
		}
		bool HandleRightClick(ProductionItem item, ProductionIcon icon, int handleCount)
		{
			if (item == null)
				return false;

			Game.Sound.Play(TabClick);

			if (item.Paused || item.Done || item.TotalCost == item.RemainingCost)
			{
				// Instant cancel of things we have not started yet and things that are finished
				Game.Sound.PlayNotification(World.Map.Rules, World.LocalPlayer, "Speech", CurrentQueue.Info.CancelledAudio, World.LocalPlayer.Faction.InternalName);
				World.IssueOrder(Order.CancelProduction(CurrentQueue.Actor, icon.Name, handleCount));
			}
			else
			{
				// Pause an existing item
				Game.Sound.PlayNotification(World.Map.Rules, World.LocalPlayer, "Speech", CurrentQueue.Info.OnHoldAudio, World.LocalPlayer.Faction.InternalName);
				World.IssueOrder(Order.PauseProduction(CurrentQueue.Actor, icon.Name, true));
			}

			return true;
		}
		bool HandleLeftClick(ProductionItem item, ProductionIcon icon, int handleCount)
		{
			if (PickUpCompletedBuildingIcon(icon, item))
			{
				Game.Sound.Play(TabClick);
				return true;
			}

			if (item != null && item.Paused)
			{
				// Resume a paused item
				Game.Sound.Play(TabClick);
				World.IssueOrder(Order.PauseProduction(CurrentQueue.Actor, icon.Name, false));
				return true;
			}

			if (CurrentQueue.BuildableItems().Any(a => a.Name == icon.Name))
			{
				// Queue a new item
				Game.Sound.Play(TabClick);
				Game.Sound.PlayNotification(World.Map.Rules, World.LocalPlayer, "Speech", CurrentQueue.Info.QueuedAudio, World.LocalPlayer.Faction.InternalName);
				World.IssueOrder(Order.StartProduction(CurrentQueue.Actor, icon.Name, handleCount));
				return true;
			}

			return false;
		}
		protected bool PickUpCompletedBuildingIcon(ProductionIcon icon, ProductionItem item)
		{
			var actor = World.Map.Rules.Actors[icon.Name];

			if (item != null && item.Done && actor.HasTraitInfo<BuildingInfo>())
			{
				World.OrderGenerator = new PlaceBuildingOrderGenerator(CurrentQueue, icon.Name);
				return true;
			}

			return false;
		}
Exemple #10
0
 public virtual int RemainingTimeActual(ProductionItem item)
 {
     return(item.RemainingTimeActual);
 }
Exemple #11
0
 public virtual bool IsProducing(ProductionItem item)
 {
     return(Queue.Count > 0 && Queue[0] == item);
 }
        static string GetOverlayForItem(ProductionItem item, int timestep)
        {
            if (item.Paused)
                return "ON HOLD";

            if (item.Done)
                return "READY";

            return WidgetUtils.FormatTime(item.RemainingTimeActual, timestep);
        }
Exemple #13
0
 protected override void BeginProduction(ProductionItem item, bool hasPriority)
 {
     // Ignore `hasPriority` as it's not relevant in parallel production context.
     base.BeginProduction(item, false);
 }
Exemple #14
0
 public override bool IsProducing(ProductionItem item)
 {
     return(Queue.Contains(item));
 }
Exemple #15
0
 protected void BeginProduction(ProductionItem item)
 {
     queue.Add(item);
 }
Exemple #16
0
 public void EndProduction(ProductionItem item)
 {
     Queue.Remove(item);
 }