LastMUD/internal/game/event.go

56 lines
874 B
Go
Raw Normal View History

2025-06-22 17:54:07 +03:00
package game
2025-06-22 22:27:56 +03:00
import (
"time"
"code.haedhutner.dev/mvv/LastMUD/internal/logging"
)
2025-06-22 17:54:07 +03:00
type EventType int
const (
PlayerJoin EventType = iota
PlayerCommand
PlayerLeave
2025-06-22 22:27:56 +03:00
PlayerSpeak
2025-06-22 17:54:07 +03:00
)
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:
2025-06-22 22:27:56 +03:00
logging.Info("Popped event of type ", event.Type(), ":", event)
2025-06-22 17:54:07 +03:00
return event
default:
return nil
}
}
func (eb *EventBus) Push(event GameEvent) {
eb.events <- event
2025-06-22 22:27:56 +03:00
logging.Info("Enqueued event of type ", event.Type(), ":", event)
2025-06-22 17:54:07 +03:00
}
func (eb *EventBus) close() {
close(eb.events)
}