1
1
mirror of https://github.com/OpenDiablo2/OpenDiablo2 synced 2024-06-27 09:35:29 +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.KeyF10: ebiten.KeyF10,
d2enum.KeyF11: ebiten.KeyF11, d2enum.KeyF11: ebiten.KeyF11,
d2enum.KeyF12: ebiten.KeyF12, d2enum.KeyF12: ebiten.KeyF12,
d2enum.KeyGraveAccent: ebiten.KeyGraveAccent, d2enum.KeyGraveAccent: ebiten.KeyF12,
d2enum.KeyHome: ebiten.KeyHome, d2enum.KeyHome: ebiten.KeyHome,
d2enum.KeyInsert: ebiten.KeyInsert, d2enum.KeyInsert: ebiten.KeyInsert,
d2enum.KeyKP0: ebiten.KeyKP0, d2enum.KeyKP0: ebiten.KeyKP0,

View File

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