1
1
mirror of https://github.com/OpenDiablo2/OpenDiablo2 synced 2024-09-27 13:46:00 -04:00

Checkboxes! (#136)

And add them to the hero class scene.
This commit is contained in:
Ziemas 2019-11-10 23:17:42 +01:00 committed by Tim Sarbin
parent 5d5009208b
commit d4d3fdfad3
3 changed files with 154 additions and 17 deletions

View File

@ -118,6 +118,7 @@ const (
ShortButtonBlank = "/data/global/ui/CharSelect/ShortButtonBlank.dc6" ShortButtonBlank = "/data/global/ui/CharSelect/ShortButtonBlank.dc6"
TextBox2 = "/data/global/ui/FrontEnd/textbox2.dc6" TextBox2 = "/data/global/ui/FrontEnd/textbox2.dc6"
TallButtonBlank = "/data/global/ui/CharSelect/TallButtonBlank.dc6" TallButtonBlank = "/data/global/ui/CharSelect/TallButtonBlank.dc6"
Checkbox = "/data/global/ui/FrontEnd/clickbox.dc6"
// --- GAME UI --- // --- GAME UI ---

View File

@ -36,23 +36,27 @@ type HeroRenderInfo struct {
} }
type SelectHeroClass struct { type SelectHeroClass struct {
uiManager *d2ui.Manager uiManager *d2ui.Manager
soundManager *d2audio.Manager soundManager *d2audio.Manager
fileProvider d2interface.FileProvider fileProvider d2interface.FileProvider
sceneProvider d2interface.SceneProvider sceneProvider d2interface.SceneProvider
bgImage d2render.Sprite bgImage d2render.Sprite
campfire d2render.Sprite campfire d2render.Sprite
headingLabel d2ui.Label headingLabel d2ui.Label
heroClassLabel d2ui.Label heroClassLabel d2ui.Label
heroDesc1Label d2ui.Label heroDesc1Label d2ui.Label
heroDesc2Label d2ui.Label heroDesc2Label d2ui.Label
heroDesc3Label d2ui.Label heroDesc3Label d2ui.Label
heroNameTextbox d2ui.TextBox heroNameTextbox d2ui.TextBox
heroNameLabel d2ui.Label heroNameLabel d2ui.Label
heroRenderInfo map[d2enum.Hero]*HeroRenderInfo heroRenderInfo map[d2enum.Hero]*HeroRenderInfo
selectedHero d2enum.Hero selectedHero d2enum.Hero
exitButton d2ui.Button exitButton d2ui.Button
okButton d2ui.Button okButton d2ui.Button
expansionCheckbox d2ui.Checkbox
expansionCharLabel d2ui.Label
hardcoreCheckbox d2ui.Checkbox
hardcoreCharLabel d2ui.Label
} }
func CreateSelectHeroClass( func CreateSelectHeroClass(
@ -142,6 +146,32 @@ func (v *SelectHeroClass) Load() []func() {
v.heroNameTextbox.SetVisible(false) v.heroNameTextbox.SetVisible(false)
v.uiManager.AddWidget(&v.heroNameTextbox) v.uiManager.AddWidget(&v.heroNameTextbox)
}, },
func() {
v.expansionCheckbox = d2ui.CreateCheckbox(v.fileProvider, true)
v.expansionCheckbox.MoveTo(318, 526)
v.expansionCheckbox.SetVisible(false)
v.uiManager.AddWidget(&v.expansionCheckbox)
},
func() {
v.expansionCharLabel = d2ui.CreateLabel(v.fileProvider, d2resource.Font16, d2enum.Units)
v.expansionCharLabel.Alignment = d2ui.LabelAlignLeft
v.expansionCharLabel.Color = color.RGBA{216, 196, 128, 255}
v.expansionCharLabel.SetText(d2common.TranslateString("#803"))
v.expansionCharLabel.MoveTo(339, 526)
},
func() {
v.hardcoreCheckbox = d2ui.CreateCheckbox(v.fileProvider, false)
v.hardcoreCheckbox.MoveTo(318, 548)
v.hardcoreCheckbox.SetVisible(false)
v.uiManager.AddWidget(&v.hardcoreCheckbox)
},
func() {
v.hardcoreCharLabel = d2ui.CreateLabel(v.fileProvider, d2resource.Font16, d2enum.Units)
v.hardcoreCharLabel.Alignment = d2ui.LabelAlignLeft
v.hardcoreCharLabel.Color = color.RGBA{216, 196, 128, 255}
v.hardcoreCharLabel.SetText(d2common.TranslateString("#1696"))
v.hardcoreCharLabel.MoveTo(339, 548)
},
func() { func() {
v.heroRenderInfo[d2enum.HeroBarbarian] = &HeroRenderInfo{ v.heroRenderInfo[d2enum.HeroBarbarian] = &HeroRenderInfo{
d2enum.HeroStanceIdle, d2enum.HeroStanceIdle,
@ -423,6 +453,8 @@ func (v *SelectHeroClass) Render(screen *ebiten.Image) {
v.campfire.Draw(screen) v.campfire.Draw(screen)
if v.heroNameTextbox.GetVisible() { if v.heroNameTextbox.GetVisible() {
v.heroNameLabel.Draw(screen) v.heroNameLabel.Draw(screen)
v.expansionCharLabel.Draw(screen)
v.hardcoreCharLabel.Draw(screen)
} }
} }
@ -480,6 +512,8 @@ func (v *SelectHeroClass) updateHeroSelectionHover(hero d2enum.Hero, canSelect b
if mouseHover && v.uiManager.CursorButtonPressed(d2ui.CursorButtonLeft) { if mouseHover && v.uiManager.CursorButtonPressed(d2ui.CursorButtonLeft) {
v.heroNameTextbox.SetVisible(true) v.heroNameTextbox.SetVisible(true)
v.okButton.SetVisible(true) v.okButton.SetVisible(true)
v.expansionCheckbox.SetVisible(true)
v.hardcoreCheckbox.SetVisible(true)
renderInfo.Stance = d2enum.HeroStanceApproaching renderInfo.Stance = d2enum.HeroStanceApproaching
renderInfo.ForwardWalkSprite.ResetAnimation() renderInfo.ForwardWalkSprite.ResetAnimation()
if renderInfo.ForwardWalkSpriteOverlay.IsValid() { if renderInfo.ForwardWalkSpriteOverlay.IsValid() {

102
d2render/d2ui/Checkbox.go Normal file
View File

@ -0,0 +1,102 @@
package d2ui
import (
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2enum"
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2interface"
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2resource"
"github.com/OpenDiablo2/OpenDiablo2/d2data/d2datadict"
"github.com/OpenDiablo2/OpenDiablo2/d2render"
"github.com/hajimehoshi/ebiten"
)
type Checkbox struct {
x, y int
pressed bool
visible bool
width, height uint32
Image *ebiten.Image
checkedImage *ebiten.Image
onClick func()
enabled bool
}
func CreateCheckbox(fileProvider d2interface.FileProvider, toggleState bool) Checkbox {
result := Checkbox{
pressed: toggleState,
visible: true,
width: 0,
height: 0,
enabled: true,
}
checkboxSprite := d2render.CreateSprite(fileProvider.LoadFile(d2resource.Checkbox), d2datadict.Palettes[d2enum.Fechar])
result.width, result.height = checkboxSprite.GetFrameSize(0)
checkboxSprite.MoveTo(0, 0)
result.Image, _ = ebiten.NewImage(int(result.width), int(result.height), ebiten.FilterNearest)
checkboxSprite.DrawSegments(result.Image, 1, 1, 0)
result.checkedImage, _ = ebiten.NewImage(int(result.width), int(result.height), ebiten.FilterNearest)
checkboxSprite.DrawSegments(result.checkedImage, 1, 1, 1)
return result
}
func (v Checkbox) Draw(target *ebiten.Image) {
opts := &ebiten.DrawImageOptions{
CompositeMode: ebiten.CompositeModeSourceAtop,
Filter: ebiten.FilterNearest,
}
opts.GeoM.Translate(float64(v.x), float64(v.y))
if v.pressed == false {
target.DrawImage(v.Image, opts)
} else {
target.DrawImage(v.checkedImage, opts)
}
}
func (v Checkbox) GetEnabled() bool {
return v.enabled
}
func (v *Checkbox) SetEnabled(enabled bool) {
v.enabled = enabled
}
func (v *Checkbox) SetPressed(pressed bool) {
v.pressed = pressed
}
func (v Checkbox) GetPressed() bool {
return v.pressed
}
func (v *Checkbox) OnActivated(callback func()) {
v.onClick = callback
}
func (v *Checkbox) Activate() {
v.pressed = !v.pressed
if v.onClick == nil {
return
}
v.onClick()
}
func (v Checkbox) GetLocation() (int, int) {
return v.x, v.y
}
func (v Checkbox) GetSize() (uint32, uint32) {
return v.width, v.height
}
func (v Checkbox) GetVisible() bool {
return v.visible
}
func (v *Checkbox) MoveTo(x int, y int) {
v.x = x
v.y = y
}
func (v *Checkbox) SetVisible(visible bool) {
v.visible = visible
}