throwItem
triggers on self
"impact"parameters
| Parameter | Default Value | Type | Description |
|---|---|---|---|
speed | number | 800 | |
pos | vec2 | vec2(0, 0) | |
sprite | string | "bullet" | |
width | unknown | null | |
bulletTag | unknown | null | |
impactTag | string | "body" | |
dangerParam | object | {} | |
bounceParam | object | {} | |
startDistance | number | 80 | |
gravityScale | number | 1 | |
destroyOnImpact | boolean | false | |
bounciness | number | 1 | |
friction | number | 0 | |
aimAngle | number | 40 | |
type | string | "item" |
example
throwItem({ speed: 800, pos: vec2(0, 0), sprite: "bullet", width: "null", bulletTag: "null", impactTag: "body", dangerParam: {}, bounceParam: {}, startDistance: 80, gravityScale: 1, destroyOnImpact: false, bounciness: 1, friction: 0, aimAngle: 40, type: "item"}),function throwItem(p) { const param = { speed: 800, pos: vec2(0, 0), sprite: "bullet", width: null, bulletTag: null, impactTag: "body", dangerParam: {}, bounceParam: {}, startDistance: 80, gravityScale: 1, destroyOnImpact: false, bounciness: 1, friction: 0, aimAngle: 40, type:"item", ...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))), area({ collisionIgnore: weaponParam.collisionIgnore }), anchor("center"), opacity(), body({ gravityScale: weaponParam.gravityScale }), rotate(aimAngle), danger(param.dangerParam), bounce({ direction: Vec2.fromAngle(aimAngle), ...param.bounceParam }), catchable({ type: p.type }), ]) 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) }) }, }}