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;
        }
Esempio n. 2
0
        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;
            }
        }