mirror of
https://github.com/OpenDiablo2/OpenDiablo2
synced 2024-10-01 15:46:17 -04:00
Fixed more rendering issues.
This commit is contained in:
parent
b05e887d8a
commit
71c5b830fd
@ -52,3 +52,9 @@ func BytesToInt32(b []byte) int32 {
|
|||||||
// equivalnt of return int32(binary.LittleEndian.Uint32(b))
|
// 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)
|
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
|
||||||
|
}
|
||||||
|
@ -31,6 +31,7 @@ type EngineConfig struct {
|
|||||||
Scale float64
|
Scale float64
|
||||||
RunInBackground bool
|
RunInBackground bool
|
||||||
TicksPerSecond int
|
TicksPerSecond int
|
||||||
|
FpsCap int
|
||||||
VsyncEnabled bool
|
VsyncEnabled bool
|
||||||
MpqPath string
|
MpqPath string
|
||||||
MpqLoadOrder []string
|
MpqLoadOrder []string
|
||||||
|
@ -49,12 +49,15 @@ func (v *Engine) Render(target *ebiten.Image) {
|
|||||||
offX := -(y * 80)
|
offX := -(y * 80)
|
||||||
offY := y * 40
|
offY := y * 40
|
||||||
for x := 0; x < int(v.regions[0].Region.TileWidth); x++ {
|
for x := 0; x < int(v.regions[0].Region.TileWidth); x++ {
|
||||||
|
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]
|
tile := v.regions[0].Region.DS1.Tiles[y][x]
|
||||||
for i := range tile.Floors {
|
for i := range tile.Floors {
|
||||||
if !tile.Floors[i].Hidden && tile.Floors[i].Prop1 != 0 {
|
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)
|
v.regions[0].Region.RenderTile(offX+int(v.OffsetX), offY+int(v.OffsetY), x, y, RegionLayerTypeFloors, i, target)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
offX += 80
|
offX += 80
|
||||||
offY += 40
|
offY += 40
|
||||||
}
|
}
|
||||||
@ -63,6 +66,8 @@ func (v *Engine) Render(target *ebiten.Image) {
|
|||||||
offX := -(y * 80)
|
offX := -(y * 80)
|
||||||
offY := y * 40
|
offY := y * 40
|
||||||
for x := 0; x < int(v.regions[0].Region.TileWidth); x++ {
|
for x := 0; x < int(v.regions[0].Region.TileWidth); x++ {
|
||||||
|
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]
|
tile := v.regions[0].Region.DS1.Tiles[y][x]
|
||||||
for i := range tile.Shadows {
|
for i := range tile.Shadows {
|
||||||
if tile.Shadows[i].Hidden || tile.Shadows[i].Prop1 == 0 {
|
if tile.Shadows[i].Hidden || tile.Shadows[i].Prop1 == 0 {
|
||||||
@ -70,6 +75,7 @@ func (v *Engine) Render(target *ebiten.Image) {
|
|||||||
}
|
}
|
||||||
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
|
offX += 80
|
||||||
offY += 40
|
offY += 40
|
||||||
}
|
}
|
||||||
@ -78,6 +84,8 @@ func (v *Engine) Render(target *ebiten.Image) {
|
|||||||
offX := -(y * 80)
|
offX := -(y * 80)
|
||||||
offY := y * 40
|
offY := y * 40
|
||||||
for x := 0; x < int(v.regions[0].Region.TileWidth); x++ {
|
for x := 0; x < int(v.regions[0].Region.TileWidth); x++ {
|
||||||
|
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]
|
tile := v.regions[0].Region.DS1.Tiles[y][x]
|
||||||
for i := range tile.Walls {
|
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 {
|
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 {
|
||||||
@ -85,6 +93,7 @@ func (v *Engine) Render(target *ebiten.Image) {
|
|||||||
}
|
}
|
||||||
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
|
offX += 80
|
||||||
offY += 40
|
offY += 40
|
||||||
}
|
}
|
||||||
@ -93,6 +102,8 @@ func (v *Engine) Render(target *ebiten.Image) {
|
|||||||
offX := -(y * 80)
|
offX := -(y * 80)
|
||||||
offY := y * 40
|
offY := y * 40
|
||||||
for x := 0; x < int(v.regions[0].Region.TileWidth); x++ {
|
for x := 0; x < int(v.regions[0].Region.TileWidth); x++ {
|
||||||
|
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]
|
tile := v.regions[0].Region.DS1.Tiles[y][x]
|
||||||
for i := range tile.Walls {
|
for i := range tile.Walls {
|
||||||
if tile.Walls[i].Hidden || tile.Walls[i].Orientation != 15 {
|
if tile.Walls[i].Hidden || tile.Walls[i].Orientation != 15 {
|
||||||
@ -100,6 +111,7 @@ func (v *Engine) Render(target *ebiten.Image) {
|
|||||||
}
|
}
|
||||||
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
|
offX += 80
|
||||||
offY += 40
|
offY += 40
|
||||||
}
|
}
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
"Language": "ENG",
|
"Language": "ENG",
|
||||||
"FullScreen": false,
|
"FullScreen": false,
|
||||||
"Scale": 1,
|
"Scale": 1,
|
||||||
"TicksPerSecond": 60,
|
"TicksPerSecond": 25,
|
||||||
"RunInBackground": true,
|
"RunInBackground": true,
|
||||||
"VsyncEnabled": true,
|
"VsyncEnabled": true,
|
||||||
"SfxVolume": 1.0,
|
"SfxVolume": 1.0,
|
||||||
|
4
main.go
4
main.go
@ -2,6 +2,9 @@ package main
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"log"
|
"log"
|
||||||
|
"strconv"
|
||||||
|
|
||||||
|
"github.com/hajimehoshi/ebiten/ebitenutil"
|
||||||
|
|
||||||
"github.com/essial/OpenDiablo2/Core"
|
"github.com/essial/OpenDiablo2/Core"
|
||||||
"github.com/essial/OpenDiablo2/MPQ"
|
"github.com/essial/OpenDiablo2/MPQ"
|
||||||
@ -30,5 +33,6 @@ func update(screen *ebiten.Image) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
d2Engine.Draw(screen)
|
d2Engine.Draw(screen)
|
||||||
|
ebitenutil.DebugPrint(screen, "FPS:"+strconv.Itoa(int(ebiten.CurrentFPS())))
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user