Client
Client is storing variables and running functions on all connected user devices (clients). It contains everything needed for the local simulation.
Client is nil in the Server execution context.
Properties
Triggered when pressing action 1 button. (space bar by default with a keyboard)
Client.Action1 = function() print("action1") end
Triggered when releasing action 1 button. (space bar by default with a keyboard)
Client.Action1Release = function() print("action1 released") end
Triggered when pressing action 2 button. (left click by default when using a mouse)
(turned off when Pointer is hidden)
Client.Action2 = function() print("action2") end
Triggered when releasing action 2 button. (left click by default when using a mouse)
(turned off when Pointer is hidden)
Client.Action2Release = function() print("action2 released") end
Triggered when pressing action 3 button. (right click by default when using a mouse)
(turned off when Pointer is hidden)
Client.Action3 = function() print("action3") end
Triggered when releasing action 3 button. (left click by default when using a mouse)
(turned off when Pointer is hidden)
Client.Action3Release = function() print("action3 released") end
Triggered when what we call the "analog pad" or "A-pad" is activated.
The A-pad maps to the mouse mouvements when using a mouse.
When using a touch screen, the A-pad is activated when moving the finger after a touch down from anywhere outside the DirectionalPad.
The function receives 2 arguments dx & dy to represent the delta compared to the previous position. When both dx & dy are equal to 0.0, it means the pad is back to idle state.
(turned off when Pointer is hidden)
-- DEFAULT IMPLEMENTATION -- (those functions can be redefined) Client.AnalogPad = function(dx, dy) Player.LocalRotation = Rotation(0, dx * 0.01, 0) * Player.LocalRotation Player.Head.LocalRotation = Rotation(-dy * 0.01, 0, 0) * Player.Head.LocalRotation local dpad = require("controls").DirectionalPadValues Player.Motion = (Player.Forward * dpad.Y + Player.Right * dpad.X) * 50 end Client.DirectionalPad = function(x, y) Player.Motion = (Player.Forward * y + Player.Right * x) * 50 end
Shortcut to DirectionalPad.
This function is triggered when receiving an Event.
Events are useful to establish communication between the Server and all connected Players.
Client.DidReceiveEvent = function(event) -- do something with the event -- respond (if it makes sense in the situation) local response = Event() response.content = "Here's my response!" response:SendTo(event.Sender) end
Triggered when what we call the "directional pad" or "D-pad" is activated.
The D-pad maps to the direction keys when using a keyboard (WASD by default).
When using a touch screen, the D-pad is by default represented by the virtual pad that's on the left side of the screen.
The function receives 2 arguments x & y to represent 8 possible directions or the idle state:
0,0 -> IDLE
0,1 -> UP, 1,0 -> RIGHT, 0,-1 -> DOWN, -1,0 -> LEFT
√2,√2 -> UP/RIGHT, √2,-√2 -> DOWN/RIGHT, -√2,-√2 -> DOWN/LEFT, -√2,√2 -> UP/LEFT
The norm (or length) of the (x,y) vector is always 1.0, or 0.0 when idle.
-- DEFAULT IMPLEMENTATION -- (those functions can be redefined) Client.DirectionalPad = function(x, y) Player.Motion = (Player.Forward * y + Player.Right * x) * 50 end Client.AnalogPad = function(dx, dy) Player.LocalRotation = Rotation(0, dx * 0.01, 0) * Player.LocalRotation Player.Head.LocalRotation = Rotation(-dy * 0.01, 0, 0) * Player.Head.LocalRotation local dpad = require("controls").DirectionalPadValues Player.Motion = (Player.Forward * dpad.Y + Player.Right * dpad.X) * 50 end
Triggered when a message is submitted through the chat input. Receives the message (string) in parameter.
In the default implementation, messages aren't sent to other connected users.
But it's easy to do using Event and Client.DidReceiveEvent.
-- the default implementation does this: Client.OnChat = function(payload) local message = payload.message -- accessing the message value from the payload table param print(Player.Username .. ": " .. message) Player:TextBubble(message, 3, true) end
Triggered when a player joins the game.
It doens't mean the Player has spawned, just that there's a new connection.
Client.OnPlayerJoin = function(player) print(player.Username .. " joined the game!") end
Triggered when a player leaves the game.
Client.OnPlayerLeave = function(player) print("So long " .. player.Username .. "!") end
Triggered when the game starts.
This is the very first Lua function to be called, a good place to initialize variables.
Client.OnStart = function() -- add local Player to the World and place it above the center of the map World:AddChild(Player) Player.Position = {Map.Width / 2, Map.Height + 10, Map.Depth / 2} end
Executed ~30 times per second. Provides the elapsed time in seconds as parameter.
-- executed ~30 times per second on each user device Client.Tick = function(dt) print("elapsed:", dt, "seconds") end
This function is triggered when the user is about to open the menu that offers to resume or leave the experience.
Client.WillOpenGameMenu = function() -- possible things to do: -- - save user data -- - inform other users -- - if in a chat experience, set status as "away from keyboard" or something end