stop using global variables
This commit is contained in:
@@ -35,9 +35,6 @@ func (pc *PointCounter) Percent(point int, maxPoint int, hasBo bool) int {
|
||||
return int((float64(point) / float64(pc.MaxPoint)) * 100)
|
||||
}
|
||||
|
||||
var maxHp PointCounter
|
||||
var maxMp PointCounter
|
||||
|
||||
const (
|
||||
goldPerLevel = 10000
|
||||
|
||||
@@ -170,6 +167,8 @@ type PlayerUnit struct {
|
||||
LeftSkill skill.ID
|
||||
RightSkill skill.ID
|
||||
AvailableWaypoints []area.Area // Is only filled when WP menu is open and only for the specific selected tab
|
||||
MaxHPValue *PointCounter
|
||||
MaxMPValue *PointCounter
|
||||
}
|
||||
|
||||
func (pu PlayerUnit) MaxGold() int {
|
||||
@@ -186,7 +185,7 @@ func (pu PlayerUnit) HPPercent() int {
|
||||
if !found {
|
||||
return 100
|
||||
}
|
||||
return maxHp.Percent(pu.Stats[stat.Life], pu.Stats[stat.MaxLife], pu.States.HasState(state.Battleorders))
|
||||
return pu.MaxHPValue.Percent(pu.Stats[stat.Life], pu.Stats[stat.MaxLife], pu.States.HasState(state.Battleorders))
|
||||
}
|
||||
|
||||
func (pu PlayerUnit) MPPercent() int {
|
||||
@@ -194,7 +193,7 @@ func (pu PlayerUnit) MPPercent() int {
|
||||
if !found {
|
||||
return 100
|
||||
}
|
||||
return maxMp.Percent(pu.Stats[stat.Mana], pu.Stats[stat.MaxMana], pu.States.HasState(state.Battleorders))
|
||||
return pu.MaxMPValue.Percent(pu.Stats[stat.Mana], pu.Stats[stat.MaxMana], pu.States.HasState(state.Battleorders))
|
||||
}
|
||||
|
||||
func (pu PlayerUnit) HasDebuff() bool {
|
||||
|
||||
@@ -6,7 +6,8 @@ import (
|
||||
)
|
||||
|
||||
type GameReader struct {
|
||||
offset Offset
|
||||
offset Offset
|
||||
previousRead data.Data
|
||||
Process
|
||||
}
|
||||
|
||||
@@ -17,8 +18,6 @@ func NewGameReader(process Process) *GameReader {
|
||||
}
|
||||
}
|
||||
|
||||
var previousData *data.Data
|
||||
|
||||
func (gd *GameReader) GetData() data.Data {
|
||||
if gd.offset.UnitTable == 0 {
|
||||
gd.offset = calculateOffsets(gd.Process)
|
||||
@@ -27,7 +26,7 @@ func (gd *GameReader) GetData() data.Data {
|
||||
roster := gd.getRoster()
|
||||
playerUnitPtr, corpse := gd.GetPlayerUnitPtr(roster)
|
||||
|
||||
pu := gd.GetPlayerUnit(playerUnitPtr)
|
||||
pu := gd.GetPlayerUnit(playerUnitPtr, gd.previousRead.PlayerUnit.MaxHPValue, gd.previousRead.PlayerUnit.MaxMPValue)
|
||||
hover := gd.hoveredData()
|
||||
|
||||
// Quests
|
||||
@@ -51,10 +50,10 @@ func (gd *GameReader) GetData() data.Data {
|
||||
}
|
||||
|
||||
if playerUnitPtr == 0 {
|
||||
return *previousData
|
||||
return gd.previousRead
|
||||
}
|
||||
|
||||
previousData = &d
|
||||
gd.previousRead = d
|
||||
|
||||
return d
|
||||
}
|
||||
|
||||
@@ -76,7 +76,14 @@ func (gd *GameReader) GetPlayerUnitPtr(roster data.Roster) (playerUnitPtr uintpt
|
||||
return
|
||||
}
|
||||
|
||||
func (gd *GameReader) GetPlayerUnit(playerUnit uintptr) data.PlayerUnit {
|
||||
func (gd *GameReader) GetPlayerUnit(playerUnit uintptr, previousHP, previousMP *data.PointCounter) data.PlayerUnit {
|
||||
if previousHP == nil {
|
||||
previousHP = &data.PointCounter{}
|
||||
}
|
||||
if previousMP == nil {
|
||||
previousMP = &data.PointCounter{}
|
||||
}
|
||||
|
||||
unitID := gd.Process.ReadUInt(playerUnit+0x08, Uint32)
|
||||
|
||||
// Read X and Y Positions
|
||||
@@ -148,7 +155,7 @@ func (gd *GameReader) GetPlayerUnit(playerUnit uintptr) data.PlayerUnit {
|
||||
}
|
||||
}
|
||||
|
||||
return data.PlayerUnit{
|
||||
d := data.PlayerUnit{
|
||||
Name: name,
|
||||
ID: data.UnitID(unitID),
|
||||
Area: area.Area(levelNo),
|
||||
@@ -163,7 +170,15 @@ func (gd *GameReader) GetPlayerUnit(playerUnit uintptr) data.PlayerUnit {
|
||||
LeftSkill: skill.ID(leftSkillId),
|
||||
RightSkill: skill.ID(rightSkillId),
|
||||
AvailableWaypoints: availableWPs,
|
||||
MaxHPValue: previousHP,
|
||||
MaxMPValue: previousMP,
|
||||
}
|
||||
|
||||
// Recalculate max HP and MP
|
||||
d.HPPercent()
|
||||
d.MPPercent()
|
||||
|
||||
return d
|
||||
}
|
||||
|
||||
func (gd *GameReader) getSkills(skillListPtr uintptr) map[skill.ID]skill.Points {
|
||||
|
||||
Reference in New Issue
Block a user