mirror of
https://github.com/OpenDiablo2/OpenDiablo2
synced 2024-09-18 09:15:59 -04:00
d6769975cd
Add struct to display inventory panel. Add struct to handle inventory and merchant grids. Hook up `i` key to toggle inventory panel.
134 lines
2.6 KiB
Go
134 lines
2.6 KiB
Go
package d2player
|
|
|
|
import (
|
|
"github.com/OpenDiablo2/D2Shared/d2common/d2resource"
|
|
"github.com/OpenDiablo2/OpenDiablo2/d2core"
|
|
"github.com/OpenDiablo2/OpenDiablo2/d2render"
|
|
"github.com/OpenDiablo2/OpenDiablo2/d2render/d2surface"
|
|
)
|
|
|
|
type Inventory struct {
|
|
frame *d2render.Sprite
|
|
panel *d2render.Sprite
|
|
grid *ItemGrid
|
|
originX int
|
|
originY int
|
|
isOpen bool
|
|
}
|
|
|
|
func NewInventory() *Inventory {
|
|
originX := 400
|
|
originY := 0
|
|
return &Inventory{
|
|
grid: NewItemGrid(10, 4, originX+19, originY+320),
|
|
originX: originX,
|
|
originY: originY,
|
|
}
|
|
}
|
|
|
|
func (g *Inventory) IsOpen() bool {
|
|
return g.isOpen
|
|
}
|
|
|
|
func (g *Inventory) Toggle() {
|
|
g.isOpen = !g.isOpen
|
|
}
|
|
|
|
func (g *Inventory) Open() {
|
|
g.isOpen = true
|
|
}
|
|
|
|
func (g *Inventory) Close() {
|
|
g.isOpen = false
|
|
}
|
|
|
|
func (g *Inventory) Load() {
|
|
g.frame, _ = d2render.LoadSprite(d2resource.Frame, d2resource.PaletteSky)
|
|
g.panel, _ = d2render.LoadSprite(d2resource.InventoryCharacterPanel, d2resource.PaletteSky)
|
|
|
|
items := []InventoryItem{
|
|
d2core.GetWeaponItemByCode("wnd"),
|
|
d2core.GetWeaponItemByCode("sst"),
|
|
d2core.GetWeaponItemByCode("jav"),
|
|
d2core.GetArmorItemByCode("buc"),
|
|
d2core.GetWeaponItemByCode("clb"),
|
|
}
|
|
g.grid.Add(items...)
|
|
}
|
|
|
|
func (g *Inventory) Render(target *d2surface.Surface) {
|
|
if !g.isOpen {
|
|
return
|
|
}
|
|
|
|
x, y := g.originX, g.originY
|
|
|
|
// Frame
|
|
// Top left
|
|
g.frame.SetCurrentFrame(5)
|
|
w, h := g.frame.GetCurrentFrameSize()
|
|
g.frame.SetPosition(x, y+h)
|
|
g.frame.Render(target)
|
|
x += w
|
|
|
|
// Top right
|
|
g.frame.SetCurrentFrame(6)
|
|
w, h = g.frame.GetCurrentFrameSize()
|
|
g.frame.SetPosition(x, y+h)
|
|
g.frame.Render(target)
|
|
x += w
|
|
y += h
|
|
|
|
// Right
|
|
g.frame.SetCurrentFrame(7)
|
|
w, h = g.frame.GetCurrentFrameSize()
|
|
g.frame.SetPosition(x-w, y+h)
|
|
g.frame.Render(target)
|
|
y += h
|
|
|
|
// Bottom right
|
|
g.frame.SetCurrentFrame(8)
|
|
w, h = g.frame.GetCurrentFrameSize()
|
|
g.frame.SetPosition(x-w, y+h)
|
|
g.frame.Render(target)
|
|
x -= w
|
|
|
|
// Bottom left
|
|
g.frame.SetCurrentFrame(9)
|
|
w, h = g.frame.GetCurrentFrameSize()
|
|
g.frame.SetPosition(x-w, y+h)
|
|
g.frame.Render(target)
|
|
|
|
x, y = g.originX, g.originY
|
|
y += 64
|
|
|
|
// Panel
|
|
// Top left
|
|
g.panel.SetCurrentFrame(4)
|
|
w, h = g.panel.GetCurrentFrameSize()
|
|
g.panel.SetPosition(x, y+h)
|
|
g.panel.Render(target)
|
|
x += w
|
|
|
|
// Top right
|
|
g.panel.SetCurrentFrame(5)
|
|
w, h = g.panel.GetCurrentFrameSize()
|
|
g.panel.SetPosition(x, y+h)
|
|
g.panel.Render(target)
|
|
y += h
|
|
|
|
// Bottom right
|
|
g.panel.SetCurrentFrame(7)
|
|
w, h = g.panel.GetCurrentFrameSize()
|
|
g.panel.SetPosition(x, y+h)
|
|
g.panel.Render(target)
|
|
|
|
// Bottom left
|
|
g.panel.SetCurrentFrame(6)
|
|
w, h = g.panel.GetCurrentFrameSize()
|
|
g.panel.SetPosition(x-w, y+h)
|
|
g.panel.Render(target)
|
|
|
|
g.grid.Render(target)
|
|
}
|