165 lines
6.4 KiB
JavaScript
165 lines
6.4 KiB
JavaScript
// ===========================================================================
|
|
// Asshat Gaming Roleplay
|
|
// https://github.com/VortrexFTW/agrp_main
|
|
// (c) 2022 Asshat Gaming
|
|
// ===========================================================================
|
|
// FILE: skin-select.js
|
|
// DESC: Provides skin-selector functions and usage
|
|
// TYPE: Client (JavaScript)
|
|
// ===========================================================================
|
|
|
|
let skinSelectMessageFontTop = null;
|
|
let skinSelectMessageFontBottom = null;
|
|
let skinSelectMessageTextTop = "Skin Name";
|
|
let skinSelectMessageTextBottom = "Choose a skin using PAGEUP and PAGEDOWN keys. Use ENTER to finish or BACKSPACE to cancel.";
|
|
let skinSelectMessageColourTop = COLOUR_YELLOW;
|
|
let skinSelectMessageColourBottom = COLOUR_WHITE;
|
|
|
|
let usingSkinSelector = false;
|
|
let skinSelectorIndex = 0;
|
|
|
|
let skinSelectPosition = null;
|
|
let skinSelectHeading = null;
|
|
|
|
let lastSkinSelectKeyPress = 0;
|
|
let skinSelectKeyPressCooldown = 250;
|
|
|
|
let skinSelectChoosingPart = AGRP_SKINSELECT_NONE;
|
|
let skinSelectBodyParts = {
|
|
[AGRP_SKINSELECT_HEAD]: [0, 0],
|
|
[AGRP_SKINSELECT_UPPER]: [0, 0],
|
|
[AGRP_SKINSELECT_LOWER]: [0, 0],
|
|
[AGRP_SKINSELECT_HAT]: [0, 0],
|
|
};
|
|
|
|
// ===========================================================================
|
|
|
|
function initSkinSelectScript() {
|
|
logToConsole(LOG_DEBUG, "[VRR.SkinSelect]: Initializing skin selector script ...");
|
|
skinSelectMessageFontTop = loadSkinSelectMessageFontTop();
|
|
skinSelectMessageFontBottomUpper = loadSkinSelectMessageFontBottom();
|
|
skinSelectMessageFontBottomLower = loadSkinSelectMessageFontBottom();
|
|
logToConsole(LOG_DEBUG, "[VRR.SkinSelect]: Skin selector script initialized!");
|
|
}
|
|
|
|
// ===========================================================================
|
|
|
|
function loadSkinSelectMessageFontTop() {
|
|
return lucasFont.createDefaultFont(20.0, "Roboto");
|
|
}
|
|
|
|
// ===========================================================================
|
|
|
|
function loadSkinSelectMessageFontBottom() {
|
|
return lucasFont.createDefaultFont(12.0, "Roboto", "Light");
|
|
}
|
|
|
|
// ===========================================================================
|
|
|
|
function processSkinSelectKeyPress(keyCode) {
|
|
// Make sure they aren't spamming it (causes crashes)
|
|
if (sdl.ticks - lastSkinSelectKeyPress < skinSelectKeyPressCooldown) {
|
|
return false;
|
|
}
|
|
|
|
lastSkinSelectKeyPress = sdl.ticks;
|
|
|
|
if (usingSkinSelector) {
|
|
if (keyCode == SDLK_LEFT || keyCode == SDLK_A) {
|
|
if (skinSelectorIndex >= allowedSkins.length - 1) {
|
|
skinSelectorIndex = 1;
|
|
} else {
|
|
skinSelectorIndex = skinSelectorIndex + 1;
|
|
}
|
|
logToConsole(LOG_DEBUG, `Switching to skin ${allowedSkins[skinSelectorIndex][1]} (Index: ${skinSelectorIndex}, Skin: ${allowedSkins[skinSelectorIndex][0]})`);
|
|
skinSelectMessageTextTop = allowedSkins[skinSelectorIndex][1];
|
|
setLocalPlayerSkin(allowedSkins[skinSelectorIndex][0]);
|
|
} else if (keyCode == SDLK_RIGHT || keyCode == SDLK_D) {
|
|
if (skinSelectorIndex <= 0) {
|
|
skinSelectorIndex = allowedSkins.length - 1;
|
|
} else {
|
|
skinSelectorIndex = skinSelectorIndex - 1;
|
|
}
|
|
logToConsole(LOG_DEBUG, `Switching to skin ${allowedSkins[skinSelectorIndex][1]} (Index: ${skinSelectorIndex}, Skin: ${allowedSkins[skinSelectorIndex][0]})`);
|
|
skinSelectMessageTextTop = allowedSkins[skinSelectorIndex][1];
|
|
setLocalPlayerSkin(allowedSkins[skinSelectorIndex][0]);
|
|
} else if (keyCode == SDLK_UP || keyCode == SDLK_W) {
|
|
if (skinSelectorIndex >= allowedSkins.length - 1) {
|
|
skinSelectorIndex = 1;
|
|
} else {
|
|
skinSelectorIndex = skinSelectorIndex + 1;
|
|
}
|
|
logToConsole(LOG_DEBUG, `Switching to skin ${allowedSkins[skinSelectorIndex][1]} (Index: ${skinSelectorIndex}, Skin: ${allowedSkins[skinSelectorIndex][0]})`);
|
|
skinSelectMessageTextTop = allowedSkins[skinSelectorIndex][1];
|
|
setLocalPlayerSkin(allowedSkins[skinSelectorIndex][0]);
|
|
} else if (keyCode == SDLK_RETURN) {
|
|
sendNetworkEventToServer("agrp.skinSelected", skinSelectorIndex);
|
|
toggleSkinSelect(false);
|
|
return true;
|
|
} else if (keyCode == SDLK_BACKSPACE) {
|
|
sendNetworkEventToServer("agrp.skinSelected", -1);
|
|
toggleSkinSelect(false);
|
|
return true;
|
|
}
|
|
localPlayer.heading = skinSelectHeading;
|
|
}
|
|
}
|
|
|
|
// ===========================================================================
|
|
|
|
function processSkinSelectRendering() {
|
|
if (usingSkinSelector) {
|
|
if (skinSelectMessageFontTop != null && skinSelectMessageFontBottomUpper != null && skinSelectMessageFontBottomLower != null) {
|
|
if (skinSelectMessageTextTop != "" && skinSelectMessageTextBottomUpper != "" && skinSelectMessageTextBottomLower != "") {
|
|
skinSelectMessageFontTop.render(skinSelectMessageTextTop, [0, game.height - 100], game.width, 0.5, 0.0, skinSelectMessageFontTop.size, skinSelectMessageColourTop, true, true, false, true);
|
|
skinSelectMessageFontBottomUpper.render(skinSelectMessageTextBottomUpper, [0, game.height - 65], game.width, 0.5, 0.0, skinSelectMessageTextBottomUpper.size, skinSelectMessageColourBottom, true, true, false, true);
|
|
if (getGame() == AGRP_GAME_GTA_IV) {
|
|
skinSelectMessageFontBottomLower.render(skinSelectMessageTextBottomLower, [0, game.height - 65], game.width, 0.5, 0.0, skinSelectMessageTextBottomLower.size, skinSelectMessageColourBottom, true, true, false, true);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// ===========================================================================
|
|
|
|
function toggleSkinSelect(state) {
|
|
if (state) {
|
|
skinSelectorIndex = getAllowedSkinIndexFromSkin(localPlayer.skin);
|
|
if (!skinSelectorIndex) {
|
|
skinSelectorIndex = 0;
|
|
}
|
|
|
|
usingSkinSelector = true;
|
|
skinSelectPosition = localPlayer.position;
|
|
skinSelectHeading = localPlayer.heading;
|
|
|
|
if (isCustomCameraSupported()) {
|
|
let tempPosition = localPlayer.position;
|
|
tempPosition.z += 0.5;
|
|
let frontCameraPosition = getPosInFrontOfPos(tempPosition, localPlayer.heading, 3);
|
|
game.setCameraLookAt(frontCameraPosition, localPlayer.position, true);
|
|
}
|
|
|
|
if (getGame() == AGRP_GAME_GTA_IV) {
|
|
let skinId = allowedSkins[skinSelectorIndex][0];
|
|
if (natives.isModelInCdimage(skinId)) {
|
|
natives.requestModel(skinId);
|
|
natives.loadAllObjectsNow();
|
|
if (natives.hasModelLoaded(skinId)) {
|
|
natives.changePlayerModel(natives.getPlayerId(), skinId);
|
|
}
|
|
}
|
|
} else {
|
|
localPlayer.skin = allowedSkins[skinSelectorIndex][0];
|
|
}
|
|
|
|
skinSelectMessageTextTop = allowedSkins[skinSelectorIndex][1];
|
|
setLocalPlayerControlState(false, false);
|
|
} else {
|
|
usingSkinSelector = false;
|
|
setLocalPlayerControlState(false, false);
|
|
}
|
|
}
|
|
|
|
// ===========================================================================
|