func AddUserPositionValidation(validator func(*user.User, int64, int64, int64) bool)
AddUserPositionValidation registers a validation function to be called on Sync
validator func(userData *user.User, x int64, y int64, z int64) bool - Custom function to invoked for position validation.
func AfterDisappearCmd(callback func(*user.User, func(error)))
AfterDisappearCmd registers a command to be executed after field disappear: Must be called before ExposeCommands()
func AfterSyncCmd(callback func(*user.User, func(error)))
AfterSyncCmd registers a command to be executed after field sync: Must be called before ExposeCommands()
func AfterSyncInitCmd(callback func(*user.User, func(error)))
AfterSyncInitCmd registers a command to be executed after field sync: Must be called before ExposeCommands()
func BeforeDisappearCmd(callback func(*user.User, func(error)))
BeforeDisappearCmd registers a command to be executed before field disappear: Must be called before ExposeCommands()
func BeforeSyncCmd(callback func(*user.User, func(error)))
BeforeSyncCmd registers a command to be executed before field sync: Must be called before ExposeCommands()
func BeforeSyncInitCmd(callback func(*user.User, func(error)))
BeforeSyncInitCmd registers a command to be executed before field sync: Must be called before ExposeCommands()
func Broadcast(userData *user.User, uList []*UserEntity, ver uint8, cmd uint16, msg []byte, reliable bool)
Broadcast broadcast a message to the list of users found by Sync or FindUsersByPosition function
userData *user.User - User that sends broadcast. uList []*UserEntity - An array of user entities to send broadcast to. ver uint8 - Command version to be used as braodcast. cmd uint16 - Command ID to be used as broadcast. msg []byte - Message byte array to be sent as broadcast. reliable bool - If true, UDP will become RUDP.
func CalcDistance(myX, myY, yourX, yourY int64) int64
CalcDistance calculates distance using triangle
┬──────────>(Me) │ /| │ / | │ / | distance / | Y │ / | │ / _| └───>/____|_| (You) X myX int64 - X coordinate to calculate the distance against yourX. myY int64 - Y coordinate to calculate the distance against yourY. yourX int64 - X coordinate to calculate the distance against myX. yourY int64 - Y coordinate to calculage the distance against myY.
func Disappear(userData *user.User, syncLimit int)
Disappear removes the user client from field map
userData *user.User - User that will be disappear. syncLimit int - Maximum number of remote users to synchronize the disappearance.
func DiscardNPCByID(id string) bool
DiscardNPCByID deletes an NPC with matching ID
id string - Target NPC ID to delete.
func ExposeCommands()
ExposeCommands exposes commands to the client to work with Field package
func GetGridRangeByGridKey(gridKey string) (int64, int64, int64, int64)
GetGridRangeByGridKey returns grid range of x and y. This function works only with grids of the node.
return x1, x2, y1, y2
Grid key is obtained by GetGrids()
gridKey string - Target grid key to retrive the grid positions.
func GetGridSize() int64
GetGridSize returns the size of the grid
func GetGrids() []string
GetGrids returns a list of grids the node is assigned to
func GetServerSyncLimit() int
GetServerSyncLimit returns serverSyncLimit
func GetUserPosition(userData *user.User) (int64, int64, int64)
GetUserPosition returns the current user position: x, y, z
userData *user.User - Target user to retrieve the positions of.
func IsUserInSight(mySID, otherSID string) bool
IsUserInSight evalutes if the remote user is in sight or not
mySID string - Target SID of the user to check if the other user is in sight or not. otherSID string - Target SID of the other user to check if my user is in sight or not.
func IsWS()
IsWS called internally by commands.go
func PrintGridLayout(gl *GridLayout)
PrintGridLayout prints the grid layout into standard out
func Reconnect(meshEndPoint string, userData *user.User, callback func(error, string))
Reconnect returns the end point of the node for the client to reconnect to
meshEndPoint string - Internal server address to direct the user for reconnection. userData *user.User - Target user to direct the reconnection. callback func(error, publicServerEndpoint string) - Callback to be invoked when server operation of reconnection is completed.
func ServerSync(x, y, z int64, message []byte, syncLimit int, reliable bool)
ServerSync sends messages from the server to the clients within the view
This is meant to be used to synchronize NPC entities from the server to the client.
x int64 - X coordinate to be used to synchronize. y int64 - Y coordinate to be used to synchronize. z int64 - Z space to be used to synchronize. syncLimit int - Maximum number of users to synchronize with. reliable bool - If true, UDP will become RUDP.
func SetCustomFilter(customFilterID uint8, filter func(*user.User, []*UserEntity) []*UserEntity)
SetCustomFilter defines a custom filter that will be invoked when user client indicates while synchronizing. The purpose of the filter is to manipulate the users in sight for synchronizing.
customFilterID uint8 - Unique ID to identify the cuntom filter. filter func(userData *user.User, entities []*Entity) - Custom operation function to perform filterting.
func SetOnGridUpdated(callback func([]string))
SetOnGridUpdated registers a callback function on grid map updated.
The callback receives grid x1, y1 and grid x2, y2.
Each node has two sets of grid x and y
callback func(gridPositions []string) - Callback to be invoked when grids are updated.
func SetOnNPCTransported(callback func(*Npc))
SetOnNPCTransported registers a callback on NPC transport
callback func(*Npc) - Callback to be invoked when the target NPC is transported to another server based on X and Y.
func Setup(confpath string)
Setup setup Field module
confpath string - Absolute path of the configuration file to be loaded.
func Sync(userData *user.User, x, y, z int64, syncLimit int, msg []byte) (string, []*UserEntity, []*UserEntity, [][]byte)
Sync updates its own position and find others within the sight (fieldOfVisionSize) - z is used as a literal value instead of range like x and y. Use z value to create "different" area.
// returned values: meshNodeEndPoint, usersInSight, usersNotInSight, userMessageListInsight := field.Sync(userData, x, y, z, syncLimit, message) userData *user.User - User that will be synchronize the data. x int64 - X position of the user to synchronize. y int64 - Y position of the user to synchronize. z int64 - Z space of the user to synchronize. syncLimit int - Maximum number of users to synchronize with. msg []byte - Synchronize byte array data.
func SyncBroadcast( userData *user.User, x, y, z int64, syncLimit int, ver uint8, cmd uint16, msg []byte, reliable bool, )
SyncBroadcast sends a message to clients that are in sight with ver and cmd given
userData *user.User - User to send synchronize broadcast. x int64 - X coordinate to be used to synchronize. y int64 - Y coordinate to be used to synchronize. z int64 - Z space to be used to synchronize. ver uint8 - Command version to be used to be sent as broadcast. cmd uint16 - Command ID to be used to be sent as broadcast. msg []byte - Synchronize byte array data. reliable bool - If true, UDP will become RUDP.
func SyncNearbyGrids( userData *user.User, x, y, z int64, customFilterID uint8, syncLimit int, msg []byte, reliable bool, callback func(error, [][]byte), )
SyncNearbyGrids synchronize with nearby remote grids including remote grids
userData *user.User - User to synchronize. x int64 - X position of the user to synchronize. y int64 - Y position of the user to synchronize. z int64 - Z space of the user to synchronize. msg []byte - Synchronize byte array data. reliable bool - If true, UDP will become RUDP. callback func(error, messageList [][]byte) - Callback to be invoked when the oeration is completed.
func Update(userData *user.User, x int64, y int64, z int64) string
Update updates the given userData(client)'s position data and returns a mesh address if the client must reconnect to a new mesh node
userData *user.User - Target user to update its X, Y, and Z. x int64 - X coordinate to replace the current value with. y int64 - Y coordinate to replace the current value with. z int64 - Z space to replace the current value with.
GridData grid data with size and coordinate
type GridData struct {
// contains filtered or unexported fields
}
func GetMyGrids() []*GridData
GetMyGrids returns an array of grids of the node
func (gd *GridData) GetKey() string
GetKey returns the unique key of the grid
func (gd *GridData) GetPosition() (int64, int64)
GetPosition returns X and Y coordinate of the grid
x, y := gd.GetPosition()
GridLayout is a representation of the layout of grids
type GridLayout struct { N *GridLayout E *GridLayout S *GridLayout W *GridLayout Parent *GridLayout Root *GridData }
func NewGridLayout(gd *GridData, parent *GridLayout) *GridLayout
NewGridLayout creates a new GridLayout
func (gl *GridLayout) Add(gd *GridData)
Add adds a GridData to GridLayout
Npc is a server-controlled non-playable-character data struct.
Npc should be synchronized with clients via ServerSync and should NEVER be controlled by clients
type Npc struct { sync.RWMutex // contains filtered or unexported fields }
func GetNPCByID(id string) *Npc
GetNPCByID returns an NPC with matching ID
id string - Target NPC ID.
func NewNPC(x int64, y int64, z int64) (*Npc, error)
NewNPC creates a new non-player-character entity to be controlled on the server and synchronized by ServerSync.
x int64 - initial X coordinate of the new NPC to be created. y int64 - initial Y coordinate of the new NPC to be created. z int64 - initial Z space of the new NPC to be created. Z space is not coordinate, but it describes dimension or space.
func (n *Npc) Get(key string) interface{}
Get returns custom property value
func (n *Npc) GetID() string
GetID returns the unique ID of NPC
func (n *Npc) GetPosition() (int64, int64, int64)
GetPosition returns X, Y position and Z space
func (n *Npc) Incr(key string, delta int) (int, error)
Incr increments custom property (it must be an int) by delta
key string - Property name of the NPC to increment. delta int - Property value of the NPC to increment.
func (n *Npc) Set(key string, value interface{})
Set sets custom property
key string - Property name of the NPC to set. value interface{} - Property value of the NPC to set.
func (n *Npc) SetOnDiscard(cb func(*Npc))
SetOnDiscard registers a callback function to be invoked on DiscardNPCByID
cb func(*Npc) - Callback assigned to be invoked when the target NPC is deleted.
func (n *Npc) SetPosition(x int64, y int64, z int64)
SetPosition sets X, Y position and Z space
x int64 - X coordinate to assgin to the target NPC. y int64 - Y coordinate to assgin to the target NPC. z int64 - Z space to assign to the target NPC. Z is not coordinate, but it describes dimension or space.
UserEntity a user data structure
type UserEntity struct {
// contains filtered or unexported fields
}
func ApplyCustomFilter(customFilterID uint8, userData *user.User, uList []*UserEntity) []*UserEntity
ApplyCustomFilter executes pre-defined custom filter on the list of UserEntity to controll who to broadcast to
customFilterID uint8 - Unique ID to identify the cuntom filter. userData *user.User - User to apply the filter. uList []*UserEntity - An array of user entities that are in sight to be manipulated.
func FindUsersByPosition(x, y, z int64, howMany int) ([]*UserEntity, []string)
FindUsersByPosition returns an array of user entities and an array of user IDs within the given area (x, y, z)
x int64 - X coordinate to find the users with. y int64 - Y coordinate to find the users with. z int64 - Z space to find the users with. howmany int - Maximum number of users to find.
func (ue *UserEntity) GetCoordinates() (int64, int64)
GetCoordinates returns the X,Y position of UserEntity
func (ue *UserEntity) GetDistance() int64
GetDistance returns the distance between the user and you
func (ue *UserEntity) GetID() string
GetID returnns the user ID of the user
func (ue *UserEntity) GetSID() string
GetSID returns SID of the user