ui starting, menu screen, ingame help
This commit is contained in:
@ -14,18 +14,24 @@ type GameScreen struct {
|
||||
state *gamestate.GameState
|
||||
vp *mainwindow.ViewPort
|
||||
controller *ecs.Controller
|
||||
scm *types.ScreenManager
|
||||
}
|
||||
|
||||
func NewGameScreen(mw *mainwindow.MainWindow, state *gamestate.GameState, viewPort *mainwindow.ViewPort, controller *ecs.Controller) *GameScreen {
|
||||
return &GameScreen{mw: mw, state: state, vp: viewPort, controller: controller}
|
||||
func NewGameScreen(mw *mainwindow.MainWindow, state *gamestate.GameState, viewPort *mainwindow.ViewPort, controller *ecs.Controller, scm *types.ScreenManager) *GameScreen {
|
||||
ts := &GameScreen{mw: mw, state: state, vp: viewPort, controller: controller, scm: scm}
|
||||
renderMobs := systems.MobRenderSystem{EntityController: ts.controller}
|
||||
ts.controller.AddSystem(renderMobs, 1)
|
||||
return ts
|
||||
}
|
||||
|
||||
func (ts *GameScreen) UseEcs() bool { return true }
|
||||
func (ts *GameScreen) Enter() {
|
||||
renderMobs := systems.MobRenderSystem{EntityController: ts.controller}
|
||||
ts.controller.AddSystem(renderMobs, 1)
|
||||
ts.mw.GetLayer("overlay").ClearArea(0, ts.mw.H - 3, 30, 3)
|
||||
ts.mw.GetLayer("overlay").WithColor("#77777777").
|
||||
Print(1, ts.mw.H - 2, "Press [color=white]?[/color] for help")
|
||||
}
|
||||
func (ts *GameScreen) Exit() {
|
||||
ts.mw.GetLayer("base").ClearArea(1, ts.mw.H -2, 30, 1)
|
||||
//remove what we dont need
|
||||
}
|
||||
|
||||
@ -56,6 +62,9 @@ func (ts *GameScreen) HandleInput(input string) {
|
||||
case "n", "3":
|
||||
ts.walk(ts.state, 1, 1)
|
||||
break
|
||||
case "Shift+/":
|
||||
ts.scm.SetScreenByName("help")
|
||||
break
|
||||
default:
|
||||
ts.mw.GetLayer("base").ClearArea(0, 3, 40, 1)
|
||||
ts.mw.GetLayer("base").Print(1, 3, "Key: "+input)
|
||||
|
116
engine/screens/menu.go
Normal file
116
engine/screens/menu.go
Normal file
@ -0,0 +1,116 @@
|
||||
package screens
|
||||
|
||||
import (
|
||||
"lab.zaar.be/thefish/alchemyst-go/engine/types"
|
||||
"lab.zaar.be/thefish/alchemyst-go/ui/mainwindow"
|
||||
blt "lab.zaar.be/thefish/bearlibterminal"
|
||||
"strings"
|
||||
)
|
||||
|
||||
const runeIndex = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
|
||||
|
||||
type MenuScreen struct {
|
||||
*types.Rect
|
||||
|
||||
mw *mainwindow.MainWindow
|
||||
scm *types.ScreenManager
|
||||
renderParent bool
|
||||
|
||||
items []interface{}
|
||||
title string
|
||||
header string
|
||||
footer string
|
||||
redraw bool
|
||||
bgColor string
|
||||
fgColor string
|
||||
}
|
||||
|
||||
func NewMenuScreen(mw *mainwindow.MainWindow, scm *types.ScreenManager, title, header, footer string, rect *types.Rect, renderParent bool) *MenuScreen {
|
||||
return &MenuScreen{
|
||||
title: title,
|
||||
header: header,
|
||||
footer: footer,
|
||||
Rect: rect,
|
||||
mw: mw,
|
||||
scm: scm,
|
||||
renderParent: renderParent,
|
||||
}
|
||||
}
|
||||
|
||||
func (ms *MenuScreen) SetBgColor(color string) *MenuScreen {
|
||||
ms.bgColor = color
|
||||
return ms
|
||||
}
|
||||
|
||||
func (ms *MenuScreen) SetFgColor(color string) *MenuScreen {
|
||||
ms.fgColor = color
|
||||
return ms
|
||||
}
|
||||
|
||||
//fixme!!
|
||||
|
||||
func (ms *MenuScreen) SetItems(items []interface{}) *MenuScreen {
|
||||
ms.items = items
|
||||
return ms
|
||||
}
|
||||
|
||||
func (ms *MenuScreen) UseEcs() bool { return false }
|
||||
|
||||
func (ms *MenuScreen) Enter() {
|
||||
ms.redraw = true
|
||||
}
|
||||
|
||||
func (ms *MenuScreen) HandleInput(input string) {
|
||||
//
|
||||
//if input != "" {
|
||||
// ms.redraw = true
|
||||
//}
|
||||
|
||||
switch input {
|
||||
case "Space":
|
||||
ms.scm.SetScreen(ms.scm.PreviousScreen)
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
func (ms *MenuScreen) Exit() {
|
||||
menuLayer := ms.mw.GetLayer("menu")
|
||||
menuLayer.ClearRect(ms.Rect)
|
||||
bgLayer := ms.mw.GetLayer("menubg")
|
||||
bgLayer.ClearRect(ms.Rect)
|
||||
}
|
||||
|
||||
func (ms *MenuScreen) Render() {
|
||||
if ms.renderParent {
|
||||
ms.scm.PreviousScreen.Render()
|
||||
}
|
||||
if (ms.redraw || ms.renderParent) {
|
||||
ms.redraw = false
|
||||
menuLayer := ms.mw.GetLayer("menu")
|
||||
menuLayer.ClearRect(ms.Rect)
|
||||
bgLayer := ms.mw.GetLayer("menubg")
|
||||
bgLayer.ClearRect(ms.Rect)
|
||||
bgLayer.WithColor(ms.bgColor).NewWindow(ms.Rect).Splash()
|
||||
menuLayer.WithColor(ms.fgColor).NewWindow(ms.Rect).DoubleBordered(ms.title)
|
||||
menuLayer.Print(ms.X+(ms.W/2)-7, ms.Y+ms.H-1, "╡"+"[color=green]Space[/color] to close"+"╞")
|
||||
footerHeight := 0
|
||||
if ms.footer != "" {
|
||||
_, footerHeight = menuLayer.PrintInside(ms.Rect, ms.footer, 9)
|
||||
footerHeight = footerHeight + 2
|
||||
}
|
||||
_, headerHeight := menuLayer.PrintInside(ms.Rect, ms.header, blt.TK_ALIGN_LEFT)
|
||||
itemField := types.Rect{ms.X, ms.Y + headerHeight + 1, ms.W, ms.H - headerHeight - footerHeight}
|
||||
_ = itemField
|
||||
if (len(ms.items) > 0) {
|
||||
//fixme itemfield object, scroller, inputhandler, current selected item
|
||||
menuItems := make([]string, 0)
|
||||
for i, _ := range ms.items {
|
||||
if string(ms.items[i].(string)) != "" {
|
||||
menuItems = append(menuItems, ms.items[i].(string))
|
||||
}
|
||||
}
|
||||
menuLayer.PrintInside(&itemField, strings.Join(menuItems, "\n"), blt.TK_ALIGN_LEFT)
|
||||
|
||||
}
|
||||
}
|
||||
}
|
11
engine/screens/sample.go
Normal file
11
engine/screens/sample.go
Normal file
@ -0,0 +1,11 @@
|
||||
package screens
|
||||
|
||||
type SampleScreen struct {
|
||||
|
||||
}
|
||||
|
||||
func (ss *SampleScreen) UseEcs() bool {return false}
|
||||
func (ss *SampleScreen) Enter() {}
|
||||
func (ss *SampleScreen) HandleInput(input string) {}
|
||||
func (ss *SampleScreen) Exit() {}
|
||||
func (ss *SampleScreen) Render() {}
|
@ -1,11 +1,66 @@
|
||||
package screens
|
||||
|
||||
type TitleScreen struct {
|
||||
import (
|
||||
"lab.zaar.be/thefish/alchemyst-go/engine/types"
|
||||
"lab.zaar.be/thefish/alchemyst-go/ui/mainwindow"
|
||||
blt "lab.zaar.be/thefish/bearlibterminal"
|
||||
)
|
||||
|
||||
type TitleScreen struct {
|
||||
mw *mainwindow.MainWindow
|
||||
scm *types.ScreenManager
|
||||
}
|
||||
|
||||
func (ts *TitleScreen) UseEcs() bool {return false}
|
||||
func (ts *TitleScreen) Enter() {}
|
||||
func (ts *TitleScreen) HandleInput(input string) {}
|
||||
func (ts *TitleScreen) Exit() {}
|
||||
func (ts *TitleScreen) Render() {}
|
||||
func NewTitleScreen(mw *mainwindow.MainWindow, scm *types.ScreenManager) *TitleScreen {
|
||||
return &TitleScreen{mw: mw, scm: scm}
|
||||
}
|
||||
|
||||
func (ts *TitleScreen) UseEcs() bool { return false }
|
||||
func (ts *TitleScreen) Enter() {
|
||||
blt.Clear()
|
||||
}
|
||||
func (ts *TitleScreen) HandleInput(input string) {
|
||||
switch input {
|
||||
case "n":
|
||||
ts.scm.SetScreenByName("game")
|
||||
}
|
||||
}
|
||||
func (ts *TitleScreen) Exit() {
|
||||
blt.Clear()
|
||||
}
|
||||
func (ts *TitleScreen) Render() {
|
||||
blt.PrintExt(0, 0, ts.mw.W, ts.mw.H, 15, logo)
|
||||
}
|
||||
|
||||
var logo = `
|
||||
.ddxo. .c c xlx
|
||||
.kd. .0o:O, c0uO'
|
||||
xc 0; x: ko ,,
|
||||
;l Y; c, .Yct;
|
||||
.. .. .......
|
||||
:o: :k; .cxloOo x0. kO .olldk; do .;k lO. dO 'xllxk; ocokk:dl
|
||||
.lKO, .kl 'dl c l0l..;dK lkx..;d: dOx .cOx ,0o c0 kk. .Y .Oo
|
||||
.l0.k0. .0l lK. l0oxxxOK OK;xxx kKOklOkx ,kO;'do. ;xO: .Oo
|
||||
:OoooxO .Ol ;Xc , cK' dK xX. , Ox YY xx ,O0. . .oKx. .0o
|
||||
;k. .Ox Ok..'.,l ;Kk:;dk cKl lX: dKc,;oc kx kk OO dKl;lk: .0O
|
||||
l; ,o .kK0KKK; :Ok; c; l: .oxc. x: Ol xl .dk: .o
|
||||
|
||||
|
||||
|
||||
Alchemyst (c) 2011-2014 thefish <thefish@zaar.be>
|
||||
|
||||
|
||||
|
||||
[color=green]N[/color]ew dungeon run
|
||||
[color=green]L[/color]oad saved game
|
||||
Read [color=green]h[/color]elp file
|
||||
Highest [color=green]S[/color]cores
|
||||
|
||||
|
||||
|
||||
Roguebasin Libtcod Tutorial (c) 2010-2011, Jotaf Henriques
|
||||
Brogue 1.3 (c) 2010 Brian Walker
|
||||
Madness (c) 2010 hmp <humpolec@gmail.com>
|
||||
BearLibTerminal (c) Cfyz 2009-2019 <http://foo.wyrd.name/en:bearlibterminal>
|
||||
Gogue (c) jcerise
|
||||
`
|
Reference in New Issue
Block a user