From 98edbaee32a2c991e0991bda2edcbd16da766a2c Mon Sep 17 00:00:00 2001 From: VegaZ Date: Wed, 5 Dec 2018 20:25:17 +0100 Subject: [PATCH] Add Moving Items in Inventory --- Client/Gui/Inventory/inventory.js | 134 +++++++++++++++++++++++------- 1 file changed, 102 insertions(+), 32 deletions(-) diff --git a/Client/Gui/Inventory/inventory.js b/Client/Gui/Inventory/inventory.js index 1b303920..bfc50d3a 100644 --- a/Client/Gui/Inventory/inventory.js +++ b/Client/Gui/Inventory/inventory.js @@ -11,8 +11,6 @@ let eY = sY - 0.1; let sizeMul = 0.08; let yMul = 1.8; -var hoverItem; - var inventoryWeight; var items = [[]]; @@ -39,7 +37,11 @@ grid[17] = [0.5015, 0.755] grid[18] = [0.5835, 0.755] grid[19] = [0.6655, 0.755] - +var mouseDown = false; +var hoverItem; +var dragItem = null; +var oldDragSlot; +var actFreeSlot; mp.events.add("showInventory", (invWeight, itemArr) => { if (show === false) { @@ -60,10 +62,10 @@ mp.events.add("render", () => { if (show === true) { var pos = mp.gui.cursor.position; //DEBUG 2D-SCREEN-KOORDINATEN - mp.game.graphics.drawText("~r~X: " + pos[0] + " ~g~Y: " + pos[1] + "~s~ ---~b~" + parseFloat(pos[0] / screenX).toFixed(3) + " ~y~" + parseFloat(pos[1] / screenY).toFixed(3), [pos[0] / screenX, (pos[1] / screenY) - 0.02], { + mp.game.graphics.drawText("~r~X: " + pos[0] + " ~g~Y: " + pos[1] + "~s~ ---~b~" + parseFloat(pos[0] / screenX).toFixed(3) + " ~y~" + parseFloat(pos[1] / screenY).toFixed(3) + " " + mouseDown, [pos[0] / screenX, (pos[1] / screenY) - 0.02], { font: 0, color: [255, 255, 255, 185], - scale: [0.25, 0.25], + scale: [0.3, 0.3], outline: true, }); @@ -87,18 +89,25 @@ mp.events.add("render", () => { color: [255, 69, 0, 254], scale: [0.3, 0.3], outline: true, - }); + }); } - //SPRITES + //SPRITES + ITEMANZAHL for (var currentItem = 0; currentItem < items.length; currentItem++) { - mp.game.graphics.drawSprite("Mprpsymbol", "rp", grid[parseInt(items[currentItem][4] - 1)][0], grid[parseInt(items[currentItem][4] - 1)][1], rWidth / 8, rWidth / 5, 0, 255, 255, 255, 255); + if (items[currentItem][4] !== "null") { + mp.game.graphics.drawSprite("Mprpsymbol", "rp", grid[parseInt(items[currentItem][4] - 1)][0], grid[parseInt(items[currentItem][4] - 1)][1], rWidth / 8, rWidth / 5, 0, 255, 255, 255, 255); + mp.game.graphics.drawText("(~y~" + items[currentItem][3] + "~s~)", [grid[parseInt(items[currentItem][4] - 1)][0] + (sizeMul / 2) - 0.008, grid[parseInt(items[currentItem][4] - 1)][1] + 0.05], { + font: 0, + color: [255, 255, 255, 255], + scale: [0.25, 0.25], + outline: true, + }); + } } - - //isMouseOverItem(pos[0], pos[1]); + //WENN MAUS ÜBER ITEM if (isMouseOverItem(pos[0], pos[1])) { - mp.game.graphics.drawRect(pos[0] / screenX, pos[1] / screenY + 0.055, 0.16, 0.08, 0, 0, 0, 220); + mp.game.graphics.drawRect(pos[0] / screenX, pos[1] / screenY + 0.055, 0.14, 0.08, 0, 0, 0, 220); var hoverItemP = [items[hoverItem][0], items[hoverItem][1], items[hoverItem][2], items[hoverItem][3]]; @@ -111,7 +120,7 @@ mp.events.add("render", () => { }); //BESCHREIBUNG - mp.game.graphics.drawText("~y~Beschreibung: ~s~" + hoverItemP[1], [pos[0] / screenX, pos[1] / screenY + 0.04], { + mp.game.graphics.drawText(hoverItemP[1], [pos[0] / screenX, pos[1] / screenY + 0.04], { font: 4, color: [255, 255, 255, 255], scale: [0.35, 0.35], @@ -119,18 +128,28 @@ mp.events.add("render", () => { }); //EINZELGEWICHT - mp.game.graphics.drawText("~y~Einzelgewicht: ~s~" + hoverItemP[2] + "g", [pos[0] / screenX, pos[1] / screenY + 0.06], { + mp.game.graphics.drawText("~y~" + hoverItemP[2] + "g", [pos[0] / screenX, pos[1] / screenY + 0.06], { font: 4, color: [255, 255, 255, 255], scale: [0.35, 0.35], outline: true, - }); + }); } - //items[userItems.IndexOf(item)][0] = iItem.Name; - //items[userItems.IndexOf(item)][1] = iItem.Description; - //items[userItems.IndexOf(item)][2] = iItem.Gewicht.ToString(); - //items[userItems.IndexOf(item)][3] = item.Amount.ToString(); - //items[userItems.IndexOf(item)][4] = item.Slot.ToString(); + + //WENN FREIER SLOT + if (isMouseOverFreeSlot(pos[0], pos[1])) { + mp.game.graphics.drawText("~r~FREE SLOT ~g~" + actFreeSlot, [0.5, 0.05], { + font: 4, + color: [255, 255, 255, 255], + scale: [0.7, 0.7], + outline: true, + }); + } + + //WENN MOUSE DOWN + if (mouseDown === true) { + mp.game.graphics.drawSprite("Mprpsymbol", "rp", pos[0], pos[1], rWidth / 8, rWidth / 5, 0, 200, 255, 200, 255); + } } }); @@ -153,30 +172,81 @@ function isMouseOverItem(cX, cY) { for (i = 0; i < items.length; i++) { if (parseInt(items[i][4]) === invSlot) { hoverItem = i; - return true; + return true; } } } - } + } } -//items[userItems.IndexOf(item)] = new string[5]; - //items[userItems.IndexOf(item)][0] = iItem.Name; - //items[userItems.IndexOf(item)][1] = iItem.Description; - //items[userItems.IndexOf(item)][2] = iItem.Gewicht.ToString(); - //items[userItems.IndexOf(item)][3] = item.Amount.ToString(); - //items[userItems.IndexOf(item)][4] = item.Slot.ToString(); +function isMouseOverFreeSlot(cX2, cY2) { + + var x = cX2 / screenX; + var y = cY2 / screenY; + var a; + var b; + var c; + + var isItemOnSlot = 0; + + for (var s = 0; s < 20; s++) { + a = grid[s][0] - x; + b = grid[s][1] - y; + c = Math.sqrt(a * a + b * b); + + var invSlot = (s + 1); + + if (c < sizeMul / 2) { + for (i = 0; i < items.length; i++) { + if (parseInt(items[i][4]) === invSlot) { + isItemOnSlot++; + } + } + if (isItemOnSlot === 0) { + actFreeSlot = s; + return true; + } + } + } +} mp.events.add('click', (x, y, upOrDown, leftOrRight, relativeX, relativeY, worldPosition, hitEntity) => { + var cX = x / screenX; + var cY = y / screenY; + if (show) { + if (upOrDown === "down" && leftOrRight === "left" && mouseDown === false) { - //mp.gui.chat.push("Mouse X:" + x + " | Mouse Y:" + y); // Displays mouse position on click. + mouseDown = true; - //if (upOrDown == "up") - // mp.gui.chat.push("Mouse Clicked Up with " + leftOrRight + " button."); + if (isMouseOverItem(x, y) && dragItem === null) { + dragItem = hoverItem; + oldDragSlot = items[dragItem][4]; + items[dragItem][4] = "null"; + } + } - //if (upOrDown == "down") - // mp.gui.chat.push("Mouse Clicked Down with " + leftOrRight + " button."); + if (upOrDown === "up" && leftOrRight === "left" && mouseDown === true) { + + mouseDown = false; + + if (isMouseOverFreeSlot(x, y) && dragItem !== null) { + items[dragItem][4] = actFreeSlot + 1; + oldDragSlot = null; + dragItem = null; + } else { + if (dragItem !== null) { + items[dragItem][4] = oldDragSlot; + dragItem = null; + } + } + } + } }); +//items[userItems.IndexOf(item)][0] = iItem.Name; +//items[userItems.IndexOf(item)][1] = iItem.Description; +//items[userItems.IndexOf(item)][2] = iItem.Gewicht.ToString(); +//items[userItems.IndexOf(item)][3] = item.Amount.ToString(); +//items[userItems.IndexOf(item)][4] = item.Slot.ToString(); \ No newline at end of file