Merge pull request #1376 from reicast/ac/android

Android: Complete conversion to API 26 standards (Cont.)
This commit is contained in:
Abandoned Cart 2018-09-12 23:54:55 -04:00 committed by GitHub
commit eacbae5b30
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
12 changed files with 214 additions and 228 deletions

View File

@ -27,6 +27,7 @@ import java.io.BufferedReader;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.io.InputStreamReader; import java.io.InputStreamReader;
import java.lang.ref.WeakReference;
import java.net.HttpURLConnection; import java.net.HttpURLConnection;
import java.net.URL; import java.net.URL;
import java.util.ArrayList; import java.util.ArrayList;
@ -62,21 +63,22 @@ public class AboutFragment extends Fragment {
e.printStackTrace(); e.printStackTrace();
} }
new retrieveGitTask().execute(Config.git_api); new retrieveGitTask(this).execute(Config.git_api);
} }
private class retrieveGitTask extends private static class retrieveGitTask extends
AsyncTask<String, Integer, ArrayList<HashMap<String, String>>> { AsyncTask<String, Integer, ArrayList<HashMap<String, String>>> {
@Override private WeakReference<AboutFragment> ref;
protected void onPreExecute() {
retrieveGitTask(AboutFragment context) {
ref = new WeakReference<>(context);
} }
@Override @Override
protected ArrayList<HashMap<String, String>> doInBackground( protected ArrayList<HashMap<String, String>> doInBackground(
String... paths) { String... paths) {
ArrayList<HashMap<String, String>> commitList = new ArrayList<HashMap<String, String>>(); ArrayList<HashMap<String, String>> commitList = new ArrayList<>();
try { try {
JSONArray gitObject = getContent(paths[0]); JSONArray gitObject = getContent(paths[0]);
for (int i = 0; i < gitObject.length(); i++) { for (int i = 0; i < gitObject.length(); i++) {
@ -89,7 +91,7 @@ public class AboutFragment extends Fragment {
String author = commitArray.getJSONObject("author").getString("name"); String author = commitArray.getJSONObject("author").getString("name");
String committer = commitArray.getJSONObject("committer").getString("name"); String committer = commitArray.getJSONObject("committer").getString("name");
String avatar = null; String avatar;
if (!jsonObject.getString("committer").equals("null")) { if (!jsonObject.getString("committer").equals("null")) {
avatar = jsonObject.getJSONObject("committer").getString("avatar_url"); avatar = jsonObject.getJSONObject("committer").getString("avatar_url");
committer = committer + " (" + jsonObject committer = committer + " (" + jsonObject
@ -109,7 +111,7 @@ public class AboutFragment extends Fragment {
.replace("https://api.github.com/repos", "https://github.com") .replace("https://api.github.com/repos", "https://github.com")
.replace("commits", "commit"); .replace("commits", "commit");
String title = "No commit heading attached"; String title;
String message = "No commit message attached"; String message = "No commit message attached";
if (commitArray.getString("message").contains("\n\n")) { if (commitArray.getString("message").contains("\n\n")) {
@ -121,7 +123,7 @@ public class AboutFragment extends Fragment {
title = commitArray.getString("message"); title = commitArray.getString("message");
} }
HashMap<String, String> map = new HashMap<String, String>(); HashMap<String, String> map = new HashMap<>();
map.put("Date", date); map.put("Date", date);
map.put("Committer", committer); map.put("Committer", committer);
map.put("Title", title); map.put("Title", title);
@ -130,7 +132,7 @@ public class AboutFragment extends Fragment {
map.put("Url", curl); map.put("Url", curl);
map.put("Author", author); map.put("Author", author);
map.put("Avatar", avatar); map.put("Avatar", avatar);
map.put("Build", buildId); map.put("Build", ref.get().buildId);
commitList.add(map); commitList.add(map);
} }
@ -146,14 +148,15 @@ public class AboutFragment extends Fragment {
protected void onPostExecute( protected void onPostExecute(
ArrayList<HashMap<String, String>> commitList) { ArrayList<HashMap<String, String>> commitList) {
if (commitList != null && commitList.size() > 0) { if (commitList != null && commitList.size() > 0) {
ListView list = (ListView) getView().findViewById(R.id.list); ListView list = (ListView) ref.get().getView().findViewById(R.id.list);
list.setSelector(R.drawable.list_selector); list.setSelector(R.drawable.list_selector);
list.setChoiceMode(ListView.CHOICE_MODE_SINGLE); list.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
GitAdapter adapter = new GitAdapter(getActivity(), commitList); GitAdapter adapter = new GitAdapter(ref.get().getActivity(), commitList);
// Set adapter as specified collection // Set adapter as specified collection
list.setAdapter(adapter); list.setAdapter(adapter);
} else { } else {
showToastMessage(getActivity().getString(R.string.git_broken), Snackbar.LENGTH_SHORT); ref.get().showToastMessage(ref.get().getActivity().getString(
R.string.git_broken), Snackbar.LENGTH_SHORT);
} }
} }

View File

@ -239,9 +239,9 @@ public class FileBrowser extends Fragment {
filter[i] = new FilenameFilter() { filter[i] = new FilenameFilter() {
public boolean accept(File dir, String name) { public boolean accept(File dir, String name) {
return (!dir.getName().equals("obb") && !dir.getName().equals("cache") return !dir.getName().equals("obb") && !dir.getName().equals("cache")
&& !dir.getName().startsWith(".") && !name.startsWith(".")) && !dir.getName().startsWith(".") && !name.startsWith(".")
&& (array != R.array.flash && name.startsWith("dc_")) && (array != R.array.flash || name.startsWith("dc_"))
&& (browser.get().searchQuery == null && (browser.get().searchQuery == null
|| name.toLowerCase(Locale.getDefault()).contains( || name.toLowerCase(Locale.getDefault()).contains(
browser.get().searchQuery.toLowerCase(Locale.getDefault()))) browser.get().searchQuery.toLowerCase(Locale.getDefault())))

View File

@ -1,5 +1,6 @@
package com.reicast.emulator; package com.reicast.emulator;
import android.annotation.SuppressLint;
import android.app.Activity; import android.app.Activity;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import android.content.res.Configuration; import android.content.res.Configuration;
@ -134,7 +135,7 @@ public class GL2JNIActivity extends Activity {
new int[][] { p1periphs, p2periphs, p3periphs, p4periphs }); new int[][] { p1periphs, p2periphs, p3periphs, p4periphs });
int joys[] = InputDevice.getDeviceIds(); int joys[] = InputDevice.getDeviceIds();
for (int joy: joys) { for (int joy: joys) {
String descriptor = null; String descriptor;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
descriptor = InputDevice.getDevice(joy).getDescriptor(); descriptor = InputDevice.getDevice(joy).getDescriptor();
} else { } else {
@ -148,11 +149,13 @@ public class GL2JNIActivity extends Activity {
pad.deviceId_deviceDescriptor.put(joy, descriptor); pad.deviceId_deviceDescriptor.put(joy, descriptor);
} }
boolean detected = false;
for (int joy : joys) { for (int joy : joys) {
Integer playerNum = pad.deviceDescriptor_PlayerNum Integer playerNum = pad.deviceDescriptor_PlayerNum
.get(pad.deviceId_deviceDescriptor.get(joy)); .get(pad.deviceId_deviceDescriptor.get(joy));
if (playerNum != null) { if (playerNum != null) {
detected = true;
String id = pad.portId[playerNum]; String id = pad.portId[playerNum];
pad.custom[playerNum] = prefs.getBoolean(Gamepad.pref_js_modified + id, false); pad.custom[playerNum] = prefs.getBoolean(Gamepad.pref_js_modified + id, false);
pad.compat[playerNum] = prefs.getBoolean(Gamepad.pref_js_compat + id, false); pad.compat[playerNum] = prefs.getBoolean(Gamepad.pref_js_compat + id, false);
@ -186,11 +189,9 @@ public class GL2JNIActivity extends Activity {
pad.getCompatibilityMap(playerNum, id, prefs); pad.getCompatibilityMap(playerNum, id, prefs);
} }
pad.initJoyStickLayout(playerNum); pad.initJoyStickLayout(playerNum);
} else {
pad.runCompatibilityMode(joy, prefs);
} }
} }
if (joys.length == 0) { if (joys.length == 0 || !detected) {
pad.fullCompatibilityMode(prefs); pad.fullCompatibilityMode(prefs);
} }
@ -247,6 +248,7 @@ public class GL2JNIActivity extends Activity {
fpsPop.update(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); fpsPop.update(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
} }
@SuppressLint("RtlHardcoded")
public void toggleVmu() { public void toggleVmu() {
boolean showFloating = !prefs.getBoolean(Config.pref_vmu, false); boolean showFloating = !prefs.getBoolean(Config.pref_vmu, false);
if (showFloating) { if (showFloating) {
@ -305,14 +307,14 @@ public class GL2JNIActivity extends Activity {
private boolean showMenu() { private boolean showMenu() {
if (popUp != null) { if (popUp != null) {
if (!menu.dismissPopUps()) { if (menu.dismissPopUps()) {
popUp.dismiss();
} else {
if (!popUp.isShowing()) { if (!popUp.isShowing()) {
displayPopUp(popUp); displayPopUp(popUp);
} else { } else {
popUp.dismiss(); popUp.dismiss();
} }
} else {
popUp.dismiss();
} }
} }
return true; return true;
@ -433,7 +435,7 @@ public class GL2JNIActivity extends Activity {
boolean rav = false; boolean rav = false;
for (int i = 0; i < pad.map[playerNum].length; i += 2) { for (int i = 0; i < pad.map[playerNum].length; i += 2) {
if (pad.map[playerNum][i + 0] == kc) { if (pad.map[playerNum][i] == kc) {
if (down) if (down)
GL2JNIView.kcode_raw[playerNum] &= ~pad.map[playerNum][i + 1]; GL2JNIView.kcode_raw[playerNum] &= ~pad.map[playerNum][i + 1];
else else
@ -509,10 +511,6 @@ public class GL2JNIActivity extends Activity {
return super.onKeyDown(keyCode, event); return super.onKeyDown(keyCode, event);
} }
public GL2JNIView getGameView() {
return mView;
}
@Override @Override
protected void onPause() { protected void onPause() {
super.onPause(); super.onPause();

View File

@ -1,5 +1,6 @@
package com.reicast.emulator; package com.reicast.emulator;
import android.annotation.SuppressLint;
import android.app.NativeActivity; import android.app.NativeActivity;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import android.content.res.Configuration; import android.content.res.Configuration;
@ -136,32 +137,29 @@ public class GL2JNINative extends NativeActivity {
new int[][] { p1periphs, p2periphs, p3periphs, p4periphs }); new int[][] { p1periphs, p2periphs, p3periphs, p4periphs });
int joys[] = InputDevice.getDeviceIds(); int joys[] = InputDevice.getDeviceIds();
for (int joy : joys) { for (int joy : joys) {
String descriptor = descriptor = InputDevice.getDevice(joy).getDescriptor(); String descriptor = InputDevice.getDevice(joy).getDescriptor();
Log.d("reicast", "InputDevice ID: " + joy); Log.d("reicast", "InputDevice ID: " + joy);
Log.d("reicast", "InputDevice Name: " + InputDevice.getDevice(joy).getName()); Log.d("reicast", "InputDevice Name: " + InputDevice.getDevice(joy).getName());
Log.d("reicast", "InputDevice Descriptor: " + descriptor); Log.d("reicast", "InputDevice Descriptor: " + descriptor);
pad.deviceId_deviceDescriptor.put(joy, descriptor); pad.deviceId_deviceDescriptor.put(joy, descriptor);
} }
boolean detected = false;
for (int joy : joys) { for (int joy : joys) {
Integer playerNum = pad.deviceDescriptor_PlayerNum Integer playerNum = pad.deviceDescriptor_PlayerNum
.get(pad.deviceId_deviceDescriptor.get(joy)); .get(pad.deviceId_deviceDescriptor.get(joy));
if (playerNum != null) { if (playerNum != null) {
detected = true;
String id = pad.portId[playerNum]; String id = pad.portId[playerNum];
pad.custom[playerNum] = prefs.getBoolean(Gamepad.pref_js_modified + id, false); pad.custom[playerNum] = prefs.getBoolean(Gamepad.pref_js_modified + id, false);
pad.compat[playerNum] = prefs.getBoolean(Gamepad.pref_js_compat + id, false); pad.compat[playerNum] = prefs.getBoolean(Gamepad.pref_js_compat + id, false);
pad.joystick[playerNum] = prefs.getBoolean(Gamepad.pref_js_merged + id, false); pad.joystick[playerNum] = prefs.getBoolean(Gamepad.pref_js_merged + id, false);
if (InputDevice.getDevice(joy).getName() if (InputDevice.getDevice(joy).getName().contains(Gamepad.controllers_gamekey)) {
.contains(Gamepad.controllers_gamekey)) {
// if (pad.custom[playerNum]) {
// setCustomMapping(id, playerNum);
// } else {
// pad.map[playerNum] = pad.getConsoleController();
// }
new Handler().post(new Runnable() { new Handler().post(new Runnable() {
public void run() { public void run() {
Toast.makeText(getApplicationContext(), R.string.controller_unavailable, Toast.makeText(getApplicationContext(),
R.string.controller_unavailable,
Toast.LENGTH_SHORT).show(); Toast.LENGTH_SHORT).show();
finish(); finish();
} }
@ -189,10 +187,11 @@ public class GL2JNINative extends NativeActivity {
} }
pad.initJoyStickLayout(playerNum); pad.initJoyStickLayout(playerNum);
pad.playerNumX.put(joy, playerNum); pad.playerNumX.put(joy, playerNum);
} else {
pad.runCompatibilityMode(joy, prefs);
} }
} }
if (joys.length == 0 || !detected) {
pad.fullCompatibilityMode(prefs);
}
app.loadConfigurationPrefs(); app.loadConfigurationPrefs();
@ -242,6 +241,7 @@ public class GL2JNINative extends NativeActivity {
return pad; return pad;
} }
@SuppressLint("RtlHardcoded")
public void displayFPS() { public void displayFPS() {
fpsPop.showAtLocation(mView, Gravity.TOP | Gravity.LEFT, 20, 20); fpsPop.showAtLocation(mView, Gravity.TOP | Gravity.LEFT, 20, 20);
fpsPop.update(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); fpsPop.update(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
@ -305,14 +305,14 @@ public class GL2JNINative extends NativeActivity {
private boolean showMenu() { private boolean showMenu() {
if (popUp != null) { if (popUp != null) {
if (!menu.dismissPopUps()) { if (menu.dismissPopUps()) {
popUp.dismiss();
} else {
if (!popUp.isShowing()) { if (!popUp.isShowing()) {
displayPopUp(popUp); displayPopUp(popUp);
} else { } else {
popUp.dismiss(); popUp.dismiss();
} }
} else {
popUp.dismiss();
} }
} }
return true; return true;
@ -436,7 +436,7 @@ public class GL2JNINative extends NativeActivity {
boolean rav = false; boolean rav = false;
for (int i = 0; i < pad.map[playerNum].length; i += 2) { for (int i = 0; i < pad.map[playerNum].length; i += 2) {
if (pad.map[playerNum][i + 0] == kc) { if (pad.map[playerNum][i] == kc) {
if (down) if (down)
GL2JNIView.kcode_raw[playerNum] &= ~pad.map[playerNum][i + 1]; GL2JNIView.kcode_raw[playerNum] &= ~pad.map[playerNum][i + 1];
else else
@ -474,7 +474,7 @@ public class GL2JNINative extends NativeActivity {
public boolean OnNativeKeyPress(int device, int keyCode, int action, int metaState) { public boolean OnNativeKeyPress(int device, int keyCode, int action, int metaState) {
Integer playerNum = pad.playerNumX.get(device); Integer playerNum = pad.playerNumX.get(device);
if (playerNum != null && playerNum != -1) { if (playerNum != -1) {
String id = pad.portId[playerNum]; String id = pad.portId[playerNum];
if (action == KeyEvent.ACTION_DOWN) { if (action == KeyEvent.ACTION_DOWN) {
if (keyCode == prefs.getInt(Gamepad.pref_button_l + id, KeyEvent.KEYCODE_BUTTON_L1)) if (keyCode == prefs.getInt(Gamepad.pref_button_l + id, KeyEvent.KEYCODE_BUTTON_L1))
@ -500,10 +500,9 @@ public class GL2JNINative extends NativeActivity {
// public boolean OnNativeMotion(int device, int source, int action, int x, // public boolean OnNativeMotion(int device, int source, int action, int x,
// int y, boolean newEvent) { // int y, boolean newEvent) {
public boolean OnNativeMotion(int device, int source, int action, int x, public boolean OnNativeMotion(int device, int source, int action, int x, int y) {
int y) {
Integer playerNum = pad.playerNumX.get(device); Integer playerNum = pad.playerNumX.get(device);
if (playerNum != null && playerNum != -1) { if (playerNum != -1) {
Log.d("reicast", playerNum + " - " + device + ": " + source); Log.d("reicast", playerNum + " - " + device + ": " + source);
// if (newEvent && source == Gamepad.Xperia_Touchpad) { // if (newEvent && source == Gamepad.Xperia_Touchpad) {
if (source == Gamepad.Xperia_Touchpad) { if (source == Gamepad.Xperia_Touchpad) {
@ -526,8 +525,8 @@ public class GL2JNINative extends NativeActivity {
// The y-axis is inverted from normal layout // The y-axis is inverted from normal layout
// Imagine it as a small MacBook touch mouse // Imagine it as a small MacBook touch mouse
GL2JNIView.jx[playerNum] = (int) (x * 126); GL2JNIView.jx[playerNum] = x * 126;
GL2JNIView.jy[playerNum] = (int) (y * 126); GL2JNIView.jy[playerNum] = y * 126;
mView.pushInput(); mView.pushInput();
return true; return true;
} }
@ -535,10 +534,6 @@ public class GL2JNINative extends NativeActivity {
return false; return false;
} }
public GL2JNIView getGameView() {
return mView;
}
@Override @Override
protected void onPause() { protected void onPause() {
super.onPause(); super.onPause();

View File

@ -14,6 +14,7 @@ import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.os.Environment; import android.os.Environment;
import android.preference.PreferenceManager; import android.preference.PreferenceManager;
import android.support.annotation.NonNull;
import android.support.constraint.ConstraintLayout; import android.support.constraint.ConstraintLayout;
import android.support.design.widget.NavigationView; import android.support.design.widget.NavigationView;
import android.support.design.widget.Snackbar; import android.support.design.widget.Snackbar;
@ -52,8 +53,6 @@ public class MainActivity extends AppCompatActivity implements
private SharedPreferences mPrefs; private SharedPreferences mPrefs;
private boolean hasAndroidMarket = false; private boolean hasAndroidMarket = false;
private UncaughtExceptionHandler mUEHandler;
@Override @Override
public void onCreate(Bundle savedInstanceState) { public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
@ -64,7 +63,6 @@ public class MainActivity extends AppCompatActivity implements
public void onSystemUiVisibilityChange(int visibility) { public void onSystemUiVisibilityChange(int visibility) {
if ((visibility & View.SYSTEM_UI_FLAG_FULLSCREEN) == 0) { if ((visibility & View.SYSTEM_UI_FLAG_FULLSCREEN) == 0) {
getWindow().getDecorView().setSystemUiVisibility( getWindow().getDecorView().setSystemUiVisibility(
// View.SYSTEM_UI_FLAG_LAYOUT_STABLE |
View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
@ -85,7 +83,7 @@ public class MainActivity extends AppCompatActivity implements
displayLogOutput(prior_error); displayLogOutput(prior_error);
mPrefs.edit().remove("prior_error").apply(); mPrefs.edit().remove("prior_error").apply();
} else { } else {
mUEHandler = new Thread.UncaughtExceptionHandler() { UncaughtExceptionHandler mUEHandler = new Thread.UncaughtExceptionHandler() {
public void uncaughtException(Thread t, Throwable error) { public void uncaughtException(Thread t, Throwable error) {
if (error != null) { if (error != null) {
StringBuilder output = new StringBuilder(); StringBuilder output = new StringBuilder();
@ -95,6 +93,8 @@ public class MainActivity extends AppCompatActivity implements
} }
mPrefs.edit().putString("prior_error", output.toString()).apply(); mPrefs.edit().putString("prior_error", output.toString()).apply();
error.printStackTrace(); error.printStackTrace();
android.os.Process.killProcess(android.os.Process.myPid());
System.exit(0);
} }
} }
}; };
@ -152,6 +152,7 @@ public class MainActivity extends AppCompatActivity implements
} }
}; };
//noinspection deprecation
drawer.setDrawerListener(toggle); drawer.setDrawerListener(toggle);
toggle.syncState(); toggle.syncState();
@ -262,7 +263,6 @@ public class MainActivity extends AppCompatActivity implements
getSupportFragmentManager().beginTransaction().replace( getSupportFragmentManager().beginTransaction().replace(
R.id.fragment_container, optsFrag, "OPTIONS_FRAG").commit(); R.id.fragment_container, optsFrag, "OPTIONS_FRAG").commit();
setTitle(R.string.settings); setTitle(R.string.settings);
return;
} }
/** /**
@ -327,8 +327,7 @@ public class MainActivity extends AppCompatActivity implements
@Override @Override
public boolean onKeyDown(int keyCode, KeyEvent event) { public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) { if (keyCode == KeyEvent.KEYCODE_BACK) {
Fragment fragment = (FileBrowser) getSupportFragmentManager() Fragment fragment = getSupportFragmentManager().findFragmentByTag("MAIN_BROWSER");
.findFragmentByTag("MAIN_BROWSER");
if (fragment != null && fragment.isVisible()) { if (fragment != null && fragment.isVisible()) {
boolean readyToQuit = true; boolean readyToQuit = true;
if (fragment.getArguments() != null) { if (fragment.getArguments() != null) {
@ -380,9 +379,8 @@ public class MainActivity extends AppCompatActivity implements
super.onPostCreate(savedInstanceState); super.onPostCreate(savedInstanceState);
} }
@SuppressWarnings("StatementWithEmptyBody")
@Override @Override
public boolean onNavigationItemSelected(MenuItem item) { public boolean onNavigationItemSelected(@NonNull MenuItem item) {
// Handle navigation view item clicks here. // Handle navigation view item clicks here.
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);

View File

@ -75,7 +75,7 @@ public class XMLParser extends AsyncTask<String, Integer, String> {
initializeDefaults(); initializeDefaults();
} }
public void setGameID(String id) { private void setGameID(String id) {
this.gameId = id; this.gameId = id;
} }
@ -83,7 +83,7 @@ public class XMLParser extends AsyncTask<String, Integer, String> {
protected String doInBackground(String... params) { protected String doInBackground(String... params) {
String filename = game_name = params[0]; String filename = game_name = params[0];
if (isNetworkAvailable() && mPrefs.getBoolean(Config.pref_gamedetails, false)) { if (isNetworkAvailable() && mPrefs.getBoolean(Config.pref_gamedetails, false)) {
String xmlUrl = ""; String xmlUrl;
if (gameId != null) { if (gameId != null) {
xmlUrl = "http://legacy.thegamesdb.net/api/GetGame.php?platform=sega+dreamcast&id=" + gameId; xmlUrl = "http://legacy.thegamesdb.net/api/GetGame.php?platform=sega+dreamcast&id=" + gameId;
} else { } else {
@ -187,6 +187,7 @@ public class XMLParser extends AsyncTask<String, Integer, String> {
game_icon = new BitmapDrawable( game_icon = new BitmapDrawable(
mContext.get().getResources(), gameImage); mContext.get().getResources(), gameImage);
} else { } else {
//noinspection deprecation
game_icon = new BitmapDrawable(gameImage); game_icon = new BitmapDrawable(gameImage);
} }
((ImageView) childview.get().findViewById( ((ImageView) childview.get().findViewById(
@ -235,18 +236,6 @@ public class XMLParser extends AsyncTask<String, Integer, String> {
} }
} }
public Drawable getGameIcon() {
return game_icon;
}
public String getGameTitle() {
return game_name;
}
public String getGameDetails() {
return game_details;
}
private Document getDomElement(String xml) { private Document getDomElement(String xml) {
Document doc = null; Document doc = null;
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
@ -339,9 +328,7 @@ public class XMLParser extends AsyncTask<String, Integer, String> {
Bitmap bitmap = BitmapFactory.decodeStream(bis, null, options); Bitmap bitmap = BitmapFactory.decodeStream(bis, null, options);
bis.close(); bis.close();
im.close(); im.close();
bis = null; OutputStream fOut;
im = null;
OutputStream fOut = null;
if (!file.getParentFile().exists()) { if (!file.getParentFile().exists()) {
file.getParentFile().mkdir(); file.getParentFile().mkdir();
} }

View File

@ -170,8 +170,6 @@ public class GenerateLogs extends AsyncTask<String, Integer, String> {
log.append(separator); log.append(separator);
} }
reader.close(); reader.close();
mLogcatProc = null;
reader = null;
File memory = new File(mContext.get().getFilesDir(), "mem_alloc.txt"); File memory = new File(mContext.get().getFilesDir(), "mem_alloc.txt");
if (memory.exists()) { if (memory.exists()) {
log.append(separator); log.append(separator);
@ -186,9 +184,7 @@ public class GenerateLogs extends AsyncTask<String, Integer, String> {
log.append(separator); log.append(separator);
} }
fis.close(); fis.close();
fis = null;
reader.close(); reader.close();
reader = null;
} }
BufferedWriter writer = new BufferedWriter(new FileWriter(logFile)); BufferedWriter writer = new BufferedWriter(new FileWriter(logFile));
writer.write(log.toString()); writer.write(log.toString());

View File

@ -375,9 +375,8 @@ public class GL2JNIView extends GLSurfaceView
JNIdc.vjoy(j+1, vjoy[j+1][0], vjoy[j+1][1] , vjoy[j+1][2], vjoy[j+1][3]); JNIdc.vjoy(j+1, vjoy[j+1][0], vjoy[j+1][1] , vjoy[j+1][2], vjoy[j+1][3]);
anal_id=event.getPointerId(i); anal_id=event.getPointerId(i);
} }
} } else if (vjoy[j][4] != -4) {
else if (vjoy[j][4]==-4); if (vjoy[j][4] == -1) {
else if(vjoy[j][4]==-1) {
if (editVjoyMode) { if (editVjoyMode) {
selectedVjoyElement = 3; // Left Trigger selectedVjoyElement = 3; // Left Trigger
resetEditMode(); resetEditMode();
@ -385,8 +384,7 @@ public class GL2JNIView extends GLSurfaceView
lt[0] = pre; lt[0] = pre;
lt_id = event.getPointerId(i); lt_id = event.getPointerId(i);
} }
} } else if (vjoy[j][4] == -2) {
else if (vjoy[j][4]==-2) {
if (editVjoyMode) { if (editVjoyMode) {
selectedVjoyElement = 4; // Right Trigger selectedVjoyElement = 4; // Right Trigger
resetEditMode(); resetEditMode();
@ -394,8 +392,7 @@ public class GL2JNIView extends GLSurfaceView
rt[0] = pre; rt[0] = pre;
rt_id = event.getPointerId(i); rt_id = event.getPointerId(i);
} }
} } else {
else {
if (editVjoyMode) { if (editVjoyMode) {
selectedVjoyElement = getElementIdFromButtonId(j); selectedVjoyElement = getElementIdFromButtonId(j);
resetEditMode(); resetEditMode();
@ -406,8 +403,7 @@ public class GL2JNIView extends GLSurfaceView
} }
} }
} }
else } else {
{
if (x<vjoy[11][0]) if (x<vjoy[11][0])
x=vjoy[11][0]; x=vjoy[11][0];
else if (x>(vjoy[11][0]+vjoy[11][2])) else if (x>(vjoy[11][0]+vjoy[11][2]))

View File

@ -1,5 +1,6 @@
package com.reicast.emulator.emu; package com.reicast.emulator.emu;
import android.annotation.SuppressLint;
import android.app.Activity; import android.app.Activity;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
@ -44,12 +45,12 @@ public class OnScreenMenu {
public OnScreenMenu(Activity context, SharedPreferences prefs) { public OnScreenMenu(Activity context, SharedPreferences prefs) {
if (context instanceof GL2JNINative) { if (context instanceof GL2JNINative) {
this.mContext = (GL2JNINative) context; this.mContext = context;
} }
if (context instanceof GL2JNIActivity) { if (context instanceof GL2JNIActivity) {
this.mContext = (GL2JNIActivity) context; this.mContext = context;
} }
popups = new Vector<PopupWindow>(); popups = new Vector<>();
if (prefs != null) { if (prefs != null) {
masteraudio = !Emulator.nosound; masteraudio = !Emulator.nosound;
audio = masteraudio; audio = masteraudio;
@ -68,7 +69,7 @@ public class OnScreenMenu {
}); });
} }
void displayDebugPopup(final PopupWindow popUp) { private void displayDebugPopup() {
if (mContext instanceof GL2JNINative) { if (mContext instanceof GL2JNINative) {
((GL2JNINative) mContext).displayDebug(new DebugPopup(mContext)); ((GL2JNINative) mContext).displayDebug(new DebugPopup(mContext));
} }
@ -114,8 +115,9 @@ public class OnScreenMenu {
public class DebugPopup extends PopupWindow { public class DebugPopup extends PopupWindow {
public DebugPopup(Context c) { DebugPopup(Context c) {
super(c); super(c);
//noinspection deprecation
setBackgroundDrawable(new BitmapDrawable()); setBackgroundDrawable(new BitmapDrawable());
View shell = mContext.getLayoutInflater().inflate(R.layout.menu_popup_debug, null); View shell = mContext.getLayoutInflater().inflate(R.layout.menu_popup_debug, null);
@ -171,7 +173,7 @@ public class OnScreenMenu {
} }
} }
void displayConfigPopup(final PopupWindow popUp) { private void displayConfigPopup() {
if (mContext instanceof GL2JNINative) { if (mContext instanceof GL2JNINative) {
((GL2JNINative) mContext).displayConfig(new ConfigPopup(mContext)); ((GL2JNINative) mContext).displayConfig(new ConfigPopup(mContext));
} }
@ -189,8 +191,9 @@ public class OnScreenMenu {
private Button fdown; private Button fdown;
private Button fup; private Button fup;
public ConfigPopup(Context c) { ConfigPopup(Context c) {
super(c); super(c);
//noinspection deprecation
setBackgroundDrawable(new BitmapDrawable()); setBackgroundDrawable(new BitmapDrawable());
View shell = mContext.getLayoutInflater().inflate(R.layout.menu_popup_config, null); View shell = mContext.getLayoutInflater().inflate(R.layout.menu_popup_config, null);
@ -471,6 +474,7 @@ public class OnScreenMenu {
private LinearLayout vmuIcon; private LinearLayout vmuIcon;
LinearLayout.LayoutParams params; LinearLayout.LayoutParams params;
@SuppressLint("RtlHardcoded")
private LinearLayout.LayoutParams setVmuParams() { private LinearLayout.LayoutParams setVmuParams() {
int vpX = getPixelsFromDp(72, mContext); int vpX = getPixelsFromDp(72, mContext);
int vpY = getPixelsFromDp(52, mContext); int vpY = getPixelsFromDp(52, mContext);
@ -484,6 +488,7 @@ public class OnScreenMenu {
public MainPopup(Context c) { public MainPopup(Context c) {
super(c); super(c);
//noinspection deprecation
setBackgroundDrawable(new BitmapDrawable()); setBackgroundDrawable(new BitmapDrawable());
View shell = mContext.getLayoutInflater().inflate(R.layout.menu_popup_main, null); View shell = mContext.getLayoutInflater().inflate(R.layout.menu_popup_main, null);
@ -515,7 +520,7 @@ public class OnScreenMenu {
OnClickListener clickOptions = new OnClickListener() { OnClickListener clickOptions = new OnClickListener() {
public void onClick(View v) { public void onClick(View v) {
displayConfigPopup(MainPopup.this); displayConfigPopup();
popups.remove(MainPopup.this); popups.remove(MainPopup.this);
dismiss(); dismiss();
} }
@ -525,7 +530,7 @@ public class OnScreenMenu {
OnClickListener clickDebugging = new OnClickListener() { OnClickListener clickDebugging = new OnClickListener() {
public void onClick(View v) { public void onClick(View v) {
displayDebugPopup(MainPopup.this); displayDebugPopup();
popups.remove(MainPopup.this); popups.remove(MainPopup.this);
dismiss(); dismiss();
} }
@ -552,11 +557,11 @@ public class OnScreenMenu {
OnClickListener clickExit = new OnClickListener() { OnClickListener clickExit = new OnClickListener() {
public void onClick(View v) { public void onClick(View v) {
if (Config.externalIntent) { if (Config.externalIntent) {
((Activity) mContext).finish(); mContext.finish();
} else { } else {
Intent inte = new Intent(mContext, MainActivity.class); Intent inte = new Intent(mContext, MainActivity.class);
mContext.startActivity(inte); mContext.startActivity(inte);
((Activity) mContext).finish(); mContext.finish();
} }
} }
}; };

View File

@ -20,7 +20,7 @@ public class Gamepad {
public static final String pref_player2 = "device_descriptor_player_2"; public static final String pref_player2 = "device_descriptor_player_2";
public static final String pref_player3 = "device_descriptor_player_3"; public static final String pref_player3 = "device_descriptor_player_3";
public static final String pref_player4 = "device_descriptor_player_4"; public static final String pref_player4 = "device_descriptor_player_4";
public static final String pref_pad = "controller"; private static final String pref_pad = "controller";
public static final String pref_mic = "mic_plugged_in"; public static final String pref_mic = "mic_plugged_in";
@ -141,7 +141,7 @@ public class Gamepad {
}; };
} }
public int[] setModifiedKeys(String id, int playerNum, SharedPreferences mPrefs) { private int[] setModifiedKeys(String id, SharedPreferences mPrefs) {
return new int[] { return new int[] {
mPrefs.getInt(pref_button_a + id, OuyaController.BUTTON_O), key_CONT_A, mPrefs.getInt(pref_button_a + id, OuyaController.BUTTON_O), key_CONT_A,
mPrefs.getInt(pref_button_b + id, OuyaController.BUTTON_A), key_CONT_B, mPrefs.getInt(pref_button_b + id, OuyaController.BUTTON_A), key_CONT_B,
@ -177,7 +177,7 @@ public class Gamepad {
} }
} }
public int getStartButtonCode() { private int getStartButtonCode() {
return KeyEvent.KEYCODE_BUTTON_START; return KeyEvent.KEYCODE_BUTTON_START;
} }
@ -192,7 +192,7 @@ public class Gamepad {
} }
public void setCustomMapping(String id, int playerNum, SharedPreferences prefs) { public void setCustomMapping(String id, int playerNum, SharedPreferences prefs) {
map[playerNum] = setModifiedKeys(id, playerNum, prefs); map[playerNum] = setModifiedKeys(id, prefs);
} }
public void initJoyStickLayout(int playerNum) { public void initJoyStickLayout(int playerNum) {
@ -202,27 +202,21 @@ public class Gamepad {
} }
} }
public void runCompatibilityMode(int joy, SharedPreferences prefs) {
for (int n = 0; n < 4; n++) {
if (compat[n]) {
String id = portId[n];
joystick[n] = prefs.getBoolean(Gamepad.pref_js_merged + id, false);
getCompatibilityMap(n, portId[n], prefs);
initJoyStickLayout(n);
}
}
}
public void fullCompatibilityMode(SharedPreferences prefs) { public void fullCompatibilityMode(SharedPreferences prefs) {
for (int n = 0; n < 4; n++) { for (int joy = 0; joy < 4; joy++) {
runCompatibilityMode(n, prefs); if (compat[joy]) {
String id = portId[joy];
joystick[joy] = prefs.getBoolean(Gamepad.pref_js_merged + id, false);
getCompatibilityMap(joy, portId[joy], prefs);
initJoyStickLayout(joy);
}
} }
} }
public void getCompatibilityMap(int playerNum, String id, SharedPreferences prefs) { public void getCompatibilityMap(int playerNum, String id, SharedPreferences prefs) {
name[playerNum] = prefs.getInt(Gamepad.pref_pad + id, -1); name[playerNum] = prefs.getInt(Gamepad.pref_pad + id, -1);
if (name[playerNum] != -1) { if (name[playerNum] != -1) {
map[playerNum] = setModifiedKeys(id, playerNum, prefs); map[playerNum] = setModifiedKeys(id, prefs);
} }
} }
} }

View File

@ -9,14 +9,14 @@ import java.util.concurrent.ConcurrentLinkedQueue;
public class SipEmulator extends Thread { public class SipEmulator extends Thread {
static final String TAG = "SipEmulator"; private static final String TAG = "SipEmulator";
//one second of audio data in bytes //one second of audio data in bytes
static final int BUFFER_SIZE = 22050; private static final int BUFFER_SIZE = 22050;
//this needs to get set to the amount the mic normally sends per data request //this needs to get set to the amount the mic normally sends per data request
//...cant be bigger than a maple packet //...cant be bigger than a maple packet
// 240 16 (or 14) bit samples // 240 16 (or 14) bit samples
static final int ONE_BLIP_SIZE = 480; //ALSO DEFINED IN maple_devs.h private static final int ONE_BLIP_SIZE = 480; //ALSO DEFINED IN maple_devs.h
private AudioRecord record; private AudioRecord record;
private ConcurrentLinkedQueue<byte[]> bytesReadBuffer; private ConcurrentLinkedQueue<byte[]> bytesReadBuffer;
@ -48,7 +48,7 @@ public class SipEmulator extends Thread {
AudioFormat.ENCODING_PCM_16BIT, AudioFormat.ENCODING_PCM_16BIT,
BUFFER_SIZE); BUFFER_SIZE);
bytesReadBuffer = new ConcurrentLinkedQueue<byte[]>(); bytesReadBuffer = new ConcurrentLinkedQueue<>();
continueRecording = false; continueRecording = false;
firstGet = true; firstGet = true;

View File

@ -16,20 +16,17 @@ public class VJoy {
public static final int key_CONT_Y = 0x0200; public static final int key_CONT_Y = 0x0200;
public static final int key_CONT_X = 0x0400; public static final int key_CONT_X = 0x0400;
public static final int LAYER_TYPE_SOFTWARE = 1;
public static final int LAYER_TYPE_HARDWARE = 2;
public static int VJoyCount = 13; public static int VJoyCount = 13;
public static float[][] baseVJoy() { public static float[][] baseVJoy() {
return new float[][] { return new float[][] {
new float[] { 24+0, 24+64, 64,64, VJoy.key_CONT_DPAD_LEFT, 0}, new float[] { 24, 24+64, 64,64, VJoy.key_CONT_DPAD_LEFT, 0},
new float[] { 24+64, 24+0, 64,64, VJoy.key_CONT_DPAD_UP, 0}, new float[] { 24+64, 24, 64,64, VJoy.key_CONT_DPAD_UP, 0},
new float[] { 24+128, 24+64, 64,64, VJoy.key_CONT_DPAD_RIGHT, 0}, new float[] { 24+128, 24+64, 64,64, VJoy.key_CONT_DPAD_RIGHT, 0},
new float[] { 24+64, 24+128, 64,64, VJoy.key_CONT_DPAD_DOWN, 0}, new float[] { 24+64, 24+128, 64,64, VJoy.key_CONT_DPAD_DOWN, 0},
new float[] { 440+0, 280+64, 64,64, VJoy.key_CONT_X, 0}, new float[] { 440, 280+64, 64,64, VJoy.key_CONT_X, 0},
new float[] { 440+64, 280+0, 64,64, VJoy.key_CONT_Y, 0}, new float[] { 440+64, 280, 64,64, VJoy.key_CONT_Y, 0},
new float[] { 440+128, 280+64, 64,64, VJoy.key_CONT_B, 0}, new float[] { 440+128, 280+64, 64,64, VJoy.key_CONT_B, 0},
new float[] { 440+64, 280+128,64,64, VJoy.key_CONT_A, 0}, new float[] { 440+64, 280+128,64,64, VJoy.key_CONT_A, 0},
@ -41,9 +38,9 @@ public class VJoy {
new float[] { 0, 128+224,128,128,-3, 0}, new float[] { 0, 128+224,128,128,-3, 0},
new float[] { 96, 320, 32,32, -4, 0}, new float[] { 96, 320, 32,32, -4, 0},
new float[] { 20+0 , 288+0 , 64,64, key_CONT_DPAD_LEFT|key_CONT_DPAD_UP, 0}, new float[] { 20, 288, 64,64, key_CONT_DPAD_LEFT|key_CONT_DPAD_UP, 0},
new float[] { 20+128, 288+0 , 64,64, key_CONT_DPAD_RIGHT|key_CONT_DPAD_UP, 0}, new float[] { 20+128, 288, 64,64, key_CONT_DPAD_RIGHT|key_CONT_DPAD_UP, 0},
new float[] { 20+0 , 288+128, 64,64, key_CONT_DPAD_LEFT|key_CONT_DPAD_DOWN, 0}, new float[] { 20, 288+128,64,64, key_CONT_DPAD_LEFT|key_CONT_DPAD_DOWN, 0},
new float[] { 20+128, 288+128,64,64, key_CONT_DPAD_RIGHT|key_CONT_DPAD_DOWN, 0}, new float[] { 20+128, 288+128,64,64, key_CONT_DPAD_RIGHT|key_CONT_DPAD_DOWN, 0},
}; };
} }
@ -81,28 +78,45 @@ public class VJoy {
public static float[][] getVjoy_d(float[][] vjoy_d_custom) { public static float[][] getVjoy_d(float[][] vjoy_d_custom) {
return new float[][] { return new float[][] {
new float[] { 20+0*vjoy_d_custom[0][2]+vjoy_d_custom[0][0], 288+64*vjoy_d_custom[0][2]+vjoy_d_custom[0][1], 64*vjoy_d_custom[0][2],64*vjoy_d_custom[0][2], key_CONT_DPAD_LEFT}, new float[] { 20*vjoy_d_custom[0][2]+vjoy_d_custom[0][0], 288+64*vjoy_d_custom[0][2]+vjoy_d_custom[0][1],
new float[] { 20+64*vjoy_d_custom[0][2]+vjoy_d_custom[0][0], 288+0*vjoy_d_custom[0][2]+vjoy_d_custom[0][1], 64*vjoy_d_custom[0][2],64*vjoy_d_custom[0][2], key_CONT_DPAD_UP}, 64*vjoy_d_custom[0][2],64*vjoy_d_custom[0][2], key_CONT_DPAD_LEFT},
new float[] { 20+128*vjoy_d_custom[0][2]+vjoy_d_custom[0][0], 288+64*vjoy_d_custom[0][2]+vjoy_d_custom[0][1], 64*vjoy_d_custom[0][2],64*vjoy_d_custom[0][2], key_CONT_DPAD_RIGHT}, new float[] { 20+64*vjoy_d_custom[0][2]+vjoy_d_custom[0][0], 288*vjoy_d_custom[0][2]+vjoy_d_custom[0][1],
new float[] { 20+64*vjoy_d_custom[0][2]+vjoy_d_custom[0][0], 288+128*vjoy_d_custom[0][2]+vjoy_d_custom[0][1], 64*vjoy_d_custom[0][2],64*vjoy_d_custom[0][2], key_CONT_DPAD_DOWN}, 64*vjoy_d_custom[0][2],64*vjoy_d_custom[0][2], key_CONT_DPAD_UP},
new float[] { 20+128*vjoy_d_custom[0][2]+vjoy_d_custom[0][0], 288+64*vjoy_d_custom[0][2]+vjoy_d_custom[0][1],
64*vjoy_d_custom[0][2],64*vjoy_d_custom[0][2], key_CONT_DPAD_RIGHT},
new float[] { 20+64*vjoy_d_custom[0][2]+vjoy_d_custom[0][0], 288+128*vjoy_d_custom[0][2]+vjoy_d_custom[0][1],
64*vjoy_d_custom[0][2],64*vjoy_d_custom[0][2], key_CONT_DPAD_DOWN},
new float[] { 448+0*vjoy_d_custom[1][2]+vjoy_d_custom[1][0], 288+64*vjoy_d_custom[1][2]+vjoy_d_custom[1][1], 64*vjoy_d_custom[1][2],64*vjoy_d_custom[1][2], key_CONT_X}, new float[] { 448*vjoy_d_custom[1][2]+vjoy_d_custom[1][0], 288+64*vjoy_d_custom[1][2]+vjoy_d_custom[1][1],
new float[] { 448+64*vjoy_d_custom[1][2]+vjoy_d_custom[1][0], 288+0*vjoy_d_custom[1][2]+vjoy_d_custom[1][1], 64*vjoy_d_custom[1][2],64*vjoy_d_custom[1][2], key_CONT_Y}, 64*vjoy_d_custom[1][2],64*vjoy_d_custom[1][2], key_CONT_X},
new float[] { 448+128*vjoy_d_custom[1][2]+vjoy_d_custom[1][0], 288+64*vjoy_d_custom[1][2]+vjoy_d_custom[1][1], 64*vjoy_d_custom[1][2],64*vjoy_d_custom[1][2], key_CONT_B}, new float[] { 448+64*vjoy_d_custom[1][2]+vjoy_d_custom[1][0], 288*vjoy_d_custom[1][2]+vjoy_d_custom[1][1],
new float[] { 448+64*vjoy_d_custom[1][2]+vjoy_d_custom[1][0], 288+128*vjoy_d_custom[1][2]+vjoy_d_custom[1][1], 64*vjoy_d_custom[1][2],64*vjoy_d_custom[1][2], key_CONT_A}, 64*vjoy_d_custom[1][2],64*vjoy_d_custom[1][2], key_CONT_Y},
new float[] { 448+128*vjoy_d_custom[1][2]+vjoy_d_custom[1][0], 288+64*vjoy_d_custom[1][2]+vjoy_d_custom[1][1],
64*vjoy_d_custom[1][2],64*vjoy_d_custom[1][2], key_CONT_B},
new float[] { 448+64*vjoy_d_custom[1][2]+vjoy_d_custom[1][0], 288+128*vjoy_d_custom[1][2]+vjoy_d_custom[1][1],
64*vjoy_d_custom[1][2],64*vjoy_d_custom[1][2], key_CONT_A},
new float[] { 320-32+vjoy_d_custom[2][0], 288+128+vjoy_d_custom[2][1], 64*vjoy_d_custom[2][2],64*vjoy_d_custom[2][2], key_CONT_START}, new float[] { 320-32+vjoy_d_custom[2][0], 288+128+vjoy_d_custom[2][1],
64*vjoy_d_custom[2][2],64*vjoy_d_custom[2][2], key_CONT_START},
new float[] { 440+vjoy_d_custom[3][0], 200+vjoy_d_custom[3][1], 90*vjoy_d_custom[3][2],64*vjoy_d_custom[3][2], -1}, new float[] { 440+vjoy_d_custom[3][0], 200+vjoy_d_custom[3][1],
new float[] { 542+vjoy_d_custom[4][0], 200+vjoy_d_custom[4][1], 90*vjoy_d_custom[4][2],64*vjoy_d_custom[4][2], -2}, 90*vjoy_d_custom[3][2],64*vjoy_d_custom[3][2], -1},
new float[] { 542+vjoy_d_custom[4][0], 200+vjoy_d_custom[4][1],
90*vjoy_d_custom[4][2],64*vjoy_d_custom[4][2], -2},
new float[] { 16+vjoy_d_custom[5][0], 24+32+vjoy_d_custom[5][1], 128*vjoy_d_custom[5][2],128*vjoy_d_custom[5][2], -3}, new float[] { 16+vjoy_d_custom[5][0], 24+32+vjoy_d_custom[5][1],
new float[] { 96+vjoy_d_custom[5][0], 320+vjoy_d_custom[5][1], 32*vjoy_d_custom[5][2],32*vjoy_d_custom[5][2], -4}, 128*vjoy_d_custom[5][2],128*vjoy_d_custom[5][2],-3},
new float[] { 96+vjoy_d_custom[5][0], 320+vjoy_d_custom[5][1],
32*vjoy_d_custom[5][2],32*vjoy_d_custom[5][2], -4},
new float[] { 20+0*vjoy_d_custom[0][2]+vjoy_d_custom[0][0], 288+0*vjoy_d_custom[0][2]+vjoy_d_custom[0][1], 64*vjoy_d_custom[0][2],64*vjoy_d_custom[0][2], key_CONT_DPAD_LEFT|key_CONT_DPAD_UP}, new float[] { 20*vjoy_d_custom[0][2]+vjoy_d_custom[0][0], 288*vjoy_d_custom[0][2]+vjoy_d_custom[0][1],
new float[] { 20+128*vjoy_d_custom[0][2]+vjoy_d_custom[0][0], 288+0*vjoy_d_custom[0][2]+vjoy_d_custom[0][1], 64*vjoy_d_custom[0][2],64*vjoy_d_custom[0][2], key_CONT_DPAD_RIGHT|key_CONT_DPAD_UP}, 64*vjoy_d_custom[0][2],64*vjoy_d_custom[0][2], key_CONT_DPAD_LEFT|key_CONT_DPAD_UP},
new float[] { 20+0*vjoy_d_custom[0][2]+vjoy_d_custom[0][0], 288+128*vjoy_d_custom[0][2]+vjoy_d_custom[0][1], 64*vjoy_d_custom[0][2],64*vjoy_d_custom[0][2], key_CONT_DPAD_LEFT|key_CONT_DPAD_DOWN}, new float[] { 20+128*vjoy_d_custom[0][2]+vjoy_d_custom[0][0], 288*vjoy_d_custom[0][2]+vjoy_d_custom[0][1],
new float[] { 20+128*vjoy_d_custom[0][2]+vjoy_d_custom[0][0], 288+128*vjoy_d_custom[0][2]+vjoy_d_custom[0][1], 64*vjoy_d_custom[0][2],64*vjoy_d_custom[0][2], key_CONT_DPAD_RIGHT|key_CONT_DPAD_DOWN}, 64*vjoy_d_custom[0][2],64*vjoy_d_custom[0][2], key_CONT_DPAD_RIGHT|key_CONT_DPAD_UP},
new float[] { 20*vjoy_d_custom[0][2]+vjoy_d_custom[0][0], 288+128*vjoy_d_custom[0][2]+vjoy_d_custom[0][1],
64*vjoy_d_custom[0][2],64*vjoy_d_custom[0][2], key_CONT_DPAD_LEFT|key_CONT_DPAD_DOWN},
new float[] { 20+128*vjoy_d_custom[0][2]+vjoy_d_custom[0][0], 288+128*vjoy_d_custom[0][2]+vjoy_d_custom[0][1],
64*vjoy_d_custom[0][2],64*vjoy_d_custom[0][2], key_CONT_DPAD_RIGHT|key_CONT_DPAD_DOWN},
}; };
} }