1 // ------------------------------------------------------------------------------- 2 // 3 // DXライブラリ Android専用関数プロトタイプ宣言用ヘッダファイル 4 // 5 // Ver 3.22a 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.dxdatatypeandroid; 22 private static import dxlib_d.dxlib; 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.dxdatatypeandroid.TCHAR* PathBuffer, int PathBufferBytes); 43 44 /** 45 * ソフトの外部データ保存用のディレクトリパスを取得する 46 * PathBuffer = パスを保存するバッファ 47 * PathBufferBytes = パスを保存するバッファのサイズ( 単位:バイト ) 48 * PathIndex = 外部データ保存用のディレクトリパスの番号( 複数個ある場合があるので ) 49 * IsRemovableFlag = PathIndex で指定したパスが取り外し可能なデバイスかどうかを保存する int型変数のアドレス( 格納された値 TRUE:取り外し可能( SDカード等 ) FALSE:取り外し不可能( 内蔵ストレージ等 ) ) 50 */ 51 extern int GetExternalDataPath(dxlib_d.dxdatatypeandroid.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.dxdatatypeandroid.TCHAR* StringBuffer, int StringBufferSize); 64 65 /** 66 * 端末に設定されている国を取得する 67 * 68 * Returns: -1:エラー 0以上:国名文字列の格納に必要なバイト数 69 */ 70 extern int GetCountry(dxlib_d.dxdatatypeandroid.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.dxdatatypeandroid.LONGLONG* TotalMemory, dxlib_d.dxdatatypeandroid.LONGLONG* FreeMemory, dxlib_d.dxdatatypeandroid.LONGLONG* UseMemory); 79 80 /** 81 * ディスプレイの解像度を取得する 82 */ 83 extern int GetAndroidDisplayResolution(int* SizeX, int* SizeY); 84 85 /** 86 * ディスプレイを本体設定に従って時間経過でスリープ状態になることを許可するかどうかを設定する 87 * 88 * Params: 89 * Flag = TRUE:スリープ状態になることを許可しない 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: TRUE:有効 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: TRUE:振動機能あり FALSE:振動機能なし 131 */ 132 extern int Vibrator_hasVibrator(); 133 134 /** 135 * 振動機能に振幅制御( 振動の強さ制御 )機能があるかどうかを取得する 136 * 137 * Returns: TRUE:振幅制御ができる 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 の戻り値が 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.dxdatatypeandroid.TCHAR)* ValueName, dxlib_d.dxdatatypeandroid.TCHAR* StringBuffer, int StringBufferBytes); 187 extern int GetAndroidResource_Strings_StringWithStrLen(const (dxlib_d.dxdatatypeandroid.TCHAR)* ValueName, size_t ValueNameLength, dxlib_d.dxdatatypeandroid.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.dxdatatypeandroid.TCHAR)* ValueName, dxlib_d.dxdatatypeandroid.TCHAR* StringBuffer, int StringBufferBytes); 198 extern int GetAndroidMetaData_StringWithStrLen(const (dxlib_d.dxdatatypeandroid.TCHAR)* ValueName, size_t ValueNameLength, dxlib_d.dxdatatypeandroid.TCHAR* StringBuffer, int StringBufferBytes); 199 200 /* 201 * AndroidManifest.xml に書かれた <meta-data android:name="bool0" android:value="true" /> などの Boolean型のメタデータを取得する 202 * ValueName:メタデータ名 203 * Returns: -1:指定のメタデータは無かった TRUE:指定のメタデータは true だった FALSE:指定のメタデータは false だった 204 */ 205 //extern int GetAndroidMetaData_Boolean(const (dxlib_d.dxdatatypeandroid.TCHAR)* ValueName); 206 //extern int GetAndroidMetaData_BooleanWithStrLen(const (dxlib_d.dxdatatypeandroid.TCHAR)* ValueName, size_t ValueNameLength); 207 208 /** 209 * 通知を発行する 210 * Title = タイトル 211 * SubTitle = サブタイトル 212 * Icon = アイコン ( -1 でデフォルトのアイコン ) 213 * ShowWhen = 通知時刻を表示するか ( TRUE:表示する FALSE:表示しない ) 214 * AutoCancel = 通知がタップされたら通知を削除するか ( TRUE:タップされたら通知を削除する 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.dxdatatypeandroid.TCHAR)* Title, const (dxlib_d.dxdatatypeandroid.TCHAR)* SubTitle, int Icon = -1, int ShowWhen = dxlib_d.dxdatatypeandroid.TRUE, int AutoCancel = dxlib_d.dxdatatypeandroid.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.dxdatatypeandroid.TCHAR)* Title, size_t TitleLength, const (dxlib_d.dxdatatypeandroid.TCHAR)* SubTitle, size_t SubTitleLength, int Icon = -1, int ShowWhen = dxlib_d.dxdatatypeandroid.TRUE, int AutoCancel = dxlib_d.dxdatatypeandroid.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.dxdatatypeandroid.TCHAR)* URL, const (dxlib_d.dxdatatypeandroid.TCHAR)* BrowserAppPackageName = null, const (dxlib_d.dxdatatypeandroid.TCHAR)* BrowserAppClassName = null); 242 extern int AndroidJumpURLWithStrLen(const (dxlib_d.dxdatatypeandroid.TCHAR)* URL, size_t URLLength, const (dxlib_d.dxdatatypeandroid.TCHAR)* BrowserAppPackageName = null, size_t BrowserAppPackageNameLength = 0, const (dxlib_d.dxdatatypeandroid.TCHAR)* BrowserAppClassName = null, size_t BrowserAppClassNameLength = 0); 243 244 /** 245 * Wifi の電波強度を取得する 246 * ( 使用するには AndroidManifest.xml に <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> を書き加える必要があります ) 247 * 248 * Returns: 電波の強度 0 ~ 100 249 */ 250 extern int GetWifiSignalLevel(); 251 252 /** 253 * アプリが非アクティブになった際に呼ばれるコールバック関数を登録する 254 */ 255 extern int SetAndroidLostFocusCallbackFunction(void function(void* Data) Callback, void* CallbackData); 256 257 /** 258 * アプリがアクティブになった際に呼ばれるコールバック関数を登録する 259 */ 260 extern int SetAndroidGainedFocusCallbackFunction(void function(void* Data) Callback, void* CallbackData); 261 262 /** 263 * アプリを終了した際に、プロセスを完全に終了するかを設定する 264 * 265 * Params: 266 * KillProcessFlag = TRUE:アプリを終了したら、プロセスを完全に終了する FALSE:アプリを終了しても、プロセスは完全には終了されない( デフォルト ) 267 */ 268 extern int SetUseAndroidKillProcessFlag(int KillProcessFlag); 269 270 /** 271 * OpenGL 関係の情報を取得する 272 * 273 * Params: 274 * Version = ? 275 * Renderer = ? 276 * Vendor = ? 277 * ExtensionNames = ? 278 * Shader_Language_Version = ? 279 * Shader_Max_Vertex_Attribs = GL_MAX_VERTEX_ATTRIBS 280 * Shader_Max_Vertex_Uniform_Vectors = GL_MAX_VERTEX_UNIFORM_VECTORS 281 * Shader_Max_Varying_Vectors = GL_MAX_VARYING_VECTORS 282 * Shader_Max_Combined_Texture_Image_Units = GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS 283 * Shader_Max_Vertex_Texture_Image_Units = GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS 284 * Shader_Max_Texture_Image_Units = GL_MAX_TEXTURE_IMAGE_UNITS 285 * Shader_Max_Fragment_Uniform_Vectors = GL_MAX_FRAGMENT_UNIFORM_VECTORS 286 */ 287 extern int GetOpenGLInfo(dxlib_d.dxdatatypeandroid.TCHAR** Version = null, dxlib_d.dxdatatypeandroid.TCHAR** Renderer = null, dxlib_d.dxdatatypeandroid.TCHAR** Vendor = null, dxlib_d.dxdatatypeandroid.TCHAR*** ExtensionNames = null, dxlib_d.dxdatatypeandroid.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); 288 289 /** 290 * グラフィックハンドルのテクスチャオブジェクトを取得する 291 */ 292 extern uint GetGraphOpenGLESTextureObject(int GrHandle); 293 294 /** 295 * DXライブラリが行った OpenGL ES の設定を再度行う( 特殊用途 ) 296 */ 297 extern int RefreshDxLibOpenGLESSetting(); 298 299 /** 300 * イコライザー機能を使用するかどうかを設定する( DxLib_Init 呼び出し前のみ実行可能 ) 301 * UseFlag TRUE:使用する FALSE:使用しない 302 */ 303 extern int SetUseEqualizer(int UseFlag); 304 305 // イコライザー関係関数 306 307 /** 308 * イコライザーの与えられた周波数に最も影響を与える周波数帯域を取得します 309 * 310 * Returns: -1:エラー 0以上:周波数帯域インデックス 311 */ 312 extern int SearchEqualizerBandIndex(int Frequency); 313 314 /** 315 * イコライザーに指定できる周波数帯域の数を取得する 316 */ 317 extern int GetEqualizerBandNum(); 318 319 /** 320 * 与えられたイコライザーの周波数帯域を与えられたゲイン値に設定します 321 */ 322 extern int SetEqualizerBandLevel(int BandIndex, int Level); 323 324 /** 325 * イコライザーの指定された周波数帯域のゲイン値を取得します 326 */ 327 extern int GetEqualizerBandLevel(int BandIndex); 328 329 /** 330 * イコライザーの指定された周波数帯域の周波数範囲を取得します 331 * 332 * Params: 333 * BandIndex = ? 334 * pMin = 最小周波数( 単位:ヘルツ ) 335 * pMax = 最大周波数( 単位:ヘルツ ) 336 */ 337 extern int GetEqualizerBandFreqRange(int BandIndex, int* pMin, int* pMax); 338 339 /** 340 * イコライザーの指定された周波数帯域の中心周波数を取得します 341 * 342 * Returns: 中心周波数( 単位:ヘルツ ) 343 */ 344 extern int GetEqualizerBandCenterFreq(int BandIndex); 345 346 /** 347 * イコライザーの現在のプリセットを取得します 348 * 349 * Returns: プリセット番号 350 */ 351 extern int GetEqualizerCurrentPreset(); 352 353 /** 354 * イコライザーのプリセットの数を取得します 355 * 356 * Returns: プリセットの数 357 */ 358 extern int GetEqualizerPresetNum(); 359 360 /** 361 * イコライザーのプリセット名を取得します 362 * 363 * Returns: プリセット名の文字列が格納されたメモリ領域の先頭アドレス 364 */ 365 extern const (dxlib_d.dxdatatypeandroid.TCHAR)* GetEqualizerPresetName(int PresetIndex); 366 367 /** 368 * 指定したプリセットに従ってイコライザーを設定します 369 */ 370 extern int SetUseEqualizerPreset(int PresetIndex); 371 }