57 lines
994 B
Go
57 lines
994 B
Go
package maps
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"github.com/atridad/LilGuy/internal/portal"
|
|
)
|
|
|
|
type Manager struct {
|
|
maps map[string]*Map
|
|
currentMap *Map
|
|
}
|
|
|
|
func NewManager() *Manager {
|
|
return &Manager{
|
|
maps: make(map[string]*Map),
|
|
}
|
|
}
|
|
|
|
func (m *Manager) RegisterMap(mp *Map) {
|
|
m.maps[mp.ID] = mp
|
|
}
|
|
|
|
func (m *Manager) GetMap(id string) *Map {
|
|
return m.maps[id]
|
|
}
|
|
|
|
func (m *Manager) SetCurrentMap(id string) error {
|
|
mp, ok := m.maps[id]
|
|
if !ok {
|
|
return fmt.Errorf("map not found: %s", id)
|
|
}
|
|
m.currentMap = mp
|
|
return nil
|
|
}
|
|
|
|
func (m *Manager) CurrentMap() *Map {
|
|
return m.currentMap
|
|
}
|
|
|
|
func (m *Manager) ResolveTransition(event portal.TransitionEvent) (*Map, *portal.Portal) {
|
|
destMap := m.GetMap(event.DestinationMap)
|
|
if destMap == nil {
|
|
return nil, nil
|
|
}
|
|
|
|
destPortal := destMap.GetPortalByID(event.DestinationPortal)
|
|
return destMap, destPortal
|
|
}
|
|
|
|
func (m *Manager) Reset() {
|
|
for _, mp := range m.maps {
|
|
mp.Reset()
|
|
}
|
|
// Reset to default map if needed, or let the caller do it
|
|
}
|