// Update is called once per frame void Update() { if (target == null) { target = FindTarget(); } else { distanceToTarget = Vector3.Distance(target.transform.position, this.gameObject.transform.position); if (Time.time > attackSpeed + lastShot && distanceToTarget < attackRange) { //Debug.Log ("(Fired)"); GameObject tempProjectile = Instantiate(projectile, this.gameObject.transform.position, this.gameObject.transform.rotation) as GameObject; ProjectileBehaviour pb = tempProjectile.GetComponent <ProjectileBehaviour>(); pb.speed = projectileSpeed; pb.target = target; pb.damage = attackDamage; tempProjectile.SetActive(true); lastShot = Time.time; } else //Must have moved out of range. { target = FindTarget(); } } }
public void netSpawnAllBullets(int skillID) { if (skillID != this.skillID) { print("wrong skillID"); return; } print("netSpawnAllBullets() called"); this.audio.PlayOneShot(shootSound); // get enemyVector from other component foreach (Transform sp in this.spawnPoints) { print("offset:" + sp.ToString()); ProjectileBehaviour b = Instantiate( this.bulletPrefab, sp.position, sp.rotation ) as ProjectileBehaviour; b.target = this.controller.enemy; b.ownerSkill = this; b.bulletSpeed = this.bulletSpeed; b.bulletSteerSpeed = this.bulletSteerSpeed; //b.debuffs = this.debuffs; } }
public virtual void Hit(RaycastHit hit, ProjectileBehaviour projectile) { if (OnHit != null) { OnHit.Invoke(hit); } }
/// <summary> /// On collision with the enemy then check object tag and match with enemy. /// </summary> /// <param name="collision"> Default collision component. /// </param> private void OnCollisionEnter(Collision collision) { // if an enemy is collided. if (collision.gameObject.CompareTag("Enemy")) { // asssign the collided object to the current object. cObject = collision.gameObject; // detect the player from the enemies side. PD = cObject.GetComponentInParent <PlayerDetection>(); // reduce health. health.takeDamage(PD.damage); // Destroy the script component. PD.isDestroyed(); PD = null; cObject = null; } // if collision is with an enemy projectile then take damage. if (collision.gameObject.CompareTag("Projectile")) { cObject = collision.gameObject; PJB = cObject.GetComponentInParent <ProjectileBehaviour>(); health.takeDamage(PJB.damage); PJB.IsDestroyed(); PJB = null; cObject = null; } }
private void ShootAbility() { playerController.currentMovementSpeed = playerController.shootingMovementSpeed; playerController.StopVelocity(); _newTime = Time.time + _fireRate; StartCoroutine(ShootBehaviour()); GameObject playerProjectile = Resources.Load <GameObject>(AssetPaths.pref_playerProjectile); GameObject proj = Instantiate(playerProjectile, _shootOrigin.position, playerProjectile.transform.rotation); Vector2 direction = playerController.AimDirection(); //normalized not actually needed proj.transform.rotation = Quaternion.LookRotation(Vector3.forward, direction); proj.GetComponent <Rigidbody2D>().velocity = direction * _projSpeed * Time.deltaTime; //set damage projBehaviour = proj.GetComponent <ProjectileBehaviour>(); projBehaviour.damage = _projDamage; //_healthComponent.Damage(_healthCost); //_uiManager.UpdateHealthSlider(); playerEnergy.RemoveEnergy(_energyCost); uiManager.UpdateEnergySlider(); uiManager.DamageEnergyBar(); }
private void ShootProjectile() { if (_newTime <= Time.time) { _newTime = Time.time + _fireRate; GameObject projLoad = Resources.Load <GameObject>(AssetPaths.pref_enemyProjectile); GameObject proj = Instantiate(projLoad, _shootOrigin.position, projLoad.transform.rotation); Vector2 direction = new Vector2(); if (_enemyController.playerRef != null) { direction = transform.position - _enemyController.playerRef.position; } direction = direction.normalized; proj.transform.rotation = Quaternion.LookRotation(Vector3.forward, direction); projBehaviour = proj.GetComponent <ProjectileBehaviour>(); proj.GetComponent <Rigidbody2D>().velocity = -direction * _projSpeed * Time.deltaTime; projBehaviour.currentDirection = -direction; projBehaviour.currentSpeed = _projSpeed; projBehaviour.damage = _projDamage; StartCoroutine(ShootBehaviour()); } }
private void ShootThing() { if (m_Player.PInput.Shoot && m_ShootCooldown == 0) { Vector3 angle = new Vector3(TankBarrel.eulerAngles.x, m_TankHead.eulerAngles.y, m_Player.transform.eulerAngles.z); Quaternion projectileRotation = Quaternion.Euler(angle); ProjectileBehaviour p = Instantiate(m_EquippedWeapon.ProjectilePrefab, FirePosition(), projectileRotation).GetComponent <ProjectileBehaviour>(); //p.Initalize(m_Player, m_EquippedWeapon, TankBarrel.forward); p.Initalize(m_Player, m_EquippedWeapon, TankBarrel.forward); m_ShootCooldown = m_EquippedWeapon.Cooldown; m_Player.Camera.Bump = (-TankBarrel.forward * m_EquippedWeapon.CameraImpact); m_Player.AddForce(-TankBarrel.forward * m_EquippedWeapon.TankForce); AddSpread(m_EquippedWeapon.SpreadAngle); // Reset the timer which makes the animation play m_BarrelAnimationTimer = 0; // Check if the weapon does not have infinite ammo if (m_EquippedWeapon.StartingAmmo > 0) { m_CurrentAmmo--; if (m_CurrentAmmo <= 0) { ResetWeapon(); } } } }
public void TakeHit(ProjectileBehaviour hit) { SoundManager.Instance.Monsters.PlayOneShot(SoundManager.Instance.guardianTakeHit, 0.5f); health = health - hit.damage; if ((hit.causesPosion == true) && (poisoned == false)) { SoundManager.Instance.SFX.PlayOneShot(SoundManager.Instance.poison, 0.5f); poisoned = true; } else if ((hit.causesPosion == true) && (poisoned == true)) { SoundManager.Instance.SFX.PlayOneShot(SoundManager.Instance.poison, 0.5f); poisonCounter = 0.0f; } if ((hit.causesBleed == true) && (bleeding == false)) { SoundManager.Instance.SFX.PlayOneShot(SoundManager.Instance.bleed, 0.5f); bleeding = true; } else if ((hit.causesBleed == true) && (bleeding == true)) { SoundManager.Instance.SFX.PlayOneShot(SoundManager.Instance.bleed, 0.5f); bleedCounter = 0.0f; } }
/// <summary> /// Update both the trajectory and landing position if both possible and desired. /// </summary> private void Update() { // The script should work fine even if there's no trajectory attached. if (m_trajectory != null) { // Only draw if requested by the controlling script. if (m_bDisplayTrajectory) { m_trajectory.SetInitialPositionAndVelocity(m_vInitialPosition, m_vKickVelocity); m_trajectory.OnSetShouldDraw(true); } else { m_trajectory.OnSetShouldDraw(false); } } // The script should work fine even if there's no landing position object attached. if (m_landingPosition != null) { // Only draw if requested by the controlling script. if (m_bDisplayLandingPosition) { m_landingPosition.SetActive(true); m_landingPosition.transform.position = ProjectileBehaviour.GetLandingPosition(m_vInitialPosition, m_vKickVelocity); } else { m_landingPosition.SetActive(false); } } }
void Attack(Vector3 direction, Vector3 clickDistance) { if (!rArmAnimator.GetCurrentAnimatorStateInfo(0).IsName("attack")) { rArmAnimator.Play("attack", 0); lArmAnimator.Play("attack", 0); } PlayerInfo.Instance.SetPlayerActive(true); for (int i = 0; i < PlayerInfo.Instance.AttackStyle().NoOfProjectiles; i++) { GameObject projectileObject = GameObject.Instantiate(PlayerInfo.Instance.AttackStyle().Projectile); ProjectileBehaviour projectileBehaviour = projectileObject.GetComponent <ProjectileBehaviour> (); projectileObject.transform.position = PlayerInfo.Instance.firePoint.transform.position; projectileBehaviour.startingLocation = player.transform.position; projectileBehaviour.speed = PlayerInfo.Instance.AttackStyle().ProjectileSpeed - (i * 2); projectileBehaviour.direction = Quaternion.AngleAxis(i * 10.0f, new Vector3(0.0f, 1.0f, 0.0f)) * direction; projectileBehaviour.trajectoryType = PlayerInfo.Instance.AttackStyle().TrajectoryType; if (projectileBehaviour.trajectoryType == 1) { projectileBehaviour.range = Mathf.Clamp(Vector3.Magnitude(clickDistance), 0.0f, (PlayerInfo.Instance.AttackStyle().Range + (PlayerInfo.Instance.AttackStyle().Range *PlayerInfo.Instance.rangeDiff))); } else { projectileBehaviour.range = (PlayerInfo.Instance.AttackStyle().Range + (PlayerInfo.Instance.AttackStyle().Range *PlayerInfo.Instance.rangeDiff)); } projectileBehaviour.damage = PlayerInfo.Instance.AttackStyle().Damage; projectileBehaviour.causesPosion = PlayerInfo.Instance.AttackStyle().Poison; projectileBehaviour.causesBleed = PlayerInfo.Instance.AttackStyle().Bleed; projectileBehaviour.causesSlow = PlayerInfo.Instance.AttackStyle().Slow; SoundManager.Instance.Monsters.PlayOneShot(SoundManager.Instance.weaponSounds[projectileBehaviour.sound], 0.3f); } }
// it is assumed the current projectile is a generic projectile with an empty reference behaviour to fill up public void Clone(Projectile p_projectile, ProjectileInfo p_projectileInfo, List <string> p_extraBehaviours) { m_reference = false; p_projectile.LoadComponents(); LoadComponents(); SpriteRenderer render = m_render; BoxCollider2D collider = m_boxCollider; render.sprite = p_projectile.m_render.sprite; collider.size = p_projectile.m_boxCollider.size; collider.offset = p_projectile.m_boxCollider.offset; // this will overwrite any assignment done to this projectile beforehand p_projectile.Copy(typeof(Projectile), gameObject); m_render = render; m_boxCollider = collider; m_info = p_projectileInfo; m_behaviourManager = GetComponent <BehaviourManager>(); m_behaviourManager.m_behaviours = new Dictionary <ProjectileBehaviour, bool>(); foreach (string behaviour in p_extraBehaviours) { ProjectileBehaviour clone = ProjectileBehaviour.Get(behaviour, false); if (clone != null) { m_behaviourManager.m_behaviours.Add(clone, false); } } m_original = p_projectile; }
void OnTriggerEnter(Collider obstacle) { if (obstacle.CompareTag("projectile")) { try { ProjectileBehaviour projectile = obstacle.transform.GetComponent <ProjectileBehaviour>(); TakeHit(projectile); projectile.Die(); } catch { } } if (obstacle.CompareTag("explosion")) { try { Explosion explosion = obstacle.transform.GetComponentInParent <Explosion>(); TakeExplosion(explosion); } catch { monsterExplosion explosion = obstacle.transform.GetComponentInParent <monsterExplosion>(); TakeExplosion(explosion); } } }
public void SetUsingJob(ProjectileBehaviour p_behaviour) { if (m_behaviours.ContainsKey(p_behaviour)) { m_behaviours[p_behaviour] = true; } }
private void OneWayShot() { ProjectileBehaviour projectileBehaviour = InitProjectile(); projectileBehaviour.Init(Tags.PLAYER_PROJECTILE, shipDefiniton, Vector3.right, Quaternion.Euler(0, 0, -90)); }
// Update is called once per frame void Update() { if (Time.time >= nextFire) { nextFire = Time.time + character.attackDelay.value; anim.Play("Attack_Left"); ProjectileBehaviour proj = Instantiate(projectiles[0], position); //Vector2 heading = new Vector2(proj.enemy.transform.position.x, proj.transform.position.y); //Vector2 headingLocal = new Vector2(gameObject.transform.position.x, gameObject.transform.position.y); float angle = AngleBetweenVector2((Vector2)position.position, (Vector2)position.position + (Vector2)projectiles[0].enemy.transform.position); Debug.Log(angle); if (angle >= 45 && angle <= 135) { anim.Play("Walk_Up"); } else if (angle > -45 && angle < 45) { anim.Play("Attack_Right"); } else if (angle >= -135 && angle <= -45) { anim.Play("Walk_Down"); } else if (angle > 135 || angle < -135) { anim.Play("Attack_Left"); } } }
public void testProjectileDuration() { ProjectileBehaviour projectile = RuntimeTestHelpers.CreateObjectWithComponent <ProjectileBehaviour>(); projectile.speed = 1f; projectile.lifetime = 1f; projectile.damage = 1f; projectile.force = 1f; // start projectile projectile.InitializeAndActivate(Vector3.zero, Vector3.forward, DamageDealer.Default); Assert.IsTrue(projectile.IsAlive, "Projectile not alive after activation"); // still alive after .5s projectile.CallPrivateMethod("UpdateLifeTimer", 0.5f); Assert.IsTrue(projectile.IsAlive, "Projectile not alive after .5s"); // not alive after 1s projectile.CallPrivateMethod("UpdateLifeTimer", 0.5f); Assert.IsFalse(projectile.IsAlive, "Projectile alive after lifetime"); // projectile hasn't moved without calling update methods VectorAssert.AreEqual(Vector3.zero, projectile.PhysicsPosition, DELTA, "Physics position moved"); VectorAssert.AreEqual(Vector3.zero, projectile.transform.position, DELTA, "Transform position moved"); // physics can't move while not alive projectile.CallPrivateMethod("PhysicsUpdate", 1f); VectorAssert.AreEqual(Vector3.zero, projectile.PhysicsPosition, DELTA, "Physics position moved"); projectile.CallPrivateMethod("MoveToRaycastGoal", 1f); VectorAssert.AreEqual(Vector3.zero, projectile.transform.position, DELTA, "Transform position moved"); }
bool Shoot(Vector3 direction) { GameObject projectile = _objectPooler.SpawnFromPool("projectiles"); ProjectileBehaviour projectileBehaviour = projectile.GetComponent <ProjectileBehaviour>(); projectileBehaviour.SetProjectile(transform.position - new Vector3(0, 2, 0), direction, fireSpeed, 800.0f, damage, gameObject); return(true); }
public void AddProjectile(Projectile p_projectile, ProjectileBehaviour p_behaviour) { int id = ID++; m_projectiles.Add(p_projectile, id); m_transforms.Add(p_projectile.transform); m_dataList.Add(CreateData(p_projectile, p_behaviour, id)); }
protected override IProjData CreateData(Projectile p_projectile, ProjectileBehaviour p_behaviour, int p_id) { return(new StraightBehaviourData { ID = p_id, Direction = new float3(p_projectile.m_direction.x, p_projectile.m_direction.y, 0), Speed = p_projectile.m_info.m_speed }); }
private void Fire() { current_time = current_time - attack_speed; ProjectileBehaviour bullet = GameObject.Instantiate(projectile_template); bullet.transform.position = tower_turret.transform.position; bullet.Init(_projectile, _target.transform, _damage); }
private void OnCollisionEnter2D(Collision2D collision) { ProjectileBehaviour projectile = collision.gameObject.GetComponent <ProjectileBehaviour>(); if (projectile != null) { SoundLibrary.Instance.audioSource.PlayOneShot(SoundLibrary.Instance.arrowTok); } }
private void ThreeWayShot() { for (int i = 0; i < projectileDir.Length; i++) { ProjectileBehaviour projectileBehaviour = InitProjectile(); projectileBehaviour.Init(Tags.PLAYER_PROJECTILE, shipDefiniton, projectileDir[i], Quaternion.Euler(0, 0, -90)); } }
void OnTargetReachedEvent(ProjectileBehaviour thisProjectile) { Vector2 playerPos = player.transform.position; Vector2 playerStep = playerPos - new Vector2(thisProjectile.gameObject.transform.position.x, thisProjectile.gameObject.transform.position.y); playerStep = playerStep.normalized * 20f; thisProjectile.SetTarget(playerStep); }
public void Shot() { ProjectileBehaviour projectileBehaviour = (ProjectileBehaviour)ResourceManager.SpawnFromPool(LevelManager.ProjectileDefinitionPool.ID, transform.position, Quaternion.identity); projectileBehaviour.Init(Tags.ENEMY_PROJECTILE, ShipDefinition, Vector3.left, Quaternion.Euler(0, 0, 90)); }
private void OnTriggerEnter2D(Collider2D other) { ProjectileBehaviour otherProjectileObject = other.GetComponent <ProjectileBehaviour>(); if (otherProjectileObject != null) { GetDamage(otherProjectileObject.damage); } }
public virtual ProjectileBehaviour Clone() { ProjectileBehaviour behaviour = (ProjectileBehaviour)Activator.CreateInstance(GetType()); behaviour.m_name = m_name; behaviour.m_type = m_type; return(behaviour); }
private void OnCollisionEnter2D(Collision2D collision) { if (collision.collider.CompareTag("Projectile")) { ProjectileBehaviour hitInfo = collision.collider.GetComponent <ProjectileBehaviour>(); health -= hitInfo.damage > 0 ? hitInfo.damage : defaultIncomingDamage; explode(); } }
private IEnumerator SpawnProjectilesCoroutine(SpriteAnimationBehaviour animated, SpriteFrame frame, bool isHoming) { BaseActor actor = animated.GetComponent <BaseActor>(); int c = timeouts != null ? timeouts.Length : 0; for (int i = 0; i < count; i++) { float timeout = 0f; if (i == 0) { if (soundOnFirstProjectile != null) { var src = animated.GetComponent <AudioSource>(); if (src != null) { src.pitch = Engine.RandomFloat(0.9f, 1.1f); src.PlayOneShot(soundOnFirstProjectile); src.pitch = 1.0f; } } } if (c != 0) { timeout = timeouts[i % c]; } bool isActor = prefab.GetComponent <BaseActor>(); if (timeout > 0f) { yield return(new WaitForSeconds(timeout)); } Vector3 pos = animated.transform.position + (Vector3)actor.TransformDirection(offset); if (isActor) { var go = Instantiate(prefab, pos, Quaternion.identity); var ac = go.GetComponent <BaseActor>(); ac.Move(actor.movementDirection); ac.transform.right = Vector3.right; } else if (isHoming) { HomingProjectileBehaviour.Fire(prefab, animated.gameObject, pos, actor.movementDirection, Mathf.FloorToInt(frame.damage.value * actor.GetDamageDealt()), animated.GetComponent <AI.DefaultEnemyAI>().Target.transform); } else { ProjectileBehaviour.Fire(prefab, animated.gameObject, pos, actor.movementDirection, Mathf.FloorToInt(frame.damage.value * actor.GetDamageDealt())); } } }
public static ProjectileBehaviour Get(string p_name, bool p_reference) { ProjectileBehaviour found = m_loadedBehaviours.Find(pb => pb.m_name == p_name); if (found) { return(p_reference ? found : found.Clone()); } return(null); }
// Use this for initialization void Start() { SR = GetComponent <SpriteRenderer>(); //transform.Translate(new Vector3(transform.position.x, transform.position.y, -transform.position.y)); ProjBeh = FindObjectOfType <ProjectileBehaviour>(); //RPJ = ProjBeh.rawProjInput; FrameDelay = 0.9f; counter = 0; NextFrameTime = 0; isIdle = true; }