mirror of
https://github.com/OpenDiablo2/OpenDiablo2
synced 2025-02-20 07:27:19 -05:00
minor edits (#486)
* adding comments to d2interface for linter * moved d2render renderer interfaces and types into d2interface
This commit is contained in:
parent
9f7f1ae072
commit
55dc3e42ed
@ -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)
|
||||
|
@ -1,4 +1,4 @@
|
||||
package d2render
|
||||
package d2interface
|
||||
|
||||
type CompositeMode int
|
||||
|
2
d2common/d2interface/d2interface.go
Normal file
2
d2common/d2interface/d2interface.go
Normal file
@ -0,0 +1,2 @@
|
||||
// Package d2interface defines interfaces for the OpenDiablo2 engine
|
||||
package d2interface
|
@ -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
|
@ -1,4 +1,4 @@
|
||||
package d2render
|
||||
package d2interface
|
||||
|
||||
// Defines the type of rendering engine to use
|
||||
type RenderType int
|
@ -1,4 +1,4 @@
|
||||
package d2render
|
||||
package d2interface
|
||||
|
||||
type Renderer interface {
|
||||
GetRendererName() string
|
@ -1,5 +1,6 @@
|
||||
package d2interface
|
||||
|
||||
// SoundEffect is something that that the AudioProvider can Play or Stop
|
||||
type SoundEffect interface {
|
||||
Play()
|
||||
Stop()
|
||||
|
@ -1,4 +1,4 @@
|
||||
package d2render
|
||||
package d2interface
|
||||
|
||||
import (
|
||||
"image"
|
@ -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)
|
||||
}
|
||||
|
@ -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
|
||||
}
|
||||
}
|
||||
|
@ -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
|
||||
}
|
||||
|
@ -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)
|
||||
|
||||
|
@ -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])
|
||||
}
|
||||
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
}
|
||||
|
@ -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
|
||||
}
|
||||
|
@ -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()
|
||||
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
}
|
||||
|
||||
|
@ -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
|
||||
}
|
||||
|
||||
|
@ -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),
|
||||
|
@ -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
|
||||
|
@ -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),
|
||||
|
@ -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),
|
||||
|
@ -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),
|
||||
|
@ -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
|
||||
}
|
||||
|
@ -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}
|
||||
|
@ -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)
|
||||
|
||||
|
@ -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)
|
||||
}
|
||||
|
@ -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
|
||||
}
|
||||
|
@ -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 {
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
}
|
||||
|
@ -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)
|
||||
|
||||
|
@ -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 {
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
|
||||
|
@ -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)
|
||||
}
|
||||
|
@ -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
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
}
|
||||
|
@ -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)
|
||||
|
@ -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 {
|
||||
|
@ -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()
|
||||
|
@ -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
|
||||
}
|
||||
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
|
||||
//
|
||||
|
@ -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)
|
||||
}
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
}
|
||||
|
@ -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
|
||||
}
|
||||
|
@ -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
17
main.go
@ -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()
|
||||
|
Loading…
x
Reference in New Issue
Block a user