we just need to utilize the function of gameNetwork.
It is not difficulty to implement them.
To consider Apple and Google at the same time,
let's check the codes first and see how them work:
local gameNetwork = require( "gameNetwork" )
local playerName
local playerId
local leaderboardsListId=
{
["HighestScore"]=
{
["Description"] = "Highest Score",
["Identifier"] = "com.gmail.mycom.demo.Leaderboards.HighestScore"
}
}
local achievementsListId =
{
["FinishLevel1"]=
{
["Description"] = "Finish Level 1",
["Identifier"] = "com.gmail.mycom.demo.Achievements.FinishLevel1"
},
["FinishLevel2"]=
{
["Description"] = "Finish Level 2",
["Identifier"] = "com.gmail.mycom.demo.Achievements.FinishLevel2"
}
}
if(isAndroid) then
leaderboardsListId=
{
["HighestScore"]=
{
["Description"] = "Highest Score",
["Identifier"] = "Cgkxxxxxxxx"
}
}
achievementsListId =
{
["FinishLevel1"]=
{
["Description"] = "Finish Level 1",
["Identifier"] = "Cgkxxxxxxx"
},
["FinishLevel2"]=
{
["Description"] = "Finish Level 2",
["Identifier"] = "Cgkxxxxxxxx"
}
}
end
function showLeaderboards( event )
print("showLeaderboards()")
if (playerId ~= nil) then
if ( isAndroid ) then
gameNetwork.show( "leaderboards" )
else
gameNetwork.show( "leaderboards", { leaderboard = {timeScope="AllTime"} } )
end
else
gameNetworkSetup()
end
return true
end
local function postScoreSubmit( event )
--whatever code you need following a score submission...
return true
end
local function updateLeaderBoards(type, myScore)
if (playerId == nil) then
return
end
gameNetwork.request( "setHighScore",
{
localPlayerScore = { category=leaderboardsListId[type]["Identifier"], value=tonumber(myScore) },
listener = postScoreSubmit
} )
print("gameNetwork.request( setHighScore) finished")
end
function showAchievements( event )
print("showAchievements()")
if (playerId ~= nil) then
gameNetwork.show( "achievements" )
else
gameNetworkSetup()
end
return
end
local function achievementRequestCallback( event )
return true
end
local function updateAchievement(type)
if (playerId == nil) then
return
end
gameNetwork.request( "unlockAchievement",
{
achievement = { identifier=achievementsListId[type]["Identifier"], percentComplete=100, showsCompletionBanner=true },
listener = achievementRequestCallback
} )
end
local function loadScoresCallback( event )
if(event.data == nil) then
print("event.data is nil")
return
end
for i=1,25 do
if(event.data[i] == nil) then
break
end
print("event.data[",i,"].playerID:",event.data[i].playerID)
print("event.data[",i,"].category:",event.data[i].category)
if(event.data[i].playerID == playerId) then
print("matched playID...........")
break
end
end
end
local function loadLocalPlayerCallback( event )
if(event.data == nil) then
print("event.data is nil")
return
end
playerId = event.data.playerID
playerName = event.data.alias
print("loadLocalPlayerCallback(),playerName:",playerName,",playerId:",playerId)
if(playerId == nil) then
return
end
myGameSettings.gameCerterHasEverLoggedIn = true
saveData()
gameNetwork.request( "loadScores",
{
leaderboard =
{
category = leaderboardsListId["HighestScore"]["Identifier"],
playerScope = "Global", -- Global, FriendsOnly
timeScope = "AllTime", -- AllTime, Week, Today
--range = {1,5},
playerCentered = true,
},
listener = loadScoresCallback
})
end
local function loadAchievementCallback( event )
if(event.data == nil) then
print("event.data is nil")
return
end
for i=1,#event.data do
if(event.data[i] ~= nil) then
print("event.data[",i,"].identifier:",event.data[i].identifier)
print("event.data[",i,"].title:",event.data[i].title)
print("event.data[",i,"].isCompleted:",event.data[i].isCompleted)
end
end
end
local function gameNetworkLoginCallback( event )
if(isAndroid==false) then
if(event.data) then
print("User has logged into iOS Game Center")
else
print("User has NOT logged into iOS Game Center")
return
end
end
gameNetwork.request( "loadLocalPlayer", { listener=loadLocalPlayerCallback } )
gameNetwork.request( "loadAchievements", { listener=loadAchievementCallback } )
return true
end
local function gpgsInitCallback( event )
if(event.data) then
print("User has logged into Google App Play Center")
gameNetwork.request( "login", { userInitiated=true, listener=gameNetworkLoginCallback } )
else
print("User has NOT logged into Google App Play Center")
end
end
function gameNetworkSetup()
if ( isAndroid ) then
myGameSettings.gameCerterHasEverLoggedIn = false
gameNetwork.init( "google", gpgsInitCallback )
else
gameNetwork.init( "gamecenter", gameNetworkLoginCallback )
end
end
}
InitIn general, we can call gameNetworkSetup() in main.lua,
For Android, we need to check if we have logged in successfully in gpgsInitCallback().
For iOS, we need to check if we have logged in successfully in gameNetworkLoginCallback().
The code gameNetwork.request( "loadLocalPlayer", { listener=loadLocalPlayerCallback } ) is to confirm the user who logs in.
You can go without it.
The code gameNetwork.request( "loadAchievements", { listener=loadAchievementCallback } ) is to recover the users's records.
For example, users may have ever installed this APP, remove this APP, and re-install it again.
If you think that you don't need to recover the records for them, you can go with it.
Show leaderboard
To show the leaderboard, we just need to call function showLeaderboards().
In general, we do it when user press some button
Show achievement
To show the leaderboard, we just need to call function showAchievements().
In general, we do it when user press some button.
Update leaderboard
To update leaderboard, we just need to call function updateLeaderBoards().
In general, wwe do it when user finish the game.
Update achievements
To update leaderboard, we just need to call function updateAchievement().
In general, wwe do it when user finish some round.
Below are what differ between Apple Game Center and Android Google Play Game Service:
Apple Game Center
The data in leaderboardsListId{} and achievementsListId{}:
e.g. "com.gmail.mycom.demo.Leaderboards.HighestScore".
They are user defined, as long as they are not duplicated.
Google Play Game Service
e.g. "com.gmail.mycom.demo.Leaderboards.HighestScore".
They are user defined, as long as they are not duplicated.
Google Play Game Service
The data in leaderboardsListId{} and achievementsListId{}:
e.g. "Cgkxxxxxxxx".
They are defined by play store publish when you finished the setting in game center.
For Google Play Game Service, we also need to add the googlePlayGamesAppId in build.settings:
e.g. "Cgkxxxxxxxx".
They are defined by play store publish when you finished the setting in game center.
For Google Play Game Service, we also need to add the googlePlayGamesAppId in build.settings:
android =
{
usesPermissions =
{
"android.permission.INTERNET",
"android.permission.ACCESS_NETWORK_STATE",
"com.android.vending.BILLING",
},
googlePlayGamesAppId = "123456789012"
},
usesPermissions are not concerned for game service,
googlePlayGamesAppId is what you get when you link the APP in play store publish game center.
沒有留言:
張貼留言