package model

import "blazing/common/data/xmlres"

// 实现获取等级范围内可学习的技能
func (p *PetInfo) GetLevelRangeCanLearningSkills(from, to uint32) []uint32 {

	var skills []uint32

	for _, skillIDs := range xmlres.PetMAP[int(p.ID)].LearnableMoves.Moves {

		if skillIDs.LearningLv >= from && skillIDs.LearningLv <= to {
			skills = append(skills, skillIDs.ID)
		}
	}
	return skills
}

// 计算HP面板值（无性格修正）
func (c *PetInfo) calculatePetHPPanelSize(base, dv, level, ev uint32) uint32 {

	return uint32((float64(base)*2+float64(ev)/4.0+float64(dv))*(float64(level)/100.0) + float64(level) + 10)
}

// 计算其他属性面板值（带性格修正）
func (c *PetInfo) calculatePetPanelSize(base, dv, level, ev uint32, natureCorrect float64) uint32 {

	base1 := float64((float64(base)*2+float64(ev)/4.0+float64(dv))*(float64(level)/100.0) + 5)
	return uint32(float64(base1) * natureCorrect)
}

// 计算生成面板
func (p *PetInfo) CalculatePetPane() {
	naxml := xmlres.NatureRootMap[int(p.Nature)]
	petxml := xmlres.PetMAP[int(p.ID)]
	// 计算各项属性
	hp := p.calculatePetHPPanelSize(
		uint32(petxml.HP),
		p.Dv,
		p.Level,
		p.EvHp,
	)
	// * battle_lv: atk(0), def(1), sp_atk(2), sp_def(3), spd(4), accuracy(5)
	p.Prop[0] = p.calculatePetPanelSize(
		uint32(petxml.Atk),
		p.Dv,
		p.Level,
		p.EvAttack,
		naxml.AttackCorrect,
	)

	p.Prop[1] = p.calculatePetPanelSize(
		uint32(petxml.Def),
		p.Dv,
		p.Level,
		p.EvDefence,
		naxml.DefenseCorrect,
	)

	p.Prop[2] = p.calculatePetPanelSize(
		uint32(petxml.SpAtk),
		p.Dv,
		p.Level,
		p.EvSpecialAttack,
		naxml.SaCorrect,
	)

	p.Prop[3] = p.calculatePetPanelSize(
		uint32(petxml.SpDef),
		p.Dv,
		p.Level,
		p.EvSpecialDefense,
		naxml.SdCorrect,
	)

	p.Prop[4] = p.calculatePetPanelSize(
		uint32(petxml.Spd),
		p.Dv,
		p.Level,
		p.EvSpeed,
		naxml.SpeedCorrect,
	)

	// 设置计算结果
	p.MaxHp = hp
}
