1
1
mirror of https://github.com/OpenDiablo2/OpenDiablo2 synced 2024-06-15 20:15:24 +00:00

code cleanup

This commit is contained in:
M. Sz 2020-12-03 15:01:53 +01:00
parent 708ee12182
commit ed89d91ae4
2 changed files with 105 additions and 88 deletions

63
d2common/d2enum/quests.go Normal file
View File

@ -0,0 +1,63 @@
package d2enum
const (
// NormalActQuestsNumber is number of quests in standard act
NormalActQuestsNumber = 6
// HalfQuestsNumber is number of quests in act 4
HalfQuestsNumber = 3
)
// ActsNumber is number of acts in game
const ActsNumber = 5
const (
// Act1 is act 1 in game
Act1 = iota + 1
// Act2 is act 2 in game
Act2
// Act3 is act 3 in game
Act3
// Act4 is act 4 in game
Act4
// Act5 is act 4 in game
Act5
)
// ActsWithHalfQuestNumber is act, where is half quest number (act4)
const ActsWithHalfQuestNumber = Act4
/* I think, It should looks like that:
each quest has its own position in questStatus map
which should come from save file.
quests status values:
- -2 - done
- -1 - done, need to play animation
- 0 - not started yet
- and after that we have "in progress status"
so for status (from 1 to n) we have appropriate
quest descriptions and we'll have appropriate
actions
*/
const (
QuestStatusCompleted = iota - 2 // quest completed
QuestStatusCompleting // quest completed (need to play animation)
QuestStatusNotStarted // quest not started yet
QuestStatusInProgress // quest is in progress
)
const (
// QuestNone describes "no selected quest" status
QuestNone = iota
// Quest1 describes quest field 1
Quest1
// Quest2 describes quest field 2
Quest2
// Quest3 describes quest field 3
Quest3
// Quest4 describes quest field 4
Quest4
// Quest5 describes quest field 5
Quest5
// Quest6 describes quest field 6
Quest6
)

View File

@ -5,6 +5,7 @@ import (
"image/color" "image/color"
"strings" "strings"
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2enum"
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2interface" "github.com/OpenDiablo2/OpenDiablo2/d2common/d2interface"
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2resource" "github.com/OpenDiablo2/OpenDiablo2/d2common/d2resource"
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2util" "github.com/OpenDiablo2/OpenDiablo2/d2common/d2util"
@ -14,14 +15,6 @@ import (
const white = 0xffffffff const white = 0xffffffff
const (
act1 = iota + 1
act2
act3
act4
act5
)
const ( // for the dc6 frames const ( // for the dc6 frames
questLogTopLeft = iota questLogTopLeft = iota
questLogTopRight questLogTopRight
@ -29,19 +22,6 @@ const ( // for the dc6 frames
questLogBottomRight questLogBottomRight
) )
const (
questStatusCompleted = iota - 2 // quest completed
questStatusCompleting // quest completed (need to play animation)
questStatusNotStarted // quest not started yet
// nolint:deadcode,varcheck // if will not be used, just remove
questStatusInProgress // quest is in progress
)
const (
normalActQuestsNumber = 6
act4QuestsNumber = 3
)
const ( const (
questLogOffsetX, questLogOffsetY = 80, 64 questLogOffsetX, questLogOffsetY = 80, 64
) )
@ -83,10 +63,6 @@ const (
questLogNumTabs questLogNumTabs
) )
const (
questNone = 0
)
func (s *QuestLog) getPositionForSocket(number int) (x, y int) { func (s *QuestLog) getPositionForSocket(number int) (x, y int) {
pos := []struct { pos := []struct {
x int x int
@ -142,6 +118,11 @@ func NewQuestLog(asset *d2asset.AssetManager,
26: 0, 26: 0,
} }
var quests [d2enum.ActsNumber]*d2ui.WidgetGroup
for i := 0; i < d2enum.ActsNumber; i++ {
quests[i] = ui.NewWidgetGroup(d2ui.RenderPriorityQuestLog)
}
ql := &QuestLog{ ql := &QuestLog{
asset: asset, asset: asset,
uiManager: ui, uiManager: ui,
@ -155,6 +136,7 @@ func NewQuestLog(asset *d2asset.AssetManager,
{}, {},
{}, {},
}, },
quests: quests,
questStatus: qs, questStatus: qs,
} }
@ -177,26 +159,9 @@ type QuestLog struct {
act int act int
tab [questLogNumTabs]*questLogTab tab [questLogNumTabs]*questLogTab
questName *d2ui.Label questName *d2ui.Label
questDescr *d2ui.Label questDescr *d2ui.Label
questsa1 *d2ui.WidgetGroup quests [5]*d2ui.WidgetGroup
questsa2 *d2ui.WidgetGroup
questsa3 *d2ui.WidgetGroup
questsa4 *d2ui.WidgetGroup
questsa5 *d2ui.WidgetGroup
/* I think, It should looks like that:
each quest has its own position in questStatus map
which should come from save file.
quests status values:
- -2 - done
- -1 - done, need to play animation
- 0 - not started yet
- and after that we have "in progress status"
so for status (from 1 to n) we have appropriate
quest descriptions and we'll have appropriate
actions
*/
questStatus map[int]int questStatus map[int]int
originX int originX int
@ -238,11 +203,6 @@ func (q *questLogTab) newTab(ui *d2ui.UIManager, tabType d2ui.ButtonType, x int)
func (s *QuestLog) Load() { func (s *QuestLog) Load() {
var err error var err error
s.questsa1 = s.uiManager.NewWidgetGroup(d2ui.RenderPriorityQuestLog)
s.questsa2 = s.uiManager.NewWidgetGroup(d2ui.RenderPriorityQuestLog)
s.questsa3 = s.uiManager.NewWidgetGroup(d2ui.RenderPriorityQuestLog)
s.questsa4 = s.uiManager.NewWidgetGroup(d2ui.RenderPriorityQuestLog)
s.questsa5 = s.uiManager.NewWidgetGroup(d2ui.RenderPriorityQuestLog)
s.panelGroup = s.uiManager.NewWidgetGroup(d2ui.RenderPriorityQuestLog) s.panelGroup = s.uiManager.NewWidgetGroup(d2ui.RenderPriorityQuestLog)
frame := d2ui.NewUIFrame(s.asset, s.uiManager, d2ui.FrameLeft) frame := d2ui.NewUIFrame(s.asset, s.uiManager, d2ui.FrameLeft)
@ -282,7 +242,10 @@ func (s *QuestLog) Load() {
s.panelGroup.AddWidget(s.questDescr) s.panelGroup.AddWidget(s.questDescr)
s.loadTabs() s.loadTabs()
s.loadQuestIcons()
for i := 0; i < 5; i++ {
s.quests[i] = s.loadQuestIconsForAct(i + 1)
}
s.panelGroup.SetVisible(false) s.panelGroup.SetVisible(false)
} }
@ -316,22 +279,14 @@ func (s *QuestLog) loadTabs() {
s.setTab(s.act - 1) s.setTab(s.act - 1)
} }
func (s *QuestLog) loadQuestIcons() {
s.questsa1 = s.loadQuestIconsForAct(act1)
s.questsa2 = s.loadQuestIconsForAct(act2)
s.questsa3 = s.loadQuestIconsForAct(act3)
s.questsa4 = s.loadQuestIconsForAct(act4)
s.questsa5 = s.loadQuestIconsForAct(act5)
}
func (s *QuestLog) loadQuestIconsForAct(act int) *d2ui.WidgetGroup { func (s *QuestLog) loadQuestIconsForAct(act int) *d2ui.WidgetGroup {
wg := s.uiManager.NewWidgetGroup(d2ui.RenderPriorityQuestLog) wg := s.uiManager.NewWidgetGroup(d2ui.RenderPriorityQuestLog)
var questsInAct int var questsInAct int
if act == act4 { if act == d2enum.Act4 {
questsInAct = act4QuestsNumber questsInAct = d2enum.HalfQuestsNumber
} else { } else {
questsInAct = normalActQuestsNumber questsInAct = d2enum.NormalActQuestsNumber
} }
var sockets []*d2ui.Sprite var sockets []*d2ui.Sprite
@ -361,9 +316,9 @@ func (s *QuestLog) loadQuestIconsForAct(act int) *d2ui.WidgetGroup {
} }
switch s.questStatus[s.cordsToQuestID(act, n)] { switch s.questStatus[s.cordsToQuestID(act, n)] {
case questStatusCompleted: case d2enum.QuestStatusCompleted:
err = icon.SetCurrentFrame(completedFrame) err = icon.SetCurrentFrame(completedFrame)
case questStatusCompleting: case d2enum.QuestStatusCompleting:
// that's not complet now // that's not complet now
err = icon.SetCurrentFrame(0) err = icon.SetCurrentFrame(0)
if err != nil { if err != nil {
@ -371,9 +326,10 @@ func (s *QuestLog) loadQuestIconsForAct(act int) *d2ui.WidgetGroup {
} }
icon.PlayForward() icon.PlayForward()
icon.SetPlayLoop(false)
err = icon.SetCurrentFrame(completedFrame) err = icon.SetCurrentFrame(completedFrame)
s.questStatus[s.cordsToQuestID(act, n)] = questStatusCompleted s.questStatus[s.cordsToQuestID(act, n)] = d2enum.QuestStatusCompleted
case questStatusNotStarted: case d2enum.QuestStatusNotStarted:
err = icon.SetCurrentFrame(notStartedFrame) err = icon.SetCurrentFrame(notStartedFrame)
default: default:
err = icon.SetCurrentFrame(inProgresFrame) err = icon.SetCurrentFrame(inProgresFrame)
@ -432,7 +388,7 @@ func (s *QuestLog) setQuestLabel() {
status := s.questStatus[s.cordsToQuestID(s.selectedTab+1, s.selectedQuest)] status := s.questStatus[s.cordsToQuestID(s.selectedTab+1, s.selectedQuest)]
switch status { switch status {
case questStatusCompleted, questStatusCompleting: case d2enum.QuestStatusCompleted:
s.questDescr.SetText( s.questDescr.SetText(
strings.Join( strings.Join(
d2util.SplitIntoLinesWithMaxWidth( d2util.SplitIntoLinesWithMaxWidth(
@ -440,7 +396,7 @@ func (s *QuestLog) setQuestLabel() {
questDescriptionLenght), questDescriptionLenght),
"\n"), "\n"),
) )
case questStatusNotStarted: case d2enum.QuestStatusNotStarted:
s.questDescr.SetText("") s.questDescr.SetText("")
default: default:
s.questDescr.SetText(strings.Join( s.questDescr.SetText(strings.Join(
@ -456,14 +412,12 @@ func (s *QuestLog) setQuestLabel() {
func (s *QuestLog) setTab(tab int) { func (s *QuestLog) setTab(tab int) {
s.selectedTab = tab s.selectedTab = tab
s.selectedQuest = questNone s.selectedQuest = d2enum.QuestNone
s.setQuestLabel() s.setQuestLabel()
s.questsa1.SetVisible(tab == questLogTab1) for i := 0; i < d2enum.ActsNumber; i++ {
s.questsa2.SetVisible(tab == questLogTab2) s.quests[i].SetVisible(tab == i)
s.questsa3.SetVisible(tab == questLogTab3) }
s.questsa4.SetVisible(tab == questLogTab4)
s.questsa5.SetVisible(tab == questLogTab5)
for i := 0; i < questLogNumTabs; i++ { for i := 0; i < questLogNumTabs; i++ {
s.tab[i].button.SetEnabled(i == tab) s.tab[i].button.SetEnabled(i == tab)
@ -505,11 +459,11 @@ func (s *QuestLog) Open() {
func (s *QuestLog) Close() { func (s *QuestLog) Close() {
s.isOpen = false s.isOpen = false
s.panelGroup.SetVisible(false) s.panelGroup.SetVisible(false)
s.questsa1.SetVisible(false)
s.questsa2.SetVisible(false) for i := 0; i < d2enum.ActsNumber; i++ {
s.questsa3.SetVisible(false) s.quests[i].SetVisible(false)
s.questsa4.SetVisible(false) }
s.questsa5.SetVisible(false)
s.onCloseCb() s.onCloseCb()
} }
@ -590,9 +544,9 @@ func rgbaColor(rgba uint32) color.RGBA {
} }
func (s *QuestLog) cordsToQuestID(act, number int) int { func (s *QuestLog) cordsToQuestID(act, number int) int {
key := (act-1)*normalActQuestsNumber + number key := (act-1)*d2enum.NormalActQuestsNumber + number
if act > act4 { if act > d2enum.Act4 {
key -= act4QuestsNumber key -= d2enum.HalfQuestsNumber
} }
return key return key
@ -600,21 +554,21 @@ func (s *QuestLog) cordsToQuestID(act, number int) int {
//nolint:deadcode,unused // I think, it will be used, if not, we can just remove it //nolint:deadcode,unused // I think, it will be used, if not, we can just remove it
func (s *QuestLog) questIDToCords(id int) (act, number int) { func (s *QuestLog) questIDToCords(id int) (act, number int) {
act = act1 act = 1
for i := 0; i < normalActQuestsNumber; i++ { for i := 0; i < d2enum.ActsNumber; i++ {
if id < normalActQuestsNumber { if id < d2enum.NormalActQuestsNumber {
break break
} }
act++ act++
id -= normalActQuestsNumber id -= d2enum.NormalActQuestsNumber
} }
number = id number = id
if act > act4 { if act > d2enum.Act4 {
number -= act4QuestsNumber number -= d2enum.HalfQuestsNumber
} }
return act, number return act, number