Deprecated Functions
Legacy functions
The following functions are all legacy and should be avoided. They still work, but in the future they might stop being supported. All these examples include links to alternative ways to obtain the same information or achieve the same results.
Player enters or leaves scene
Whenever an avatar steps inside or out of the parcels of land that make up your scene, or teleports in or out, this creates an event you can listen to. This event is triggered by all avatars, including the player's.
import {
onEnterSceneObservable,
onLeaveSceneObservable,
} from '@dcl/sdk/observables'
onEnterSceneObservable.add((player) => {
console.log('player entered scene: ', player.userId)
})
onLeaveSceneObservable.add((player) => {
console.log('player left scene: ', player.userId)
})The observables onEnterScene and onLeaveScene imported from '@dcl/sdk/observables' are also deprecated. The correct functions are named the same, but imported from '@dcl/sdk/src/players' instead. In the example below you can see both variations, first the deprecated version, then the proper one.
Player connects or disconnects
Get the full list of currently connected players from getConnectedPlayers.
Whenever another player starts or stops being rendered by the local engine, this creates an event you can listen to. Players may or may not be standing on the same scene as you, but must be within visual range (not necessarily in sight). The onPlayerConnectedObservable detects both when a player newly connects nearby or comes close enough to be in visual range, likewise the onPlayerDisconnectedObservable detects when a player ends their session or or walks far away.
Keep in mind that if other players are already being rendered in the surroundings before the player has loaded your scene, this event won't notify the newly loaded scene of the already existing players. If you need to keep track of all current players, you can query for existing players upon scene loading, and then listen to this event for updates.
Query all players in scene
You can also get the full list of players who are currently on your scene and being rendered by calling getPlayersInScene().
Player plays animation
Whenever the player plays an emote (dance, clap, wave, etc), you can detect this event.
The event includes the following information:
expressionId: Name of the emote performed (ie: wave, clap, kiss)
Player changes profile
Whenever the player makes a change to their profile, the onProfileChanged event is called. These changes may include putting on different wearables, changing name, description, activating portable experiences, etc.
Event data includes only the ID of the player and a version number for that avatar's profile, according to the catalyst server. Every time a change is propagated, the version number increases by 1.
When this event is triggered, you can then use the getUserData() function to fetch the latest version of this information, including the list of wearables that the player has on. You may need to add a slight delay before you call getUserData() to ensure that the version this function returns is up to date.
Scene finished loading
When the scene finishes loading, the onSceneReadyObservable gets called. This works both if the player loads straight into the scene, or if the player walks up to the scene from somewhere else. When all of the content in the scene has finished its initial load, including heavy models, etc, this event is called.
Deprecated player data methods
To obtain information from the current player that's running the scene, use getUserData().
The example below imports the ~system/UserIdentity namespace and runs getUserData().
You can obtain data from other players that are nearby, by calling getPlayerData(), passing the id of a Decentraland account.
Both getUserData() and getPlayerData() return the same data structure available via the content API. See Data from any player
getPlayerData() can only fetch data from players who are currently nearby. They don't have to be necessarily standing in the same scene, but in visual range, that's because this information is being fetched from the local engine that's rendering these avatars. To try this out in preview, open a second tab and log in with a different account.
The getUserPublicKey() and getUserAccount() functions are also deprecated. Please use getPlayer() instead. See User data.
Get skybox time
Get realm
Is preview mode
Player clicks on another player
Whenever the player clicks on another player, you can detect an event.
The event includes the following data:
userId: The id of the clicked playerray: Data about the ray traced by the clickdirection: Vector3 A normalized Vector3 that represents the direction from the point of origin of the click to the hit point of the click.distance: number The distance in meters from the point of origin to the hit point.origin: Vector3 The point of origin of the click, the position of the player who did the click, relative to the scene.
Player locks/unlocks cursor
Players can switch between two cursor modes: locked cursor mode to control the camera or unlocked cursor mode for moving the cursor freely over the UI.
Players unlock the cursor by clicking the Right mouse button or pressing the Esc key, and lock the cursor back by clicking anywhere in the screen.
To react each time a player switches between these two modes, use the onChange function on the PointerLock component, see Event listeners.
Player changes realm or island
Players in decentraland exist in separate realms, and in separate islands within each realm. Players in different realms or islands cant see each other, interact or chat with each other, even if they're standing on the same parcels.
Each time the player changes realms or island, the onRealmChangedObservable event gets called.
This event includes the following fields:
serverName: string; The catalyst server name.
room: string; The island name.
displayName: string; The catalyst server name followed by a - and the island name. For example
unicorn-x011.domain: string; The url to the catalyst server being used.
As players move through the map, they may switch islands to be grouped with those players who are now closest to them. Islands also shift their borders dynamically to fit a manageable group of people in each. So even if a player stands still they could be changed island as others enter and leave surrounding scenes.
If your scene relies on a 3rd party server to sync changes between players in real time, then you may want to only share data between players that are grouped in a same realm+island, so it's a good practice to change rooms in the 3rd party server whenever players change island.
Crypto functions
Video Events
When a video changes its playing status, the onVideoEvent observable receives an event.
The input of a video event contains the following properties:
videoClipId( string): The ID for the entity that changed status.componentId(string): The ID of the entity that changed status.currentOffset(number): The current value of theseekproperty on the video. This value shows seconds after the video's original beginning. -1 by default.totalVideoLength(number ): The length in seconds of the entire video. -1 if length is unknown.videoStatus: The value for the new video status of theVideoTexture, expressed as a value from theVideoStatusenum. This enum can hold the following possible values:VideoStatus.NONE= 0,VideoStatus.ERROR= 1,VideoStatus.LOADING= 2,VideoStatus.READY= 3,VideoStatus.PLAYING= 4,VideoStatus.BUFFERING= 5
Last updated