gameplay手游触屏支持,一些小优化和修复

This commit is contained in:
FloatGaming
2026-07-15 01:32:14 +08:00
parent 020ca473c7
commit d9990d6fdb
17 changed files with 1489 additions and 50 deletions
+110
View File
@@ -189,6 +189,77 @@ public class AllyHero_SO : ScriptableObject
return EquipmentSkillGroupLibrary.ResolveSkillGroup(groupID);
}
public bool ValidateEquippedSkillSelections(bool persistIfChanged = true)
{
LoadEquippedSkillsFromLocal();
LoadEquippedEquipmentFromLocal();
if (equippedSkillGroupIDs == null)
{
equippedSkillGroupIDs = Array.Empty<int>();
}
int currentLevelId = GetEffectiveLevelForCurrentEXP()?.levelID ?? 0;
int maxSkillSlots = Mathf.Max(0, GetEffectiveSkillSlotLimit());
List<int> validatedGroupIds = new List<int>(Mathf.Min(equippedSkillGroupIDs.Length, maxSkillSlots));
HashSet<int> seenGroupIds = new HashSet<int>();
for (int i = 0; i < equippedSkillGroupIDs.Length; i++)
{
int groupId = equippedSkillGroupIDs[i];
if (groupId <= 0 || !seenGroupIds.Add(groupId))
{
continue;
}
if (validatedGroupIds.Count >= maxSkillSlots)
{
continue;
}
SkillGroup group = GetOwnedSkillGroupByID(groupId);
if (group == null)
{
continue;
}
int requiredLevelId = Mathf.Clamp(group.thisSkill_levelLimit, 1, 4);
if (currentLevelId < requiredLevelId)
{
continue;
}
validatedGroupIds.Add(groupId);
}
int[] validatedArray = validatedGroupIds.ToArray();
bool changed = !AreSkillGroupIdArraysEqual(equippedSkillGroupIDs, validatedArray);
if (!changed)
{
return false;
}
equippedSkillGroupIDs = validatedArray;
if (persistIfChanged)
{
SaveEquippedSkillsToLocal();
}
#if UNITY_EDITOR
if (!Application.isPlaying)
{
EditorUtility.SetDirty(this);
if (persistIfChanged)
{
AssetDatabase.SaveAssets();
}
}
#endif
return true;
}
public int[] GetEffectiveEquippedSkillGroupIDs()
{
var result = new List<int>();
@@ -365,6 +436,45 @@ public class AllyHero_SO : ScriptableObject
result.Add(groupId);
}
private static bool AreSkillGroupIdArraysEqual(int[] left, int[] right)
{
int leftLength = left != null ? left.Length : 0;
int rightLength = right != null ? right.Length : 0;
if (leftLength != rightLength)
{
return false;
}
for (int i = 0; i < leftLength; i++)
{
if (left[i] != right[i])
{
return false;
}
}
return true;
}
private SkillGroup GetOwnedSkillGroupByID(int groupId)
{
if (skillGroups == null || skillGroups.Length == 0)
{
return null;
}
for (int i = 0; i < skillGroups.Length; i++)
{
SkillGroup group = skillGroups[i];
if (group != null && group.skillGroupID == groupId)
{
return group;
}
}
return null;
}
public int GetUnlockedLevelIndex()
{
List<AllyLevelInfo> sorted = BuildSortedLevelStats();