private void AnswerToActionListener(ActionResponseEvent actionResponseEvent) { if (!actionResponseEvent.ActionEvent.Action.Definition.Name.Equals("RecruitmentAction")) { return; } if (actionResponseEvent.SelectedAnswer.Name.Equals("Cancel")) { return; } Habitat habitat = actionResponseEvent.ActionEvent.Action.Params["habitat"] as Habitat; Entity owner = actionResponseEvent.ActionEvent.Target; Army army = owner.GetComponent <Army>(); Fraction fraction = army.Fraction; int maxHire = (int)actionResponseEvent.ActionEvent.Action.Params["population"]; int amount = maxHire * 17; Resource resource = new Resource(new ResourceDefinition("Gold"), amount); RemoveResourceFromFractionEvent removeResource = new RemoveResourceFromFractionEvent(resource, fraction); _eventBus.Post(removeResource); if (!removeResource.Success && removeResource.CountOfDividend == 0) { return; } int hireAmount = removeResource.Success ? maxHire : removeResource.CountOfDividend; army.Creatures[0].Count += hireAmount; habitat.Current -= hireAmount; }
public void RemoveResourceListener(RemoveResourceFromFractionEvent removeResourceFromFraction) { if (removeResourceFromFraction.Fraction == null) { return; } Fraction fraction = removeResourceFromFraction.Fraction; Resource resource = removeResourceFromFraction.Resource; if (GetFractionAmountOfResource(fraction, resource.Definition) >= resource.Amount) // The faction can afford to buy MAX { removeResourceFromFraction.Success = true; } else if (removeResourceFromFraction.Dividend > 0)//The factions can afford to buy parts { int parts = fraction.Resources[resource.Definition.Name].Amount % removeResourceFromFraction.Dividend; int realCost = parts * removeResourceFromFraction.Dividend; Resource realResourceCost = new Resource(removeResourceFromFraction.Resource.Definition, realCost); ChangeResourceAmount(fraction, realResourceCost); removeResourceFromFraction.CountOfDividend = parts; } }