internal class XUiC_StatsHUDRebirth : XUiController { private readonly CachedStringFormatter dayFormatter = new CachedStringFormatter((int _i) => _i.ToString()); private readonly CachedStringFormatter timeFormatter = new CachedStringFormatter((int _hour, int _min) => string.Format("{0:00}:{1:00}", _hour, _min)); private float lastValueStamina = 0.0f; private float lastValueHealth = 0.0f; private float lastValueWater = 0.0f; private float lastValueFood = 0.0f; private float lastValueStaminaPerc = 0.0f; private float lastValueHealthPerc = 0.0f; private float lastValueWaterPerc = 0.0f; private float lastValueFoodPerc = 0.0f; private float deltaTime; private EntityPlayerLocal LocalPlayer; private readonly CachedStringFormatterXuiRgbaColor stealthColorFormatter = new CachedStringFormatterXuiRgbaColor(); private readonly CachedStringFormatter statfillFormatter = new CachedStringFormatter((Func)(_i => _i.ToCultureInvariantString())); private readonly CachedStringFormatter statcurrentWMaxFormatterAOfB = new CachedStringFormatter((Func)((_i, _i1) => string.Format("{0}/{1}", (object)_i, (object)_i1))); private readonly CachedStringFormatter statmodifiedmaxFormatter = new CachedStringFormatter((Func)((_f1, _f2) => (_f1 / _f2).ToCultureInvariantString())); public override bool GetBindingValue(ref string value, string bindingName) { //Log.Out("XUiC_StatsHUDRebirth-GetBindingValue START"); bool bHide = flUpdateTime < 80; if (flUpdateTime < 80) { flUpdateTime = flUpdateTime + .1f; } /*Log.Out("XUiC_StatsHUDRebirth-GetBindingValue 0 flShowStatsHUDHealth: " + flShowStatsHUDHealth); Log.Out("XUiC_StatsHUDRebirth-GetBindingValue 0 flShowStatsHUDStamina: " + flShowStatsHUDStamina); Log.Out("XUiC_StatsHUDRebirth-GetBindingValue 0 bindingName: " + bindingName);*/ switch (bindingName) { case "playerStaminaModifiedMax": value = (this.LocalPlayer != null) ? (this.LocalPlayer.Stats.Stamina.ModifiedMax / this.LocalPlayer.Stats.Stamina.Max).ToString("0.##") : "0"; //Log.Out("XUiC_StatsHUDRebirth-GetBindingValue 1 playerStaminaModifiedMax: " + value); return true; case "statStaminaFill": if (this.LocalPlayer == null) { //Log.Out("XUiC_StatsHUDRebirth-GetBindingValue 4"); value = "0"; return true; } value = this.statfillFormatter.Format(Math.Max(this.lastValueStamina, 0.0f) * 1.01f); lastValueStaminaPerc = this.lastValueStamina * 100; this.lastValueStamina = Mathf.Lerp(this.lastValueStamina, this.LocalPlayer.Stats.Stamina.ValuePercentUI, this.deltaTime * 3f); //Log.Out("XUiC_StatsHUDRebirth-GetBindingValue 3 statStaminaFill: " + value); return true; case "playerHealthModifiedMax": value = (this.LocalPlayer != null) ? (this.LocalPlayer.Stats.Health.ModifiedMax / this.LocalPlayer.Stats.Health.Max).ToString("0.##") : "0"; //Log.Out("XUiC_StatsHUDRebirth-GetBindingValue 1 playerHealthModifiedMax: " + value); return true; case "statHealthFill": if (this.LocalPlayer == null) { //Log.Out("XUiC_StatsHUDRebirth-GetBindingValue 4"); value = "0"; return true; } value = this.statfillFormatter.Format(Math.Max(this.lastValueHealth, 0.0f) * 1.01f); this.lastValueHealth = Mathf.Lerp(this.lastValueHealth, this.LocalPlayer.Stats.Health.ValuePercentUI, this.deltaTime * 3f); lastValueHealthPerc = this.lastValueHealth * 100; //Log.Out("XUiC_StatsHUDRebirth-GetBindingValue 3 statHealthFill: " + value); return true; case "playerWaterModifiedMax": value = (this.LocalPlayer != null) ? (this.LocalPlayer.Stats.Water.ModifiedMax / this.LocalPlayer.Stats.Water.Max).ToString("0.##") : "0"; //Log.Out("XUiC_StatsHUDRebirth-GetBindingValue 1 playerWaterModifiedMax: " + value); return true; case "statWaterFill": if (this.LocalPlayer == null) { //Log.Out("XUiC_StatsHUDRebirth-GetBindingValue 4"); value = "0"; return true; } value = this.statfillFormatter.Format(Math.Max(this.lastValueWater, 0.0f) * 1.01f); this.lastValueWater = Mathf.Lerp(this.lastValueWater, this.LocalPlayer.Stats.Water.ValuePercentUI, this.deltaTime * 3f); lastValueWaterPerc = this.lastValueWater * 100; //Log.Out("XUiC_StatsHUDRebirth-GetBindingValue 3 statWaterFill: " + value); return true; case "playerFoodModifiedMax": value = (this.LocalPlayer != null) ? (this.LocalPlayer.Stats.Food.ModifiedMax / this.LocalPlayer.Stats.Food.Max).ToString("0.##") : "0"; //Log.Out("XUiC_StatsHUDRebirth-GetBindingValue 1 playerFoodModifiedMax: " + value); return true; case "statFoodFill": if (this.LocalPlayer == null) { //Log.Out("XUiC_StatsHUDRebirth-GetBindingValue 4"); value = "0"; return true; } value = this.statfillFormatter.Format(Math.Max(this.lastValueFood, 0.0f) * 1.01f); this.lastValueFood = Mathf.Lerp(this.lastValueFood, this.LocalPlayer.Stats.Food.ValuePercentUI, this.deltaTime * 3f); lastValueFoodPerc = this.lastValueFood * 100; //Log.Out("XUiC_StatsHUDRebirth-GetBindingValue 3 statFoodFill: " + value); return true; default: //Log.Out("XUiC_StatsHUDRebirth-GetBindingValue 12"); return false; } } public override void OnOpen() { //Log.Out("XUiC_StatsHUDRebirth-OnOpen START"); base.OnOpen(); if (this.LocalPlayer == null && XUi.IsGameRunning()) { //Log.Out("XUiC_StatsHUDRebirth-OnOpen 1"); this.LocalPlayer = this.xui.playerUI.entityPlayer; } this.IsDirty = true; this.RefreshBindings(true); } public override void Update(float _dt) { //Log.Out("XUiC_StatsHUDRebirth-Update START"); base.Update(_dt); if (this.LocalPlayer == null) { //Log.Out("XUiC_StatsHUDRebirth-Update 1"); return; } this.deltaTime = _dt; this.RefreshBindings(true); } protected float flUpdateTime; }