1
1
mirror of https://github.com/OpenDiablo2/OpenDiablo2 synced 2024-06-25 00:25:23 +00:00

Fix animation issue and map layer rendering. (#181)

* Fixed animation 'catchup' issue. Fixed map layer rendering.
This commit is contained in:
Tim Sarbin 2019-11-15 14:12:23 -05:00 committed by GitHub
parent 4c9f0ec03e
commit b5673c1d6f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 31 additions and 14 deletions

View File

@ -134,22 +134,18 @@ func (v *Engine) GenTiles(region *EngineRegion) {
} }
func (v *Engine) RenderRegion(region EngineRegion, target *ebiten.Image) { func (v *Engine) RenderRegion(region EngineRegion, target *ebiten.Image) {
tilesToRender := make([]RegionTile, len(region.Tiles)) //tilesToRender := make([]RegionTile, len(region.Tiles))
for i, tile := range region.Tiles { for tileIdx := range region.Tiles {
sx, sy := d2helper.IsoToScreen(tile.tileX+region.Rect.Left, tile.tileY+region.Rect.Top, int(v.OffsetX), int(v.OffsetY)) sx, sy := d2helper.IsoToScreen(region.Tiles[tileIdx].tileX+region.Rect.Left, region.Tiles[tileIdx].tileY+region.Rect.Top, int(v.OffsetX), int(v.OffsetY))
if sx > -160 && sy > -160 && sx <= 880 && sy <= 1000 { if sx > -160 && sy > -160 && sx <= 880 && sy <= 1000 {
tilesToRender[i] = tile v.RenderTile(region.Region, region.Tiles[tileIdx].offX, region.Tiles[tileIdx].offY, region.Tiles[tileIdx].tileX, region.Tiles[tileIdx].tileY, target)
} }
} }
for _, tile := range tilesToRender { //for _, tile := range tilesToRender {
v.RenderTile(region.Region, tile.offX, tile.offY, tile.tileX, tile.tileY, target) // v.RenderTileObjects(region.Region, tile.offX, tile.offY, tile.tileX, tile.tileY, target)
} //}
for _, tile := range tilesToRender {
v.RenderTileObjects(region.Region, tile.offX, tile.offY, tile.tileX, tile.tileY, target)
}
} }
func (v *Engine) RenderTileObjects(region *Region, offX, offY, x, y int, target *ebiten.Image) { func (v *Engine) RenderTileObjects(region *Region, offX, offY, x, y int, target *ebiten.Image) {
@ -209,10 +205,31 @@ func (v *Engine) RenderTile(region *Region, offX, offY, x, y int, target *ebiten
region.RenderTile(offX+int(v.OffsetX), offY+int(v.OffsetY), x, y, d2enum.RegionLayerTypeShadows, i, target) region.RenderTile(offX+int(v.OffsetX), offY+int(v.OffsetY), x, y, d2enum.RegionLayerTypeShadows, i, target)
} }
for i := range tile.Walls { for i := range tile.Walls {
if tile.Walls[i].Orientation >= 15 {
// Upper walls only
continue
}
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 { 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 continue
} }
region.RenderTile(offX+int(v.OffsetX), offY+int(v.OffsetY), x, y, d2enum.RegionLayerTypeWalls, i, target) region.RenderTile(offX+int(v.OffsetX), offY+int(v.OffsetY), x, y, d2enum.RegionLayerTypeWalls, i, target)
} }
v.RenderTileObjects(region, offX, offY, x, y, target)
for i := range tile.Walls {
if tile.Walls[i].Orientation <= 15 {
// Lower walls only
continue
}
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
}
region.RenderTile(offX+int(v.OffsetX), offY+int(v.OffsetY), x, y, d2enum.RegionLayerTypeWalls, i, target)
}
for i := range tile.Walls {
if tile.Walls[i].Orientation != 15 {
// Ceiling only
continue
}
region.RenderTile(offX+int(v.OffsetX), offY+int(v.OffsetY), x, y, d2enum.RegionLayerTypeWalls, i, target)
}
} }

View File

@ -235,7 +235,7 @@ func (v *Sprite) updateAnimation() {
timePerFrame = 1.0 / float64(len(v.Frames)) timePerFrame = 1.0 / float64(len(v.Frames))
} }
now := d2helper.Now() now := d2helper.Now()
if v.LastFrameTime+timePerFrame < now { for v.LastFrameTime+timePerFrame < now {
v.LastFrameTime += timePerFrame v.LastFrameTime += timePerFrame
if !v.AnimateBackwards { if !v.AnimateBackwards {
v.Frame++ v.Frame++
@ -246,7 +246,7 @@ func (v *Sprite) updateAnimation() {
v.Frame = 0 v.Frame = 0
} }
} }
return continue
} }
v.Frame-- v.Frame--
if v.Frame < 0 { if v.Frame < 0 {