52 lines
1011 B
JavaScript
52 lines
1011 B
JavaScript
|
import {compose} from '@avocado/core';
|
||
|
import {StateProperty, Trait} from '../trait';
|
||
|
|
||
|
const decorate = compose(
|
||
|
StateProperty('isCheckingCollisions'),
|
||
|
);
|
||
|
|
||
|
export class Collider extends decorate(Trait) {
|
||
|
|
||
|
static defaultParams() {
|
||
|
return {
|
||
|
collidesWithGroups: [
|
||
|
'default',
|
||
|
],
|
||
|
collisionGroup: 'default',
|
||
|
}
|
||
|
}
|
||
|
|
||
|
static defaultState() {
|
||
|
return {
|
||
|
isCheckingCollisions: true,
|
||
|
}
|
||
|
}
|
||
|
|
||
|
initialize() {
|
||
|
this._collisionGroup = this.params.get('collisionGroup');
|
||
|
this._collidesWithGroups = this.params.get('collidesWithGroups').toJS();
|
||
|
}
|
||
|
|
||
|
get collisionGroup() {
|
||
|
return this._collisionGroup;
|
||
|
}
|
||
|
|
||
|
get collidesWithGroups() {
|
||
|
return this._collidesWithGroups;
|
||
|
}
|
||
|
|
||
|
methods() {
|
||
|
return {
|
||
|
|
||
|
collidesWith: (entity) => {
|
||
|
if (!entity.is('collider')) {
|
||
|
return false;
|
||
|
}
|
||
|
const collisionGroup = entity.collisionGroup();
|
||
|
return -1 !== this._collidesWithGroups.indexOf(collisionGroup);
|
||
|
},
|
||
|
|
||
|
};
|
||
|
}
|
||
|
}
|