summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--not/Music.lua25
-rw-r--r--not/MusicPlayer.lua34
2 files changed, 34 insertions, 25 deletions
diff --git a/not/Music.lua b/not/Music.lua
deleted file mode 100644
index ee930f4..0000000
--- a/not/Music.lua
+++ /dev/null
@@ -1,25 +0,0 @@
---- `Music`
--- Simple music player object that plays and loops selected track in single Scene.
-Music = {
- source = --[[love.audio.newSource]]nil
-}
-
-Music.__index = Music
-
-function Music:new (trackName)
- local o = setmetatable({}, self)
- o:init(trackName)
- return o
-end
-
--- TODO: trackName should be passed without file extension.
-function Music:init (trackName)
- self.source = love.audio.newSource("assets/music/" .. trackName)
- self.source:setLooping(true)
- self.source:setVolume(.7)
- self.source:play()
-end
-
-function Music:delete ()
- self.source:stop()
-end \ No newline at end of file
diff --git a/not/MusicPlayer.lua b/not/MusicPlayer.lua
new file mode 100644
index 0000000..1e65e3b
--- /dev/null
+++ b/not/MusicPlayer.lua
@@ -0,0 +1,34 @@
+require "not.object"
+
+--- `MusicPlayer`
+-- Simple music player object that plays and loops selected track.
+MusicPlayer = Object:extends()
+
+MusicPlayer.TRACKS = {}
+
+-- TODO: trackName should be passed without file extension.
+function MusicPlayer:new (trackName)
+ self:setTrack(trackName)
+end
+
+function MusicPlayer:delete ()
+ self.source:stop()
+end
+
+function MusicPlayer:setTrack (trackName)
+ if self.source then
+ self.source:stop()
+ end
+ if MusicPlayer.TRACKS[trackName] then
+ self.source = MusicPlayer.TRACKS[trackName]
+ else
+ local source = love.audio.newSource("assets/music" .. trackName)
+ source:setLooping(true)
+ source:setVolume(.7)
+ self.source = source
+ MusicPlayer.TRACKS[trackName] = source
+ end
+ self.source:play()
+end
+
+return MusicPlayer