From 24b94f4a5950d8a65949fc57e49daf16c2079f4b Mon Sep 17 00:00:00 2001 From: Patrick Schwarzer Date: Sun, 13 Apr 2025 05:07:15 +0200 Subject: [PATCH] Audio and Sprite Wrappers Functions to Create and use said wrappers --- classes.lua | 61 +++++++++++++++++++++++++++++++++++++++++ games/test.lua | 6 +++- main.lua | 74 ++++++++++++++++++++++++++++++++++++++------------ 3 files changed, 122 insertions(+), 19 deletions(-) create mode 100644 classes.lua diff --git a/classes.lua b/classes.lua new file mode 100644 index 0000000..5c4152f --- /dev/null +++ b/classes.lua @@ -0,0 +1,61 @@ + +--[[ + Sprite Class + This is essentially just a Wrapper for LÖVEs Image +]]-- + +Sprite = {} +Sprite.__index = Sprite + +function Sprite.new(path) + local self = setmetatable({}, Sprite) + + self.image = love.graphics.newImage(path) + + return self +end + +function Sprite:Draw(x, y) + love.graphics.draw(self.image, x or 0, y or 0) +end + + +--[[ + Audio Class + This is essentially just a Wrapper for LÖVEs Source +]]-- + +Audio = {} +Audio.__index = Audio + +function Audio.new(path, soundType) + local self = setmetatable({}, Audio) + + self.source = love.audio.newSource(path, soundType or "static") + + return self +end + +function Audio:Play() + self.source:play() +end + +function Audio:Stop() + self.source:stop() +end + +function Audio:Pause() + self.source:pause() +end + +function Audio:Resume() + self.source:play() +end + +function Audio:SetLooping(bool) + self.source:setLooping(bool) +end + +function Audio:SetVolume(volume) + self.source:setVolume(volume) +end \ No newline at end of file diff --git a/games/test.lua b/games/test.lua index 4ce88cb..66af9ad 100644 --- a/games/test.lua +++ b/games/test.lua @@ -6,19 +6,23 @@ VERSION = 0 local test = 0 local delay = 0 +local last = "" + function Load() end function Update(dt, curTime) end +local sprite = Sprite("testSprites.png") function KeyPressed(key) if (key == "f5") then test = test + 1 - Sprite("testSprites.png") + sprite = Sprite("testSprites.png") end end function Draw() print("Loaded Sprites: " .. test, 10, 10) + sprite:Draw(100, 0) end diff --git a/main.lua b/main.lua index eb2e829..d3dc6a8 100644 --- a/main.lua +++ b/main.lua @@ -1,20 +1,57 @@ -local function CalculateMemoryUsage() -end +require("classes") -local function LoadSprite(name) - name = "games/" .. name +local LoadObject = { + ["sprite"] = function(name) + name = "games/" .. name + + local info = love.filesystem.getInfo(name) + if (not info) then + error("Failed to load Object (FILE NOT FOUND) ("..name..")") + return + end + if ((info.size + virtual.currentMemory) > virtual.maxMemory) then + error("Failed to load Object (MAX MEMORY) ("..name..")") + return + end - local info = love.filesystem.getInfo(name) - if (not info) then - error("Failed to load Sprite! ("..name..")") - return - end + local newObject = Sprite.new(name) - virtual.currentMemory = virtual.currentMemory + info.size + virtual.loadedObjects[newObject] = { + object = newSprite, + size = info.size, + } + virtual.currentMemory = virtual.currentMemory + info.size + virtual.loadedCount = virtual.loadedCount + 1 - local newSprite = love.graphics.newImage(name) -end + return newObject + end, + ["audio"] = function(name, soundType) + name = "games/" .. name + soundType = soundType or "static" + + local info = love.filesystem.getInfo(name) + if (not info) then + error("Failed to load Object (FILE NOT FOUND) ("..name..")") + return + end + if ((info.size + virtual.currentMemory) > virtual.maxMemory) then + error("Failed to load Object (MAX MEMORY) ("..name..")") + return + end + + local newObject = Audio.new(name, soundType) + + virtual.loadedObjects[newObject] = { + object = newSprite, + size = info.size, + } + virtual.currentMemory = virtual.currentMemory + info.size + virtual.loadedCount = virtual.loadedCount + 1 + + return newObject + end, +} -- Establish Sandbox -- Everything in the table is what the Sandbox has access to @@ -28,7 +65,8 @@ local consoleEnv = { Draw, KeyPressed, - Sprite = LoadSprite, + Sprite2 = LoadSprite, + Sprite = LoadObject["sprite"], print = love.graphics.print, } @@ -74,9 +112,8 @@ function love.load() maxMemory = 16000, currentMemory = 0, - loadedSprites = {}, - loadedSounds = {}, - loadedFonts = {}, + loadedObjects = {}, + loadedCount = 0, } loadGame("test") @@ -128,11 +165,12 @@ function love.update(dt) end function love.draw() + love.graphics.scale(scaling*0.5, scaling*0.5) + love.graphics.print(virtual.currentMemory/1000 .. "/" .. virtual.maxMemory/1000 .. " KB", 2, 2) + love.graphics.print("Loaded Objects: " .. virtual.loadedCount, 2, 10) love.graphics.scale(scaling, scaling) love.graphics.setFont(font) - - love.graphics.print(virtual.currentMemory/1000 .. "/" .. virtual.maxMemory/1000 .. " KB", 2, 2) if (consoleEnv.Draw) then consoleEnv.Draw()