Discord RPC cleanup

- Loading Discord RPC is now handled by `load/rpc.lua`
- Removed `presence` global, call `DiscordRPC:update()` directly with what needs updating
- Game doesn't crash anymore if the Discord RPC fails to load
- Added RPC variables in the gamemode superclass to let each gamemode handle its special case
This commit is contained in:
Oshisaure 2020-10-11 02:17:48 +01:00
parent 05230ac046
commit 5d32b6a3e7
9 changed files with 96 additions and 64 deletions

56
load/rpc.lua Normal file
View File

@ -0,0 +1,56 @@
print("Loading discord RPC...")
DiscordRPC = {
loaded = false
}
local success, RPC = pcall(require, "libs.discordRPC")
if success then
DiscordRPC.loaded = true
DiscordRPC.appId = "599778517789573120"
function RPC.ready(userId, username, discriminator, avatar)
print(string.format("Discord: ready (%s, %s, %s, %s)", userId, username, discriminator, avatar))
end
function RPC.disconnected(errorCode, message)
print(string.format("Discord: disconnected (%d: %s)", errorCode, message))
end
function RPC.errored(errorCode, message)
print(string.format("Discord: error (%d: %s)", errorCode, message))
end
function RPC.joinGame(joinSecret)
print(string.format("Discord: join (%s)", joinSecret))
end
function RPC.spectateGame(spectateSecret)
print(string.format("Discord: spectate (%s)", spectateSecret))
end
function RPC.joinRequest(userId, username, discriminator, avatar)
print(string.format("Discord: join request (%s, %s, %s, %s)", userId, username, discriminator, avatar))
RPC.respond(userId, "yes")
end
RPC.initialize(DiscordRPC.appId, true)
local now = os.time(os.date("*t"))
RPC.updatePresence({
startTimestamp = now,
details = "Loading game...",
state = "",
largeImageKey = "icon2",
largeImageText = "Original game by Joe Zeng",
smallImageKey = "",
smallImageText = ""
})
DiscordRPC.RPC = RPC
print("DiscordRPC successfully loaded.")
else
print("DiscordRPC failed to load!")
print(RPC)
end
function DiscordRPC:update(newstuff)
if self.loaded then self.RPC.updatePresence(newstuff) end
end

View File

@ -1,46 +1,7 @@
function love.load() function love.load()
discordRPC = require("libs.discordRPC")
discordRPC.appId = "599778517789573120"
function discordRPC.ready(userId, username, discriminator, avatar)
print(string.format("Discord: ready (%s, %s, %s, %s)", userId, username, discriminator, avatar))
end
function discordRPC.disconnected(errorCode, message)
print(string.format("Discord: disconnected (%d: %s)", errorCode, message))
end
function discordRPC.errored(errorCode, message)
print(string.format("Discord: error (%d: %s)", errorCode, message))
end
function discordRPC.joinGame(joinSecret)
print(string.format("Discord: join (%s)", joinSecret))
end
function discordRPC.spectateGame(spectateSecret)
print(string.format("Discord: spectate (%s)", spectateSecret))
end
function discordRPC.joinRequest(userId, username, discriminator, avatar)
print(string.format("Discord: join request (%s, %s, %s, %s)", userId, username, discriminator, avatar))
discordRPC.respond(userId, "yes")
end
discordRPC.initialize(discordRPC.appId, true)
local now = os.time(os.date("*t"))
presence = {
startTimestamp = now,
details = "Loading game...",
state = "",
largeImageKey = "icon2",
largeImageText = "Original game by Joe Zeng",
smallImageKey = "",
smallImageText = ""
}
math.randomseed(os.time()) math.randomseed(os.time())
highscores = {} highscores = {}
require "load.rpc"
require "load.graphics" require "load.graphics"
require "load.fonts" require "load.fonts"
require "load.sounds" require "load.sounds"

View File

@ -5,13 +5,10 @@ function GameScene:new(game_mode, ruleset)
self.game = game_mode() self.game = game_mode()
self.ruleset = ruleset() self.ruleset = ruleset()
self.game:initialize(self.ruleset) self.game:initialize(self.ruleset)
if game_mode.name == "Demon Mode" and math.random(1, 7) == 7 then DiscordRPC:update({
presence.details = "Suffering" details = self.game.rpc_details,
else state = self.game.name,
presence.details = "In game" })
end
presence.state = game_mode.name
discordRPC.updatePresence(presence)
end end
function GameScene:update() function GameScene:update()

View File

@ -17,9 +17,10 @@ function ConfigScene:new()
self.config = config.input self.config = config.input
self.highlight = 1 self.highlight = 1
presence.details = "In menus" DiscordRPC:update({
presence.state = "Changing game config" details = "In menus",
discordRPC.updatePresence(presence) state = "Changing game settings",
})
end end
function ConfigScene:update() function ConfigScene:update()

View File

@ -23,9 +23,10 @@ function ConfigScene:new()
self.config = config.input self.config = config.input
self.input_state = 1 self.input_state = 1
presence.details = "In menus" DiscordRPC:update({
presence.state = "Changing input config" details = "In menus",
discordRPC.updatePresence(presence) state = "Changing input config",
})
end end
function ConfigScene:update() function ConfigScene:update()

View File

@ -47,9 +47,10 @@ function ModeSelectScene:new()
ruleset = current_ruleset, ruleset = current_ruleset,
select = "mode", select = "mode",
} }
presence.details = "In menus" DiscordRPC:update({
presence.state = "Choosing a mode" details = "In menus",
discordRPC.updatePresence(presence) state = "Choosing a mode",
})
end end
function ModeSelectScene:update() function ModeSelectScene:update()

View File

@ -7,13 +7,27 @@ local main_menu_screens = {
ExitScene, ExitScene,
} }
local mainmenuidle = {"Idle", "Twiddling their thumbs", "Admiring the main menu's BG", "Waiting for spring to come"} local mainmenuidle = {
"Idle",
"On title screen",
"On main menu screen",
"Twiddling their thumbs",
"Admiring the main menu's BG",
"Waiting for spring to come",
"Actually not playing",
"Contemplating collecting stars",
"Preparing to put the block!!",
"Having a nap",
"In menus",
"Bottom text",
}
function TitleScene:new() function TitleScene:new()
self.main_menu_state = 1 self.main_menu_state = 1
presence.details = "In menus" DiscordRPC:update({
presence.state = mainmenuidle[math.random(#mainmenuidle)] details = "In menus",
discordRPC.updatePresence(presence) state = mainmenuidle[math.random(#mainmenuidle)],
})
end end
function TitleScene:update() function TitleScene:update()

View File

@ -11,9 +11,6 @@ DemonModeGame.name = "Demon Mode"
DemonModeGame.hash = "DemonMode" DemonModeGame.hash = "DemonMode"
DemonModeGame.tagline = "Can you handle the ludicrous speed past level 20?" DemonModeGame.tagline = "Can you handle the ludicrous speed past level 20?"
function DemonModeGame:new() function DemonModeGame:new()
DemonModeGame.super:new() DemonModeGame.super:new()
self.roll_frames = 0 self.roll_frames = 0
@ -29,6 +26,9 @@ function DemonModeGame:new()
self.enable_hold = true self.enable_hold = true
self.lock_drop = true self.lock_drop = true
self.next_queue_length = 3 self.next_queue_length = 3
if math.random() < 1/6.66 then
self.rpc_details = "Suffering"
end
end end
function DemonModeGame:getARE() function DemonModeGame:getARE()

View File

@ -40,6 +40,7 @@ function GameMode:new()
self.draw_section_times = false self.draw_section_times = false
self.draw_secondary_section_times = false self.draw_secondary_section_times = false
self.big_mode = false self.big_mode = false
self.rpc_details = "In game"
-- variables related to configurable parameters -- variables related to configurable parameters
self.drop_locked = false self.drop_locked = false
self.hard_drop_locked = false self.hard_drop_locked = false