Code Monkey home page Code Monkey logo

pgsgp's Introduction

Google Play Games Services Plugin for Godot

This is an Android Play Games Services plugin for Godot Game Engine 3.2 and higher.

Android Godot PGS MIT license Donate

Supported features:

  • Sign-in/Sign out
  • Achievements
  • Leaderboards
  • Events
  • Player Stats
  • Saved Games

Getting started

Set up

  • Set up the custom build environment for your project and enable it. See Godot Engine docs.
  • Download and move android-pgs-plugin from the current repository into res://android/ of your godot project.
  • After downloading android-pgs-plugin, open it and go to res -> values. Search for ids.xml and open it. Replace PUT_YOUR_APP_ID_HERE with your Games Services Application ID for the app_id resource. (Don't forget to save file)
  • In Godot Engine, go to Project -> Project Settings. Then on the tab General go to the Android section, and fill the Modules part with org/godotengine/godot/PlayGameServices. See Godot Engine docs.
    *Note: If you have already added one plugin to the Modules append the current one by separating them with comma (ex: xx/xx/Module1,org/godotengine/godot/PlayGameServices)
    *Note 2: If you have already added other plugin that has meta-data android:name="com.google.android.gms.version" declared inside it's AndroidManifest, remove below lines from the android-pgs-plugin-> AndroidManifest.conf file. (Don't forget to save file after removing below lines)
<meta-data android:name="com.google.android.gms.version"
    android:value="@integer/google_play_services_version" />

Latest version

Latest version could be found here (1.2.0).

How to use

First step is plugin initialization

var play_games_services
# Check if plugin was added to the project
if Engine.has_singleton("PlayGameServices"):
  play_games_services = Engine.get_singleton("PlayGameServices")
	
  # Initialize plugin by calling init method and passing to it get_instance_id() and a boolean to enable/disable displaying game pop-ups
  
  var show_popups := true # For example, your game can display a “Welcome back” or an “Achievements unlocked” pop-up. true for enabling it.
  var enable_save_games := true # If you want to enable Saved Games functionality. true for enabling it. If enabled, it will require additional Google Drive API permission from the user.
  play_games_services.init(get_instance_id(), show_popups, enable_save_games)

After what plugin was initialized you can use supported features

Sign-in / Sign out

Sign-in
play_games_services.sign_in()

# Callbacks:
func _on_sign_in_success(account_id: String) -> void:
	pass
  
func _on_sign_in_failed(error_code: int) -> void:
	pass
Sign out
play_games_services.sign_out()

# Callbacks:
func _on_sign_out_success():
	pass
  
func _on_sign_out_failed():
	pass

Achievements

Unlock Achievement
play_games_services.unlock_achievement("ACHIEVEMENT_ID")

# Callbacks:
func _on_achievement_unlocked(achievement: String):
	pass

func _on_achievement_unlocking_failed(achievement: String):
	pass
Increment Achievement
var step = 1
play_games_services.increment_achievement("ACHIEVEMENT_ID", step)

# Callbacks:
func _on_achievement_incremented(achievement: String):
	pass

func _on_achievement_incrementing_failed(achievement: String):
	pass
Reveal Achievement
play_games_services.reveal_achievement("ACHIEVEMENT_ID")

# Callbacks:
func _on_achievement_revealed(achievement: String):
	pass

func _on_achievement_revealing_failed(achievement: String):
	pass
Show Achievements List
play_games_services.show_achievements()

Leaderboards

Submit leaderboard score
var score = 1234
play_games_services.submit_leaderboard_score("LEADERBOARD_ID", score)

# Callbacks:
func _on_leaderboard_score_submitted(leaderboard_id: String):
	pass

func _on_leaderboard_score_submitting_failed(leaderboard_id: String):
	pass
Show leaderboard
play_games_services.show_leaderboard("LEADERBOARD_ID")


play_games_services.show_all_leaderboards()

Player connection

play_games_services.is_player_connected()

#Callback:
func _on_player_is_already_connected(is_connected: bool):
	pass

Events

Submit event
var increment_by := 2
play_games_services.submit_event("EVENT_ID", increment_by)

# Callbacks:
func _on_event_submitted(event_id: String):
	pass
	
func _on_event_submitted_failed(event_id: String):
	pass
Load events
# Load all events
play_games_services.load_events()
# Or load events by given ids
play_games_services.load_events_by_id(["EVENT_ID_1", "EVENT_ID_2", ...])

# Callbacks:
# If there is at least one event, following callback will be triggered:
func _on_events_loaded(events_array):
	# Parse received string json of events using parse_json
	var available_events = parse_json(events_array)
	# Iterate through the events_list to retrieve data for specific events
	for event in available_events:
		var event_id = event["id"] # you can get event id using 'id' key
		var event_name = event["name"] # you can get event name using 'name' key
		var event_desc = event["description"] # you can get event name using 'description' key 
		var event_img = event["imgUrl"] # you can get event name using 'imgUrl' key
		var event_value = event["value"] # you can get event name using 'value' key  
	
# Triggered if there are no events:
func _on_events_empty():
	pass

# Triggered if something went wrong:
func _on_events_loading_failed():
	pass

Player Stats

var force_refresh := true # If true, this call will clear any locally cached data and attempt to fetch the latest data from the server.
play_games_services.load_player_stats(force_refresh)

# Callbacks:	
func _on_player_stats_loaded(stats):
	var stats_dictionary: Dictionary = parse_json(stats)
	# Using below keys you can retrieve data about a player’s in-game activity
	stats_dictionary["avg_session_length"] # Average session length
	stats_dictionary["days_last_played"] # Days since last played
	stats_dictionary["purchases"] # Number of purchases
	stats_dictionary["sessions"] # Number of sessions
	stats_dictionary["session_percentile"] # Session percentile
	stats_dictionary["spend_percentile"] # Spend percentile

func _on_player_stats_loading_failed():
	pass

Saved Games

Save game snapshot
var data_to_save: Dictionary = {
		"name": "John", 
		"age": 22,
		"height": 1.82,
		"is_gamer": true
	}
play_games_services.save_snapshot("SNAPSHOT_NAME", to_json(data_to_save), "DESCRIPTION")

# Callbacks:
func _on_game_saved_success():
	pass
	
func _on_game_saved_fail():
	pass
Load game snapshot
play_games_services.load_snapshot("SNAPSHOT_NAME")

# Callbacks:
func _on_game_load_success(data):
	var game_data: Dictionary = parse_json(data)
	var name = game_data["name"]
	var age = game_data["age"]
	#...
	
	
func _on_game_load_fail():
	pass
Show saved snapshots screen
var allow_add_button := true
var allow_delete_button := true
var max_saved_games_snapshots := 5
play_games_services.show_saved_games("SNAPSHOT_NAME", allow_add_button, allow_delete_button, max_saved_games_snapshots)

#Godot callback	
# If user clicked on add new snapshot button on the screen with all saved snapshots, below callback will be triggered:
func _on_create_new_snapshot(name):
	var game_data_to_save: Dictionary = {
		"name": "John", 
		"age": 22,
		"height": 1.82,
		"is_gamer": true
	}
	play_games_services.save_snapshot(name, to_json(game_data_to_save), "DESCRIPTION")

Troubleshooting

Check adb logcat for debuging. To filter only Godot messages use next command: adb logcat -s godot

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.