protected override IEnumerable <Toil> MakeNewToils() { JitterHandler jitterer = fieldJitterer.GetValue(pawn.Drawer) as JitterHandler; yield return(Toils_Goto.GotoCell(TargetIndex.B, PathEndMode.OnCell)); Toil practice = Toils_General.Wait(2000); practice.socialMode = RandomSocialMode.Normal; practice.tickAction = () => { if (pawn.IsHashIntervalTick(200)) { pawn.skills.Learn(SkillDefOf.Melee, 5f); if (jitterer != null) { jitterer.AddOffset(Rand.Range(0.25f, 0.75f), pawn.Rotation.AsAngle); if (Rand.Value > 0.7f) { practice.handlingFacing = true; pawn.Rotation = Rot4.Random; } } } }; yield return(practice); yield break; }
public ActorDrawTracker(Actor actor) { this.actor = actor; tweener = new ActorTweener(actor); jitterer = new JitterHandler(); leaner = new ActorLeaner(actor); renderer = new ActorRenderer(actor); ui = new ActorUIOverlay(actor); }
ICachedObjectConfigurationManager <T> ICachedObjectConfigurationManager_WithRefreshInterval <T> .WithJitter(double jitterPercentage) { if (jitterPercentage < 0 || jitterPercentage >= 100) { throw new ArgumentOutOfRangeException(nameof(jitterPercentage)); } if (!_refreshInterval.HasValue) { throw new InvalidOperationException($"You can only use {nameof(ICachedObjectConfigurationManager_WithRefreshInterval<T>.WithJitter)} after first using {nameof(WithRefreshInterval)}"); } var jitterHandler = new JitterHandler(_refreshInterval.Value, jitterPercentage); SetRefreshIntervalFactory(() => jitterHandler.GetNext()); return(this); }
protected override IEnumerable <Toil> MakeNewToils() { if (fieldJitterer == null) { fieldJitterer = typeof(Pawn_DrawTracker).GetFields(BindingFlags.NonPublic | BindingFlags.Instance).First(x => x.Name == "jitterer"); } JitterHandler jitterer = fieldJitterer.GetValue(pawn.Drawer) as JitterHandler; yield return(Toils_Goto.GotoCell(TargetIndex.B, PathEndMode.OnCell)); Toil practice = Toils_General.Wait(2000); practice.socialMode = RandomSocialMode.Normal; practice.FailOn(() => this.TargetB.Cell.IsForbidden(this.pawn)); practice.tickAction = () => { if (pawn.IsHashIntervalTick(200)) { pawn.skills.Learn(SkillDefOf.Melee, 5f); if (jitterer != null) { jitterer.AddOffset(Rand.Range(0.25f, 0.75f), pawn.Rotation.AsAngle); if (Rand.Value > 0.7f) { practice.handlingFacing = true; pawn.Rotation = Rot4.Random; } } } }; yield return(practice); yield break; }