Implementerat Tiled JSON Map parser med portaler mellan 2 st hundramappars rum
This commit is contained in:
@@ -46,25 +46,10 @@ type PlayScene struct {
|
||||
}
|
||||
|
||||
func NewPlayScene() *PlayScene {
|
||||
w := entities.NewWorld(10, 10, 10)
|
||||
|
||||
tile12, _, _ := ebitenutil.NewImageFromFile("assets/images/1 Tiles/Tile_12.png")
|
||||
tile02, _, _ := ebitenutil.NewImageFromFile("assets/images/1 Tiles/Tile_02.png")
|
||||
tile31, _, _ := ebitenutil.NewImageFromFile("assets/images/1 Tiles/Tile_31.png")
|
||||
|
||||
for x := 0; x < 10; x++ {
|
||||
for z := 0; z < 10; z++ {
|
||||
// Surface grass
|
||||
w.SetEntityAt(x, 9, z, &entities.Tile{
|
||||
SideImg: tile02,
|
||||
TopImg: tile31,
|
||||
})
|
||||
// Sub dirt
|
||||
w.SetEntityAt(x, 8, z, &entities.Tile{
|
||||
SideImg: tile12,
|
||||
TopImg: tile12,
|
||||
})
|
||||
}
|
||||
w, err := entities.LoadWorldFromTiled("mapp-maker/room1.tmj")
|
||||
if err != nil {
|
||||
log.Println("Kunde inte ladda room1:", err)
|
||||
w = entities.NewWorld(100, 10, 100) // Fallback tom värd om JSON saknas
|
||||
}
|
||||
|
||||
pRun, _, err := ebitenutil.NewImageFromFile("assets/images/Warrior_1/Run.png")
|
||||
@@ -77,13 +62,13 @@ func NewPlayScene() *PlayScene {
|
||||
pIdle = pRun
|
||||
}
|
||||
|
||||
pTop := ebiten.NewImage(32, 32)
|
||||
pTop := ebiten.NewImage(96, 96)
|
||||
pTop.Fill(color.RGBA{255, 255, 0, 255})
|
||||
|
||||
player := &Player{
|
||||
Pos: mgl64.Vec3{4.0 * entities.TileSize, 7.0 * entities.TileSize, 4.0 * entities.TileSize},
|
||||
Width: 20,
|
||||
Height: 40,
|
||||
Pos: mgl64.Vec3{50.0 * entities.TileSize, 6.0 * entities.TileSize, 50.0 * entities.TileSize},
|
||||
Width: 96,
|
||||
Height: 96,
|
||||
SpriteRun: pRun,
|
||||
SpriteIdle: pIdle,
|
||||
SpriteTop: pTop,
|
||||
@@ -154,6 +139,22 @@ func (s *PlayScene) Update() error {
|
||||
p.Pos[1] = nextY
|
||||
p.Pos[2] = nextZ
|
||||
|
||||
// Kolla ifall vi står på en portal
|
||||
standEnt := s.world.GetEntityAt(gridX, gridY, gridZ)
|
||||
if prt, ok := standEnt.(*entities.Portal); ok {
|
||||
log.Println("Byter rum till: ", prt.TargetMap)
|
||||
newW, err := entities.LoadWorldFromTiled("mapp-maker/" + prt.TargetMap + ".tmj")
|
||||
if err == nil {
|
||||
s.world = newW
|
||||
// Reset player position for new map
|
||||
if prt.TargetMap == "room1" {
|
||||
p.Pos = mgl64.Vec3{80.0 * entities.TileSize, 6.0 * entities.TileSize, 10.0 * entities.TileSize}
|
||||
} else {
|
||||
p.Pos = mgl64.Vec3{40.0 * entities.TileSize, 6.0 * entities.TileSize, 65.0 * entities.TileSize}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if isMoving {
|
||||
p.AnimationCounter++
|
||||
if p.AnimationCounter > 5 {
|
||||
@@ -161,7 +162,7 @@ func (s *PlayScene) Update() error {
|
||||
p.AnimationCounter = 0
|
||||
}
|
||||
} else {
|
||||
p.AnimationFrame = 0
|
||||
p.AnimationFrame = 0
|
||||
}
|
||||
|
||||
return nil
|
||||
@@ -225,11 +226,11 @@ func (s *PlayScene) Draw(screen *ebiten.Image) {
|
||||
|
||||
func (s *PlayScene) drawPlayerSide(screen *ebiten.Image, camX, camY float64) {
|
||||
p := s.player
|
||||
|
||||
|
||||
sx := p.AnimationFrame * 96
|
||||
srcRect := image.Rect(sx, 0, sx+96, 96)
|
||||
var activeSprite *ebiten.Image
|
||||
|
||||
|
||||
if p.Vel[0] != 0 || p.Vel[2] != 0 { // Is moving X or Z
|
||||
activeSprite = p.SpriteRun
|
||||
} else {
|
||||
@@ -244,8 +245,8 @@ func (s *PlayScene) drawPlayerSide(screen *ebiten.Image, camX, camY float64) {
|
||||
op.GeoM.Translate(96, 0)
|
||||
}
|
||||
|
||||
drawX := p.Pos[0] - camX - 38
|
||||
drawY := p.Pos[1] - camY - 56
|
||||
drawX := p.Pos[0] - camX
|
||||
drawY := p.Pos[1] - camY
|
||||
|
||||
op.GeoM.Translate(drawX, drawY)
|
||||
screen.DrawImage(subImg, op)
|
||||
@@ -254,7 +255,7 @@ func (s *PlayScene) drawPlayerSide(screen *ebiten.Image, camX, camY float64) {
|
||||
func (s *PlayScene) drawPlayerTop(screen *ebiten.Image, camX, camZ float64) {
|
||||
p := s.player
|
||||
op := &ebiten.DrawImageOptions{}
|
||||
|
||||
|
||||
drawX := p.Pos[0] - camX
|
||||
drawZ := p.Pos[2] - camZ
|
||||
op.GeoM.Translate(drawX, drawZ)
|
||||
|
||||
Reference in New Issue
Block a user