working prototype with ecs

This commit is contained in:
anton.gurov
2019-11-05 17:55:38 +03:00
parent 096ff2b182
commit a195e335eb
7 changed files with 120 additions and 52 deletions

View File

@ -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