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
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.