wiki.sine.space | sinespace

Difference between revisions of "Scripting/SScene"

From wiki.sine.space
Jump to: navigation, search
Line 166: Line 166:
  
 
{{ScriptFunction|string|Name|{ get; }|Returns the name of the current region|5=
 
{{ScriptFunction|string|Name|{ get; }|Returns the name of the current region|5=
<pre>RegionName = Space.Scene.Name </pre>}}
+
<pre>RegionName = Space.Scene.Name </pre>|6=<pre>--this object will be clickable only if it is in a region called "X Region"
 +
--((for example: limiting object functionality to a specific region))
 +
 
 +
thisObject = Space.Host.ExecutingObject
 +
 
 +
 
 +
OnClick = function()
 +
Space.Log("We are in X Region")
 +
end
 +
 
 +
 
 +
if Space.Scene.Name == "X Region" then
 +
thisObject.AddClickable()
 +
thisObject.Clickable.OnClick(OnClick)
 +
end</pre>}}
  
 
{{ScriptFunction|string|Url|{ get; }|Returns the URL of the current region|5=
 
{{ScriptFunction|string|Url|{ get; }|Returns the URL of the current region|5=

Revision as of 12:22, 25 November 2021

The SScene class represents the region the user is currently in.

Members

Find

SGameObject Find (string name);

Finds a single Game Object matching 'Name' and returns it. Can use '/' characters to designate a path (e.g. 'Parent/Child' returns Child with 'Parent')

 hand = Space.Scene.Find("Hand");
--This returns the GameObject named Hand.

hand = Space.Scene.Find("/Hand");
--This returns the GameObject named Hand.
--Hand must not have a parent in the Hierarchy view.

hand = Space.Scene.Find("/Monster/Arm/Hand");
--This returns the GameObject named Hand,
--which is a child of Arm > Monster.
--Monster must not have a parent in the Hierarchy view.

hand = Space.Scene.Find("Monster/Arm/Hand");
--This returns the GameObject named Hand,
--which is a child of Arm > Monster. 



FindID

SGameObject FindID (string id);

Finds a single Game Object using ID and returns it

--add Scene Object Database to a Gameobject, set "123" to IDs and name the GameObject "Cube".

local obj=Space.Scene.FindID("123")
Space.Log(obj.Name);
mat.SetColor("_Color",Color.New(0,0,1,1))

--print "Cube" if the object exists.


GetAvatar

SAvatar GetAvatar (long id);

Get reference to avatar using ID

local cur=Space.Scene.GetAvatar(43)
Space.Log(cur.Username)


GetAvatar

SAvatar GetAvatar (string name);

Get reference to avatar using Username

local cur=Space.Scene.GetAvatar("TestUser")
Space.Log(cur.ID)


MarkObjectTemporary

void MarkObjectTemporary (SGameObject obj);

Marks the Game Object as temporary. Temporary objects will be cleaned up automatically if the script is destroyed or reset. Can be used to handle cleanup from procedural objects created by a script.

local obj=Space.Scene.Find("Cube")
Space.Scene.MarkObjectTemporary(obj)


OnEditModeAdd

void OnEditModeAdd (Closure e);

An event which is fired when object is added during Edit Mode

Space.Scene.OnEditModeAdd(function ()
    Space.Log("Edit Mode Add")
end)


OnEditModeRemove

void OnEditModeRemove (Closure e);

An event which is fired when object is deleted during Edit Mode

Space.Scene.OnEditModeRemove(function ()
    Space.Log("Edit Mode Remove")
end)


OnEditModeEnd

void OnEditModeEnd (Closure e);

An event which is fired when player exits Room Edit mode

Space.Scene.OnEditModeEnd(function ()

    Space.Log("End Edit Mode")

end)


OnEditModeStart

void OnEditModeStart (Closure e);

An event which is fired when player enters Room Edit mode

Space.Scene.OnEditModeStart(function ()

    Space.Log("Enter Edit Mode")

end)


CreateGameObject

SGameObject CreateGameObject (string name);

Creates a new empty game object with the name 'Name' and returns a reference

newObject = Space.Scene.CreateGameObject("potato")


CreateGameObject

SGameObject CreateGameObject (SResource resource);

Creates a game object from the specified resource

res = Space.GetResource("Tomato") 
--declare it as resource in your Scripting Runtime component
Space.Scene.CreateGameObject(res)
 


--clicking this object will create a GameObject from a resource and place it above our avatar

thisObject = Space.Host.ExecutingObject
thisPlayer = Space.Scene.PlayerAvatar

resource = Space.GetResource("Tomato")  --add it as resource in your Scripting Runtime component

OnClick = function()
createdObject = Space.Scene.CreateGameObject(resource)    
createdObject.WorldPosition = thisPlayer.GameObject.WorldPosition + thisPlayer.GameObject.Up
end

thisObject.AddClickable()
thisObject.Clickable.OnClick(OnClick)

OnPlayerJoin

void OnPlayerJoin (Closure e);

Event which fires whenever a player joins the region


OnPlayerJoin

void OnPlayerJoin (Action<SAvatar> callback)

Event which fires whenever a player joins the region

--Place this script in a UIText object and it will
--update itself with the name of the last player joined

function updateText(Av) --we include "Av" here because the event gives us a reference to the Avatar that joined
Space.Host.ExecutingObject.UIText.Text= "Last player joined: " .. Av.Username
end

Space.Scene.OnPlayerJoin(updateText) -- updateText will now be called everytime a player joins


OnPlayerLeave

void OnPlayerLeave (Action<long> callback)

Event which fires whenever a player leaves the region

 function playerLeft(id) 
--
end
Space.Scene.OnPlayerLeave(playerLeft) 


--Place this script in a UIText object and it will
--update itself with the name of the last player left

function updateText(Av) --we include "Av" here because the event gives us a reference to the Avatar that has left
Space.Host.ExecutingObject.UIText.Text= "Last player left: " .. Av.Username
end

Space.Scene.OnPlayerLeave(updateText) -- updateText will now be called every time a player leaves

OnPlayerLeave

void OnPlayerLeave (Closure e);

Event which fires whenever a player leaves the region



GetAvatar

SAvatar GetAvatar (long id);

Return an avatar with id.

local cur=Space.Scene.GetAvatar(43)
Space.Log(cur.Username)


GetAvatar

SAvatar GetAvatar (string name);

Return an avatar with id.

local cur=Space.Scene.GetAvatar("TestUser")
Space.Log(cur.ID)



Properties

PlayerAvatar

SAvatar PlayerAvatar { get; }

Returns the current player avatar. If this script is calling this upon initialisation, the Player may not exist yet, and you will want to wait a few frames until the avatar is present before continuing.

 CurrentPlayer = Space.Scene.PlayerAvatar 


Avatars[]

SAvatar Avatars[] { get; }

Returns a list of Avatars in the scene

avatars = Space.Scene.Avatars  


--this script, once clicked, will get all avatars in the scene
--and print their ID, Username and Title (excluding self)
--(Example: scoreboards/radars/scanners/game machines)

thisGameObject = Space.Host.ExecutingObject

OnClick = function()
Avatars = Space.Scene.Avatars

      if #Avatars > 0 then
            for var=1, #Avatars do
        local ID = Avatars[var].ID
        local Username = Avatars[var].Username
        local Title = Avatars[var].Title
        if Title == "" then Title = "None" end

         Space.Log("ID: " .. ID .. ", Username: " .. Username .. ", Title: " .. Title)
            end

      else
      Space.Log("No Avatars")
      end
end
 
thisGameObject.AddClickable() 
thisGameObject.Clickable.Tooltip = "Click to print all avatars' information"
thisGameObject.Clickable.OnClick(OnClick) 

Objects[]

SGameObject Objects[] { get; }

Returns a list of Objects in the scene. IMPORTANT: This function is slow, you should cache the result and avoid calling this every frame.

 objects = Space.Scene.Objects 


Name

string Name { get; }

Returns the name of the current region

RegionName = Space.Scene.Name 


--this object will be clickable only if it is in a region called "X Region"
--((for example: limiting object functionality to a specific region))

thisObject = Space.Host.ExecutingObject


OnClick = function()
Space.Log("We are in X Region")
end


if Space.Scene.Name == "X Region" then
thisObject.AddClickable()
thisObject.Clickable.OnClick(OnClick)
end

Url

string Url { get; }

Returns the URL of the current region

RegionUrl = Space.Scene.Url 


Owner

long Owner { get; }

Returns the avatar ID of the regions owner

RegionOwner = Space.Scene.Owner


--this script will make this object only clickable for the region owner

thisObject = Space.Host.ExecutingObject
thisPlayer = Space.Scene.PlayerAvatar

OnClick = function()
Space.Log("Do Something")
end

if thisPlayer.ID == Space.Scene.Owner then 
thisObject.AddClickable()
thisObject.Clickable.OnClick(OnClick)
end


AllAvatars

SAvatar AllAvatars (string name);

Return all avatars in the scene.

local avatars=Space.Scene.AllAvatars

Space.Log(#avatars)

--Print the length of AllAvatars.


 --this script, once clicked, will get all avatars in the scene
--and print their ID, Username and Title (including self)
--(Example: scoreboards/radars/scanners/game machines)

thisGameObject = Space.Host.ExecutingObject

OnClick = function()
allAvatars = Space.Scene.AllAvatars

    for var=1, #allAvatars do
local ID = allAvatars[var].ID
local Username = allAvatars[var].Username
local Title = allAvatars[var].Title
if Title == "" then Title = "None" end

 Space.Log("ID: " .. ID .. ", Username: " .. Username .. ", Title: " .. Title)
    end

end

 
thisGameObject.AddClickable() 
thisGameObject.Clickable.Tooltip = "Click to print all avatars' information"
thisGameObject.Clickable.OnClick(OnClick) 
 

RegionID

long RegionID (get);

Returns the region ID of current region.

Space.Log(Space.Scene.RegionID)


InstanceID

long InstanceID (get);

Return the instance ID of current region.

Space.Log(Space.Scene.InstanceID)


Landmarks[]

SLandmark Landmarks[] (get);

Return all Landmarks in the region

        local landmark = Space.Scene.Landmarks
        for i = 1,#landmark do
    if landmark[i].Type == LandmarkType.LandingZone then
        Space.Log("LandingZone")
        end
                Space.Log(landmark[i].Name .. " ".. landmark[i].Position.ToString())
        end



SwitchToInstance

void SwitchToInstance (uint id);

Switch to a shard region.

Space.Scene.SwitchToInstance(2)


PlayerIsAdmin

bool PlayerIsAdmin (get);

Return true if current player is the region admin.

Space.Log(Space.Scene. PlayerIsAdmin)


--this script will make the object a clickable, but only if player is region Admin
--(Example: Access control)

thisGameObject = Space.Host.ExecutingObject

OnClick = function()
Space.Log("this click was only possible because you are a region Admin")
end

if Space.Scene.PlayerIsAdmin then
thisGameObject.AddClickable()
thisGameObject.Clickable.Tooltip = "Click me Admin"
thisGameObject.Clickable.OnClick(OnClick) 
end

PlayerIsModerator

bool PlayerIsModerator (get);

Return true if current player is Moderator.

Space.Log(Space.Scene.PlayerIsModerator)


--this script will make the object a clickable, but only if player is Moderator in this region
--(Example: Access control)

thisGameObject = Space.Host.ExecutingObject

OnClick = function()
Space.Log('this click was only possible because you are Moderator in this region')
end

if Space.Scene.PlayerIsModerator then
thisGameObject.AddClickable()
thisGameObject.Clickable.Tooltip = "Click me Moderator"
thisGameObject.Clickable.OnClick(OnClick) 
end

PlayerIsOwner

bool PlayerIsOwner { get; }

Returns whether the current player is the owner of the region

isOwner = Space.Scene.PlayerIsOwner 


--this script will make the object a clickable, but only if player is region owner
--(Example: Access control)

thisGameObject = Space.Host.ExecutingObject

OnClick = function()
Space.Log("this click was only possible because you are a region Owner")
end

if Space.Scene.PlayerIsOwner then
thisGameObject.AddClickable()
thisGameObject.Clickable.Tooltip = "Click me"
thisGameObject.Clickable.OnClick(OnClick) 
end

PlayerIsTrusted

bool PlayerIsTrusted { get; }

Returns whether the current player is the owner of the region

isOwner = Space.Scene.PlayerIsOwner 


--this script will make the object a clickable, but only if player is Trusted in this region
--(Example: Access control)

thisGameObject = Space.Host.ExecutingObject

OnClick = function()
Space.Log("this click was only possible because you are Trusted in this region")
end

if Space.Scene.PlayerIsTrusted then
thisGameObject.AddClickable()
thisGameObject.Clickable.Tooltip = "Click me Trusted"
thisGameObject.Clickable.OnClick(OnClick) 
end


IsInEditMode

bool IsInEditMode (get);

Returns true if current player is in edit mode.

Space.Log(Space.Scene. IsInEditMode)


Floors

SGameObject Floors (get);

Return an array of all floors in the region.

for i=1,#Space.Scene.Floors do

    Space.Log(Space.Scene.Floors[i].Name)
end

--print all floor names.