diff --git a/assets/audio/music/level1/bass/bass.ogg b/assets/audio/music/level1/bass/bass.ogg new file mode 100644 index 0000000..6e2b785 Binary files /dev/null and b/assets/audio/music/level1/bass/bass.ogg differ diff --git a/assets/audio/music/level1/drums.ogg b/assets/audio/music/level1/drums.ogg new file mode 100644 index 0000000..731cb32 Binary files /dev/null and b/assets/audio/music/level1/drums.ogg differ diff --git a/assets/audio/music/level1/flute.ogg b/assets/audio/music/level1/flute.ogg new file mode 100644 index 0000000..777de17 Binary files /dev/null and b/assets/audio/music/level1/flute.ogg differ diff --git a/assets/audio/music/level1/guitar.ogg b/assets/audio/music/level1/guitar.ogg new file mode 100644 index 0000000..47ce20b Binary files /dev/null and b/assets/audio/music/level1/guitar.ogg differ diff --git a/assets/audio/music/level1/violin.ogg b/assets/audio/music/level1/violin.ogg new file mode 100644 index 0000000..d216526 Binary files /dev/null and b/assets/audio/music/level1/violin.ogg differ diff --git a/assets/audio/sounds/hurt.mp3 b/assets/audio/sounds/hurt.mp3 deleted file mode 100644 index 8c6e1bc..0000000 Binary files a/assets/audio/sounds/hurt.mp3 and /dev/null differ diff --git a/assets/audio/sounds/hurt.ogg b/assets/audio/sounds/hurt.ogg new file mode 100644 index 0000000..7b921cf Binary files /dev/null and b/assets/audio/sounds/hurt.ogg differ diff --git a/lib/audio.lua b/lib/audio.lua index e69de29..6a2816f 100644 --- a/lib/audio.lua +++ b/lib/audio.lua @@ -0,0 +1,32 @@ +--- @class Audio +--- @field musicVolume number +--- @field soundVolume number +audio = {} +audio.__index = audio + +local function new(musicVolume, soundVolume) -- здесь мы должны выгружать значения из файлика с сохранением настроек + return setmetatable({ + musicVolume = musicVolume, + soundVolume = soundVolume + }, audio) +end + +--- @param source love.Source +function audio:play(source) + if source:getType() == "static" then + source:setVolume(self.musicVolume) + return source:play() + end + source:setVolume(self.soundVolume) + return source:play() +end + +function audio:setMusicVolume(volume) + self.musicVolume = volume +end + +function audio:setSoundVolume(volume) + self.soundVolume = volume +end + +return { new = new } diff --git a/lib/music.lua b/lib/music.lua new file mode 100644 index 0000000..2c51874 --- /dev/null +++ b/lib/music.lua @@ -0,0 +1,52 @@ +-- --- @class Music +-- --- @field source table audio streams, that supports multitrack (kind of) +-- --- @field offset number +-- music = {} +-- music.__index = music + +-- --- @param path string accepts path to dir with some music files (example: "main_ambient"; "player/theme1" and etc etc) +-- local function new(path) +-- local dir = Tree.assets.files.audio.music[path] +-- --- @type table +-- local source = {} +-- print(dir) + +-- for _, v in pairs(dir) do +-- print(v.filename) +-- source[v.filename] = v.source +-- print(v.filename) +-- end + +-- print('[music]: new source: ', table.concat(source, ' ')) + +-- return setmetatable({ source = source, offset = 0 }, music) +-- end + +-- function music:update() +-- for _, v in ipairs(self.source) do +-- v:seek() +-- end +-- end + +-- --- pause stemfile or music at all +-- --- @param filename? string +-- function music:pause(filename) +-- if filename then +-- self.source[filename]:pause() +-- else +-- for _, v in pairs(self.source) do +-- v:pause() +-- end +-- end +-- end + +-- --- play music stemfile by his name +-- --- @param filename string +-- --- @return boolean +-- function music:play(filename) +-- print('[music]: ', table.concat(self.source, ' ')) +-- self.source[filename]:seek(self.offset, "seconds") +-- return self.source[filename]:play() +-- end + +-- return { new = new } diff --git a/lib/sound.lua b/lib/sound.lua new file mode 100644 index 0000000..74b554f --- /dev/null +++ b/lib/sound.lua @@ -0,0 +1,9 @@ +-- --- @class Sound +-- --- @field source love.Source just a sound +-- sound = {} + +-- local function new() +-- return setmetatable({}, sound) +-- end + +-- return { new } diff --git a/lib/spellbook.lua b/lib/spellbook.lua index 2702b71..b74ed7e 100644 --- a/lib/spellbook.lua +++ b/lib/spellbook.lua @@ -144,7 +144,8 @@ function attack:cast(caster, target) AnimationNode { function(node) targetSprite:animate("hurt", node) - Tree.assets.files.audio.sounds.hurt:play() + -- Tree.assets.files.audio.sounds.hurt:play() + Tree.audio:play(Tree.assets.files.audio.sounds.hurt) end } } diff --git a/lib/tree.lua b/lib/tree.lua index 3d47546..7973069 100644 --- a/lib/tree.lua +++ b/lib/tree.lua @@ -11,6 +11,7 @@ Tree.controls = require "lib.controls" Tree.level = (require "lib.level.level").new("procedural", "flower_plains") -- для теста у нас только один уровень, который сразу же загружен Tree.behaviors = (require "lib.utils.behavior_loader")("lib/character/behaviors") --- @todo написать нормальную загрузку поведений +Tree.audio = (require "lib.audio").new(1, 1) -- Tree.behaviors.map = require "lib.character.behaviors.map" -- Tree.behaviors.spellcaster = require "lib.character.behaviors.spellcaster" -- Tree.behaviors.sprite = require "lib.character.behaviors.sprite" diff --git a/lib/utils/asset_bundle.lua b/lib/utils/asset_bundle.lua index f831325..712330d 100644 --- a/lib/utils/asset_bundle.lua +++ b/lib/utils/asset_bundle.lua @@ -50,9 +50,9 @@ function AssetBundle.loadFile(path) return love.graphics.newShader(path); elseif (ext == "lua") then return require(string.gsub(path, ".lua", "")) - elseif (ext == "mp3") and string.find(path, "sounds") then + elseif (ext == "ogg") and string.find(path, "sounds") then return love.audio.newSource(path, 'static') - elseif (ext == "mp3") and string.find(path, "music") then + elseif (ext == "ogg") and string.find(path, "music") then return love.audio.newSource(path, 'stream') end return nil diff --git a/main.lua b/main.lua index 26825d5..64008c7 100644 --- a/main.lua +++ b/main.lua @@ -19,6 +19,9 @@ function love.load() Tree.level.turnOrder:endRound() print("Now playing:", Tree.level.turnOrder.current) love.window.setMode(1080, 720, { resizable = true, msaa = 4, vsync = true }) + + -- Level1_music = (require "lib.music").new("level1/bass") + -- Level1_music:play("bass") end local lt = "0"