// 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; }
// 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; } } }
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; } }
protected virtual void RotateWeapon() { if (WeaponOwner.GetComponent <CharacterFlip>().FacingRight) { transform.localScale = new Vector3(1, 1, 1); } else { transform.localScale = new Vector3(-1, 1, 1); } }
private void RotateWeapon() { if (WeaponOwner.GetComponent <CharacterFilp>().FacingRight) { transform.localScale = new Vector3(1, 1, 1); } else { transform.localScale = new Vector3(1, 1, 1); } }
private void Recoil() { if (WeaponOwner != null) { if (WeaponOwner.GetComponent <CharacterFlip>().FacingRight) { controller.ApplyRecoil(Vector2.left, recoilForce); } else { controller.ApplyRecoil(Vector2.right, recoilForce); } } }
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 }