| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- package facility
- import (
- "f1-game/internal/constant"
- "f1-game/internal/data"
- "f1-game/internal/enum"
- "f1-game/internal/extend/math"
- "f1-game/internal/types"
- "f1-game/nodes/map/internal/db"
- )
- type (
- attrs types.Attrs // 万分比属性 key:attrKey, value:attrValue
- attrFn func(playerID int64, attrs attrs)
- )
- var attrKeyMap = map[int32]int32{
- enum.AttrGrainYield: enum.AttrGrainYieldRatio,
- enum.AttrStoneYield: enum.AttrStoneYieldRatio,
- enum.AttrWoodYield: enum.AttrWoodYieldRatio,
- enum.AttrIronYield: enum.AttrIronYieldRatio,
- }
- func newAttrs() attrs {
- return attrs{}
- }
- func (p attrs) result() types.Attrs {
- attrMap := types.NewAttrs()
- for key, value := range p {
- // 有对应的万分比属性
- if ratioKey, ok := attrKeyMap[key]; ok {
- attrMap.Add(key, p.mulRatio(value, ratioKey))
- }
- attrMap.Add(key, value)
- }
- return attrMap
- }
- func (p attrs) mulRatio(value int64, ratioKey int32) int64 {
- return math.Round[float64, int64](float64(value*p[ratioKey]) / constant.RatioBase)
- }
- var attrFnList = []attrFn{
- initFn,
- facilityFn,
- }
- // initFn 初始属性
- func initFn(_ int64, attrs attrs) {
- attrs[enum.AttrIronYield] += data.Const.ItemInitIronYield
- attrs[enum.AttrStoneYield] += data.Const.ItemInitStoneYield
- attrs[enum.AttrGrainYield] += data.Const.ItemInitGrainYield
- attrs[enum.AttrWoodYield] += data.Const.ItemInitWoodYield
- attrs[enum.AttrResCapacity] += data.Const.ItemInitResCapacity
- }
- // facilityFn 城建属性
- func facilityFn(playerID int64, attrs attrs) {
- playerTable := db.GetMapPlayerTable(playerID)
- if playerTable == nil {
- return
- }
- // 获取城建对应等级的属性
- for _, facility := range playerTable.Facilities.Facilitys {
- if levelRow, ok := data.FacilityLevel.GetByFacilityIDLevel(facility.FacilityID, facility.Level); ok {
- for k, v := range levelRow.Attrs {
- attrs[k] += v
- }
- }
- }
- }
|