From 3bdadbbcbe4f7272d3e789bc33a31a49205b8de3 Mon Sep 17 00:00:00 2001 From: JustAGenericUsername <92590792+JustAGenericUsername@users.noreply.github.com> Date: Mon, 16 Sep 2024 21:19:45 -0400 Subject: [PATCH] yu --- mod-list.html | 2 +- mods/scenexe.js | 364 ++++++++++++++++++++++++++++++++++++++++-------- 2 files changed, 308 insertions(+), 58 deletions(-) diff --git a/mod-list.html b/mod-list.html index 00566e31..82d5e926 100644 --- a/mod-list.html +++ b/mod-list.html @@ -375,7 +375,7 @@ randomness_but_tick.jsRandom experimental elements using the tick function featureAlice randomness_but_tool.jsRandom experimental elements using the tool function featureAlice randomness.jsRandom experimental elementsAlice -scenexe.jsWork-in-progress mod, allows you to move through a simulated field of polygonsnousernamefound +scenexe.jsWork-in-progress mod, allows you to move through and damage a simulated field of polygonsnousernamefound structure_test_2.jsAnother test for implementing structures into Sandboxels (requires the previous test)Alice structure_test.jsA test for implementing structures into SandboxelsAlice test.jsA test mod that adds mayo :)R74n diff --git a/mods/scenexe.js b/mods/scenexe.js index 3b1b0a28..54a2e842 100644 --- a/mods/scenexe.js +++ b/mods/scenexe.js @@ -1,5 +1,6 @@ polygonColors = function(sides){ let baseColors = [ + /* { r: 255, g: 228, b: 107 }, { r: 252, g: 118, b: 118 }, { r: 118, g: 140, b: 252 }, @@ -12,18 +13,104 @@ polygonColors = function(sides){ { r: 64, g: 54, b: 69 }, { r: 237, g: 237, b: 255 }, { r: 0, g: 0, b: 0 }, + */ + "rgb(255, 228, 107)", + "rgb(252, 118, 118)", + "rgb(118, 140, 252)", + "rgb(252, 166, 68)", + "rgb(56, 183, 100)", + "rgb(74, 102, 189)", + "rgb(93, 39, 93)", + "rgb(26, 28, 44)", + "rgb(6, 0, 17)", + "rgb(64, 54, 69)", + "rgb(237, 237, 255)", + "rgb(0, 0, 0)", ] if (sides <= 14 && sides >= 3){ return baseColors[Math.round(sides)-3] } else { - return {r: 0, g: 0, b: 0} + return "rgb(0, 0, 0)" } } isKeyDown = { w: false, a: false, s: false, - d: false + d: false, + i: false, + o: false +} +function HSVtoRGB(h, s, v) { + var r, g, b, i, f, p, q, t; + if (arguments.length === 1) { + s = h.s, v = h.v, h = h.h; + } + i = Math.floor(h * 6); + f = h * 6 - i; + p = v * (1 - s); + q = v * (1 - f * s); + t = v * (1 - (1 - f) * s); + switch (i % 6) { + case 0: r = v, g = t, b = p; break; + case 1: r = q, g = v, b = p; break; + case 2: r = p, g = v, b = t; break; + case 3: r = p, g = q, b = v; break; + case 4: r = t, g = p, b = v; break; + case 5: r = v, g = p, b = q; break; + } + return { + r: Math.round(r * 255), + g: Math.round(g * 255), + b: Math.round(b * 255) + }; +} +function RGBtoHSV(r, g, b) { + if (arguments.length === 1) { + g = r.g, b = r.b, r = r.r; + } + var max = Math.max(r, g, b), min = Math.min(r, g, b), + d = max - min, + h, + s = (max === 0 ? 0 : d / max), + v = max / 255; + + switch (max) { + case min: h = 0; break; + case r: h = (g - b) + d * (g < b ? 6: 0); h /= 6 * d; break; + case g: h = (b - r) + d * 2; h /= 6 * d; break; + case b: h = (r - g) + d * 4; h /= 6 * d; break; + } + + return { + h: h, + s: s, + v: v + }; +} +function colorToObject(color){ + list = color.match(/\d+/g); + list[0] = parseInt(list[0]) + list[1] = parseInt(list[1]) + list[2] = parseInt(list[2]) + return {r: list[0], g: list[1], b: list[2]} +} +function objectToColor(object){ + return "rgb(" + object.r + ", " + object.g + ", " + object.b + ")" +} +function darkenColor(color){ + let colorObject = colorToObject(color) + colorObject.r = Math.max(0, colorObject.r - 30) + colorObject.g = Math.max(0, colorObject.g - 30) + colorObject.b = Math.max(0, colorObject.b - 30) + return objectToColor(colorObject) +} +function makeVisible(color){ + let colorObject = colorToObject(color) + colorObject.r = Math.max(40, colorObject.r) + colorObject.g = Math.max(40, colorObject.g) + colorObject.b = Math.max(40, colorObject.b) + return objectToColor(colorObject) } // when wasd keydown, set isKeyDown to true document.addEventListener("keydown", (event) => { @@ -39,6 +126,12 @@ document.addEventListener("keydown", (event) => { if (event.key === "d") { isKeyDown.d = true } + if (event.key === "i") { + isKeyDown.i = true + } + if (event.key === "o") { + isKeyDown.o = true + } }) // when wasd keyup, set isKeyDown to false document.addEventListener("keyup", (event) => { @@ -54,11 +147,59 @@ document.addEventListener("keyup", (event) => { if (event.key === "d") { isKeyDown.d = false } + if (event.key === "i") { + isKeyDown.i = false + } + if (event.key === "o") { + isKeyDown.o = false + } + if (event.key === "m") { + if (debug){ + debug = false + } else { + debug = true + } + } }) orbitalSpeed = function(sides){ return 1/(1.00672*Math.pow(0.344151, sides) + 0.000002) } -shapeNames = ["Triangle", "Square", "Pentagon", "Hexagon", "Heptagon", "Octagon", "Nonagon", "Decagon", "Hendecagon", "Dodecagon", "Triskaidecagon", "Tetrakaidecagon", "Pentakaidecagon", "Hexakaidecagon", "Heptakaidecagon", "Octakaidecagon", "Enneakaidecagon", "Icosagon", "literally just a circle"] +function shapeNamer(sides) { + const ones = ["hen", "do", "tri", "tetra", "penta", "hexa", "hepta", "octa", "ennea"]; + const tens = ["deca", "icosa", "triaconta", "tetraconta", "pentaconta", "hexaconta", "heptaconta", "octaconta", "enneaconta"]; + const specialCases = { + 4: "square", + 2: "line", + 1: "point", + 3: "triangle", + 9: "nonagon", + 1000: "stop", + 1001: "please", + 1002: "go touch grass", + 1003: "are you serious" + }; + if (sides in specialCases) { + return specialCases[sides]; + } + function rb(v) { + return v ? v : ""; + } + const numberString = sides.toString(); + if (sides < 10) { + return ones[sides - 1] + "gon"; + } else if (sides < 100) { + const tensPlace = Math.floor(sides / 10); + const onesPlace = sides % 10; + return rb(ones[onesPlace - 1]) + tens[tensPlace - 1] + "gon"; + } else if (sides < 1000) { + const hundredsPlace = Math.floor(sides / 100); + const tensPlace = Math.floor((sides % 100) / 10); + const onesPlace = sides % 10; + return ones[hundredsPlace - 1] + "hecta" + rb(tens[tensPlace - 1]) + rb(ones[onesPlace - 1]) + "gon"; + } else { + return "literally just a circle"; + } +} function polygonCount(random){ const thresholds = [0, 0.3, 0.68, 0.77, 0.82, 0.86, 0.88, 0.89, 0.895, 0.8975, 0.898, 0.8982, 1]; const values = [3, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 3]; @@ -70,12 +211,8 @@ function polygonCount(random){ } } polygonList = [] -zoomLevel = 1 -polygonSize = function(sides){ - return 18 * Math.pow(1.47, sides - 3) -} -for (var i = 0; i <= 400; i++){ - sides = polygonCount(Math.random()) +zoomLevel = 0.5 +function newPolygon(sides){ polygonList.push({ sides: sides, radius: polygonSize(sides), @@ -85,59 +222,143 @@ for (var i = 0; i <= 400; i++){ vy: 0, random: Math.random(), rotation: Math.random() * 2 * Math.PI, - collisionMass: 3+(polygonSize(sides)**2)/6 + collisionMass: 3+(polygonSize(sides)**2)/6, + maxHealth: 3+(polygonSize(sides)**2)/6, + health: 3+(polygonSize(sides)**2)/6, + type: 0, + bodyDamage: 3, + regenDelay: 20, + regenSpeed: 0.0007, + timeSinceHurt: null, + name: shapeNamer(sides) }) } -function drawPolygon(ctx, polygon){ - let x = polygon.x - let y = polygon.y - let sides = polygon.sides - let radius = polygon.radius - let rotation = polygon.rotation - let vx = polygon.vx - let vy = polygon.vy - ctx.lineJoin = 'round'; - ctx.fillStyle = "rgb(" + polygonColors(sides).r + ", " + polygonColors(sides).g + ", " + polygonColors(sides).b + ")" - ctx.strokeStyle = "rgb(" + Math.max(polygonColors(sides).r - 30, 0) + ", " + Math.max(polygonColors(sides).g - 30, 0) + ", " + Math.max(polygonColors(sides).b - 30, 0) + ")" - ctx.lineWidth = 5*zoomLevel - ctx.beginPath() - ctx.moveTo(Math.sin(rotation)*radius+x, Math.cos(rotation)*radius+y) - for (var i = 0; i <= sides+1; i++){ - ctx.lineTo(Math.sin(rotation+2*Math.PI*i/sides)*radius+x, Math.cos(rotation+2*Math.PI*i/sides)*radius+y) - } - ctx.fill() - ctx.stroke() - // debug - /* - // draw a line to represent angle - ctx.beginPath() - ctx.moveTo(x, y) - ctx.lineTo(Math.sin(rotation)*2*radius+x, Math.cos(rotation)*2*radius+y) - ctx.strokeStyle = "rgb(0, 0, 255)" - ctx.stroke() - // draw a line to represent velocity - ctx.beginPath() - ctx.moveTo(x, y) - ctx.lineTo(x+20*vx, y+20*vy) - ctx.strokeStyle = "rgb(255, 0, 0)" - ctx.stroke() - // draw some text to represent mass - ctx.lineWidth = 2 - ctx.fillStyle = "rgb(255, 255, 255)" - ctx.strokeStyle = "rgb(0, 0, 0)" - ctx.font = `bold 30px Helvetica` - ctx.fillText(Math.round(polygon.collisionMass), x, y) - ctx.strokeText(Math.round(polygon.collisionMass), x, y) - */ +polygonSize = function(sides){ + return 18 * Math.pow(1.47, sides - 3) } +for (var i = 0; i <= 400; i++){ + sides = polygonCount(Math.random()) + newPolygon(sides) +} +function drawPolygon(ctx, polygon, index){ + if (Math.abs(polygonList[index].x-camera[0]-polygon.radius collideList[poly].regenDelay){ + collideList[poly].health += collideList[poly].regenSpeed*collideList[poly].maxHealth + collideList[poly].health = Math.min(collideList[poly].health, collideList[poly].maxHealth) + } } // move polygons for (var poly = 0; poly < collideList.length; poly++){ @@ -236,6 +477,9 @@ renderPostPixel(function(ctx){ // add some velocity towards wherever its facing polygon.vx += Math.sin(polygon.rotation)/orbitalSpeed(polygon.sides)*8 polygon.vy += Math.cos(polygon.rotation)/orbitalSpeed(polygon.sides)*8 + if (polygon.health <= 0){ + polygonList.splice(poly, 1) + } } camera[0] += (scenexeplayer.x - camera[0])/10 camera[1] += (scenexeplayer.y - camera[1])/10 @@ -268,4 +512,10 @@ renderPostPixel(function(ctx){ scenexeplayer.vx += 1 } } + if (isKeyDown.i){ + zoomLevel += 0.02 + } + if (isKeyDown.o){ + zoomLevel -= 0.02 + } }) \ No newline at end of file