func (player *playerData) sendPositionLook(writer io.Writer) os.Error { return proto.WriteEntityTeleport( writer, player.entityId, player.position.ToAbsIntXyz(), &player.look) }
// Generates any packets needed to update clients as to the position and // velocity of the object. // It assumes that the clients have either been sent packets via this method // before, or that the previous position/velocity sent was generated from the // LastSentPosition and LastSentVelocity attributes. func (obj *PointObject) SendUpdate(writer io.Writer, entityId EntityId, look *LookBytes) (err os.Error) { curPosition := obj.position.ToAbsIntXyz() dx := curPosition.X - obj.LastSentPosition.X dy := curPosition.Y - obj.LastSentPosition.Y dz := curPosition.Z - obj.LastSentPosition.Z if dx != 0 || dy != 0 || dz != 0 { if dx >= -128 && dx <= 127 && dy >= -128 && dy <= 127 && dz >= -128 && dz <= 127 { err = proto.WriteEntityRelMove( writer, entityId, &RelMove{ RelMoveCoord(dx), RelMoveCoord(dy), RelMoveCoord(dz), }, ) } else { err = proto.WriteEntityTeleport( writer, entityId, curPosition, look) } if err != nil { return } obj.LastSentPosition = *curPosition } curVelocity := obj.velocity.ToVelocity() if curVelocity.X != obj.LastSentVelocity.X || curVelocity.Y != obj.LastSentVelocity.Y || curVelocity.Z != obj.LastSentVelocity.Z { if err = proto.WriteEntityVelocity(writer, entityId, curVelocity); err != nil { return } obj.LastSentVelocity = *curVelocity } return }