go_dreamfactory/modules/library/comp_configure.go
2023-04-20 18:32:04 +08:00

120 lines
3.8 KiB
Go

package library
import (
"fmt"
"go_dreamfactory/lego/core"
"go_dreamfactory/lego/sys/log"
"go_dreamfactory/modules"
"go_dreamfactory/sys/configure"
cfg "go_dreamfactory/sys/configure/structs"
"strconv"
"sync"
)
const (
// game_libraryhero = "game_libraryhero.json" // 英雄对应的羁绊id信息
// game_libraryfetter = "game_libraryfetter.json" // 羁绊信息表
// game_libraryhistory = "game_libraryhistory.json" // 往事id 对应的奖励
// game_libraryfavor = "game_libraryfavor.json" // 英雄好感度升级所需的经验
// game_librarystory = "game_librarystory.json" // 羁绊id对应剧情奖励
// game_librarycomplot = "game_librarycomplot.json"
game_favorability = "game_favorability.json" // 好感度
game_friends = "game_friends.json" // 好感度
)
///配置管理基础组件
type configureComp struct {
modules.MCompConfigure
hlock sync.RWMutex
favorability map[string]*cfg.GameFavorabilityData
favorLvExp map[string][]int32 // key 英雄id value 每级升级所需要的经验值
friend map[int64][]*cfg.GameFriendsData
heroFetter map[string][]int32 // key 英雄id value 羁绊id
}
//组件初始化接口
func (this *configureComp) Init(service core.IService, module core.IModule, comp core.IModuleComp, options core.IModuleOptions) (err error) {
err = this.MCompConfigure.Init(service, module, comp, options)
configure.RegisterConfigure(game_favorability, cfg.NewGameFavorability, this.SetFavorability)
configure.RegisterConfigure(game_friends, cfg.NewGameFriends, this.SetFriendData)
return
}
func (this *configureComp) SetFavorability() {
if v, err := this.GetConfigure(game_favorability); err == nil {
this.hlock.Lock()
defer this.hlock.Unlock()
this.favorability = make(map[string]*cfg.GameFavorabilityData, 0)
this.favorLvExp = make(map[string][]int32)
if _configure, ok := v.(*cfg.GameFavorability); ok {
for _, v1 := range _configure.GetDataList() {
lv := strconv.Itoa(int(v1.FavorLv))
this.favorLvExp[v1.Hid] = append(this.favorLvExp[v1.Hid], v1.FavorExp)
this.favorability[v1.Hid+"-"+lv] = v1
}
return
}
} else {
err = fmt.Errorf("%T no is *cfg.SetFavorability", err)
}
}
func (this *configureComp) GetFavorability(hid string, lv int32) *cfg.GameFavorabilityData {
return this.favorability[hid+"-"+strconv.Itoa(int(lv))]
}
func (this *configureComp) SetFriendData() {
if v, err := this.GetConfigure(game_friends); err == nil {
this.hlock.Lock()
defer this.hlock.Unlock()
this.friend = make(map[int64][]*cfg.GameFriendsData, 0)
this.heroFetter = make(map[string][]int32)
if _configure, ok := v.(*cfg.GameFriends); ok {
for _, v1 := range _configure.GetDataList() {
key := int64(v1.FriendId)<<8 + int64(v1.FriendsLv)
this.friend[key] = append(this.friend[key], v1)
this.heroFetter[v1.Hid] = append(this.heroFetter[v1.Hid], v1.FriendId)
}
}
} else {
err = fmt.Errorf("%T no is *cfg.SetFavorability", err)
}
return
}
// id:羁绊id lv 羁绊等级
func (this *configureComp) GetFriendData(id int32, lv int32) []*cfg.GameFriendsData {
return this.friend[int64(id)<<8+int64(lv)]
}
// 通过英雄获取当前英雄的所有羁绊ID
func (this *configureComp) GetHeroFetterID(hid string) []int32 {
return this.heroFetter[hid]
}
//加载多个配置文件
func (this *configureComp) LoadMultiConfigure(confs map[string]interface{}) (err error) {
for k, v := range confs {
err = configure.RegisterConfigure(k, v, nil)
if err != nil {
log.Errorf("配置文件:%s解析失败!", k)
break
}
}
return
}
//读取配置数据
func (this *configureComp) GetConfigure(name string) (v interface{}, err error) {
return configure.GetConfigure(name)
}
func (this *configureComp) GetFavorabilityExp(hid string) []int32 {
return this.favorLvExp[hid]
}