mirror of
https://github.com/mvvasilev/last_light.git
synced 2025-04-19 12:49:52 +03:00
53 lines
1.2 KiB
Go
53 lines
1.2 KiB
Go
|
package game
|
||
|
|
||
|
import (
|
||
|
"log"
|
||
|
"mvvasilev/last_light/engine"
|
||
|
"mvvasilev/last_light/engine/ecs"
|
||
|
"mvvasilev/last_light/game/component"
|
||
|
"mvvasilev/last_light/game/system"
|
||
|
)
|
||
|
|
||
|
type GameWorld struct {
|
||
|
ecs *ecs.World
|
||
|
}
|
||
|
|
||
|
func CreateGameWorld() *GameWorld {
|
||
|
world := &GameWorld{
|
||
|
ecs: ecs.CreateWorld(),
|
||
|
}
|
||
|
|
||
|
engineContext, err := engine.InitEngine()
|
||
|
|
||
|
if err != nil {
|
||
|
// TODO: error logs
|
||
|
log.Fatalf("%~v", err)
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
world.ecs.RegisterComponentType(component.ComponentType_RenderableComponent, "RenderableComponent")
|
||
|
world.ecs.RegisterComponentType(component.ComponentType_InputComponent, "InputComponent")
|
||
|
world.ecs.RegisterComponentType(component.ComponentType_GameStateComponent, "GameStateComponent")
|
||
|
|
||
|
world.ecs.AddSystem(system.CreateRenderingSystem(engineContext))
|
||
|
world.ecs.AddSystem(system.CreateInputSystem(engineContext))
|
||
|
world.ecs.AddSystem(system.CreateGameStateSystem())
|
||
|
|
||
|
world.ecs.AddSingletonComponent(&component.InputComponent{})
|
||
|
|
||
|
world.ecs.CreateEntity(&component.DrawablesComponent{
|
||
|
Priority: 0,
|
||
|
Drawables: []engine.Drawable{},
|
||
|
})
|
||
|
|
||
|
return world
|
||
|
}
|
||
|
|
||
|
func (gw *GameWorld) World() *ecs.World {
|
||
|
return gw.ecs
|
||
|
}
|
||
|
|
||
|
func (gw *GameWorld) Tick(dt int64) {
|
||
|
gw.ecs.Tick(dt)
|
||
|
}
|