Documentation
¶
Overview ¶
Package sendtables contains code related to decoding sendtables. Mostly used internally but can be interesting for direct access to server-classes and entities.
Index ¶
- type Entity
- type EntityCreatedHandler
- type Property
- type PropertyUpdateHandler
- type PropertyValue
- type PropertyValueType
- type SendTableParser
- type ServerClass
- func (sc *ServerClass) BaseClasses() []*ServerClass
- func (sc *ServerClass) DataTableID() int
- func (sc *ServerClass) DataTableName() string
- func (sc *ServerClass) ID() int
- func (sc *ServerClass) Name() string
- func (sc *ServerClass) OnEntityCreated(handler EntityCreatedHandler)
- func (sc *ServerClass) PropertyEntries() []string
- func (sc *ServerClass) String() string
- type ServerClasses
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Entity ¶
type Entity interface {
// ServerClass returns the entity's server-class.
ServerClass() *ServerClass
// ID returns the entity's ID.
ID() int
// Properties returns all properties of the entity.
Properties() (out []Property)
// Property finds a property on the entity by name.
//
// Returns nil if the property wasn't found.
Property(name string) Property
// BindProperty combines Property() & Property.Bind() into one.
// Essentially binds a property's value to a pointer.
// See the docs of the two individual functions for more info.
BindProperty(name string, variable interface{}, valueType PropertyValueType)
// PropertyValue finds a property on the entity by name and returns its value.
//
// Returns false as second value if the property was not found.
PropertyValue(name string) (PropertyValue, bool)
// PropertyValueMust finds a property on the entity by name and returns its value.
//
// Panics with nil pointer dereference error if the property was not found.
PropertyValueMust(name string) PropertyValue
// ApplyUpdate reads an update to an Enitiy's properties and
// triggers registered PropertyUpdateHandlers if values changed.
//
// Intended for internal use only.
ApplyUpdate(reader *bit.BitReader)
// Position returns the entity's position in world coordinates.
Position() r3.Vector
// OnPositionUpdate registers a handler for the entity's position update.
// The handler is called with the new position every time a position-relevant property is updated.
//
// See also Position()
OnPositionUpdate(h func(pos r3.Vector))
// OnDestroy registers a function to be called on the entity's destruction.
OnDestroy(delegate func())
// Destroy triggers all via OnDestroy() registered functions.
//
// Intended for internal use only.
Destroy()
// OnCreateFinished registers a function to be called once the entity is fully created -
// i.e. once all property updates have been sent out.
OnCreateFinished(delegate func())
}
Entity is an auto-generated interface for entity, intended to be used when mockability is needed. entity stores a entity in the game (e.g. players etc.) with its properties.
type EntityCreatedHandler ¶
type EntityCreatedHandler func(Entity)
EntityCreatedHandler is the interface for handlers that are interested in EntityCreatedEvents.
type Property ¶
type Property interface {
// Name returns the property's name.
Name() string
// Value returns current value of the property.
Value() PropertyValue
// OnUpdate registers a handler for updates of the property's value.
//
// The handler will be called with the current value upon registration.
OnUpdate(handler PropertyUpdateHandler)
/*
Bind binds a property's value to a pointer.
Example:
var i int
property.Bind(&i, ValTypeInt)
This will bind the property's value to i so every time it's updated i is updated as well.
The valueType indicates which field of the PropertyValue to use for the binding.
*/
Bind(variable interface{}, valueType PropertyValueType)
}
Property is an auto-generated interface for property, intended to be used when mockability is needed. property wraps a flattenedPropEntry and allows registering handlers that can be triggered on a update of the property.
type PropertyUpdateHandler ¶
type PropertyUpdateHandler func(PropertyValue)
PropertyUpdateHandler is the interface for handlers that are interested in property changes.
type PropertyValue ¶
type PropertyValue struct {
VectorVal r3.Vector
IntVal int
ArrayVal []PropertyValue
StringVal string
FloatVal float32
// contains filtered or unexported fields
}
PropertyValue stores parsed & decoded send-table values. For instance player health, location etc.
func (PropertyValue) BoolVal ¶
func (v PropertyValue) BoolVal() bool
BoolVal returns true if IntVal > 0.
func (PropertyValue) IsSet ¶
func (v PropertyValue) IsSet() bool
IsSet returns true if the property has been set at least once (even if the set value is equal to the default value). This is a beta feature and may be changed without notice.
type PropertyValueType ¶
type PropertyValueType int
PropertyValueType specifies the type of a PropertyValue
const ( ValTypeInt PropertyValueType = iota ValTypeFloat32 ValTypeFloat64 // Like ValTypeFloat32 but with additional cast to float64 ValTypeString ValTypeVector ValTypeArray ValTypeBoolInt // Int that is treated as bool (1 -> true, != 1 -> false) )
Possible types of property values. See Property.Bind()
type SendTableParser ¶
type SendTableParser struct {
// contains filtered or unexported fields
}
SendTableParser provides functions for parsing send-tables.
Intended for internal use only.
func NewSendTableParser ¶
func NewSendTableParser() *SendTableParser
NewSendTableParser returns a new SendTableParser.
Intended for internal use only.
func (*SendTableParser) ParsePacket ¶
func (p *SendTableParser) ParsePacket(r *bit.BitReader)
ParsePacket parses a send-table packet.
Intended for internal use only.
func (*SendTableParser) ReadEnterPVS ¶
func (p *SendTableParser) ReadEnterPVS(r *bit.BitReader, entityID int) Entity
ReadEnterPVS reads an entity entering the PVS (potentially visible system).
Intended for internal use only.
func (*SendTableParser) ServerClasses ¶
func (p *SendTableParser) ServerClasses() ServerClasses
ServerClasses returns the parsed server-classes.
Intended for internal use only.
func (*SendTableParser) SetInstanceBaseline ¶
func (p *SendTableParser) SetInstanceBaseline(scID int, data []byte)
SetInstanceBaseline sets the raw instance-baseline data for a serverclass by ID.
Intended for internal use only.
type ServerClass ¶
type ServerClass struct {
// contains filtered or unexported fields
}
ServerClass stores meta information about Entity types (e.g. palyers, teams etc.).
func (*ServerClass) BaseClasses ¶
func (sc *ServerClass) BaseClasses() []*ServerClass
BaseClasses returns the base-classes of this server-class.
func (*ServerClass) DataTableID ¶
func (sc *ServerClass) DataTableID() int
DataTableID returns the data-table ID.
func (*ServerClass) DataTableName ¶
func (sc *ServerClass) DataTableName() string
DataTableName returns the data-table name.
func (*ServerClass) Name ¶
func (sc *ServerClass) Name() string
Name returns the server-class's name.
func (*ServerClass) OnEntityCreated ¶
func (sc *ServerClass) OnEntityCreated(handler EntityCreatedHandler)
OnEntityCreated registers a function to be called when a new entity is created from this ServerClass.
func (*ServerClass) PropertyEntries ¶
func (sc *ServerClass) PropertyEntries() []string
PropertyEntries returns the names of all property-entries on this server-class.
func (*ServerClass) String ¶
func (sc *ServerClass) String() string
type ServerClasses ¶
type ServerClasses []*ServerClass
ServerClasses is a searchable list of ServerClasses.
func (ServerClasses) FindByName ¶
func (sc ServerClasses) FindByName(name string) *ServerClass
FindByName finds and returns a server-class by it's name.
Returns nil if the server-class wasn't found.