코드 리팩토링
재사용성 및 확장성을 고려하여 코드 전반을 리팩토링함
This commit is contained in:
44
Assets/Scripts/Player/MiningBehavior.cs
Normal file
44
Assets/Scripts/Player/MiningBehavior.cs
Normal file
@@ -0,0 +1,44 @@
|
||||
using UnityEngine;
|
||||
|
||||
/// <summary>
|
||||
/// Mining behavior for pickaxes and similar tools.
|
||||
/// </summary>
|
||||
[CreateAssetMenu(menuName = "Items/Behaviors/Mining Behavior")]
|
||||
public class MiningBehavior : ItemBehavior
|
||||
{
|
||||
[Header("Mining Settings")]
|
||||
[SerializeField] private int damage = 50;
|
||||
|
||||
private void OnEnable()
|
||||
{
|
||||
// Set default mining values
|
||||
if (string.IsNullOrEmpty(behaviorName)) behaviorName = "Mine";
|
||||
if (string.IsNullOrEmpty(animTrigger)) animTrigger = "Attack";
|
||||
canRepeat = true;
|
||||
}
|
||||
|
||||
public override bool CanUse(GameObject user, GameObject target)
|
||||
{
|
||||
// Can always swing, but only deals damage if hitting a mineable block
|
||||
return true;
|
||||
}
|
||||
|
||||
public override void Use(GameObject user, GameObject target)
|
||||
{
|
||||
if (target == null) return;
|
||||
|
||||
// Use IDamageable interface for all damageable objects
|
||||
if (target.TryGetComponent<IDamageable>(out var damageable))
|
||||
{
|
||||
damageable.TakeDamage(new DamageInfo(damage, DamageType.Mining, user));
|
||||
}
|
||||
}
|
||||
|
||||
public override string GetBlockedReason(GameObject user, GameObject target)
|
||||
{
|
||||
if (target == null) return "No target";
|
||||
if (!target.TryGetComponent<IDamageable>(out _))
|
||||
return "Cannot mine this object";
|
||||
return null;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user