package client import ( "io/fs" "github.com/chompy/roguelike_rpg/internal/client/gfx" "github.com/chompy/roguelike_rpg/internal/util" "github.com/hajimehoshi/ebiten/v2" ) type GameContext struct { Roles RoleList Actions ActionList Locale util.Locale Gfx *gfx.Context assetFS fs.FS } func NewGameContext(assetFS fs.FS) (*GameContext, error) { roles, err := LoadRoles(assetFS) if err != nil { return nil, err } actions, err := LoadActions(assetFS) if err != nil { return nil, err } gfxCtx, err := gfx.New(assetFS) if err != nil { return nil, err } locale, err := util.LoadDefaultLocale(assetFS) if err != nil { return nil, err } ctx := &GameContext{ Roles: roles, Actions: actions, Locale: locale, Gfx: gfxCtx, assetFS: assetFS, } return ctx, nil } func (c *GameContext) NewCombatant(roleName string, team int) (*Combatant, error) { role := c.Roles.Get(roleName) return NewCombatant(c, &role, team) } func (c *GameContext) Time() float32 { return float32(ebiten.Tick()) / float32(ebiten.TPS()) }