Files
d2go/pkg/data/objects.go
2026-06-07 10:58:13 +07:00

160 lines
4.0 KiB
Go

package data
import (
"github.com/hectorgimenez/d2go/pkg/data/mode"
"github.com/hectorgimenez/d2go/pkg/data/object"
)
type Object struct {
ID UnitID
object.Name
IsHovered bool
Selectable bool
InteractType object.InteractType
Shrine object.ShrineData
Position Position
Owner string
Mode mode.ObjectMode
PortalData object.PortalData
}
type Objects []Object
func (o Objects) FindOne(name object.Name) (Object, bool) {
for _, obj := range o {
if obj.Name == name {
return obj, true
}
}
return Object{}, false
}
func (o Objects) FindByID(id UnitID) (Object, bool) {
for _, obj := range o {
if obj.ID == id {
return obj, true
}
}
return Object{}, false
}
func (o Object) IsShrine() bool {
switch o.Shrine.ShrineType {
case object.RefillShrine,
object.HealthShrine,
object.ManaShrine,
object.HPXChangeShrine,
object.ManaXChangeShrine,
object.ArmorShrine,
object.CombatShrine,
object.ResistFireShrine,
object.ResistColdShrine,
object.ResistLightningShrine,
object.ResistPoisonShrine,
object.SkillShrine,
object.ManaRegenShrine,
object.StaminaShrine,
object.ExperienceShrine,
object.UnknownShrine,
object.PortalShrine,
object.GemShrine,
object.FireShrine,
object.MonsterShrine,
object.ExplosiveShrine,
object.PoisonShrine:
return true
}
return false
}
func (o Object) IsWaypoint() bool {
switch o.Name {
case object.WaypointPortal,
object.Act1WildernessWaypoint,
object.Act2Waypoint,
object.Act3TownWaypoint,
object.PandamoniumFortressWaypoint,
object.Act2CellerWaypoint,
object.Act2SewerWaypoint,
object.Act3TravincalWaypoint,
object.ValleyWaypoint,
object.WorldstoneWaypoint,
object.ExpansionWildernessWaypoint,
object.IceCaveWaypoint,
object.TempleWaypoint,
object.InnerHellWaypoint,
object.WaypointH,
object.ExpansionWaypoint:
return true
}
return false
}
func (o Object) IsPortal() bool {
return o.Name == object.TownPortal
}
func (o Object) IsRedPortal() bool {
return o.Name == object.PermanentTownPortal ||
o.Name == object.DurielsLairPortal ||
o.Name == object.BaalsPortal ||
o.Name == object.ArcaneSanctuaryPortal ||
o.Name == object.LastLastPortal ||
o.Name == object.HellGate ||
o.Name == object.SiegeHellGate
}
func (o Object) IsChest() bool {
switch o.Name {
case 1, 3, 5, 6, 50, 51, 53, 54, 55, 56, 57, 58, 79, 87, 88, 89, 104, 105, 106, 107, 125, 126, 127, 128, 139, 140, 141,
144, 146, 147, 148, 154, 155, 158, 159, 169, 171, 174, 175, 176, 177, 178, 181, 182, 183, 185, 186, 187, 188, 198,
203, 204, 205, 223, 224, 225, 240, 241, 242, 243, 244, 247, 248, 266, 268, 270, 271, 272, 274, 284, 314, 315, 316,
317, 326, 329, 330, 331, 332, 333, 334, 335, 336, 354, 355, 356, 360, 371, 372, 380, 381, 383, 384, 387, 388, 389,
390, 391, 397, 405, 406, 407, 413, 416, 420, 424, 425, 430, 431, 432, 433, 454, 455, 463, 466, 485, 486, 487, 501,
502, 504, 505, 518, 524, 525, 526, 529, 530, 531, 532, 533, 534, 535, 540, 541, 544, 545, 556, 580, 581:
return true
}
return false
}
func (o Object) IsDoor() bool {
switch o.Name {
case object.DoorCathedralLeft,
object.DoorCathedralRight,
object.DoorCathedralDouble,
object.DoorCourtyardLeft,
object.DoorCourtyardRight,
object.DoorGateLeft,
object.DoorGateRight,
object.DoorMonasteryDoubleRight,
object.DoorWoodenLeft,
object.DoorWoodenLeft2,
object.DoorWoodenRight,
object.IronGrateDoorLeft,
object.IronGrateDoorRight,
object.SlimeDoor1,
object.SlimeDoor2,
object.TombDoorLeft,
object.TombDoorLeft2,
object.TombDoorRight,
object.TombDoorRight2,
object.WoodenDoorLeft,
object.WoodenDoorRight,
object.WoodenGrateDoorLeft,
object.WoodenGrateDoorRight,
object.AndarielDoor,
object.PenBreakableDoor,
object.ArreatSummitDoorToWorldstone,
object.SecretDoor1,
object.ExpansionTownGate:
return true
}
return false
}
func (o Object) IsSuperChest() bool {
switch o.Name {
case 104, 105, 106, 107, 181, 183, 580, 397, 387, 389, 390, 391, 455:
return true
}
return false
}