swordAi
Permet à un objet de lancer une balle lorsqu'un joueur appuie sur shootKey
require
sight()triggers on self
"on guard"parameters
| Parameter | Default Value | Type | Description |
|---|---|---|---|
delay | number | 1 | |
tag | string | 'player' | |
autoAim | boolean | true | |
horizontalAim | boolean | false | |
aimMargin | vec2 | vec2(0, 0) | |
postureBreak | boolean | true | |
postureBreakDelay | number | 1 | |
firstSlayDelay | number | 0 | |
moveSequence | array | [] | |
sight | number | 180 |
example
swordAi({ delay: 1, tag: 'player', autoAim: true, horizontalAim: false, aimMargin: vec2(0, 0), postureBreak: true, postureBreakDelay: 1, firstSlayDelay: 0, moveSequence: [], sight: 180}),function swordAi(p) { const param = { delay: 1, tag: 'player', autoAim: true, horizontalAim: false, aimMargin: vec2(0, 0), postureBreak: true, postureBreakDelay: 1, firstSlayDelay: 0, moveSequence: [], sight: 180, ...p, }; return { id: 'swordAi', onGuard: false, require: ['sight'], add() { let c = 0; let savedTime = 0; let delay = param.delay; const hit = () => { const p = param.moveSequence.length > 0 ? param.moveSequence[c % param.moveSequence.length] : {}; this.trigger('sword stroke', p); c++; savedTime = time(); delay = p.delay ? p.delay : param.delay; }; onUpdate(() => { const setAngle = (c) => { const a = c.pos.sub(this.pos).add(param.aimMargin).angle(); if (param.horizontalAim) return Math.abs(a) > 90 ? 180 : 0; else return a; }; if (this.currentTarget) { this.trigger('aiming', setAngle(this.currentTarget)); if (!this.onGuard) { this.trigger('on guard'); this.onGuard = true; savedTime = time(); delay = param.firstSlayDelay; } if (this.isAlive && time() - savedTime > delay) hit(); } else this.onGuard = false; }); if (param.postureBreak) this.on('hit', () => { delay = param.postureBreakDelay; savedTime = time(); }); }, };}