public IEnumerator ExecuteTurn() { //AI behavior: var currentLand = CurrentLand.GetComponent <LandScript>(); switch (AgentProfession) { case Profession.Unemployed: if (currentLand.LandOwner == gameObject) { //do something with his land } else { //search for empty land foreach (var landObject in world.LandObjects) { var land = landObject.GetComponent <LandScript>(); if (land.LandOwner == null) { MoveTo(landObject); } } } break; case Profession.Farmer: if (currentLand.landType == LandScript.LandType.FarmLand) { animator.SetTrigger("FarmerWorking"); //harvest action int crops = currentLand.CropsPlanted; if (crops > 0) { int rng = Random.Range(-2, 1); int yield = crops * 3 + rng; Wealth += yield; SayMessage("Harvest +" + yield); world.AddFood(yield); currentLand.CropsPlanted = 0; yield return(new WaitForSeconds(1)); } //start farming action if (Wealth >= 1) { crops = Wealth >= 3 ? 2 : (Wealth >= 1 ? 1 : 0); Wealth -= crops; currentLand.CropsPlanted = crops; SayMessage("Farming Investment -" + crops); yield return(new WaitForSeconds(1)); } animator.SetTrigger("FarmerIdle"); } break; case Profession.Artisan: animator.SetTrigger("ArtisanWorking"); if (true) //TODO: check previous investment { int yield = Random.Range(1, 3); Wealth += yield; SayMessage("production +" + yield); yield return(new WaitForSeconds(1)); } if (Wealth >= 1) { Wealth -= 1; SayMessage("Crafting Investment -1"); yield return(new WaitForSeconds(1)); } animator.SetTrigger("ArtisanIdle"); break; case Profession.Merchant: animator.SetTrigger("MerchantWorking"); if (true) //TODO: check previous investment { int yield = Random.Range(1, 3); Wealth += yield; SayMessage("margin +" + yield); yield return(new WaitForSeconds(1)); } if (Wealth >= 1) { Wealth -= 1; SayMessage("Trade Investment -1"); yield return(new WaitForSeconds(1)); } animator.SetTrigger("MerchantIdle"); break; case Profession.Knight: animator.SetTrigger("KnightWorking"); animator.SetTrigger("KnightIdle"); break; default: break; } }