CTT/Unity/Assets/HotfixView/System/FUI_pbHpAndShieldSystem.cs

170 lines
5.6 KiB
C#

using System;
using System.Collections.Generic;
namespace ET
{
public static class FUI_pbHpAndShieldSystem
{
private static void SetMaxDestenty(this FUI_pbHpAndShield self, float value)
{
float actual = 0;
var list = self.m_listLines;
list.RemoveChildrenToPool();
using var listComponent = ListComponent<float>.Create();
GetLineWidth(value, listComponent.List, out float extValue);
actual = list.numItems = listComponent.List.Count;
for (int i = 0; i < list.numItems; i++)
{
list.GetChildAt(i).width = listComponent.List[i];
}
if (actual == 0)
return;
Log.Info(value+" , "+extValue);
float normalWidth = list.actualWidth / (actual - 1 + extValue);
list.columnGap = normalWidth - 1;
}
private static void GetLineWidth(float value, List<float> list, out float extValue)
{
const int destenty_min = 2_0000;
const int destenty_mid = 10_0000;
const int destenty_max = 200_0000;
const float largeMaxWidth = 3;
const float largeWidth = 2;
const float shortWidth = 1;
if (value <= destenty_min)
{
//do nothing
extValue = 0;
}
else if (value <= destenty_mid)
{
//全显示细
var actual = value / destenty_min;
list.Add(shortWidth);
int max = (int) actual;
extValue = value % destenty_min / destenty_min;
for (int i = 0; i < max; i++)
{
list.Add(shortWidth);
}
}
else if (value <= destenty_mid * 5)
{
//粗细
int max = (int) value / destenty_min;
extValue = value % destenty_min / destenty_min;
int times = 5;
int largeCount = (int) value / destenty_mid;
//多余的
int extCount = max - largeCount * times;
list.Add(shortWidth);
for (int i = 0; i < largeCount; i++)
{
for (int j = 0; j < times-1; j++)
{
list.Add(shortWidth);
}
list.Add(largeWidth);
}
for (int i = 0; i < extCount; i++)
{
list.Add(shortWidth);
}
}
else if (value <= destenty_max)
{
var actual = value / destenty_mid;
int max = (int) actual;
extValue = value % destenty_mid / destenty_mid;
list.Add(shortWidth);
for (int i = 0; i < max; i++)
{
list.Add(largeWidth);
}
}
// else if (value <= destenty_max*5)
// {
// //粗细
// int max = (int) value / destenty_mid;
// extValue = value % destenty_mid / destenty_mid;
// int times = 5;
// int largeCount = (int) value / destenty_max;
// //多余的
// max = (int) (max * 5f /( destenty_max / destenty_mid));
// int extCount = max - largeCount * times;
// list.Add(shortWidth);
// for (int i = 0; i < largeCount; i++)
// {
// for (int j = 0; j < times-1; j++)
// {
// list.Add(largeWidth);
// }
//
// list.Add(largeMaxWidth);
// }
//
// for (int i = 0; i < extCount; i++)
// {
// list.Add(largeWidth);
// }
// }
else
{
var actual = value / destenty_max;
int max = (int) actual;
extValue = value % destenty_max / destenty_max;
list.Add(shortWidth);
for (int i = 0; i < max; i++)
{
list.Add(largeMaxWidth);
}
}
}
public static void SetMaxShield(this FUI_pbHpAndShield self, float hp, float shield, float maxHp)
{
var max = maxHp;
if (hp + shield > maxHp)
{
max = hp + shield;
}
self.m_hp.width = hp / max * self.m_defaultHp.width;
self.m_shield.width = shield / max * self.m_defaultHp.width;
self.m_hp.fillAmount = 100;
self.m_shield.fillAmount = 100;
SetMaxDestenty(self, max);
}
public static void SetHpAndShield(this FUI_pbHpAndShield self, float hp, float shield, float maxHp)
{
if (maxHp == 0)
{
throw new Exception("maxHp can not be 0");
}
if (hp < 0) hp = 0;
if (hp > maxHp) hp = maxHp;
if (shield < 0) shield = 0;
if (hp + shield > maxHp)
{
SetMaxShield(self, hp, shield, maxHp);
return;
}
var oldWidth = self.m_defaultHp.width;
self.m_hp.width = hp / maxHp * oldWidth;
self.m_shield.width = shield / maxHp * oldWidth;
self.m_upBar.visible = false;
//优化
self.m_downBar.TweenScaleX(hp / maxHp, 1f);
}
}
}