r2mods/ilspy_dump/ror2_csproj/RoR2.Skills/RailgunSkillDef.cs

82 lines
2.0 KiB
C#
Raw Normal View History

2024-10-04 07:26:37 +00:00
using EntityStates.Railgunner.Backpack;
using EntityStates.Railgunner.Reload;
using JetBrains.Annotations;
using UnityEngine;
namespace RoR2.Skills;
[CreateAssetMenu(menuName = "RoR2/SkillDef/RailgunSkillDef")]
public class RailgunSkillDef : SkillDef
{
private class InstanceData : BaseSkillInstanceData
{
public EntityStateMachine backpackStateMachine;
public EntityStateMachine reloadStateMachine;
}
private const string backpackStateMachineName = "Backpack";
private const string reloadStateMachineName = "Reload";
[SerializeField]
public Sprite offlineIcon;
[SerializeField]
public bool restockOnReload;
public override BaseSkillInstanceData OnAssigned(GenericSkill skillSlot)
{
return new InstanceData
{
backpackStateMachine = EntityStateMachine.FindByCustomName(skillSlot.gameObject, "Backpack"),
reloadStateMachine = EntityStateMachine.FindByCustomName(skillSlot.gameObject, "Reload")
};
}
private bool IsBackpackOffline([NotNull] GenericSkill skillSlot)
{
if (skillSlot.skillInstanceData is InstanceData instanceData && (bool)instanceData.backpackStateMachine)
{
return instanceData.backpackStateMachine.state is Offline;
}
return false;
}
private bool IsReloading([NotNull] GenericSkill skillSlot)
{
if (skillSlot.skillInstanceData is InstanceData instanceData && (bool)instanceData.reloadStateMachine)
{
return instanceData.reloadStateMachine.state is Reloading;
}
return false;
}
public override bool IsReady([NotNull] GenericSkill skillSlot)
{
if (base.IsReady(skillSlot) && !IsBackpackOffline(skillSlot))
{
return !IsReloading(skillSlot);
}
return false;
}
public override void OnFixedUpdate([NotNull] GenericSkill skillSlot, float deltaTime)
{
base.OnFixedUpdate(skillSlot, deltaTime);
if (IsBackpackOffline(skillSlot))
{
skillSlot.rechargeStopwatch = 0f;
}
}
public override Sprite GetCurrentIcon([NotNull] GenericSkill skillSlot)
{
if (IsBackpackOffline(skillSlot))
{
return offlineIcon;
}
return base.GetCurrentIcon(skillSlot);
}
}