Exemplo n.º 1
0
        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;
        }
Exemplo n.º 2
0
 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;
        }