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 | "body" | |
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: "body", 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: "body", 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) }) }, }}