fix: 状态机 fsm 包名修复,优化注释

This commit is contained in:
kercylan98 2023-07-29 18:01:12 +08:00
parent 03028b1a41
commit cee067e246
3 changed files with 49 additions and 42 deletions

View File

@ -1,38 +0,0 @@
package fms
type (
FSMStateEnterHandle[Data any] func(data Data)
FSMStateUpdateHandle[Data any] func(data Data)
FSMStateExitHandle[Data any] func(data Data)
)
func NewFSMState[State comparable, Data any](state State, enter FSMStateEnterHandle[Data], update FSMStateUpdateHandle[Data], exit FSMStateExitHandle[Data]) *FSMState[State, Data] {
return &FSMState[State, Data]{
enter: enter,
update: update,
exit: exit,
}
}
type FSMState[State comparable, Data any] struct {
state State
enter FSMStateEnterHandle[Data]
update FSMStateUpdateHandle[Data]
exit FSMStateExitHandle[Data]
}
func (slf *FSMState[State, Data]) GetState() State {
return slf.state
}
func (slf *FSMState[State, Data]) Enter(data Data) {
slf.enter(data)
}
func (slf *FSMState[State, Data]) Update(data Data) {
slf.update(data)
}
func (slf *FSMState[State, Data]) Exit(data Data) {
slf.exit(data)
}

View File

@ -1,40 +1,47 @@
package fms
package fsm
import (
"fmt"
)
// NewFSM 创建一个新的状态机
func NewFSM[State comparable, Data any](data Data) *FSM[State, Data] {
return &FSM[State, Data]{
states: map[State]*FSMState[State, Data]{},
states: map[State]*State[State, Data]{},
data: data,
}
}
// FSM 状态机
type FSM[State comparable, Data any] struct {
current State
data Data
states map[State]*FSMState[State, Data]
states map[State]*State[State, Data]
}
// Update 触发当前状态
func (slf *FSM[State, Data]) Update() {
state := slf.states[slf.current]
state.Update(slf.data)
}
func (slf *FSM[State, Data]) Register(state *FSMState[State, Data]) {
// Register 注册状态
func (slf *FSM[State, Data]) Register(state *State[State, Data]) {
slf.states[state.GetState()] = state
}
// Unregister 反注册状态
func (slf *FSM[State, Data]) Unregister(state State) {
delete(slf.states, state)
}
// HasState 检查状态机是否存在特定状态
func (slf *FSM[State, Data]) HasState(state State) bool {
_, has := slf.states[state]
return has
}
// Change 改变状态机状态到新的状态
func (slf *FSM[State, Data]) Change(state State) {
current := slf.states[slf.current]
current.Exit(slf.data)

38
game/fsm/fsm_state.go Normal file
View File

@ -0,0 +1,38 @@
package fsm
type (
StateEnterHandle[Data any] func(data Data)
StateUpdateHandle[Data any] func(data Data)
StateExitHandle[Data any] func(data Data)
)
func NewFSMState[S comparable, Data any](state S, enter StateEnterHandle[Data], update StateUpdateHandle[Data], exit StateExitHandle[Data]) *State[S, Data] {
return &State[S, Data]{
enter: enter,
update: update,
exit: exit,
}
}
type State[S comparable, Data any] struct {
state S
enter StateEnterHandle[Data]
update StateUpdateHandle[Data]
exit StateExitHandle[Data]
}
func (slf *State[S, Data]) GetState() S {
return slf.state
}
func (slf *State[S, Data]) Enter(data Data) {
slf.enter(data)
}
func (slf *State[S, Data]) Update(data Data) {
slf.update(data)
}
func (slf *State[S, Data]) Exit(data Data) {
slf.exit(data)
}