Add AnimationSync
This commit is contained in:
85
ReallifeGamemode.Client/util/animationSync.ts
Normal file
85
ReallifeGamemode.Client/util/animationSync.ts
Normal file
@@ -0,0 +1,85 @@
|
||||
export default function animationSync() {
|
||||
mp.events.add("SERVER:LoadAnimations", () => {
|
||||
animationSync.register("Cuffed", "mp_arresting", "idle", true, true, 0);
|
||||
animationSync.register("ArrestCop", "mp_arrest_paired", "cop_p2_back_right", false, false, 0);
|
||||
animationSync.register("ArrestCrook", "mp_arrest_paired", "crook_p2_back_right", false, false, 0);
|
||||
});
|
||||
|
||||
const animationSync =
|
||||
{
|
||||
animations: [],
|
||||
|
||||
playAnim: function (entity, _id) {
|
||||
if (this.animations.hasOwnProperty(_id)) {
|
||||
let currentAnim = this.animations[_id];
|
||||
let { id, name, animDict, animName, playOnStream, loop, flag } = currentAnim;
|
||||
|
||||
loadAnimDict(animDict, function () {
|
||||
mp.players.exists(entity) && 0 !== entity.handle && entity.taskPlayAnim(animDict, animName, 1, 0, -1, parseInt(flag), 1, !1, !1, !1)
|
||||
});
|
||||
entity.animationData = { name: name, playOnStream: playOnStream };
|
||||
}
|
||||
},
|
||||
stopAnim: function (entity: PlayerMp) {
|
||||
if (!entity.animationData)
|
||||
return;
|
||||
|
||||
var currAnim = this.animations.find(anim => anim.name == entity.animationData.name);
|
||||
if (currAnim) {
|
||||
let { id, name, animDict, animName, playOnStream, loop, flag } = currAnim;
|
||||
|
||||
entity.stopAnimTask(animDict, animName, 3);
|
||||
entity.animationData = null;
|
||||
}
|
||||
},
|
||||
|
||||
register: function (name, animDict, animName, playOnStream, loop, flag) {
|
||||
let id = mp.game.joaat(name);
|
||||
|
||||
if (!this.animations.hasOwnProperty(id)) {
|
||||
this.animations[id] =
|
||||
{
|
||||
id: id,
|
||||
name: name,
|
||||
animDict: animDict,
|
||||
animName: animName,
|
||||
playOnStream: playOnStream,
|
||||
loop: loop,
|
||||
flag: flag
|
||||
};
|
||||
} else {
|
||||
mp.game.graphics.notify("Animation Sync Error: ~r~Duplicate Entry");
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
mp.events.add("entityStreamIn", (entity) => {
|
||||
if (entity.type === "player" && entity.animationData) {
|
||||
if (!entity.animationData.playOnStream)
|
||||
return;
|
||||
animationSync.playAnim(entity, entity.animationData.name);
|
||||
}
|
||||
});
|
||||
|
||||
mp.events.addDataHandler("AnimationData", (entity: PlayerMp, string) => {
|
||||
let data = string ? string : "";
|
||||
|
||||
animationSync.stopAnim(entity);
|
||||
|
||||
let animData = animationSync.animations.find(anim => anim.name == data);
|
||||
if (!animData)
|
||||
return;
|
||||
|
||||
let { id, name, animDict, animName, playOnStream, loop, flag } = animData;
|
||||
entity.animationData = { name: name, playOnStream: playOnStream };
|
||||
animationSync.playAnim(entity, id)
|
||||
});
|
||||
|
||||
function loadAnimDict(animDict, callback) {
|
||||
if (mp.game.streaming.hasAnimDictLoaded(animDict)) return void callback();
|
||||
mp.game.streaming.requestAnimDict(animDict);
|
||||
let c = setInterval(function () {
|
||||
mp.game.streaming.hasAnimDictLoaded(animDict) && (clearInterval(c), callback())
|
||||
}, 100)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user