started with generic collision_system (not working yet)

This commit is contained in:
2024-02-26 18:31:36 +01:00
parent 0ca5d8f4a0
commit 267e15cc27
10 changed files with 275 additions and 100 deletions

View File

@@ -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")
}