Add new map and tileset files for Windows release
- Created test.tmj and test.tsj files in the maps directory. - Added tileset.tsj with configuration for the MainTileset including image path and dimensions.
This commit is contained in:
@@ -46,7 +46,7 @@ type PlayScene struct {
|
||||
}
|
||||
|
||||
func NewPlayScene() *PlayScene {
|
||||
w, err := entities.LoadWorldFromTiled("mapp-maker/room1.tmj")
|
||||
w, err := entities.LoadWorldFromTiled("assets/maps/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
|
||||
@@ -143,7 +143,7 @@ func (s *PlayScene) Update() error {
|
||||
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")
|
||||
newW, err := entities.LoadWorldFromTiled("assets/maps/" + prt.TargetMap + ".tmj")
|
||||
if err == nil {
|
||||
s.world = newW
|
||||
// Reset player position for new map
|
||||
@@ -181,37 +181,87 @@ func (s *PlayScene) Draw(screen *ebiten.Image) {
|
||||
camY := s.player.Pos[1] - float64(ViewSize)/2.0
|
||||
camZ := s.player.Pos[2] - float64(ViewSize)/2.0
|
||||
|
||||
// Vänster vy: Sido-vy (renderar alla X och Y objekt vid spelarens Z)
|
||||
for x := 0; x < s.world.Width; x++ {
|
||||
for y := 0; y < s.world.Height; y++ {
|
||||
ent := s.world.GetEntityAt(x, y, playerGridZ)
|
||||
if ent != nil {
|
||||
px := float64(x)*entities.TileSize - camX
|
||||
py := float64(y)*entities.TileSize - camY
|
||||
ent.DrawSide(s.leftView, px, py)
|
||||
// Vänster vy: Sido-vy (renderar objekt vid spelarens Z och "inåt", max 3 djup)
|
||||
// Rendera från djupast till spelarens Z (mindre Z är djupare inåt bild/scen)
|
||||
leftDepthStart := playerGridZ - 3
|
||||
if leftDepthStart < 0 {
|
||||
leftDepthStart = 0
|
||||
}
|
||||
for zLevel := leftDepthStart; zLevel <= playerGridZ; zLevel++ {
|
||||
tint := float32(1.0)
|
||||
alpha := float32(1.0)
|
||||
if zLevel < playerGridZ {
|
||||
// Förskugga och gör transparent lager längre "in"
|
||||
diff := float32(playerGridZ - zLevel)
|
||||
tint = 1.0 - (diff * 0.2)
|
||||
alpha = 1.0 - (diff * 0.25)
|
||||
if tint < 0.2 {
|
||||
tint = 0.2
|
||||
}
|
||||
if alpha < 0.2 {
|
||||
alpha = 0.2
|
||||
}
|
||||
}
|
||||
|
||||
for x := 0; x < s.world.Width; x++ {
|
||||
for y := 0; y < s.world.Height; y++ {
|
||||
ent := s.world.GetEntityAt(x, y, zLevel)
|
||||
if ent != nil {
|
||||
px := float64(x)*entities.TileSize - camX
|
||||
py := float64(y)*entities.TileSize - camY
|
||||
ent.DrawSide(s.leftView, px, py, tint, alpha)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Höger vy: Ovan-vy (renderar alla X och Z objekt vid underliggande rad)
|
||||
viewY := playerGridY
|
||||
if s.player.IsGrounded {
|
||||
viewY += 1
|
||||
}
|
||||
// Höger vy: Ovan-vy (renderar ner i marken så att det känns som det går "in" i bilden)
|
||||
// -1: Två block inåt jord/hål (Djupast)
|
||||
// 0: Ett block inåt jord/hål
|
||||
// +1: Samma (eller 1 över)
|
||||
// För att saker under spelaren ska ligga bakom byter vi tecken. "upp" i z/y är nu inåt.
|
||||
// Vi visar tre block nedåt i Y: playerGridY+3, Y+2, Y+1, Y
|
||||
topLevels := []int{playerGridY + 3, playerGridY + 2, playerGridY + 1, playerGridY}
|
||||
for i, yLevel := range topLevels {
|
||||
if yLevel >= 0 && yLevel < s.world.Height {
|
||||
tint := float32(1.0)
|
||||
alpha := float32(1.0)
|
||||
|
||||
for x := 0; x < s.world.Width; x++ {
|
||||
for z := 0; z < s.world.Depth; z++ {
|
||||
ent := s.world.GetEntityAt(x, viewY, z)
|
||||
if ent != nil {
|
||||
px := float64(x)*entities.TileSize - camX
|
||||
pz := float64(z)*entities.TileSize - camZ
|
||||
ent.DrawTop(s.rightView, px, pz)
|
||||
// Sätt färger baserat på relativ nivå ("inåt") där de djupaste (Y+3) är mörkare
|
||||
// Index 0 är djupast i marken
|
||||
if i == 0 { // -2 block (långt under fötter)
|
||||
tint = 0.6
|
||||
alpha = 0.4
|
||||
} else if i == 1 { // -1 block (nyss under fötter)
|
||||
tint = 0.8
|
||||
alpha = 0.6
|
||||
} else if i == 2 { // marken spelaren står på
|
||||
tint = 1.0
|
||||
alpha = 1.0
|
||||
} else if i == 3 { // spelarens fothöjd (0)
|
||||
tint = 1.2
|
||||
alpha = 1.0
|
||||
}
|
||||
|
||||
for x := 0; x < s.world.Width; x++ {
|
||||
for z := 0; z < s.world.Depth; z++ {
|
||||
ent := s.world.GetEntityAt(x, yLevel, z)
|
||||
if ent != nil {
|
||||
px := float64(x)*entities.TileSize - camX
|
||||
pz := float64(z)*entities.TileSize - camZ
|
||||
ent.DrawTop(s.rightView, px, pz, tint, alpha)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Rendera spelaren på toppen (efter marken och spelarens lager är ritat)
|
||||
if i == 3 {
|
||||
s.drawPlayerTop(s.rightView, camX, camZ)
|
||||
}
|
||||
}
|
||||
|
||||
s.drawPlayerSide(s.leftView, camX, camY)
|
||||
s.drawPlayerTop(s.rightView, camX, camZ)
|
||||
|
||||
opL := &ebiten.DrawImageOptions{}
|
||||
opL.GeoM.Translate(10, 100)
|
||||
@@ -245,8 +295,8 @@ func (s *PlayScene) drawPlayerSide(screen *ebiten.Image, camX, camY float64) {
|
||||
op.GeoM.Translate(96, 0)
|
||||
}
|
||||
|
||||
drawX := p.Pos[0] - camX
|
||||
drawY := p.Pos[1] - camY
|
||||
drawX := p.Pos[0] - camX
|
||||
drawY := p.Pos[1] - camY
|
||||
|
||||
op.GeoM.Translate(drawX, drawY)
|
||||
screen.DrawImage(subImg, op)
|
||||
|
||||
Reference in New Issue
Block a user