started work on trophies management
This commit is contained in:
@@ -1,5 +1,6 @@
|
|||||||
local ser = require "lib.ser"
|
|
||||||
local input = require "util.input"
|
local input = require "util.input"
|
||||||
|
local inifile = require "lib.inifile"
|
||||||
|
local ser = require "lib.ser"
|
||||||
|
|
||||||
local Gamestate = require "lib.gamestate"
|
local Gamestate = require "lib.gamestate"
|
||||||
local game = require "gamestates.game"
|
local game = require "gamestates.game"
|
||||||
|
31
src/gamestates/trophies.lua
Normal file
31
src/gamestates/trophies.lua
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
local inifile = require "lib.inifile"
|
||||||
|
local trophies = require "trophies"
|
||||||
|
|
||||||
|
local state = {}
|
||||||
|
|
||||||
|
local previousState
|
||||||
|
|
||||||
|
function state:init()
|
||||||
|
-- load or create our actual trophy state
|
||||||
|
if love.filesystem.isFile("trophies.ini") then
|
||||||
|
local trophyStates = inifile.parse("trophies.ini")
|
||||||
|
else
|
||||||
|
trophyStates = {
|
||||||
|
16814 = false,
|
||||||
|
16815 = false,
|
||||||
|
16816 = false,
|
||||||
|
16821 = false
|
||||||
|
}
|
||||||
|
-- TODO write these to file with inifile
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function state:enter(previous)
|
||||||
|
--
|
||||||
|
end
|
||||||
|
|
||||||
|
function state:draw()
|
||||||
|
--
|
||||||
|
end
|
||||||
|
|
||||||
|
return state
|
@@ -32,10 +32,12 @@ function love.load()
|
|||||||
end
|
end
|
||||||
local sessionSuccess = Gamejolt.openSession() -- tell Game Jolt the user is playing
|
local sessionSuccess = Gamejolt.openSession() -- tell Game Jolt the user is playing
|
||||||
if sessionSuccess then
|
if sessionSuccess then
|
||||||
|
--[[ -- we don't ping immediately, also the menu DOES ping immediately
|
||||||
local idleSuccess = Gamejolt.pingSession(false)
|
local idleSuccess = Gamejolt.pingSession(false)
|
||||||
if not idleSuccess then
|
if not idleSuccess then
|
||||||
log("Couldn't ping Gamejolt session. Session may close.") --this is lazy but I don't care
|
log("Couldn't ping Gamejolt session. Session may close.") --this is lazy but I don't care
|
||||||
end
|
end
|
||||||
|
--]]
|
||||||
gamejoltSession = true
|
gamejoltSession = true
|
||||||
else
|
else
|
||||||
log("Couldn't open a session with Game Jolt.")
|
log("Couldn't open a session with Game Jolt.")
|
||||||
|
99
src/trophies.lua
Normal file
99
src/trophies.lua
Normal file
@@ -0,0 +1,99 @@
|
|||||||
|
local trophies = {
|
||||||
|
-- note that image_url values are not actually URLs, they are local resources
|
||||||
|
{
|
||||||
|
id = 16814,
|
||||||
|
title = "The Answer to Life, the Universe, and Everything",
|
||||||
|
description = "Score 42 points in any mode.",
|
||||||
|
difficulty = "Silver",
|
||||||
|
image_url = "achievements/the_answer.png",
|
||||||
|
achieved = false,
|
||||||
|
isSecret = true,
|
||||||
|
isVisible = true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id = 16815,
|
||||||
|
title = "h4x0r",
|
||||||
|
description = "Unable to be achieved and only visible to me. To obtain, you must hack the game.",
|
||||||
|
difficulty = "Bronze",
|
||||||
|
image_url = "achievements/h4x0r.png",
|
||||||
|
achieved = false,
|
||||||
|
isSecret = true,
|
||||||
|
isVisible = false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id = 16816,
|
||||||
|
title = "Failure",
|
||||||
|
description = "Lose a game.",
|
||||||
|
difficulty = "Bronze",
|
||||||
|
image_url = "achievements/failure.png",
|
||||||
|
achieved = false,
|
||||||
|
isSecret = false,
|
||||||
|
isVisible = true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id = 16821,
|
||||||
|
title = "l33t",
|
||||||
|
description = "Score 1337 points in any mode.",
|
||||||
|
difficulty = "Bronze",
|
||||||
|
image_url = "achievements/l33t.png",
|
||||||
|
achieved = false,
|
||||||
|
isSecret = true,
|
||||||
|
isVisible = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function trophies:getByID(id)
|
||||||
|
for i=1,#self do
|
||||||
|
if self[i].id == id then return self[i] end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function trophies:achieve(id, session)
|
||||||
|
local trophy
|
||||||
|
for i=1,#self do
|
||||||
|
if self[i].id == id then trophy = self[i] end
|
||||||
|
end
|
||||||
|
if not trophy.achieved then
|
||||||
|
trophy.achieved = true
|
||||||
|
-- TODO need to trigger a popup
|
||||||
|
if session then
|
||||||
|
local achieveSuccess = Gamejolt.giveTrophy(id)
|
||||||
|
if achieveSuccess then
|
||||||
|
log("Achieved trophy #" .. id)
|
||||||
|
else
|
||||||
|
log("Error with Game Jolt. Trophy #" .. id .. " could not be achieved.")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- only call if there is a session
|
||||||
|
-- returns true/false whether sync was successful
|
||||||
|
function trophies:syncTrophies()
|
||||||
|
--first we fetch the trophies available
|
||||||
|
local gjTrophies = Gamejolt.fetchAllTrophies()
|
||||||
|
if gjTrophies then
|
||||||
|
for i=1,#gjTrophies do --within the remote
|
||||||
|
for j=1,#self do --check locally
|
||||||
|
if self[j].id == gjTrophies[i].id then --if same
|
||||||
|
if gjTrophies[i].achieved and not self[j].achieved then --if achieved remotely and not here,
|
||||||
|
self[j].achieved = true --achieve here
|
||||||
|
end
|
||||||
|
if self[j].achieved and not gjTrophies[i].achieved then --if achieved here and not remotely,
|
||||||
|
local achieveSuccess = Gamejolt.giveTrohpy(self[j].id) --give it remotely
|
||||||
|
if not achieveSuccess then
|
||||||
|
log("Failed to achieve trophy #" .. self[j].id .. " on Game Jolt.")
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return true
|
||||||
|
else
|
||||||
|
log("Failed to retrieve trophies from Game Jolt.")
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
return trophies
|
Reference in New Issue
Block a user