void Tick(float deltaSec) { if (null == _player) { return; } var specialAtkComponent = _player.specialAttackComponent; bool hasPerformedSpecial = false; if (Input.GetButtonDown("Jump")) //Spacebar { if (specialAtkComponent.cooldownTimer > specialAtkComponent.cooldown) { PerformSpecialAttack(); specialAtkComponent.cooldownTimer = 0.0f; hasPerformedSpecial = true; } else { SpecialAttackCondition param = SpecialAttackCondition.fail; _specialAtkFXSequence.Next(this, ref param, SpecialAttackCondition.fail); } } if (!hasPerformedSpecial) { specialAtkComponent.cooldownTimer += deltaSec; } }
public void Step(ref SpecialAttackCondition token, Enum condition) { var soundComponent = _playerNode.soundComponent; switch (token) { case SpecialAttackCondition.perform: { soundComponent.audioSource.PlayOneShot(soundComponent.performClip); } break; case SpecialAttackCondition.fail: { if (!soundComponent.audioSource.isPlaying) { soundComponent.audioSource.PlayOneShot(soundComponent.failClip); } } break; default: break; } }
void PerformSpecialAttack() { SpecialAttackCondition param = SpecialAttackCondition.perform; _specialAtkFXSequence.Next(this, ref param, SpecialAttackCondition.perform); Vector3 distance; Vector3 force; foreach (EnemyNode node in _enemyList) { distance = node.transformComponent.transform.position - _player.positionComponent.position; if (distance.sqrMagnitude <= _player.specialAttackComponent.sqrDistance) { force = distance.normalized * _player.specialAttackComponent.power; node.rigidBodyComponent.rigidbody.AddForce(force); } } }