Skip to content

SmartObject

SmartObject is a top-level container for some complex objects and inherits everything from CoreObject. Note that some properties, such as collision or visibility, may not be respected by a SmartObject.

Properties

Property Name Return Type Description Tags
team integer Assigns the SmartObject to a team. Value range from 0 to 4. 0 is neutral team. Read-Write
isTeamColorUsed boolean If true, and the SmartObject has been assigned to a valid team, players on that team will see one color, while other players will see another color. Requires a SmartObject that supports team colors. Read-Write

Functions

Function Name Return Type Description Tags
GetSmartProperties() table Returns a table containing the names and values of all smart properties on a SmartObject. None
GetSmartProperty(string) value, boolean Given a property name, returns the current value of that property on a SmartObject. Returns the value, which can be an integer, number, boolean, string, Vector3, Rotator, Color, or nil if not found. Second return value is a boolean, true if the property was found and false if not. None
SetSmartProperty(string, value) boolean Sets the value of an exposed property. Value can be of type number, boolean, string, Vector3, Rotation or Color, but must match the type of the property. Returns true if the property was set successfully and false if not. None

Examples

Example using:

GetSmartProperties

In this example, a script is placed as the child of a SmartObject in the hierarchy. If the object has any smart properties, those are printed out to the Event Log.

local SMART_OBJECT = script.parent

if SMART_OBJECT:IsA("SmartObject") then
    print("Smart properties for " .. SMART_OBJECT.name)
    local properties = SMART_OBJECT:GetSmartProperties()
    for key,value in pairs(properties) do
        print(key .. " = " .. tostring(value))
    end
else
    print(SMART_OBJECT.name .. " is not a Smart Object.")
end

See also: CoreObject.parent | Other.IsA


Example using:

GetSmartProperty

SetSmartProperty

In this example, we control the "Sun Light" object in the hierarchy to implement a sort of day/night cycle. We achieve this by rotating the sun object, but it's also necessary to modify the sun's color and light intensity over time.

local SUN = script.parent
local SUNRISE_COLOR = Color.PURPLE
local SPEED = 10

local defaultSunColor = SUN:GetSmartProperty("Light Color")
local degrees = 30

function Tick(deltaTime)
    degrees = degrees + deltaTime * SPEED
    if degrees > 360 then
        degrees = degrees - 360
    elseif degrees < 0 then
        degrees = degrees + 360
    end

    -- 0 at midday, 1 at both horizons
    local cycle = (math.cos(math.rad((degrees+90) * 2)) * 0.5) + 0.5

    local quat = Quaternion.New(Vector3.New(0,1,0), degrees)
    SUN:SetWorldRotation(quat:GetRotation())
    SUN:SetSmartProperty("Light Color", Color.Lerp(SUNRISE_COLOR, defaultSunColor, cycle))
    SUN:SetSmartProperty("Intensity", 2 + (1.2 * cycle))
end

See also: CoreObject.parent | Color.PURPLE | Quaternion.New | Vector3.New



Last update: January 5, 2022