Em algum momento você via precisar criar um módulo customizado na Godot Engine para alguma plataforma (como android ou IOS).
Como exemplo de um módulo customizado teríamos um módulo para a apresentação de anúncios (ads), como o Admob, Chartboost, ou Heyzap. Isso é necessário pois o módulo de ads não faz parte do núcleo do Godot.
Propaganda é o sustento do desenvolvedor de jogos
Para demonstrar a criação de um módulo para o android na Godot Engine, vamos criar um módulo simples que obtém as informações do aparelho celular e retorna o resultado em um Dictionary. Vamos chamar o módulo de device_info.
A seguinte estrutura de arquivos/pastas é necessária para a criação do módulo:
- device_info
- SCub
- register_types.h
- register_types.cpp
- config.py
- android
- DeviceInfo.java
Pasta device_info
É a pasta raiz do projeto, que vai ser copiada para a pasta modules do projeto do Godot.
Arquivo SCub
Arquivo a ser utilizado pelo Scons para a compilação do módulo.
1 2 3 4 5 | Import('env') sources = [ 'register_types.cpp' ] |
Arquivo register_types.h
Utilizado para registrar o módulo na Engine
1 2 | void register_device_info(); void unregister_device_info(); |
Arquivo register_types.cpp
Implementação do .h
1 2 3 4 5 6 7 8 9 10 11 | #include "register_types.h" #include "object_type_db.h" #include "core/globals.h" #include "ios/src/device_info.h" void register_device_info() { Globals::get_singleton()->add_singleton(Globals::Singleton("DeviceInfo", memnew(DeviceInfo))); } void unregister_device_info() { } |
Arquivo config.py
Arquivo a ser utilizado pelo Scons
1 2 3 4 5 6 7 | def can_build(plat): return plat=="android" def configure(env): if (env['platform'] == 'android'): env.android_add_java_dir("android") env.disable_module() |
Arquivo DeviceInfo.java
Arquivo com a implementação do módulo para o android.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | package org.godotengine.godot; import java.util.HashMap; import android.app.Activity; import android.util.Log; import android.os.Build; public class DeviceInfo extends Godot.SingletonBase { private Activity activity; static public Godot.SingletonBase initialize(Activity p_activity) { return new DeviceInfo(p_activity); } public DeviceInfo(Activity p_activity) { /* * Registrando os métodos que serão exportados para o GDscript */ registerClass("DeviceInfo", new String[] { "get_info_array" }); activity = p_activity; } /** * Implementação do método para obter as informações do dispositivo */ public org.godotengine.godot.Dictionary get_info_array() { org.godotengine.godot.Dictionary info = new org.godotengine.godot.Dictionary(); info.put("MANUFACTURER", Build.MANUFACTURER); info.put("MODEL", Build.MODEL); info.put("PRODUCT", Build.PRODUCT); info.put("BRAND", Build.BRAND); info.put("DEVICE", Build.DEVICE); Log.d("godot", "get_info_array"); return info; } } |
Para compilar o módulo criado, basta seguir as instruções do artigo Compilando a Godot para android - utilizando o Linux.
A animação a seguir apresenta a utilização do módulo criado.
No próximo artigo vamos criar um projeto no Godot demonstrando a utilização do módulo.