Files
ordoor/internal/scenario/scenario.go

50 lines
1.1 KiB
Go
Raw Normal View History

// package play takes a map and turns it into a playable scenario
package scenario
import (
"fmt"
"image"
"code.ur.gs/lupine/ordoor/internal/assetstore"
)
type Scenario struct {
2020-04-18 12:23:03 +01:00
area *assetstore.Map
specials *assetstore.Object
2020-04-18 11:44:05 +01:00
tick int
turn int
selectedCell IsoPt
// All these must be modified by user actions somehow.
// TODO: extract into the idea of a viewport passed to Update / Draw somehow?
// Or have a separater Drawer for the Scenario?
Viewpoint image.Point // Top-left of the screen
ZIdx int // Currently-viewed Z index
}
func NewScenario(assets *assetstore.AssetStore, name string) (*Scenario, error) {
area, err := assets.Map(name)
if err != nil {
return nil, err
}
2020-04-18 12:23:03 +01:00
specials, err := assets.Object("specials") // FIXME: should this be hardcoded?
if err != nil {
return nil, err
}
// Eager load sprites. TODO: do we really want to do this?
if err := area.LoadSprites(); err != nil {
return nil, fmt.Errorf("Eager-loading sprites failed: %v", err)
}
out := &Scenario{
area: area,
2020-04-18 12:23:03 +01:00
specials: specials,
Viewpoint: image.Pt(0, 3000), // FIXME: haxxx
}
return out, nil
}