Set of tag names. Tags are automatically available on Entity and Asset as tags
field.
new Tags(parent?: any): Tags
Create an instance of a Tags.
any
Parent object who tags belong to.
EventHandler.constructor
get size(): number
Number of tags in set.
number
add(...args: any[]): boolean
Add a tag, duplicates are ignored. Can be array or comma separated arguments for multiple tags.
...any
Name of a tag, or array of tags.
boolean
True if any tag were added.
tags.add('level-1')
tags.add('ui', 'settings')
tags.add([
'level-2',
'mob'
])
clear(): void
Remove all tags.
void
tags.clear()
fire(
name: string,
arg1?: any,
arg2?: any,
arg3?: any,
arg4?: any,
arg5?: any,
arg6?: any,
arg7?: any,
arg8?: any): EventHandler
Fire an event, all additional arguments are passed on to the event listener.
string
Name of event to fire.
any
First argument that is passed to the event handler.
any
Second argument that is passed to the event handler.
any
Third argument that is passed to the event handler.
any
Fourth argument that is passed to the event handler.
any
Fifth argument that is passed to the event handler.
any
Sixth argument that is passed to the event handler.
any
Seventh argument that is passed to the event handler.
any
Eighth argument that is passed to the event handler.
Self for chaining.
obj.fire('test', 'This is the message')
has(...query: any[]): boolean
Check if tags satisfy filters. Filters can be provided by simple name of tag, as well as by array of tags. When an array is provided it will check if tags contain each tag within the array. If any of comma separated argument is satisfied, then it will return true. Any number of combinations are valid, and order is irrelevant.
...any
Name of a tag or array of tags.
boolean
True if filters are satisfied.
tags.has('player') // player
tags.has('mob', 'player') // player OR mob
tags.has([
'level-1',
'mob'
]) // monster AND level-1
tags.has(
[
'ui',
'settings'
],
[
'ui',
'levels'
]
) // (ui AND settings) OR (ui AND levels)
hasEvent(name: string): boolean
Test if there are any handlers bound to an event name.
string
The name of the event to test.
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
list(): string[]
Returns immutable array of tags.
string
Copy of tags array.
off(
name?: string,
callback?: HandleEventCallback,
scope?: any): EventHandler
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.
string
Name of the event to unbind.
HandleEventCallback
Function to be unbound.
any
Scope that was used as the this when the event is fired.
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
on(
name: string,
callback: HandleEventCallback,
scope?: any): EventHandle
Attach an event handler to an event.
string
Name of the event to bind the callback to.
HandleEventCallback
Function that is called when event is fired. Note the callback is limited to 8 arguments.
any = ...
Object to use as 'this' when the event is fired, defaults to current this.
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()
once(
name: string,
callback: HandleEventCallback,
scope?: any): EventHandle
Attach an event handler to an event. This handler will be removed after being fired once.
string
Name of the event to bind the callback to.
HandleEventCallback
Function that is called when event is fired. Note the callback is limited to 8 arguments.
any = ...
Object to use as 'this' when the event is fired, defaults to current this.
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(...args: any[]): boolean
Remove tag.
...any
Name of a tag or array of tags.
boolean
True if any tag were removed.
tags.remove('level-1')
tags.remove('ui', 'settings')
tags.remove([
'level-2',
'mob'
])
static EVENT_ADD: string = 'add';
Fired for each individual tag that is added.
tags.on('add', (tag, parent) => {
console.log(`${'${tag}'} added to ${'${parent.name}'}`)
})
static EVENT_CHANGE: string = 'change';
Fired when tags have been added or removed. It will fire once on bulk changes, while add
and remove will fire on each tag operation.
tags.on('change', (parent) => {
console.log(`Tags changed on ${'${parent.name}'}`)
})
static EVENT_REMOVE: string = 'remove';
Fired for each individual tag that is removed.
tags.on('remove', (tag, parent) => {
console.log(`${'${tag}'} removed from ${'${parent.name}'}`)
})