private void HitOneRandomRoomWithPeople(byte probability) { var targetRoom = RoomsWithPeople.RandomOrDefault(); Model.SendRoomHit(targetRoom, probability, HitType.Random); }
public void DamageShip(byte damage) { ShipSubsystemStatus subSystemToDamage; //Выбираем какую подсистему поразить if (ShipIsUnderFrontLineProtection) //Если "передние" системы попрежнему держатся, то выбираем из них { subSystemToDamage = _subsystems.Where(a => a.IsFirstLineOfDefence == true).Random(); } else //Ну а если нет - то выбираем из любых { subSystemToDamage = _subsystems.Random(); } byte reducedDamage = damage; if (!subSystemToDamage.IsFirstLineOfDefence) //Если мы мочим "прикрытые" системы, то damage равен самой пробитой системе из передних { reducedDamage = Math.Min(damage, _subsystems.Where(a => a.IsFirstLineOfDefence == true).Select(a => (byte)a.ResultSeverity).Max()); } byte finalDamage = Math.Max(reducedDamage, (byte)subSystemToDamage.Severity); subSystemToDamage.Severity = (RanmaRepairSeverity)finalDamage; SendSeverityToRanmaPlate(subSystemToDamage); var targetRoom = RoomsWithPeople.RandomOrDefault(); if (targetRoom != 0) { byte hitProbability = 0; if (damage == 1) { hitProbability = 10; } if (damage == 2) { hitProbability = 20; } if (damage == 3) { hitProbability = 50; } Model.SendRoomHit(targetRoom, hitProbability, HitType.Random); } var shipPeople = PeopleOnThisShip.ToArray(); if (shipPeople.Any()) { foreach (var armletInfo in shipPeople) { Model.SendShowMessage(armletInfo, "Ощутимо тряхнуло! Кажется в корабль влетела ракета!"); } } SaveToSimulator(); }