static Buki SelectUnPreferredBuki(Slot slot, Sinma.Base sinma) { var candidates = slot.Bukis .Where(buki => !sinma.DoesPrefer(buki)) .ToArray(); if (!candidates.Any()) { candidates = slot.Bukis; } var index = Environment.RandomRange(0, candidates.Length); return(candidates[index]); }
public List <Record> Act(int id, Sinma.Base sinma) { if (sinma != null && sinma.SinmaState == SinmaState.NoSign) { _remainTurnToCompletePrepare = Constant.TurnToCompletePrepare; } if (sinma != null && sinma.SinmaState == SinmaState.Signed) { _remainTurnToCompletePrepare--; } var sinmaCountDown = sinma != null && sinma.SinmaState == SinmaState.Signed ? _remainTurnToCompletePrepare : null; var records = new List <Record>(); foreach (var member in Members) { var buki = member.Act(sinmaCountDown, sinma); if (buki == null) { continue; } var record = new Record( id: id, actor: member.Name, sinmaState: sinma?.SinmaState ?? SinmaState.NoSign, isStrong: Environment.DoesJobStrongWith(member.Job, buki), didSinmaPrefer: sinma?.DoesPrefer(buki) ?? false ); sinma?.Watch(buki); records.Add(record); } _records.AddRange(records); return(records); }