package attribute
func NewHealthPoint(pHp *FixedNumeric) *HealthPoint {
return &HealthPoint{
Hp: pHp,
MaxHp: NewAttributeNumeric(pHp.Value()),
CurrMaxHp: NewAttributeNumeric(pHp.Value()),
CurrMaxHpPro: NewAttributeNumeric(0),
CurrMaxHpAppend: NewAttributeNumeric(0),
}
}
///
/// 生命值实体
///
type HealthPoint struct {
///
/// 生命值
///
Hp *FixedNumeric
///
/// 最大生命值
///
MaxHp *AttributeNumeric
///
/// 当前最大生命值
///
CurrMaxHp *AttributeNumeric
///
/// 当前最大生命百分比加成
///
CurrMaxHpPro *AttributeNumeric
///
/// 当前最大生命加成
///
CurrMaxHpAppend *AttributeNumeric
}
///
/// 重置当前生命值为最大值
///
func (this *HealthPoint) Reset() {
this.Hp.SetFloat(this.CurrMaxHp.Value())
}
func (this *HealthPoint) Value() int32 {
return int32(this.Hp.Value())
}
func (this *HealthPoint) MaxValue() int32 {
return int32(this.CurrMaxHp.Value())
}
func (this *HealthPoint) OnChange() {
//先计算当前血量百分比
var per = this.Percent()
// 当前最大生命值 = 总生命 * ( 1 + 当前最大生命百分比加成 )+ 当前最大生命加成
//FightDebug.Log($"增加前属性{(MaxHp.Fixed)}----- {(1 + CurrMaxHpPro.Fixed)}----- {CurrMaxHpAppend.Fixed}");
this.CurrMaxHp.SetBase((FixedPoint_Multiply(this.MaxHp.Fixed(), (NewFixedPoint(1)+this.CurrMaxHpPro.Fixed())) + this.CurrMaxHpAppend.Fixed()).Scalar())
//计算变化之后的当前血量
var curHp = FixedPoint_Multiply(this.CurrMaxHp.Fixed(), NewFixedPoint(per))
this.Hp.Set(curHp)
//FightDebug.Log($"增加后属性{(MaxHp.Fixed)}----- {(1 + CurrMaxHpPro.Fixed)}----- {CurrMaxHpAppend.Fixed}");
}
///
/// 扣血
///
///
func (this *HealthPoint) Minus(value float32) {
this.Hp.Minus(value)
}
///
/// 加血
///
func (this *HealthPoint) Add(value float32) {
if FixedPoint_Add(this.Hp.Fixed(), NewFixedPoint(value)) > this.CurrMaxHp.Fixed() {
this.Reset()
} else {
this.Hp.Add(value)
}
}
///
/// 获取治疗溢出值
///
func (this *HealthPoint) Overflow(value float32) float32 {
if FixedPoint_Add(this.Hp.Fixed(), NewFixedPoint(value)) > this.CurrMaxHp.Fixed() {
return FixedPoint_Divide(FixedPoint_Add(this.Hp.Fixed(), NewFixedPoint(value)), this.CurrMaxHp.Fixed()).Scalar()
}
return 0
}
///
/// 剩余血量百分比
///
func (this *HealthPoint) Percent() float32 {
return FixedPoint_Divide(this.Hp.Fixed(), this.CurrMaxHp.Fixed()).Scalar()
}
///
/// 损失血量百分比
///
func (this *HealthPoint) LostPercent() float32 {
return FixedPoint_Divide((this.CurrMaxHp.Fixed() - this.Hp.Fixed()), this.CurrMaxHp.Fixed()).Scalar()
}
///
/// 指定百分比血量
///
func (this *HealthPoint) PercentHealth(pct float32) float32 {
return FixedPoint_Multiply(this.CurrMaxHp.Fixed(), NewFixedPoint(pct)).Scalar()
}
///
/// 扣除的血量
///
func (this *HealthPoint) Deduct() float32 {
return FixedPoint(this.CurrMaxHp.Fixed() - this.Hp.Fixed()).Scalar()
}
///
/// 是否满血
///
func (this *HealthPoint) IsFull() bool {
return this.Hp.Fixed() == this.CurrMaxHp.Fixed()
}