minor edits (#486)

* adding comments to d2interface for linter

* moved d2render renderer interfaces and types into d2interface
This commit is contained in:
dk 2020-06-28 21:41:58 -07:00 committed by GitHub
parent 9f7f1ae072
commit 55dc3e42ed
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
56 changed files with 259 additions and 234 deletions

View File

@ -1,5 +1,7 @@
package d2interface
// AudioProvider is something that can play music, load audio files managed
// by the asset manager, and set the game engine's volume levels
type AudioProvider interface {
PlayBGM(song string)
LoadSoundEffect(sfx string) (SoundEffect, error)

View File

@ -1,4 +1,4 @@
package d2render
package d2interface
type CompositeMode int

View File

@ -0,0 +1,2 @@
// Package d2interface defines interfaces for the OpenDiablo2 engine
package d2interface

View File

@ -1,4 +1,4 @@
package d2render
package d2interface
// Filter represents the type of texture filter to be used when an image is magnified or minified.
type Filter int

View File

@ -1,4 +1,4 @@
package d2render
package d2interface
// Defines the type of rendering engine to use
type RenderType int

View File

@ -1,4 +1,4 @@
package d2render
package d2interface
type Renderer interface {
GetRendererName() string

View File

@ -1,5 +1,6 @@
package d2interface
// SoundEffect is something that that the AudioProvider can Play or Stop
type SoundEffect interface {
Play()
Stop()

View File

@ -1,4 +1,4 @@
package d2render
package d2interface
import (
"image"

View File

@ -2,9 +2,9 @@ package d2interface
import (
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2input"
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2render"
)
// TermCategory applies styles to the lines in the Terminal
type TermCategory int
const (
@ -14,17 +14,10 @@ const (
TermCategoryError
)
const (
termCharWidth = 6
termCharHeight = 16
termRowCount = 24
termRowCountMax = 32
termColCountMax = 128
termAnimLength = 0.5
)
// TermVis is an enumeration of the Terminal's visibility states
type termVis int
// Terminal visibility state
const (
termVisHidden termVis = iota
termVisShowing
@ -32,13 +25,16 @@ const (
termVisHiding
)
// Terminal is a drop-down terminal and shell
// It is used throughout the codebase, most parts of the engine will
// `bind` commands, which are available for use in the shell
type Terminal interface {
BindLogger()
Advance(elapsed float64) error
OnKeyDown(event d2input.KeyEvent) bool
OnKeyChars(event d2input.KeyCharsEvent) bool
Render(surface d2render.Surface) error
Render(surface Surface) error
Execute(command string) error
OutputRaw(text string, category TermCategory)
Output(format string, params ...interface{})
@ -53,6 +49,8 @@ type Terminal interface {
UnbindAction(name string) error
}
// TerminalLogger is used tomake the Terminal write out
// (eg. to the system shell or to a file)
type TerminalLogger interface {
Write(p []byte) (int, error)
}

View File

@ -5,6 +5,8 @@ import (
"image/color"
"math"
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2interface"
"github.com/OpenDiablo2/OpenDiablo2/d2common"
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2fileformats/d2dat"
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2fileformats/d2dc6"
@ -27,7 +29,7 @@ type animationFrame struct {
offsetX int
offsetY int
image d2render.Surface
image d2interface.Surface
}
type animationDirection struct {
@ -41,7 +43,7 @@ type Animation struct {
lastFrameTime float64
playedCount int
compositeMode d2render.CompositeMode
compositeMode d2interface.CompositeMode
colorMod color.Color
originAtBottom bool
@ -87,7 +89,7 @@ func CreateAnimationFromDCC(dcc *d2dcc.DCC, palette *d2dat.DATPalette, transpare
}
}
image, err := d2render.NewSurface(frameWidth, frameHeight, d2render.FilterNearest)
image, err := d2render.NewSurface(frameWidth, frameHeight, d2interface.FilterNearest)
if err != nil {
return nil, err
}
@ -122,7 +124,7 @@ func CreateAnimationFromDC6(dc6 *d2dc6.DC6, palette *d2dat.DATPalette) (*Animati
}
for frameIndex, dc6Frame := range dc6.Frames {
image, err := d2render.NewSurface(int(dc6Frame.Width), int(dc6Frame.Height), d2render.FilterNearest)
image, err := d2render.NewSurface(int(dc6Frame.Width), int(dc6Frame.Height), d2interface.FilterNearest)
if err != nil {
return nil, err
}
@ -253,7 +255,7 @@ func (a *Animation) Advance(elapsed float64) error {
return nil
}
func (a *Animation) Render(target d2render.Surface) error {
func (a *Animation) Render(target d2interface.Surface) error {
direction := a.directions[a.directionIndex]
frame := direction.frames[a.frameIndex]
@ -264,7 +266,7 @@ func (a *Animation) Render(target d2render.Surface) error {
return target.Render(frame.image)
}
func (a *Animation) RenderFromOrigin(target d2render.Surface) error {
func (a *Animation) RenderFromOrigin(target d2interface.Surface) error {
if a.originAtBottom {
direction := a.directions[a.directionIndex]
frame := direction.frames[a.frameIndex]
@ -397,8 +399,8 @@ func (a *Animation) ResetPlayedCount() {
func (a *Animation) SetBlend(blend bool) {
if blend {
a.compositeMode = d2render.CompositeModeLighter
a.compositeMode = d2interface.CompositeModeLighter
} else {
a.compositeMode = d2render.CompositeModeSourceOver
a.compositeMode = d2interface.CompositeModeSourceOver
}
}

View File

@ -6,10 +6,11 @@ import (
"math"
"strings"
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2interface"
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2data"
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2data/d2datadict"
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2enum"
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2render"
)
type Composite struct {
@ -45,7 +46,7 @@ func (c *Composite) Advance(elapsed float64) error {
return nil
}
func (c *Composite) Render(target d2render.Surface) error {
func (c *Composite) Render(target d2interface.Surface) error {
if c.mode == nil {
return nil
}

View File

@ -6,8 +6,9 @@ import (
"image/color"
"strings"
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2interface"
"github.com/OpenDiablo2/OpenDiablo2/d2common"
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2render"
)
type fontGlyph struct {
@ -98,7 +99,7 @@ func (f *Font) Clone() *Font {
}
}
func (f *Font) RenderText(text string, target d2render.Surface) error {
func (f *Font) RenderText(text string, target d2interface.Surface) error {
f.sheet.SetColorMod(f.color)
f.sheet.SetBlend(false)

View File

@ -4,6 +4,8 @@ import (
"errors"
"image/color"
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2interface"
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2asset"
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2input"
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2render"
@ -24,7 +26,7 @@ type Button struct {
width int
height int
state buttonState
surfaces []d2render.Surface
surfaces []d2interface.Surface
}
func createButton(text string, buttonStyle ButtonStyle) (*Button, error) {
@ -69,9 +71,9 @@ func createButton(text string, buttonStyle ButtonStyle) (*Button, error) {
textY := buttonHeight/2 - textHeight/2 + config.textOffset
surfaceCount := animation.GetFrameCount() / (config.segmentsX * config.segmentsY)
surfaces := make([]d2render.Surface, surfaceCount)
surfaces := make([]d2interface.Surface, surfaceCount)
for i := 0; i < surfaceCount; i++ {
surface, err := d2render.NewSurface(buttonWidth, buttonHeight, d2render.FilterNearest)
surface, err := d2render.NewSurface(buttonWidth, buttonHeight, d2interface.FilterNearest)
if err != nil {
return nil, err
}
@ -121,7 +123,7 @@ func (b *Button) onMouseLeave(event d2input.MouseMoveEvent) bool {
return false
}
func (b *Button) render(target d2render.Surface) error {
func (b *Button) render(target d2interface.Surface) error {
return target.Render(b.surfaces[b.state])
}

View File

@ -3,9 +3,10 @@ package d2gui
import (
"errors"
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2interface"
"github.com/OpenDiablo2/OpenDiablo2/d2common"
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2asset"
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2render"
)
func loadFont(fontStyle FontStyle) (*d2asset.Font, error) {
@ -17,7 +18,7 @@ func loadFont(fontStyle FontStyle) (*d2asset.Font, error) {
return d2asset.LoadFont(config.fontBasePath+".tbl", config.fontBasePath+".dc6", config.palettePath)
}
func renderSegmented(animation *d2asset.Animation, segmentsX, segmentsY, frameOffset int, target d2render.Surface) error {
func renderSegmented(animation *d2asset.Animation, segmentsX, segmentsY, frameOffset int, target d2interface.Surface) error {
var currentY int
for y := 0; y < segmentsY; y++ {
var currentX int

View File

@ -3,7 +3,7 @@ package d2gui
import (
"errors"
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2render"
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2interface"
)
var (
@ -24,7 +24,7 @@ func Initialize() error {
return nil
}
func Render(target d2render.Surface) error {
func Render(target d2interface.Surface) error {
verifyWasInit()
return singleton.render(target)
}

View File

@ -1,6 +1,7 @@
package d2gui
import (
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2interface"
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2asset"
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2render"
)
@ -10,7 +11,7 @@ type Label struct {
text string
font *d2asset.Font
surface d2render.Surface
surface d2interface.Surface
}
func createLabel(text string, fontStyle FontStyle) (*Label, error) {
@ -26,7 +27,7 @@ func createLabel(text string, fontStyle FontStyle) (*Label, error) {
return label, nil
}
func (l *Label) render(target d2render.Surface) error {
func (l *Label) render(target d2interface.Surface) error {
return target.Render(l.surface)
}
@ -47,7 +48,7 @@ func (l *Label) SetText(text string) error {
func (l *Label) setText(text string) error {
width, height := l.font.GetTextMetrics(text)
surface, err := d2render.NewSurface(width, height, d2render.FilterNearest)
surface, err := d2render.NewSurface(width, height, d2interface.FilterNearest)
if err != nil {
return err
}

View File

@ -3,9 +3,10 @@ package d2gui
import (
"image/color"
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2interface"
"github.com/OpenDiablo2/OpenDiablo2/d2common"
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2input"
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2render"
)
type layoutEntry struct {
@ -137,7 +138,7 @@ func (l *Layout) Clear() {
l.entries = nil
}
func (l *Layout) render(target d2render.Surface) error {
func (l *Layout) render(target d2interface.Surface) error {
l.AdjustEntryPlacement()
for _, entry := range l.entries {
@ -168,14 +169,14 @@ func (l *Layout) advance(elapsed float64) error {
return nil
}
func (l *Layout) renderEntry(entry *layoutEntry, target d2render.Surface) error {
func (l *Layout) renderEntry(entry *layoutEntry, target d2interface.Surface) error {
target.PushTranslation(entry.x, entry.y)
defer target.Pop()
return entry.widget.render(target)
}
func (l *Layout) renderEntryDebug(entry *layoutEntry, target d2render.Surface) error {
func (l *Layout) renderEntryDebug(entry *layoutEntry, target d2interface.Surface) error {
target.PushTranslation(entry.x, entry.y)
defer target.Pop()

View File

@ -4,10 +4,11 @@ import (
"image/color"
"math"
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2interface"
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2resource"
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2asset"
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2input"
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2render"
)
type manager struct {
@ -78,7 +79,7 @@ func (m *manager) OnMouseMove(event d2input.MouseMoveEvent) bool {
return m.layout.onMouseMove(event)
}
func (m *manager) render(target d2render.Surface) error {
func (m *manager) render(target d2interface.Surface) error {
if m.loading {
if err := m.renderLoadScreen(target); err != nil {
return err
@ -99,7 +100,7 @@ func (m *manager) render(target d2render.Surface) error {
return nil
}
func (m *manager) renderLoadScreen(target d2render.Surface) error {
func (m *manager) renderLoadScreen(target d2interface.Surface) error {
target.Clear(color.Black)
screenWidth, screenHeight := target.GetSize()
@ -111,7 +112,7 @@ func (m *manager) renderLoadScreen(target d2render.Surface) error {
return m.loadingAnim.Render(target)
}
func (m *manager) renderCursor(target d2render.Surface) error {
func (m *manager) renderCursor(target d2interface.Surface) error {
_, height := m.cursorAnim.GetCurrentFrameSize()
target.PushTranslation(m.cursorX, m.cursorY)
target.PushTranslation(0, -height)

View File

@ -1,8 +1,8 @@
package d2gui
import (
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2interface"
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2asset"
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2render"
)
type AnimationDirection int
@ -59,7 +59,7 @@ func createAnimatedSprite(imagePath, palettePath string, direction AnimationDire
return sprite, nil
}
func (s *AnimatedSprite) render(target d2render.Surface) error {
func (s *AnimatedSprite) render(target d2interface.Surface) error {
_, frameHeight := s.animation.GetCurrentFrameSize()
target.PushTranslation(s.x, s.y-frameHeight)
@ -73,7 +73,7 @@ func (s *Sprite) SetSegmented(segmentsX, segmentsY, frameOffset int) {
s.frameOffset = frameOffset
}
func (s *Sprite) render(target d2render.Surface) error {
func (s *Sprite) render(target d2interface.Surface) error {
return renderSegmented(s.animation, s.segmentsX, s.segmentsY, s.frameOffset, target)
}

View File

@ -1,15 +1,15 @@
package d2gui
import (
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2interface"
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2input"
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2render"
)
type MouseHandler func(d2input.MouseEvent)
type MouseMoveHandler func(d2input.MouseMoveEvent)
type widget interface {
render(target d2render.Surface) error
render(target d2interface.Surface) error
advance(elapsed float64) error
onMouseMove(event d2input.MouseMoveEvent) bool
@ -105,7 +105,7 @@ func (w *widgetBase) isExpanding() bool {
return w.expanding
}
func (w *widgetBase) render(target d2render.Surface) error {
func (w *widgetBase) render(target d2interface.Surface) error {
return nil
}

View File

@ -1,8 +1,8 @@
package d2mapentity
import (
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2interface"
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2asset"
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2render"
)
// AnimatedEntity represents an animation that can be projected onto the map.
@ -26,7 +26,7 @@ func CreateAnimatedEntity(x, y int, animation *d2asset.Animation) *AnimatedEntit
}
// Render draws this animated entity onto the target
func (ae *AnimatedEntity) Render(target d2render.Surface) {
func (ae *AnimatedEntity) Render(target d2interface.Surface) {
target.PushTranslation(
ae.offsetX+int((ae.subcellX-ae.subcellY)*16),
ae.offsetY+int(((ae.subcellX+ae.subcellY)*8)-5),

View File

@ -3,16 +3,17 @@ package d2mapentity
import (
"math"
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2interface"
"github.com/OpenDiablo2/OpenDiablo2/d2common"
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2astar"
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2render"
)
type MapEntity interface {
Render(target d2render.Surface)
Render(target d2interface.Surface)
Advance(tickTime float64)
GetPosition() (float64, float64)
GetLayer() (int)
GetLayer() int
GetPositionF() (float64, float64)
Name() string
Selectable() bool

View File

@ -3,12 +3,13 @@ package d2mapentity
import (
"math/rand"
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2interface"
"github.com/OpenDiablo2/OpenDiablo2/d2common"
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2data/d2datadict"
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2enum"
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2resource"
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2asset"
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2render"
)
type NPC struct {
@ -49,7 +50,7 @@ func CreateNPC(x, y int, object *d2datadict.ObjectLookupRecord, direction int) *
return result
}
func (v *NPC) Render(target d2render.Surface) {
func (v *NPC) Render(target d2interface.Surface) {
target.PushTranslation(
v.offsetX+int((v.subcellX-v.subcellY)*16),
v.offsetY+int(((v.subcellX+v.subcellY)*8)-5),

View File

@ -4,9 +4,9 @@ import (
"github.com/OpenDiablo2/OpenDiablo2/d2common"
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2data/d2datadict"
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2enum"
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2interface"
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2resource"
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2asset"
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2render"
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2ui"
)
@ -32,7 +32,7 @@ func CreateObject(x, y int, object *d2datadict.ObjectLookupRecord, palettePath s
mapEntity: createMapEntity(x, y),
composite: composite,
objectLookup: object,
nameLabel: d2ui.CreateLabel(d2resource.FontFormal11, d2resource.PaletteStatic),
nameLabel: d2ui.CreateLabel(d2resource.FontFormal11, d2resource.PaletteStatic),
}
entity.mapEntity.directioner = entity.rotate
entity.objectRecord = d2datadict.Objects[object.ObjectsTxtId]
@ -74,7 +74,7 @@ func (ob *Object) Selectable() bool {
}
// Render draws this animated entity onto the target
func (ob *Object) Render(target d2render.Surface) {
func (ob *Object) Render(target d2interface.Surface) {
target.PushTranslation(
ob.offsetX+int((ob.subcellX-ob.subcellY)*16),
ob.offsetY+int(((ob.subcellX+ob.subcellY)*8)-5),

View File

@ -3,13 +3,14 @@ package d2mapentity
import (
"image/color"
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2interface"
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2data/d2datadict"
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2enum"
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2resource"
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2asset"
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2hero"
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2inventory"
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2render"
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2ui"
)
@ -132,7 +133,7 @@ func (v *Player) Advance(tickTime float64) {
}
}
func (v *Player) Render(target d2render.Surface) {
func (v *Player) Render(target d2interface.Surface) {
target.PushTranslation(
v.offsetX+int((v.subcellX-v.subcellY)*16),
v.offsetY+int(((v.subcellX+v.subcellY)*8)-5),

View File

@ -2,25 +2,25 @@ package d2maprenderer
import (
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2enum"
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2render"
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2interface"
)
var imageCacheRecords map[uint32]d2render.Surface
var imageCacheRecords map[uint32]d2interface.Surface
// Invalidates the global region image cache. Call this when you are changing regions
func InvalidateImageCache() {
imageCacheRecords = nil
}
func (mr *MapRenderer) getImageCacheRecord(style, sequence byte, tileType d2enum.TileType, randomIndex byte) d2render.Surface {
func (mr *MapRenderer) getImageCacheRecord(style, sequence byte, tileType d2enum.TileType, randomIndex byte) d2interface.Surface {
lookupIndex := uint32(style)<<24 | uint32(sequence)<<16 | uint32(tileType)<<8 | uint32(randomIndex)
return imageCacheRecords[lookupIndex]
}
func (mr *MapRenderer) setImageCacheRecord(style, sequence byte, tileType d2enum.TileType, randomIndex byte, image d2render.Surface) {
func (mr *MapRenderer) setImageCacheRecord(style, sequence byte, tileType d2enum.TileType, randomIndex byte, image d2interface.Surface) {
lookupIndex := uint32(style)<<24 | uint32(sequence)<<16 | uint32(tileType)<<8 | uint32(randomIndex)
if imageCacheRecords == nil {
imageCacheRecords = make(map[uint32]d2render.Surface)
imageCacheRecords = make(map[uint32]d2interface.Surface)
}
imageCacheRecords[lookupIndex] = image
}

View File

@ -15,7 +15,6 @@ import (
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2enum"
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2fileformats/d2ds1"
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2interface"
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2render"
)
// The map renderer, used to render the map
@ -58,7 +57,7 @@ func (mr *MapRenderer) SetMapEngine(mapEngine *d2mapengine.MapEngine) {
mr.generateTileCache()
}
func (mr *MapRenderer) Render(target d2render.Surface) {
func (mr *MapRenderer) Render(target d2interface.Surface) {
mapSize := mr.mapEngine.Size()
stxf, styf := mr.viewport.ScreenToWorld(400, -200)
etxf, etyf := mr.viewport.ScreenToWorld(400, 1050)
@ -97,7 +96,7 @@ func (mr *MapRenderer) WorldToOrtho(x, y float64) (float64, float64) {
}
// Lower wall tiles, tile shadews, floor tiles
func (mr *MapRenderer) renderPass1(target d2render.Surface, startX, startY, endX, endY int) {
func (mr *MapRenderer) renderPass1(target d2interface.Surface, startX, startY, endX, endY int) {
for tileY := startY; tileY < endY; tileY++ {
for tileX := startX; tileX < endX; tileX++ {
tile := mr.mapEngine.TileAt(tileX, tileY)
@ -109,7 +108,7 @@ func (mr *MapRenderer) renderPass1(target d2render.Surface, startX, startY, endX
}
// Objects below walls
func (mr *MapRenderer) renderPass2(target d2render.Surface, startX, startY, endX, endY int) {
func (mr *MapRenderer) renderPass2(target d2interface.Surface, startX, startY, endX, endY int) {
for tileY := startY; tileY < endY; tileY++ {
for tileX := startX; tileX < endX; tileX++ {
mr.viewport.PushTranslationWorld(float64(tileX), float64(tileY))
@ -133,7 +132,7 @@ func (mr *MapRenderer) renderPass2(target d2render.Surface, startX, startY, endX
}
// Upper wall tiles, objects that are on top of walls
func (mr *MapRenderer) renderPass3(target d2render.Surface, startX, startY, endX, endY int) {
func (mr *MapRenderer) renderPass3(target d2interface.Surface, startX, startY, endX, endY int) {
for tileY := startY; tileY < endY; tileY++ {
for tileX := startX; tileX < endX; tileX++ {
tile := mr.mapEngine.TileAt(tileX, tileY)
@ -159,7 +158,7 @@ func (mr *MapRenderer) renderPass3(target d2render.Surface, startX, startY, endX
}
// Roof tiles
func (mr *MapRenderer) renderPass4(target d2render.Surface, startX, startY, endX, endY int) {
func (mr *MapRenderer) renderPass4(target d2interface.Surface, startX, startY, endX, endY int) {
for tileY := startY; tileY < endY; tileY++ {
for tileX := startX; tileX < endX; tileX++ {
tile := mr.mapEngine.TileAt(tileX, tileY)
@ -172,7 +171,7 @@ func (mr *MapRenderer) renderPass4(target d2render.Surface, startX, startY, endX
}
func (mr *MapRenderer) renderTilePass1(tile *d2ds1.TileRecord, target d2render.Surface) {
func (mr *MapRenderer) renderTilePass1(tile *d2ds1.TileRecord, target d2interface.Surface) {
for _, wall := range tile.Walls {
if !wall.Hidden && wall.Prop1 != 0 && wall.Type.LowerWall() {
mr.renderWall(wall, mr.viewport, target)
@ -192,7 +191,7 @@ func (mr *MapRenderer) renderTilePass1(tile *d2ds1.TileRecord, target d2render.S
}
}
func (mr *MapRenderer) renderTilePass2(tile *d2ds1.TileRecord, target d2render.Surface) {
func (mr *MapRenderer) renderTilePass2(tile *d2ds1.TileRecord, target d2interface.Surface) {
for _, wall := range tile.Walls {
if !wall.Hidden && wall.Type.UpperWall() {
mr.renderWall(wall, mr.viewport, target)
@ -200,7 +199,7 @@ func (mr *MapRenderer) renderTilePass2(tile *d2ds1.TileRecord, target d2render.S
}
}
func (mr *MapRenderer) renderTilePass3(tile *d2ds1.TileRecord, target d2render.Surface) {
func (mr *MapRenderer) renderTilePass3(tile *d2ds1.TileRecord, target d2interface.Surface) {
for _, wall := range tile.Walls {
if wall.Type == d2enum.Roof {
mr.renderWall(wall, mr.viewport, target)
@ -208,8 +207,8 @@ func (mr *MapRenderer) renderTilePass3(tile *d2ds1.TileRecord, target d2render.S
}
}
func (mr *MapRenderer) renderFloor(tile d2ds1.FloorShadowRecord, target d2render.Surface) {
var img d2render.Surface
func (mr *MapRenderer) renderFloor(tile d2ds1.FloorShadowRecord, target d2interface.Surface) {
var img d2interface.Surface
if !tile.Animated {
img = mr.getImageCacheRecord(tile.Style, tile.Sequence, 0, tile.RandomIndex)
} else {
@ -229,7 +228,7 @@ func (mr *MapRenderer) renderFloor(tile d2ds1.FloorShadowRecord, target d2render
target.Render(img)
}
func (mr *MapRenderer) renderWall(tile d2ds1.WallRecord, viewport *Viewport, target d2render.Surface) {
func (mr *MapRenderer) renderWall(tile d2ds1.WallRecord, viewport *Viewport, target d2interface.Surface) {
img := mr.getImageCacheRecord(tile.Style, tile.Sequence, tile.Type, tile.RandomIndex)
if img == nil {
log.Printf("Render called on uncached wall {%v,%v,%v}", tile.Style, tile.Sequence, tile.Type)
@ -245,7 +244,7 @@ func (mr *MapRenderer) renderWall(tile d2ds1.WallRecord, viewport *Viewport, tar
target.Render(img)
}
func (mr *MapRenderer) renderShadow(tile d2ds1.FloorShadowRecord, target d2render.Surface) {
func (mr *MapRenderer) renderShadow(tile d2ds1.FloorShadowRecord, target d2interface.Surface) {
img := mr.getImageCacheRecord(tile.Style, tile.Sequence, 13, tile.RandomIndex)
if img == nil {
log.Printf("Render called on uncached shadow {%v,%v}", tile.Style, tile.Sequence)
@ -261,7 +260,7 @@ func (mr *MapRenderer) renderShadow(tile d2ds1.FloorShadowRecord, target d2rende
target.Render(img)
}
func (mr *MapRenderer) renderDebug(debugVisLevel int, target d2render.Surface, startX, startY, endX, endY int) {
func (mr *MapRenderer) renderDebug(debugVisLevel int, target d2interface.Surface, startX, startY, endX, endY int) {
for tileY := startY; tileY < endY; tileY++ {
for tileX := startX; tileX < endX; tileX++ {
mr.viewport.PushTranslationWorld(float64(tileX), float64(tileY))
@ -279,7 +278,7 @@ func (mr *MapRenderer) WorldToScreenF(x, y float64) (float64, float64) {
return mr.viewport.WorldToScreenF(x, y)
}
func (mr *MapRenderer) renderTileDebug(ax, ay int, debugVisLevel int, target d2render.Surface) {
func (mr *MapRenderer) renderTileDebug(ax, ay int, debugVisLevel int, target d2interface.Surface) {
subTileColor := color.RGBA{R: 80, G: 80, B: 255, A: 50}
tileColor := color.RGBA{R: 255, G: 255, B: 255, A: 100}
tileCollisionColor := color.RGBA{R: 128, G: 0, B: 0, A: 100}

View File

@ -3,6 +3,8 @@ package d2maprenderer
import (
"log"
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2interface"
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2enum"
"github.com/OpenDiablo2/OpenDiablo2/d2common"
@ -74,7 +76,7 @@ func (mr *MapRenderer) generateFloorCache(tile *d2ds1.FloorShadowRecord, tileX,
}
tileYOffset := d2common.AbsInt32(tileYMinimum)
tileHeight := d2common.AbsInt32(tileData[i].Height)
image, _ := d2render.NewSurface(int(tileData[i].Width), int(tileHeight), d2render.FilterNearest)
image, _ := d2render.NewSurface(int(tileData[i].Width), int(tileHeight), d2interface.FilterNearest)
pixels := make([]byte, 4*tileData[i].Width*tileHeight)
mr.decodeTileGfxData(tileData[i].Blocks, &pixels, tileYOffset, tileData[i].Width)
image.ReplacePixels(pixels)
@ -113,7 +115,7 @@ func (mr *MapRenderer) generateShadowCache(tile *d2ds1.FloorShadowRecord, tileX,
return
}
image, _ := d2render.NewSurface(int(tileData.Width), tileHeight, d2render.FilterNearest)
image, _ := d2render.NewSurface(int(tileData.Width), tileHeight, d2interface.FilterNearest)
pixels := make([]byte, 4*tileData.Width*int32(tileHeight))
mr.decodeTileGfxData(tileData.Blocks, &pixels, tileYOffset, tileData.Width)
image.ReplacePixels(pixels)
@ -174,7 +176,7 @@ func (mr *MapRenderer) generateWallCache(tile *d2ds1.WallRecord, tileX, tileY in
return
}
image, _ := d2render.NewSurface(160, int(realHeight), d2render.FilterNearest)
image, _ := d2render.NewSurface(160, int(realHeight), d2interface.FilterNearest)
pixels := make([]byte, 4*160*realHeight)
mr.decodeTileGfxData(tileData.Blocks, &pixels, tileYOffset, 160)

View File

@ -3,6 +3,8 @@ package d2render
import (
"errors"
"log"
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2interface"
)
var (
@ -11,9 +13,9 @@ var (
ErrInvalidRenderer = errors.New("invalid rendering system specified")
)
var singleton Renderer
var singleton d2interface.Renderer
func Initialize(rend Renderer) error {
func Initialize(rend d2interface.Renderer) error {
verifyNotInit()
singleton = rend
log.Printf("Initialized the %s renderer...", singleton.GetRendererName())
@ -25,7 +27,7 @@ func SetWindowIcon(fileName string) {
singleton.SetWindowIcon(fileName)
}
func Run(f func(Surface) error, width, height int, title string) error {
func Run(f func(d2interface.Surface) error, width, height int, title string) error {
verifyWasInit()
singleton.Run(f, width, height, title)
return nil
@ -36,12 +38,12 @@ func IsDrawingSkipped() bool {
return singleton.IsDrawingSkipped()
}
func CreateSurface(surface Surface) (Surface, error) {
func CreateSurface(surface d2interface.Surface) (d2interface.Surface, error) {
verifyWasInit()
return singleton.CreateSurface(surface)
}
func NewSurface(width, height int, filter Filter) (Surface, error) {
func NewSurface(width, height int, filter d2interface.Filter) (d2interface.Surface, error) {
verifyWasInit()
return singleton.NewSurface(width, height, filter)
}

View File

@ -1,72 +1,72 @@
package ebiten
import (
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2render"
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2interface"
"github.com/hajimehoshi/ebiten"
)
func d2ToEbitenCompositeMode(comp d2render.CompositeMode) ebiten.CompositeMode {
func d2ToEbitenCompositeMode(comp d2interface.CompositeMode) ebiten.CompositeMode {
switch comp {
case d2render.CompositeModeSourceOver:
case d2interface.CompositeModeSourceOver:
return ebiten.CompositeModeSourceOver
case d2render.CompositeModeClear:
case d2interface.CompositeModeClear:
return ebiten.CompositeModeClear
case d2render.CompositeModeCopy:
case d2interface.CompositeModeCopy:
return ebiten.CompositeModeCopy
case d2render.CompositeModeDestination:
case d2interface.CompositeModeDestination:
return ebiten.CompositeModeDestination
case d2render.CompositeModeDestinationOver:
case d2interface.CompositeModeDestinationOver:
return ebiten.CompositeModeDestinationOver
case d2render.CompositeModeSourceIn:
case d2interface.CompositeModeSourceIn:
return ebiten.CompositeModeSourceIn
case d2render.CompositeModeDestinationIn:
case d2interface.CompositeModeDestinationIn:
return ebiten.CompositeModeDestinationIn
case d2render.CompositeModeSourceOut:
case d2interface.CompositeModeSourceOut:
return ebiten.CompositeModeSourceOut
case d2render.CompositeModeDestinationOut:
case d2interface.CompositeModeDestinationOut:
return ebiten.CompositeModeDestinationOut
case d2render.CompositeModeSourceAtop:
case d2interface.CompositeModeSourceAtop:
return ebiten.CompositeModeSourceAtop
case d2render.CompositeModeDestinationAtop:
case d2interface.CompositeModeDestinationAtop:
return ebiten.CompositeModeDestinationAtop
case d2render.CompositeModeXor:
case d2interface.CompositeModeXor:
return ebiten.CompositeModeXor
case d2render.CompositeModeLighter:
case d2interface.CompositeModeLighter:
return ebiten.CompositeModeLighter
}
return ebiten.CompositeModeSourceOver
}
func ebitenToD2CompositeMode(comp ebiten.CompositeMode) d2render.CompositeMode {
func ebitenToD2CompositeMode(comp ebiten.CompositeMode) d2interface.CompositeMode {
switch comp {
case ebiten.CompositeModeSourceOver:
return d2render.CompositeModeSourceOver
return d2interface.CompositeModeSourceOver
case ebiten.CompositeModeClear:
return d2render.CompositeModeClear
return d2interface.CompositeModeClear
case ebiten.CompositeModeCopy:
return d2render.CompositeModeCopy
return d2interface.CompositeModeCopy
case ebiten.CompositeModeDestination:
return d2render.CompositeModeDestination
return d2interface.CompositeModeDestination
case ebiten.CompositeModeDestinationOver:
return d2render.CompositeModeDestinationOver
return d2interface.CompositeModeDestinationOver
case ebiten.CompositeModeSourceIn:
return d2render.CompositeModeSourceIn
return d2interface.CompositeModeSourceIn
case ebiten.CompositeModeDestinationIn:
return d2render.CompositeModeDestinationIn
return d2interface.CompositeModeDestinationIn
case ebiten.CompositeModeSourceOut:
return d2render.CompositeModeSourceOut
return d2interface.CompositeModeSourceOut
case ebiten.CompositeModeDestinationOut:
return d2render.CompositeModeDestinationOut
return d2interface.CompositeModeDestinationOut
case ebiten.CompositeModeSourceAtop:
return d2render.CompositeModeSourceAtop
return d2interface.CompositeModeSourceAtop
case ebiten.CompositeModeDestinationAtop:
return d2render.CompositeModeDestinationAtop
return d2interface.CompositeModeDestinationAtop
case ebiten.CompositeModeXor:
return d2render.CompositeModeXor
return d2interface.CompositeModeXor
case ebiten.CompositeModeLighter:
return d2render.CompositeModeLighter
return d2interface.CompositeModeLighter
}
return d2render.CompositeModeSourceOver
return d2interface.CompositeModeSourceOver
}

View File

@ -3,15 +3,16 @@ package ebiten
import (
"image"
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2interface"
"github.com/hajimehoshi/ebiten"
"github.com/hajimehoshi/ebiten/ebitenutil"
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2config"
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2render"
)
type Renderer struct {
renderCallback func(surface d2render.Surface) error
renderCallback func(surface d2interface.Surface) error
}
func (r *Renderer) Update(screen *ebiten.Image) error {
@ -55,7 +56,7 @@ func (r *Renderer) IsDrawingSkipped() bool {
return ebiten.IsDrawingSkipped()
}
func (r *Renderer) Run(f func(surface d2render.Surface) error, width, height int, title string) error {
func (r *Renderer) Run(f func(surface d2interface.Surface) error, width, height int, title string) error {
r.renderCallback = f
ebiten.SetWindowTitle(title)
ebiten.SetWindowResizable(true)
@ -63,7 +64,7 @@ func (r *Renderer) Run(f func(surface d2render.Surface) error, width, height int
return ebiten.RunGame(r)
}
func (r *Renderer) CreateSurface(surface d2render.Surface) (d2render.Surface, error) {
func (r *Renderer) CreateSurface(surface d2interface.Surface) (d2interface.Surface, error) {
result := &ebitenSurface{
image: surface.(*ebitenSurface).image,
stateCurrent: surfaceState{
@ -74,7 +75,7 @@ func (r *Renderer) CreateSurface(surface d2render.Surface) (d2render.Surface, er
return result, nil
}
func (r *Renderer) NewSurface(width, height int, filter d2render.Filter) (d2render.Surface, error) {
func (r *Renderer) NewSurface(width, height int, filter d2interface.Filter) (d2interface.Surface, error) {
ebitenFilter := d2ToEbitenFilter(filter)
img, err := ebiten.NewImage(width, height, ebitenFilter)
if err != nil {

View File

@ -5,7 +5,7 @@ import (
"image"
"image/color"
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2render"
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2interface"
"github.com/hajimehoshi/ebiten"
"github.com/hajimehoshi/ebiten/ebitenutil"
@ -23,12 +23,12 @@ func (s *ebitenSurface) PushTranslation(x, y int) {
s.stateCurrent.y += y
}
func (s *ebitenSurface) PushCompositeMode(mode d2render.CompositeMode) {
func (s *ebitenSurface) PushCompositeMode(mode d2interface.CompositeMode) {
s.stateStack = append(s.stateStack, s.stateCurrent)
s.stateCurrent.mode = d2ToEbitenCompositeMode(mode)
}
func (s *ebitenSurface) PushFilter(filter d2render.Filter) {
func (s *ebitenSurface) PushFilter(filter d2interface.Filter) {
s.stateStack = append(s.stateStack, s.stateCurrent)
s.stateCurrent.filter = d2ToEbitenFilter(filter)
}
@ -59,7 +59,7 @@ func (s *ebitenSurface) PopN(n int) {
}
}
func (s *ebitenSurface) Render(sfc d2render.Surface) error {
func (s *ebitenSurface) Render(sfc d2interface.Surface) error {
opts := &ebiten.DrawImageOptions{CompositeMode: s.stateCurrent.mode}
opts.GeoM.Translate(float64(s.stateCurrent.x), float64(s.stateCurrent.y))
opts.Filter = s.stateCurrent.filter

View File

@ -1,32 +1,32 @@
package ebiten
import (
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2render"
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2interface"
"github.com/hajimehoshi/ebiten"
)
func d2ToEbitenFilter(filter d2render.Filter) ebiten.Filter {
func d2ToEbitenFilter(filter d2interface.Filter) ebiten.Filter {
switch filter {
case d2render.FilterDefault:
case d2interface.FilterDefault:
return ebiten.FilterDefault
case d2render.FilterLinear:
case d2interface.FilterLinear:
return ebiten.FilterLinear
case d2render.FilterNearest:
case d2interface.FilterNearest:
return ebiten.FilterNearest
}
return ebiten.FilterDefault
}
func ebitenToD2Filter(filter ebiten.Filter) d2render.Filter {
func ebitenToD2Filter(filter ebiten.Filter) d2interface.Filter {
switch filter {
case ebiten.FilterDefault:
return d2render.FilterDefault
return d2interface.FilterDefault
case ebiten.FilterLinear:
return d2render.FilterLinear
return d2interface.FilterLinear
case ebiten.FilterNearest:
return d2render.FilterNearest
return d2interface.FilterNearest
}
return d2render.FilterDefault
return d2interface.FilterDefault
}

View File

@ -3,8 +3,9 @@ package d2screen
import (
"log"
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2interface"
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2gui"
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2render"
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2ui"
)
@ -22,7 +23,7 @@ type ScreenUnloadHandler interface {
}
type ScreenRenderHandler interface {
Render(target d2render.Surface) error
Render(target d2interface.Surface) error
}
type ScreenAdvanceHandler interface {
@ -95,7 +96,7 @@ func Advance(elapsed float64) error {
return nil
}
func Render(surface d2render.Surface) error {
func Render(surface d2interface.Surface) error {
if handler, ok := singleton.currentScreen.(ScreenRenderHandler); ok {
if err := handler.Render(surface); err != nil {
return err

View File

@ -15,7 +15,6 @@ import (
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2interface"
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2input"
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2render"
)
type TermCategory d2interface.TermCategory
@ -211,7 +210,7 @@ func (t *terminal) OnKeyChars(event d2input.KeyCharsEvent) bool {
return handled
}
func (t *terminal) Render(surface d2render.Surface) error {
func (t *terminal) Render(surface d2interface.Surface) error {
if !t.IsVisible() {
return nil
}

View File

@ -4,6 +4,8 @@ import (
"image"
"image/color"
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2interface"
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2asset"
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2resource"
@ -93,11 +95,11 @@ type Button struct {
visible bool
pressed bool
toggled bool
normalSurface d2render.Surface
pressedSurface d2render.Surface
toggledSurface d2render.Surface
pressedToggledSurface d2render.Surface
disabledSurface d2render.Surface
normalSurface d2interface.Surface
pressedSurface d2interface.Surface
toggledSurface d2interface.Surface
pressedToggledSurface d2interface.Surface
disabledSurface d2interface.Surface
buttonLayout ButtonLayout
onClick func()
}
@ -127,7 +129,7 @@ func CreateButton(buttonType ButtonType, text string) Button {
result.height += h
}
result.normalSurface, _ = d2render.NewSurface(result.width, result.height, d2render.FilterNearest)
result.normalSurface, _ = d2render.NewSurface(result.width, result.height, d2interface.FilterNearest)
_, fontHeight := font.GetTextMetrics(text)
textY := (result.height / 2) - (fontHeight / 2) + buttonLayout.TextOffset
@ -137,22 +139,22 @@ func CreateButton(buttonType ButtonType, text string) Button {
font.Render(0, textY, text, color.RGBA{R: 100, G: 100, B: 100, A: 255}, result.normalSurface)
if buttonLayout.AllowFrameChange {
if totalButtonTypes > 1 {
result.pressedSurface, _ = d2render.NewSurface(result.width, result.height, d2render.FilterNearest)
result.pressedSurface, _ = d2render.NewSurface(result.width, result.height, d2interface.FilterNearest)
buttonSprite.RenderSegmented(result.pressedSurface, buttonLayout.XSegments, buttonLayout.YSegments, buttonLayout.BaseFrame+1)
font.Render(-2, textY+2, text, color.RGBA{R: 100, G: 100, B: 100, A: 255}, result.pressedSurface)
}
if totalButtonTypes > 2 {
result.toggledSurface, _ = d2render.NewSurface(result.width, result.height, d2render.FilterNearest)
result.toggledSurface, _ = d2render.NewSurface(result.width, result.height, d2interface.FilterNearest)
buttonSprite.RenderSegmented(result.toggledSurface, buttonLayout.XSegments, buttonLayout.YSegments, buttonLayout.BaseFrame+2)
font.Render(0, textY, text, color.RGBA{R: 100, G: 100, B: 100, A: 255}, result.toggledSurface)
}
if totalButtonTypes > 3 {
result.pressedToggledSurface, _ = d2render.NewSurface(result.width, result.height, d2render.FilterNearest)
result.pressedToggledSurface, _ = d2render.NewSurface(result.width, result.height, d2interface.FilterNearest)
buttonSprite.RenderSegmented(result.pressedToggledSurface, buttonLayout.XSegments, buttonLayout.YSegments, buttonLayout.BaseFrame+3)
font.Render(0, textY, text, color.RGBA{R: 100, G: 100, B: 100, A: 255}, result.pressedToggledSurface)
}
if buttonLayout.DisabledFrame != -1 {
result.disabledSurface, _ = d2render.NewSurface(result.width, result.height, d2render.FilterNearest)
result.disabledSurface, _ = d2render.NewSurface(result.width, result.height, d2interface.FilterNearest)
buttonSprite.RenderSegmented(result.disabledSurface, buttonLayout.XSegments, buttonLayout.YSegments, buttonLayout.DisabledFrame)
font.Render(0, textY, text, color.RGBA{R: 100, G: 100, B: 100, A: 255}, result.disabledSurface)
}
@ -174,9 +176,9 @@ func (v *Button) Activate() {
}
// Render renders the button
func (v *Button) Render(target d2render.Surface) {
target.PushCompositeMode(d2render.CompositeModeSourceAtop)
target.PushFilter(d2render.FilterNearest)
func (v *Button) Render(target d2interface.Surface) {
target.PushCompositeMode(d2interface.CompositeModeSourceAtop)
target.PushFilter(d2interface.FilterNearest)
target.PushTranslation(v.x, v.y)
defer target.PopN(3)

View File

@ -1,6 +1,7 @@
package d2ui
import (
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2interface"
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2resource"
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2asset"
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2render"
@ -11,8 +12,8 @@ type Checkbox struct {
checkState bool
visible bool
width, height int
Image d2render.Surface
checkedImage d2render.Surface
Image d2interface.Surface
checkedImage d2interface.Surface
onClick func()
enabled bool
}
@ -31,18 +32,18 @@ func CreateCheckbox(checkState bool) Checkbox {
result.width, result.height, _ = checkboxSprite.GetFrameSize(0)
checkboxSprite.SetPosition(0, 0)
result.Image, _ = d2render.NewSurface(result.width, result.height, d2render.FilterNearest)
result.Image, _ = d2render.NewSurface(result.width, result.height, d2interface.FilterNearest)
checkboxSprite.RenderSegmented(result.Image, 1, 1, 0)
result.checkedImage, _ = d2render.NewSurface(result.width, result.height, d2render.FilterNearest)
result.checkedImage, _ = d2render.NewSurface(result.width, result.height, d2interface.FilterNearest)
checkboxSprite.RenderSegmented(result.checkedImage, 1, 1, 1)
return result
}
func (v *Checkbox) Render(target d2render.Surface) {
target.PushCompositeMode(d2render.CompositeModeSourceAtop)
func (v *Checkbox) Render(target d2interface.Surface) {
target.PushCompositeMode(d2interface.CompositeModeSourceAtop)
target.PushTranslation(v.x, v.y)
target.PushFilter(d2render.FilterNearest)
target.PushFilter(d2interface.FilterNearest)
defer target.PopN(3)
if v.checkState {

View File

@ -7,7 +7,6 @@ import (
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2resource"
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2input"
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2render"
)
// CursorButton represents a mouse button
@ -91,7 +90,7 @@ func (u *UI) OnMouseButtonDown(event d2input.MouseEvent) bool {
}
// Render renders all of the UI elements
func Render(target d2render.Surface) {
func Render(target d2interface.Surface) {
for _, widget := range singleton.widgets {
if widget.GetVisible() {
widget.Render(target)

View File

@ -1,10 +1,12 @@
package d2ui
import "github.com/OpenDiablo2/OpenDiablo2/d2core/d2render"
import (
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2interface"
)
// Drawable represents an instance that can be drawn
type Drawable interface {
Render(target d2render.Surface)
Render(target d2interface.Surface)
Advance(elapsed float64)
GetSize() (width, height int)
SetPosition(x, y int)

View File

@ -6,9 +6,10 @@ import (
"strings"
"unicode"
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2interface"
"github.com/OpenDiablo2/OpenDiablo2/d2common"
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2asset"
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2render"
)
var fontCache = map[string]*Font{}
@ -102,7 +103,7 @@ func (v *Font) GetTextMetrics(text string) (width, height int) {
}
// Render draws the font on the target surface
func (v *Font) Render(x, y int, text string, color color.Color, target d2render.Surface) {
func (v *Font) Render(x, y int, text string, color color.Color, target d2interface.Surface) {
v.fontSprite.SetColorMod(color)
v.fontSprite.SetBlend(false)

View File

@ -3,6 +3,8 @@ package d2ui
import (
"image/color"
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2interface"
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2render"
)
@ -27,7 +29,7 @@ type Label struct {
Height int
Alignment LabelAlignment
font *Font
imageData map[string]d2render.Surface
imageData map[string]d2interface.Surface
Color color.Color
}
@ -37,14 +39,14 @@ func CreateLabel(fontPath, palettePath string) Label {
Alignment: LabelAlignLeft,
Color: color.White,
font: GetFont(fontPath, palettePath),
imageData: make(map[string]d2render.Surface),
imageData: make(map[string]d2interface.Surface),
}
return result
}
// Render draws the label on the screen
func (v *Label) Render(target d2render.Surface) {
func (v *Label) Render(target d2interface.Surface) {
if len(v.text) == 0 {
return
}
@ -57,8 +59,8 @@ func (v *Label) Render(target d2render.Surface) {
x, y = v.X-v.Width, v.Y
}
target.PushFilter(d2render.FilterNearest)
target.PushCompositeMode(d2render.CompositeModeSourceAtop)
target.PushFilter(d2interface.FilterNearest)
target.PushCompositeMode(d2interface.CompositeModeSourceAtop)
target.PushTranslation(x, y)
defer target.PopN(3)
@ -82,7 +84,7 @@ func (v *Label) cacheImage() {
width, height := v.font.GetTextMetrics(v.text)
v.Width = width
v.Height = height
v.imageData[v.text], _ = d2render.NewSurface(width, height, d2render.FilterNearest)
v.imageData[v.text], _ = d2render.NewSurface(width, height, d2interface.FilterNearest)
surface, _ := d2render.CreateSurface(v.imageData[v.text])
v.font.Render(0, 0, v.text, v.Color, surface)
}

View File

@ -1,9 +1,9 @@
package d2ui
import (
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2interface"
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2resource"
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2asset"
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2render"
)
type Scrollbar struct {
@ -74,7 +74,7 @@ func (v *Scrollbar) GetLastDirChange() int {
return v.lastDirChange
}
func (v *Scrollbar) Render(target d2render.Surface) {
func (v *Scrollbar) Render(target d2interface.Surface) {
if !v.visible || v.maxOffset == 0 {
return
}

View File

@ -4,9 +4,10 @@ import (
"errors"
"image/color"
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2interface"
"github.com/OpenDiablo2/OpenDiablo2/d2common"
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2asset"
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2render"
)
type Sprite struct {
@ -26,7 +27,7 @@ func LoadSprite(animation *d2asset.Animation) (*Sprite, error) {
return &Sprite{animation: animation}, nil
}
func (s *Sprite) Render(target d2render.Surface) error {
func (s *Sprite) Render(target d2interface.Surface) error {
_, frameHeight := s.animation.GetCurrentFrameSize()
target.PushTranslation(s.x, s.y-frameHeight)
@ -34,7 +35,7 @@ func (s *Sprite) Render(target d2render.Surface) error {
return s.animation.Render(target)
}
func (s *Sprite) RenderSegmented(target d2render.Surface, segmentsX, segmentsY, frameOffset int) error {
func (s *Sprite) RenderSegmented(target d2interface.Surface, segmentsX, segmentsY, frameOffset int) error {
var currentY int
for y := 0; y < segmentsY; y++ {
var currentX int

View File

@ -4,10 +4,11 @@ import (
"strings"
"time"
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2interface"
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2resource"
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2asset"
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2input"
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2render"
)
// TextBox with cursor focus
@ -46,7 +47,7 @@ func (v *TextBox) SetFilter(filter string) {
v.filter = filter
}
func (v *TextBox) Render(target d2render.Surface) {
func (v *TextBox) Render(target d2interface.Surface) {
if !v.visible {
return
}

View File

@ -15,7 +15,6 @@ import (
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2asset"
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2inventory"
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2map/d2mapentity"
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2render"
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2screen"
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2ui"
"github.com/OpenDiablo2/OpenDiablo2/d2game/d2player"
@ -187,7 +186,7 @@ func (v *CharacterSelect) onExitButtonClicked() {
d2screen.SetNextScreen(mainMenu)
}
func (v *CharacterSelect) Render(screen d2render.Surface) error {
func (v *CharacterSelect) Render(screen d2interface.Surface) error {
v.background.RenderSegmented(screen, 4, 3, 0)
v.d2HeroTitle.Render(screen)
actualSelectionIndex := v.selectedCharacter - (v.charScrollbar.GetCurrentOffset() * 2)

View File

@ -14,7 +14,6 @@ import (
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2resource"
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2asset"
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2render"
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2screen"
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2ui"
)
@ -99,7 +98,7 @@ func (v *Credits) OnLoad(loading d2screen.LoadingState) {
}
// Render renders the credits screen
func (v *Credits) Render(screen d2render.Surface) error {
func (v *Credits) Render(screen d2interface.Surface) error {
v.creditsBackground.RenderSegmented(screen, 4, 3, 0)
for _, label := range v.labels {
if label.Available {

View File

@ -14,7 +14,6 @@ import (
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2input"
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2map/d2mapentity"
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2map/d2maprenderer"
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2render"
"github.com/OpenDiablo2/OpenDiablo2/d2game/d2player"
"github.com/OpenDiablo2/OpenDiablo2/d2networking/d2client"
"github.com/OpenDiablo2/OpenDiablo2/d2networking/d2netpacket"
@ -59,7 +58,7 @@ func (v *Game) OnUnload() error {
return nil
}
func (v *Game) Render(screen d2render.Surface) error {
func (v *Game) Render(screen d2interface.Surface) error {
if v.gameClient.RegenMap {
v.gameClient.RegenMap = false
v.mapRenderer.RegenerateTileCache()

View File

@ -1,8 +1,8 @@
package d2gamescreen
import (
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2interface"
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2gui"
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2render"
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2screen"
)
@ -42,7 +42,7 @@ func (g *GuiTestMain) OnLoad(loading d2screen.LoadingState) {
d2gui.SetLayout(layout)
}
func (g *GuiTestMain) Render(screen d2render.Surface) error {
func (g *GuiTestMain) Render(screen d2interface.Surface) error {
return nil
}

View File

@ -20,7 +20,6 @@ import (
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2resource"
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2asset"
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2render"
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2screen"
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2ui"
)
@ -301,7 +300,7 @@ func (v *MainMenu) onCreditsButtonClicked() {
}
// Render renders the main menu
func (v *MainMenu) Render(screen d2render.Surface) error {
func (v *MainMenu) Render(screen d2interface.Surface) error {
switch v.screenMode {
case ScreenModeTrademark:
v.trademarkBackground.RenderSegmented(screen, 4, 3, 0)

View File

@ -13,7 +13,6 @@ import (
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2enum"
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2interface"
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2input"
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2render"
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2screen"
"github.com/OpenDiablo2/OpenDiablo2/d2game/d2player"
)
@ -161,7 +160,7 @@ func (met *MapEngineTest) OnUnload() error {
return nil
}
func (met *MapEngineTest) Render(screen d2render.Surface) error {
func (met *MapEngineTest) Render(screen d2interface.Surface) error {
met.mapRenderer.Render(screen)
//

View File

@ -17,7 +17,6 @@ import (
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2resource"
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2asset"
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2render"
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2screen"
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2ui"
)
@ -445,7 +444,7 @@ func (v *SelectHeroClass) onOkButtonClicked() {
d2screen.SetNextScreen(CreateGame(v.audioProvider, gameClient, v.terminal))
}
func (v *SelectHeroClass) Render(screen d2render.Surface) error {
func (v *SelectHeroClass) Render(screen d2interface.Surface) error {
v.bgImage.RenderSegmented(screen, 4, 3, 0)
v.headingLabel.Render(screen)
if v.selectedHero != d2enum.HeroNone {
@ -557,7 +556,7 @@ func (v *SelectHeroClass) updateHeroSelectionHover(hero d2enum.Hero, canSelect b
}
func (v *SelectHeroClass) renderHero(screen d2render.Surface, hero d2enum.Hero) {
func (v *SelectHeroClass) renderHero(screen d2interface.Surface, hero d2enum.Hero) {
renderInfo := v.heroRenderInfo[hero]
switch renderInfo.Stance {
case d2enum.HeroStanceIdle:
@ -645,7 +644,7 @@ func setSpriteToFirstFrame(sprite *d2ui.Sprite) {
}
}
func drawSprite(sprite *d2ui.Sprite, target d2render.Surface) {
func drawSprite(sprite *d2ui.Sprite, target d2interface.Surface) {
if sprite != nil {
sprite.Render(target)
}

View File

@ -52,8 +52,8 @@ type GameControls struct {
// UI
globeSprite *d2ui.Sprite
hpManaStatusSprite *d2ui.Sprite
hpStatusBar d2render.Surface
manaStatusBar d2render.Surface
hpStatusBar d2interface.Surface
manaStatusBar d2interface.Surface
mainPanel *d2ui.Sprite
menuButton *d2ui.Sprite
skillIcon *d2ui.Sprite
@ -254,7 +254,7 @@ func (g *GameControls) Load() {
animation, _ = d2asset.LoadAnimation(d2resource.HealthManaIndicator, d2resource.PaletteSky)
g.hpManaStatusSprite, _ = d2ui.LoadSprite(animation)
g.hpStatusBar, _ = d2render.NewSurface(globeWidth, globeHeight, d2render.FilterNearest)
g.hpStatusBar, _ = d2render.NewSurface(globeWidth, globeHeight, d2interface.FilterNearest)
animation, _ = d2asset.LoadAnimation(d2resource.GamePanels, d2resource.PaletteSky)
g.mainPanel, _ = d2ui.LoadSprite(animation)
@ -334,7 +334,7 @@ func (g *GameControls) isInActiveMenusRect(px int, py int) bool {
}
// TODO: consider caching the panels to single image that is reused.
func (g *GameControls) Render(target d2render.Surface) {
func (g *GameControls) Render(target d2interface.Surface) {
for entityIdx := range *g.mapEngine.Entities() {
entity := (*g.mapEngine.Entities())[entityIdx]
if !entity.Selectable() {
@ -376,7 +376,7 @@ func (g *GameControls) Render(target d2render.Surface) {
healthPercent := float64(g.hero.Stats.Health) / float64(g.hero.Stats.MaxHealth)
hpBarHeight := int(healthPercent * float64(globeHeight))
if g.lastHealthPercent != healthPercent {
g.hpStatusBar, _ = d2render.NewSurface(globeWidth, hpBarHeight, d2render.FilterNearest)
g.hpStatusBar, _ = d2render.NewSurface(globeWidth, hpBarHeight, d2interface.FilterNearest)
g.hpManaStatusSprite.SetCurrentFrame(0)
g.hpStatusBar.PushTranslation(0, hpBarHeight)
@ -414,7 +414,7 @@ func (g *GameControls) Render(target d2render.Surface) {
// Stamina status bar
target.PushTranslation(273, 572)
target.PushCompositeMode(d2render.CompositeModeLighter)
target.PushCompositeMode(d2interface.CompositeModeLighter)
staminaPercent := float64(g.hero.Stats.Stamina) / float64(g.hero.Stats.MaxStamina)
target.DrawRect(int(staminaPercent*staminaBarWidth), 19, color.RGBA{R: 175, G: 136, B: 72, A: 200})
target.PopN(2)
@ -468,7 +468,7 @@ func (g *GameControls) Render(target d2render.Surface) {
manaPercent := float64(g.hero.Stats.Mana) / float64(g.hero.Stats.MaxMana)
manaBarHeight := int(manaPercent * float64(globeHeight))
if manaPercent != g.lastManaPercent {
g.manaStatusBar, _ = d2render.NewSurface(globeWidth, manaBarHeight, d2render.FilterNearest)
g.manaStatusBar, _ = d2render.NewSurface(globeWidth, manaBarHeight, d2interface.FilterNearest)
g.hpManaStatusSprite.SetCurrentFrame(1)
g.manaStatusBar.PushTranslation(0, manaBarHeight)

View File

@ -3,6 +3,8 @@ package d2player
import (
"strconv"
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2interface"
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2enum"
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2resource"
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2asset"
@ -72,7 +74,7 @@ type HeroStatsPanel struct {
heroState *d2hero.HeroStatsState
heroName string
heroClass d2enum.Hero
staticMenuImageCache *d2render.Surface
staticMenuImageCache *d2interface.Surface
labels *StatsPanelLabels
originX int
@ -88,7 +90,7 @@ func NewHeroStatsPanel(heroName string, heroClass d2enum.Hero, heroState d2hero.
originX: originX,
originY: originY,
heroState: &heroState,
heroName: heroName,
heroName: heroName,
heroClass: heroClass,
labels: &StatsPanelLabels{},
}
@ -118,7 +120,7 @@ func (s *HeroStatsPanel) Close() {
s.isOpen = false
}
func (s *HeroStatsPanel) Render(target d2render.Surface) {
func (s *HeroStatsPanel) Render(target d2interface.Surface) {
if !s.isOpen {
return
}
@ -126,7 +128,7 @@ func (s *HeroStatsPanel) Render(target d2render.Surface) {
if s.staticMenuImageCache == nil {
frameWidth, frameHeight := s.frame.GetFrameBounds()
framesCount := s.frame.GetFrameCount()
surface, err := d2render.NewSurface(frameWidth*framesCount, frameHeight*framesCount, d2render.FilterNearest)
surface, err := d2render.NewSurface(frameWidth*framesCount, frameHeight*framesCount, d2interface.FilterNearest)
if err != nil {
return
@ -138,7 +140,7 @@ func (s *HeroStatsPanel) Render(target d2render.Surface) {
s.renderStatValues(target)
}
func (s *HeroStatsPanel) renderStaticMenu(target d2render.Surface) {
func (s *HeroStatsPanel) renderStaticMenu(target d2interface.Surface) {
x, y := s.originX, s.originY
// Frame
@ -226,7 +228,7 @@ func (s *HeroStatsPanel) initStatValueLabels() {
s.labels.Experience = s.createStatValueLabel(s.heroState.Experience, 200, 110)
s.labels.NextLevelExp = s.createStatValueLabel(s.heroState.NextLevelExp, 330, 110)
s.labels.Strength = s.createStatValueLabel(s.heroState.Strength, 175, 147)
s.labels.Strength = s.createStatValueLabel(s.heroState.Strength, 175, 147)
s.labels.Dexterity = s.createStatValueLabel(s.heroState.Dexterity, 175, 207)
s.labels.Vitality = s.createStatValueLabel(s.heroState.Vitality, 175, 295)
s.labels.Energy = s.createStatValueLabel(s.heroState.Energy, 175, 355)
@ -241,7 +243,7 @@ func (s *HeroStatsPanel) initStatValueLabels() {
s.labels.Mana = s.createStatValueLabel(s.heroState.Mana, 370, 355)
}
func (s *HeroStatsPanel) renderStatValues(target d2render.Surface) {
func (s *HeroStatsPanel) renderStatValues(target d2interface.Surface) {
s.renderStatValueNum(s.labels.Level, s.heroState.Level, target)
s.renderStatValueNum(s.labels.Experience, s.heroState.Experience, target)
s.renderStatValueNum(s.labels.NextLevelExp, s.heroState.NextLevelExp, target)
@ -261,7 +263,7 @@ func (s *HeroStatsPanel) renderStatValues(target d2render.Surface) {
s.renderStatValueNum(s.labels.Mana, s.heroState.Mana, target)
}
func (s *HeroStatsPanel) renderStatValueNum(label d2ui.Label, value int, target d2render.Surface) {
func (s *HeroStatsPanel) renderStatValueNum(label d2ui.Label, value int, target d2interface.Surface) {
label.SetText(strconv.Itoa(value))
label.Render(target)
}

View File

@ -2,10 +2,10 @@ package d2player
import (
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2enum"
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2interface"
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2resource"
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2asset"
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2inventory"
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2render"
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2ui"
)
@ -72,7 +72,7 @@ func (g *Inventory) Load() {
g.grid.Add(items...)
}
func (g *Inventory) Render(target d2render.Surface) {
func (g *Inventory) Render(target d2interface.Surface) {
if !g.isOpen {
return
}

View File

@ -3,11 +3,12 @@ package d2player
import (
"errors"
"fmt"
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2enum"
"log"
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2enum"
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2interface"
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2asset"
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2render"
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2ui"
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2resource"
@ -199,7 +200,7 @@ func (g *ItemGrid) Remove(item InventoryItem) {
g.items = g.items[:n]
}
func (g *ItemGrid) renderItem(item InventoryItem, target d2render.Surface, x int, y int) {
func (g *ItemGrid) renderItem(item InventoryItem, target d2interface.Surface, x int, y int) {
itemSprite := g.sprites[item.GetItemCode()]
if itemSprite != nil {
itemSprite.SetPosition(x, y)
@ -208,12 +209,12 @@ func (g *ItemGrid) renderItem(item InventoryItem, target d2render.Surface, x int
}
}
func (g *ItemGrid) Render(target d2render.Surface) {
func (g *ItemGrid) Render(target d2interface.Surface) {
g.renderInventoryItems(target)
g.renderEquippedItems(target)
}
func (g *ItemGrid) renderInventoryItems(target d2render.Surface) {
func (g *ItemGrid) renderInventoryItems(target d2interface.Surface) {
for _, item := range g.items {
itemSprite := g.sprites[item.GetItemCode()]
slotX, slotY := g.SlotToScreen(item.InventoryGridSlot())
@ -223,7 +224,7 @@ func (g *ItemGrid) renderInventoryItems(target d2render.Surface) {
}
}
func (g *ItemGrid) renderEquippedItems(target d2render.Surface) {
func (g *ItemGrid) renderEquippedItems(target d2interface.Surface) {
for _, eq := range g.equipmentSlots {
if eq.item != nil {
itemSprite := g.sprites[eq.item.GetItemCode()]

17
main.go
View File

@ -4,7 +4,6 @@ import (
"bytes"
"errors"
"fmt"
ebiten_input "github.com/OpenDiablo2/OpenDiablo2/d2core/d2input/ebiten"
"image"
"image/gif"
"image/png"
@ -16,6 +15,8 @@ import (
"strings"
"sync"
ebiten_input "github.com/OpenDiablo2/OpenDiablo2/d2core/d2input/ebiten"
ebiten2 "github.com/OpenDiablo2/OpenDiablo2/d2core/d2audio/ebiten"
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2interface"
@ -83,7 +84,6 @@ func main() {
panic(err)
}
d2input.Initialize(ebiten_input.InputService{}) // TODO d2input singleton must be init before d2term
term, err := d2term.Initialize()
terminal_hack = term // needs to be used in advance, no easy way for that right now
@ -136,7 +136,6 @@ func initialize(audioProvider d2interface.AudioProvider, term d2interface.Termin
}
d2render.SetWindowIcon("d2logo.png")
term.BindLogger()
term.BindAction("dumpheap", "dumps the heap to pprof/heap.pprof", func() {
os.Mkdir("./pprof/", 0755)
@ -213,7 +212,7 @@ func initialize(audioProvider d2interface.AudioProvider, term d2interface.Termin
return nil
}
func run(updateFunc func(d2render.Surface) error) {
func run(updateFunc func(d2interface.Surface) error) {
if len(GitBranch) == 0 {
GitBranch = "Local Build"
}
@ -224,7 +223,7 @@ func run(updateFunc func(d2render.Surface) error) {
}
}
func update(target d2render.Surface) error {
func update(target d2interface.Surface) error {
currentTime := d2common.Now()
elapsedTime := (currentTime - singleton.lastTime) * singleton.timeScale
singleton.lastTime = currentTime
@ -244,7 +243,7 @@ func update(target d2render.Surface) error {
return nil
}
func updateInitError(target d2render.Surface) error {
func updateInitError(target d2interface.Surface) error {
width, height := target.GetSize()
target.PushTranslation(width/5, height/2)
target.DrawText("Could not find the MPQ files in the directory: %s\nPlease put the files and re-run the game.", d2config.Get().MpqPath)
@ -280,7 +279,7 @@ func advance(elapsed, current float64) error {
return nil
}
func render(target d2render.Surface) error {
func render(target d2interface.Surface) error {
if err := d2screen.Render(target); err != nil {
return err
}
@ -306,7 +305,7 @@ func render(target d2render.Surface) error {
return nil
}
func renderCapture(target d2render.Surface) error {
func renderCapture(target d2interface.Surface) error {
cleanupCapture := func() {
singleton.captureState = captureStateNone
singleton.capturePath = ""
@ -386,7 +385,7 @@ func renderCapture(target d2render.Surface) error {
return nil
}
func renderDebug(target d2render.Surface) error {
func renderDebug(target d2interface.Surface) error {
if singleton.showFPS {
vsyncEnabled := d2render.GetVSyncEnabled()
fps := d2render.CurrentFPS()