using System;
using System.IO;
using Terraria.ModLoader.IO;
namespace SoulHarvest.Common;
public sealed class ReaperBranchState
{
private readonly byte[] skillLevels = new byte[ReaperDefinitions.SkillsPerBranch];
public ReaperStage Stage { get; internal set; }
public int GetSkillLevel(int skillIndex)
{
return skillIndex >= 0 && skillIndex < skillLevels.Length ? skillLevels[skillIndex] : 0;
}
internal bool TryUpgradeSkill(int skillIndex)
{
if (skillIndex < 0 || skillIndex >= skillLevels.Length
|| skillIndex >= (int)Stage
|| skillLevels[skillIndex] <= 0
|| skillLevels[skillIndex] >= ReaperDefinitions.MaximumSkillLevel)
{
return false;
}
skillLevels[skillIndex]++;
return true;
}
internal void SetSkillLevel(int skillIndex, int level)
{
if (skillIndex < 0 || skillIndex >= skillLevels.Length)
return;
int maximumForStage = skillIndex < (int)Stage ? ReaperDefinitions.MaximumSkillLevel : 0;
skillLevels[skillIndex] = (byte)Math.Clamp(level, 0, maximumForStage);
}
internal void EnsureStageSkills()
{
for (int index = 0; index < skillLevels.Length; index++)
{
if (index < (int)Stage && skillLevels[index] == 0)
skillLevels[index] = 1;
else if (index >= (int)Stage)
skillLevels[index] = 0;
else
skillLevels[index] = (byte)Math.Clamp((int)skillLevels[index], 1, ReaperDefinitions.MaximumSkillLevel);
}
}
internal void Reset()
{
Stage = ReaperStage.Locked;
Array.Clear(skillLevels);
}
internal void CopySkillLevelsTo(byte[] destination, int destinationIndex)
{
Array.Copy(skillLevels, 0, destination, destinationIndex, skillLevels.Length);
}
}
using System;
using System.IO;
using Terraria.ModLoader.IO;
namespace SoulHarvest.Common;
public sealed class ReaperBranchState
{
private readonly byte[] skillLevels = new byte[ReaperDefinitions.SkillsPerBranch];
public ReaperStage Stage { get; internal set; }
public int GetSkillLevel(int skillIndex)
{
return skillIndex >= 0 && skillIndex < skillLevels.Length ? skillLevels[skillIndex] : 0;
}
internal bool TryUpgradeSkill(int skillIndex)
{
if (skillIndex < 0 || skillIndex >= skillLevels.Length
|| skillIndex >= (int)Stage
|| skillLevels[skillIndex] <= 0
|| skillLevels[skillIndex] >= ReaperDefinitions.MaximumSkillLevel)
{
return false;
}
skillLevels[skillIndex]++;
return true;
}
internal void SetSkillLevel(int skillIndex, int level)
{
if (skillIndex < 0 || skillIndex >= skillLevels.Length)
return;
int maximumForStage = skillIndex < (int)Stage ? ReaperDefinitions.MaximumSkillLevel : 0;
skillLevels[skillIndex] = (byte)Math.Clamp(level, 0, maximumForStage);
}
internal void EnsureStageSkills()
{
for (int index = 0; index < skillLevels.Length; index++)
{
if (index < (int)Stage && skillLevels[index] == 0)
skillLevels[index] = 1;
else if (index >= (int)Stage)
skillLevels[index] = 0;
else
skillLevels[index] = (byte)Math.Clamp((int)skillLevels[index], 1, ReaperDefinitions.MaximumSkillLevel);
}
}
internal void Reset()
{
Stage = ReaperStage.Locked;
Array.Clear(skillLevels);
}
internal void CopySkillLevelsTo(byte[] destination, int destinationIndex)
{
Array.Copy(skillLevels, 0, destination, destinationIndex, skillLevels.Length);
}
}