示例#1
0
        public BeamWeapon(World world, WeaponInit init) : base(world, init)
        {
            projectile = (BeamProjectile)Type.Projectile;
            rayPhysics = new RayPhysics(world)
            {
                Target       = TargetPosition,
                TargetHeight = TargetHeight
            };

            originPos    = init.Convert("OriginPosition", TargetPosition);
            originHeight = init.Convert("OriginHeight", TargetHeight);
            setPosition();

            impactInterval  = init.Convert("ImpactInterval", projectile.ImpactInterval);
            duration        = init.Convert("Duration", Type.ShootDuration);
            buildupduration = init.Convert("BuildupDuration", projectile.StartupDuration);
            endduration     = init.Convert("EndDuration", projectile.CooldownDuration);

            if (buildupduration > 0 && projectile.BeamStartUp != null)
            {
                useTexture(projectile.BeamStartUp);
            }
            else
            {
                useTexture(projectile.Beam);
            }

            if (projectile.BeamSound != null)
            {
                sound = new Sound(projectile.BeamSound);
                sound.Play(originPos, true);
            }
        }
示例#2
0
        public BeamWeapon(World world, WeaponType type, Target target, Actor origin, uint id) : base(world, type, target, origin, id)
        {
            projectile     = (BeamProjectile)type.Projectile;
            impactInterval = projectile.ImpactInterval;
            rayPhysics     = new RayPhysics(world)
            {
                Target       = TargetPosition,
                TargetHeight = TargetHeight
            };

            setPosition();

            duration        = type.ShootDuration;
            buildupduration = projectile.StartupDuration;
            endduration     = projectile.CooldownDuration;

            if (buildupduration > 0 && projectile.BeamStartUp != null)
            {
                useTexture(projectile.BeamStartUp);
            }
            else
            {
                useTexture(projectile.Beam);
            }

            if (projectile.BeamSound != null)
            {
                sound = new Sound(projectile.BeamSound);
                sound.Play(originPos, true);
            }
        }
 void OnTriggerEnter2D(Collider2D other)
 {
     if (other.gameObject.layer == LayerMask.NameToLayer("Lasers"))
     {
         BeamProjectile laser = other.gameObject.GetComponent <BeamProjectile>();
         Hero           ghost = this.gameObject.GetComponent <Hero>();
         ghost.SlowDown(.9f);
         ghost.Injure(3);
     }
 }
示例#4
0
 private void OnTriggerEnter2D(Collider2D collider)
 {
     if (!isDead)
     {
         if (collider.tag == "Projectile")
         {
             BeamProjectile beam = collider.GetComponent <BeamProjectile>();
             if (beam.team != tag)
             {
                 TakeDamage(beam.damage);
                 Destroy(collider.gameObject, beam.thirstPower);
             }
         }
     }
 }
示例#5
0
    private IEnumerator LaunchProjectile()
    {
        if (!isCooldown && (Enemy.transform.childCount != 0 && transform.childCount != 0))
        {
            isCooldown = true;

            int RandomOrigin;
            int RandomTarget;

            Vector2 OriginPosition;
            Vector2 TargetPosition;

            Transform OriginTransform;

            float RotationAlly;

            RandomOrigin = Random.Range(0, transform.childCount);
            RandomTarget = Random.Range(0, Enemy.transform.childCount);

            OriginTransform = transform.GetChild(RandomOrigin);

            OriginPosition = OriginTransform.position;
            TargetPosition = Enemy.transform.GetChild(RandomTarget).position;

            RotationAlly = Mathf.Atan2(TargetPosition.y - OriginPosition.y,
                                       TargetPosition.x - OriginPosition.x);

            OriginTransform.rotation = Quaternion.Euler(0, 0, RotationAlly * Mathf.Rad2Deg);

            Vector2 OriginFirepoint = OriginTransform.GetChild(0).GetChild(Random.Range(0, OriginTransform.GetChild(0).childCount)).position;

            GameObject     launchedProjectile = Instantiate(damageProjectile, OriginFirepoint, Quaternion.Euler(0, 0, RotationAlly * Mathf.Rad2Deg));
            BeamProjectile beam = launchedProjectile.GetComponent <BeamProjectile>();
            if (beam)
            {
                shotAudio.Play();
                beam.team        = tag;
                beam.damage      = damage;
                beam.thirstPower = thirstPower;
                beam.lifetime    = lifetimeProjectile;
            }
            launchedProjectile.GetComponent <Rigidbody2D>().velocity = new Vector2(Mathf.Cos(RotationAlly), Mathf.Sin(RotationAlly)) * launchForce;

            yield return(new WaitForSecondsRealtime(attackCooldown));

            isCooldown = false;
        }
    }
示例#6
0
 private void OnTriggerEnter2D(Collider2D collider)
 {
     if (!isDead)
     {
         if (collider.tag == "Projectile")
         {
             BeamProjectile beam = collider.GetComponent <BeamProjectile>();
             if (collider.GetComponent <BeamProjectile>().team != tag)
             {
                 Destroy(collider.gameObject, 0.1f);
                 TakeDamage(beam.damage);
             }
         }
     }
     if (collider.tag == "Enemy")
     {
         SquadController enemy = collider.gameObject.GetComponent <SquadController>();
         if (enemy)
         {
             enemy.CallEngage(gameObject);
         }
     }
 }