working prototype with ecs
This commit is contained in:
@ -9,6 +9,7 @@ import (
|
||||
"lab.zaar.be/thefish/alchemyst-go/engine/gamemap/mapgens"
|
||||
"lab.zaar.be/thefish/alchemyst-go/engine/gamestate"
|
||||
"lab.zaar.be/thefish/alchemyst-go/engine/mob"
|
||||
"lab.zaar.be/thefish/alchemyst-go/engine/mob/movement"
|
||||
"lab.zaar.be/thefish/alchemyst-go/engine/screens"
|
||||
"lab.zaar.be/thefish/alchemyst-go/engine/types"
|
||||
"lab.zaar.be/thefish/alchemyst-go/ui"
|
||||
@ -56,18 +57,29 @@ func main() {
|
||||
var logLevels = map[string]zerolog.Level{"debug": zerolog.DebugLevel, "info": zerolog.InfoLevel, "warn": zerolog.WarnLevel}
|
||||
var logger = log.Output(zerolog.ConsoleWriter{Out: os.Stdout, TimeFormat: time.RFC3339}).Level(logLevels[config.Verbosity])
|
||||
|
||||
// set up context
|
||||
mainCtx := util.NewClientContext(config, &logger)
|
||||
|
||||
|
||||
//set up main window
|
||||
mw := mainwindow.Init(mainCtx)
|
||||
defer mw.Close()
|
||||
|
||||
setupLayers(mw)
|
||||
|
||||
//fixme
|
||||
//set up input decoder
|
||||
go decodeInput(mainCtx, mw.GetLayer("base"))
|
||||
|
||||
|
||||
//fixme set up (load / generate) level
|
||||
level, rooms := mapgens.DefaultGen(gamemap.NewLevel(mainCtx, "test", 1))
|
||||
State.Level = level
|
||||
vp := mainwindow.NewViewPort(30, 0, 70, 47, mw.GetLayer("base"))
|
||||
|
||||
//Set up viewport
|
||||
vp := mainwindow.NewViewPort(30, 0, 70, 47, mw.GetLayer("base"))
|
||||
go vp.Listen(State)
|
||||
|
||||
//Set up Screen Manager
|
||||
screenMgr := types.NewScreenManager(mainCtx)
|
||||
screenMgr.AddScreen("title", &screens.TitleScreen{})
|
||||
screenMgr.AddScreen("game", screens.NewGameScreen(mw, &State, vp))
|
||||
@ -92,15 +104,21 @@ func main() {
|
||||
//vp.PlayerCoords = player.Coords
|
||||
//vp.Render(&State)
|
||||
|
||||
go decodeInput(mainCtx, mw.GetLayer("base"))
|
||||
go vp.Listen(State)
|
||||
//set up controller
|
||||
|
||||
controller := ecs.NewController()
|
||||
|
||||
controller.MapComponentClass("coords", types.Coords{})
|
||||
controller.MapComponentClass("appearance", types.Appearance{})
|
||||
controller.MapComponentClass("mob", mob.Mob{})
|
||||
controller.MapComponentClass("moveable", movement.Moveable{})
|
||||
|
||||
moveable := movement.Moveable{
|
||||
Controller: controller,
|
||||
Level: level,
|
||||
}
|
||||
|
||||
//fixme set up (load / generate) player
|
||||
player := controller.CreateEntity([]ecs.Component{})
|
||||
|
||||
controller.AddComponent(player, &types.Appearance{
|
||||
@ -111,13 +129,15 @@ func main() {
|
||||
})
|
||||
|
||||
controller.AddComponent(player, rooms[0].Center) //implicit Coords
|
||||
controller.AddComponent(player, moveable)
|
||||
|
||||
|
||||
render := systems.MobRenderSystem{EntityController: controller}
|
||||
|
||||
controller.AddSystem(render, 1)
|
||||
|
||||
level.Player = player
|
||||
State.Player = player
|
||||
State.Controller = controller
|
||||
|
||||
//but every call to bearlibterminal must be wrapped to closure and passed to mainfunc
|
||||
var exit = false
|
||||
|
Reference in New Issue
Block a user