mirror of
https://github.com/OpenDiablo2/OpenDiablo2
synced 2024-12-26 03:56:42 -05:00
fixed lint errors in d2debututil (#678)
This commit is contained in:
parent
4a48acb8ba
commit
120afe51a1
@ -1,70 +1,97 @@
|
||||
// Package d2debugutil provides debug utilities
|
||||
package d2debugutil
|
||||
|
||||
import (
|
||||
"image"
|
||||
|
||||
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2debugutil/internal/assets"
|
||||
|
||||
"github.com/hajimehoshi/ebiten"
|
||||
)
|
||||
|
||||
var (
|
||||
debugPrintTextImage *ebiten.Image
|
||||
debugPrintTextSubImages = map[rune]*ebiten.Image{}
|
||||
const (
|
||||
cw = assets.CharWidth
|
||||
ch = assets.CharHeight
|
||||
)
|
||||
|
||||
func init() {
|
||||
img := assets.CreateTextImage()
|
||||
debugPrintTextImage, _ = ebiten.NewImageFromImage(img, ebiten.FilterDefault)
|
||||
// DebugPrinter is the global debug printer
|
||||
var DebugPrinter = NewDebugPrinter() //nolint:gochecknoglobals // currently global by design
|
||||
|
||||
// NewDebugPrinter creates a new debug printer
|
||||
func NewDebugPrinter() *GlyphPrinter {
|
||||
img, err := ebiten.NewImageFromImage(assets.CreateTextImage(), ebiten.FilterDefault)
|
||||
if err != nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
printer := &GlyphPrinter{
|
||||
glyphImageTable: img,
|
||||
glyphs: make(map[rune]*ebiten.Image),
|
||||
}
|
||||
|
||||
return printer
|
||||
}
|
||||
|
||||
// DebugPrint draws the string str on the image on left top corner.
|
||||
// GlyphPrinter uses an image containing glyphs to draw text onto ebiten images
|
||||
type GlyphPrinter struct {
|
||||
glyphImageTable *ebiten.Image
|
||||
glyphs map[rune]*ebiten.Image
|
||||
}
|
||||
|
||||
// Print draws the string str on the image on left top corner.
|
||||
//
|
||||
// The available runes are in U+0000 to U+00FF, which is C0 Controls and Basic Latin and C1 Controls and Latin-1 Supplement.
|
||||
// The available runes are in U+0000 to U+00FF, which is C0 Controls and
|
||||
// Basic Latin and C1 Controls and Latin-1 Supplement.
|
||||
//
|
||||
// DebugPrint always returns nil as of 1.5.0-alpha.
|
||||
func D2DebugPrint(image *ebiten.Image, str string) error {
|
||||
D2DebugPrintAt(image, str, 0, 0)
|
||||
func (p *GlyphPrinter) Print(target *ebiten.Image, str string) error {
|
||||
p.PrintAt(target, str, 0, 0)
|
||||
return nil
|
||||
}
|
||||
|
||||
// DebugPrintAt draws the string str on the image at (x, y) position.
|
||||
//
|
||||
// The available runes are in U+0000 to U+00FF, which is C0 Controls and Basic Latin and C1 Controls and Latin-1 Supplement.
|
||||
func D2DebugPrintAt(image *ebiten.Image, str string, x, y int) {
|
||||
drawDebugText(image, str, x, y, false)
|
||||
// PrintAt draws the string str on the image at (x, y) position.
|
||||
// The available runes are in U+0000 to U+00FF, which is C0 Controls and
|
||||
// Basic Latin and C1 Controls and Latin-1 Supplement.
|
||||
func (p *GlyphPrinter) PrintAt(target *ebiten.Image, str string, x, y int) {
|
||||
p.drawDebugText(target, str, x, y, false)
|
||||
}
|
||||
|
||||
func drawDebugText(rt *ebiten.Image, str string, ox, oy int, shadow bool) {
|
||||
func (p *GlyphPrinter) drawDebugText(target *ebiten.Image, str string, ox, oy int, shadow bool) {
|
||||
op := &ebiten.DrawImageOptions{}
|
||||
|
||||
if shadow {
|
||||
op.ColorM.Scale(0, 0, 0, 0.5)
|
||||
}
|
||||
|
||||
x := 0
|
||||
y := 0
|
||||
w, _ := debugPrintTextImage.Size()
|
||||
|
||||
w, _ := p.glyphImageTable.Size()
|
||||
|
||||
for _, c := range str {
|
||||
const (
|
||||
cw = assets.CharWidth
|
||||
ch = assets.CharHeight
|
||||
)
|
||||
if c == '\n' {
|
||||
x = 0
|
||||
y += ch
|
||||
|
||||
continue
|
||||
}
|
||||
s, ok := debugPrintTextSubImages[c]
|
||||
|
||||
s, ok := p.glyphs[c]
|
||||
if !ok {
|
||||
n := w / cw
|
||||
sx := (int(c) % n) * cw
|
||||
sy := (int(c) / n) * ch
|
||||
s = debugPrintTextImage.SubImage(image.Rect(sx, sy, sx+cw, sy+ch)).(*ebiten.Image)
|
||||
debugPrintTextSubImages[c] = s
|
||||
rect := image.Rect(sx, sy, sx+cw, sy+ch)
|
||||
s = p.glyphImageTable.SubImage(rect).(*ebiten.Image)
|
||||
p.glyphs[c] = s
|
||||
}
|
||||
|
||||
op.GeoM.Reset()
|
||||
op.GeoM.Translate(float64(x), float64(y))
|
||||
op.GeoM.Translate(float64(ox+1), float64(oy))
|
||||
|
||||
op.CompositeMode = ebiten.CompositeModeLighter
|
||||
_ = rt.DrawImage(s, op)
|
||||
_ = target.DrawImage(s, op)
|
||||
x += cw
|
||||
}
|
||||
}
|
||||
|
@ -16,6 +16,7 @@
|
||||
//go:generate file2byteslice -input /tmp/compressedTextRGBA -output textrgba.go -package assets -var compressedTextRGBA
|
||||
//go:generate gofmt -s -w .
|
||||
|
||||
// Package assets provides files for use by the debug utils
|
||||
package assets
|
||||
|
||||
import (
|
||||
@ -28,21 +29,26 @@ import (
|
||||
)
|
||||
|
||||
const (
|
||||
// CharWidth of all glyphs inside of the glyph table image
|
||||
CharWidth = 8
|
||||
|
||||
// CharHeight of all glyphs inside of the glyph table image
|
||||
CharHeight = 16
|
||||
)
|
||||
|
||||
// CreateTextImage creates
|
||||
func CreateTextImage() image.Image {
|
||||
s, err := gzip.NewReader(bytes.NewReader(CompressedDebugText))
|
||||
if err != nil {
|
||||
panic(fmt.Sprintf("assets: gzip.NewReader failed: %v", err))
|
||||
}
|
||||
defer s.Close()
|
||||
|
||||
debugBmp, err := bmp.Decode(s)
|
||||
if err != nil {
|
||||
panic(fmt.Sprintf("assets: bmp.Decode failed: %v", err))
|
||||
}
|
||||
|
||||
_ = s.Close()
|
||||
|
||||
return debugBmp
|
||||
}
|
||||
|
@ -222,7 +222,8 @@ func (s *ebitenSurface) RenderSection(sfc d2interface.Surface, bound image.Recta
|
||||
|
||||
// DrawTextf renders the string to the surface with the given format string and a set of parameters
|
||||
func (s *ebitenSurface) DrawTextf(format string, params ...interface{}) {
|
||||
d2debugutil.D2DebugPrintAt(s.image, fmt.Sprintf(format, params...), s.stateCurrent.x, s.stateCurrent.y)
|
||||
str := fmt.Sprintf(format, params...)
|
||||
d2debugutil.DebugPrinter.PrintAt(s.image, str, s.stateCurrent.x, s.stateCurrent.y)
|
||||
}
|
||||
|
||||
// DrawLine draws a line
|
||||
|
Loading…
Reference in New Issue
Block a user