sendtables

package
v3.3.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 26, 2023 License: MIT Imports: 11 Imported by: 0

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

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
	// SerialNum returns the entity's serial number.
	SerialNum() 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 any, 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 the current value of the property.
	Value() PropertyValue
	// Type returns the data type of the property.
	Type() PropertyType
	// ArrayElementType returns the data type of array entries, if Property.Type() is PropTypeArray.
	ArrayElementType() PropertyType
	// 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 any, 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 PropertyEntry

type PropertyEntry struct {
	Name    string
	IsArray bool
	Type    PropertyType
}

type PropertyType

type PropertyType int

PropertyType identifies the data type of a property.

const (
	PropTypeInt PropertyType = iota
	PropTypeFloat
	PropTypeVector
	PropTypeVectorXY
	PropTypeString
	PropTypeArray
	PropTypeDataTable
	PropTypeInt64
)

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
	Int64Val  int64
	ArrayVal  []PropertyValue
	StringVal string
	FloatVal  float32
}

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.

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, existingEntities map[int]Entity, recordingPlayerSlot 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) ID

func (sc *ServerClass) ID() int

ID returns the server-class's ID.

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) PropertyEntryDefinitions

func (sc *ServerClass) PropertyEntryDefinitions() []PropertyEntry

PropertyEntryDefinitions returns 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.

Directories

Path Synopsis
Package fake provides basic mocks for Entity and Property.
Package fake provides basic mocks for Entity and Property.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL