Ejemplo n.º 1
0
 // 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();
         }
     }
 }
Ejemplo n.º 2
0
    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);
     }
 }
Ejemplo n.º 4
0
    /// <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;
        }
    }
Ejemplo n.º 5
0
    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());
        }
    }
Ejemplo n.º 7
0
    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();
                }
            }
        }
    }
Ejemplo n.º 8
0
    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);
            }
        }
    }
Ejemplo n.º 10
0
    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);
        }
    }
Ejemplo n.º 11
0
    // 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;
    }
Ejemplo n.º 12
0
    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);
            }
        }
    }
Ejemplo n.º 13
0
 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));
    }
Ejemplo n.º 15
0
 // 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");
         }
     }
 }
Ejemplo n.º 16
0
        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);
    }
Ejemplo n.º 18
0
    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));
    }
Ejemplo n.º 19
0
 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
     });
 }
Ejemplo n.º 20
0
    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);
    }
Ejemplo n.º 21
0
    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));
     }
 }
Ejemplo n.º 23
0
    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));
    }
Ejemplo n.º 25
0
    private void OnTriggerEnter2D(Collider2D other)
    {
        ProjectileBehaviour otherProjectileObject = other.GetComponent <ProjectileBehaviour>();

        if (otherProjectileObject != null)
        {
            GetDamage(otherProjectileObject.damage);
        }
    }
Ejemplo n.º 26
0
    public virtual ProjectileBehaviour Clone()
    {
        ProjectileBehaviour behaviour = (ProjectileBehaviour)Activator.CreateInstance(GetType());

        behaviour.m_name = m_name;
        behaviour.m_type = m_type;

        return(behaviour);
    }
Ejemplo n.º 27
0
    private void OnCollisionEnter2D(Collision2D collision)
    {
        if (collision.collider.CompareTag("Projectile"))
        {
            ProjectileBehaviour hitInfo = collision.collider.GetComponent <ProjectileBehaviour>();

            health -= hitInfo.damage > 0 ? hitInfo.damage : defaultIncomingDamage;
            explode();
        }
    }
Ejemplo n.º 28
0
        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()));
                }
            }
        }
Ejemplo n.º 29
0
    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);
    }
Ejemplo n.º 30
0
    // 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;
    }