started with generic collision_system (not working yet)
This commit is contained in:
16
grid/grid.go
16
grid/grid.go
@@ -6,6 +6,7 @@ import (
|
||||
"openquell/assets"
|
||||
"openquell/components"
|
||||
"openquell/config"
|
||||
"openquell/handlers"
|
||||
"openquell/observers"
|
||||
|
||||
"github.com/mlange-42/arche/ecs"
|
||||
@@ -29,11 +30,12 @@ func NewGrid(world *ecs.World,
|
||||
|
||||
// we use this to turn our tiles into iterable entities, used for
|
||||
// collision detection, transformation and other things
|
||||
playermapper := generic.NewMap4[
|
||||
playermapper := generic.NewMap5[
|
||||
components.Position,
|
||||
components.Velocity,
|
||||
components.Renderable,
|
||||
components.Player](world)
|
||||
components.Player,
|
||||
components.Collider](world)
|
||||
|
||||
solidmapper := generic.NewMap4[
|
||||
components.Position,
|
||||
@@ -70,9 +72,11 @@ func NewGrid(world *ecs.World,
|
||||
var transient *components.Transient
|
||||
var player *components.Player
|
||||
var destroyable *components.Destroyable
|
||||
var collider *components.Collider
|
||||
|
||||
playerobserver := observers.GetPlayerObserver(world)
|
||||
obstacleobserver := observers.GetObstacleObserver(world)
|
||||
entityobserver := observers.GetEntityObserver(world)
|
||||
|
||||
for point, tile := range mapslice {
|
||||
switch tile.Renderable {
|
||||
@@ -83,14 +87,17 @@ func NewGrid(world *ecs.World,
|
||||
pos, render, _, _ = solidmapper.Get(entity)
|
||||
case tile.Player:
|
||||
entity := playermapper.New()
|
||||
pos, vel, render, player = playermapper.Get(entity)
|
||||
pos, vel, render, player, collider = playermapper.Get(entity)
|
||||
playerobserver.AddEntity(entity)
|
||||
vel.Speed = config.PLAYERSPEED
|
||||
player.IsPrimary = tile.IsPrimary
|
||||
player.Sprites = tile.Tiles
|
||||
collider.CollisionHandler = handlers.HandlePlayerCollision
|
||||
collider.EdgeHandler = handlers.HandlePlayerEdgeBump
|
||||
case tile.Collectible:
|
||||
entity := colmapper.New()
|
||||
pos, render, _ = colmapper.Get(entity)
|
||||
entityobserver.AddEntity(entity)
|
||||
case tile.Obstacle:
|
||||
entity := obsmapper.New()
|
||||
pos, vel, render, _ = obsmapper.Get(entity)
|
||||
@@ -98,14 +105,17 @@ func NewGrid(world *ecs.World,
|
||||
vel.PointingAt = tile.Direction
|
||||
vel.Speed = config.PLAYERSPEED
|
||||
obstacleobserver.AddEntity(entity)
|
||||
entityobserver.AddEntity(entity)
|
||||
case tile.Transient:
|
||||
entity := transmapper.New()
|
||||
pos, render, transient = transmapper.Get(entity)
|
||||
transient.Sprites = tile.TileNames
|
||||
entityobserver.AddEntity(entity)
|
||||
case tile.Destroyable:
|
||||
entity := doormapper.New()
|
||||
pos, render, destroyable = doormapper.Get(entity)
|
||||
destroyable.Sprites = tile.Tiles
|
||||
entityobserver.AddEntity(entity)
|
||||
default:
|
||||
log.Fatalln("unsupported tile type encountered")
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user