57 lines
1.5 KiB
C#
57 lines
1.5 KiB
C#
using EntityStates;
|
|
using JetBrains.Annotations;
|
|
using UnityEngine;
|
|
|
|
namespace RoR2.Skills;
|
|
|
|
[CreateAssetMenu(menuName = "RoR2/SkillDef/VoidRaidCrabWeaponSkillDef")]
|
|
public class VoidRaidCrabWeaponSkillDef : SkillDef
|
|
{
|
|
private class InstanceData : BaseSkillInstanceData
|
|
{
|
|
public EntityStateMachine bodyStateMachine;
|
|
|
|
public EntityStateMachine weaponStateMachine;
|
|
}
|
|
|
|
private const string bodyStateMachineName = "Body";
|
|
|
|
private const string weaponStateMachineName = "Weapon";
|
|
|
|
public override BaseSkillInstanceData OnAssigned(GenericSkill skillSlot)
|
|
{
|
|
return new InstanceData
|
|
{
|
|
bodyStateMachine = EntityStateMachine.FindByCustomName(skillSlot.gameObject, "Body"),
|
|
weaponStateMachine = EntityStateMachine.FindByCustomName(skillSlot.gameObject, "Weapon")
|
|
};
|
|
}
|
|
|
|
public override bool IsReady([NotNull] GenericSkill skillSlot)
|
|
{
|
|
if (base.IsReady(skillSlot) && CanReceiveInput(skillSlot))
|
|
{
|
|
return !IsWeaponBusy(skillSlot);
|
|
}
|
|
return false;
|
|
}
|
|
|
|
private bool CanReceiveInput([NotNull] GenericSkill skillSlot)
|
|
{
|
|
if (skillSlot.skillInstanceData is InstanceData instanceData && (bool)instanceData.bodyStateMachine)
|
|
{
|
|
return instanceData.bodyStateMachine.state is GenericCharacterMain;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
private bool IsWeaponBusy([NotNull] GenericSkill skillSlot)
|
|
{
|
|
if (skillSlot.skillInstanceData is InstanceData instanceData && (bool)instanceData.weaponStateMachine)
|
|
{
|
|
return !instanceData.weaponStateMachine.IsInMainState();
|
|
}
|
|
return false;
|
|
}
|
|
}
|