예제 #1
0
 public PickUpRune(IAbilityUnit unit, IAbilityRune rune)
     : base(OrderType.TakeRune, unit, "PickUp rune")
 {
     this.unit = unit;
     this.rune = rune;
     rune.RuneDisposed.Subscribe(() => { this.runeDisposed = true; });
     this.ExecuteOnce       = false;
     this.PrintInLog        = true;
     this.ShouldExecuteFast = true;
 }
예제 #2
0
        public override float ExecuteFast()
        {
            if (this.LastDistanceToRune < 400)
            {
                if (this.RunePosition.HasRune && !this.RunePosition.CurrentRune.Disposed)
                {
                    this.hadRune = true;
                    this.rune    = this.RunePosition.CurrentRune;
                    this.Unit.SourceUnit.PickUpRune(this.RunePosition.CurrentRune.SourceRune);
                    this.Unit.SourceUnit.PickUpRune(this.RunePosition.CurrentRune.SourceRune);
                    this.Unit.SourceUnit.PickUpRune(this.RunePosition.CurrentRune.SourceRune);
                    return(100);
                }
            }

            return(0);
        }
예제 #3
0
        public override float Execute()
        {
            if (this.LastDistanceToRune < 400)
            {
                if (this.RunePosition.HasRune)
                {
                    this.hadRune = true;
                    this.rune    = this.RunePosition.CurrentRune;
                    this.Unit.SourceUnit.PickUpRune(this.RunePosition.CurrentRune.SourceRune);
                    this.Unit.SourceUnit.PickUpRune(this.RunePosition.CurrentRune.SourceRune);
                    this.Unit.SourceUnit.PickUpRune(this.RunePosition.CurrentRune.SourceRune);
                    return(100);
                }

                return(0);
            }

            if (this.sleeper.Sleeping)
            {
                return(0);
            }

            this.sleeper.Sleep(300);

            this.LastDistanceToRune = this.Unit.Position.PredictedByLatency.Distance2D(this.RunePosition.Position);

            if (!this.RunePosition.HasRune && this.LastDistanceToRune < 1000 &&
                (this.LastDistanceToRune / this.Unit.SourceUnit.MovementSpeed) + 0.5
                < this.RunePosition.NextSpawnTime - Game.GameTime)
            {
                //Console.WriteLine("stopping");
                this.Unit.SourceUnit.Stop();
                return(0);
            }

            //Console.WriteLine("moving");
            this.Unit.SourceUnit.Move(this.RunePosition.Position);
            return(0);
        }