node-haxball
Version:
The most powerful and lightweight API that allows you to develop your original Haxball(www.haxball.com) host, client, and standalone applications both on node.js and browser environments and also includes every possible hack and functionality that you can
56 lines (53 loc) • 4.24 kB
JavaScript
module.exports = function (API) {
const { OperationType, VariableType, ConnectionState, AllowFlags, Direction, CollisionFlags, CameraFollow, BackgroundType, GamePlayState, BanEntryType, PlayerPositionInGame, Callback, Utils, Room, Replay, Query, Library, RoomConfig, Plugin, Renderer, Errors, Language, EventFactory, Impl } = API;
Object.setPrototypeOf(this, Plugin.prototype);
Plugin.call(this, "assignPlayerPositions", true, { // "assignPlayerPositions" is plugin's name, "true" means "activated just after initialization". Every plugin should have a unique name.
version: "0.1",
author: "abc",
description: "This plugin allows us to assign positions to players. (Like GK, DMC, ML, FC, etc.) This is yet only a test to see if room.(un)registerPlayerGUIProperty and room.(set/clear)CustomPlayerImage are working correctly. Synchronization via custom events will hopefully be added later.",
allowFlags: AllowFlags.CreateRoom | AllowFlags.JoinRoom // We allow this plugin to be activated on CreateRoom only.
});
const imageWidth = 20, imageHeight = 16;
const images = {
[]: "",
[]: "https://cdn.jsdelivr.net/gh/wxyz-abcd/nh-storage@latest/assignPlayerPositions/GK.png",
[]: "https://cdn.jsdelivr.net/gh/wxyz-abcd/nh-storage@latest/assignPlayerPositions/SW.png",
[]: "https://cdn.jsdelivr.net/gh/wxyz-abcd/nh-storage@latest/assignPlayerPositions/WBL.png",
[]: "https://cdn.jsdelivr.net/gh/wxyz-abcd/nh-storage@latest/assignPlayerPositions/DL.png",
[]: "https://cdn.jsdelivr.net/gh/wxyz-abcd/nh-storage@latest/assignPlayerPositions/DC.png",
[]: "https://cdn.jsdelivr.net/gh/wxyz-abcd/nh-storage@latest/assignPlayerPositions/DR.png",
[]: "https://cdn.jsdelivr.net/gh/wxyz-abcd/nh-storage@latest/assignPlayerPositions/WBR.png",
[]: "https://cdn.jsdelivr.net/gh/wxyz-abcd/nh-storage@latest/assignPlayerPositions/DML.png",
[]: "https://cdn.jsdelivr.net/gh/wxyz-abcd/nh-storage@latest/assignPlayerPositions/DMC.png",
[]: "https://cdn.jsdelivr.net/gh/wxyz-abcd/nh-storage@latest/assignPlayerPositions/DMR.png",
[]: "https://cdn.jsdelivr.net/gh/wxyz-abcd/nh-storage@latest/assignPlayerPositions/ML.png",
[]: "https://cdn.jsdelivr.net/gh/wxyz-abcd/nh-storage@latest/assignPlayerPositions/MC.png",
[]: "https://cdn.jsdelivr.net/gh/wxyz-abcd/nh-storage@latest/assignPlayerPositions/MR.png",
[]: "https://cdn.jsdelivr.net/gh/wxyz-abcd/nh-storage@latest/assignPlayerPositions/AML.png",
[]: "https://cdn.jsdelivr.net/gh/wxyz-abcd/nh-storage@latest/assignPlayerPositions/AMC.png",
[]: "https://cdn.jsdelivr.net/gh/wxyz-abcd/nh-storage@latest/assignPlayerPositions/AMR.png",
[]: "https://cdn.jsdelivr.net/gh/wxyz-abcd/nh-storage@latest/assignPlayerPositions/FL.png",
[]: "https://cdn.jsdelivr.net/gh/wxyz-abcd/nh-storage@latest/assignPlayerPositions/FC.png",
[]: "https://cdn.jsdelivr.net/gh/wxyz-abcd/nh-storage@latest/assignPlayerPositions/FR.png",
[]: "https://cdn.jsdelivr.net/gh/wxyz-abcd/nh-storage@latest/assignPlayerPositions/ST.png",
};
var that = this;
this.initialize = function(){
that.room.registerPlayerGUIProperty({
category: "assignPlayerPositions",
name: "inGamePosition",
type: VariableType.PlayerPositionInGame,
readonly: false,
description: "Position of the player",
onChange: (obj, value)=>{
if (value==PlayerPositionInGame.None)
that.room.clearCustomPlayerImage(obj.id);
else
that.room.setCustomPlayerImage(obj.id, images[value], imageWidth, imageHeight);
}
});
};
this.finalize = function(){
that.room?.unregisterPlayerGUIProperties?.("assignPlayerPositions");
};
}