1
1
mirror of https://github.com/OpenDiablo2/OpenDiablo2 synced 2024-06-10 09:50:42 +00:00

Show what components are present at a given tile (#588)

Ugly but works
This commit is contained in:
Ziemas 2020-07-14 06:24:49 +02:00 committed by GitHub
parent 5458859faf
commit a0c966eeeb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 131 additions and 93 deletions

View File

@ -69,7 +69,7 @@ var (
d2enum.KeyF10: ebiten.KeyF10,
d2enum.KeyF11: ebiten.KeyF11,
d2enum.KeyF12: ebiten.KeyF12,
d2enum.KeyGraveAccent: ebiten.KeyGraveAccent,
d2enum.KeyGraveAccent: ebiten.KeyF12,
d2enum.KeyHome: ebiten.KeyHome,
d2enum.KeyInsert: ebiten.KeyInsert,
d2enum.KeyKP0: ebiten.KeyKP0,

View File

@ -4,6 +4,7 @@ import (
"fmt"
"log"
"os"
"strings"
"time"
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2map/d2mapgen"
@ -12,6 +13,7 @@ import (
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2map/d2maprenderer"
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2enum"
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2fileformats/d2ds1"
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2interface"
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2screen"
"github.com/OpenDiablo2/OpenDiablo2/d2game/d2player"
@ -87,6 +89,10 @@ type MapEngineTest struct {
renderer d2interface.Renderer
inputManager d2interface.InputManager
lastMouseX, lastMouseY int
selX, selY int
selectedTile *d2ds1.TileRecord
//TODO: this is region specific properties, should be refactored for multi-region rendering
currentRegion int
levelPreset int
@ -190,102 +196,134 @@ func (met *MapEngineTest) OnUnload() error {
func (met *MapEngineTest) Render(screen d2interface.Surface) error {
met.mapRenderer.Render(screen)
// levelFilesToPick := make([]string, 0)
// fileIndex := met.fileIndex
// levelPreset := curRegion.LevelPreset()
// regionPath := curRegion.RegionPath()
// for n, fileRecord := range levelPreset.Files {
// if len(fileRecord) == 0 || fileRecord == "" || fileRecord == "0" {
// continue
// }
// levelFilesToPick = append(levelFilesToPick, fileRecord)
// if fileRecord == regionPath {
// fileIndex = n
// }
// }
// if met.fileIndex == -1 {
// met.fileIndex = fileIndex
// }
// met.filesCount = len(levelFilesToPick)
//
//
// regionWidth, regionHeight := curRegion.GetTileSize()
// if tileX >= 0 && tileY >= 0 && tileX < regionWidth && tileY < regionHeight {
// tile := curRegion.Tile(tileX, tileY)
// screen.PushTranslation(5, 5)
// screen.DrawText("%d, %d (Tile %d.%d, %d.%d)", screenX, screenY, tileX, subtileX, tileY, subtileY)
// screen.PushTranslation(0, 16)
// screen.DrawText("Map: " + curRegion.LevelType().Name)
// screen.PushTranslation(0, 16)
// screen.DrawText("%v: %v/%v [%v, %v]", regionPath, fileIndex+1, met.filesCount, met.currentRegion, met.levelPreset)
// screen.PushTranslation(0, 16)
// screen.DrawText("N - next region, P - previous region")
// screen.PushTranslation(0, 16)
// screen.DrawText("Shift+N - next preset, Shift+P - previous preset")
// screen.PushTranslation(0, 16)
// screen.DrawText("Ctrl+N - next file, Ctrl+P - previous file")
// screen.PushTranslation(0, 16)
// popN := 7
// if len(tile.Floors) > 0 {
// screen.PushTranslation(0, 16)
// screen.DrawText("Floors:")
// screen.PushTranslation(16, 0)
// for idx, floor := range tile.Floors {
// popN++
// screen.PushTranslation(0, 16)
// tileData := curRegion.TileData(int32(floor.Style), int32(floor.Sequence), d2enum.Floor)
// tileSubAttrs := d2dt1.SubTileFlags{}
// if tileData != nil {
// tileSubAttrs = *tileData.GetSubTileFlags(subtileX, subtileY)
// }
// screen.DrawText("Floor %v: [ANI:%t] %s", idx, floor.Animated, tileSubAttrs.DebugString())
//
// }
// screen.PushTranslation(-16, 0)
// popN += 3
// }
// if len(tile.Walls) > 0 {
// screen.PushTranslation(0, 16)
// screen.DrawText("Walls:")
// screen.PushTranslation(16, 0)
// for idx, wall := range tile.Walls {
// popN++
// screen.PushTranslation(0, 16)
// tileData := curRegion.TileData(int32(wall.Style), int32(wall.Sequence), d2enum.Floor)
// tileSubAttrs := d2dt1.SubTileFlags{}
// if tileData != nil {
// tileSubAttrs = *tileData.GetSubTileFlags(subtileX, subtileY)
// }
// screen.DrawText("Wall %v: [HID:%t] %s", idx, wall.Hidden, tileSubAttrs.DebugString())
//
// }
// screen.PushTranslation(-16, 0)
// popN += 3
// }
// if len(tile.Walls) > 0 {
// screen.PushTranslation(0, 16)
// screen.DrawText("Shadows:")
// screen.PushTranslation(16, 0)
// for idx, shadow := range tile.Shadows {
// popN++
// screen.PushTranslation(0, 16)
// tileData := curRegion.TileData(int32(shadow.Style), int32(shadow.Sequence), d2enum.Floor)
// tileSubAttrs := d2dt1.SubTileFlags{}
// if tileData != nil {
// tileSubAttrs = *tileData.GetSubTileFlags(subtileX, subtileY)
// }
// screen.DrawText("Wall %v: [HID:%t] %s", idx, shadow.Hidden, tileSubAttrs.DebugString())
//
// }
// screen.PushTranslation(-16, 0)
// popN += 3
// }
// screen.PopN(popN)
// }
screen.PushTranslation(0, 16)
screen.DrawText("N - next region, P - previous region")
screen.PushTranslation(0, 16)
screen.DrawText("Shift+N - next preset, Shift+P - previous preset")
screen.PushTranslation(0, 16)
screen.DrawText("Ctrl+N - next file, Ctrl+P - previous file")
screen.PushTranslation(0, 16)
screen.DrawText("Left click selects tile, right click unselects")
screen.PushTranslation(0, 16)
popN := 5
if met.selectedTile == nil {
screen.PushTranslation(15, 16)
popN++
screen.DrawText("No tile selected")
} else {
screen.PushTranslation(10, 32)
screen.DrawText("Tile %v,%v", met.selX, met.selY)
screen.PushTranslation(15, 16)
screen.DrawText("Walls")
tpop := 0
for _, wall := range met.selectedTile.Walls {
screen.PushTranslation(0, 12)
tpop++
tmpString := fmt.Sprintf("%#v", wall)
stringSlice := strings.Split(tmpString, " ")
tmp2 := strings.Split(stringSlice[0], "{")
stringSlice[0] = tmp2[1]
for _, str := range stringSlice {
screen.PushTranslation(0, 12)
tpop++
screen.DrawText(str)
}
}
screen.PopN(tpop)
screen.PushTranslation(170, 0)
screen.DrawText("Floors")
tpop = 0
for _, floor := range met.selectedTile.Floors {
screen.PushTranslation(0, 12)
tpop++
tmpString := fmt.Sprintf("%#v", floor)
stringSlice := strings.Split(tmpString, " ")
tmp2 := strings.Split(stringSlice[0], "{")
stringSlice[0] = tmp2[1]
for _, str := range stringSlice {
screen.PushTranslation(0, 12)
tpop++
screen.DrawText(str)
}
}
screen.PopN(tpop)
tpop = 0
screen.PushTranslation(170, 0)
screen.DrawText("Shadows")
for _, shadow := range met.selectedTile.Shadows {
screen.PushTranslation(0, 12)
tpop++
tmpString := fmt.Sprintf("%#v", shadow)
stringSlice := strings.Split(tmpString, " ")
tmp2 := strings.Split(stringSlice[0], "{")
stringSlice[0] = tmp2[1]
for _, str := range stringSlice {
screen.PushTranslation(0, 12)
tpop++
screen.DrawText(str)
}
}
screen.PopN(tpop)
tpop = 0
screen.PushTranslation(170, 0)
screen.DrawText("Substitutions")
for _, subst := range met.selectedTile.Substitutions {
screen.PushTranslation(0, 12)
tpop++
tmpString := fmt.Sprintf("%#v", subst)
stringSlice := strings.Split(tmpString, " ")
tmp2 := strings.Split(stringSlice[0], "{")
stringSlice[0] = tmp2[1]
for _, str := range stringSlice {
screen.PushTranslation(0, 12)
tpop++
screen.DrawText(str)
}
}
screen.PopN(tpop)
popN += 5
}
screen.PopN(popN)
return nil
}
func (met *MapEngineTest) OnMouseMove(event d2interface.MouseMoveEvent) bool {
mx, my := event.X(), event.Y()
met.lastMouseX = mx
met.lastMouseY = my
return false
}
func (met *MapEngineTest) OnMouseButtonDown(event d2interface.MouseEvent) bool {
if event.Button() == d2enum.MouseButtonLeft {
px, py := met.mapRenderer.ScreenToWorld(met.lastMouseX, met.lastMouseY)
met.selX = int(px)
met.selY = int(py)
met.selectedTile = met.mapEngine.TileAt(int(px), int(py))
return true
}
if event.Button() == d2enum.MouseButtonRight {
met.selectedTile = nil
return true
}
return false
}
// Advance runs the update logic on the Map Engine Test screen
func (met *MapEngineTest) Advance(tickTime float64) error {
met.mapEngine.Advance(tickTime)