wiki.sine.space | sinespace

Difference between revisions of "Scripting/SScene"

From wiki.sine.space
Jump to: navigation, search
(Replaced content with "This page has moved to: https://docs.sine.space/v/scripting/client-scripting/scene/sscene")
 
Line 1: Line 1:
The SScene class represents the region the user is currently in.
+
This page has moved to: https://docs.sine.space/v/scripting/client-scripting/scene/sscene
 
+
==Members==
+
{{ScriptFunction|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')|5=
+
<pre> 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. </pre>}}
+
 
+
 
+
{{ScriptFunction|SGameObject|FindID|(string id);|Finds a single Game Object using ID and returns it |5=
+
''--add Scene Object Database to a Gameobject, set "123" to IDs and name the GameObject  "Cube".''<br>
+
local obj=Space.Scene.FindID("123")<br>
+
Space.Log(obj.Name);<br>
+
mat.SetColor("_Color",Color.New(0,0,1,1))<br>
+
''--print "Cube" if the object exists.''
+
}}
+
 
+
{{ScriptFunction|SAvatar|GetAvatar|(long id);|Get reference to avatar using ID |5=
+
local cur=Space.Scene.GetAvatar(43)<br>
+
Space.Log(cur.Username)
+
}}
+
 
+
{{ScriptFunction|SAvatar|GetAvatar|(string name);|Get  reference to avatar using Username|5=
+
local cur=Space.Scene.GetAvatar("TestUser")<br>
+
Space.Log(cur.ID)
+
}}
+
 
+
{{ScriptFunction|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.  |5=
+
local obj=Space.Scene.Find("Cube")<br>
+
Space.Scene.MarkObjectTemporary(obj)<br>
+
}}
+
 
+
{{ScriptFunction|void|OnEditModeAdd|(Closure e);|An event which is fired when object is added during Edit Mode|5=<pre>Space.Scene.OnEditModeAdd(AFunctionName)</pre>|6=<pre>--prints the total number of objects in the scene whenever a new object is added in edit mode
+
 
+
  function OnEditModeFunction()
+
  Space.Log(#Space.Scene.Objects)
+
  end
+
 
+
 
+
  Space.Scene.OnEditModeAdd(OnEditModeFunction)
+
</pre>}}
+
 
+
{{ScriptFunction|void|OnEditModeRemove|(Closure e);|An event which is fired when object is deleted during Edit Mode|5=<pre>Space.Scene.OnEditModeRemove(AFunctionName)</pre>|6=<pre>--prints the total number of objects in the scene whenever a new object is removed in edit mode
+
 
+
  function OnEditModeFunction()
+
  Space.Log(#Space.Scene.Objects)
+
  end
+
 
+
 
+
  Space.Scene.OnEditModeRemove(OnEditModeFunction)
+
</pre>}}
+
 
+
{{ScriptFunction|void|OnEditModeEnd|(Closure e);|An event which is fired when player exits Room Edit mode|5=
+
Space.Scene.OnEditModeEnd(AfunctionName)|6=<pre>--makes an object become active upon exiting edit mode
+
thisObject = Space.Host.ExecutingObject
+
targetObject = Space.Host.GetReference("target") --add to references in Scripting Runtime component
+
 
+
function OnEditModeFunction()
+
  targetObject.Active = false
+
end
+
 
+
 
+
Space.Scene.OnEditModeEnd(OnEditModeFunction)</pre>
+
}}
+
 
+
{{ScriptFunction|void|OnEditModeStart|(Closure e);|An event which is fired when player enters Room Edit mode|5=
+
Space.Scene.OnEditModeStart(AFunctionName)|6=<pre>--makes an object become active upon entering edit mode
+
thisObject = Space.Host.ExecutingObject
+
targetObject = Space.Host.GetReference("target") --add to references in Scripting Runtime component
+
 
+
function OnEditModeFunction()
+
  targetObject.Active = true
+
end
+
 
+
 
+
Space.Scene.OnEditModeStart(OnEditModeFunction)</pre>
+
}}
+
 
+
{{ScriptFunction|SGameObject|CreateGameObject|(string name);|Creates a new empty game object with the name 'Name' and returns a reference|5=
+
<pre>newObject = Space.Scene.CreateGameObject("potato")</pre>|6=<pre>--clicking this object will create an empty GameObject and place it above our avatar
+
 
+
  thisObject = Space.Host.ExecutingObject
+
  thisPlayer = Space.Scene.PlayerAvatar
+
 
+
 
+
  OnClick = function()
+
    createdObject = Space.Scene.CreateGameObject("potato") 
+
    createdObject.WorldPosition = thisPlayer.GameObject.WorldPosition + thisPlayer.GameObject.Up
+
  end
+
 
+
  thisObject.AddClickable()
+
  thisObject.Clickable.OnClick(OnClick)</pre>}}
+
 
+
{{ScriptFunction|SGameObject|CreateGameObject|([[Scripting/SResource|SResource]] resource);|Creates a game object from the specified resource|5=
+
<pre>res = Space.GetResource("Tomato")
+
--declare it as resource in your Scripting Runtime component
+
Space.Scene.CreateGameObject(res)
+
</pre>|6=<pre>--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)</pre>}}
+
 
+
{{ScriptFunction|void|OnPlayerJoin|(Closure e);|Event which fires whenever a player joins the region|5=}}
+
 
+
{{ScriptFunction|void|OnPlayerJoin|(Action<[[Scripting/SAvatar|SAvatar]]> callback)|Event which fires whenever a player joins the region|5=
+
<pre>--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
+
</pre>}}
+
 
+
{{ScriptFunction|void|OnPlayerLeave|(Action<long> callback)|Event which fires whenever a player leaves the region|5=
+
<pre> function playerLeft(id)
+
--
+
end
+
Space.Scene.OnPlayerLeave(playerLeft) </pre>|6=<pre>--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</pre>}}
+
 
+
{{ScriptFunction|void|OnPlayerLeave|(Closure e);|Event which fires whenever a player leaves the region|5=}}
+
 
+
 
+
 
+
{{ScriptFunction|SAvatar|GetAvatar|(long id);|Return an avatar with id.|5=
+
local cur=Space.Scene.GetAvatar(43)<br>
+
Space.Log(cur.Username)
+
}}
+
 
+
{{ScriptFunction|SAvatar|GetAvatar|(string name);|Return an avatar with id.|5=
+
local cur=Space.Scene.GetAvatar("TestUser")<br>
+
Space.Log(cur.ID)
+
}}
+
 
+
 
+
 
+
==Properties==
+
 
+
 
+
{{ScriptFunction|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.|5=
+
<pre> CurrentPlayer = Space.Scene.PlayerAvatar </pre>}}
+
 
+
{{ScriptFunction|SAvatar|Avatars[]|{ get; }|Returns a list of Avatars in the scene|5=
+
<pre>avatars = Space.Scene.Avatars  </pre>|6=<pre>--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) </pre>}}
+
 
+
{{ScriptFunction|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.'''|5=
+
<pre> objects = Space.Scene.Objects </pre>|6=<pre>--clicking this object will print a name of every object in the scene
+
--[better use a coroutine incase the foor loop exceeds allowed frame time]
+
  thisObject = Space.Host.ExecutingObject
+
 
+
  OnClickFunction = function()
+
    local objects = Space.Scene.Objects
+
    for i=1, #objects, 1 do
+
      Space.Log(objects[i].Name)
+
    end
+
  end
+
 
+
  thisObject.AddClickable()</pre>}}
+
 
+
{{ScriptFunction|string|Name|{ get; }|Returns the name of the current region|5=
+
<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=
+
<pre>RegionUrl = Space.Scene.Url </pre>|6=<pre>--the URL of this region will be placed in a UIText upon loading
+
--and also printed if this object is clicked
+
thisObject = Space.Host.ExecutingObject
+
textObject = Space.Host.GetReference("textObject") -- add to scripting runtime references
+
 
+
 
+
function OnClick()
+
  Space.Log(Space.Scene.Url)
+
end
+
 
+
textObject.UIText.Text = Space.Scene.Url
+
thisObject.AddClickable()
+
thisObject.Clickable.OnClick(OnClick)</pre>}}
+
 
+
{{ScriptFunction|long|Owner|{ get; }|Returns the avatar ID of the regions owner|5=
+
<pre>RegionOwner = Space.Scene.Owner</pre>|6=<pre>--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
+
</pre>}}
+
 
+
 
+
 
+
{{ScriptFunction|SAvatar|AllAvatars|(string name);|Return all avatars in the scene.|5=
+
local avatars=Space.Scene.AllAvatars<br>
+
Space.Log(#avatars)<br>
+
''--Print the length of AllAvatars.''|6=<pre> --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)
+
</pre>
+
}}
+
 
+
{{ScriptFunction|long|RegionID|(get);|Returns the region ID of current region.|5=
+
Space.Log(Space.Scene.RegionID)|6=<pre>--the RegionID of this region will be placed in a UIText upon loading
+
--and also printed if this object is clicked
+
thisObject = Space.Host.ExecutingObject
+
textObject = Space.Host.GetReference("textObject") -- add to scripting runtime references
+
 
+
 
+
function OnClick()
+
  Space.Log(Space.Scene.RegionID)
+
end
+
 
+
textObject.UIText.Text = Space.Scene.RegionID
+
thisObject.AddClickable()
+
thisObject.Clickable.OnClick(OnClick)</pre>
+
}}
+
 
+
{{ScriptFunction|long|InstanceID|(get);|Return the instance ID of current region.|5=
+
Space.Log(Space.Scene.InstanceID)|6=<pre>--the RegionID of this region will be placed in a UIText upon loading
+
--and also printed if this object is clicked
+
thisObject = Space.Host.ExecutingObject
+
textObject = Space.Host.GetReference("textObject") -- add to scripting runtime references
+
 
+
 
+
function OnClick()
+
  Space.Log(Space.Scene.InstanceID)
+
end
+
 
+
textObject.UIText.Text = Space.Scene.InstanceID
+
thisObject.AddClickable()
+
thisObject.Clickable.OnClick(OnClick)</pre>
+
}}
+
 
+
{{ScriptFunction|SLandmark|Landmarks[]|(get);|Return all Landmarks in the region|5=<pre>
+
        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
+
</pre>
+
}}
+
 
+
 
+
{{ScriptFunction|void|SwitchToInstance|(uint id);|Switch to a shard region.|5=
+
Space.Scene.SwitchToInstance(2)
+
}}
+
 
+
{{ScriptFunction|bool|PlayerIsAdmin|(get);|Return true if current player is the region admin.|5=
+
Space.Log(Space.Scene. PlayerIsAdmin)|6=<pre>--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</pre>
+
}}
+
 
+
{{ScriptFunction|bool|PlayerIsModerator|(get);|Return true if current player is Moderator.|5=
+
Space.Log(Space.Scene.PlayerIsModerator)|6=<pre>--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</pre>
+
}}
+
 
+
{{ScriptFunction|bool|PlayerIsOwner|{ get; }|Returns whether the current player is the owner of the region|5=
+
<pre>isOwner = Space.Scene.PlayerIsOwner </pre>|6=<pre>--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</pre>}}
+
 
+
{{ScriptFunction|bool|PlayerIsTrusted|{ get; }|Returns whether the current player is the owner of the region|5=
+
<pre>isOwner = Space.Scene.PlayerIsOwner </pre>|6=<pre>--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</pre>}}
+
 
+
 
+
 
+
{{ScriptFunction|bool|IsInEditMode|(get);|Returns true if current player is in edit mode.|5=
+
Space.Log(Space.Scene.IsInEditMode)|6=<pre>--makes an object only active when this player is in Edit Mode
+
thisObject = Space.Host.ExecutingObject
+
targetObject = Space.Host.GetReference("target") --add to references in Scripting Runtime component
+
 
+
function OnUpdateFunction()
+
  targetObject.Active = Space.Scene.IsInEditMode
+
end
+
 
+
 
+
thisObject.OnUpdate(OnUpdateFunction)</pre>
+
}}
+
 
+
{{ScriptFunction|SGameObject|Floors|(get);|Return an array of all floors in the region.|5=
+
for i=1,#Space.Scene.Floors do<br>
+
&nbsp;&nbsp;&nbsp;&nbsp;Space.Log(Space.Scene.Floors[i].Name)<br>
+
end<br>
+
''--print all floor names.''
+
}}
+
 
+
 
+
 
+
{{Scripting Navbox}}
+

Latest revision as of 07:14, 19 September 2022

This page has moved to: https://docs.sine.space/v/scripting/client-scripting/scene/sscene