Inheritance: INotifyPropertyChanged
Example #1
0
		void RemoveBuildOrder(BuildOrder buildOrder)
		{
			if (this.CurrentBuildOrder != buildOrder)
			{
				buildOrder.PropertyChanged -= OnBuildOrderPropertyChanged;
				var ok = m_buildOrderQueue.Remove(buildOrder);
				Debug.Assert(ok);
			}
			else
			{
				StopCurrentJob();

				buildOrder.IsUnderWork = false;

				var next = FindNextBuildOrder(buildOrder);
				if (next == buildOrder)
					next = null;

				buildOrder.PropertyChanged -= OnBuildOrderPropertyChanged;
				m_buildOrderQueue.Remove(buildOrder);

				this.CurrentBuildOrder = next;

				if (next != null)
					next.IsUnderWork = true;
			}
		}
Example #2
0
		BuildOrder FindNextBuildOrder(BuildOrder previousBuildOrder)
		{
			if (m_buildOrderQueue.Count == 0)
				return null;

			int idx;

			if (previousBuildOrder != null)
				idx = m_buildOrderQueue.IndexOf(previousBuildOrder);
			else
				idx = -1;

			for (int i = 0; i < m_buildOrderQueue.Count; ++i)
			{
				idx = (idx + 1) % m_buildOrderQueue.Count;

				var buildOrder = m_buildOrderQueue[idx];

				if (buildOrder.IsSuspended)
					continue;

				return buildOrder;
			}

			return null;
		}
Example #3
0
		public void AddBuildOrder(BuildOrder buildOrder)
		{
			buildOrder.PropertyChanged += OnBuildOrderPropertyChanged;
			m_buildOrderQueue.Add(buildOrder);

			trace.TraceInformation("new order {0}", buildOrder);

			if (this.CurrentBuildOrder == null)
				MoveToNextBuildOrder();
		}
Example #4
0
		IJobGroup CreateJob(BuildOrder order)
		{
			var ok = FindMaterials(order);

			if (!ok)
			{
				Events.AddGameEvent(this.Workbench, "Failed to find materials for {0}.", this.CurrentBuildOrder.BuildableItemID);
				return null;
			}

			var job = new Jobs.JobGroups.BuildItemJob(this, this.Workbench, order.BuildableItem.Key, order.SourceItems);
			this.Environment.World.Jobs.Add(job);
			return job;
		}
Example #5
0
		void MoveToNextBuildOrder()
		{
			StopCurrentJob();

			var current = this.CurrentBuildOrder;

			if (current != null)
				current.IsUnderWork = false;

			var next = FindNextBuildOrder(current);

			this.CurrentBuildOrder = next;

			if (next != null)
				next.IsUnderWork = true;
		}
Example #6
0
		bool FindMaterials(BuildOrder order)
		{
			var buildableItem = order.BuildableItem;

			var numItems = buildableItem.FixedBuildMaterials.Count;

			int numFound = 0;

			for (int i = 0; i < buildableItem.FixedBuildMaterials.Count; ++i)
			{
				var bimi = buildableItem.FixedBuildMaterials[i];
				var biis = order.UserItemFilters[i];

				var filter = new AndItemFilter(bimi, biis);

				var ob = this.Environment.ItemTracker.GetReachableItemByDistance(this.Workbench.Location, filter, m_unreachables);

				if (ob == null)
					break;

				ob.ReservedBy = this;

				order.SourceItems[i] = ob;
				numFound++;
			}

			if (numFound < numItems)
			{
				trace.TraceInformation("Failed to find materials");
				for (int i = 0; i < numFound; ++i)
				{
					order.SourceItems[i].ReservedBy = null;
					order.SourceItems[i] = null;
				}
				return false;
			}
			else
			{
				return true;
			}
		}
Example #7
0
        void RemoveBuildOrder(BuildOrder buildOrder)
        {
            if (this.CurrentBuildOrder != buildOrder)
            {
                buildOrder.PropertyChanged -= OnBuildOrderPropertyChanged;
                var ok = m_buildOrderQueue.Remove(buildOrder);
                Debug.Assert(ok);
            }
            else
            {
                StopCurrentJob();

                buildOrder.IsUnderWork = false;

                var next = FindNextBuildOrder(buildOrder);
                if (next == buildOrder)
                    next = null;

                buildOrder.PropertyChanged -= OnBuildOrderPropertyChanged;
                m_buildOrderQueue.Remove(buildOrder);

                this.CurrentBuildOrder = next;

                if (next != null)
                    next.IsUnderWork = true;
            }
        }
Example #8
0
        void MoveToNextBuildOrder()
        {
            StopCurrentJob();

            var current = this.CurrentBuildOrder;

            if (current != null)
                current.IsUnderWork = false;

            var next = FindNextBuildOrder(current);

            this.CurrentBuildOrder = next;

            if (next != null)
                next.IsUnderWork = true;
        }
Example #9
0
        BuildOrder FindNextBuildOrder(BuildOrder previousBuildOrder)
        {
            if (m_buildOrderQueue.Count == 0)
                return null;

            int idx;

            if (previousBuildOrder != null)
                idx = m_buildOrderQueue.IndexOf(previousBuildOrder);
            else
                idx = -1;

            for (int i = 0; i < m_buildOrderQueue.Count; ++i)
            {
                idx = (idx + 1) % m_buildOrderQueue.Count;

                var buildOrder = m_buildOrderQueue[idx];

                if (buildOrder.IsSuspended)
                    continue;

                return buildOrder;
            }

            return null;
        }
Example #10
0
        bool FindMaterials(BuildOrder order)
        {
            var buildableItem = order.BuildableItem;

            var numItems = buildableItem.FixedBuildMaterials.Count;

            int numFound = 0;

            for (int i = 0; i < buildableItem.FixedBuildMaterials.Count; ++i)
            {
                var bimi = buildableItem.FixedBuildMaterials[i];
                var biis = order.UserItemFilters[i];

                var filter = new AndItemFilter(bimi, biis);

                var ob = this.Environment.ItemTracker.GetReachableItemByDistance(this.Workbench.Location, filter, m_unreachables);

                if (ob == null)
                    break;

                ob.ReservedBy = this;

                order.SourceItems[i] = ob;
                numFound++;
            }

            if (numFound < numItems)
            {
                trace.TraceInformation("Failed to find materials");
                for (int i = 0; i < numFound; ++i)
                {
                    order.SourceItems[i].ReservedBy = null;
                    order.SourceItems[i] = null;
                }
                return false;
            }
            else
            {
                return true;
            }
        }
Example #11
0
        IJobGroup CreateJob(BuildOrder order)
        {
            var ok = FindMaterials(order);

            if (!ok)
            {
                Events.AddGameEvent(this.Workbench, "Failed to find materials for {0}.", this.CurrentBuildOrder.BuildableItemID);
                return null;
            }

            var job = new Jobs.JobGroups.BuildItemJob(this, this.Workbench, order.BuildableItem.Key, order.SourceItems);
            this.Environment.World.Jobs.Add(job);
            return job;
        }
Example #12
0
        public void AddBuildOrder(BuildOrder buildOrder)
        {
            buildOrder.PropertyChanged += OnBuildOrderPropertyChanged;
            m_buildOrderQueue.Add(buildOrder);

            trace.TraceInformation("new order {0}", buildOrder);

            if (this.CurrentBuildOrder == null)
                MoveToNextBuildOrder();
        }