1 // ------------------------------------------------------------------------------- 2 // 3 // DXライブラリ Android専用関数プロトタイプ宣言用ヘッダファイル 4 // 5 // Ver 3.22c 6 // 7 // ------------------------------------------------------------------------------- 8 module dxlib_d.DxFunctionAndroid; 9 10 11 version (Android): 12 13 extern (C): 14 nothrow @nogc: 15 16 // インクルード ------------------------------------------------------------------ 17 /+ 18 #include <android/native_activity.h> 19 #include <android/window.h> 20 +/ 21 private static import dxlib_d.DxLib; 22 public import dxlib_d.DxDataType; 23 24 // 定義--------------------------------------------------------------------------- 25 26 // 関数プロトタイプ宣言----------------------------------------------------------- 27 28 extern (C++, DxLib) { 29 /** 30 * アプリで使用しているNativeActivityを取得する 31 */ 32 extern const (ANativeActivity)* GetNativeActivity(); 33 34 /** 35 * AndroidのAPIレベルを取得する 36 */ 37 extern int GetAndroidAPILevel(); 38 39 /** 40 * ソフトのデータ保存用のディレクトリパスを取得する 41 */ 42 extern int GetInternalDataPath(dxlib_d.DxDataType.TCHAR* PathBuffer, int PathBufferBytes); 43 44 /** 45 * ソフトの外部データ保存用のディレクトリパスを取得する 46 * PathBuffer = パスを保存するバッファ 47 * PathBufferBytes = パスを保存するバッファのサイズ(単位:バイト) 48 * PathIndex = 外部データ保存用のディレクトリパスの番号(複数個ある場合があるので) 49 * IsRemovableFlag = PathIndexで指定したパスが取り外し可能なデバイスかどうかを保存するint型変数のアドレス(格納された値 dxlib_d.DxDataType.TRUE:取り外し可能(SDカード等) dxlib_d.DxDataType.FALSE:取り外し不可能(内蔵ストレージ等)) 50 */ 51 extern int GetExternalDataPath(dxlib_d.DxDataType.TCHAR* PathBuffer, int PathBufferBytes, int PathIndex = 0, int* IsRemovableFlag = null); 52 53 /** 54 * ソフトの外部データ保存用のディレクトリパスの数を取得する 55 */ 56 extern int GetExternalDataPathNum(); 57 58 /** 59 * 端末に設定されている言語を取得する 60 * 61 * Returns: -1:エラー 0以上:言語名文字列の格納に必要なバイト数 62 */ 63 extern int GetLanguage(dxlib_d.DxDataType.TCHAR* StringBuffer, int StringBufferSize); 64 65 /** 66 * 端末に設定されている国を取得する 67 * 68 * Returns: -1:エラー 0以上:国名文字列の格納に必要なバイト数 69 */ 70 extern int GetCountry(dxlib_d.DxDataType.TCHAR* StringBuffer, int StringBufferSize); 71 72 /** 73 * メモリ情報を取得する 74 * TotalMemory = 総メモリ容量を代入する変数(単位:byte)、(情報の取得が不要な場合はnullを渡す) 75 * FreeMrmoyy = 空きメモリ容量を代入する変数(単位:byte)、(情報の取得が不要な場合はnullを渡す) 76 * UseMemory = アプリが使用しているメモリ容量を代入する変数(単位:byte)、(情報の取得が不要な場合はnullを渡す)、(使用メモリ量の取得は非常に処理負荷が高いので、不要な場合は必ずnullを渡すようにしてください) 77 */ 78 extern int GetAndroidMemoryInfo(dxlib_d.DxDataType.LONGLONG* TotalMemory, dxlib_d.DxDataType.LONGLONG* FreeMemory, dxlib_d.DxDataType.LONGLONG* UseMemory); 79 80 /** 81 * ディスプレイの解像度を取得する 82 */ 83 extern int GetAndroidDisplayResolution(int* SizeX, int* SizeY); 84 85 /** 86 * ディスプレイを本体設定に従って時間経過でスリープ状態になることを許可するかどうかを設定する 87 * 88 * Params: 89 * Flag = dxlib_d.DxDataType.TRUE:スリープ状態になることを許可しない dxlib_d.DxDataType.FALSE:スリープ状態を許可する(デフォルト) 90 */ 91 extern int SetKeepScreenOnFlag(int Flag); 92 93 /** 94 * 加速度センサーのベクトル値を取得する 95 */ 96 extern dxlib_d.DxLib.VECTOR GetAccelerometerVector(); 97 98 /** 99 * センサーから得られる方角を取得する 100 * 縦持ち(地面に対して端末を垂直に持った状態)の場合に正しく値が取得できます 101 * 戻り値のx:方角(単位:ラジアン 0.0f:北 π/2.0f:東 -π/2.0f:西 -π or π:南) 102 * 戻り値のy:前後の傾斜(単位:ラジアン 0.0f:端末が縦持ちで垂直(逆さまで垂直の場合含む)の状態 π/2.0f:前方方向に90度倒した状態(画面が空を向いている状態) -π/2.0f:後方方向に90度倒した状態(画面が地面を向いている状態)) 103 * 戻り値のz:左右の傾斜(単位:ラジアン 0.0f:端末が縦持ちで垂直の状態 π/2.0f:右方向に90度倒した状態 -π/2.0f:左方向に90度倒した状態 -π or π:端末が上下さかさまで垂直の状態) 104 */ 105 extern dxlib_d.DxLib.VECTOR GetOrientationVector(); 106 107 /** 108 * センサーのベクトル値を取得する 109 * 110 * Params: 111 * SensorType = DX_ANDROID_SENSOR_ACCELEROMETERなど 112 */ 113 extern dxlib_d.DxLib.VECTOR GetAndroidSensorVector(int SensorType); 114 115 /** 116 * センサーが有効かどうかを取得する 117 * 118 * Params: 119 * SensorType = DX_ANDROID_SENSOR_ACCELEROMETERなど 120 * 121 * Returns: dxlib_d.DxDataType.TRUE:有効 dxlib_d.DxDataType.FALSE:無効 122 */ 123 extern int CheckAndroidSensor(int SensorType); 124 125 // 振動機能関係(使用するにはAndroidManifest.xmlに<uses-permission android:name="android.permission.VIBRATE" />を書き加える必要があります) 126 127 /** 128 * 振動機能があるか取得する 129 * 130 * Returns: dxlib_d.DxDataType.TRUE:振動機能あり dxlib_d.DxDataType.FALSE:振動機能なし 131 */ 132 extern int Vibrator_hasVibrator(); 133 134 /** 135 * 振動機能に振幅制御(振動の強さ制御)機能があるかどうかを取得する 136 * 137 * Returns: dxlib_d.DxDataType.TRUE:振幅制御ができる dxlib_d.DxDataType.FALSE:振幅制御はできない 138 */ 139 extern int Vibrator_hasAmplitudeControl(); 140 141 /** 142 * 振動を開始する 143 * Milliseconds = 振動させる時間(単位:ミリ秒) 144 * Amplitude = 振動の強さ(0(振動なし)~255(最大振幅))、振動の強さの制御に対応していない場合は無視されます 145 */ 146 extern int Vibrator_vibrate(int Milliseconds, int Amplitude); 147 148 /** 149 * 振動パターン付きの振動を開始する 150 * Timings = 振動パターンを定義する時間(単位:ミリ秒)の配列(Timings[0]:振動を開始するまでの待ち時間、Timings[1]:振動し続ける時間、Timings[2]:振動を停止している時間、Timings[3]:振動し続ける時間、Timings[4]:振動を停止している時間 以下繰り返し) 151 * TimingsLength = Timingsの配列の長さ 152 * Repeat = 振動パターンを繰り返す場合の配列の要素番号(例 0:最初から繰り返し 1:配列要素の1から繰り返し)、-1で繰り返し無し 153 */ 154 extern int Vibrator_vibrate_with_OnOffTimings(int* Timings, int TimingsLength, int Repeat); 155 156 /** 157 * 振幅制御付き(振動の強さ指定付き)振動を開始する(Vibrator_hasAmplitudeControlの戻り値がdxlib_d.DxDataType.TRUEの場合のみ使用可能) 158 * Timings = 振動の強さを変更するタイミング(単位:ミリ秒)の配列 159 * Amplitudes = 振動の強さ(0(振動なし)~255(最大振幅))の配列 160 * ArrayLength = TimingsとAmplitudesの配列の長さ(配列の長さはどちらも同じである必要があります) 161 * Repeat = TimingsとAmplitudesで示される振動パターンを繰り返す場合の配列の要素番号(例 0:最初から繰り返し 1:配列要素の1から繰り返し)、-1で繰り返し無し 162 */ 163 extern int Vibrator_vibrate_with_Amplitudes(int* Timings, int* Amplitudes, int ArrayLength, int Repeat); 164 165 /** 166 * 振動を中断する 167 */ 168 extern int Vibrator_cancel(); 169 170 /** 171 * 曜日や週に関する情報を取得する 172 * DayOfWeek = 曜日(1:日曜日 2:月曜日 3:火曜日 4:水曜日 5:木曜日 6:金曜日 7:土曜日) 173 * WeekOfMonth = 今日が今月の何週目なのかの値(1:1週目 2:2週目 3:3週目 4:4週目 5:5週目) 174 * DayOfWeekInMonth = 今日の曜日が今月何回目に当たるか、の値(1:1回目 2:2回目 3:3回目 4:4回目 ...) 175 */ 176 extern int GetAndroidWeekInfo(int* DayOfWeek, int* WeekOfMonth, int* DayOfWeekInMonth); 177 178 /** 179 * res/values/strings.xmlのstringリソースを取得する 180 * ValueName = string情報名 181 * StringBuffer = ValueNameが示す文字列を格納するバッファの先頭アドレス 182 * StringBufferBytes = StringBufferのサイズ(単位:バイト) 183 * 184 * Returns: -1:指定のstring情報は無かった -1以外:StringBufferに必要なバッファのサイズ(単位:バイト) 185 */ 186 extern int GetAndroidResource_Strings_String(const (dxlib_d.DxDataType.TCHAR)* ValueName, dxlib_d.DxDataType.TCHAR* StringBuffer, int StringBufferBytes); 187 extern int GetAndroidResource_Strings_StringWithStrLen(const (dxlib_d.DxDataType.TCHAR)* ValueName, size_t ValueNameLength, dxlib_d.DxDataType.TCHAR* StringBuffer, int StringBufferBytes); 188 189 /** 190 * AndroidManifest.xmlに書かれた<meta-data android:name="test0" android:value="abcde" />などのメタデータの文字列を取得する 191 * ValueName = メタデータ名 192 * StringBuffer = ValueNameが示す文字列を格納するバッファの先頭アドレス 193 * StringBufferBytes = StringBufferのサイズ(単位:バイト) 194 * 195 * Returns: -1:指定のメタデータは無かった -1以外:StringBufferに必要なバッファのサイズ(単位:バイト) 196 */ 197 extern int GetAndroidMetaData_String(const (dxlib_d.DxDataType.TCHAR)* ValueName, dxlib_d.DxDataType.TCHAR* StringBuffer, int StringBufferBytes); 198 extern int GetAndroidMetaData_StringWithStrLen(const (dxlib_d.DxDataType.TCHAR)* ValueName, size_t ValueNameLength, dxlib_d.DxDataType.TCHAR* StringBuffer, int StringBufferBytes); 199 200 /* 201 * AndroidManifest.xmlに書かれた<meta-data android:name="bool0" android:value="true" />などのBoolean型のメタデータを取得する 202 * ValueName:メタデータ名 203 * Returns: -1:指定のメタデータは無かった dxlib_d.DxDataType.TRUE:指定のメタデータはtrueだった dxlib_d.DxDataType.FALSE:指定のメタデータはfalseだった 204 */ 205 //extern int GetAndroidMetaData_Boolean(const (dxlib_d.DxDataType.TCHAR)* ValueName); 206 //extern int GetAndroidMetaData_BooleanWithStrLen(const (dxlib_d.DxDataType.TCHAR)* ValueName, size_t ValueNameLength); 207 208 /** 209 * 通知を発行する 210 * Title = タイトル 211 * SubTitle = サブタイトル 212 * Icon = アイコン(-1でデフォルトのアイコン) 213 * ShowWhen = 通知時刻を表示するか(dxlib_d.DxDataType.TRUE:表示する dxlib_d.DxDataType.FALSE:表示しない) 214 * AutoCancel = 通知がタップされたら通知を削除するか(dxlib_d.DxDataType.TRUE:タップされたら通知を削除する dxlib_d.DxDataType.FALSE:Cancel されるまで通知を削除しない) 215 * NotifyID = 通知ID 216 * Vibrate = 振動パターン用のint型配列(時間の単位はミリ秒)、nullの場合は振動なし(Vibrate[0]:振動停止時間 Vibrate[1]:振動時間 Vibrate[2]:振動停止時間 Vibrate[3]:振動時間 ... 以下繰り返し) 217 * VibrateLength = Vibrate 配列の要素数 218 * LightColor = 通知時のライトの色(GetColorで取得)、LightOnTime か LightOffTimeが0の場合はライトの点灯無し 219 * LightOnTime = ライトの点灯時間(単位:ミリ秒) 220 * LightOffTime = ライトの消灯時間(単位:ミリ秒) 221 extern int AndroidNotification(const (dxlib_d.DxDataType.TCHAR)* Title, const (dxlib_d.DxDataType.TCHAR)* SubTitle, int Icon = -1, int ShowWhen = dxlib_d.DxDataType.TRUE, int AutoCancel = dxlib_d.DxDataType.TRUE, int NotifyId = 0, int* Vibrate = null, int VibrateLength = 0, uint LightColor = 0, int LightOnTime = 0, int LightOffTime = 0); 222 extern int AndroidNotificationWithStrLen(const (dxlib_d.DxDataType.TCHAR)* Title, size_t TitleLength, const (dxlib_d.DxDataType.TCHAR)* SubTitle, size_t SubTitleLength, int Icon = -1, int ShowWhen = dxlib_d.DxDataType.TRUE, int AutoCancel = dxlib_d.DxDataType.TRUE, int NotifyId = 0, int* Vibrate = null, int VibrateLength = 0, uint LightColor = 0, int LightOnTime = 0, int LightOffTime = 0); 223 224 /** 225 * 通知をキャンセルする 226 * NotifyID = 通知ID 227 */ 228 extern int AndroidNotificationCancel(int NotifyId); 229 230 /** 231 * 全ての通知をキャンセルする 232 */ 233 extern int AndroidNotificationCancelAll(); 234 235 /** 236 * 指定のURLをブラウザで開く(BrowserAppPackageName か BrowserAppClassNameがnullの場合は標準ブラウザで開く) 237 * URL = 開くURL 238 * BrowserAppPackageName = ブラウザのパッケージ名(nullで標準ブラウザ) 239 * BrowserAppClassName = ブラウザのクラス名(nullで標準ブラウザ) 240 */ 241 extern int AndroidJumpURL(const (dxlib_d.DxDataType.TCHAR)* URL, const (dxlib_d.DxDataType.TCHAR)* BrowserAppPackageName = null, const (dxlib_d.DxDataType.TCHAR)* BrowserAppClassName = null); 242 extern int AndroidJumpURLWithStrLen(const (dxlib_d.DxDataType.TCHAR)* URL, size_t URLLength, const (dxlib_d.DxDataType.TCHAR)* BrowserAppPackageName = null, size_t BrowserAppPackageNameLength = 0, const (dxlib_d.DxDataType.TCHAR)* BrowserAppClassName = null, size_t BrowserAppClassNameLength = 0); 243 244 /** 245 * Wifiの電波強度を取得する(使用するにはAndroidManifest.xmlに<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />を書き加える必要があります) 246 * 247 * Returns: 電波の強度0~100 248 */ 249 extern int GetWifiSignalLevel(); 250 251 /** 252 * アプリが非アクティブになった際に呼ばれるコールバック関数を登録する 253 */ 254 extern int SetAndroidLostFocusCallbackFunction(void function(void* Data) Callback, void* CallbackData); 255 256 /** 257 * アプリがアクティブになった際に呼ばれるコールバック関数を登録する 258 */ 259 extern int SetAndroidGainedFocusCallbackFunction(void function(void* Data) Callback, void* CallbackData); 260 261 /** 262 * アプリを終了した際に、プロセスを完全に終了するかを設定する 263 * 264 * Params: 265 * KillProcessFlag = dxlib_d.DxDataType.TRUE:アプリを終了したら、プロセスを完全に終了する dxlib_d.DxDataType.FALSE:アプリを終了しても、プロセスは完全には終了されない(デフォルト) 266 */ 267 extern int SetUseAndroidKillProcessFlag(int KillProcessFlag); 268 269 /** 270 * OpenGL 関係の情報を取得する 271 * 272 * Params: 273 * Version = ? 274 * Renderer = ? 275 * Vendor = ? 276 * ExtensionNames = ? 277 * Shader_Language_Version = ? 278 * Shader_Max_Vertex_Attribs = GL_MAX_VERTEX_ATTRIBS 279 * Shader_Max_Vertex_Uniform_Vectors = GL_MAX_VERTEX_UNIFORM_VECTORS 280 * Shader_Max_Varying_Vectors = GL_MAX_VARYING_VECTORS 281 * Shader_Max_Combined_Texture_Image_Units = GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS 282 * Shader_Max_Vertex_Texture_Image_Units = GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS 283 * Shader_Max_Texture_Image_Units = GL_MAX_TEXTURE_IMAGE_UNITS 284 * Shader_Max_Fragment_Uniform_Vectors = GL_MAX_FRAGMENT_UNIFORM_VECTORS 285 */ 286 extern int GetOpenGLInfo(dxlib_d.DxDataType.TCHAR** Version = null, dxlib_d.DxDataType.TCHAR** Renderer = null, dxlib_d.DxDataType.TCHAR** Vendor = null, dxlib_d.DxDataType.TCHAR*** ExtensionNames = null, dxlib_d.DxDataType.TCHAR** Shader_Language_Version = null, int* Shader_Max_Vertex_Attribs = null, int* Shader_Max_Vertex_Uniform_Vectors = null, int* Shader_Max_Varying_Vectors = null, int* Shader_Max_Combined_Texture_Image_Units = null, int* Shader_Max_Vertex_Texture_Image_Units = null, int* Shader_Max_Texture_Image_Units = null, int* Shader_Max_Fragment_Uniform_Vectors = null); 287 288 /** 289 * グラフィックハンドルのテクスチャオブジェクトを取得する 290 */ 291 extern uint GetGraphOpenGLESTextureObject(int GrHandle); 292 293 /** 294 * DXライブラリが行ったOpenGL ESの設定を再度行う(特殊用途) 295 */ 296 extern int RefreshDxLibOpenGLESSetting(); 297 298 /** 299 * イコライザー機能を使用するかどうかを設定する(DxLib_Init呼び出し前のみ実行可能) 300 * UseFlag dxlib_d.DxDataType.TRUE:使用する dxlib_d.DxDataType.FALSE:使用しない 301 */ 302 extern int SetUseEqualizer(int UseFlag); 303 304 // イコライザー関係関数 305 306 /** 307 * イコライザーの与えられた周波数に最も影響を与える周波数帯域を取得します 308 * 309 * Returns: -1:エラー 0以上:周波数帯域インデックス 310 */ 311 extern int SearchEqualizerBandIndex(int Frequency); 312 313 /** 314 * イコライザーに指定できる周波数帯域の数を取得する 315 */ 316 extern int GetEqualizerBandNum(); 317 318 /** 319 * 与えられたイコライザーの周波数帯域を与えられたゲイン値に設定します 320 */ 321 extern int SetEqualizerBandLevel(int BandIndex, int Level); 322 323 /** 324 * イコライザーの指定された周波数帯域のゲイン値を取得します 325 */ 326 extern int GetEqualizerBandLevel(int BandIndex); 327 328 /** 329 * イコライザーの指定された周波数帯域の周波数範囲を取得します 330 * 331 * Params: 332 * BandIndex = ? 333 * pMin = 最小周波数(単位:ヘルツ) 334 * pMax = 最大周波数(単位:ヘルツ) 335 */ 336 extern int GetEqualizerBandFreqRange(int BandIndex, int* pMin, int* pMax); 337 338 /** 339 * イコライザーの指定された周波数帯域の中心周波数を取得します 340 * 341 * Returns: 中心周波数(単位:ヘルツ) 342 */ 343 extern int GetEqualizerBandCenterFreq(int BandIndex); 344 345 /** 346 * イコライザーの現在のプリセットを取得します 347 * 348 * Returns: プリセット番号 349 */ 350 extern int GetEqualizerCurrentPreset(); 351 352 /** 353 * イコライザーのプリセットの数を取得します 354 * 355 * Returns: プリセットの数 356 */ 357 extern int GetEqualizerPresetNum(); 358 359 /** 360 * イコライザーのプリセット名を取得します 361 * 362 * Returns: プリセット名の文字列が格納されたメモリ領域の先頭アドレス 363 */ 364 extern const (dxlib_d.DxDataType.TCHAR)* GetEqualizerPresetName(int PresetIndex); 365 366 /** 367 * 指定したプリセットに従ってイコライザーを設定します 368 */ 369 extern int SetUseEqualizerPreset(int PresetIndex); 370 }