public void Notify_MeleeAttackOn(Thing Target) { if (Target.Position != actor.Position) { jitterer.AddOffset(0.5f, (Target.Position - actor.Position).AngleFlat); } else { if (!(Target.DrawPos != actor.DrawPos)) { return; } jitterer.AddOffset(0.25f, (Target.DrawPos - actor.DrawPos).AngleFlat()); } }
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; }
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; }