PlayerRemoteNetworkComponent
PlayerRemoteNetworkComponent
Description
The class which handles interpolating player actions for non-controlled players on other clients.
Parent
Functions
new
Description
Creates a new network component for the given player.
Definition
new(Player player)
Arguments
| Player | player | The player whose position and state is being managed by this component. |
|---|
Return Values
| Player | instance | The created instance. |
|---|
Code
function PlayerRemoteNetworkComponent.new(player)
local self = PlayerNetworkComponent.new(player, PlayerRemoteNetworkComponent _mt)
-- The player.
self.player = player
return self
end
readUpdateStream
Description
Reads the data from the incoming network stream and handles the state.
Definition
readUpdateStream(integer streamId, Connection connection, integer timestamp)
Arguments
| integer | streamId | The id of the stream from which to read. |
|---|---|---|
| Connection | connection | The connection between the server and the target client. |
| integer | timestamp | The current timestamp for synchronisation purposes. |
Code
function PlayerRemoteNetworkComponent:readUpdateStream(streamId, connection, timestamp)
PlayerRemoteNetworkComponent:superClass().readUpdateStream( self , streamId, connection, timestamp)
local isControlled = streamReadBool(streamId)
local skipModel = streamReadBool(streamId)
local skipMover = streamReadBool(streamId)
self.player:updateControlledState(isControlled, skipModel, skipMover)
local receivedPositionX = streamReadFloat32(streamId)
local receivedPositionY = streamReadFloat32(streamId)
local receivedPositionZ = streamReadFloat32(streamId)
local receivedYaw = NetworkUtil.readCompressedAngle(streamId)
local isGrounded = streamReadBool(streamId)
local isFirstPerson = streamReadBool(streamId)
local isCrouching = streamReadBool(streamId)
local isVisible = streamReadBool(streamId)
self.player.graphicsComponent:setGraphicsRootNodeVisibility(isVisible)
local interpolator = self.player.positionalInterpolator
interpolator:setTargetPosition(receivedPositionX, receivedPositionY, receivedPositionZ)
interpolator:setTargetYaw(receivedYaw)
interpolator:startNetworkNewPhase()
self.player.mover.isGrounded = isGrounded
self.player.mover:setIsCrouching(isCrouching)
self.player.isFirstPerson = isFirstPerson
end