From 71c5b830fd4ce57f4562ff44ee2fe2029f925493 Mon Sep 17 00:00:00 2001 From: Tim Sarbin Date: Fri, 1 Nov 2019 22:41:49 -0400 Subject: [PATCH] Fixed more rendering issues. --- Common/Math.go | 6 ++++++ Core/Engine.go | 1 + Map/Engine.go | 50 +++++++++++++++++++++++++++++++------------------- config.json | 2 +- main.go | 4 ++++ 5 files changed, 43 insertions(+), 20 deletions(-) diff --git a/Common/Math.go b/Common/Math.go index f2c8894e..023acfed 100644 --- a/Common/Math.go +++ b/Common/Math.go @@ -52,3 +52,9 @@ func BytesToInt32(b []byte) int32 { // equivalnt of return int32(binary.LittleEndian.Uint32(b)) return int32(uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24) } + +func IsoToScreen(isoX, isoY, modX, modY int) (int, int) { + screenX := (isoX - isoY) * 80 + screenY := (isoX + isoY) * 40 + return screenX + modX, screenY + modY +} diff --git a/Core/Engine.go b/Core/Engine.go index cba341c0..a17f66cf 100644 --- a/Core/Engine.go +++ b/Core/Engine.go @@ -31,6 +31,7 @@ type EngineConfig struct { Scale float64 RunInBackground bool TicksPerSecond int + FpsCap int VsyncEnabled bool MpqPath string MpqLoadOrder []string diff --git a/Map/Engine.go b/Map/Engine.go index 77a89d45..e5241a59 100644 --- a/Map/Engine.go +++ b/Map/Engine.go @@ -49,10 +49,13 @@ func (v *Engine) Render(target *ebiten.Image) { offX := -(y * 80) offY := y * 40 for x := 0; x < int(v.regions[0].Region.TileWidth); x++ { - tile := v.regions[0].Region.DS1.Tiles[y][x] - for i := range tile.Floors { - if !tile.Floors[i].Hidden && tile.Floors[i].Prop1 != 0 { - v.regions[0].Region.RenderTile(offX+int(v.OffsetX), offY+int(v.OffsetY), x, y, RegionLayerTypeFloors, i, target) + sx, sy := Common.IsoToScreen(x, y, int(v.OffsetX), int(v.OffsetY)) + if sx > -160 && sy > -160 && sx <= 800 && sy <= 1000 { + tile := v.regions[0].Region.DS1.Tiles[y][x] + for i := range tile.Floors { + if !tile.Floors[i].Hidden && tile.Floors[i].Prop1 != 0 { + v.regions[0].Region.RenderTile(offX+int(v.OffsetX), offY+int(v.OffsetY), x, y, RegionLayerTypeFloors, i, target) + } } } offX += 80 @@ -63,12 +66,15 @@ func (v *Engine) Render(target *ebiten.Image) { offX := -(y * 80) offY := y * 40 for x := 0; x < int(v.regions[0].Region.TileWidth); x++ { - tile := v.regions[0].Region.DS1.Tiles[y][x] - for i := range tile.Shadows { - if tile.Shadows[i].Hidden || tile.Shadows[i].Prop1 == 0 { - continue + sx, sy := Common.IsoToScreen(x, y, int(v.OffsetX), int(v.OffsetY)) + if sx > -160 && sy > -160 && sx <= 800 && sy <= 1000 { + tile := v.regions[0].Region.DS1.Tiles[y][x] + for i := range tile.Shadows { + if tile.Shadows[i].Hidden || tile.Shadows[i].Prop1 == 0 { + continue + } + v.regions[0].Region.RenderTile(offX+int(v.OffsetX), offY+int(v.OffsetY), x, y, RegionLayerTypeShadows, i, target) } - v.regions[0].Region.RenderTile(offX+int(v.OffsetX), offY+int(v.OffsetY), x, y, RegionLayerTypeShadows, i, target) } offX += 80 offY += 40 @@ -78,12 +84,15 @@ func (v *Engine) Render(target *ebiten.Image) { offX := -(y * 80) offY := y * 40 for x := 0; x < int(v.regions[0].Region.TileWidth); x++ { - tile := v.regions[0].Region.DS1.Tiles[y][x] - for i := range tile.Walls { - if tile.Walls[i].Hidden || tile.Walls[i].Orientation == 15 || tile.Walls[i].Orientation == 10 || tile.Walls[i].Orientation == 11 || tile.Walls[i].Orientation == 0 { - continue + sx, sy := Common.IsoToScreen(x, y, int(v.OffsetX), int(v.OffsetY)) + if sx > -160 && sy > -160 && sx <= 800 && sy <= 1000 { + tile := v.regions[0].Region.DS1.Tiles[y][x] + for i := range tile.Walls { + if tile.Walls[i].Hidden || tile.Walls[i].Orientation == 15 || tile.Walls[i].Orientation == 10 || tile.Walls[i].Orientation == 11 || tile.Walls[i].Orientation == 0 { + continue + } + v.regions[0].Region.RenderTile(offX+int(v.OffsetX), offY+int(v.OffsetY), x, y, RegionLayerTypeWalls, i, target) } - v.regions[0].Region.RenderTile(offX+int(v.OffsetX), offY+int(v.OffsetY), x, y, RegionLayerTypeWalls, i, target) } offX += 80 offY += 40 @@ -93,12 +102,15 @@ func (v *Engine) Render(target *ebiten.Image) { offX := -(y * 80) offY := y * 40 for x := 0; x < int(v.regions[0].Region.TileWidth); x++ { - tile := v.regions[0].Region.DS1.Tiles[y][x] - for i := range tile.Walls { - if tile.Walls[i].Hidden || tile.Walls[i].Orientation != 15 { - continue + sx, sy := Common.IsoToScreen(x, y, int(v.OffsetX), int(v.OffsetY)) + if sx > -160 && sy > -160 && sx <= 800 && sy <= 1000 { + tile := v.regions[0].Region.DS1.Tiles[y][x] + for i := range tile.Walls { + if tile.Walls[i].Hidden || tile.Walls[i].Orientation != 15 { + continue + } + v.regions[0].Region.RenderTile(offX+int(v.OffsetX), offY+int(v.OffsetY), x, y, RegionLayerTypeWalls, i, target) } - v.regions[0].Region.RenderTile(offX+int(v.OffsetX), offY+int(v.OffsetY), x, y, RegionLayerTypeWalls, i, target) } offX += 80 offY += 40 diff --git a/config.json b/config.json index 6efa2d72..52573f72 100644 --- a/config.json +++ b/config.json @@ -2,7 +2,7 @@ "Language": "ENG", "FullScreen": false, "Scale": 1, - "TicksPerSecond": 60, + "TicksPerSecond": 25, "RunInBackground": true, "VsyncEnabled": true, "SfxVolume": 1.0, diff --git a/main.go b/main.go index b38dd85e..5f54d022 100644 --- a/main.go +++ b/main.go @@ -2,6 +2,9 @@ package main import ( "log" + "strconv" + + "github.com/hajimehoshi/ebiten/ebitenutil" "github.com/essial/OpenDiablo2/Core" "github.com/essial/OpenDiablo2/MPQ" @@ -30,5 +33,6 @@ func update(screen *ebiten.Image) error { return nil } d2Engine.Draw(screen) + ebitenutil.DebugPrint(screen, "FPS:"+strconv.Itoa(int(ebiten.CurrentFPS()))) return nil }