diff --git a/pkg/data/mode/object_mode.go b/pkg/data/mode/object_mode.go new file mode 100644 index 0000000..b58d6fc --- /dev/null +++ b/pkg/data/mode/object_mode.go @@ -0,0 +1,38 @@ +package mode + +type ObjectMode uint32 + +const ( + ObjectModeIdle ObjectMode = 0 + ObjectModeOperating ObjectMode = 1 + ObjectModeOpened ObjectMode = 2 + ObjectModeSpecial1 ObjectMode = 3 + ObjectModeSpecial2 ObjectMode = 4 + ObjectModeSpecial3 ObjectMode = 5 + ObjectModeSpecial4 ObjectMode = 6 + ObjectModeSpecial5 ObjectMode = 7 + +) + +func (m ObjectMode) String() string { + switch m { + case ObjectModeIdle: + return "Idle" + case ObjectModeOperating: + return "Operating" + case ObjectModeOpened: + return "Opened" + case ObjectModeSpecial1: + return "Special1" + case ObjectModeSpecial2: + return "Special2" + case ObjectModeSpecial3: + return "Special3" + case ObjectModeSpecial4: + return "Special4" + case ObjectModeSpecial5: + return "Special5" + default: + return "Unknown" + } +} diff --git a/pkg/data/objects.go b/pkg/data/objects.go index f3c1920..ad740f7 100644 --- a/pkg/data/objects.go +++ b/pkg/data/objects.go @@ -1,6 +1,9 @@ package data -import "github.com/hectorgimenez/d2go/pkg/data/object" +import ( + "github.com/hectorgimenez/d2go/pkg/data/mode" + "github.com/hectorgimenez/d2go/pkg/data/object" +) type Object struct { ID UnitID @@ -11,6 +14,7 @@ type Object struct { Shrine object.ShrineData Position Position Owner string + Mode mode.ObjectMode } type Objects []Object diff --git a/pkg/memory/object.go b/pkg/memory/object.go index 1670751..eb29b4f 100644 --- a/pkg/memory/object.go +++ b/pkg/memory/object.go @@ -1,6 +1,7 @@ package memory import ( + "github.com/hectorgimenez/d2go/pkg/data/mode" "sort" "github.com/hectorgimenez/d2go/pkg/data" @@ -20,9 +21,10 @@ func (gd *GameReader) Objects(playerPosition data.Position, hover data.HoverData objectType := gd.Process.ReadUInt(objectUnitPtr+0x00, Uint32) if objectType == 2 { txtFileNo := gd.Process.ReadUInt(objectUnitPtr+0x04, Uint32) - mode := gd.Process.ReadUInt(objectUnitPtr+0x0c, Uint32) unitID := gd.Process.ReadUInt(objectUnitPtr+0x08, Uint32) + // Read the object mode + objectMode := mode.ObjectMode(gd.Process.ReadUInt(objectUnitPtr+0x0c, Uint32)) // Coordinates (X, Y) pathPtr := uintptr(gd.Process.ReadUInt(objectUnitPtr+0x38, Uint64)) posX := gd.Process.ReadUInt(pathPtr+0x10, Uint16) @@ -40,7 +42,6 @@ func (gd *GameReader) Objects(playerPosition data.Position, hover data.HoverData ShrineName: object.ShrineTypeNames[object.ShrineType(shrineType)], ShrineType: object.ShrineType(shrineType), } - } else { interactType = gd.Process.ReadUInt(unitDataPtr+0x08, Uint8) } @@ -52,12 +53,13 @@ func (gd *GameReader) Objects(playerPosition data.Position, hover data.HoverData IsHovered: data.UnitID(unitID) == hover.UnitID && hover.UnitType == 2 && hover.IsHovered, InteractType: object.InteractType(interactType), Shrine: shrineData, - Selectable: mode == 0, + Selectable: objectMode == mode.ObjectModeIdle, Position: data.Position{ X: int(posX), Y: int(posY), }, Owner: owner, + Mode: objectMode, } objects = append(objects, obj) }