Engine API Reference - v2.20.0-beta.0
    Preparing search index...

    Class ScriptRegistry

    Container for all ScriptTypes that are available to this application. Note that PlayCanvas scripts can access the Script Registry from inside the application with AppBase#scripts.

    Hierarchy (View Summary)

    Index

    Constructors

    • Create a new ScriptRegistry instance.

      Parameters

      • app: AppBase

        Application to attach registry to.

      Returns ScriptRegistry

    Methods

    • Add a script to the registry, keyed by its name. The name is taken from the script's static scriptName property (for Script classes), or assigned by createScript / registerScript. Note: when createScript or registerScript is called, the script is added to the registry automatically, so calling this method directly is only required when registering a Script class manually (e.g. in an engine-only project).

      If a script with the same name already exists in the registry, and the new script has a swap method defined, it will perform code hot swapping automatically in an async manner.

      Parameters

      • script: typeof Script | typeof ScriptType

        The script class to add. Must have a resolvable name (a static scriptName, an assigned __name, or an inferable class name).

      Returns boolean

      True if the script was added for the first time. False if a script with the same name already exists, or if the script has no resolvable name.

      var PlayerController = pc.createScript('playerController');
      // playerController Script Type will be added to pc.ScriptRegistry automatically
      console.log(app.scripts.has('playerController')); // outputs true
      // engine-only: register an ESM Script class manually
      class Rotator extends pc.Script {
      static scriptName = 'rotator';
      }
      app.scripts.add(Rotator);
      console.log(app.scripts.has('rotator')); // outputs true
    • Registers a schema against a script instance.

      Parameters

      • id: string

        The key to use to store the schema

      • schema: AttributeSchema

        An schema definition for the script

      Returns void

    • Fire an event, all additional arguments are passed on to the event listener.

      Parameters

      • name: string

        Name of event to fire.

      • Optionalarg1: any

        First argument that is passed to the event handler.

      • Optionalarg2: any

        Second argument that is passed to the event handler.

      • Optionalarg3: any

        Third argument that is passed to the event handler.

      • Optionalarg4: any

        Fourth argument that is passed to the event handler.

      • Optionalarg5: any

        Fifth argument that is passed to the event handler.

      • Optionalarg6: any

        Sixth argument that is passed to the event handler.

      • Optionalarg7: any

        Seventh argument that is passed to the event handler.

      • Optionalarg8: any

        Eighth argument that is passed to the event handler.

      Returns EventHandler

      Self for chaining.

      obj.fire('test', 'This is the message');
      
    • Get ScriptType by name.

      Parameters

      Returns typeof ScriptType

      The Script Type if it exists in the registry or null otherwise.

      var PlayerController = app.scripts.get('playerController');
      
    • Returns a schema for a given script name.

      Parameters

      • id: string

        The key to store the schema under

      Returns AttributeSchema | undefined

      • The schema stored under the key
    • Check if a ScriptType with the specified name is in the registry.

      Parameters

      Returns boolean

      True if ScriptType is in registry.

      if (app.scripts.has('playerController')) {
      // playerController is in pc.ScriptRegistry
      }
    • Test if there are any handlers bound to an event name.

      Parameters

      • name: string

        The name of the event to test.

      Returns boolean

      True if the object has handlers bound to the specified event name.

      obj.on('test', () => {}); // bind an event to 'test'
      obj.hasEvent('test'); // returns true
      obj.hasEvent('hello'); // returns false
    • Get list of all ScriptTypes from registry.

      Returns typeof ScriptType[]

      list of all ScriptTypes in registry.

      // logs array of all Script Type names available in registry
      console.log(app.scripts.list().map(function (o) {
      return o.name;
      }));
    • Detach an event handler from an event. If callback is not provided then all callbacks are unbound from the event, if scope is not provided then all events with the callback will be unbound.

      Parameters

      • Optionalname: string

        Name of the event to unbind.

      • Optionalcallback: HandleEventCallback

        Function to be unbound.

      • Optionalscope: any

        Scope that was used as the this when the event is fired.

      Returns EventHandler

      Self for chaining.

      const handler = () => {};
      obj.on('test', handler);

      obj.off(); // Removes all events
      obj.off('test'); // Removes all events called 'test'
      obj.off('test', handler); // Removes all handler functions, called 'test'
      obj.off('test', handler, this); // Removes all handler functions, called 'test' with scope this
    • Attach an event handler to an event.

      Parameters

      • name: string

        Name of the event to bind the callback to.

      • callback: HandleEventCallback

        Function that is called when event is fired. Note the callback is limited to 8 arguments.

      • Optionalscope: any = ...

        Object to use as 'this' when the event is fired, defaults to current this.

      Returns EventHandle

      Can be used for removing event in the future.

      obj.on('test', (a, b) => {
      console.log(a + b);
      });
      obj.fire('test', 1, 2); // prints 3 to the console
      const evt = obj.on('test', (a, b) => {
      console.log(a + b);
      });
      // some time later
      evt.off();
    • Attach an event handler to an event. This handler will be removed after being fired once.

      Parameters

      • name: string

        Name of the event to bind the callback to.

      • callback: HandleEventCallback

        Function that is called when event is fired. Note the callback is limited to 8 arguments.

      • Optionalscope: any = ...

        Object to use as 'this' when the event is fired, defaults to current this.

      Returns EventHandle

      Can be used for removing event in the future.

      obj.once('test', (a, b) => {
      console.log(a + b);
      });
      obj.fire('test', 1, 2); // prints 3 to the console
      obj.fire('test', 1, 2); // not going to get handled
    • Remove ScriptType.

      Parameters

      Returns boolean

      True if removed or False if already not in registry.

      app.scripts.remove('playerController');