mirror of
https://github.com/OpenDiablo2/OpenDiablo2
synced 2024-09-28 14:16:01 -04:00
parent
5d5009208b
commit
d4d3fdfad3
@ -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 ---
|
||||||
|
|
||||||
|
@ -53,6 +53,10 @@ type SelectHeroClass struct {
|
|||||||
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
102
d2render/d2ui/Checkbox.go
Normal 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
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user