mirror of
https://github.com/OpenDiablo2/OpenDiablo2
synced 2024-06-12 02:30:43 +00:00
D2datadict unique items bugfix (#669)
* d2ui.Label: add support for color tokens in labels, multiple colors per label * unique items should use the item name as the map key
This commit is contained in:
parent
6a8b9aada1
commit
524132c122
|
@ -135,7 +135,7 @@ func LoadUniqueItems(file []byte) {
|
||||||
}
|
}
|
||||||
|
|
||||||
rec := createUniqueItemRecord(r)
|
rec := createUniqueItemRecord(r)
|
||||||
UniqueItems[rec.Code] = &rec
|
UniqueItems[rec.Name] = &rec
|
||||||
}
|
}
|
||||||
|
|
||||||
log.Printf("Loaded %d unique items", len(UniqueItems))
|
log.Printf("Loaded %d unique items", len(UniqueItems))
|
||||||
|
|
|
@ -11,7 +11,7 @@ type MapEntity interface {
|
||||||
GetSize() (width, height int)
|
GetSize() (width, height int)
|
||||||
GetLayer() int
|
GetLayer() int
|
||||||
GetPositionF() (float64, float64)
|
GetPositionF() (float64, float64)
|
||||||
Name() string
|
Label() string
|
||||||
Selectable() bool
|
Selectable() bool
|
||||||
Highlight()
|
Highlight()
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,7 +31,6 @@ const (
|
||||||
propertyIndestructable = "indestruct"
|
propertyIndestructable = "indestruct"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
const (
|
const (
|
||||||
magicItemPrefixMax = 1
|
magicItemPrefixMax = 1
|
||||||
magicItemSuffixMax = 1
|
magicItemSuffixMax = 1
|
||||||
|
@ -95,6 +94,8 @@ type itemAttributes struct {
|
||||||
requiredDexterity int
|
requiredDexterity int
|
||||||
classSpecific d2enum.Hero
|
classSpecific d2enum.Hero
|
||||||
|
|
||||||
|
identitified bool
|
||||||
|
crafted bool
|
||||||
durable bool // some items specify that they have no durability
|
durable bool // some items specify that they have no durability
|
||||||
indestructable bool
|
indestructable bool
|
||||||
ethereal bool
|
ethereal bool
|
||||||
|
@ -107,9 +108,39 @@ type minMaxEnhanceable struct {
|
||||||
enhance int
|
enhance int
|
||||||
}
|
}
|
||||||
|
|
||||||
// Name returns the item name
|
// Label returns the item name
|
||||||
func (i *Item) Name() string {
|
func (i *Item) Label() string {
|
||||||
return i.name
|
str := i.name
|
||||||
|
|
||||||
|
if i.attributes.crafted {
|
||||||
|
return d2ui.ColorTokenize(str, d2ui.ColorTokenCraftedItem)
|
||||||
|
}
|
||||||
|
|
||||||
|
if i.SetItemRecord() != nil {
|
||||||
|
return d2ui.ColorTokenize(str, d2ui.ColorTokenSetItem)
|
||||||
|
}
|
||||||
|
|
||||||
|
if i.UniqueRecord() != nil {
|
||||||
|
return d2ui.ColorTokenize(str, d2ui.ColorTokenUniqueItem)
|
||||||
|
}
|
||||||
|
|
||||||
|
numAffixes := len(i.PrefixRecords()) + len(i.SuffixRecords())
|
||||||
|
|
||||||
|
if numAffixes > 0 && numAffixes < 3 {
|
||||||
|
return d2ui.ColorTokenize(str, d2ui.ColorTokenMagicItem)
|
||||||
|
}
|
||||||
|
|
||||||
|
if numAffixes > 2 {
|
||||||
|
return d2ui.ColorTokenize(str, d2ui.ColorTokenRareItem)
|
||||||
|
}
|
||||||
|
|
||||||
|
if i.sockets != nil {
|
||||||
|
if len(i.sockets) > 0 {
|
||||||
|
return d2ui.ColorTokenize(str, d2ui.ColorTokenSocketedItem)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return d2ui.ColorTokenize(str, d2ui.ColorTokenNormalItem)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Context returns the statContext that is being used to evaluate stats. for example,
|
// Context returns the statContext that is being used to evaluate stats. for example,
|
||||||
|
@ -188,7 +219,6 @@ func affixRecords(
|
||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// SlotType returns the slot type (where it can be equipped)
|
// SlotType returns the slot type (where it can be equipped)
|
||||||
func (i *Item) SlotType() d2enum.EquippedSlot {
|
func (i *Item) SlotType() d2enum.EquippedSlot {
|
||||||
return i.slotType
|
return i.slotType
|
||||||
|
@ -358,7 +388,7 @@ func (i *Item) init() *Item {
|
||||||
if i.rand == nil {
|
if i.rand == nil {
|
||||||
i.SetSeed(0)
|
i.SetSeed(0)
|
||||||
}
|
}
|
||||||
|
|
||||||
i.generateAllProperties()
|
i.generateAllProperties()
|
||||||
i.updateItemAttributes()
|
i.updateItemAttributes()
|
||||||
return i
|
return i
|
||||||
|
@ -471,7 +501,7 @@ func (i *Item) updateItemAttributes() {
|
||||||
}
|
}
|
||||||
|
|
||||||
def, minDef, maxDef := 0, r.MinAC, r.MaxAC
|
def, minDef, maxDef := 0, r.MinAC, r.MaxAC
|
||||||
|
|
||||||
if maxDef < minDef {
|
if maxDef < minDef {
|
||||||
minDef, maxDef = maxDef, minDef
|
minDef, maxDef = maxDef, minDef
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,6 +6,6 @@ type Item interface {
|
||||||
Context() StatContext
|
Context() StatContext
|
||||||
SetContext(StatContext)
|
SetContext(StatContext)
|
||||||
|
|
||||||
Name() string
|
Label() string
|
||||||
Description() string
|
Description() string
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,10 +1,14 @@
|
||||||
package d2mapentity
|
package d2mapentity
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2interface"
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2math/d2vector"
|
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2math/d2vector"
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2item/diablo2item"
|
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2item/diablo2item"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// static check that item implements map entity interface
|
||||||
|
var _ d2interface.MapEntity = &Item{}
|
||||||
|
|
||||||
const (
|
const (
|
||||||
errInvalidItemCodes = "invalid item codes supplied"
|
errInvalidItemCodes = "invalid item codes supplied"
|
||||||
)
|
)
|
||||||
|
@ -36,8 +40,8 @@ func (i *Item) Highlight() {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Name returns the item name
|
// Name returns the item name
|
||||||
func (i *Item) Name() string {
|
func (i *Item) Label() string {
|
||||||
return i.Item.Name()
|
return i.Item.Label()
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetSize returns the current frame size
|
// GetSize returns the current frame size
|
||||||
|
|
|
@ -196,8 +196,8 @@ func (m *mapEntity) GetPositionF() (x, y float64) {
|
||||||
return w.X(), w.Y()
|
return w.X(), w.Y()
|
||||||
}
|
}
|
||||||
|
|
||||||
// Name returns the NPC's in-game name (e.g. "Deckard Cain") or an empty string if it does not have a name
|
// Label returns the NPC's in-game name (e.g. "Deckard Cain") or an empty string if it does not have a name
|
||||||
func (m *mapEntity) Name() string {
|
func (m *mapEntity) Label() string {
|
||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -161,8 +161,8 @@ func (v *NPC) Selectable() bool {
|
||||||
return v.name != ""
|
return v.name != ""
|
||||||
}
|
}
|
||||||
|
|
||||||
// Name returns the NPC's in-game name (e.g. "Deckard Cain") or an empty string if it does not have a name.
|
// Label returns the NPC's in-game name (e.g. "Deckard Cain") or an empty string if it does not have a name.
|
||||||
func (v *NPC) Name() string {
|
func (v *NPC) Label() string {
|
||||||
return v.name
|
return v.name
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -128,8 +128,8 @@ func (ob *Object) GetPositionF() (x, y float64) {
|
||||||
return w.X(), w.Y()
|
return w.X(), w.Y()
|
||||||
}
|
}
|
||||||
|
|
||||||
// Name gets the name of the object
|
// Label gets the name of the object
|
||||||
func (ob *Object) Name() string {
|
func (ob *Object) Label() string {
|
||||||
return ob.name
|
return ob.name
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -112,8 +112,10 @@ func CreateButton(renderer d2interface.Renderer, buttonType ButtonType, text str
|
||||||
buttonLayout := getButtonLayouts()[buttonType]
|
buttonLayout := getButtonLayouts()[buttonType]
|
||||||
result.buttonLayout = buttonLayout
|
result.buttonLayout = buttonLayout
|
||||||
lbl := CreateLabel(buttonLayout.FontPath, d2resource.PaletteUnits)
|
lbl := CreateLabel(buttonLayout.FontPath, d2resource.PaletteUnits)
|
||||||
|
|
||||||
|
|
||||||
lbl.SetText(text)
|
lbl.SetText(text)
|
||||||
lbl.Color = color.RGBA{R: 100, G: 100, B: 100, A: 255}
|
lbl.Color[0] = color.RGBA{R: 100, G: 100, B: 100, A: 255}
|
||||||
lbl.Alignment = d2gui.HorizontalAlignCenter
|
lbl.Alignment = d2gui.HorizontalAlignCenter
|
||||||
|
|
||||||
animation, _ := d2asset.LoadAnimation(buttonLayout.ResourceName, buttonLayout.PaletteName)
|
animation, _ := d2asset.LoadAnimation(buttonLayout.ResourceName, buttonLayout.PaletteName)
|
||||||
|
|
|
@ -1,15 +1,64 @@
|
||||||
package d2ui
|
package d2ui
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
|
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2interface"
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2asset"
|
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2asset"
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2gui"
|
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2gui"
|
||||||
"image/color"
|
"image/color"
|
||||||
"log"
|
"log"
|
||||||
|
"regexp"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2interface"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// ColorToken is a string which is used inside of label strings to set font color.
|
||||||
|
type ColorToken string
|
||||||
|
|
||||||
|
const (
|
||||||
|
colorTokenFmt = `%s%s`
|
||||||
|
colorTokenMatch = `\[[^\]]+\]`
|
||||||
|
colorStrMatch = colorTokenMatch + `[^\[]+`
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
ColorTokenGrey ColorToken = "[grey]"
|
||||||
|
ColorTokenRed ColorToken = "[red]"
|
||||||
|
ColorTokenWhite ColorToken = "[white]"
|
||||||
|
ColorTokenBlue ColorToken = "[blue]"
|
||||||
|
ColorTokenYellow ColorToken = "[yellow]"
|
||||||
|
ColorTokenGreen ColorToken = "[green]"
|
||||||
|
ColorTokenGold ColorToken = "[gold]"
|
||||||
|
ColorTokenOrange ColorToken = "[orange]"
|
||||||
|
ColorTokenBlack ColorToken = "[black]"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Color tokens for item labels
|
||||||
|
const (
|
||||||
|
ColorTokenSocketedItem = ColorTokenGrey
|
||||||
|
ColorTokenNormalItem = ColorTokenWhite
|
||||||
|
ColorTokenMagicItem = ColorTokenBlue
|
||||||
|
ColorTokenRareItem = ColorTokenYellow
|
||||||
|
ColorTokenSetItem = ColorTokenGreen
|
||||||
|
ColorTokenUniqueItem = ColorTokenGold
|
||||||
|
ColorTokenCraftedItem = ColorTokenOrange
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
ColorTokenServer = ColorTokenRed
|
||||||
|
ColorTokenButton = ColorTokenBlack
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
ColorTokenCharacterName = ColorTokenGold
|
||||||
|
ColorTokenCharacterDesc = ColorTokenWhite
|
||||||
|
ColorTokenCharacterType = ColorTokenGreen
|
||||||
|
)
|
||||||
|
|
||||||
|
// ColorTokenize formats the string with the given color token
|
||||||
|
func ColorTokenize(s string, t ColorToken) string {
|
||||||
|
return fmt.Sprintf(colorTokenFmt, t, s)
|
||||||
|
}
|
||||||
|
|
||||||
// Label represents a user interface label
|
// Label represents a user interface label
|
||||||
type Label struct {
|
type Label struct {
|
||||||
text string
|
text string
|
||||||
|
@ -17,7 +66,7 @@ type Label struct {
|
||||||
Y int
|
Y int
|
||||||
Alignment d2gui.HorizontalAlign
|
Alignment d2gui.HorizontalAlign
|
||||||
font d2interface.Font
|
font d2interface.Font
|
||||||
Color color.Color
|
Color map[int]color.Color
|
||||||
}
|
}
|
||||||
|
|
||||||
// CreateLabel creates a new instance of a UI label
|
// CreateLabel creates a new instance of a UI label
|
||||||
|
@ -25,26 +74,44 @@ func CreateLabel(fontPath, palettePath string) Label {
|
||||||
font, _ := d2asset.LoadFont(fontPath+".tbl", fontPath+".dc6", palettePath)
|
font, _ := d2asset.LoadFont(fontPath+".tbl", fontPath+".dc6", palettePath)
|
||||||
result := Label{
|
result := Label{
|
||||||
Alignment: d2gui.HorizontalAlignLeft,
|
Alignment: d2gui.HorizontalAlignLeft,
|
||||||
Color: color.White,
|
Color: map[int]color.Color{0: color.White},
|
||||||
font: font,
|
font: font,
|
||||||
}
|
}
|
||||||
|
|
||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
// Render draws the label on the screen, respliting the lines to allow for other alignments
|
// Render draws the label on the screen, respliting the lines to allow for other alignments.
|
||||||
func (v *Label) Render(target d2interface.Surface) {
|
func (v *Label) Render(target d2interface.Surface) {
|
||||||
v.font.SetColor(v.Color)
|
|
||||||
target.PushTranslation(v.X, v.Y)
|
target.PushTranslation(v.X, v.Y)
|
||||||
|
|
||||||
lines := strings.Split(v.text, "\n")
|
lines := strings.Split(v.text, "\n")
|
||||||
yOffset := 0
|
yOffset := 0
|
||||||
|
|
||||||
|
lastColor := v.Color[0]
|
||||||
|
v.font.SetColor(lastColor)
|
||||||
|
|
||||||
for _, line := range lines {
|
for _, line := range lines {
|
||||||
lw, lh := v.GetTextMetrics(line)
|
lw, lh := v.GetTextMetrics(line)
|
||||||
|
characters := []rune(line)
|
||||||
|
|
||||||
target.PushTranslation(v.getAlignOffset(lw), yOffset)
|
target.PushTranslation(v.getAlignOffset(lw), yOffset)
|
||||||
|
|
||||||
_ = v.font.RenderText(line, target)
|
for idx := range characters {
|
||||||
|
character := string(characters[idx])
|
||||||
|
charWidth, _ := v.GetTextMetrics(character)
|
||||||
|
|
||||||
|
if v.Color[idx] != nil {
|
||||||
|
lastColor = v.Color[idx]
|
||||||
|
v.font.SetColor(lastColor)
|
||||||
|
}
|
||||||
|
|
||||||
|
_ = v.font.RenderText(character, target)
|
||||||
|
|
||||||
|
target.PushTranslation(charWidth, 0)
|
||||||
|
}
|
||||||
|
|
||||||
|
target.PopN(len(characters))
|
||||||
|
|
||||||
yOffset += lh
|
yOffset += lh
|
||||||
|
|
||||||
|
@ -72,7 +139,43 @@ func (v *Label) GetTextMetrics(text string) (width, height int) {
|
||||||
|
|
||||||
// SetText sets the label's text
|
// SetText sets the label's text
|
||||||
func (v *Label) SetText(newText string) {
|
func (v *Label) SetText(newText string) {
|
||||||
v.text = newText
|
v.text = v.processColorTokens(newText)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (v *Label) processColorTokens(str string) string {
|
||||||
|
tokenMatch := regexp.MustCompile(colorTokenMatch)
|
||||||
|
tokenStrMatch := regexp.MustCompile(colorStrMatch)
|
||||||
|
empty := []byte("")
|
||||||
|
|
||||||
|
tokenPosition := 0
|
||||||
|
|
||||||
|
withoutTokens := string(tokenMatch.ReplaceAll([]byte(str), empty)) // remove tokens from string
|
||||||
|
|
||||||
|
matches := tokenStrMatch.FindAll([]byte(str), -1)
|
||||||
|
|
||||||
|
if len(matches) == 0 {
|
||||||
|
v.Color[0] = getColor(ColorTokenWhite)
|
||||||
|
}
|
||||||
|
|
||||||
|
// we find the index of each token and update the color map.
|
||||||
|
// the key in the map is the starting index of each color token, the value is the color
|
||||||
|
for idx := range matches {
|
||||||
|
match := matches[idx]
|
||||||
|
matchToken := tokenMatch.Find(match)
|
||||||
|
matchStr := string(tokenMatch.ReplaceAll(match, empty))
|
||||||
|
token := ColorToken(matchToken)
|
||||||
|
theColor := getColor(token)
|
||||||
|
|
||||||
|
if v.Color == nil {
|
||||||
|
v.Color = make(map[int]color.Color)
|
||||||
|
}
|
||||||
|
|
||||||
|
v.Color[tokenPosition] = theColor
|
||||||
|
|
||||||
|
tokenPosition += len(matchStr)
|
||||||
|
}
|
||||||
|
|
||||||
|
return withoutTokens
|
||||||
}
|
}
|
||||||
|
|
||||||
func (v *Label) getAlignOffset(textWidth int) int {
|
func (v *Label) getAlignOffset(textWidth int) int {
|
||||||
|
@ -88,3 +191,28 @@ func (v *Label) getAlignOffset(textWidth int) int {
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func getColor(token ColorToken) color.Color {
|
||||||
|
alpha := uint8(255)
|
||||||
|
|
||||||
|
// todo this should really come from the PL2 files
|
||||||
|
colors := map[ColorToken]color.Color{
|
||||||
|
ColorTokenGrey: color.RGBA{105, 105, 105, alpha},
|
||||||
|
ColorTokenWhite: color.RGBA{255, 255, 255, alpha},
|
||||||
|
ColorTokenBlue: color.RGBA{105, 105, 255, alpha},
|
||||||
|
ColorTokenYellow: color.RGBA{255, 255, 100, alpha},
|
||||||
|
ColorTokenGreen: color.RGBA{0, 255, 0, alpha},
|
||||||
|
ColorTokenGold: color.RGBA{199, 179, 119, alpha},
|
||||||
|
ColorTokenOrange: color.RGBA{255, 168, 0, alpha},
|
||||||
|
ColorTokenRed: color.RGBA{255, 77, 77, alpha},
|
||||||
|
ColorTokenBlack: color.RGBA{0, 0, 0, alpha},
|
||||||
|
}
|
||||||
|
|
||||||
|
chosen := colors[token]
|
||||||
|
|
||||||
|
if chosen == nil {
|
||||||
|
return colors[ColorTokenWhite]
|
||||||
|
}
|
||||||
|
|
||||||
|
return chosen
|
||||||
|
}
|
||||||
|
|
|
@ -175,8 +175,8 @@ func (v *CharacterSelect) OnLoad(loading d2screen.LoadingState) {
|
||||||
}
|
}
|
||||||
|
|
||||||
v.characterNameLabel[i] = d2ui.CreateLabel(d2resource.Font16, d2resource.PaletteUnits)
|
v.characterNameLabel[i] = d2ui.CreateLabel(d2resource.Font16, d2resource.PaletteUnits)
|
||||||
v.characterNameLabel[i].Color = rgbaColor(lightBrown)
|
|
||||||
v.characterNameLabel[i].SetPosition(offsetX, offsetY)
|
v.characterNameLabel[i].SetPosition(offsetX, offsetY)
|
||||||
|
v.characterNameLabel[i].Color[0] = rgbaColor(lightBrown)
|
||||||
|
|
||||||
offsetY += labelHeight
|
offsetY += labelHeight
|
||||||
v.characterStatsLabel[i] = d2ui.CreateLabel(d2resource.Font16, d2resource.PaletteUnits)
|
v.characterStatsLabel[i] = d2ui.CreateLabel(d2resource.Font16, d2resource.PaletteUnits)
|
||||||
|
@ -184,8 +184,8 @@ func (v *CharacterSelect) OnLoad(loading d2screen.LoadingState) {
|
||||||
|
|
||||||
offsetY += labelHeight
|
offsetY += labelHeight
|
||||||
v.characterExpLabel[i] = d2ui.CreateLabel(d2resource.Font16, d2resource.PaletteStatic)
|
v.characterExpLabel[i] = d2ui.CreateLabel(d2resource.Font16, d2resource.PaletteStatic)
|
||||||
v.characterExpLabel[i].Color = rgbaColor(lightGreen)
|
|
||||||
v.characterExpLabel[i].SetPosition(offsetX, offsetY)
|
v.characterExpLabel[i].SetPosition(offsetX, offsetY)
|
||||||
|
v.characterExpLabel[i].Color[0] = rgbaColor(lightGreen)
|
||||||
}
|
}
|
||||||
v.refreshGameStates()
|
v.refreshGameStates()
|
||||||
}
|
}
|
||||||
|
@ -289,9 +289,12 @@ func (v *CharacterSelect) updateCharacterBoxes() {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
v.characterNameLabel[i].SetText(v.gameStates[idx].HeroName)
|
heroName := v.gameStates[idx].HeroName
|
||||||
v.characterStatsLabel[i].SetText("Level 1 " + v.gameStates[idx].HeroType.String())
|
heroInfo := "Level 1 " + v.gameStates[idx].HeroType.String()
|
||||||
v.characterExpLabel[i].SetText(expText)
|
|
||||||
|
v.characterNameLabel[i].SetText(d2ui.ColorTokenize(heroName, d2ui.ColorTokenGold))
|
||||||
|
v.characterStatsLabel[i].SetText(d2ui.ColorTokenize(heroInfo, d2ui.ColorTokenWhite))
|
||||||
|
v.characterExpLabel[i].SetText(d2ui.ColorTokenize(expText, d2ui.ColorTokenGreen))
|
||||||
|
|
||||||
heroType := v.gameStates[idx].HeroType
|
heroType := v.gameStates[idx].HeroType
|
||||||
equipment := d2inventory.HeroObjects[heroType]
|
equipment := d2inventory.HeroObjects[heroType]
|
||||||
|
|
|
@ -258,9 +258,9 @@ func (v *Credits) getNewFontLabel(isHeading bool) *d2ui.Label {
|
||||||
if label.Available {
|
if label.Available {
|
||||||
label.Available = false
|
label.Available = false
|
||||||
if isHeading {
|
if isHeading {
|
||||||
label.Label.Color = rgbaColor(lightRed)
|
label.Label.Color[0] = rgbaColor(lightRed)
|
||||||
} else {
|
} else {
|
||||||
label.Label.Color = rgbaColor(beige)
|
label.Label.Color[0] = rgbaColor(beige)
|
||||||
}
|
}
|
||||||
|
|
||||||
return &label.Label
|
return &label.Label
|
||||||
|
@ -274,9 +274,9 @@ func (v *Credits) getNewFontLabel(isHeading bool) *d2ui.Label {
|
||||||
}
|
}
|
||||||
|
|
||||||
if isHeading {
|
if isHeading {
|
||||||
newLabelItem.Label.Color = rgbaColor(lightRed)
|
newLabelItem.Label.Color[0] = rgbaColor(lightRed)
|
||||||
} else {
|
} else {
|
||||||
newLabelItem.Label.Color = rgbaColor(beige)
|
newLabelItem.Label.Color[0] = rgbaColor(beige)
|
||||||
}
|
}
|
||||||
|
|
||||||
v.labels = append(v.labels, newLabelItem)
|
v.labels = append(v.labels, newLabelItem)
|
||||||
|
|
|
@ -188,32 +188,32 @@ func (v *MainMenu) createLabels(loading d2screen.LoadingState) {
|
||||||
v.versionLabel = d2ui.CreateLabel(d2resource.FontFormal12, d2resource.PaletteStatic)
|
v.versionLabel = d2ui.CreateLabel(d2resource.FontFormal12, d2resource.PaletteStatic)
|
||||||
v.versionLabel.Alignment = d2gui.HorizontalAlignRight
|
v.versionLabel.Alignment = d2gui.HorizontalAlignRight
|
||||||
v.versionLabel.SetText("OpenDiablo2 - " + v.buildInfo.Branch)
|
v.versionLabel.SetText("OpenDiablo2 - " + v.buildInfo.Branch)
|
||||||
v.versionLabel.Color = rgbaColor(white)
|
v.versionLabel.Color[0] = rgbaColor(white)
|
||||||
v.versionLabel.SetPosition(versionLabelX, versionLabelY)
|
v.versionLabel.SetPosition(versionLabelX, versionLabelY)
|
||||||
|
|
||||||
v.commitLabel = d2ui.CreateLabel(d2resource.FontFormal10, d2resource.PaletteStatic)
|
v.commitLabel = d2ui.CreateLabel(d2resource.FontFormal10, d2resource.PaletteStatic)
|
||||||
v.commitLabel.Alignment = d2gui.HorizontalAlignLeft
|
v.commitLabel.Alignment = d2gui.HorizontalAlignLeft
|
||||||
v.commitLabel.SetText(v.buildInfo.Commit)
|
v.commitLabel.SetText(v.buildInfo.Commit)
|
||||||
v.commitLabel.Color = rgbaColor(white)
|
v.commitLabel.Color[0] = rgbaColor(white)
|
||||||
v.commitLabel.SetPosition(commitLabelX, commitLabelY)
|
v.commitLabel.SetPosition(commitLabelX, commitLabelY)
|
||||||
|
|
||||||
v.copyrightLabel = d2ui.CreateLabel(d2resource.FontFormal12, d2resource.PaletteStatic)
|
v.copyrightLabel = d2ui.CreateLabel(d2resource.FontFormal12, d2resource.PaletteStatic)
|
||||||
v.copyrightLabel.Alignment = d2gui.HorizontalAlignCenter
|
v.copyrightLabel.Alignment = d2gui.HorizontalAlignCenter
|
||||||
v.copyrightLabel.SetText("Diablo 2 is © Copyright 2000-2016 Blizzard Entertainment")
|
v.copyrightLabel.SetText("Diablo 2 is © Copyright 2000-2016 Blizzard Entertainment")
|
||||||
v.copyrightLabel.Color = rgbaColor(lightBrown)
|
v.copyrightLabel.Color[0] = rgbaColor(lightBrown)
|
||||||
v.copyrightLabel.SetPosition(copyrightX, copyrightY)
|
v.copyrightLabel.SetPosition(copyrightX, copyrightY)
|
||||||
loading.Progress(thirtyPercent)
|
loading.Progress(thirtyPercent)
|
||||||
|
|
||||||
v.copyrightLabel2 = d2ui.CreateLabel(d2resource.FontFormal12, d2resource.PaletteStatic)
|
v.copyrightLabel2 = d2ui.CreateLabel(d2resource.FontFormal12, d2resource.PaletteStatic)
|
||||||
v.copyrightLabel2.Alignment = d2gui.HorizontalAlignCenter
|
v.copyrightLabel2.Alignment = d2gui.HorizontalAlignCenter
|
||||||
v.copyrightLabel2.SetText("All Rights Reserved.")
|
v.copyrightLabel2.SetText("All Rights Reserved.")
|
||||||
v.copyrightLabel2.Color = rgbaColor(lightBrown)
|
v.copyrightLabel2.Color[0] = rgbaColor(lightBrown)
|
||||||
v.copyrightLabel2.SetPosition(copyright2X, copyright2Y)
|
v.copyrightLabel2.SetPosition(copyright2X, copyright2Y)
|
||||||
|
|
||||||
v.openDiabloLabel = d2ui.CreateLabel(d2resource.FontFormal10, d2resource.PaletteStatic)
|
v.openDiabloLabel = d2ui.CreateLabel(d2resource.FontFormal10, d2resource.PaletteStatic)
|
||||||
v.openDiabloLabel.Alignment = d2gui.HorizontalAlignCenter
|
v.openDiabloLabel.Alignment = d2gui.HorizontalAlignCenter
|
||||||
v.openDiabloLabel.SetText("OpenDiablo2 is neither developed by, nor endorsed by Blizzard or its parent company Activision")
|
v.openDiabloLabel.SetText("OpenDiablo2 is neither developed by, nor endorsed by Blizzard or its parent company Activision")
|
||||||
v.openDiabloLabel.Color = rgbaColor(lightYellow)
|
v.openDiabloLabel.Color[0] = rgbaColor(lightYellow)
|
||||||
v.openDiabloLabel.SetPosition(od2LabelX, od2LabelY)
|
v.openDiabloLabel.SetPosition(od2LabelX, od2LabelY)
|
||||||
loading.Progress(fiftyPercent)
|
loading.Progress(fiftyPercent)
|
||||||
|
|
||||||
|
@ -226,7 +226,7 @@ func (v *MainMenu) createLabels(loading d2screen.LoadingState) {
|
||||||
v.tcpJoinGameLabel.Alignment = d2gui.HorizontalAlignCenter
|
v.tcpJoinGameLabel.Alignment = d2gui.HorizontalAlignCenter
|
||||||
v.tcpJoinGameLabel.SetText("Enter Host IP Address\nto Join Game")
|
v.tcpJoinGameLabel.SetText("Enter Host IP Address\nto Join Game")
|
||||||
|
|
||||||
v.tcpJoinGameLabel.Color = rgbaColor(gold)
|
v.tcpJoinGameLabel.Color[0] = rgbaColor(gold)
|
||||||
v.tcpJoinGameLabel.SetPosition(joinGameX, joinGameY)
|
v.tcpJoinGameLabel.SetPosition(joinGameX, joinGameY)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -397,20 +397,17 @@ func (v *SelectHeroClass) createLabels() {
|
||||||
|
|
||||||
v.heroNameLabel = d2ui.CreateLabel(d2resource.Font16, d2resource.PaletteUnits)
|
v.heroNameLabel = d2ui.CreateLabel(d2resource.Font16, d2resource.PaletteUnits)
|
||||||
v.heroNameLabel.Alignment = d2gui.HorizontalAlignLeft
|
v.heroNameLabel.Alignment = d2gui.HorizontalAlignLeft
|
||||||
v.heroNameLabel.Color = rgbaColor(gold)
|
v.heroNameLabel.SetText(d2ui.ColorTokenize("Character Name", d2ui.ColorTokenGold))
|
||||||
v.heroNameLabel.SetText("Character Name")
|
|
||||||
v.heroNameLabel.SetPosition(heroNameLabelX, heroNameLabelY)
|
v.heroNameLabel.SetPosition(heroNameLabelX, heroNameLabelY)
|
||||||
|
|
||||||
v.expansionCharLabel = d2ui.CreateLabel(d2resource.Font16, d2resource.PaletteUnits)
|
v.expansionCharLabel = d2ui.CreateLabel(d2resource.Font16, d2resource.PaletteUnits)
|
||||||
v.expansionCharLabel.Alignment = d2gui.HorizontalAlignLeft
|
v.expansionCharLabel.Alignment = d2gui.HorizontalAlignLeft
|
||||||
v.expansionCharLabel.Color = rgbaColor(gold)
|
v.expansionCharLabel.SetText(d2ui.ColorTokenize("EXPANSION CHARACTER", d2ui.ColorTokenGold))
|
||||||
v.expansionCharLabel.SetText("EXPANSION CHARACTER")
|
|
||||||
v.expansionCharLabel.SetPosition(expansionLabelX, expansionLabelY)
|
v.expansionCharLabel.SetPosition(expansionLabelX, expansionLabelY)
|
||||||
|
|
||||||
v.hardcoreCharLabel = d2ui.CreateLabel(d2resource.Font16, d2resource.PaletteUnits)
|
v.hardcoreCharLabel = d2ui.CreateLabel(d2resource.Font16, d2resource.PaletteUnits)
|
||||||
v.hardcoreCharLabel.Alignment = d2gui.HorizontalAlignLeft
|
v.hardcoreCharLabel.Alignment = d2gui.HorizontalAlignLeft
|
||||||
v.hardcoreCharLabel.Color = rgbaColor(gold)
|
v.hardcoreCharLabel.SetText(d2ui.ColorTokenize("Hardcore", d2ui.ColorTokenGold))
|
||||||
v.hardcoreCharLabel.SetText("Hardcore")
|
|
||||||
v.hardcoreCharLabel.SetPosition(hardcoreLabelX, hardcoreLabelY)
|
v.hardcoreCharLabel.SetPosition(hardcoreLabelX, hardcoreLabelY)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -94,13 +94,11 @@ func NewGameControls(renderer d2interface.Renderer, hero *d2mapentity.Player, ma
|
||||||
})
|
})
|
||||||
|
|
||||||
zoneLabel := d2ui.CreateLabel(d2resource.Font30, d2resource.PaletteUnits)
|
zoneLabel := d2ui.CreateLabel(d2resource.Font30, d2resource.PaletteUnits)
|
||||||
zoneLabel.Color = color.RGBA{R: 255, G: 88, B: 82, A: 255}
|
|
||||||
zoneLabel.Alignment = d2gui.HorizontalAlignCenter
|
zoneLabel.Alignment = d2gui.HorizontalAlignCenter
|
||||||
|
|
||||||
nameLabel := d2ui.CreateLabel(d2resource.FontFormal11, d2resource.PaletteStatic)
|
nameLabel := d2ui.CreateLabel(d2resource.FontFormal11, d2resource.PaletteStatic)
|
||||||
nameLabel.Alignment = d2gui.HorizontalAlignCenter
|
nameLabel.Alignment = d2gui.HorizontalAlignCenter
|
||||||
nameLabel.SetText("")
|
nameLabel.SetText(d2ui.ColorTokenize("", d2ui.ColorTokenServer))
|
||||||
nameLabel.Color = color.White
|
|
||||||
|
|
||||||
// TODO make this depend on the hero type to respect inventory.txt
|
// TODO make this depend on the hero type to respect inventory.txt
|
||||||
var inventoryRecordKey string
|
var inventoryRecordKey string
|
||||||
|
@ -440,7 +438,8 @@ func (g *GameControls) Render(target d2interface.Surface) error {
|
||||||
|
|
||||||
if within {
|
if within {
|
||||||
xOff, yOff := int(entOffset.X()), int(entOffset.Y())
|
xOff, yOff := int(entOffset.X()), int(entOffset.Y())
|
||||||
g.nameLabel.SetText(entity.Name())
|
g.nameLabel.SetText(entity.Label())
|
||||||
|
|
||||||
xLabel, yLabel := entScreenX-xOff, entScreenY-yOff-entityHeight-hoverLabelOuterPad
|
xLabel, yLabel := entScreenX-xOff, entScreenY-yOff-entityHeight-hoverLabelOuterPad
|
||||||
g.nameLabel.SetPosition(xLabel, yLabel)
|
g.nameLabel.SetPosition(xLabel, yLabel)
|
||||||
g.nameLabel.Render(target)
|
g.nameLabel.Render(target)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user