Beispiel #1
0
        public LSProjectile PrepareProjectile(string projectileCode, Vector3d projOffset, Vector3d targetPos)
        {
            LSProjectile currentProjectile = ProjectileManager.Create(
                projectileCode,
                this.Agent,
                projOffset,
                this.TargetAllegiance,
                (other) =>
            {
                Health healther = other.GetAbility <Health>();
                return(healther.IsNotNull() && healther.HealthAmount > 0);
            },
                CachedOnHit);

            switch (currentProjectile.TargetingBehavior)
            {
            case TargetingType.Timed:
                currentProjectile.InitializeTimed(Agent.Body.Forward);
                break;

            case TargetingType.Positional:
                currentProjectile.InitializePositional(targetPos);
                break;

            case TargetingType.Free:
                //TODO
                throw new System.Exception("Not implemented yet.");
                //break;
            }

            return(currentProjectile);
        }
Beispiel #2
0
        protected virtual void OnFire()
        {
            long         appliedDamage = Damage;
            Health       healther      = Agent.GetAbility <Health>();
            LSProjectile projectile    = ProjectileManager.Create(
                ProjCode,
                this.Agent,
                this.ProjectileOffset,
                this.TargetAllegiance,
                (other) => healther.IsNotNull() && healther.HealthAmount > 0,
                (agent) => healther.TakeRawDamage(appliedDamage));

            projectile.InitializeHoming(this.Target);
            projectile.TargetPlatform = TargetPlatform;
            ProjectileManager.Fire(projectile);
        }
Beispiel #3
0
        public void Engage(LSAgent other)
        {
            if (other != Agent)
            {
                cachedTargetHealth = other.Healther;
                if (cachedTargetHealth.IsNotNull())
                {
                    Target = other;

                    HasTarget          = true;
                    targetVersion      = Target.SpawnVersion;
                    IsCasting          = true;
                    fastRangeToTarget  = Range + (Target.Body.IsNotNull() ? Target.Body.Radius : 0);
                    fastRangeToTarget *= fastRangeToTarget;
                }
            }
        }
Beispiel #4
0
        public void Engage(LSAgent other)
        {
            if (other != Agent && other != null)
            {
                cachedTargetHealth = other.GetAbility <Health>();
                if (cachedTargetHealth.IsNotNull())
                {
                    OnEngage(other);

                    Target = other;

                    HasTarget          = true;
                    targetVersion      = Target.SpawnVersion;
                    IsCasting          = true;
                    fastRangeToTarget  = Range + (Target.Body.IsNotNull() ? Target.Body.Radius : 0) + Agent.Body.Radius;
                    fastRangeToTarget *= fastRangeToTarget;
                }
            }
        }
Beispiel #5
0
        public LSProjectile FireProjectile(Vector3d projOffset, LSAgent target)
        {
            LSProjectile currentProjectile = ProjectileManager.Create(
                ProjCode,
                this.Agent,
                projOffset,
                this.TargetAllegiance,
                (other) =>
            {
                Health healther = other.GetAbility <Health>();
                return(healther.IsNotNull() && healther.HealthAmount > 0);
            },
                CachedOnHit);

            switch (currentProjectile.TargetingBehavior)
            {
            case TargetingType.Homing:
                currentProjectile.InitializeHoming(target);
                break;

            case TargetingType.Timed:
                currentProjectile.InitializeTimed(Agent.Body.Forward);
                break;

            case TargetingType.Positional:
                currentProjectile.InitializePositional(target.Body.Position.ToVector3d(target.Body.HeightPos));
                break;

            case TargetingType.Free:
                //TODO
                throw new System.Exception("Not implemented yet.");
                //break;
            }
            if (onPrepareProjectile != null)
            {
                onPrepareProjectile(currentProjectile);
            }
            ProjectileManager.Fire(currentProjectile);
            return(currentProjectile);
        }
Beispiel #6
0
        protected virtual void OnFire()
        {
            long appliedDamage = Damage;

            LSProjectile projectile = ProjectileManager.Create(
                ProjCode,
                this.Agent,
                this.ProjectileOffset,
                this.TargetAllegiance,
                (other) =>
            {
                Health healther = other.GetAbility <Health>();
                return(healther.IsNotNull() && healther.HealthAmount > 0);
            },
                CachedOnHit);

            switch (projectile.TargetingBehavior)
            {
            case TargetingType.Homing:
                projectile.InitializeHoming(this.Target);
                break;

            case TargetingType.Timed:
                projectile.InitializeTimed();
                break;

            case TargetingType.Positional:
                projectile.InitializePositional(Target.Body.Position.ToVector3d(Target.Body.HeightPos));
                break;

            case TargetingType.Free:
                //TODO
                throw new System.Exception("Not implemented yet.");
                break;
            }
            ProjectileManager.Fire(projectile);
        }
Beispiel #7
0
        public void Engage(LSAgent other)
        {
            if (other != Agent)
            {
                cachedTargetHealth = other.Healther;
                if (cachedTargetHealth .IsNotNull())
                {
                    Target = other;

                    HasTarget = true;
                    targetVersion = Target.SpawnVersion;
                    IsCasting = true;
                    fastRangeToTarget = Range + (Target.Body .IsNotNull() ? Target.Body.Radius : 0);
                    fastRangeToTarget *= fastRangeToTarget;
                }
            }
        }