Roku Developer Program

Join our online forum to talk to Roku developers and fellow channel creators. Ask questions, share tips with the community, and find helpful resources.
cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
morega
Visitor

How to call BrightScript function from Scene Graph

Hi,

In Scene Graph script code, how do I call functions in my main.brs ?


Thanks!
0 Kudos
8 REPLIES 8
EnTerr
Roku Guru

Re: How to call BrightScript function from Scene Graph

Hardly.  😉
0 Kudos
morega
Visitor

Re: How to call BrightScript function from Scene Graph

"EnTerr" wrote:
Hardly.  😉

?
0 Kudos
EnTerr
Roku Guru

Re: How to call BrightScript function from Scene Graph

"morega" wrote:
?

You can't. I can't either. Nobody can.

In such RSG cases, the use of Rube Goldberg contraptions might be in order, hence "hardly" was apt.
[spoiler=Rube Goldberg:2zk15m1q][/spoiler:2zk15m1q]
0 Kudos
morega
Visitor

Re: How to call BrightScript function from Scene Graph

"EnTerr" wrote:
"morega" wrote:
?

You can't. I can't either. Nobody can.

In such RSG cases, the use of Rube Goldberg contraptions might be in order, hence "hardly" was apt.
[spoiler=Rube Goldberg:y9s4r4ox][/spoiler:y9s4r4ox]

That's wonderful...
0 Kudos
btpoole
Channel Surfer

Re: How to call BrightScript function from Scene Graph

morega
Wondering if you were able to figure out how to call a function in the main from a scene. I am currently running into a similar situation.
0 Kudos
Veeta
Visitor

Re: How to call BrightScript function from Scene Graph

Here's an example:

<?xml version="1.0" encoding="utf-8" ?> 
<component name="MainScene" extends="Scene" >
  <script type="text/brightscript" uri="pkg:/source/main.brs" />
  <script type="text/brightscript">
  <![CDATA[
    Function init()
      m.top.findNode("Number").text = somethingCalledFromSceneGraph()
    End Function
  ]]>
  </script>

  <children>
    <Label
      id="Number"
      size="50"
      translation="[0,0]"/>
  </children>

</component>


Function Main(args As Dynamic) As void
    screen = CreateObject("roSGScreen")
    scene = screen.CreateScene("MainScene")
    port = CreateObject("MessagePort")
    screen.SetMessagePort(port)
    screen.show()
    
    while true
      msg = wait(0, port)    
    end while
End Function

Function somethingCalledFromSceneGraph() as String
  return "Text from main.brs"
End Function


Just know that there are restrictions on what you can do in that function.  These are documented at BrightScript Support
0 Kudos
EnTerr
Roku Guru

Re: How to call BrightScript function from Scene Graph

"Veeta" wrote:
Here's an example:
[spoiler=contraption:zvqepvoo]
<?xml version="1.0" encoding="utf-8" ?> 
<component name="MainScene" extends="Scene" >
  <script type="text/brightscript" uri="pkg:/source/main.brs" />
  <script type="text/brightscript">
  <![CDATA[
    Function init()
      m.top.findNode("Number").text = somethingCalledFromSceneGraph()
    End Function
  ]]>
  </script>

  <children>
    <Label
      id="Number"
      size="50"
      translation="[0,0]"/>
  </children>

</component>


Function Main(args As Dynamic) As void
    screen = CreateObject("roSGScreen")
    scene = screen.CreateScene("MainScene")
    port = CreateObject("MessagePort")
    screen.SetMessagePort(port)
    screen.show()
    
    while true
      msg = wait(0, port)    
    end while
End Function

Function somethingCalledFromSceneGraph() as String
  return "Text from main.brs"
End Function
[/spoiler:zvqepvoo]
Just know that there are restrictions on what you can do in that function.  These are documented at BrightScript Support

We should clarify what you did there is not what most people want.
Through mechanically including main.brs in the component, technically you can call a main.brs function from the RSG thread - true. Filthy^ as it is, i imagine it can be useful occasionally (e.g. context-free utility functions like min()/max()) - but please note those are 2 separate interpreters and they do not share the global variables (getGlobalAA() / unqualified `m`) context.

(^) "ewww, RunUserInterface()/main() included too? gross!"
0 Kudos
btpoole
Channel Surfer

Re: How to call BrightScript function from Scene Graph

Thanks Veeta for the example. I have something close to what is going on, was wondering if anybody had a better way.
Thanks again
0 Kudos