From a0c966eeeba1f0249eae60979b14999ebd337961 Mon Sep 17 00:00:00 2001 From: Ziemas Date: Tue, 14 Jul 2020 06:24:49 +0200 Subject: [PATCH] Show what components are present at a given tile (#588) Ugly but works --- d2core/d2input/ebiten/ebiten_input.go | 2 +- d2game/d2gamescreen/map_engine_testing.go | 222 +++++++++++++--------- 2 files changed, 131 insertions(+), 93 deletions(-) diff --git a/d2core/d2input/ebiten/ebiten_input.go b/d2core/d2input/ebiten/ebiten_input.go index 94a040de..58dff85d 100644 --- a/d2core/d2input/ebiten/ebiten_input.go +++ b/d2core/d2input/ebiten/ebiten_input.go @@ -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, diff --git a/d2game/d2gamescreen/map_engine_testing.go b/d2game/d2gamescreen/map_engine_testing.go index 8f3f7e33..5c47b1a5 100644 --- a/d2game/d2gamescreen/map_engine_testing.go +++ b/d2game/d2gamescreen/map_engine_testing.go @@ -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)