diff --git a/avatar.json b/avatar.json index 09b5a3c..4802630 100644 --- a/avatar.json +++ b/avatar.json @@ -4,7 +4,8 @@ "authors": [ "reidlab", "mrsirsquishy: Squishy's API", - "purpledeni + Manuel_: Gradient Scroll Nickname" + "purpledeni + Manuel_: Gradient Scroll Nickname", + "adristel: Wet Clothes/Fur Script" ], "color": "#d87b5a", "version": "0.1.5", diff --git a/scripts/libs/utils.lua b/scripts/libs/utils.lua new file mode 100644 index 0000000..5bd6bd7 --- /dev/null +++ b/scripts/libs/utils.lua @@ -0,0 +1,17 @@ +local module = {} + +--- @param model ModelPart +--- @param func fun(model: ModelPart) +function module.forEachNonGroup(model, func) + if model:getType() == "GROUP" then + for _, child in pairs(model:getChildren()) do + module.forEachNonGroup(child, func) + end + end + + if model:getType() == "CUBE" or model:getType() == "MESH" then + func(model) + end +end + +return module diff --git a/scripts/main.lua b/scripts/main.lua index 8d64bcc..6cf20ea 100644 --- a/scripts/main.lua +++ b/scripts/main.lua @@ -3,4 +3,5 @@ events.ENTITY_INIT:register(function () require("scripts.tail_physics") require("scripts.ear_physics") require("scripts.nameplate") + require("scripts.soggy") end) diff --git a/scripts/soggy.lua b/scripts/soggy.lua new file mode 100644 index 0000000..3367573 --- /dev/null +++ b/scripts/soggy.lua @@ -0,0 +1,35 @@ +local utils = require("scripts.libs.utils") + +local tw = 1 --top wetness --wet effect +local bw = 1 --bottom wetness +local driptime = 4 --recommended to change based on how low you have TW/BW + +local offset = vec(0,0,0) +local offset2 = vec(0,0,0) +events.TICK:register(function () + if player:isInRain() then --makes clothes wet if in rain + tw = tw - 0.005 + bw = bw - 0.005 + if tw <= 0.6 then tw = 0.6 end + if bw <= 0.6 then bw = 0.6 end + end + offset = vec((math.random()-0.5), math.random(), (math.random()-0.5)) --random offset of particles + offset2 = vec(math.random(-1,1),math.random(-1,1),math.random(-1,1)) -- velocity + if player:isInWater() then bw = 0.6 end --if player is standing in water, make bottom clothes wet + if player:isUnderwater() then tw = 0.6 end --if player is submerged in water, make top clothes wet + if not player:isUnderwater() and tw ~= 1 and not player:isInRain() then tw = tw + 0.005 end --if not submerged in water, dry top clothes + if not player:isInWater() and bw ~= 1 and not player:isInRain() then bw = bw + 0.005 end --if not standing in water, dry bottom clothes + if bw >= 1 then bw = 1 end + if tw >= 1 then tw = 1 end + if world.getTime() % driptime == 0 and tw ~= 1 and not (player:isUnderwater()) then for _ = 0, driptime*0.5 do particles:newParticle("falling_dripstone_water",player:getPos():add(offset+vec(0,0.7,0)),offset2) end end + if world.getTime() % driptime == 0 and bw ~= 1 and not (player:isInWater()) then for _ = 0, driptime*0.5 do particles:newParticle("falling_dripstone_water",player:getPos():add(offset),offset2:mul(0.5)) end end + + + utils.forEachNonGroup(models.models.main.LeftArm, function (part) part:setColor(tw,tw,tw) end) + utils.forEachNonGroup(models.models.main.RightArm, function (part) part:setColor(tw,tw,tw) end) + utils.forEachNonGroup(models.models.main.Head, function (part) part:setColor(tw,tw,tw) end) + utils.forEachNonGroup(models.models.main.Body, function (part) part:setColor(tw,tw,tw) end) + + utils.forEachNonGroup(models.models.main.LeftLeg, function (part) part:setColor(bw,bw,bw) end) + utils.forEachNonGroup(models.models.main.RightLeg, function (part) part:setColor(bw,bw,bw) end) +end)