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 | |
moveSequence | array | [] | |
sight | number | 180 |
example
swordAi({ delay: 1, tag: "player", autoAim: true, horizontalAim: false, aimMargin: vec2(0, 0), postureBreak: true, postureBreakDelay: 1, moveSequence: [], sight: 180}),function swordAi(p) { const param = { delay: 1, tag: "player", autoAim: true, horizontalAim: false, aimMargin: vec2(0, 0), postureBreak: true, postureBreakDelay: 1, moveSequence: [], sight: 180, ...p, } return { id: "swordAi", onGuard: true, 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 this.onGuard = false } onUpdate(() => { const c = this.getClosestTarget(param) 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 (c) this.trigger("aiming", setAngle(c)) if (this.isAlive && time() - savedTime > param.delay && c) hit() if (!this.onGuard && time() - savedTime > delay) { this.trigger("on guard") this.onGuard = true } }) if (param.postureBreak) this.on("hit", () => { delay = param.postureBreakDelay savedTime = time() }) }, }}