+ 전투 플레이어도 피격시 FlashWhite 기능이 추가되었습니다. + 전투 플레이어의 기본 속도 10 -> 7로 변경했습니다. + 보스 및 잡몹의 Collider를 통과할 수 있게 변경했습니다. + 보스의 스킬에 피격되면 튕겨내는 기능을 추가했습니다. + 코뿔소 스킬(EarthquakeWave)가 표시하는 것과 다르게 공격하는 오류를 수정했습니다.
97 lines
3.4 KiB
C#
97 lines
3.4 KiB
C#
using System;
|
|
using System.Collections;
|
|
using BlueWaterProject;
|
|
using Sirenix.OdinInspector;
|
|
using UnityEngine;
|
|
|
|
// ReSharper disable once CheckNamespace
|
|
namespace RhinocerosSkill
|
|
{
|
|
public class HammerAttack : SkillBase
|
|
{
|
|
[Title("추가 옵션")]
|
|
[SerializeField] private float hammerOffset = 3f;
|
|
|
|
private Collider[] hitColliders;
|
|
|
|
public override void ActivateSkill(params Action[] actions)
|
|
{
|
|
ReadySkill = false;
|
|
SkillInputData.PlayerAnimator.SetTrigger("isHammerAttack");
|
|
CoolDown(Cooldown, () => ReadySkill = true);
|
|
StartCoroutine(SkillCoroutine(actions));
|
|
}
|
|
|
|
public override bool EnableSkill()
|
|
{
|
|
if (!ReadySkill) return false;
|
|
|
|
return true;
|
|
}
|
|
|
|
protected override void BasicSetting()
|
|
{
|
|
base.BasicSetting();
|
|
|
|
hitColliders = new Collider[5];
|
|
}
|
|
|
|
private IEnumerator SkillCoroutine(params Action[] actions)
|
|
{
|
|
while (!SkillInputData.PlayerAnimator.GetCurrentAnimatorStateInfo(0).IsName("HammerAttack"))
|
|
{
|
|
yield return null;
|
|
}
|
|
|
|
var skillPlayerPosition = SkillInputData.PlayerCollider.transform.position;
|
|
var targetPosition = SkillInputData.TargetCollider.transform.position;
|
|
var targetToDirection = (targetPosition - skillPlayerPosition).normalized;
|
|
transform.position = skillPlayerPosition + targetToDirection * hammerOffset;
|
|
transform.localScale = Vector3.one * (Range * 2f);
|
|
|
|
actions[1].Invoke();
|
|
ShowIndicator();
|
|
|
|
var elapsedTime = 0f;
|
|
var fill = 1 / CastingTime;
|
|
while (elapsedTime < CastingTime)
|
|
{
|
|
elapsedTime += Time.deltaTime;
|
|
|
|
if (isUsingIndicator && indicator)
|
|
{
|
|
var fillValue = indicator.material.GetFloat(FillHash) + Time.deltaTime * fill;
|
|
indicator.material.SetFloat(FillHash, fillValue);
|
|
}
|
|
|
|
yield return null;
|
|
}
|
|
|
|
var maxSize = Physics.OverlapSphereNonAlloc(transform.position, Range, hitColliders, SkillInputData.TargetLayer);
|
|
for (var i = 0; i < maxSize; i++)
|
|
{
|
|
var iDamageable = hitColliders[i].GetComponent<IDamageable>();
|
|
iDamageable?.TakeDamage(Damage);
|
|
|
|
var iCombatable = hitColliders[i].GetComponent<ICombatable>();
|
|
if (iCombatable != null)
|
|
{
|
|
var targetToVector = hitColliders[i].transform.position - transform.position;
|
|
targetToVector.y = 0f;
|
|
var direction = targetToVector.normalized;
|
|
iCombatable.DisableMove(0.3f);
|
|
iCombatable.AddForceToDirection(direction, 7f);
|
|
}
|
|
}
|
|
|
|
HideIndicator();
|
|
|
|
while (SkillInputData.PlayerAnimator.GetCurrentAnimatorStateInfo(0).IsName("HammerAttack") &&
|
|
SkillInputData.PlayerAnimator.GetCurrentAnimatorStateInfo(0).normalizedTime < 1.0f)
|
|
{
|
|
yield return null;
|
|
}
|
|
actions[0].Invoke();
|
|
}
|
|
}
|
|
} |