shoot
triggers on self
"impact"parameters
| Parameter | Default Value | Type | Description |
|---|---|---|---|
speed | number | 1200 | |
pos | vec2 | vec2(0, 0) | |
lifespan | number | 0.01 | |
fadeOut | number | 0.4 | |
sprite | string | 'bullet' | |
width | unknown | null | |
bulletTag | unknown | null | |
impactTag | string | '*' | |
dangerParam | object | {} | |
bounceParam | object | {} | |
startDistance | number | 64 | |
gravityScale | number | 0 | |
destroyOnImpact | boolean | true | |
bounciness | number | 0 | |
friction | number | 0 | |
aimAngle | number | 0 |
example
shoot({ speed: 1200, pos: vec2(0, 0), lifespan: 0.01, fadeOut: 0.4, sprite: 'bullet', width: "null", bulletTag: "null", impactTag: '*', dangerParam: {}, bounceParam: {}, startDistance: 64, gravityScale: 0, destroyOnImpact: true, bounciness: 0, friction: 0, aimAngle: 0}),function shoot(p) { const param = { speed: 1200, pos: vec2(0, 0), lifespan: 0.01, fadeOut: 0.4, sprite: 'bullet', width: null, bulletTag: null, impactTag: '*', dangerParam: {}, bounceParam: {}, startDistance: 64, gravityScale: 0, destroyOnImpact: true, bounciness: 0, friction: 0, aimAngle: 0, ...p, }; return { id: 'shoot', add() { let aimAngle = param.aimAngle; this.on('aiming', (p) => (aimAngle = p)); this.on('shoot', (p) => { const weaponParam = { ...param, ...p, }; const projectile = add([ sprite(weaponParam.sprite), pos( this.pos .add(weaponParam.pos) .add(Vec2.fromAngle(aimAngle).scale(weaponParam.startDistance)) ), lifespan(weaponParam.lifespan, { fade: weaponParam.fadeOut, }), area({ collisionIgnore: weaponParam.collisionIgnore, }), anchor('center'), opacity(), body({ gravityScale: weaponParam.gravityScale, }), rotate(aimAngle), danger(param.dangerParam), bounce({ direction: Vec2.fromAngle(aimAngle), ...param.bounceParam, }), 'projectile', ]); if (weaponParam.bulletTag) projectile.tag(weaponParam.bulletTag); if (weaponParam.width) projectile.width = weaponParam.width; projectile.onCollide(weaponParam.impactTag, () => projectile.trigger('impact') ); projectile.vel = Vec2.fromAngle(aimAngle).scale(weaponParam.speed); }); }, };}