示例#1
0
    public void ThrowShield(Vector3 position)
    {
        auxShield.transform.SetParent(null);
        auxShield.transform.rotation = Quaternion.Euler(new Vector3(-90, 0, 0));
        _hero.ToggleBlock(false);
        auxShield.SetActive(true);
        _shield.SetActive(false);

        flying.Play();

        RaycastHit hit;

        if (Physics.Raycast(transform.position, _hero.GetCharMove().GetRotatorDirection(), out hit, throwRange, raycastMask))
        {
            spinPosition = hit.point - _hero.GetCharMove().GetRotatorDirection();
        }
        else
        {
            spinPosition = _shield.transform.position + _hero.GetCharMove().GetRotatorDirection() * throwRange;
        }

        startingPos = _shield.transform.position;


        timeCount    = 0;
        shieldStates = boomerangShieldStates.isGoing;
    }
示例#2
0
    ///////////////////////////////////////
    //  EQUIP
    ///////////////////////////////////////
    public void Equip()
    {
        _hero   = Main.instance.GetChar();
        _shield = _hero.escudo;
        dmgData = auxShield.GetComponent <DamageData>();
        dmgData.Initialize(_hero);
        dmgData.SetDamage(damage).SetDamageTick(false).SetDamageType(damageType).SetKnockback(0).SetPositionAndDirection(_shield.transform.position);

        auxParent    = auxShield.transform.parent;
        shieldStates = boomerangShieldStates.idle;
    }
示例#3
0
    public void OnEnd()
    {
        _hero.ToggleBlock(true);
        _shield.SetActive(true);
        auxShield.transform.SetParent(auxParent);
        auxShield.SetActive(false);
        timeCount = 0;

        shieldStates = boomerangShieldStates.idle;
        auxShield.transform.position = _shield.transform.position;

        //AudioManager.instance.StopAllSounds(_rotatingShield_SoundName);
    }
示例#4
0
 public void UnEQuip()
 {
     shieldStates = boomerangShieldStates.unequiped;
 }
示例#5
0
    private void Update()
    {
        auxShield.transform.Rotate(v3 * rotSpeed);

        if (shieldStates != boomerangShieldStates.idle && shieldStates != boomerangShieldStates.unequiped)
        {
            var enemiesClose = Extensions.FindInRadius <DamageReceiver>(auxShield.transform.position, radius);

            foreach (DamageReceiver enemy in enemiesClose)
            {
                if (enemy.GetComponent <EntityBase>() != _hero)
                {
                    enemy.TakeDamage(dmgData);
                }
            }
        }

        if (shieldStates == boomerangShieldStates.isGoing)
        {
            var dir = spinPosition - startingPos;
            dir = dir.normalized;

            flying.transform.position = auxShield.transform.position;
            flying.transform.forward  = -dir;

            if (Vector3.Distance(auxShield.transform.position, spinPosition) > .5f)
            {
                auxShield.transform.position += Time.deltaTime * throwSpeed * dir;
            }
            else
            {
                flying.Stop();
                var totems = Extensions.FindInRadius <Totem>(auxShield.transform.position, radius);
                foreach (var totem in totems)
                {
                    totem.GetComponent <EffectReceiver>().TakeEffect(EffectName.OnPetrify, 1.5f);
                }
                var palancas = Extensions.FindInRadius <Palanca>(auxShield.transform.position, radius);
                foreach (var palanca in palancas)
                {
                    palanca.OnExecute(_hero);
                }
                shieldStates = boomerangShieldStates.isSpinning;
            }
        }
        else if (shieldStates == boomerangShieldStates.isSpinning)
        {
            timeCount += Time.deltaTime;

            if (timeCount > spinDuration)
            {
                shieldStates = boomerangShieldStates.isReturning;
                flying.Play();
                timeCount = 0;
            }
        }
        else if (shieldStates == boomerangShieldStates.isReturning)
        {
            var dir = _shield.transform.position - auxShield.transform.position;
            dir = dir.normalized;

            flying.transform.position = auxShield.transform.position;
            flying.transform.forward  = -dir;

            if (Vector3.Distance(auxShield.transform.position, _shield.transform.position) >= distanceToTriggerCatch)
            {
                auxShield.transform.position += Time.deltaTime * (returnSpeed * 1 + Time.deltaTime) * dir;
            }
            else
            {
                OnEnd();
            }
        }
    }