2.5 update

This commit is contained in:
2026-09-28 11:07:17 +09:00
parent abd2da2057
commit 7978d82196
976 changed files with 111965 additions and 313 deletions
@@ -1,6 +1,5 @@
using BumpCombat.Core;
using System;
using BumpCombat.Constants;
using BumpCombat.Player;
using UnityEngine;
@@ -10,19 +9,26 @@ namespace BumpCombat.Progression
public sealed class ExperienceSystem : MonoBehaviour
{
private PlayerStats playerStats;
private float fractionalExperience;
private ExperienceProgress progress;
public event Action<int, int, int> OnExperienceChanged;
public event Action<int> OnLevelGained;
public event Action OnExperienceOrbPickedUp;
public int Level { get; private set; } = 1;
public int CurrentExperience { get; private set; }
public int RequiredExperience => RequiredExperienceForLevel(Level);
public int Level => progress != null ? progress.Level : 1;
public int CurrentExperience => progress != null
? progress.CurrentExperience
: 0;
public int RequiredExperience => progress != null
? progress.RequiredExperience
: RequiredExperienceForLevel(1);
private void Awake()
{
playerStats = GetComponent<PlayerStats>();
progress = new ExperienceProgress();
progress.ExperienceChanged += HandleProgressExperienceChanged;
progress.LevelGained += HandleProgressLevelGained;
}
private void Start()
@@ -48,31 +54,31 @@ namespace BumpCombat.Progression
private void AddExperienceInternal(int amount)
{
fractionalExperience += Mathf.Max(0f, playerStats.Evaluate(
float evaluatedAmount = playerStats.Evaluate(
CharacterStat.ExperienceGain,
Mathf.Max(0, amount)));
int wholeExperience = Mathf.FloorToInt(
fractionalExperience + 0.0001f);
fractionalExperience = Mathf.Max(
0f,
fractionalExperience - wholeExperience);
CurrentExperience += wholeExperience;
while (CurrentExperience >= RequiredExperience)
{
CurrentExperience -= RequiredExperience;
Level++;
OnLevelGained?.Invoke(Level);
}
Mathf.Max(0, amount));
progress.AddEvaluated(evaluatedAmount);
}
OnExperienceChanged?.Invoke(CurrentExperience, RequiredExperience, Level);
private void HandleProgressExperienceChanged(
int currentExperience,
int requiredExperience,
int level)
{
OnExperienceChanged?.Invoke(
currentExperience,
requiredExperience,
level);
}
private void HandleProgressLevelGained(int level)
{
OnLevelGained?.Invoke(level);
}
public static int RequiredExperienceForLevel(int level)
{
LevelUpConstants tuning = GameplayConstants.Current.LevelUp;
return tuning.BaseExperienceToNextLevel
+ (Mathf.Max(1, level) - 1)
* tuning.AdditionalExperiencePerLevel;
return ExperienceProgress.RequiredExperienceForLevel(level);
}
}
}