zworld-demo/engine/world_new.go

40 lines
814 B
Go
Raw Normal View History

2023-12-22 22:04:27 +08:00
package engine
import (
"sort"
"zworld/engine/rule"
)
type FWorldOption func(*FWorld)
func FTimeRuleOption(rule *rule.FTimeRule) FWorldOption {
return func(world *FWorld) {
world.RuleWrap.TimeRule = rule
world.RuleList = append(world.RuleList, rule)
}
}
func FActorRuleOption(rule *rule.FActorRule) FWorldOption {
return func(world *FWorld) {
world.RuleWrap.ActorRule = rule
world.RuleList = append(world.RuleList, rule)
}
}
func NewWorld(wrap *FWorldRuleWrap, ops ...FWorldOption) *FWorld {
w := FWorld{}
if wrap == nil {
wrap = &FWorldRuleWrap{}
}
w.RuleWrap = wrap
for _, op := range ops {
op(&w)
}
sort.Slice(w.RuleList, func(i, j int) bool {
pi, pj := w.RuleList[i].GetPriority(), w.RuleList[j].GetPriority()
if pi != pj {
return pi < pj
}
return i < j
})
return &w
}