Files
questshock/modding/hacked/ss1/content/object/Triple.go
T

105 lines
2.2 KiB
Go

package object
import "fmt"
// Class describes a general category of objects.
type Class byte
// String returns the textual representation.
func (c Class) String() string {
if int(c) >= len(classNames) {
return fmt.Sprintf("Unknown%02X", int(c))
}
return classNames[c]
}
// Object classes constants.
const (
ClassGun Class = 0
ClassAmmo Class = 1
ClassPhysics Class = 2
ClassGrenade Class = 3
ClassDrug Class = 4
ClassHardware Class = 5
ClassSoftware Class = 6
ClassBigStuff Class = 7
ClassSmallStuff Class = 8
ClassFixture Class = 9
ClassDoor Class = 10
ClassAnimating Class = 11
ClassTrap Class = 12
ClassContainer Class = 13
ClassCritter Class = 14
)
var classNames = []string{
"Gun",
"Ammo",
"Physics",
"Grenade",
"Drug",
"Hardware",
"Software",
"BigStuff",
"SmallStuff",
"Fixture",
"Door",
"Animating",
"Trap",
"Container",
"Critter",
}
// Classes returns a list of all classes.
func Classes() []Class {
var classes [ClassCount]Class
for class := Class(0); class < ClassCount; class++ {
classes[class] = class
}
return classes[:]
}
// Subclass divides an object class.
type Subclass byte
// Type describes one specific object.
type Type byte
// Triple identifies one specific object by its full coordinate.
type Triple struct {
Class Class
Subclass Subclass
Type Type
}
// TripleFrom returns a Triple instance with given values as coordinates.
func TripleFrom(class, subclass, objType int) Triple {
return Triple{
Class: Class(class),
Subclass: Subclass(subclass),
Type: Type(objType),
}
}
// TripleFromInt returns a Triple instance based on a single integer value.
func TripleFromInt(value int) Triple {
return Triple{
Class: Class((value >> 16) & 0xFF),
Subclass: Subclass((value >> 8) & 0xFF),
Type: Type((value >> 0) & 0xFF),
}
}
// String returns the textual representation of the triple as "cl/s/ty" string.
func (triple Triple) String() string {
return fmt.Sprintf("%2d/%d/%2d", triple.Class, triple.Subclass, triple.Type)
}
// Int returns the triple as a single integer value.
func (triple Triple) Int() int {
value := int(triple.Class) << 16
value |= int(triple.Subclass) << 8
value |= int(triple.Type) << 0
return value
}