1
1
mirror of https://github.com/OpenDiablo2/OpenDiablo2 synced 2024-06-26 09:05:24 +00:00
OpenDiablo2/d2game/d2player/skillicon.go
juander 622bc832d3 d2player/skilltree: Move every element to widgets
the uiManager now handles every element of the ui, so we don't need to
render elements manually in game_controls. Now we can also use
widget_groups to simplify handling the opening/closing of the panel.
2020-11-09 18:26:34 +01:00

100 lines
2.1 KiB
Go

package d2player
import (
"strconv"
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2interface"
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2resource"
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2hero"
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2ui"
)
const (
skillLabelXOffset = 49
skillLabelYOffset = -4
skillIconXOff = 346
skillIconYOff = 59
skillIconDistX = 69
skillIconDistY = 68
)
type skillIcon struct {
*d2ui.BaseWidget
lvlLabel *d2ui.Label
sprite *d2ui.Sprite
skill *d2hero.HeroSkill
}
func newSkillIcon(ui *d2ui.UIManager, baseSprite *d2ui.Sprite, skill *d2hero.HeroSkill) *skillIcon {
base := d2ui.NewBaseWidget(ui)
label := ui.NewLabel(d2resource.Font16, d2resource.PaletteSky)
x := skillIconXOff + skill.SkillColumn*skillIconDistX
y := skillIconYOff + skill.SkillRow*skillIconDistY
res := &skillIcon{
BaseWidget: base,
sprite: baseSprite,
skill: skill,
lvlLabel: label,
}
res.SetPosition(x, y)
return res
}
func (si *skillIcon) SetVisible(visible bool) {
si.BaseWidget.SetVisible(visible)
si.lvlLabel.SetVisible(visible)
}
func (si *skillIcon) renderSprite(target d2interface.Surface) error {
x, y := si.GetPosition()
if err := si.sprite.SetCurrentFrame(si.skill.IconCel); err != nil {
return err
}
if si.skill.SkillPoints == 0 {
target.PushSaturation(skillIconGreySat)
defer target.Pop()
target.PushBrightness(skillIconGreyBright)
defer target.Pop()
}
si.sprite.SetPosition(x, y)
if err := si.sprite.Render(target); err != nil {
return err
}
return nil
}
func (si *skillIcon) renderSpriteLabel(target d2interface.Surface) error {
if si.skill.SkillPoints == 0 {
return nil
}
x, y := si.GetPosition()
si.lvlLabel.SetText(strconv.Itoa(si.skill.SkillPoints))
si.lvlLabel.SetPosition(x+skillLabelXOffset, y+skillLabelYOffset)
return si.lvlLabel.Render(target)
}
func (si *skillIcon) Render(target d2interface.Surface) error {
if err := si.renderSprite(target); err != nil {
return err
}
return si.renderSpriteLabel(target)
}
func (si *skillIcon) Advance(elapsed float64) error {
return nil
}