示例#1
0
        public override void Check()
        {
            if (StartCast <= 0 && IsInPhase && AbilityOwner.IsVisible)
            {
                StartCast = Game.RawGameTime;
                EndCast   = StartCast + CastPoint + GetCastRange() / GetProjectileSpeed();
            }
            else if (StartCast > 0 && Obstacle == null && CanBeStopped() && !AbilityOwner.IsTurning())
            {
                var tree = ChainTreePosition(AbilityOwner.InFront(GetCastRange()));

                if (tree == null)
                {
                    return;
                }

                StartPosition   = AbilityOwner.NetworkPosition;
                EndPosition     = tree.Position;
                AdditionalDelay = EndPosition.Distance2D(StartPosition) / GetProjectileSpeed();
                EndCast         = StartCast + CastPoint + AdditionalDelay * 2;
                Obstacle        = Pathfinder.AddObstacle(StartPosition, EndPosition, GetRadius(), GetEndRadius(), Obstacle);
            }
            else if (StartCast > 0 && Game.RawGameTime > EndCast)
            {
                End();
            }
            else if (Obstacle != null && !CanBeStopped())
            {
                Pathfinder.UpdateObstacle(Obstacle.Value, GetProjectilePosition(), GetRadius(), GetEndRadius());
            }
        }
示例#2
0
        public override void Check()
        {
            if (fowCast && Obstacle == null)
            {
                if (!IsAbilityUnitValid() || !abilityUnit.IsVisible)
                {
                    return;
                }

                var position = StartPosition.Extend(abilityUnit.Position.SetZ(350), GetShipRange());

                if (position.Distance2D(StartPosition) < 50)
                {
                    return;
                }

                StartPosition = position.SetZ(350);
                Obstacle      = Pathfinder.AddObstacle(StartPosition, GetRadius(), Obstacle);
            }
            else if (StartCast <= 0 && IsInPhase && AbilityOwner.IsVisible)
            {
                StartCast = Game.RawGameTime;
                EndCast   = StartCast + CastPoint + GetDelay();
            }
            else if (StartCast > 0 && Obstacle == null && CanBeStopped() && !AbilityOwner.IsTurning())
            {
                StartPosition = AbilityOwner.InFront(castRange);
                Obstacle      = Pathfinder.AddObstacle(StartPosition, GetRadius(), Obstacle);
            }
            else if (StartCast > 0 && Game.RawGameTime > EndCast)
            {
                End();
            }
        }
示例#3
0
 public override void Check()
 {
     if (StartCast <= 0 && IsInPhase && AbilityOwner.IsVisible)
     {
         StartCast = Game.RawGameTime;
         EndCast   = StartCast + CastPoint + GetCastRange() / GetProjectileSpeed();
     }
     else if (StartCast > 0 && Obstacle == null && CanBeStopped() && !AbilityOwner.IsTurning())
     {
         StartPosition = AbilityOwner.NetworkPosition;
         EndPosition   = AbilityOwner.InFront(GetCastRange() + GetRadius() / 2);
         Obstacle      = Pathfinder.AddObstacle(StartPosition, EndPosition, GetRadius(), Obstacle);
     }
     else if (Obstacle == null && particleEffect != null && !particleAdded)
     {
         particleAdded = true;
         StartPosition = particleEffect.GetControlPoint(0);
         EndPosition   = StartPosition.Extend(particleEffect.GetControlPoint(1), GetCastRange() + GetRadius() / 2);
         StartCast     = Game.RawGameTime;
         EndCast       = StartCast + GetCastRange() / GetProjectileSpeed();
         Obstacle      = Pathfinder.AddObstacle(StartPosition, EndPosition, GetRadius(), Obstacle);
     }
     else if (StartCast > 0 && Game.RawGameTime > EndCast)
     {
         End();
     }
     else if (Obstacle != null && !CanBeStopped())
     {
         Pathfinder.UpdateObstacle(Obstacle.Value, GetProjectilePosition(), GetRadius(), GetEndRadius());
     }
 }
示例#4
0
 public override void Check()
 {
     if (particleAdded && !AbilityOwner.IsTurning())
     {
         StartPosition = AbilityOwner.NetworkPosition;
         EndPosition   = AbilityOwner.InFront(GetCastRange());
         EndCast       = StartCast + channelTime + GetCastRange() / GetProjectileSpeed();
         Obstacle      = Pathfinder.AddObstacle(StartPosition, EndPosition, GetRadius(), Obstacle);
         particleAdded = false;
     }
     else if (Obstacle != null && !Ability.IsChanneling && !channelFix)
     {
         var time = Game.RawGameTime;
         channelFix     = true;
         channelingTime = time - StartCast;
         EndCast        = time + GetCastRange() / GetProjectileSpeed();
     }
     else if (StartCast > 0 && Game.RawGameTime > EndCast)
     {
         End();
     }
     else if (Obstacle != null && !Ability.IsChanneling)
     {
         Pathfinder.UpdateObstacle(Obstacle.Value, GetProjectilePosition(), EndPosition);
     }
 }
示例#5
0
        public override void Check()
        {
            if (StartCast > 0 && Obstacle != null && Game.RawGameTime > EndCast)
            {
                End();
            }
            else if (Obstacle == null && IsAbilityUnitValid() && abilityUnit.IsVisible)
            {
                var unitPosition = abilityUnit.Position;
                if (unitPosition == StartPosition)
                {
                    return;
                }

                EndPosition = StartPosition.Extend(abilityUnit.Position, GetCastRange());

                if (Math.Abs(EndPosition.Distance2D(StartPosition) - GetCastRange()) > 50)
                {
                    return;
                }

                Obstacle = Pathfinder.AddObstacle(StartPosition, EndPosition, GetRadius(), Obstacle);
            }
            else if (Obstacle != null)
            {
                Pathfinder.UpdateObstacle(Obstacle.Value, GetProjectilePosition(), GetRadius());
            }
        }
示例#6
0
        public void AddParticle(ParticleEffectAddedEventArgs particleArgs)
        {
            var caster = particleArgs.Name.Contains("caster");

            tempTime = Game.RawGameTime;

            DelayAction.Add(
                1,
                () =>
            {
                if (caster)
                {
                    StartPosition = particleArgs.ParticleEffect.GetControlPoint(0);
                }
                else
                {
                    StartCast   = tempTime;
                    EndPosition = StartPosition.Extend(
                        particleArgs.ParticleEffect.GetControlPoint(1),
                        GetCastRange());
                    EndCast  = StartCast + GetCastRange() / GetProjectileSpeed();
                    Obstacle = Pathfinder.AddObstacle(StartPosition, EndPosition, GetRadius(), Obstacle);
                }
            });
        }
示例#7
0
        public override void Check()
        {
            if (StartCast <= 0 && IsInPhase && AbilityOwner.IsVisible)
            {
                StartCast     = Game.RawGameTime;
                EndCast       = StartCast + CastPoint + GetCastRange() / GetProjectileSpeed();
                StartPosition = AbilityOwner.NetworkPosition;
                EndPosition   = AbilityOwner.InFront(GetCastRange());
                Obstacle      = Pathfinder.AddObstacle(StartPosition, EndPosition, GetRadius(), Obstacle);
            }
            else if (ProjectileTarget != null && Obstacle == null && !FowCast)
            {
                FowCast       = true;
                StartCast     = Game.RawGameTime;
                EndCast       = StartCast + GetCastRange() / GetProjectileSpeed();
                StartPosition = AbilityOwner.NetworkPosition;
                EndPosition   = StartPosition.Extend(ProjectileTarget.Position, GetCastRange());
                Obstacle      = Pathfinder.AddObstacle(StartPosition, EndPosition, GetRadius(), Obstacle);
            }
            else if (StartCast > 0 && Game.RawGameTime > EndCast)
            {
                End();
            }
            else if (Obstacle != null)
            {
                if (!ProjectileLaunched())
                {
                    EndPosition = AbilityOwner.InFront(GetCastRange());
                    Pathfinder.UpdateObstacle(Obstacle.Value, StartPosition, EndPosition);
                    AbilityDrawer.UpdateRectanglePosition(StartPosition, EndPosition, GetRadius());
                }
                else if (ProjectileTarget != null)
                {
                    var projectilePosition = GetProjectilePosition(FowCast);
                    if (projectilePosition == lastProjectilePosition)
                    {
                        End();
                        return;
                    }

                    lastProjectilePosition = projectilePosition;

                    AbilityDrawer.Dispose(AbilityDrawer.Type.Rectangle);
                    EndCast = Game.RawGameTime + (ProjectileTarget.Distance2D(projectilePosition) - 20)
                              / GetProjectileSpeed();

                    if (!obstacleToAOE)
                    {
                        Obstacle      = Pathfinder.AddObstacle(ProjectileTarget.Position, jumpRadius, Obstacle);
                        obstacleToAOE = true;
                    }
                    else
                    {
                        Pathfinder.UpdateObstacle(Obstacle.Value, ProjectileTarget.Position, jumpRadius);
                    }
                }
            }
        }
示例#8
0
 public void AddModifierObstacle(Modifier modifier, Unit unit)
 {
     DelayAction.Add(
         5,
         () => {
         StartPosition = unit.Position;
         EndCast       = StartCast + (channelTime - modifier.ElapsedTime)
                         + StartPosition.Distance2D(initialPosition) / speed;
         Obstacle = Pathfinder.AddObstacle(StartPosition, GetRadius(), Obstacle);
     });
 }
示例#9
0
        public void FindPath_Obstacle()
        {
            // arrange
            Pathfinder pathfinder = new Pathfinder(3, 3);

            pathfinder.AddObstacle(new Int2(1, 1));
            // act
            List <Int2> path = pathfinder.FindPath(new Int2(0, 0), new Int2(2, 2));

            // assert
            Assert.Equal(3, path.Count);
        }
示例#10
0
        public void AddModifierObstacle(Modifier mod, Unit unit)
        {
            StartCast = Game.RawGameTime;

            DelayAction.Add(
                1,
                () => {
                StartPosition = unit.Position;
                EndCast       = StartCast + AdditionalDelay;
                Obstacle      = Pathfinder.AddObstacle(StartPosition, GetRadius(), Obstacle);
            });
        }
示例#11
0
        public void AddParticle(ParticleEffectAddedEventArgs particleArgs)
        {
            StartCast = Game.RawGameTime;

            DelayAction.Add(
                1,
                () => {
                StartPosition = particleArgs.ParticleEffect.GetControlPoint(0).SetZ(AbilityOwner.Position.Z);
                EndCast       = StartCast + duration;
                Obstacle      = Pathfinder.AddObstacle(StartPosition, GetRadius(), Obstacle);
            });
        }
示例#12
0
        public void AddModifierObstacle(Modifier modifier, Unit unit)
        {
            if (!AbilityOwner.IsVisible)
            {
                return;
            }

            StartCast     = Game.RawGameTime;
            EndCast       = StartCast + AdditionalDelay;
            StartPosition = unit.Position;
            Obstacle      = Pathfinder.AddObstacle(StartPosition, GetRadius(), Obstacle);
        }
示例#13
0
        public void AddUnit(Unit unit)
        {
            if (!AbilityOwner.IsVisible || unit.Name != "npc_dota_plasma_field")
            {
                return;
            }

            StartCast     = Game.RawGameTime;
            EndCast       = StartCast + GetRadius() / projectileSpeed;
            StartPosition = unit.Position;
            Obstacle      = Pathfinder.AddObstacle(StartPosition, GetRadius(), Obstacle);
        }
示例#14
0
        public void AddParticle(ParticleEffectAddedEventArgs particleArgs)
        {
            if (Obstacle != null || !AbilityOwner.IsVisible)
            {
                return;
            }

            StartCast     = Game.RawGameTime;
            StartPosition = AbilityOwner.NetworkPosition;
            EndCast       = StartCast + tavelTime;
            Obstacle      = Pathfinder.AddObstacle(StartPosition, GetRadius(), Obstacle);
        }
示例#15
0
        public void AddParticle(ParticleEffectAddedEventArgs particleArgs)
        {
            StartCast = Game.RawGameTime;

            DelayAction.Add(
                1,
                () => {
                StartPosition = particleArgs.ParticleEffect.GetControlPoint(1);
                EndCast       = StartCast + AdditionalDelay;
                Obstacle      = Pathfinder.AddObstacle(StartPosition, GetRadius(), Obstacle);
            });
        }
示例#16
0
        public void AddParticle(ParticleEffectAddedEventArgs particleArgs)
        {
            if (Obstacle != null || !AbilityOwner.IsVisible)
            {
                return;
            }

            StartCast     = Game.RawGameTime;
            StartPosition = AbilityOwner.NetworkPosition;
            EndPosition   = AbilityOwner.InFront(GetCastRange());
            EndCast       = StartCast + GetCastRange() / GetProjectileSpeed();
            Obstacle      = Pathfinder.AddObstacle(StartPosition, EndPosition, GetRadius(), Obstacle);
        }
示例#17
0
 public override void Check()
 {
     if (IsAbilityUnitValid())
     {
         StartPosition = abilityUnit.Position;
     }
     else if (flies && Obstacle == null)
     {
         StartPosition = StartPosition.Extend(initialPosition, -115);
         Obstacle      = Pathfinder.AddObstacle(StartPosition, GetRadius(), Obstacle);
         EndCast       = Game.RawGameTime;
     }
 }
示例#18
0
        public void AddParticle(ParticleEffectAddedEventArgs particleArgs)
        {
            StartCast = Game.RawGameTime;

            DelayAction.Add(
                1,
                () => {
                startPosition = particleArgs.ParticleEffect.GetControlPoint(0);
                endPosition   = particleArgs.ParticleEffect.GetControlPoint(1);
                heroPosition  = startPosition;
                Obstacle      = Pathfinder.AddObstacle(startPosition, 200, Obstacle, 256);
                EndCast       = StartCast + GetRemainingTime();
            });
        }
示例#19
0
 public override void Check()
 {
     if (StartCast <= 0 && TimeSinceCast() < 0.1 && AbilityOwner.IsVisible)
     {
         StartCast     = Game.RawGameTime;
         StartPosition = AbilityOwner.NetworkPosition;
         EndCast       = StartCast + CastPoint + AdditionalDelay;
         Obstacle      = Pathfinder.AddObstacle(StartPosition, GetRadius(), Obstacle);
     }
     else if (StartCast > 0 && Game.RawGameTime > EndCast)
     {
         End();
     }
 }
示例#20
0
 public override void Check()
 {
     if (StartCast <= 0 && IsInPhase && AbilityOwner.IsVisible)
     {
         StartCast     = Game.RawGameTime;
         StartPosition = AbilityOwner.NetworkPosition;
         EndCast       = StartCast + CastPoint;
         Obstacle      = Pathfinder.AddObstacle(StartPosition, GetRadius(), Obstacle);
     }
     else if (StartCast > 0 && Game.RawGameTime > EndCast && !Ability.IsChanneling)
     {
         End();
     }
 }
示例#21
0
 public override void Check()
 {
     if (StartCast <= 0 && IsInPhase && AbilityOwner.IsVisible)
     {
         StartCast     = Game.RawGameTime;
         StartPosition = AbilityOwner.InFront(Ability.GetCastRange());
         EndCast       = StartCast + CastPoint;
         Obstacle      = Pathfinder.AddObstacle(StartPosition, GetRadius(), Obstacle);
     }
     else if (StartCast > 0 && Game.RawGameTime > EndCast)
     {
         End();
     }
 }
示例#22
0
        public void AddParticle(ParticleEffectAddedEventArgs particleArgs)
        {
            if (Obstacle != null || !AbilityOwner.IsVisible)
            {
                return;
            }

            StartCast     = Game.RawGameTime;
            StartPosition = AbilityOwner.NetworkPosition;
            EndPosition   = StartPosition
                            + (Vector3)(VectorExtensions.FromPolarAngle(AbilityOwner.RotationRad) * GetCastRange());
            EndCast  = StartCast + GetCastRange() / GetProjectileSpeed();
            Obstacle = Pathfinder.AddObstacle(StartPosition, EndPosition, GetRadius(), Obstacle);
        }
示例#23
0
 public void AddParticle(ParticleEffectAddedEventArgs particleArgs)
 {
     StartCast = Game.RawGameTime;
     DelayAction.Add(
         1,
         () => {
         var start     = particleArgs.ParticleEffect.GetControlPoint(0);
         var end       = particleArgs.ParticleEffect.GetControlPoint(1);
         var distance  = start.Distance2D(end);
         StartPosition = start;
         EndPosition   = start.Extend(end, distance);
         EndCast       = StartCast + distance / GetProjectileSpeed();
         Obstacle      = Pathfinder.AddObstacle(StartPosition, EndPosition, GetRadius(), Obstacle);
     });
 }
示例#24
0
 public override void Check()
 {
     if (StartCast <= 0 && TimeSinceCast() < 0.1 && AbilityOwner.IsVisible)
     {
         StartCast     = Game.RawGameTime;
         StartPosition = AbilityOwner.InFront(-GetRadius() * 0.9f);
         EndPosition   = AbilityOwner.InFront(GetCastRange());
         EndCast       = StartCast + AdditionalDelay;
         Obstacle      = Pathfinder.AddObstacle(StartPosition, EndPosition, GetRadius(), Obstacle);
     }
     else if (StartCast > 0 && Game.RawGameTime > EndCast)
     {
         End();
     }
 }
示例#25
0
        public void AddParticle(ParticleEffectAddedEventArgs particleArgs)
        {
            StartCast = Game.RawGameTime + AdditionalDelay;

            DelayAction.Add(
                1,
                () => {
                var cp0       = particleArgs.ParticleEffect.GetControlPoint(0).SetZ(350);
                var cp1       = particleArgs.ParticleEffect.GetControlPoint(1).SetZ(350);
                StartPosition = cp1.Extend(cp0, GetRadius() / 2);
                EndPosition   = cp0.Extend(StartPosition, GetCastRange() + cp0.Distance2D(cp1));
                EndCast       = StartCast + AdditionalDelay + GetCastRange() / GetProjectileSpeed() - 0.5f;
                Obstacle      = Pathfinder.AddObstacle(StartPosition, EndPosition, GetRadius(), Obstacle);
            });
        }
示例#26
0
        public void AddParticle(ParticleEffectAddedEventArgs particleArgs)
        {
            StartCast = Game.RawGameTime;

            DelayAction.Add(
                1,
                () => {
                StartPosition = particleArgs.ParticleEffect.GetControlPoint(0);
                EndPosition   = StartPosition.Extend(
                    StartPosition + particleArgs.ParticleEffect.GetControlPoint(1),
                    GetCastRange());
                EndCast  = StartCast + StartPosition.Distance2D(EndPosition) / GetProjectileSpeed();
                Obstacle = Pathfinder.AddObstacle(StartPosition, EndPosition, GetRadius(), Obstacle);
            });
        }
示例#27
0
        public void AddModifierObstacle(Modifier modifier, Unit unit)
        {
            StartPosition = unit.Position;

            if (!ObjectManager.GetEntities <Creep>()
                .Any(
                    x => x.IsValid && x.Distance2D(StartPosition) < GetRadius() - 25 && x.Team == HeroTeam &&
                    x.IsAlive && x.IsSpawned))
            {
                return;
            }

            StartCast = Game.RawGameTime;
            EndCast   = StartCast + AdditionalDelay;
            Obstacle  = Pathfinder.AddObstacle(StartPosition, GetRadius(), Obstacle);
        }
示例#28
0
 public override void Check()
 {
     if (StartCast <= 0 && !attackSleeper.Sleeping && kunkka.IsAttacking() && Ability.CanBeCasted() &&
         AbilityOwner.IsVisible)
     {
         StartCast     = Game.RawGameTime;
         StartPosition = AbilityOwner.InFront(GetRadius());
         EndCast       = StartCast + (float)UnitDatabase.GetAttackPoint(kunkka);
         Obstacle      = Pathfinder.AddObstacle(StartPosition, GetRadius(), Obstacle);
         attackSleeper.Sleep(kunkka.AttacksPerSecond * 1000);
     }
     else if (StartCast > 0 && Game.RawGameTime > EndCast)
     {
         End();
     }
 }
示例#29
0
        public override void Check()
        {
            var time = Game.RawGameTime;

            if (IsInPhase && StartCast + CastPoint <= time)
            {
                StartCast     = time;
                StartPosition = AbilityOwner.NetworkPosition;
                EndCast       = StartCast + CastPoint + tavelTime;
                Obstacle      = Pathfinder.AddObstacle(StartPosition, GetRadius(), Obstacle);
            }
            else if (StartCast > 0 && time > EndCast)
            {
                End();
            }
        }
示例#30
0
        public override void Check()
        {
            if (ProjectileTarget != null && Obstacle == null && !FowCast)
            {
                FowCast       = true;
                StartCast     = Game.RawGameTime;
                EndCast       = StartCast + GetCastRange() / GetProjectileSpeed();
                StartPosition = AbilityOwner.NetworkPosition;
                EndPosition   = StartPosition.Extend(ProjectileTarget.Position, GetCastRange());
                Obstacle      = Pathfinder.AddObstacle(StartPosition, EndPosition, GetRadius(), Obstacle);
            }
            else if (StartCast > 0 && Game.RawGameTime > EndCast)
            {
                End();
            }
            else if (Obstacle != null)
            {
                if (!ProjectileLaunched())
                {
                    EndPosition = AbilityOwner.InFront(GetCastRange());
                    Pathfinder.UpdateObstacle(Obstacle.Value, StartPosition, EndPosition);
                    AbilityDrawer.UpdateRectaglePosition(StartPosition, EndPosition, GetRadius());
                }
                else if (ProjectileTarget != null)
                {
                    var projectilePosition = GetProjectilePosition(FowCast);

                    if (projectilePosition == LastProjectilePosition)
                    {
                        End();
                        return;
                    }

                    LastProjectilePosition = projectilePosition;

                    AbilityDrawer.Dispose(AbilityDrawer.Type.Rectangle);
                    //    EndCast = Game.RawGameTime + GetProjectilePosition(fowCast).Distance2D(projectileTarget) / GetProjectileSpeed();
                    EndPosition = StartPosition.Extend(
                        ProjectileTarget.Position,
                        ProjectileTarget.Distance2D(StartPosition) + GetRadius());
                    Pathfinder.UpdateObstacle(
                        Obstacle.Value,
                        ProjectileTarget.NetworkPosition.Extend(StartPosition, GetRadius()),
                        ProjectileTarget.NetworkPosition.Extend(EndPosition, GetRadius()));
                }
            }
        }