diff --git a/koptilnya/engine_sound.txt b/koptilnya/engine_sound.txt index 80f403e..0c8486a 100644 --- a/koptilnya/engine_sound.txt +++ b/koptilnya/engine_sound.txt @@ -5,6 +5,7 @@ require("/koptilnya/libs/utils.txt") EngineSound = class("EngineSound") +accessorFunc(EngineSound, "_rpm", "RPM", 0) accessorFunc(EngineSound, "_masterVolume", "MasterVolume", 1) accessorFunc(EngineSound, "_parent", "Parent", chip()) @@ -29,10 +30,11 @@ local function fadeOut(rpm, range) end function EngineSound:initialize(soundsMap) - self._rpm = 0 - self._targetRPM = 0 + self.pitchDamping = 0.2 + self.volumeDamping = 0.3 + self._soundsMap = soundsMap - self._sources = {} + self._lastRPM = 0 for k, v in pairs(soundsMap) do bass.loadURL(v.link, "3d noblock", function(snd, err, errtxt) @@ -42,39 +44,35 @@ function EngineSound:initialize(soundsMap) snd:setVolume(0) v.source = snd - table.insert(self._sources, snd) + v.lastPitch = 1 + v.lastVolume = 0 elseif errtext then error(errtxt) end end) end - hook.add("think", "EngineSound_think", function() - self._rpm = math.lerp(0.2, self._rpm, self._targetRPM) - + hook.add("think", "EngineSound_think", function() for _, v in pairs(self._soundsMap) do if v.source then v.source:setPos(self:getParent():getPos()) - local pitch = self._rpm / v.rootPitch local fadeIn = fadeIn(self._rpm, v.fadeIn) - local fadeOut = fadeOut(self._rpm, v.fadeOut) + local fadeOut = fadeOut(self._rpm, v.fadeOut) + local targetVolume = self:getMasterVolume() * (fadeIn + fadeOut - 1) + local targetPitch = self._rpm / v.rootPitch - v.source:setVolume(math.max(self:getMasterVolume() * (fadeIn + fadeOut - 1), 0.01)) - v.source:setPitch(math.max(pitch, 0.01)) + local pitch = math.lerp(self.pitchDamping, v.lastPitch, targetPitch) + local volume = math.lerp(self.volumeDamping, v.lastVolume, targetVolume) + + v.source:setVolume(volume) + v.source:setPitch(pitch) + + v.lastVolume = volume + v.lastPitch = pitch end end + + _lastRPM = _rpm end) end - -function EngineSound:setRPM(rpm) - self._targetRPM = rpm -end - -function EngineSound:getRPM() - return self._rpm -end - -function EngineSound:getSources() - return self._sources -end \ No newline at end of file diff --git a/koptilnya/gui/elements/element.txt b/koptilnya/gui/elements/element.txt index 8ae777e..416ed78 100644 --- a/koptilnya/gui/elements/element.txt +++ b/koptilnya/gui/elements/element.txt @@ -281,6 +281,8 @@ function Element:_onPaint() if self._firstChild then self._firstChild:_postEventToAllReverse("PAINT") end + + self:postChildPaint(x, y, w, h) end end @@ -362,7 +364,10 @@ end function Element:think() end -function Element:paint() +function Element:paint(x, y, w, h) +end + +function Element:postChildPaint(x, y, w, h) end function Element:onMousePressed(x, y, key, keyName) diff --git a/koptilnya/gui/elements/panel.txt b/koptilnya/gui/elements/panel.txt index 5c420e8..6dde061 100644 --- a/koptilnya/gui/elements/panel.txt +++ b/koptilnya/gui/elements/panel.txt @@ -1,4 +1,4 @@ ---@include element.txt +--@include element.txt --@include label.txt --@include button.txt --@include /koptilnya/libs/utils.txt @@ -31,7 +31,8 @@ function EPanel:initialize() } self.minimizeButton = EButton:new() - self.minimizeButton:setText("_") + self.minimizeButton:setFont(GUI.fonts["icons"]) + self.minimizeButton:setText(string.utf8char(0xE73F)) self.minimizeButton:setSize(32, 32) self.minimizeButton:setRadius(0) self.minimizeButton:setColorScheme(colorScheme) @@ -42,7 +43,7 @@ function EPanel:initialize() self.closeButton = EButton:new() self.closeButton:setFont(GUI.fonts["icons"]) - self.closeButton:setText(string.utf8char(10005)) + self.closeButton:setText(string.utf8char(0xE006)) self.closeButton:setSize(32, 32) self.closeButton:setRadius(0) self.closeButton:setColorScheme(colorScheme) diff --git a/koptilnya/gui/gui.txt b/koptilnya/gui/gui.txt index ef05eb0..ed9ebe1 100644 --- a/koptilnya/gui/gui.txt +++ b/koptilnya/gui/gui.txt @@ -8,7 +8,7 @@ GUI = class("GUI") GUI.static.fonts = { main = render.createFont("Roboto", 16, 700, true), - icons = render.createFont("Roboto Mono", 24, 400, true) + icons = render.createFont("Segoe MDL2 Assets", 32, 400, true) } function GUI:initialize(renderDevice) diff --git a/koptilnya/gui/render_devices/hud.txt b/koptilnya/gui/render_devices/hud.txt index ad9cc9b..faa9438 100644 --- a/koptilnya/gui/render_devices/hud.txt +++ b/koptilnya/gui/render_devices/hud.txt @@ -5,7 +5,7 @@ require("render_device.txt") RenderDeviceHUD = class("RenderDeviceHUD", RenderDevice) function RenderDeviceHUD:initialize() - render.setHUDActive(true) + enableHud(player(), true) self:setSize(render.getResolution()) hook.add("hudshoulddraw", "gui_hudshoulddraw", function(name) diff --git a/koptilnya/mesh_loader/builder.txt b/koptilnya/mesh_loader/builder.txt index 7accfe0..9eeb024 100644 --- a/koptilnya/mesh_loader/builder.txt +++ b/koptilnya/mesh_loader/builder.txt @@ -1,20 +1,16 @@ -local MODEL_PLACEHOLDER = "models/holograms/cube.mdl" -local BUNDLE_SIZE = 2 -local SEND_DELAY = 0.5 - MeshBuilder = class("MeshBuilder") -function MeshBuilder:initialize() +function MeshBuilder:initialize(modelPlaceholder, bundleSize, sendDelay) + self.modelPlaceholder = modelPlaceholder or "models/holograms/cube.mdl" + self.bundleSize = bundleSize or 10 + self.sendDelay = sendDelay or 0.5 + self._objects = {} self._setups = {} if CLIENT then self._setups = {} self._meshData = {} - --[[ - self._shouldBuild = false - self._shouldRevision = true - ]] net.receive("holograms", function(len) local hasNext = net.readBit() @@ -38,46 +34,7 @@ function MeshBuilder:initialize() hasNext = net.readBit() end end) - - --[[ - net.receive("revision", function() - local hasNext = net.readBit() - - while hasNext == 1 do - local key = net.readString() - - net.readEntity(function(ent) - local holo = ent:toHologram() - - self._objects[key] = holo - end) - - hasNext = net.readBit() - end - - self._shouldRevision = false - - if self._shouldBuild then - self:build() - - self._shouldBuild = false - end - end) - ]] else - --[[ - net.receive("revision", function(len, ply) - net.start("revision") - for k, v in pairs(self._objects) do - net.writeBit(1) - net.writeString(k) - net.writeEntity(v) - end - net.writeBit(0) - net.send() - end) - ]] - net.receive("setups", function(len, ply) local hasNext = net.readBit() @@ -97,7 +54,7 @@ function MeshBuilder:initialize() ang = relativeTo:localToWorldAngles(ang) end - local holo = holograms.create(pos, ang, MODEL_PLACEHOLDER, scale) + local holo = holograms.create(pos, ang, self.modelPlaceholder, scale) holo:setColor(color) holo:setMaterial(mat) holo:setParent(parent) @@ -152,17 +109,6 @@ if CLIENT then end function MeshBuilder:build() - --[[ - if self._shouldRevision then - net.start("revision") - net.send() - - self._shouldBuild = true - - return - end - ]] - local function sendSetups(setups) net.start("setups") for k, v in pairs(setups) do @@ -181,20 +127,20 @@ if CLIENT then end local bundleKeys = table.getKeys(self._setups) - if #bundleKeys > BUNDLE_SIZE then + if #bundleKeys > self.bundleSize then local i = 1 - timer.create("sendSetups", SEND_DELAY, math.ceil(#bundleKeys / BUNDLE_SIZE), function() - local from = (i - 1) * BUNDLE_SIZE + 1 + timer.create("sendSetups", self.sendDelay, math.ceil(#bundleKeys / self.bundleSize), function() + local from = (i - 1) * self.bundleSize + 1 local setups = {} - for _, v in pairs({ unpack(bundleKeys, from, from + BUNDLE_SIZE - 1) }) do + for _, v in pairs({ unpack(bundleKeys, from, from + self.bundleSize - 1) }) do setups[v] = self._setups[v] end sendSetups(setups) - if i < math.ceil(#bundleKeys / BUNDLE_SIZE) then + if i < math.ceil(#bundleKeys / self.bundleSize) then i = i + 1 else table.empty(self._setups) diff --git a/koptilnya/mesh_loader/parser.txt b/koptilnya/mesh_loader/parser.txt index 44b3061..8aa0209 100644 --- a/koptilnya/mesh_loader/parser.txt +++ b/koptilnya/mesh_loader/parser.txt @@ -1,5 +1,3 @@ -local MAX_QUOTA = 0.75 - Parser = class("Parser") local initialChipName = chip():getChipName() @@ -7,7 +5,7 @@ local function setStatus(status) setName(string.format("%s (%s)", initialChipName, status)) end -function Parser:initialize(link) +function Parser:initialize(link, maxQuota) if CLIENT then local triangles = mesh.trianglesLeft() local createFromObjCoroutine = coroutine.create(function(objData) @@ -24,7 +22,7 @@ function Parser:initialize(link) setStatus("File received, start parsing...") hook.add("think", "loadingMesh", function() - while quotaAverage() < quotaMax() * MAX_QUOTA do + while quotaAverage() < quotaMax() * (maxQuota or 0.75) do if loadMesh() then setName(initialChipName) self:onLoaded(objData, self.meshData, triangles - mesh.trianglesLeft()) diff --git a/koptilnya/mesh_loader/builder2.txt b/koptilnya/mesh_loader_rework/builder2.txt similarity index 100% rename from koptilnya/mesh_loader/builder2.txt rename to koptilnya/mesh_loader_rework/builder2.txt diff --git a/koptilnya/mesh_loader/cl_mesh.txt b/koptilnya/mesh_loader_rework/cl_mesh.txt similarity index 100% rename from koptilnya/mesh_loader/cl_mesh.txt rename to koptilnya/mesh_loader_rework/cl_mesh.txt diff --git a/koptilnya/mesh_loader/mesh.txt b/koptilnya/mesh_loader_rework/mesh.txt similarity index 100% rename from koptilnya/mesh_loader/mesh.txt rename to koptilnya/mesh_loader_rework/mesh.txt diff --git a/koptilnya/mesh_loader/sv_mesh.txt b/koptilnya/mesh_loader_rework/sv_mesh.txt similarity index 100% rename from koptilnya/mesh_loader/sv_mesh.txt rename to koptilnya/mesh_loader_rework/sv_mesh.txt