Drag flow into view-map
This is pretty awful, but will let me wire up items more easily without needing to do the big refactor into independent menu handlers
This commit is contained in:
@@ -10,7 +10,9 @@ import (
|
|||||||
|
|
||||||
"code.ur.gs/lupine/ordoor/internal/assetstore"
|
"code.ur.gs/lupine/ordoor/internal/assetstore"
|
||||||
"code.ur.gs/lupine/ordoor/internal/config"
|
"code.ur.gs/lupine/ordoor/internal/config"
|
||||||
|
"code.ur.gs/lupine/ordoor/internal/flow"
|
||||||
"code.ur.gs/lupine/ordoor/internal/scenario"
|
"code.ur.gs/lupine/ordoor/internal/scenario"
|
||||||
|
"code.ur.gs/lupine/ordoor/internal/ship"
|
||||||
"code.ur.gs/lupine/ordoor/internal/ui"
|
"code.ur.gs/lupine/ordoor/internal/ui"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -25,6 +27,7 @@ var (
|
|||||||
)
|
)
|
||||||
|
|
||||||
type env struct {
|
type env struct {
|
||||||
|
flow *flow.Flow
|
||||||
scenario *scenario.Scenario
|
scenario *scenario.Scenario
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -51,27 +54,39 @@ func main() {
|
|||||||
log.Fatalf("Failed to load scenario %v: %v", *gameMap, err)
|
log.Fatalf("Failed to load scenario %v: %v", *gameMap, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
env := &env{
|
var realEnv *env
|
||||||
scenario: scenario,
|
if cfg.DefaultEngineName == "ordoor" {
|
||||||
|
ship := &ship.Ship{}
|
||||||
|
|
||||||
|
flow, err := flow.New(assets, cfg, ship)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("Failed to setup flow: %v", err)
|
||||||
|
}
|
||||||
|
flow.SetScenario(scenario)
|
||||||
|
realEnv = &env{flow: flow, scenario: scenario}
|
||||||
|
} else {
|
||||||
|
realEnv = &env{scenario: scenario}
|
||||||
}
|
}
|
||||||
|
|
||||||
win, err := ui.NewWindow(env, "View Map "+*gameMap, *winX, *winY)
|
win, err := ui.NewWindow(realEnv, "View Map "+*gameMap, *winX, *winY)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal("Couldn't create window: %v", err)
|
log.Fatal("Couldn't create window: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
step := 32
|
|
||||||
win.WhileKeyDown(ebiten.KeyLeft, env.changeOrigin(-step, +0))
|
|
||||||
win.WhileKeyDown(ebiten.KeyRight, env.changeOrigin(+step, +0))
|
|
||||||
win.WhileKeyDown(ebiten.KeyUp, env.changeOrigin(+0, -step))
|
|
||||||
win.WhileKeyDown(ebiten.KeyDown, env.changeOrigin(+0, +step))
|
|
||||||
|
|
||||||
for i := 0; i <= 6; i++ {
|
for i := 0; i <= 6; i++ {
|
||||||
win.OnKeyUp(ebiten.Key1+ebiten.Key(i), env.setZIdx(i))
|
win.OnKeyUp(ebiten.Key1+ebiten.Key(i), realEnv.setZIdx(i))
|
||||||
}
|
}
|
||||||
|
|
||||||
win.OnMouseClick(env.showCellData)
|
win.OnMouseClick(realEnv.showCellData)
|
||||||
win.OnMouseWheel(env.changeZoom)
|
win.OnMouseWheel(realEnv.changeZoom)
|
||||||
|
|
||||||
|
if realEnv.flow == nil {
|
||||||
|
step := 32
|
||||||
|
win.WhileKeyDown(ebiten.KeyLeft, realEnv.changeOrigin(-step, +0))
|
||||||
|
win.WhileKeyDown(ebiten.KeyRight, realEnv.changeOrigin(+step, +0))
|
||||||
|
win.WhileKeyDown(ebiten.KeyUp, realEnv.changeOrigin(+0, -step))
|
||||||
|
win.WhileKeyDown(ebiten.KeyDown, realEnv.changeOrigin(+0, +step))
|
||||||
|
}
|
||||||
|
|
||||||
if err := win.Run(); err != nil {
|
if err := win.Run(); err != nil {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
@@ -79,11 +94,19 @@ func main() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (e *env) Update(screenX, screenY int) error {
|
func (e *env) Update(screenX, screenY int) error {
|
||||||
return e.scenario.Update(screenX, screenY)
|
if e.flow != nil {
|
||||||
|
return e.flow.Update(screenX, screenY)
|
||||||
|
} else {
|
||||||
|
return e.scenario.Update(screenX, screenY)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (e *env) Draw(screen *ebiten.Image) error {
|
func (e *env) Draw(screen *ebiten.Image) error {
|
||||||
return e.scenario.Draw(screen)
|
if e.flow != nil {
|
||||||
|
return e.flow.Draw(screen)
|
||||||
|
} else {
|
||||||
|
return e.scenario.Draw(screen)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (e *env) changeOrigin(byX, byY int) func() {
|
func (e *env) changeOrigin(byX, byY int) func() {
|
||||||
|
@@ -102,18 +102,27 @@ func (m *Map) SpritesForCell(x, y, z int) ([]*Sprite, error) {
|
|||||||
|
|
||||||
sprites = append(sprites, sprite)
|
sprites = append(sprites, sprite)
|
||||||
}
|
}
|
||||||
|
if chr := m.CharacterAt(x, y, z); chr != nil {
|
||||||
for _, chr := range m.raw.Characters {
|
// Look up the correct animation, get the frame, boom
|
||||||
if chr.XPos == x && chr.YPos == y && z == 1 { // FIXME: sort out ZPos
|
anim, err := m.assets.CharacterAnimation(chr.Type, data.AnimActionNone)
|
||||||
// Look up the correct animation, get the frame, boom
|
if err != nil {
|
||||||
anim, err := m.assets.CharacterAnimation(chr.Type, data.AnimActionNone)
|
return nil, err
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
sprites = append(sprites, anim.Frames[0])
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sprites = append(sprites, anim.Frames[0])
|
||||||
}
|
}
|
||||||
|
|
||||||
return sprites, nil
|
return sprites, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (m *Map) CharacterAt(x, y, z int) *maps.Character {
|
||||||
|
// FIXME: don't iterate
|
||||||
|
for i, _ := range m.raw.Characters {
|
||||||
|
chr := &m.raw.Characters[i]
|
||||||
|
if chr.XPos == x && chr.YPos == y && z == 1 { // FIXME: sort out ZPos
|
||||||
|
return chr
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
@@ -92,6 +92,11 @@ func New(assets *assetstore.AssetStore, config *config.Config, ship *ship.Ship)
|
|||||||
return out, out.exit
|
return out, out.exit
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (f *Flow) SetScenario(scenario *scenario.Scenario) {
|
||||||
|
f.current = f.drivers[mainGame]
|
||||||
|
f.scenario = scenario
|
||||||
|
}
|
||||||
|
|
||||||
func (f *Flow) Update(screenX, screenY int) error {
|
func (f *Flow) Update(screenX, screenY int) error {
|
||||||
if f.exit != nil {
|
if f.exit != nil {
|
||||||
return f.exit
|
return f.exit
|
||||||
|
@@ -16,7 +16,7 @@ func (f *Flow) linkMainGame() {
|
|||||||
})
|
})
|
||||||
|
|
||||||
// 8: Character stats
|
// 8: Character stats
|
||||||
f.onClick(mainGame, "8.21", func() { // Stat more buttont
|
f.onClick(mainGame, "8.21", func() { // Stat more buttons
|
||||||
f.setActiveNow(mainGame, "7", true)
|
f.setActiveNow(mainGame, "7", true)
|
||||||
f.setActiveNow(mainGame, "8", false)
|
f.setActiveNow(mainGame, "8", false)
|
||||||
})
|
})
|
||||||
|
@@ -2,7 +2,6 @@
|
|||||||
package scenario
|
package scenario
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
|
||||||
"image"
|
"image"
|
||||||
|
|
||||||
"code.ur.gs/lupine/ordoor/internal/assetstore"
|
"code.ur.gs/lupine/ordoor/internal/assetstore"
|
||||||
@@ -36,9 +35,9 @@ func NewScenario(assets *assetstore.AssetStore, name string) (*Scenario, error)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Eager load sprites. TODO: do we really want to do this?
|
// Eager load sprites. TODO: do we really want to do this?
|
||||||
if err := area.LoadSprites(); err != nil {
|
//if err := area.LoadSprites(); err != nil {
|
||||||
return nil, fmt.Errorf("Eager-loading sprites failed: %v", err)
|
// return nil, fmt.Errorf("Eager-loading sprites failed: %v", err)
|
||||||
}
|
//}
|
||||||
|
|
||||||
out := &Scenario{
|
out := &Scenario{
|
||||||
area: area,
|
area: area,
|
||||||
|
Reference in New Issue
Block a user