LastMUD/internal/game/event.go
2025-06-22 22:27:56 +03:00

55 lines
874 B
Go

package game
import (
"time"
"code.haedhutner.dev/mvv/LastMUD/internal/logging"
)
type EventType int
const (
PlayerJoin EventType = iota
PlayerCommand
PlayerLeave
PlayerSpeak
)
type GameEvent interface {
Type() EventType
Handle(game *LastMUDGame, delta time.Duration)
}
type EventBus struct {
events chan GameEvent
}
func CreateEventBus() *EventBus {
return &EventBus{
events: make(chan GameEvent, 10),
}
}
func (eb *EventBus) HasNext() bool {
return len(eb.events) > 0
}
func (eb *EventBus) Pop() (event GameEvent) {
select {
case event := <-eb.events:
logging.Info("Popped event of type ", event.Type(), ":", event)
return event
default:
return nil
}
}
func (eb *EventBus) Push(event GameEvent) {
eb.events <- event
logging.Info("Enqueued event of type ", event.Type(), ":", event)
}
func (eb *EventBus) close() {
close(eb.events)
}