Example #1
0
 public void Knockback()
 {
     Collider.enabled = false;
     transform.Translate(knockbackData.Force * Time.deltaTime);
     knockbackData.Distance -= knockbackData.Force.magnitude * Time.deltaTime;
     if (knockbackData.Distance < 0)
     {
         Collider.enabled = true;
         knockbackData    = null;
     }
 }
Example #2
0
    // Start is called before the first frame update
    void Start()
    {
        knockbackData = FindObjectOfType <KnockbackData>();

        knockbackData.RegisterObserver(this);

        //Initialize reference to Percent Tracker
        //PercentTracker = GameObject.FindGameObjectWithTag("PercentTracker");
        percentGauge = GameObject.FindObjectOfType <PercentGauge>();
        //personalCollider = GetComponent<SphereCollider>();

        //Debug.Log(Angle_Right + " " +  Multiplier_RL + " " + Angle_Upwards + " " + Multiplier_UD + " " + Angle_Forwards + " " + Multiplier_FB);
        knockback_Angle = new Vector3(Angle_Right * Multiplier_RL, Angle_Upwards * Multiplier_UD, Angle_Forwards * Multiplier_FB);
    }
Example #3
0
    public void Knockback(Vector3 direction, KnockbackData data)
    {
        direction.y               = 0f;
        _initKnockbackPosition    = transform.position;
        _finalKnockbackPosition   = _initKnockbackPosition + direction * data.distance;
        _currentKnockbackDuration = data.duration;
        _knockbackTime            = Time.time;
        _knockbackBuffered        = true;
        _forcesEnabled            = false;
        Stop();

        //_rb.AddForce(force, ForceMode.Impulse);
        //gameObject.SetActive(false);
    }
Example #4
0
    protected void FixedUpdate()
    {
        if (Target == null)
        {
            SetTarget();
        }

        if (Target.transform.position.magnitude > 8)
        {
            knockbackData = null;
        }

        if (knockbackData != null)
        {
            Knockback();
            return;
        }

        Vector3 Distance = Target.transform.position - transform.position;

        if (Distance.magnitude > Range)
        {
            if (IsAttacking)
            {
                StopCoroutine(Attack());
                IsAttacking = false;
            }

            Vector3 Displacement = Distance.normalized * Speed * SpeedMultiplier * Time.fixedDeltaTime;
            transform.Translate(Displacement, Space.World);
        }
        else
        {
            if (!IsAttacking)
            {
                StartCoroutine(Attack());
                IsAttacking = true;
            }
        }
    }
Example #5
0
    void Explode()
    {
        List <Enemy> Enemies = Manager.Instance.Enemies;

        for (int i = 0; i < Enemies.Count; i++)
        {
            Enemy   NearUnit  = Enemies[i];
            Vector3 Direction = NearUnit.transform.position - transform.position;
            if (Direction.magnitude < KnockbackRadius)
            {
                KnockbackData knockbackData = new KnockbackData();
                knockbackData.Force    = Direction.normalized * KnockbackForce;
                knockbackData.Distance = KnockbackDistance;
                NearUnit.knockbackData = knockbackData;
            }
        }

        if (Explosion)
        {
            Instantiate(Explosion, transform.position, Quaternion.identity, transform.parent);
        }
        Destroy(gameObject);
    }