89 lines
2.0 KiB
Go
89 lines
2.0 KiB
Go
package info
|
||
|
||
import (
|
||
element "blazing/common/data/Element"
|
||
"blazing/common/data/xmlres"
|
||
|
||
"blazing/modules/blazing/model"
|
||
"math/rand"
|
||
"sync"
|
||
)
|
||
|
||
// 战斗属性类型
|
||
type EnumAttrType int
|
||
|
||
// 辅助函数:取整数绝对值(处理负等级)
|
||
func abs(x int8) int8 {
|
||
if x < 0 {
|
||
return -x
|
||
}
|
||
return x
|
||
}
|
||
|
||
type BattlePetEntity struct {
|
||
xmlres.PetInfo
|
||
Info *model.PetInfo //通过偏移赋值
|
||
//*input.Input
|
||
|
||
statusConditions sync.Map // key: StatusCondition, value: int (剩余回合)
|
||
Skills [4]*SkillEntity // 技能槽(最多4个技能)
|
||
//Status StatusDict //精灵的状态
|
||
//能力提升属性
|
||
//Prop PropDict
|
||
NotAlive bool `struc:"skip"`
|
||
//DamageZone map[EnumCategory]map[EnumsZoneType]map[EnumsZoneType][]float64 // 三维map 伤害类型-》增还是减-》加还是乘-》值
|
||
}
|
||
|
||
// 创建精灵实例
|
||
func CreateBattlePetEntity(info *model.PetInfo, rand *rand.Rand) *BattlePetEntity {
|
||
ret := &BattlePetEntity{}
|
||
|
||
ret.PetInfo = xmlres.PetMAP[int(info.ID)] //注入精灵信息
|
||
ret.Info = info
|
||
for i := 0; i < 4; i++ {
|
||
//todo 技能信息应该每回合进行深拷贝,保证每次的技能效果都是不一样的
|
||
ret.Skills[i] = CreateSkill(&info.SkillList[i], rand, ret)
|
||
}
|
||
|
||
return ret
|
||
|
||
}
|
||
|
||
// calculateRealValue 计算实际属性值根据状态变化计算实际值
|
||
// value 基础属性值
|
||
// stat 状态变化值(可正可负)
|
||
// 返回// 返回计算后的实际属性值,确保结果至少为1
|
||
func CalculateRealValue(value int, stat int) int {
|
||
if stat == 0 {
|
||
if value <= 0 {
|
||
return 1
|
||
}
|
||
return value
|
||
} else if stat > 0 {
|
||
r := int(float64(value) * (float64(stat+2) / 2.0))
|
||
if r <= 0 {
|
||
return 1
|
||
}
|
||
return r
|
||
} else {
|
||
r := int(float64(value) * (2.0 / float64(2-stat)))
|
||
if r <= 0 {
|
||
return 1
|
||
}
|
||
return r
|
||
}
|
||
}
|
||
|
||
func (u *BattlePetEntity) Type() *element.ElementCombination {
|
||
var ff *element.ElementCombination
|
||
for _, v := range xmlres.PetMAP {
|
||
if v.ID == int(u.Info.ID) {
|
||
ff, _ = element.NewElementCombination(v.Type)
|
||
}
|
||
|
||
}
|
||
|
||
return ff
|
||
}
|
||
|