Many changes to Invector inventory system, added WIP UI system, added implementation for max stamina, moving speed, attack speed, attack power, thorns

This commit is contained in:
2025-12-05 15:10:52 +01:00
parent 53fa05e246
commit af7706bfac
21 changed files with 2352 additions and 3868 deletions

View File

@@ -62,6 +62,7 @@ namespace Beyond
public static Player Instance => s_instance;
public bItemManager ItemManager { private set; get; }
public WeaponTrail ActiveWeaponTrail { set; get; }
private PlayerAttribute faithAttribute;
@@ -83,7 +84,8 @@ namespace Beyond
speedMult = 1f,
faithRegenMult = 1f,
attackSpeedMult = 1f,
thornDamageMult = 1f
thornDamageMult = 1f,
staminaMult = 1f
};
public TrinketManager.TrinketStats CurrentTrinketStats => m_trinketStats;
@@ -92,13 +94,28 @@ namespace Beyond
{
m_trinketStats = newStats;
// Force stats recalculation
UodatePlayerStatistics();
UpdatePlayerStatistics();
// Apply immediate effects
if (m_vController)
if (m_vController)
{
m_vController.speedMultiplier = m_trinketStats.speedMult;
// 2. Apply Attack Speed (UI Method)
if (m_vController.animator)
m_vController.animator.SetFloat("AttackSpeed", m_trinketStats.attackSpeedMult);
}
// 3. Apply Damage Multiplier (NEW)
if (m_meleeManager)
{
// Calculate the base multiplier from stats
float totalDamageMult = m_trinketStats.damageMult;
totalDamageMult += 0.10f;
// Send to Melee Manager
m_meleeManager.SetGlobalDamageMultiplier(totalDamageMult);
}
}
// --- TRINKET SYSTEM INTEGRATION END ---
@@ -155,7 +172,7 @@ namespace Beyond
private float faithBaseMaxValue = 100f;
private System.Action onMenuScrollClosed;
public System.Action<float> onStatsUpdated;
public System.Action<float, float, float> onStatsUpdated;
private UnityAction<Transform> onDialogueEnded;
private bLockOn m_lockOn;
public bLockOn LockOn => m_lockOn;
@@ -483,7 +500,7 @@ namespace Beyond
Lua.UnregisterFunction("GetMaturity");
}
public void UodatePlayerStatistics()
public void UpdatePlayerStatistics()
{
float maturityMupltiplier = (float)(1 + (float)(0.5f * maturityAttribute.AttributeCurrentValue / maturityAttribute.AttributeMaxValue));
float maxBrightness = brightnessAttribute.AttributeMaxValue;
@@ -507,33 +524,36 @@ namespace Beyond
{
// --- TRINKET INTEGRATION IN STATS CALCULATION ---
// Faith Regen
faithRegenMultiplier = sceneDependantFaithRegenMultiplier * finalMultiplier * m_trinketStats.faithRegenMult;
// Max Faith
// 1. Calculate specific total multipliers for UI scaling
// 1. Calculate specific total multipliers
float totalHealthMult = finalMultiplier * m_trinketStats.healthMult;
float totalFaithMult = finalMultiplier * m_trinketStats.faithMult;
float totalStaminaMult = finalMultiplier * (m_trinketStats.staminaMult > 0 ? m_trinketStats.staminaMult : 1f); // Handle 0 default
// 2. Capture Current Health Percentage BEFORE changes
float healthPercent = m_vController.maxHealth > 0 ? m_vController.currentHealth / m_vController.maxHealth : 1f;
// 3. Apply Stats
// Faith
faithRegenMultiplier = sceneDependantFaithRegenMultiplier * finalMultiplier * m_trinketStats.faithRegenMult;
faithAttribute.AttributeMaxValue = Mathf.RoundToInt(faithBaseMaxValue * totalFaithMult);
// Max Health
float totalHealthMult = finalMultiplier * m_trinketStats.healthMult;
m_vController.maxHealth = Mathf.RoundToInt(totalHealthMult * healthBaseMaxValue);
int newMaxHealth = Mathf.RoundToInt(totalHealthMult * healthBaseMaxValue);
m_vController.maxHealth = newMaxHealth;
// Reset health if caps changed downwards
if (m_vController.maxHealth < m_vController.currentHealth)
{
m_vController.ResetHealth();
}
// Apply Proportional Current Health
// We update the current health to match the previous percentage
//m_vController.currentHealth = Mathf.RoundToInt(newMaxHealth * healthPercent);
// Health Recovery
m_vController.SetHealthRecovery(finalMultiplier * healthBaseRegenValue);
// Stamina (assuming no trinket mult for stamina yet, if needed add m_trinketStats.staminaMult)
m_vController.maxStamina = Mathf.Round(finalMultiplier * staminaBaseMaxValue);
// Stamina
m_vController.maxStamina = Mathf.Round(totalStaminaMult * staminaBaseMaxValue);
m_vController.staminaRecovery = (finalMultiplier * staminaBaseRegenValue);
// ------------------------------------------------
onStatsUpdated?.Invoke(finalMultiplier);
onStatsUpdated?.Invoke(totalHealthMult, totalFaithMult, totalStaminaMult);
}
public void UpdatePlayerStatisticsOnMaturityChange(float val = 0, float prevVal = 0)

View File

@@ -12,7 +12,7 @@ namespace Beyond
private void Start()
{
Player.Instance.sceneDependantFaithRegenMultiplier = faithRegenMultiplier;
Player.Instance.UodatePlayerStatistics();
Player.Instance.UpdatePlayerStatistics();
}
// Update is called once per frame