82 lines
1.9 KiB
Go
82 lines
1.9 KiB
Go
package main
|
|
|
|
import (
|
|
"time"
|
|
|
|
. "github.com/gbin/goncurses"
|
|
"gitlab.com/stvnliu/ai_game/menu"
|
|
. "gitlab.com/stvnliu/ai_game/utils/types"
|
|
// "gitlab.com/stvnliu/ai_game/utils/window_helper"
|
|
)
|
|
|
|
const (
|
|
INPUT_PROMPT_LENGTH = 40
|
|
INPUT_PROMPT_HEIGHT = 10
|
|
)
|
|
|
|
func InputPrompt(scr *Window) string {
|
|
my, mx := scr.MaxYX()
|
|
w, err := NewWindow(INPUT_PROMPT_HEIGHT, INPUT_PROMPT_LENGTH, (my/2)-(INPUT_PROMPT_HEIGHT/2), (mx/2)-(INPUT_PROMPT_LENGTH/2))
|
|
if err != nil {
|
|
panic("Oh no sth went wrong in input!!")
|
|
}
|
|
w.Box(0, 0)
|
|
Echo(true)
|
|
msg := "Game name: "
|
|
w.MovePrint(0, 1, " New game information ")
|
|
w.MovePrint(2, 2, msg)
|
|
w.Move(2, 2+len(msg))
|
|
input, err := w.GetString(16) // character input box
|
|
if err != nil {
|
|
panic("Oh no sth went wrong in input 2!!")
|
|
}
|
|
w.MovePrint(3, 2, input)
|
|
w.Refresh()
|
|
Echo(false)
|
|
for {
|
|
ch := w.GetChar()
|
|
switch Key(ch) {
|
|
case 'q':
|
|
return input
|
|
}
|
|
}
|
|
}
|
|
func NewGame(scr *Window) {
|
|
//_, _ := scr.MaxYX()
|
|
game_name := InputPrompt(scr)
|
|
// create new game state
|
|
// println("Creating new game %v...", game_name)
|
|
game := Game{
|
|
SaveGame: game_name,
|
|
LastSaved: time.Now(),
|
|
}
|
|
my_npcs := MakeNpcs()
|
|
game.DataStored.Npcs = my_npcs
|
|
scr.MovePrintf(1, 2, "Created new game \"%v\"!", game.SaveGame)
|
|
for i := 0; i < len(game.DataStored.Npcs); i++ {
|
|
scr.MovePrintf(2+i, 2, "Initialising \"%v\"...", game.DataStored.Npcs[i].Name)
|
|
scr.MovePrintf(3+i, 2, "Found NPC query string!")
|
|
scr.Refresh()
|
|
|
|
}
|
|
// println(game.DataStored.Npcs[0].Name)
|
|
}
|
|
func Continue(scr *Window) {
|
|
// recover state from last save?
|
|
}
|
|
func Exit(scr *Window) {
|
|
// save game state?
|
|
}
|
|
func main() {
|
|
scr, err := Init()
|
|
if err != nil {
|
|
println("Something went wrong with Ncurses! Aborting!")
|
|
return
|
|
}
|
|
menu_items := []GameMenuItem{
|
|
{Name: "New game!", Operation: NewGame},
|
|
{Name: "Continue!", Operation: Continue},
|
|
{Name: "Exit!", Operation: Exit},
|
|
}
|
|
menu.CreateMenu(scr, menu_items)
|
|
}
|