public void Use(Agent agent, Globe globe, IDice dice) { var highestBranchs = agent.Skills.OrderBy(x => x.Value) .Where(x => x.Value >= 1); var agentNameGenerator = globe.agentNameGenerator; if (highestBranchs.Any()) { var firstBranch = highestBranchs.First(); var agentDisciple = new Agent { Name = agentNameGenerator.Generate(Sex.Male, 1), Location = agent.Location, Realm = agent.Realm, Hp = 3 }; agentDisciple.Skills.Add(firstBranch.Key, firstBranch.Value / 2); globe.Agents.Add(agent); CacheHelper.AddAgentToCell(globe.AgentCells, agentDisciple.Location, agent); } else { globe.AgentCrisys++; } }
/// <summary> /// Выполняет перемещение агента в произвольный нас.пункт текущего государства, если это возможно. /// </summary> /// <param name="globe"> Мир. </param> /// <param name="dice"> Сервис случайностей. </param> /// <param name="agent"> Агент для перемещения. </param> /// <param name="currentLocality"> Текущая позиция агента. </param> /// <returns> Возвращает true в случае успешного перемещения. Иначе - false. </returns> /// <remarks> /// Агент перемещается, если найден подходящий нас. пункт. Иначе остаётся в текущем. /// </remarks> public static bool TransportAgentToRandomLocality(Globe globe, IDice dice, Agent agent, Locality currentLocality) { var targetLocality = RollTargetLocality(globe.Localities, dice, agent.Realm, currentLocality); if (targetLocality == null) { return(false); } if (currentLocality != null) { CacheHelper.RemoveAgentFromCell(globe.AgentCells, agent.Location, agent); } agent.Location = targetLocality.Cell; CacheHelper.AddAgentToCell(globe.AgentCells, agent.Location, agent); return(true); }