Ejemplo n.º 1
0
    // Spawns a projectile from the pool, setting it's new direction based on the character's direction (WeaponOwner)
    private void SpawnProjectile(Vector2 spawnPosition)
    {
        // Get Object from the pool
        GameObject projectilePooled = Pooler.GetObjectFromPool();

        projectilePooled.transform.position = spawnPosition;
        projectilePooled.SetActive(true);

        // Get reference to the projectile
        Projectile_lsy projectile = projectilePooled.GetComponent <Projectile_lsy>();

        projectile.EnableProjectile();

        // Spread
        randomProjectileSpread.z = Random.Range(-projectileSpread.z, projectileSpread.z);
        Quaternion spread = Quaternion.Euler(randomProjectileSpread);

        // Set direction and rotation
        Vector2 newDirection = new Vector2();

        if (WeaponOwner.GetComponent <CharacterFlip_lsy>().flipMode == CharacterFlip_lsy.FlipMode.MovementDirection)
        {
            newDirection = spread * transform.right;
        }
        else if (WeaponOwner.GetComponent <CharacterFlip_lsy>().flipMode == CharacterFlip_lsy.FlipMode.WeaponDirection)
        {
            newDirection = WeaponOwner.GetComponent <CharacterFlip_lsy>().FacingRight ? spread * transform.right : spread * transform.right * -1;
        }
        projectile.SetDirection(newDirection, transform.rotation, WeaponOwner.GetComponent <CharacterFlip_lsy>().FacingRight);

        CanShoot = false;
    }
Ejemplo n.º 2
0
 // Calculates the position where our projectile is going to be fired
 private void EvaluateProjectileSpawnPosition()
 {
     if (WeaponOwner.GetComponent <CharacterFlip_lsy>().flipMode == CharacterFlip_lsy.FlipMode.MovementDirection)
     {
         if (WeaponOwner.GetComponent <CharacterFlip_lsy>().FacingRight)
         {
             // Right side
             ProjectileSpawnPosition = transform.position + projectileSpawnPosition;
         }
         else
         {
             // Left side
             ProjectileSpawnPosition = transform.position - projectileSpawnValue;
         }
     }
     else
     {
         if (WeaponOwner.GetComponent <CharacterFlip_lsy>().FacingRight)
         {
             // Right side
             ProjectileSpawnPosition = transform.position + transform.rotation * projectileSpawnPosition;
         }
         else
         {
             // Left side
             ProjectileSpawnPosition = transform.position - transform.rotation * projectileSpawnValue;
         }
     }
 }
Ejemplo n.º 3
0
 protected virtual void Update()
 {
     WeaponCanShoot();
     if (WeaponOwner.GetComponent <CharacterFlip_lsy>().flipMode == CharacterFlip_lsy.FlipMode.WeaponDirection)
     {
         RotateWeapon();
     }
 }
 private void EvaluateProjectileSpawnPosition()
 {
     if (WeaponOwner.GetComponent <CharacterFlip>().FacingRight)
     {
         ProjectileSpawnPosition = transform.position + transform.rotation * projectileSpawnPosition;
     }
     else
     {
         ProjectileSpawnPosition = transform.position - transform.rotation * projectileSpawnValue;
     }
 }
Ejemplo n.º 5
0
 protected virtual void RotateWeapon()
 {
     if (WeaponOwner.GetComponent <CharacterFlip>().FacingRight)
     {
         transform.localScale = new Vector3(1, 1, 1);
     }
     else
     {
         transform.localScale = new Vector3(-1, 1, 1);
     }
 }
Ejemplo n.º 6
0
 private void RotateWeapon()
 {
     if (WeaponOwner.GetComponent <CharacterFilp>().FacingRight)
     {
         transform.localScale = new Vector3(1, 1, 1);
     }
     else
     {
         transform.localScale = new Vector3(1, 1, 1);
     }
 }
Ejemplo n.º 7
0
 private void Recoil()
 {
     if (WeaponOwner != null)
     {
         if (WeaponOwner.GetComponent <CharacterFlip>().FacingRight)
         {
             controller.ApplyRecoil(Vector2.left, recoilForce);
         }
         else
         {
             controller.ApplyRecoil(Vector2.right, recoilForce);
         }
     }
 }
Ejemplo n.º 8
0
    public void WeaponAttack(Vector3 firePostion, Vector3 TargetPostion, string targetTag)
    {
        if (!WeaponWaitingForCooldown)
        {
            Vector3 shootDir;
            float   angle = 0;

            //Mouse has hit a valid location to shoot at
            //TODO: We dont need a ray cast for this, get mouse position when we click!!
            shootDir   = TargetPostion - firePostion;
            shootDir.y = 0;
            shootDir.Normalize();
            angle = Mathf.Acos(Vector3.Dot(Vector3.forward, shootDir)) * Mathf.Rad2Deg;

            if (TargetPostion.x < transform.position.x)
            {
                angle = 360 - angle;
            }


            //We need, Prefab (Local), Position, Rotation / Direction, and then set the damage;
            //We Need, Who is shooting and where in the world we are shooting

            for (int i = 0; i < numberOfShots; i++)
            {
                int offset = (numberOfShots / 2) - i;

                Transform clone = Instantiate(projectile, firePostion + (shootDir) + new Vector3(offset * shootDir.z, 0.5f, offset * -shootDir.x), Quaternion.Euler(0, angle + (offset * spreadAngle), 0)) as Transform;
                clone.GetComponent <BowProjectileScript>().Init(targetTag, new DamageClass(damage, damageType));

                if (WeaponOwner.GetComponent <Actor>().equippedDamageModifiers.Count > 0)
                {
                    foreach (DamageModifier abi in WeaponOwner.GetComponent <Actor>().equippedDamageModifiers)
                    {
                        if (abi.isActive)
                        {
                            DamageClass cloneDam = clone.GetComponent <BowProjectileScript>().damage;

                            cloneDam = abi.ApplyDamageMod(cloneDam);

                            clone.GetComponent <BowProjectileScript>().damage = cloneDam;
                        }
                    }
                }
            }

            WeaponWaitingForCooldown = true;
            StartCoroutine(AttackTimer());
        }
    }
    private void SpawnProjectile(Vector2 spawnPosition)
    {
        // Store the gameobject from pool
        GameObject projectilePooled = Pooler.GetObjectFromPool();

        projectilePooled.transform.position = spawnPosition;
        projectilePooled.SetActive(true);

        Projectile projectile = projectilePooled.GetComponent <Projectile>();

        // Spread logic
        randomProjectileSpread.z = Random.Range(-projectileSpread.z, projectileSpread.z);
        Quaternion spread = Quaternion.Euler(randomProjectileSpread);

        // Shorter if/else. If FacingRight = true, Vector2.right (?), else (:) Vector2.Left
        Vector2 newDirection = WeaponOwner.GetComponent <CharacterFlip>().FacingRight ? spread * transform.right : spread * transform.right * -1;

        projectile.SetDirection(newDirection, transform.rotation, WeaponOwner.GetComponent <CharacterFlip>().FacingRight);

        CanShoot = false; // Resets to true in Weapon after cooldown
    }