Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -13,3 +13,5 @@ report.json
report_time.html
report_time.json
.editor_settings
manifest.public.der
manifest.private.der
12 changes: 12 additions & 0 deletions poki-sdk/api/poki-sdk.script_api
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,10 @@
type: function

parameters:
- name: size
type: string
desc: The size of the reward. Accepted values are small, medium and large. Optional. Default is small.

- name: callback
type: function

Expand Down Expand Up @@ -77,3 +81,11 @@

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

- name: REWARDED_BREAK_ERROR
type: number
- name: REWARDED_BREAK_SUCCESS
type: number
- name: REWARDED_BREAK_START
type: number

#*****************************************************************************************************
20 changes: 17 additions & 3 deletions poki-sdk/lib/web/lib_pokisdk.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,11 @@ var LibPokiSdk = {

$PokiSdk: {

// must match PokiRewardedBreakResult
REWARDED_BREAK_ERROR: 0,
REWARDED_BREAK_SUCCESS: 1,
REWARDED_BREAK_START: 2,

_callback: null,
_urlCallback: null,
_urlParameters:null,
Expand All @@ -14,7 +19,12 @@ var LibPokiSdk = {
},

_rewardedBreakCallback: function(success) {
var msg = success ? 1 : 0;
var msg = success ? PokiSdk.REWARDED_BREAK_SUCCESS : PokiSdk.REWARDED_BREAK_ERROR;
{{{ makeDynCall("vi", "PokiSdk._callback")}}}(msg);
},

_rewardedBreakStartedCallback: function() {
var msg = PokiSdk.REWARDED_BREAK_START;
{{{ makeDynCall("vi", "PokiSdk._callback")}}}(msg);
},

Expand All @@ -30,9 +40,13 @@ var LibPokiSdk = {
PokiSDK.commercialBreak().then(PokiSdk._commercialBreakCallback);
},

PokiSdkJs_RewardedBreak: function(callback) {
PokiSdkJs_RewardedBreak: function(size, callback) {
PokiSdk._callback = callback;
PokiSDK.rewardedBreak().then(PokiSdk._rewardedBreakCallback);
let options = {
size: UTF8ToString(size),
onStart: PokiSdk._rewardedBreakStartedCallback,
}
PokiSDK.rewardedBreak(options).then(PokiSdk._rewardedBreakCallback);
},

PokiSdkJs_GameplayStart: function() {
Expand Down
2 changes: 1 addition & 1 deletion poki-sdk/manifests/web/engine_template.html
Original file line number Diff line number Diff line change
Expand Up @@ -40,4 +40,4 @@
}
</script>
</body>
</html>
</html>
79 changes: 61 additions & 18 deletions poki-sdk/src/pokisdk.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,16 @@ enum PokiCallbackType
TYPE_SHARABLE_URL
};

// make sure these match with the constants in lib_pokisdk.js
enum PokiRewardedBreakResult
{
REWARDED_BREAK_ERROR = 0,
REWARDED_BREAK_SUCCESS = 1,
REWARDED_BREAK_START = 2,
};

typedef void (*CommercialBreakCallback)();
typedef void (*RewardedBreakCallback)(int success);
typedef void (*RewardedBreakCallback)(PokiRewardedBreakResult result);
typedef void (*ShareableURLCallback)(const char* url, int url_length);

extern "C" {
Expand All @@ -25,7 +33,7 @@ extern "C" {
void PokiSdkJs_InternalCaptureError(const char* formatted_string);

void PokiSdkJs_CommercialBreak(CommercialBreakCallback callback);
void PokiSdkJs_RewardedBreak(RewardedBreakCallback callback);
void PokiSdkJs_RewardedBreak(const char* size, RewardedBreakCallback callback);

int PokiSdkJs_IsAdBlocked();

Expand Down Expand Up @@ -54,7 +62,7 @@ static void PokiSdk_InvokeCallback(PokiCallbackType callbackType, int intArg, co
{
if (!dmScript::IsCallbackValid(pokiSdk_Callback))
{
dmLogError("PokiSDK InvokeCallback callback is invalid. Use callback function as an argument when show ADS.");
dmLogError("PokiSDK InvokeCallback callback is invalid. Use callback function as an argument when showing ads.");
return;
}

Expand All @@ -69,9 +77,15 @@ static void PokiSdk_InvokeCallback(PokiCallbackType callbackType, int intArg, co

int numOfArgs = 0;

bool destroy_callback = true;

if (callbackType == TYPE_REWARDED)
{
lua_pushboolean(L, intArg);
// do not destroy the callback if the event is REWARDED_BREAK_START
// since we need to use the callback later when the event
// is REWARDED_BREAK_SUCCESS
destroy_callback = (intArg != REWARDED_BREAK_START);
lua_pushnumber(L, intArg);
numOfArgs = 1;
}
else if (callbackType == TYPE_SHARABLE_URL)
Expand All @@ -86,7 +100,7 @@ static void PokiSdk_InvokeCallback(PokiCallbackType callbackType, int intArg, co

dmScript::TeardownCallback(pokiSdk_Callback);

if (pokiSdk_Callback != 0x0)
if ((pokiSdk_Callback != 0x0) && destroy_callback)
{
dmScript::DestroyCallback(pokiSdk_Callback);
pokiSdk_Callback = 0x0;
Expand All @@ -98,9 +112,9 @@ static void PokiSdk_CommercialBreakCallback()
PokiSdk_InvokeCallback(TYPE_INTERSTITIAL, 0, 0);
}

static void PokiSdk_RewardedBreakCallback(int success)
static void PokiSdk_RewardedBreakCallback(PokiRewardedBreakResult result)
{
PokiSdk_InvokeCallback(TYPE_REWARDED, success, 0);
PokiSdk_InvokeCallback(TYPE_REWARDED, result, 0);
}

static void PokiSdk_ShareableURLCallback(const char* url, int url_length)
Expand All @@ -125,11 +139,13 @@ static int PokiSdk_GameplayStop(lua_State* L)
static int PokiSdk_CommercialBreak(lua_State* L)
{
int type = lua_type(L, 1);
if (type != LUA_TFUNCTION) {
luaL_error(L, "PokiSDK CommercialBreak callback is invalid. Use callback function as an argument when show ADS.");
if (type != LUA_TFUNCTION)
{
luaL_error(L, "PokiSDK CommercialBreak callback is invalid. Use callback function as an argument when showing ads.");
return 0;
}
if (pokiSdk_Callback != 0x0) {
if (pokiSdk_Callback != 0x0)
{
dmLogError("PokiSdk_CommercialBreak PokiSDK callback already exist. Rewrite callback");
}
DM_LUA_STACK_CHECK(L, 0);
Expand All @@ -138,19 +154,38 @@ static int PokiSdk_CommercialBreak(lua_State* L)
return 0;
}

static int PokiSdk_RewardedBreak(lua_State* L)
static void PokiSdk_SetRewardedBreakCallback(lua_State* L, int index)
{
int type = lua_type(L, 1);
if (type != LUA_TFUNCTION) {
luaL_error(L, "PokiSDK RewardedBreak callback is invalid. Use callback function as an argument when show ADS.");
return 0;
if (lua_type(L, index) != LUA_TFUNCTION)
{
luaL_error(L, "PokiSDK RewardedBreak callback is invalid. Use callback function as an argument when showing ads.");
return;
}
if (pokiSdk_Callback != 0x0) {

if (pokiSdk_Callback != 0x0)
{
dmLogError("PokiSdk_RewardedBreak PokiSDK callback already exist. Rewrite callback");
}
pokiSdk_Callback = dmScript::CreateCallback(L, index);
}

static int PokiSdk_RewardedBreak(lua_State* L)
{
DM_LUA_STACK_CHECK(L, 0);
pokiSdk_Callback = dmScript::CreateCallback(L, 1);
PokiSdkJs_RewardedBreak((RewardedBreakCallback)PokiSdk_RewardedBreakCallback);
const char* size;
if (lua_type(L, 1) == LUA_TSTRING)
{
size = luaL_checkstring(L, 1);
PokiSdk_SetRewardedBreakCallback(L, 2);
}
else
{
size = "small";
PokiSdk_SetRewardedBreakCallback(L, 1);
}

PokiSdkJs_RewardedBreak(size, (RewardedBreakCallback)PokiSdk_RewardedBreakCallback);

return 0;
}

Expand Down Expand Up @@ -240,12 +275,20 @@ static const luaL_reg Module_methods[] =
{0, 0}
};

#define SETCONSTANT(name, value) \
lua_pushnumber(L, (lua_Number) (value)); \
lua_setfield(L, -2, #name);\

static void LuaInit(lua_State* L)
{
int top = lua_gettop(L);

luaL_register(L, MODULE_NAME, Module_methods);

SETCONSTANT(REWARDED_BREAK_ERROR, REWARDED_BREAK_ERROR);
SETCONSTANT(REWARDED_BREAK_SUCCESS, REWARDED_BREAK_SUCCESS);
SETCONSTANT(REWARDED_BREAK_START, REWARDED_BREAK_START);

lua_pop(L, 1);
assert(top == lua_gettop(L));
}
Expand Down