|
||
---|---|---|
.. | ||
README.md | ||
turn_based.go | ||
turn_based_controller.go | ||
turn_based_events.go | ||
turn_based_test.go |
README.md
Fight
暂无介绍...
目录导航
列出了该 package
下所有的函数及类型定义,可通过目录导航进行快捷跳转 ❤️
展开 / 折叠目录导航
包级函数定义
函数名称 | 描述 |
---|---|
NewTurnBased | 创建一个新的回合制 |
类型定义
类型 | 名称 | 描述 |
---|---|---|
STRUCT |
TurnBased | 回合制 |
INTERFACE |
TurnBasedControllerInfo | 暂无描述... |
INTERFACE |
TurnBasedControllerAction | 暂无描述... |
STRUCT |
TurnBasedController | 回合制控制器 |
STRUCT |
TurnBasedEntitySwitchEventHandler | 暂无描述... |
详情信息
func NewTurnBased[CampID comparable, EntityID comparable, Camp generic.IdR[CampID], Entity generic.IdR[EntityID]](calcNextTurnDuration func ( Camp, Entity) time.Duration) *TurnBased[CampID, EntityID, Camp, Entity]
创建一个新的回合制
- calcNextTurnDuration 将返回下一次行动时间间隔,适用于按照速度计算下一次行动时间间隔的情况。当返回 0 时,将使用默认的行动超时时间
TurnBased STRUCT
回合制
type TurnBased[CampID comparable, EntityID comparable, Camp generic.IdR[CampID], Entity generic.IdR[EntityID]] struct {
*turnBasedEvents[CampID, EntityID, Camp, Entity]
controller *TurnBasedController[CampID, EntityID, Camp, Entity]
ticker *time.Ticker
actionWaitTicker *time.Ticker
actioning bool
actionMutex sync.RWMutex
entities []Entity
campRel map[EntityID]Camp
calcNextTurnDuration func(Camp, Entity) time.Duration
actionTimeoutHandler func(Camp, Entity) time.Duration
signal chan signal
round int
currCamp Camp
currEntity Entity
currActionTimeout time.Duration
currStart time.Time
closeMutex sync.RWMutex
closed bool
}
func (*TurnBased) Close()
关闭回合制
func (*TurnBased) AddCamp(camp Camp, entity Entity, entities ...Entity)
添加阵营
func (*TurnBased) SetActionTimeout(actionTimeoutHandler func ( Camp, Entity) time.Duration)
设置行动超时时间处理函数
- 默认情况下行动超时时间函数将始终返回 0
func (*TurnBased) Run()
运行
查看 / 收起单元测试
func TestTurnBased_Run(t *testing.T) {
tbi := fight.NewTurnBased[string, string, *Camp, *Entity](func(camp *Camp, entity *Entity) time.Duration {
return time.Duration(float64(time.Second) / entity.speed)
})
tbi.SetActionTimeout(func(camp *Camp, entity *Entity) time.Duration {
return time.Second * 5
})
tbi.RegTurnBasedEntityActionTimeoutEvent(func(controller fight.TurnBasedControllerInfo[string, string, *Camp, *Entity]) {
t.Log("时间", time.Now().Unix(), "回合", controller.GetRound(), "阵营", controller.GetCamp().GetId(), "实体", controller.GetEntity().GetId(), "超时")
})
tbi.RegTurnBasedRoundChangeEvent(func(controller fight.TurnBasedControllerInfo[string, string, *Camp, *Entity]) {
t.Log("时间", time.Now().Unix(), "回合", controller.GetRound(), "回合切换")
})
tbi.RegTurnBasedEntitySwitchEvent(func(controller fight.TurnBasedControllerAction[string, string, *Camp, *Entity]) {
switch controller.GetEntity().GetId() {
case "1":
go func() {
time.Sleep(time.Second * 2)
controller.Finish()
}()
case "2":
controller.Refresh(time.Second)
case "4":
controller.Stop()
}
t.Log("时间", time.Now().Unix(), "回合", controller.GetRound(), "阵营", controller.GetCamp().GetId(), "实体", controller.GetEntity().GetId(), "开始行动")
})
tbi.AddCamp(&Camp{id: "1"}, &Entity{id: "1", speed: 1}, &Entity{id: "2", speed: 1})
tbi.AddCamp(&Camp{id: "2"}, &Entity{id: "3", speed: 1}, &Entity{id: "4", speed: 1})
tbi.Run()
}
TurnBasedControllerInfo INTERFACE
type TurnBasedControllerInfo[CampID comparable, EntityID comparable, Camp generic.IdR[CampID], Entity generic.IdR[EntityID]] interface {
GetRound() int
GetCamp() Camp
GetEntity() Entity
GetActionTimeoutDuration() time.Duration
GetActionStartTime() time.Time
GetActionEndTime() time.Time
Stop()
}
TurnBasedControllerAction INTERFACE
type TurnBasedControllerAction[CampID comparable, EntityID comparable, Camp generic.IdR[CampID], Entity generic.IdR[EntityID]] interface {
TurnBasedControllerInfo[CampID, EntityID, Camp, Entity]
Finish()
Refresh(duration time.Duration) time.Time
}
TurnBasedController STRUCT
回合制控制器
type TurnBasedController[CampID comparable, EntityID comparable, Camp generic.IdR[CampID], Entity generic.IdR[EntityID]] struct {
tb *TurnBased[CampID, EntityID, Camp, Entity]
}
func (*TurnBasedController) GetRound() int
获取当前回合数
func (*TurnBasedController) GetCamp() Camp
获取当前操作阵营
func (*TurnBasedController) GetEntity() Entity
获取当前操作实体
func (*TurnBasedController) GetActionTimeoutDuration() time.Duration
获取当前行动超时时长
func (*TurnBasedController) GetActionStartTime() time.Time
获取当前行动开始时间
func (*TurnBasedController) GetActionEndTime() time.Time
获取当前行动结束时间
func (*TurnBasedController) Finish()
结束当前操作,将立即切换到下一个操作实体
func (*TurnBasedController) Stop()
在当前回合执行完毕后停止回合进程
func (*TurnBasedController) Refresh(duration time.Duration) time.Time
刷新当前操作实体的行动超时时间
- 当不在行动阶段时,将返回 time.Time 零值
TurnBasedEntitySwitchEventHandler STRUCT
type TurnBasedEntitySwitchEventHandler[CampID comparable, EntityID comparable, Camp generic.IdR[CampID], Entity generic.IdR[EntityID]] func(controller TurnBasedControllerAction[CampID, EntityID, Camp, Entity])