游戏玩法初步实现
This commit is contained in:
parent
b5a75220ff
commit
09268e00f7
|
@ -0,0 +1,67 @@
|
||||||
|
package builtin
|
||||||
|
|
||||||
|
import (
|
||||||
|
"minotaur/game"
|
||||||
|
"minotaur/utils/offset"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
func NewGameplay() *Gameplay {
|
||||||
|
return &Gameplay{
|
||||||
|
Time: offset.NewTime(0),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
type Gameplay struct {
|
||||||
|
*offset.Time
|
||||||
|
startTime time.Time
|
||||||
|
|
||||||
|
gameplayStartEventHandles []game.GameplayStartEventHandle
|
||||||
|
gameplayTimeChangeEventHandles []game.GameplayTimeChangeEventHandle
|
||||||
|
}
|
||||||
|
|
||||||
|
func (slf *Gameplay) GameStart(handle func() error) error {
|
||||||
|
if err := handle(); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
slf.startTime = slf.Time.Now()
|
||||||
|
slf.OnGameplayStartEvent()
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (slf *Gameplay) GetTime() *offset.Time {
|
||||||
|
return slf.Time
|
||||||
|
}
|
||||||
|
|
||||||
|
func (slf *Gameplay) GetCurrentTime() time.Time {
|
||||||
|
return slf.Time.Now()
|
||||||
|
}
|
||||||
|
|
||||||
|
func (slf *Gameplay) SetTimeOffset(offset time.Duration) {
|
||||||
|
slf.Time.SetOffset(offset)
|
||||||
|
slf.OnGameplayTimeChangeEvent()
|
||||||
|
}
|
||||||
|
|
||||||
|
func (slf *Gameplay) RegGameplayStartEvent(handle game.GameplayStartEventHandle) {
|
||||||
|
slf.gameplayStartEventHandles = append(slf.gameplayStartEventHandles, handle)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (slf *Gameplay) OnGameplayStartEvent() {
|
||||||
|
for _, handle := range slf.gameplayStartEventHandles {
|
||||||
|
handle(slf.startTime)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (slf *Gameplay) RegGameplayTimeChangeEvent(handle game.GameplayTimeChangeEventHandle) {
|
||||||
|
slf.gameplayTimeChangeEventHandles = append(slf.gameplayTimeChangeEventHandles, handle)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (slf *Gameplay) OnGameplayTimeChangeEvent() {
|
||||||
|
if len(slf.gameplayTimeChangeEventHandles) == 0 {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
current := slf.Time.Now()
|
||||||
|
for _, handle := range slf.gameplayTimeChangeEventHandles {
|
||||||
|
handle(current)
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,30 @@
|
||||||
|
package game
|
||||||
|
|
||||||
|
import (
|
||||||
|
"minotaur/utils/offset"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Gameplay 游戏玩法
|
||||||
|
type Gameplay interface {
|
||||||
|
// GameStart 游戏玩法开始
|
||||||
|
GameStart(handle func() error) error
|
||||||
|
// GetTime 获取游戏玩法的时间偏移
|
||||||
|
GetTime() *offset.Time
|
||||||
|
// GetCurrentTime 获取玩法当前存在偏移的时间
|
||||||
|
GetCurrentTime() time.Time
|
||||||
|
// SetTimeOffset 设置玩法时间偏移
|
||||||
|
SetTimeOffset(offset time.Duration)
|
||||||
|
|
||||||
|
// RegGameplayStartEvent 在游戏玩法开始时将立即执行被注册的事件处理函数
|
||||||
|
RegGameplayStartEvent(handle GameplayStartEventHandle)
|
||||||
|
OnGameplayStartEvent()
|
||||||
|
// RegGameplayTimeChangeEvent 游戏玩法的时间被改变(非自然流逝)时将立刻执行被注册的事件处理函数
|
||||||
|
RegGameplayTimeChangeEvent(handle GameplayTimeChangeEventHandle)
|
||||||
|
OnGameplayTimeChangeEvent()
|
||||||
|
}
|
||||||
|
|
||||||
|
type (
|
||||||
|
GameplayStartEventHandle func(startTime time.Time)
|
||||||
|
GameplayTimeChangeEventHandle func(current time.Time)
|
||||||
|
)
|
Loading…
Reference in New Issue