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; }
/////////////////////////////////////// // 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; }
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); }
public void UnEQuip() { shieldStates = boomerangShieldStates.unequiped; }
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(); } } }