Files
Huangzj f3c056f84e feat(Go-Tool):
2020/12/31:新增项目案例(角色技能树)
               2020/12/31: 修改diliver包结构
2020-12-31 14:25:25 +08:00

152 lines
3.2 KiB
Go

/*
* @Author : huangzj
* @Time : 2020/12/29 14:22
* @Description:模拟的一个大臣的技能树拓扑关系
*/
package SkillTopology
import "Go-Tool/ProgressTest/SkillTopology/model"
type NodeRelation struct {
ParentId int
ChildrenId []int
}
var (
//拓扑父子关系,模拟读配置
topologyConfig = map[int][]int{
1: {2, 3, 4},
2: {8},
3: {5, 6},
4: {10, 11},
5: {7},
6: {7},
8: {9},
10: {12},
11: {12},
}
headNodeId = 1
)
//模拟其中一个大臣获取技能拓扑
func SimulationParamGetTopology(worker *SkilledWorker) *model.Topology {
//模拟获取技能链
skill1 := SimulationSkills(worker)
//拓扑父关系
skill1 = BackSteppingHeadWithChildren(skill1)
topology := &model.Topology{
HeadSkillNode: skill1,
CounsellorId: model.CounsellorId,
SkillIdMap: GetTopologyHeadMap(skill1), //获取技能Id和节点的对应关系,方便查找
}
return topology
}
func SimulationSkills(worker *SkilledWorker) *model.SkillNode {
//根节点技能
skill1 := &model.SkillNode{
SkillId: 1,
SkillFunc: worker.SkillId1,
Parent: nil, //第一个技能的父节点应该是空的
}
skill2 := model.SkillNode{
SkillId: 2,
SkillFunc: worker.SkillId2,
}
skill3 := model.SkillNode{
SkillId: 3,
SkillFunc: worker.SkillId3,
}
skill4 := model.SkillNode{
SkillId: 4,
SkillFunc: worker.SkillId4,
}
skill5 := model.SkillNode{
SkillId: 5,
SkillFunc: worker.SkillId5,
}
skill6 := model.SkillNode{
SkillId: 6,
SkillFunc: worker.SkillId6,
}
skill7 := model.SkillNode{
SkillId: 7,
SkillFunc: worker.SkillId7,
}
skill8 := model.SkillNode{
SkillId: 8,
SkillFunc: worker.SkillId8,
}
skill9 := model.SkillNode{
SkillId: 9,
SkillFunc: worker.SkillId9,
}
skill10 := model.SkillNode{
SkillId: 10,
SkillFunc: worker.SkillId10,
}
skill11 := model.SkillNode{
SkillId: 11,
SkillFunc: worker.SkillId11,
}
skill12 := model.SkillNode{
SkillId: 12,
SkillFunc: worker.SkillId12,
}
skillMap := map[int]*model.SkillNode{
1: skill1,
2: &skill2,
3: &skill3,
4: &skill4,
5: &skill5,
6: &skill6,
7: &skill7,
8: &skill8,
9: &skill9,
10: &skill10,
11: &skill11,
12: &skill12,
}
//拓扑父子关系
return MakeTopologyByConfig(skillMap, topologyConfig, headNodeId)
}
func MakeTopologyByConfig(nodes map[int]*model.SkillNode, config map[int][]int, headNodeId int) *model.SkillNode {
headNode := nodes[headNodeId]
if headNode == nil {
return nil
}
for nodeId, childrenId := range config {
childrenNodes := make([]*model.SkillNode, 0)
for _, childId := range childrenId {
if node := nodes[childId]; node != nil {
childrenNodes = append(childrenNodes, node)
}
}
nodes[nodeId].Children = childrenNodes
}
return headNode
}
//组装技能所对应的Map节点
func MakeSimulationSkillsWithLevel(topology *model.Topology, skillList []*model.Skill) *model.Topology {
if topology == nil || topology.HeadSkillNode == nil || len(skillList) == 0 {
return topology
}
skillIdMap := topology.SkillIdMap
for _, skill := range skillList {
if v, ok := skillIdMap[skill.Id]; ok {
v.Level = skill.Level
skillIdMap[skill.Id] = v
}
}
return topology
}