Cindeck.Core.Simulator.GetSkillTriggerProbability C# (CSharp) Method

GetSkillTriggerProbability() private method

private GetSkillTriggerProbability ( OwnedIdol idol, IIdol center, IIdol guestCenter, Song song ) : double
idol OwnedIdol
center IIdol
guestCenter IIdol
song Song
return double
        private double GetSkillTriggerProbability(OwnedIdol idol, IIdol center, IIdol guestCenter, Song song)
        {
            if (idol == null || idol.Skill == null)
            {
                return 0;
            }
            var rate = idol.Skill.EstimateProbability(idol.SkillLevel);
            if (center != null && center.CenterEffect is CenterEffect.SkillTriggerProbabilityUp)
            {
                var e = center.CenterEffect as CenterEffect.SkillTriggerProbabilityUp;
                rate *= 1+(e.Targets.HasFlag(idol.Category) ? e.Rate : 0);
            }
            if (guestCenter != null && guestCenter.CenterEffect is CenterEffect.SkillTriggerProbabilityUp)
            {
                var e = guestCenter.CenterEffect as CenterEffect.SkillTriggerProbabilityUp;
                rate *= 1+(e.Targets.HasFlag(idol.Category) ? e.Rate : 0);
            }
            if (song != null && song.Type.HasFlag(idol.Category))
            {
                rate *= 1.3;
            }
            return Math.Min(rate, 1.0);
        }