Repeated DelayedCallbackEvent

  • Hi Robert,

    Your script is really close to working, the only problem is that when the script disables its SceneObject the first time, the delayed event stops running (since the SceneObject isn't enabled). That's why the event doesn't fire again to reenable the object.

    You can fix this by moving the delayed event to a separate SceneObject from the one getting disabled. Here are two ways to do this:

    Option 1:  Move your Script to a different object

    For this method you'll have to move your script to a different object, then hook up your original object to the "targetObject" input in the script. This works because the object holding the script never gets disabled, so the delayed event never gets interrupted.

    //@input float delayTime = 1.0
    //@input SceneObject targetObject

    var parentObject = script.getSceneObject()

    script.targetObject.enabled = true;

    function onDelay( eventData )
    {
    // Enable or disable the target object instead of the one running this script
    script.targetObject.enabled=!script.targetObject.enabled;
    delayedEvent.reset(script.delayTime);
    }

    var delayedEvent = script.createEvent("DelayedCallbackEvent");
    delayedEvent.bind( onDelay );
    delayedEvent.reset(script.delayTime);
    print("bound")

     

    Option 2:  Create a new object at runtime to execute your event

    This method works by dynamically creating a new SceneObject, adding a new ScriptComponent to it, and binding your DelayedCallbackEvent to it instead of the current script. This works because the DelayedCallbackEvent runs on its own SceneObject and won't be interrupted by this SceneObject being disabled.

    //@input float delayTime = 1.0
    var parentObject = script.getSceneObject()
    function onDelay( eventData )
    {
    parentObject.enabled=!parentObject.enabled;
    delayedEvent.reset(script.delayTime);
    }

    // Create a new, separate object and add a new ScriptComponent
    var delayObject = global.scene.createSceneObject("scriptRunner");
    var delayScript = delayObject.createComponent("Component.ScriptComponent");

    // Add our event to the new ScriptComponent, which won't be disabled
    var delayedEvent = delayScript.createEvent("DelayedCallbackEvent");
    delayedEvent.bind( onDelay );
    delayedEvent.reset(script.delayTime);
    print("bound")

    Let me know if you have any more questions!

    Comment actions Permalink
  • Worked like a charm.  Option 2 is a bit more complex but I like it better.  Thank you.

    Comment actions Permalink
Have a comment?

Please sign in to leave a comment.

We're here to help! We just need a little bit of information...

What system are you using?

Have you downloaded the latest version of Lens Studio?

Please download the latest version of Lens Studio. If you still run into this issue, please come back and report it!

Is this issue causing Lens Studio to crash?

What system do you run Lens Studio on?

Version

Graphics

Follow the next steps to help us solve your issue:

  • Copy and paste this text into your TerminalCommand Window
    open ~/Library/Preferences/Snap/Lens\ Studio/ %LOCALAPPDATA%\Snap\Lens Studio Copy Text
  • Press ReturnEnter to run the command. The Lens Studio folder will automatically open
  • Prepare to upload your files: zip the "Log" Folder by right-clicking and choosing "compress."
    Locate the Log.txt file right above it.

    Attach a screenshot of the issue:

Name:

Email:

What is this most relevant to?

Please enter a brief description of your issue:

Thanks for submitting this issue.

Unfortunately, it's likely due to the operating system or hardware you're using – since they don't meet the system requirements for Lens Studio.

Still, we hear you loud and clear, and are logging the issue in case there's ever a workaround we can provide!

Minimum Requirements

Operating System: Windows 10 (64 bit); MacOS 10.11+

Hardware: Minimum of Intel Core i3 2.5Ghz or AMD Phenom II 2.6Ghz with 4 GB RAM; Intel HD Graphics 4000 / Nvidia GeForce 710 / AMD Radeon HD 6450 or better; screen resolution of 1280x768 or higher

We'll try to resolve this issue as soon as possible. Thanks for letting us know about it!

Keep an eye out for a followup email from us. We may have a couple more questions for you, or we might already have a solution to offer.

Happy creating!