Ejemplo n.º 1
0
        static ItemObject PerformBuildItem(LivingObject builder, BuildableItem buildableItem, IEnumerable<ObjectID> sourceObjects)
        {
            if (!VerifyBuildItem(builder, buildableItem, sourceObjects))
                return null;

            var obs = sourceObjects.Select(oid => builder.World.FindObject<ItemObject>(oid));

            MaterialID materialID;

            if (buildableItem.MaterialID.HasValue)
                materialID = buildableItem.MaterialID.Value;
            else
                materialID = obs.First().MaterialID;

            var skillLevel = builder.GetSkillLevel(buildableItem.SkillID);

            var itemBuilder = new ItemObjectBuilder(buildableItem.ItemID, materialID)
            {
                Quality = skillLevel,
            };
            var item = itemBuilder.Create(builder.World);

            foreach (var ob in obs)
                ob.Destruct();

            if (item.MoveTo(builder.Environment, builder.Location) == false)
                throw new Exception();

            return item;
        }
Ejemplo n.º 2
0
    public void generateItem()
    {
        List <BuildableItem> posibleItems = new List <BuildableItem>();

        if (woodCount < this.maxWoodCount)
        {
            posibleItems.Add(this.buildableItems[0]);
        }

        if (stonesCount < this.maxStonesCount)
        {
            posibleItems.Add(this.buildableItems[1]);
        }

        if (coralsCount < this.maxCoralsCount)
        {
            posibleItems.Add(this.buildableItems[2]);
        }

        BuildableItem buildableItem = posibleItems[Random.Range(0, posibleItems.Count)];

        if (buildableItem.material == ItemMaterial.Wood)
        {
            woodCount++;
        }
        else if (buildableItem.material == ItemMaterial.Stone)
        {
            stonesCount++;
        }
        else if (buildableItem.material == ItemMaterial.Coral)
        {
            coralsCount++;
        }

        int stage = buildableItem.stage;

        if (stage == 1)
        {
            if (Random.Range(1, 6) == 1)
            {
                stage = 2;
            }
        }
        else
        {
            stage = Random.Range(2, 3);
        }

        float randomPositionX = Random.Range(this.minX.position.x, this.maxX.position.x);
        float randomPositionY = Random.Range(this.stagesY[stage - 1].position.y, this.stagesY[stage].position.y);

        Vector2 position = new Vector2(randomPositionX, randomPositionY);

        GameObject newItem = Instantiate(collectablePrefab, position, Quaternion.identity) as GameObject;

        newItem.GetComponent <CollectableItem>().buildableItem = buildableItem;
    }
Ejemplo n.º 3
0
		public BuildOrder(BuildableItem buildableItem, IItemFilter[] userFilters)
		{
			this.BuildableItem = buildableItem;
			this.UserItemFilters = userFilters;

			if (this.BuildableItem.MaterialID.HasValue)
				this.Name = String.Format("{0} {1}", this.BuildableItem.MaterialID, this.BuildableItem.ItemInfo.Name);
			else
				this.Name = this.BuildableItem.ItemInfo.Name;

			this.SourceItems = new ItemObject[this.BuildableItem.FixedBuildMaterials.Count];
		}
Ejemplo n.º 4
0
    public void Build(GameObject t, GameObject item)
    {
        Tile          tile  = t.GetComponent <Tile>();
        BuildableItem build = item.GetComponent <BuildableItem>();

        resources.RemoveResource(build.requiredResource, build.resourceCost);
        Instantiate(item, t.GetComponent <Renderer>().bounds.center, Quaternion.identity);
        if (!build.passable)
        {
            t.GetComponent <Node>().SetPassable(false);
        }
    }
Ejemplo n.º 5
0
    public void HoldBuilding(BuildableItem item, int slotNum)
    {
        mainCam           = Camera.main;
        onHoldItem        = item;
        onHoldItemSlotNum = slotNum;

        // create building
        this.building = Instantiate(item.buildingModel, Vector2.zero, Quaternion.identity) as GameObject;
        buildingTrans = building.transform;

        // update toggle
        isBuildingOnHold = true;
    }
Ejemplo n.º 6
0
        static bool VerifyBuildItem(LivingObject builder, BuildableItem buildableItem, IEnumerable<ObjectID> sourceObjects)
        {
            return true;
            /*
            if (!Contains(builder.Location))
                return false;

            var srcArray = sourceObjects.Select(oid => this.World.FindObject<ItemObject>(oid)).ToArray();

            if (srcArray.Any(o => o == null || !this.Contains(o.Location)))
                return false;

            return buildableItem.MatchItems(srcArray);
             */
        }
Ejemplo n.º 7
0
    public bool CanBuild(GameObject item)
    {
        BuildableItem build = item.GetComponent <BuildableItem>();
        int           resourcesNeededForTags = manager.GetNumberOfResourcesRequiredForTaggedBuildingTiles(build.requiredResource);

        if ((resources.GetResourceQuantity(build.requiredResource) - resourcesNeededForTags) >= build.resourceCost)
        {
            return(true);
        }
        else
        {
            Debug.Log("Not enough resources! " + "You need " + build.resourceCost + " " + build.requiredResource.ToString() + ", but you only have " + resources.GetResourceQuantity(build.requiredResource) + "!");
            return(false);
        }
    }
Ejemplo n.º 8
0
 public void removeItem(BuildableItem item)
 {
     if (item.material == ItemMaterial.Wood)
     {
         woodCount--;
     }
     else if (item.material == ItemMaterial.Stone)
     {
         stonesCount--;
     }
     else if (item.material == ItemMaterial.Coral)
     {
         coralsCount--;
     }
 }
Ejemplo n.º 9
0
        static bool VerifyBuildItem(LivingObject builder, BuildableItem buildableItem, IEnumerable <ObjectID> sourceObjects)
        {
            return(true);

            /*
             * if (!Contains(builder.Location))
             *      return false;
             *
             * var srcArray = sourceObjects.Select(oid => this.World.FindObject<ItemObject>(oid)).ToArray();
             *
             * if (srcArray.Any(o => o == null || !this.Contains(o.Location)))
             *      return false;
             *
             * return buildableItem.MatchItems(srcArray);
             */
        }
Ejemplo n.º 10
0
    private void PlaceBuilding()
    {
        // 1. place the building
        // 2. unhold the building
        // 3. remove item from inventory
        // 4.

        onHoldItem.OnBuild(buildingTrans.position);

        Destroy(building);

        isBuildingOnHold = false;

        // remove from inventory
        InventoryPanel.instance.inventory.RemoveItemAtSlot(onHoldItemSlotNum);
        onHoldItemSlotNum = -1;
        onHoldItem        = null;
    }
Ejemplo n.º 11
0
    public int GetNumberOfResourcesRequiredForTaggedBuildingTiles(Resource resource)
    {
        int count = 0;
        List <GameObject> taggedTiles = GetTaggedBuildingTiles();

        foreach (GameObject taggedTile in taggedTiles)
        {
            GameObject itemToBuild = taggedTile.GetComponent <Tile>().toBuild;
            if (itemToBuild != null)
            {
                BuildableItem bI = itemToBuild.GetComponent <BuildableItem>();
                if (bI.requiredResource == resource)
                {
                    count += bI.resourceCost;
                }
            }
        }
        return(count);
    }
Ejemplo n.º 12
0
        static ItemObject PerformBuildItem(LivingObject builder, BuildableItem buildableItem, IEnumerable <ObjectID> sourceObjects)
        {
            if (!VerifyBuildItem(builder, buildableItem, sourceObjects))
            {
                return(null);
            }

            var obs = sourceObjects.Select(oid => builder.World.FindObject <ItemObject>(oid));

            MaterialID materialID;

            if (buildableItem.MaterialID.HasValue)
            {
                materialID = buildableItem.MaterialID.Value;
            }
            else
            {
                materialID = obs.First().MaterialID;
            }

            var skillLevel = builder.GetSkillLevel(buildableItem.SkillID);

            var itemBuilder = new ItemObjectBuilder(buildableItem.ItemID, materialID)
            {
                Quality = skillLevel,
            };
            var item = itemBuilder.Create(builder.World);

            foreach (var ob in obs)
            {
                ob.Destruct();
            }

            item.MoveToMustSucceed(builder.Environment, builder.Location);

            return(item);
        }
Ejemplo n.º 13
0
    public void OnPointerClick(PointerEventData eventData)
    {
        // left click
        if (eventData.button == PointerEventData.InputButton.Left)
        {
            // slot not empty
            if (ContainsItem())
            {
                // swap dragged item if is dragging //
                if (inventory.isDraggingItem)
                {
                    SwapDraggedItem();
                    return;
                }

                // item selection
                if (inventory.hasSelectedItem)
                {
                    inventory.UnselectItem();
                }
                else
                {
                    inventory.SelectItem(slotNum);
                }
            }

            // slot empty
            else
            {
                // place dragged item if dragging
                if (inventory.isDraggingItem)
                {
                    inventory.items[slotNum] = inventory.draggedItem;
                    inventory.HideDraggedItem();

                    return;
                }

                // unselect item if selected
                if (inventory.hasSelectedItem)
                {
                    inventory.UnselectItem();
                }
            }
        }

        // ********
        // TODO: combine with above.   contains item/ not contain
        // ********

        // double click to use / equip
        if (eventData.clickCount == 2)
        {
            Item item = inventory.items[slotNum];

            if (item is EquipableItem)
            {
                if (!isEquipped)
                {
                    inventory.EquipItem(slotNum);
                }
                else
                {
                    inventory.UnEquipItem(slotNum);
                }

                isEquipped           = !isEquipped;
                equippedMark.enabled = isEquipped;
            }

            // TODO: right click to cancel on hold building
            else if (item is BuildableItem)
            {
                BuildableItem building = (BuildableItem)item;

                BuildingManager buildManager = BuildingManager.instance;
                if (buildManager.isBuildingOnHold)
                {
                    // cancel previous holding
                    // hold the new building
                }
                else
                {
                    buildManager.HoldBuilding(building, slotNum);
                }
            }
        }

        /* if same item -> unselect it
         * if (inventory.selectedItemNum == slotNum)
         * inventory.UnselectItem();
         *
         * if different -> unselect old -> select new
         * else
         * {
         * inventory.UnselectItem();
         * inventory.SelectItem(slotNum);
         * }
         */
        // not selected item
        //else
        //    inventory.SelectItem(slotNum);
    }
Ejemplo n.º 14
0
 public void addCollectable(BuildableItem item)
 {
     currentTotalEndurance += item.endurance;
     updateCastle();
 }
Ejemplo n.º 15
0
	public void BuildItem (BuildableItem Item)
	{
		if (CheckRequirements(Item))
		{
			if (ItemBuilding == null || string.IsNullOrEmpty(ItemBuilding.Name))
			{
				ItemBuilding = Item;
				bFactoryActive = true;
				Debug.Log("Building " + ItemBuilding.Name + "..." );
			}
			else if (Item != null && !string.IsNullOrEmpty(Item.Name))
			{
				Debug.Log("Adding Item To Queue");
				BuildQueue.Add(Item);
				bFactoryActive = true;
			}

			CheckResources ();
		}
		else
		{
			//Requirements failed
		}
	}
Ejemplo n.º 16
0
        /// <summary>
        /// Invokes the command.
        /// </summary>
        public override void Invoke()
        {
            OnInvoking();

            string cityPickerTitle = ClientResources.GetString("sabotage_cityPickerTitle");

            SelectCity(cityPickerTitle);
            if (this.City == null)
            {
                OnCanceled();
                return;
            }
            BuildableItem   improvement = this.City.NextImprovement;
            EspionageResult result      = this.DiplomaticTie.Sabotage(this.City);
            string          text        = string.Empty;

            switch (result)
            {
            case EspionageResult.Failure:
                break;

            case EspionageResult.ImmuneToEspionage:
                text = ClientResources.GetString("sabotage_immune");
                text = string.Format(
                    CultureInfo.CurrentCulture,
                    text,
                    this.DiplomaticTie.ForeignCountry.Civilization.Adjective);
                break;

            case EspionageResult.SpyCaught:
                text = ClientResources.GetString("sabotage_spycaught");
                text = string.Format(
                    CultureInfo.CurrentCulture,
                    text,
                    this.City.Name,
                    this.DiplomaticTie.ForeignCountry.Government.LeaderTitle,
                    this.DiplomaticTie.ForeignCountry.LeaderName);
                break;

            case EspionageResult.Success:
                text = ClientResources.GetString("sabotage_success");
                text = string.Format(
                    CultureInfo.CurrentCulture,
                    text,
                    this.City.Name,
                    improvement.Name);
                break;

            case EspionageResult.SuccessWithCapturedSpy:
                text = ClientResources.GetString("sabotage_success_spycaught");
                text = string.Format(
                    CultureInfo.CurrentCulture,
                    text,
                    this.City.Name,
                    improvement.Name,
                    this.DiplomaticTie.ForeignCountry.Government.LeaderTitle,
                    this.DiplomaticTie.ForeignCountry.LeaderName);
                break;
            }
            IGameWindow gw = ClientApplication.Instance.GameWindow;

            gw.ShowMessageBox(text, ClientResources.GetString(StringKey.GameTitle));
            OnInvoked();
        }
Ejemplo n.º 17
0
	private bool CheckRequirements (BuildableItem Item)
	{
		int RequiredCounter = Item.RequiredStructures.Count;

		for (int i = 0; i < Item.RequiredStructures.Count; i++)
		{
			for (int j = 0; j < Structures.Count; j++)
			{
				if (Item.RequiredStructures[i] == Structures[j].Name)
				{
					RequiredCounter--;
				}
			}
		}

		if (RequiredCounter == 0)
		{
			return true;
		}
		else
		{
			return false;
		}
	}
Ejemplo n.º 18
0
	private void CompleteItem ()
	{
		//TODO: Add Logic That Handles Specific Cases of Construction

		Debug.Log (ItemBuilding.Name + " Complete!");
		ItemBuilding = null;
		bIsBuilding = false;

		if (BuildQueue.Count > 0)
		{
			using (BuildableItem tempItem = BuildQueue[0])
			{
				Debug.Log (tempItem.Name);
				BuildQueue.RemoveAt(0);
				BuildItem (tempItem);
			}
		}
		else
		{
			bFactoryActive = false;
		}
	}
Ejemplo n.º 19
0
 /// <summary>
 /// Initializes a new instance of the <c>ImprovementBuiltEventArgs</c> class.
 /// </summary>
 /// <param name="improvement"></param>
 /// <param name="city"></param>
 /// <param name="recommendedNextImprovement"></param>
 public ImprovementBuiltEventArgs(BuildableItem improvement, City city, BuildableItem recommendedNextImprovement)
 {
     this.improvement            = improvement;
     this.recommendedImprovement = recommendedNextImprovement;
     this.city = city;
 }
Ejemplo n.º 20
0
        public BuildOrder(BuildableItem buildableItem, IItemFilter[] userFilters)
        {
            this.BuildableItem = buildableItem;
            this.UserItemFilters = userFilters;

            if (this.BuildableItem.MaterialID.HasValue)
                this.Name = String.Format("{0} {1}", this.BuildableItem.MaterialID, this.BuildableItem.ItemInfo.Name);
            else
                this.Name = this.BuildableItem.ItemInfo.Name;

            this.SourceItems = new ItemObject[this.BuildableItem.FixedBuildMaterials.Count];
        }
Ejemplo n.º 21
0
    void Awake()
    {
        instance = this;

        items = new List <Item>();

        // init icon spritesheet;
        icons           = Resources.LoadAll <Sprite>("itemicon");
        iconSpriteSheet = new Dictionary <string, Sprite>();

        // store item icon in dictionary
        for (int i = 0; i < icons.Length; i++)
        {
            iconSpriteSheet.Add(icons[i].name, icons[i]);
        }

        // init item objects
        itemObjects    = Resources.LoadAll <GameObject>("Prefab/Items");
        itemObjectsDic = new Dictionary <string, GameObject>();

        // store item icon in dictionary
        for (int i = 0; i < itemObjects.Length; i++)
        {
            itemObjectsDic.Add(itemObjects[i].name, itemObjects[i]);
        }

        // init weapon spritesheet
        // weaponSprites = Resources.LoadAll<Sprite>("itemSprite");
        // weaponSpriteSheet = new Dictionary<string, Sprite>();

        // store item sprite in dictionary
        //for (int i = 0; i < weaponSprites.Length; i++)
        //    weaponSpriteSheet.Add(weaponSprites[i].name, weaponSprites[i]);

        // items
        int itemIDCounter = -1;

        // ID: 0
        ConsumableItem rawMeat = new ConsumableItem("Meat");

        rawMeat.itemID  = ++itemIDCounter;
        rawMeat.itemDes = "Raw Meat";
        //rawMeat.itemDes = "羊腿把子";

        rawMeat.itemAmount = 1;
        //refreshingWater.itemEffects.Add(new OnUseRecoverSP(4));
        //refreshingWater.InitEffect();
        items.Add(rawMeat);

        // ID: 1
        ConsumableItem logs = new ConsumableItem("Logs");

        //logs.itemName = "Logs";
        logs.itemID  = ++itemIDCounter;
        logs.itemDes = "Logs";
        //logs.itemDes = "木材";

        logs.itemAmount = 1;
        //refreshingWater.itemEffects.Add(new OnUseRecoverSP(4));
        //refreshingWater.InitEffect();
        items.Add(logs);

        // ID: 2
        ConsumableItem flint = new ConsumableItem("Flint");

        //flint.itemName = "Flint";
        flint.itemID  = ++itemIDCounter;
        flint.itemDes = "Flint";
        //logs.itemDes = "木材";

        flint.itemAmount = 1;
        //refreshingWater.itemEffects.Add(new OnUseRecoverSP(4));
        //refreshingWater.InitEffect();
        items.Add(flint);

        // ID: 3
        EquipableItem Torch = new EquipableItem("Torch", true);

        Torch.igniteToItem_ID = 4;
        //Torch.itemName = "Torch";
        Torch.itemID    = ++itemIDCounter;
        Torch.itemDes   = "Torch";
        Torch.equipType = EquipableItem.EquipType.Weapon_LeftHand;

        //Torch.workTimeNeeded = 200; this doesnt work  ** remember always set for upgraded item
        //logs.itemDes = "木材";

        Torch.itemAmount = 1;
        //refreshingWater.itemEffects.Add(new OnUseRecoverSP(4));
        //refreshingWater.InitEffect();
        items.Add(Torch);

        // ID:4
        EquipableItem Torch_Ignited = new EquipableItem("Ignited Torch");

        //Torch_Ignited.itemName = "Ignited Torch";
        Torch_Ignited.itemID     = ++itemIDCounter;
        Torch_Ignited.itemDes    = "Ignited Torch";
        Torch_Ignited.equipType  = EquipableItem.EquipType.Weapon_LeftHand;
        Torch_Ignited.itemAmount = 1;

        //refreshingWater.itemEffects.Add(new OnUseRecoverSP(4));
        //refreshingWater.InitEffect();
        Torch_Ignited.workTimeNeeded = 90;

        items.Add(Torch_Ignited);

        // ID:5
        BuildableItem Campfire = new BuildableItem("Campfire");

        Campfire.itemID     = ++itemIDCounter;
        Campfire.itemAmount = 1;

        items.Add(Campfire);

        // keep this at the bottom
        ItemAmout = itemIDCounter;

        /*
         * EquipableItem axe = new EquipableItem();
         * axe.itemName = "Axe";
         * axe.itemID = ++itemIDCounter;
         * axe.itemDes = "mighty axe";
         * axe.itemAmount = 1;
         * axe.equipType = EquipableItem.EquipType.Weapon;
         * axe.itemEffects.Add(new OnEquipAddDmg(2));
         * axe.InitEffect();
         * axe.LoadIcon();
         * axe.LoadWeaponSprite();
         * items.Add(axe);
         *
         * EquipableItem alchemistPotion = new EquipableItem();
         * alchemistPotion.itemName = "Alchemist Potion";
         * alchemistPotion.itemID = ++itemIDCounter;
         * alchemistPotion.itemDes = "Alchemist Potion";
         * alchemistPotion.itemAmount = 1;
         * alchemistPotion.equipType = EquipableItem.EquipType.Weapon;
         * alchemistPotion.itemEffects.Add(new OnEquipAddDmg(2));
         * alchemistPotion.InitEffect();
         * alchemistPotion.LoadIcon();
         * alchemistPotion.LoadWeaponSprite();
         * items.Add(alchemistPotion);
         *
         * EquipableItem Khopesh = new EquipableItem();
         * Khopesh.itemName = "Khopesh";
         * Khopesh.itemID = ++itemIDCounter;
         * Khopesh.itemDes = "Khopesh";
         * Khopesh.itemAmount = 1;
         * Khopesh.equipType = EquipableItem.EquipType.Weapon;
         * Khopesh.itemEffects.Add(new OnEquipAddDmg(2));
         * Khopesh.InitEffect();
         * Khopesh.LoadIcon();
         * Khopesh.LoadWeaponSprite();
         * items.Add(Khopesh);
         *
         * EquipableItem Rapier = new EquipableItem();
         * Rapier.itemName = "Rapier";
         * Rapier.itemID = ++itemIDCounter;
         * Rapier.itemDes = "Rapier";
         * Rapier.itemAmount = 1;
         * Rapier.equipType = EquipableItem.EquipType.Weapon;
         * Rapier.itemEffects.Add(new OnEquipAddDmg(2));
         * Rapier.InitEffect();
         * Rapier.LoadIcon();
         * Rapier.LoadWeaponSprite();
         * items.Add(Rapier);
         *
         * EquipableItem Sword = new EquipableItem();
         * Sword.itemName = "Sword";
         * Sword.itemID = ++itemIDCounter;
         * Sword.itemDes = "Sword";
         * Sword.itemAmount = 1;
         * Sword.equipType = EquipableItem.EquipType.Weapon;
         * Sword.itemEffects.Add(new OnEquipAddDmg(2));
         * Sword.InitEffect();
         * Sword.LoadIcon();
         * Sword.LoadWeaponSprite();
         * items.Add(Sword);
         *
         * EquipableItem WizardStaff = new EquipableItem();
         * WizardStaff.itemName = "Wizard Staff";
         * WizardStaff.itemID = ++itemIDCounter;
         * WizardStaff.itemDes = "Wizard Staff";
         * WizardStaff.itemAmount = 1;
         * WizardStaff.equipType = EquipableItem.EquipType.Weapon;
         * WizardStaff.itemEffects.Add(new OnEquipAddDmg(2));
         * WizardStaff.InitEffect();
         * WizardStaff.LoadIcon();
         * WizardStaff.LoadWeaponSprite();
         * items.Add(WizardStaff);
         *
         * EquipableItem Gun = new EquipableItem();
         * Gun.itemName = "Gun";
         * Gun.itemID = ++itemIDCounter;
         * Gun.itemDes = "Gun";
         * Gun.itemAmount = 1;
         * Gun.equipType = EquipableItem.EquipType.Weapon;
         * Gun.itemEffects.Add(new OnEquipAddDmg(2));
         * Gun.InitEffect();
         * Gun.LoadIcon();
         * Gun.LoadWeaponSprite();
         * items.Add(Gun);
         *
         * ConsumableItem rawTurkey = new ConsumableItem();
         * rawTurkey.itemName = "Raw Turkey";
         * rawTurkey.itemID = ++itemIDCounter;
         * rawTurkey.itemDes = "Surprisingly nourishing, this item heals the player character for 2 points.";
         * rawTurkey.itemAmount = 1;
         * rawTurkey.itemEffects.Add(new OnUseHeal(2));
         * rawTurkey.InitEffect();
         * rawTurkey.LoadIcon();
         * items.Add(rawTurkey);
         *
         */
    }
Ejemplo n.º 22
0
        /// <summary>
        /// Event handler for the <i>ImprovementBuilt</i> event of a city using this strategy.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected override void OnImprovementBuilt(object sender, ImprovementBuiltEventArgs e)
        {
            AICity city = e.City as AICity;

            BuildableItem nextImprovement = null;
            GameRoot      root            = GameRoot.Instance;

            //what to do with what we just built?
            if (e.Improvement.GetType() == typeof(AIUnit))
            {
                AIUnit unit = e.Improvement as AIUnit;

                switch (city.PrimaryNeed)
                {
                case AICityNeed.Commerce:

                    break;

                case AICityNeed.Culture:

                    break;

                case AICityNeed.Food:

                    break;

                case AICityNeed.UnitDefense:
                    unit.Fortified = true;
                    break;
                }
            }
            else if (e.Improvement.GetType() == typeof(AISettler))
            {
            }
            else if (e.Improvement.GetType() == typeof(AIWorker))
            {
                AIWorker worker = e.Improvement as AIWorker;
                worker.ParentCity = e.City;
                worker.Automated  = true;
            }


            //next item to build
            switch (city.PrimaryNeed)
            {
            case AICityNeed.Commerce:
                if (!city.HasWorkerInFields())
                {
                    nextImprovement = UnitFactory.CreateWorker(city);
                }
                else
                {
                    nextImprovement =
                        city.GetBuildableItemForNeed(city.PrimaryNeed,
                                                     typeof(Improvement));
                }
                break;

            case AICityNeed.Culture:
                nextImprovement =
                    city.GetBuildableItemForNeed(city.PrimaryNeed, typeof(Improvement));
                break;

            case AICityNeed.Food:
                if (!city.HasWorkerInFields())
                {
                    nextImprovement = UnitFactory.CreateWorker(city);
                }
                else
                {
                    nextImprovement =
                        city.GetBuildableItemForNeed(city.PrimaryNeed,
                                                     typeof(Improvement));
                }
                break;

            case AICityNeed.UnitDefense:
                nextImprovement =
                    city.GetBuildableItemForNeed(city.PrimaryNeed,
                                                 typeof(Unit));
                break;
            }

            city.NextImprovement = nextImprovement;
        }
 public BuildOrderEditable(BuildableItem buildableItem)
 {
     this.BuildableItem = buildableItem;
 }