Skip to content

Commit

Permalink
Fixed input crash in ingame. Fixed order of ducks on event score screen
Browse files Browse the repository at this point in the history
  • Loading branch information
SimonLarsen committed Mar 7, 2014
1 parent db0e124 commit 908abc6
Show file tree
Hide file tree
Showing 5 changed files with 201 additions and 1 deletion.
10 changes: 10 additions & 0 deletions ingameState.lua
Expand Up @@ -43,6 +43,13 @@ function IngameState.create(parent, mapname, rules)
self.cursors[v.player]:setOffset(121,8)
end

for i=1,4 do
self.inputs[i] = parent.inputs[i]
self.inputs[i].lock = true
self.cursors[i]:addInput(self.inputs[i])
end
self.inputs = parent.inputs

-- Set variables and counters
self.timeLeft = self.rules.roundtime
self.time = 0
Expand Down Expand Up @@ -161,6 +168,9 @@ function IngameState:update(dt)

-- Check player actions
for i=1,4 do
if self.inputs[i] == nil then
print("Input: " .. i .. " is nil?!")
end
local ac = self.inputs[i]:getAction()
if ac then
local cx = math.floor(self.cursors[i].x / 48)
Expand Down
3 changes: 2 additions & 1 deletion main.lua
@@ -1,4 +1,5 @@
require("Tserial")
require("slam")
require("util")
require("resmgr")
require("map")
Expand Down Expand Up @@ -56,7 +57,7 @@ local SCALEX = 1
local SCALEY = 1

local stateStack
local config
config = nil

function love.load()
-- Setup user data
Expand Down
Binary file modified res/images/duck_dolls.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions resmgr.lua
Expand Up @@ -39,6 +39,7 @@ function playMusic(name)
end
local source = love.audio.newSource("res/music/"..name..".ogg")
source:setLooping(true)
source:setVolume(config.music_volume)
source:play()

currentSong = name
Expand Down
188 changes: 188 additions & 0 deletions slam.lua
@@ -0,0 +1,188 @@
-- Simple LÖVE Audio Manager
--
-- Copyright (c) 2011 Matthias Richter
-- Permission is hereby granted, free of charge, to any person obtaining a copy
-- of this software and associated documentation files (the "Software"), to deal
-- in the Software without restriction, including without limitation the rights
-- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-- copies of the Software, and to permit persons to whom the Software is
-- furnished to do so, subject to the following conditions:
--
-- The above copyright notice and this permission notice shall be included in
-- all copies or substantial portions of the Software.
--
-- Except as contained in this notice, the name(s) of the above copyright holders
-- shall not be used in advertising or otherwise to promote the sale, use or
-- other dealings in this Software without prior written authorization.
--
-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-- THE SOFTWARE.
--

local newInstance = love.audio.newSource
local stop = love.audio.stop

------------------
-- source class --
------------------
local Source = {}
Source.__index = Source
Source.__newindex = function(_,k) error(('Cannot write key %s'):format(tostring(k))) end

local function remove_stopped(sources)
local remove = {}
for s in pairs(sources) do
remove[s] = true
end
for s in pairs(remove) do
sources[s] = nil
end
end

local function get_target(target)
if type(target) == 'table' then
return target[math.random(1,#target)]
end
return target
end

local play_instance, stop_instance
function Source:play()
remove_stopped(self.instances)
if self._paused then self:stop() end
local instance = newInstance(get_target(self.target), self.how)

-- overwrite instance:stop() and instance:play()
if not (play_instance and stop_instance) then
play_instance = getmetatable(instance).play
getmetatable(instance).play = error

stop_instance = getmetatable(instance).stop
getmetatable(instance).stop = function(this)
stop_instance(this)
self.instances[this] = nil
end
end

instance:setLooping(self.looping)
instance:setPitch(self.pitch)
instance:setVolume(self.volume)

self.instances[instance] = instance
play_instance(instance)
return instance
end

function Source:stop()
for s in pairs(self.instances) do
s:stop()
end
self._paused = false
self.instances = {}
end

function Source:pause()
if self._paused then return end
for s in pairs(self.instances) do
s:pause()
end
self._paused = true
end

function Source:resume()
if not self._paused then return end
for s in pairs(self.instances) do
s:resume()
end
self._paused = false
end

function Source:addTags(tag, ...)
if not tag then return end
love.audio.tags[tag][self] = self
return Source.addTags(self, ...)
end

function Source:removeTags(tag, ...)
if not tag then return end
love.audio.tags[tag][self] = nil
return Source.removeTags(self, ...)
end

function Source:isStatic()
return self.how ~= "stream"
end

-- getter/setter for looping, pitch and volume
for _, property in ipairs{'looping', 'pitch', 'volume'} do
local name = property:sub(1,1):upper() .. property:sub(2)
Source['get' .. name] = function(self)
return self[property]
end

Source['set' .. name] = function(self, val)
self[property] = val
for s in pairs(self.instances) do
s['set' .. name](s, val)
end
end
end
Source.isLooping = Source.getLooping

--------------------------
-- love.audio interface --
--------------------------
function love.audio.newSource(target, how)
local s = {
_paused = false,
target = target,
how = how,
instances = {},
looping = false,
pitch = 1,
volume = 1,
}
if how == 'static' and type(target) == 'string' then
s.target = love.sound.newSoundData(target)
end
love.audio.tags.all[s] = s
return setmetatable(s, Source)
end

function love.audio.play(source)
assert(source and source.instances, "Can only play source objects.")
return source:play()
end

function love.audio.stop(source)
if source and source.stop then return source:stop() end
stop()
end

----------
-- tags --
----------
local Tag = { __mode = "kv" }
function Tag:__index(func)
-- calls a function on all tagged sources
return function(...)
for s in pairs(self) do
assert(type(s[func]) == "function", ("`%s' does not name a function."):format(func))
s[func](s, ...)
end
end
end

love.audio.tags = setmetatable({}, {
__newindex = error,
__index = function(t,k)
local tag = setmetatable({}, Tag)
rawset(t, k, tag)
return tag
end,
})

0 comments on commit 908abc6

Please sign in to comment.