Skip to content

Commit

Permalink
Added support for events
Browse files Browse the repository at this point in the history
  • Loading branch information
britzl committed Mar 14, 2020
1 parent ac29a9c commit 099ec81
Show file tree
Hide file tree
Showing 10 changed files with 1,307 additions and 2 deletions.
27 changes: 27 additions & 0 deletions docs/_data/api.yml
Expand Up @@ -749,6 +749,28 @@
type: number
desc: One of the gpgs.COLLECTION_ constants


#*****************************************************************************************************
# Events
#*****************************************************************************************************

- name: event_increment
type: function
desc: Increments an event specified by eventId by the given amount.

parameters:
- name: eventId
type: string

- name: amount
type: number

#*****************************************************************************************************

- name: event_get
type: function
desc: Asynchronously gets all events.

#*****************************************************************************************************
# Popup position
#*****************************************************************************************************
Expand Down Expand Up @@ -886,6 +908,11 @@
desc: The message type that GPGS sends when finishing the asynchronous operation
after calling `gpgs.leaderboard_get_player_score()`

- name: MSG_GET_EVENTS
type: number
desc: The message type that GPGS sends when finishing the asynchronous operation
after calling `gpgs.event_get()`

#*****************************************************************************************************
# Status
#*****************************************************************************************************
Expand Down
37 changes: 37 additions & 0 deletions gpgs/src/gpgs_extension.cpp
Expand Up @@ -66,10 +66,17 @@ struct GPGS_Leaderboard
jmethodID m_LoadCurrentPlayerScore;
};

struct GPGS_Events
{
jmethodID m_IncrementEvent;
jmethodID m_LoadEvents;
};

static GPGS g_gpgs;
static GPGS_Disk g_gpgs_disk;
static GPGS_Achievement g_gpgs_achievement;
static GPGS_Leaderboard g_gpgs_leaderboard;
static GPGS_Events g_gpgs_events;

// generic JNI calls

Expand Down Expand Up @@ -609,6 +616,29 @@ static int GpgsLeaderboard_ShowLeaderboard(lua_State* L)
return 0;
}

//******************************************************************************
// GPGPS Events
//******************************************************************************


static int GpgsEvent_Increment(lua_State* L)
{
DM_LUA_STACK_CHECK(L, 0);

const char* eventId = luaL_checkstring(L, 1);
lua_Number amount = luaL_checknumber(L, 2);
CallVoidMethodCharInt(g_gpgs.m_GpgsJNI, g_gpgs_events.m_IncrementEvent, eventId, amount);
return 0;
}


static int GpgsEvent_Get(lua_State* L)
{
DM_LUA_STACK_CHECK(L, 0);
CallVoidMethod(g_gpgs.m_GpgsJNI, g_gpgs_events.m_LoadEvents);
return 0;
}

// Extension methods

static void OnActivityResult(void *env, void* activity, int32_t request_code, int32_t result_code, void* result)
Expand Down Expand Up @@ -664,6 +694,9 @@ static const luaL_reg Gpgs_methods[] =
{"leaderboard_get_player_centered_scores", GpgsLeaderboard_GetPlayerCenteredScores},
{"leaderboard_show", GpgsLeaderboard_ShowLeaderboard},
{"leaderboard_get_player_score", GpgsLeaderboard_GetPlayerScore},
//events
{"event_increment", GpgsEvent_Increment},
{"event_get", GpgsEvent_Get},
{0,0}
};

Expand Down Expand Up @@ -701,6 +734,7 @@ static void LuaInit(lua_State* L)
SETCONSTANT(MSG_GET_TOP_SCORES)
SETCONSTANT(MSG_GET_PLAYER_CENTERED_SCORES)
SETCONSTANT(MSG_GET_PLAYER_SCORE)
SETCONSTANT(MSG_GET_EVENTS)

SETCONSTANT(STATUS_SUCCESS)
SETCONSTANT(STATUS_FAILED)
Expand Down Expand Up @@ -780,6 +814,9 @@ static void InitJNIMethods(JNIEnv* env, jclass cls)
g_gpgs_leaderboard.m_ShowLeaderboard = env->GetMethodID(cls, "showLeaderboard", "(Ljava/lang/String;II)V");
g_gpgs_leaderboard.m_LoadCurrentPlayerScore = env->GetMethodID(cls, "loadCurrentPlayerLeaderboardScore", "(Ljava/lang/String;II)V");

g_gpgs_events.m_IncrementEvent = env->GetMethodID(cls, "incrementEvent", "(Ljava/lang/String;I)V");
g_gpgs_events.m_LoadEvents = env->GetMethodID(cls, "loadEvents", "()V");

//private methods
g_gpgs.m_activityResult = env->GetMethodID(cls, "activityResult", "(IILandroid/content/Intent;)V");
}
Expand Down
3 changes: 2 additions & 1 deletion gpgs/src/gpgs_extension.h
Expand Up @@ -69,7 +69,8 @@ enum MESSAGE_ID
MSG_GET_ACHIEVEMENTS = 7,
MSG_GET_TOP_SCORES = 8,
MSG_GET_PLAYER_CENTERED_SCORES = 9,
MSG_GET_PLAYER_SCORE = 10
MSG_GET_PLAYER_SCORE = 10,
MSG_GET_EVENTS = 11
};

// Internal to the extension
Expand Down
58 changes: 58 additions & 0 deletions gpgs/src/java/com/defold/gpgs/GpgsJNI.java
Expand Up @@ -40,6 +40,10 @@
import com.google.android.gms.games.achievement.Achievement;
import com.google.android.gms.games.achievement.AchievementBuffer;

import com.google.android.gms.games.EventsClient;
import com.google.android.gms.games.event.Event;
import com.google.android.gms.games.event.EventBuffer;

import java.io.IOException;

import org.json.JSONArray;
Expand Down Expand Up @@ -73,6 +77,7 @@ public class GpgsJNI {
private static final int MSG_GET_TOP_SCORES = 8;
private static final int MSG_GET_PLAYER_CENTERED_SCORES = 9;
private static final int MSG_GET_PLAYER_SCORE = 10;
private static final int MSG_GET_EVENTS = 11;

// duplicate of enums from gpgs_extension.h:
private static final int STATUS_SUCCESS = 1;
Expand Down Expand Up @@ -803,4 +808,57 @@ else if (a.getState() == Achievement.STATE_REVEALED) {
.addOnFailureListener(newOnFailureListener(MSG_ACHIEVEMENTS, "Unable to get achievements."));
}
}

private EventsClient mEventsClient = null;

private boolean initEvents() {
if (mSignedInAccount == null) {
return false;
}
if (mEventsClient == null) {
mEventsClient = Games.getEventsClient(activity, mSignedInAccount);
}
return true;
}

public void incrementEvent(String eventId, int amount) {
if(initEvents()) {
mEventsClient.increment(eventId, amount);
}
}

public void loadEvents() {
if(initEvents()) {
Task<AnnotatedData<EventBuffer>> task = mEventsClient.load(false);
task.addOnSuccessListener(new OnSuccessListener<AnnotatedData<EventBuffer>>() {
@Override
public void onSuccess(AnnotatedData<EventBuffer> data) {
EventBuffer buffer = data.get();
String message = null;
try {
JSONArray result = new JSONArray();
for (Event e : buffer) {
JSONObject json = new JSONObject();
json.put("id", e.getEventId());
json.put("fomatted_value", e.getFormattedValue());
json.put("value", e.getValue());
json.put("description", e.getDescription());
json.put("image", e.getIconImageUri());
json.put("name", e.getName());
json.put("visible", e.isVisible());
result.put(json.toString());
}
message = result.toString();
buffer.release();
} catch (JSONException e) {
message = "{ 'error':'Error while converting event to JSON: " + e.getMessage() +
"', 'status': '" + STATUS_FAILED + " }";
}
gpgsAddToQueue(MSG_GET_EVENTS, message);
}
})
.addOnFailureListener(newOnFailureListener(MSG_GET_EVENTS, "Unable to get events."));
}
}

}
37 changes: 37 additions & 0 deletions main/events.collection
@@ -0,0 +1,37 @@
name: "events"
scale_along_z: 0
embedded_instances {
id: "go"
data: "components {\n"
" id: \"monarch\"\n"
" component: \"/main/events.gui\"\n"
" position {\n"
" x: 0.0\n"
" y: 0.0\n"
" z: 0.0\n"
" }\n"
" rotation {\n"
" x: 0.0\n"
" y: 0.0\n"
" z: 0.0\n"
" w: 1.0\n"
" }\n"
"}\n"
""
position {
x: 0.0
y: 0.0
z: 0.0
}
rotation {
x: 0.0
y: 0.0
z: 0.0
w: 1.0
}
scale3 {
x: 1.0
y: 1.0
z: 1.0
}
}

0 comments on commit 099ec81

Please sign in to comment.