diff --git a/APK/R6S/V1.0.apk b/Apk/V1.0.apk similarity index 100% rename from APK/R6S/V1.0.apk rename to Apk/V1.0.apk diff --git a/APK/R6S/V1.1.apk b/Apk/V1.1.apk similarity index 100% rename from APK/R6S/V1.1.apk rename to Apk/V1.1.apk diff --git a/APK/R6S/V1.2.apk b/Apk/V1.2.apk similarity index 100% rename from APK/R6S/V1.2.apk rename to Apk/V1.2.apk diff --git a/APK/R6S/v1.3.apk b/Apk/v1.3.apk similarity index 100% rename from APK/R6S/v1.3.apk rename to Apk/v1.3.apk diff --git a/APK/R6S/v1.4.apk b/Apk/v1.4.apk similarity index 100% rename from APK/R6S/v1.4.apk rename to Apk/v1.4.apk diff --git a/R6S/.gitignore b/App/.gitignore similarity index 100% rename from R6S/.gitignore rename to App/.gitignore diff --git a/R6S/.idea/.name b/App/.idea/.name similarity index 100% rename from R6S/.idea/.name rename to App/.idea/.name diff --git a/R6S/.idea/compiler.xml b/App/.idea/compiler.xml similarity index 100% rename from R6S/.idea/compiler.xml rename to App/.idea/compiler.xml diff --git a/R6S/.idea/copyright/profiles_settings.xml b/App/.idea/copyright/profiles_settings.xml similarity index 100% rename from R6S/.idea/copyright/profiles_settings.xml rename to App/.idea/copyright/profiles_settings.xml diff --git a/R6S/.idea/encodings.xml b/App/.idea/encodings.xml similarity index 100% rename from R6S/.idea/encodings.xml rename to App/.idea/encodings.xml diff --git a/R6S/.idea/gradle.xml b/App/.idea/gradle.xml similarity index 100% rename from R6S/.idea/gradle.xml rename to App/.idea/gradle.xml diff --git a/R6S/.idea/misc.xml b/App/.idea/misc.xml similarity index 100% rename from R6S/.idea/misc.xml rename to App/.idea/misc.xml diff --git a/R6S/.idea/modules.xml b/App/.idea/modules.xml similarity index 100% rename from R6S/.idea/modules.xml rename to App/.idea/modules.xml diff --git a/R6S/.idea/runConfigurations.xml b/App/.idea/runConfigurations.xml similarity index 100% rename from R6S/.idea/runConfigurations.xml rename to App/.idea/runConfigurations.xml diff --git a/R6S/app/.gitignore b/App/app/.gitignore similarity index 100% rename from R6S/app/.gitignore rename to App/app/.gitignore diff --git a/App/app/build.gradle b/App/app/build.gradle new file mode 100644 index 0000000..579ec11 --- /dev/null +++ b/App/app/build.gradle @@ -0,0 +1,32 @@ +apply plugin: 'com.android.application' + +android { + compileSdkVersion 25 + buildToolsVersion "25.0.2" + defaultConfig { + applicationId "io.nicco.r6s" + minSdkVersion 21 + targetSdkVersion 25 + versionCode 20 + versionName "2.0" + testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" + } + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + } + } +} + +dependencies { + compile fileTree(dir: 'libs', include: ['*.jar']) + androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { + exclude group: 'com.android.support', module: 'support-annotations' + }) + compile 'com.android.support:appcompat-v7:25.3.1' + compile 'com.android.support.constraint:constraint-layout:1.0.2' + compile 'com.android.support:design:25.3.1' + compile 'com.android.support:support-v4:25.3.1' + testCompile 'org.testng:testng:6.9.6' +} diff --git a/R6S/app/proguard-rules.pro b/App/app/proguard-rules.pro similarity index 64% rename from R6S/app/proguard-rules.pro rename to App/app/proguard-rules.pro index 1947bf8..7a54795 100644 --- a/R6S/app/proguard-rules.pro +++ b/App/app/proguard-rules.pro @@ -1,6 +1,6 @@ # Add project specific ProGuard rules here. # By default, the flags in this file are appended to flags specified -# in /Users/Nicco/Library/Android/sdk/tools/proguard/proguard-android.txt +# in /Users/nicco/Library/Android/sdk/tools/proguard/proguard-android.txt # You can edit the include path and order by changing the proguardFiles # directive in build.gradle. # @@ -15,3 +15,11 @@ #-keepclassmembers class fqcn.of.javascript.interface.for.webview { # public *; #} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile diff --git a/App/app/src/androidTest/java/io/nicco/r6s/ExampleInstrumentedTest.java b/App/app/src/androidTest/java/io/nicco/r6s/ExampleInstrumentedTest.java new file mode 100644 index 0000000..87de8f7 --- /dev/null +++ b/App/app/src/androidTest/java/io/nicco/r6s/ExampleInstrumentedTest.java @@ -0,0 +1,26 @@ +package io.nicco.r6s; + +import android.content.Context; +import android.support.test.InstrumentationRegistry; +import android.support.test.runner.AndroidJUnit4; + +import org.junit.Test; +import org.junit.runner.RunWith; + +import static org.junit.Assert.assertEquals; + +/** + * Instrumentation test, which will execute on an Android device. + * + * @see Testing documentation + */ +@RunWith(AndroidJUnit4.class) +public class ExampleInstrumentedTest { + @Test + public void useAppContext() throws Exception { + // Context of the app under test. + Context appContext = InstrumentationRegistry.getTargetContext(); + + assertEquals("io.nicco.test", appContext.getPackageName()); + } +} diff --git a/R6S/app/src/main/AndroidManifest.xml b/App/app/src/main/AndroidManifest.xml similarity index 69% rename from R6S/app/src/main/AndroidManifest.xml rename to App/app/src/main/AndroidManifest.xml index 8d4f5c9..10fb484 100644 --- a/R6S/app/src/main/AndroidManifest.xml +++ b/App/app/src/main/AndroidManifest.xml @@ -1,4 +1,4 @@ - + @@ -6,12 +6,10 @@ android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" + android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" - android:theme="@style/AppTheme"> - + android:theme="@style/Theme.AppCompat.NoActionBar"> + diff --git a/App/app/src/main/assets/img/factions/0.png b/App/app/src/main/assets/img/factions/0.png new file mode 100644 index 0000000..416685e Binary files /dev/null and b/App/app/src/main/assets/img/factions/0.png differ diff --git a/App/app/src/main/assets/img/factions/1.png b/App/app/src/main/assets/img/factions/1.png new file mode 100644 index 0000000..7e6cff1 Binary files /dev/null and b/App/app/src/main/assets/img/factions/1.png differ diff --git a/App/app/src/main/assets/img/factions/2.png b/App/app/src/main/assets/img/factions/2.png new file mode 100644 index 0000000..3036dba Binary files /dev/null and b/App/app/src/main/assets/img/factions/2.png differ diff --git a/App/app/src/main/assets/img/factions/3.png b/App/app/src/main/assets/img/factions/3.png new file mode 100644 index 0000000..e0c4d44 Binary files /dev/null and b/App/app/src/main/assets/img/factions/3.png differ diff --git a/App/app/src/main/assets/img/factions/4.png b/App/app/src/main/assets/img/factions/4.png new file mode 100644 index 0000000..73cff93 Binary files /dev/null and b/App/app/src/main/assets/img/factions/4.png differ diff --git a/App/app/src/main/assets/img/factions/5.png b/App/app/src/main/assets/img/factions/5.png new file mode 100644 index 0000000..b30c0d4 Binary files /dev/null and b/App/app/src/main/assets/img/factions/5.png differ diff --git a/App/app/src/main/assets/img/factions/6.png b/App/app/src/main/assets/img/factions/6.png new file mode 100644 index 0000000..84247e7 Binary files /dev/null and b/App/app/src/main/assets/img/factions/6.png differ diff --git a/App/app/src/main/assets/img/factions/7.png b/App/app/src/main/assets/img/factions/7.png new file mode 100644 index 0000000..b7bf200 Binary files /dev/null and b/App/app/src/main/assets/img/factions/7.png differ diff --git a/App/app/src/main/assets/img/factions/8.png b/App/app/src/main/assets/img/factions/8.png new file mode 100644 index 0000000..cb40553 Binary files /dev/null and b/App/app/src/main/assets/img/factions/8.png differ diff --git a/App/app/src/main/assets/img/factions/9.png b/App/app/src/main/assets/img/factions/9.png new file mode 100644 index 0000000..d536056 Binary files /dev/null and b/App/app/src/main/assets/img/factions/9.png differ diff --git a/App/app/src/main/assets/img/maps/0/0.jpg b/App/app/src/main/assets/img/maps/0/0.jpg new file mode 100644 index 0000000..87dbac7 Binary files /dev/null and b/App/app/src/main/assets/img/maps/0/0.jpg differ diff --git a/App/app/src/main/assets/img/maps/0/1.jpg b/App/app/src/main/assets/img/maps/0/1.jpg new file mode 100644 index 0000000..feff31f Binary files /dev/null and b/App/app/src/main/assets/img/maps/0/1.jpg differ diff --git a/App/app/src/main/assets/img/maps/0/2.jpg b/App/app/src/main/assets/img/maps/0/2.jpg new file mode 100644 index 0000000..40c65f7 Binary files /dev/null and b/App/app/src/main/assets/img/maps/0/2.jpg differ diff --git a/App/app/src/main/assets/img/maps/0/3.jpg b/App/app/src/main/assets/img/maps/0/3.jpg new file mode 100644 index 0000000..e1333dc Binary files /dev/null and b/App/app/src/main/assets/img/maps/0/3.jpg differ diff --git a/App/app/src/main/assets/img/maps/1/0.jpg b/App/app/src/main/assets/img/maps/1/0.jpg new file mode 100644 index 0000000..13c05e6 Binary files /dev/null and b/App/app/src/main/assets/img/maps/1/0.jpg differ diff --git a/App/app/src/main/assets/img/maps/1/1.jpg b/App/app/src/main/assets/img/maps/1/1.jpg new file mode 100644 index 0000000..7bbcbba Binary files /dev/null and b/App/app/src/main/assets/img/maps/1/1.jpg differ diff --git a/App/app/src/main/assets/img/maps/1/2.jpg b/App/app/src/main/assets/img/maps/1/2.jpg new file mode 100644 index 0000000..c8b6027 Binary files /dev/null and b/App/app/src/main/assets/img/maps/1/2.jpg differ diff --git a/App/app/src/main/assets/img/maps/10/0.jpg b/App/app/src/main/assets/img/maps/10/0.jpg new file mode 100644 index 0000000..f77cd8b Binary files /dev/null and b/App/app/src/main/assets/img/maps/10/0.jpg differ diff --git a/App/app/src/main/assets/img/maps/10/1.jpg b/App/app/src/main/assets/img/maps/10/1.jpg new file mode 100644 index 0000000..03666a4 Binary files /dev/null and b/App/app/src/main/assets/img/maps/10/1.jpg differ diff --git a/App/app/src/main/assets/img/maps/10/2.jpg b/App/app/src/main/assets/img/maps/10/2.jpg new file mode 100644 index 0000000..f85c454 Binary files /dev/null and b/App/app/src/main/assets/img/maps/10/2.jpg differ diff --git a/App/app/src/main/assets/img/maps/10/3.jpg b/App/app/src/main/assets/img/maps/10/3.jpg new file mode 100644 index 0000000..3e6a424 Binary files /dev/null and b/App/app/src/main/assets/img/maps/10/3.jpg differ diff --git a/App/app/src/main/assets/img/maps/11/0.jpg b/App/app/src/main/assets/img/maps/11/0.jpg new file mode 100644 index 0000000..ba8ac07 Binary files /dev/null and b/App/app/src/main/assets/img/maps/11/0.jpg differ diff --git a/App/app/src/main/assets/img/maps/11/1.jpg b/App/app/src/main/assets/img/maps/11/1.jpg new file mode 100644 index 0000000..21424ac Binary files /dev/null and b/App/app/src/main/assets/img/maps/11/1.jpg differ diff --git a/App/app/src/main/assets/img/maps/11/2.jpg b/App/app/src/main/assets/img/maps/11/2.jpg new file mode 100644 index 0000000..a3441ce Binary files /dev/null and b/App/app/src/main/assets/img/maps/11/2.jpg differ diff --git a/App/app/src/main/assets/img/maps/11/3.jpg b/App/app/src/main/assets/img/maps/11/3.jpg new file mode 100644 index 0000000..83b65a6 Binary files /dev/null and b/App/app/src/main/assets/img/maps/11/3.jpg differ diff --git a/App/app/src/main/assets/img/maps/12/0.jpg b/App/app/src/main/assets/img/maps/12/0.jpg new file mode 100644 index 0000000..ab30ac2 Binary files /dev/null and b/App/app/src/main/assets/img/maps/12/0.jpg differ diff --git a/App/app/src/main/assets/img/maps/12/1.jpg b/App/app/src/main/assets/img/maps/12/1.jpg new file mode 100644 index 0000000..ea52f18 Binary files /dev/null and b/App/app/src/main/assets/img/maps/12/1.jpg differ diff --git a/App/app/src/main/assets/img/maps/12/2.jpg b/App/app/src/main/assets/img/maps/12/2.jpg new file mode 100644 index 0000000..ee03f18 Binary files /dev/null and b/App/app/src/main/assets/img/maps/12/2.jpg differ diff --git a/App/app/src/main/assets/img/maps/12/3.jpg b/App/app/src/main/assets/img/maps/12/3.jpg new file mode 100644 index 0000000..b717cd8 Binary files /dev/null and b/App/app/src/main/assets/img/maps/12/3.jpg differ diff --git a/App/app/src/main/assets/img/maps/13/0.jpg b/App/app/src/main/assets/img/maps/13/0.jpg new file mode 100644 index 0000000..8519a56 Binary files /dev/null and b/App/app/src/main/assets/img/maps/13/0.jpg differ diff --git a/App/app/src/main/assets/img/maps/13/1.jpg b/App/app/src/main/assets/img/maps/13/1.jpg new file mode 100644 index 0000000..8fb736e Binary files /dev/null and b/App/app/src/main/assets/img/maps/13/1.jpg differ diff --git a/App/app/src/main/assets/img/maps/13/2.jpg b/App/app/src/main/assets/img/maps/13/2.jpg new file mode 100644 index 0000000..fecc490 Binary files /dev/null and b/App/app/src/main/assets/img/maps/13/2.jpg differ diff --git a/App/app/src/main/assets/img/maps/13/3.jpg b/App/app/src/main/assets/img/maps/13/3.jpg new file mode 100644 index 0000000..6d84cfd Binary files /dev/null and b/App/app/src/main/assets/img/maps/13/3.jpg differ diff --git a/App/app/src/main/assets/img/maps/13/4.jpg b/App/app/src/main/assets/img/maps/13/4.jpg new file mode 100644 index 0000000..aa4beef Binary files /dev/null and b/App/app/src/main/assets/img/maps/13/4.jpg differ diff --git a/App/app/src/main/assets/img/maps/2/0.jpg b/App/app/src/main/assets/img/maps/2/0.jpg new file mode 100644 index 0000000..848af55 Binary files /dev/null and b/App/app/src/main/assets/img/maps/2/0.jpg differ diff --git a/App/app/src/main/assets/img/maps/2/1.jpg b/App/app/src/main/assets/img/maps/2/1.jpg new file mode 100644 index 0000000..74c0e4f Binary files /dev/null and b/App/app/src/main/assets/img/maps/2/1.jpg differ diff --git a/App/app/src/main/assets/img/maps/2/2.jpg b/App/app/src/main/assets/img/maps/2/2.jpg new file mode 100644 index 0000000..cd15cdd Binary files /dev/null and b/App/app/src/main/assets/img/maps/2/2.jpg differ diff --git a/App/app/src/main/assets/img/maps/2/3.jpg b/App/app/src/main/assets/img/maps/2/3.jpg new file mode 100644 index 0000000..174be71 Binary files /dev/null and b/App/app/src/main/assets/img/maps/2/3.jpg differ diff --git a/App/app/src/main/assets/img/maps/3/0.jpg b/App/app/src/main/assets/img/maps/3/0.jpg new file mode 100644 index 0000000..2d9161a Binary files /dev/null and b/App/app/src/main/assets/img/maps/3/0.jpg differ diff --git a/App/app/src/main/assets/img/maps/3/1.jpg b/App/app/src/main/assets/img/maps/3/1.jpg new file mode 100644 index 0000000..5f09afa Binary files /dev/null and b/App/app/src/main/assets/img/maps/3/1.jpg differ diff --git a/App/app/src/main/assets/img/maps/3/2.jpg b/App/app/src/main/assets/img/maps/3/2.jpg new file mode 100644 index 0000000..ff8d7a1 Binary files /dev/null and b/App/app/src/main/assets/img/maps/3/2.jpg differ diff --git a/App/app/src/main/assets/img/maps/3/3.jpg b/App/app/src/main/assets/img/maps/3/3.jpg new file mode 100644 index 0000000..434b99b Binary files /dev/null and b/App/app/src/main/assets/img/maps/3/3.jpg differ diff --git a/App/app/src/main/assets/img/maps/4/0.jpg b/App/app/src/main/assets/img/maps/4/0.jpg new file mode 100644 index 0000000..95976c2 Binary files /dev/null and b/App/app/src/main/assets/img/maps/4/0.jpg differ diff --git a/App/app/src/main/assets/img/maps/4/1.jpg b/App/app/src/main/assets/img/maps/4/1.jpg new file mode 100644 index 0000000..ec2cbbe Binary files /dev/null and b/App/app/src/main/assets/img/maps/4/1.jpg differ diff --git a/App/app/src/main/assets/img/maps/4/2.jpg b/App/app/src/main/assets/img/maps/4/2.jpg new file mode 100644 index 0000000..6eada59 Binary files /dev/null and b/App/app/src/main/assets/img/maps/4/2.jpg differ diff --git a/App/app/src/main/assets/img/maps/4/3.jpg b/App/app/src/main/assets/img/maps/4/3.jpg new file mode 100644 index 0000000..94a3315 Binary files /dev/null and b/App/app/src/main/assets/img/maps/4/3.jpg differ diff --git a/App/app/src/main/assets/img/maps/5/0.jpg b/App/app/src/main/assets/img/maps/5/0.jpg new file mode 100644 index 0000000..77f3083 Binary files /dev/null and b/App/app/src/main/assets/img/maps/5/0.jpg differ diff --git a/App/app/src/main/assets/img/maps/5/1.jpg b/App/app/src/main/assets/img/maps/5/1.jpg new file mode 100644 index 0000000..026e215 Binary files /dev/null and b/App/app/src/main/assets/img/maps/5/1.jpg differ diff --git a/App/app/src/main/assets/img/maps/5/2.jpg b/App/app/src/main/assets/img/maps/5/2.jpg new file mode 100644 index 0000000..b8d6044 Binary files /dev/null and b/App/app/src/main/assets/img/maps/5/2.jpg differ diff --git a/App/app/src/main/assets/img/maps/5/3.jpg b/App/app/src/main/assets/img/maps/5/3.jpg new file mode 100644 index 0000000..5dfb08c Binary files /dev/null and b/App/app/src/main/assets/img/maps/5/3.jpg differ diff --git a/App/app/src/main/assets/img/maps/6/0.jpg b/App/app/src/main/assets/img/maps/6/0.jpg new file mode 100644 index 0000000..7a9ecb0 Binary files /dev/null and b/App/app/src/main/assets/img/maps/6/0.jpg differ diff --git a/App/app/src/main/assets/img/maps/6/1.jpg b/App/app/src/main/assets/img/maps/6/1.jpg new file mode 100644 index 0000000..7c5a6f9 Binary files /dev/null and b/App/app/src/main/assets/img/maps/6/1.jpg differ diff --git a/App/app/src/main/assets/img/maps/6/2.jpg b/App/app/src/main/assets/img/maps/6/2.jpg new file mode 100644 index 0000000..815e3a4 Binary files /dev/null and b/App/app/src/main/assets/img/maps/6/2.jpg differ diff --git a/App/app/src/main/assets/img/maps/6/3.jpg b/App/app/src/main/assets/img/maps/6/3.jpg new file mode 100644 index 0000000..b3910b5 Binary files /dev/null and b/App/app/src/main/assets/img/maps/6/3.jpg differ diff --git a/App/app/src/main/assets/img/maps/6/4.jpg b/App/app/src/main/assets/img/maps/6/4.jpg new file mode 100644 index 0000000..5db67fc Binary files /dev/null and b/App/app/src/main/assets/img/maps/6/4.jpg differ diff --git a/App/app/src/main/assets/img/maps/7/0.jpg b/App/app/src/main/assets/img/maps/7/0.jpg new file mode 100644 index 0000000..9e4d137 Binary files /dev/null and b/App/app/src/main/assets/img/maps/7/0.jpg differ diff --git a/App/app/src/main/assets/img/maps/7/1.jpg b/App/app/src/main/assets/img/maps/7/1.jpg new file mode 100644 index 0000000..e8075ff Binary files /dev/null and b/App/app/src/main/assets/img/maps/7/1.jpg differ diff --git a/App/app/src/main/assets/img/maps/7/2.jpg b/App/app/src/main/assets/img/maps/7/2.jpg new file mode 100644 index 0000000..fbf1bd7 Binary files /dev/null and b/App/app/src/main/assets/img/maps/7/2.jpg differ diff --git a/App/app/src/main/assets/img/maps/7/3.jpg b/App/app/src/main/assets/img/maps/7/3.jpg new file mode 100644 index 0000000..86154c7 Binary files /dev/null and b/App/app/src/main/assets/img/maps/7/3.jpg differ diff --git a/App/app/src/main/assets/img/maps/8/0.jpg b/App/app/src/main/assets/img/maps/8/0.jpg new file mode 100644 index 0000000..8c9aa8f Binary files /dev/null and b/App/app/src/main/assets/img/maps/8/0.jpg differ diff --git a/App/app/src/main/assets/img/maps/8/1.jpg b/App/app/src/main/assets/img/maps/8/1.jpg new file mode 100644 index 0000000..67a8937 Binary files /dev/null and b/App/app/src/main/assets/img/maps/8/1.jpg differ diff --git a/App/app/src/main/assets/img/maps/8/2.jpg b/App/app/src/main/assets/img/maps/8/2.jpg new file mode 100644 index 0000000..55ea476 Binary files /dev/null and b/App/app/src/main/assets/img/maps/8/2.jpg differ diff --git a/App/app/src/main/assets/img/maps/8/3.jpg b/App/app/src/main/assets/img/maps/8/3.jpg new file mode 100644 index 0000000..c889e66 Binary files /dev/null and b/App/app/src/main/assets/img/maps/8/3.jpg differ diff --git a/App/app/src/main/assets/img/maps/9/0.jpg b/App/app/src/main/assets/img/maps/9/0.jpg new file mode 100644 index 0000000..c94576f Binary files /dev/null and b/App/app/src/main/assets/img/maps/9/0.jpg differ diff --git a/App/app/src/main/assets/img/maps/9/1.jpg b/App/app/src/main/assets/img/maps/9/1.jpg new file mode 100644 index 0000000..9abe89e Binary files /dev/null and b/App/app/src/main/assets/img/maps/9/1.jpg differ diff --git a/App/app/src/main/assets/img/maps/9/2.jpg b/App/app/src/main/assets/img/maps/9/2.jpg new file mode 100644 index 0000000..86bc390 Binary files /dev/null and b/App/app/src/main/assets/img/maps/9/2.jpg differ diff --git a/App/app/src/main/assets/img/maps/9/3.jpg b/App/app/src/main/assets/img/maps/9/3.jpg new file mode 100644 index 0000000..868e367 Binary files /dev/null and b/App/app/src/main/assets/img/maps/9/3.jpg differ diff --git a/App/app/src/main/assets/img/no_img.png b/App/app/src/main/assets/img/no_img.png new file mode 100644 index 0000000..a9a7811 Binary files /dev/null and b/App/app/src/main/assets/img/no_img.png differ diff --git a/R6S/app/src/main/assets/OPs/0.jpg b/App/app/src/main/assets/img/ops/full/0.jpg similarity index 100% rename from R6S/app/src/main/assets/OPs/0.jpg rename to App/app/src/main/assets/img/ops/full/0.jpg diff --git a/R6S/app/src/main/assets/OPs/1.jpg b/App/app/src/main/assets/img/ops/full/1.jpg similarity index 100% rename from R6S/app/src/main/assets/OPs/1.jpg rename to App/app/src/main/assets/img/ops/full/1.jpg diff --git a/R6S/app/src/main/assets/OPs/10.jpg b/App/app/src/main/assets/img/ops/full/10.jpg similarity index 100% rename from R6S/app/src/main/assets/OPs/10.jpg rename to App/app/src/main/assets/img/ops/full/10.jpg diff --git a/R6S/app/src/main/assets/OPs/11.jpg b/App/app/src/main/assets/img/ops/full/11.jpg similarity index 100% rename from R6S/app/src/main/assets/OPs/11.jpg rename to App/app/src/main/assets/img/ops/full/11.jpg diff --git a/R6S/app/src/main/assets/OPs/12.jpg b/App/app/src/main/assets/img/ops/full/12.jpg similarity index 100% rename from R6S/app/src/main/assets/OPs/12.jpg rename to App/app/src/main/assets/img/ops/full/12.jpg diff --git a/R6S/app/src/main/assets/OPs/13.jpg b/App/app/src/main/assets/img/ops/full/13.jpg similarity index 100% rename from R6S/app/src/main/assets/OPs/13.jpg rename to App/app/src/main/assets/img/ops/full/13.jpg diff --git a/R6S/app/src/main/assets/OPs/14.jpg b/App/app/src/main/assets/img/ops/full/14.jpg similarity index 100% rename from R6S/app/src/main/assets/OPs/14.jpg rename to App/app/src/main/assets/img/ops/full/14.jpg diff --git a/R6S/app/src/main/assets/OPs/15.jpg b/App/app/src/main/assets/img/ops/full/15.jpg similarity index 100% rename from R6S/app/src/main/assets/OPs/15.jpg rename to App/app/src/main/assets/img/ops/full/15.jpg diff --git a/R6S/app/src/main/assets/OPs/16.jpg b/App/app/src/main/assets/img/ops/full/16.jpg similarity index 100% rename from R6S/app/src/main/assets/OPs/16.jpg rename to App/app/src/main/assets/img/ops/full/16.jpg diff --git a/R6S/app/src/main/assets/OPs/17.jpg b/App/app/src/main/assets/img/ops/full/17.jpg similarity index 100% rename from R6S/app/src/main/assets/OPs/17.jpg rename to App/app/src/main/assets/img/ops/full/17.jpg diff --git a/R6S/app/src/main/assets/OPs/18.jpg b/App/app/src/main/assets/img/ops/full/18.jpg similarity index 100% rename from R6S/app/src/main/assets/OPs/18.jpg rename to App/app/src/main/assets/img/ops/full/18.jpg diff --git a/R6S/app/src/main/assets/OPs/19.jpg b/App/app/src/main/assets/img/ops/full/19.jpg similarity index 100% rename from R6S/app/src/main/assets/OPs/19.jpg rename to App/app/src/main/assets/img/ops/full/19.jpg diff --git a/R6S/app/src/main/assets/OPs/2.jpg b/App/app/src/main/assets/img/ops/full/2.jpg similarity index 100% rename from R6S/app/src/main/assets/OPs/2.jpg rename to App/app/src/main/assets/img/ops/full/2.jpg diff --git a/R6S/app/src/main/assets/OPs/20.jpg b/App/app/src/main/assets/img/ops/full/20.jpg similarity index 100% rename from R6S/app/src/main/assets/OPs/20.jpg rename to App/app/src/main/assets/img/ops/full/20.jpg diff --git a/R6S/app/src/main/assets/OPs/21.jpg b/App/app/src/main/assets/img/ops/full/21.jpg similarity index 100% rename from R6S/app/src/main/assets/OPs/21.jpg rename to App/app/src/main/assets/img/ops/full/21.jpg diff --git a/R6S/app/src/main/assets/OPs/22.jpg b/App/app/src/main/assets/img/ops/full/22.jpg similarity index 100% rename from R6S/app/src/main/assets/OPs/22.jpg rename to App/app/src/main/assets/img/ops/full/22.jpg diff --git a/R6S/app/src/main/assets/OPs/23.jpg b/App/app/src/main/assets/img/ops/full/23.jpg similarity index 100% rename from R6S/app/src/main/assets/OPs/23.jpg rename to App/app/src/main/assets/img/ops/full/23.jpg diff --git a/R6S/app/src/main/assets/OPs/24.jpg b/App/app/src/main/assets/img/ops/full/24.jpg similarity index 100% rename from R6S/app/src/main/assets/OPs/24.jpg rename to App/app/src/main/assets/img/ops/full/24.jpg diff --git a/App/app/src/main/assets/img/ops/full/25.jpg b/App/app/src/main/assets/img/ops/full/25.jpg new file mode 100644 index 0000000..0093d45 Binary files /dev/null and b/App/app/src/main/assets/img/ops/full/25.jpg differ diff --git a/App/app/src/main/assets/img/ops/full/26.jpg b/App/app/src/main/assets/img/ops/full/26.jpg new file mode 100644 index 0000000..0cc8472 Binary files /dev/null and b/App/app/src/main/assets/img/ops/full/26.jpg differ diff --git a/App/app/src/main/assets/img/ops/full/27.jpg b/App/app/src/main/assets/img/ops/full/27.jpg new file mode 100644 index 0000000..172e311 Binary files /dev/null and b/App/app/src/main/assets/img/ops/full/27.jpg differ diff --git a/App/app/src/main/assets/img/ops/full/28.jpg b/App/app/src/main/assets/img/ops/full/28.jpg new file mode 100644 index 0000000..ce9076e Binary files /dev/null and b/App/app/src/main/assets/img/ops/full/28.jpg differ diff --git a/App/app/src/main/assets/img/ops/full/29.jpg b/App/app/src/main/assets/img/ops/full/29.jpg new file mode 100644 index 0000000..4ab8e94 Binary files /dev/null and b/App/app/src/main/assets/img/ops/full/29.jpg differ diff --git a/R6S/app/src/main/assets/OPs/3.jpg b/App/app/src/main/assets/img/ops/full/3.jpg similarity index 100% rename from R6S/app/src/main/assets/OPs/3.jpg rename to App/app/src/main/assets/img/ops/full/3.jpg diff --git a/R6S/app/src/main/assets/OPs/4.jpg b/App/app/src/main/assets/img/ops/full/4.jpg similarity index 100% rename from R6S/app/src/main/assets/OPs/4.jpg rename to App/app/src/main/assets/img/ops/full/4.jpg diff --git a/R6S/app/src/main/assets/OPs/5.jpg b/App/app/src/main/assets/img/ops/full/5.jpg similarity index 100% rename from R6S/app/src/main/assets/OPs/5.jpg rename to App/app/src/main/assets/img/ops/full/5.jpg diff --git a/R6S/app/src/main/assets/OPs/6.jpg b/App/app/src/main/assets/img/ops/full/6.jpg similarity index 100% rename from R6S/app/src/main/assets/OPs/6.jpg rename to App/app/src/main/assets/img/ops/full/6.jpg diff --git a/R6S/app/src/main/assets/OPs/7.jpg b/App/app/src/main/assets/img/ops/full/7.jpg similarity index 100% rename from R6S/app/src/main/assets/OPs/7.jpg rename to App/app/src/main/assets/img/ops/full/7.jpg diff --git a/R6S/app/src/main/assets/OPs/8.jpg b/App/app/src/main/assets/img/ops/full/8.jpg similarity index 100% rename from R6S/app/src/main/assets/OPs/8.jpg rename to App/app/src/main/assets/img/ops/full/8.jpg diff --git a/R6S/app/src/main/assets/OPs/9.jpg b/App/app/src/main/assets/img/ops/full/9.jpg similarity index 100% rename from R6S/app/src/main/assets/OPs/9.jpg rename to App/app/src/main/assets/img/ops/full/9.jpg diff --git a/R6S/app/src/main/assets/Operators/Attacker/Recruit.png b/App/app/src/main/assets/img/ops/icon/-1.png similarity index 100% rename from R6S/app/src/main/assets/Operators/Attacker/Recruit.png rename to App/app/src/main/assets/img/ops/icon/-1.png diff --git a/App/app/src/main/assets/img/ops/icon/0.png b/App/app/src/main/assets/img/ops/icon/0.png new file mode 100644 index 0000000..18bcd20 Binary files /dev/null and b/App/app/src/main/assets/img/ops/icon/0.png differ diff --git a/App/app/src/main/assets/img/ops/icon/1.png b/App/app/src/main/assets/img/ops/icon/1.png new file mode 100644 index 0000000..f4dbcc7 Binary files /dev/null and b/App/app/src/main/assets/img/ops/icon/1.png differ diff --git a/App/app/src/main/assets/img/ops/icon/10.png b/App/app/src/main/assets/img/ops/icon/10.png new file mode 100644 index 0000000..729ba19 Binary files /dev/null and b/App/app/src/main/assets/img/ops/icon/10.png differ diff --git a/R6S/app/src/main/assets/Operators/Attacker/Blackbeard.png b/App/app/src/main/assets/img/ops/icon/11.png similarity index 100% rename from R6S/app/src/main/assets/Operators/Attacker/Blackbeard.png rename to App/app/src/main/assets/img/ops/icon/11.png diff --git a/R6S/app/src/main/assets/Operators/Attacker/Capitao.png b/App/app/src/main/assets/img/ops/icon/12.png similarity index 100% rename from R6S/app/src/main/assets/Operators/Attacker/Capitao.png rename to App/app/src/main/assets/img/ops/icon/12.png diff --git a/App/app/src/main/assets/img/ops/icon/13.png b/App/app/src/main/assets/img/ops/icon/13.png new file mode 100644 index 0000000..8e7ff0d Binary files /dev/null and b/App/app/src/main/assets/img/ops/icon/13.png differ diff --git a/App/app/src/main/assets/img/ops/icon/14.png b/App/app/src/main/assets/img/ops/icon/14.png new file mode 100644 index 0000000..9c258c4 Binary files /dev/null and b/App/app/src/main/assets/img/ops/icon/14.png differ diff --git a/App/app/src/main/assets/img/ops/icon/15.png b/App/app/src/main/assets/img/ops/icon/15.png new file mode 100644 index 0000000..dc919b9 Binary files /dev/null and b/App/app/src/main/assets/img/ops/icon/15.png differ diff --git a/App/app/src/main/assets/img/ops/icon/16.png b/App/app/src/main/assets/img/ops/icon/16.png new file mode 100644 index 0000000..2e16269 Binary files /dev/null and b/App/app/src/main/assets/img/ops/icon/16.png differ diff --git a/App/app/src/main/assets/img/ops/icon/17.png b/App/app/src/main/assets/img/ops/icon/17.png new file mode 100644 index 0000000..ea07fa4 Binary files /dev/null and b/App/app/src/main/assets/img/ops/icon/17.png differ diff --git a/App/app/src/main/assets/img/ops/icon/18.png b/App/app/src/main/assets/img/ops/icon/18.png new file mode 100644 index 0000000..832d6e6 Binary files /dev/null and b/App/app/src/main/assets/img/ops/icon/18.png differ diff --git a/App/app/src/main/assets/img/ops/icon/19.png b/App/app/src/main/assets/img/ops/icon/19.png new file mode 100644 index 0000000..8c32906 Binary files /dev/null and b/App/app/src/main/assets/img/ops/icon/19.png differ diff --git a/App/app/src/main/assets/img/ops/icon/2.png b/App/app/src/main/assets/img/ops/icon/2.png new file mode 100644 index 0000000..ea652d4 Binary files /dev/null and b/App/app/src/main/assets/img/ops/icon/2.png differ diff --git a/App/app/src/main/assets/img/ops/icon/20.png b/App/app/src/main/assets/img/ops/icon/20.png new file mode 100644 index 0000000..51bb316 Binary files /dev/null and b/App/app/src/main/assets/img/ops/icon/20.png differ diff --git a/App/app/src/main/assets/img/ops/icon/21.png b/App/app/src/main/assets/img/ops/icon/21.png new file mode 100644 index 0000000..07a0203 Binary files /dev/null and b/App/app/src/main/assets/img/ops/icon/21.png differ diff --git a/App/app/src/main/assets/img/ops/icon/22.png b/App/app/src/main/assets/img/ops/icon/22.png new file mode 100644 index 0000000..b79e47f Binary files /dev/null and b/App/app/src/main/assets/img/ops/icon/22.png differ diff --git a/App/app/src/main/assets/img/ops/icon/23.png b/App/app/src/main/assets/img/ops/icon/23.png new file mode 100644 index 0000000..1ac104f Binary files /dev/null and b/App/app/src/main/assets/img/ops/icon/23.png differ diff --git a/R6S/app/src/main/assets/Operators/Defender/Valkyrie.png b/App/app/src/main/assets/img/ops/icon/24.png similarity index 100% rename from R6S/app/src/main/assets/Operators/Defender/Valkyrie.png rename to App/app/src/main/assets/img/ops/icon/24.png diff --git a/R6S/app/src/main/assets/Operators/Defender/Caveira.png b/App/app/src/main/assets/img/ops/icon/25.png similarity index 100% rename from R6S/app/src/main/assets/Operators/Defender/Caveira.png rename to App/app/src/main/assets/img/ops/icon/25.png diff --git a/R6S/app/src/main/assets/Operators/Attacker/Hibana.png b/App/app/src/main/assets/img/ops/icon/26.png similarity index 100% rename from R6S/app/src/main/assets/Operators/Attacker/Hibana.png rename to App/app/src/main/assets/img/ops/icon/26.png diff --git a/R6S/app/src/main/assets/Operators/Defender/Echo.png b/App/app/src/main/assets/img/ops/icon/27.png similarity index 100% rename from R6S/app/src/main/assets/Operators/Defender/Echo.png rename to App/app/src/main/assets/img/ops/icon/27.png diff --git a/App/app/src/main/assets/img/ops/icon/28.png b/App/app/src/main/assets/img/ops/icon/28.png new file mode 100644 index 0000000..9d4fdd7 Binary files /dev/null and b/App/app/src/main/assets/img/ops/icon/28.png differ diff --git a/App/app/src/main/assets/img/ops/icon/29.png b/App/app/src/main/assets/img/ops/icon/29.png new file mode 100644 index 0000000..016c68e Binary files /dev/null and b/App/app/src/main/assets/img/ops/icon/29.png differ diff --git a/App/app/src/main/assets/img/ops/icon/3.png b/App/app/src/main/assets/img/ops/icon/3.png new file mode 100644 index 0000000..689cace Binary files /dev/null and b/App/app/src/main/assets/img/ops/icon/3.png differ diff --git a/App/app/src/main/assets/img/ops/icon/4.png b/App/app/src/main/assets/img/ops/icon/4.png new file mode 100644 index 0000000..4b02eea Binary files /dev/null and b/App/app/src/main/assets/img/ops/icon/4.png differ diff --git a/App/app/src/main/assets/img/ops/icon/5.png b/App/app/src/main/assets/img/ops/icon/5.png new file mode 100644 index 0000000..9e6f0cf Binary files /dev/null and b/App/app/src/main/assets/img/ops/icon/5.png differ diff --git a/App/app/src/main/assets/img/ops/icon/6.png b/App/app/src/main/assets/img/ops/icon/6.png new file mode 100644 index 0000000..05fd8eb Binary files /dev/null and b/App/app/src/main/assets/img/ops/icon/6.png differ diff --git a/App/app/src/main/assets/img/ops/icon/7.png b/App/app/src/main/assets/img/ops/icon/7.png new file mode 100644 index 0000000..ebb6351 Binary files /dev/null and b/App/app/src/main/assets/img/ops/icon/7.png differ diff --git a/App/app/src/main/assets/img/ops/icon/8.png b/App/app/src/main/assets/img/ops/icon/8.png new file mode 100644 index 0000000..b9f5501 Binary files /dev/null and b/App/app/src/main/assets/img/ops/icon/8.png differ diff --git a/App/app/src/main/assets/img/ops/icon/9.png b/App/app/src/main/assets/img/ops/icon/9.png new file mode 100644 index 0000000..6147849 Binary files /dev/null and b/App/app/src/main/assets/img/ops/icon/9.png differ diff --git a/R6S/app/src/main/assets/Weapons/0.png b/App/app/src/main/assets/img/weapons/0.png similarity index 100% rename from R6S/app/src/main/assets/Weapons/0.png rename to App/app/src/main/assets/img/weapons/0.png diff --git a/R6S/app/src/main/assets/Weapons/1.png b/App/app/src/main/assets/img/weapons/1.png similarity index 100% rename from R6S/app/src/main/assets/Weapons/1.png rename to App/app/src/main/assets/img/weapons/1.png diff --git a/R6S/app/src/main/assets/Weapons/10.png b/App/app/src/main/assets/img/weapons/10.png similarity index 100% rename from R6S/app/src/main/assets/Weapons/10.png rename to App/app/src/main/assets/img/weapons/10.png diff --git a/R6S/app/src/main/assets/Weapons/11.png b/App/app/src/main/assets/img/weapons/11.png similarity index 100% rename from R6S/app/src/main/assets/Weapons/11.png rename to App/app/src/main/assets/img/weapons/11.png diff --git a/R6S/app/src/main/assets/Weapons/12.png b/App/app/src/main/assets/img/weapons/12.png similarity index 100% rename from R6S/app/src/main/assets/Weapons/12.png rename to App/app/src/main/assets/img/weapons/12.png diff --git a/R6S/app/src/main/assets/Weapons/13.png b/App/app/src/main/assets/img/weapons/13.png similarity index 100% rename from R6S/app/src/main/assets/Weapons/13.png rename to App/app/src/main/assets/img/weapons/13.png diff --git a/R6S/app/src/main/assets/Weapons/14.png b/App/app/src/main/assets/img/weapons/14.png similarity index 100% rename from R6S/app/src/main/assets/Weapons/14.png rename to App/app/src/main/assets/img/weapons/14.png diff --git a/R6S/app/src/main/assets/Weapons/15.png b/App/app/src/main/assets/img/weapons/15.png similarity index 100% rename from R6S/app/src/main/assets/Weapons/15.png rename to App/app/src/main/assets/img/weapons/15.png diff --git a/R6S/app/src/main/assets/Weapons/16.png b/App/app/src/main/assets/img/weapons/16.png similarity index 100% rename from R6S/app/src/main/assets/Weapons/16.png rename to App/app/src/main/assets/img/weapons/16.png diff --git a/R6S/app/src/main/assets/Weapons/17.png b/App/app/src/main/assets/img/weapons/17.png similarity index 100% rename from R6S/app/src/main/assets/Weapons/17.png rename to App/app/src/main/assets/img/weapons/17.png diff --git a/R6S/app/src/main/assets/Weapons/18.png b/App/app/src/main/assets/img/weapons/18.png similarity index 100% rename from R6S/app/src/main/assets/Weapons/18.png rename to App/app/src/main/assets/img/weapons/18.png diff --git a/R6S/app/src/main/assets/Weapons/19.png b/App/app/src/main/assets/img/weapons/19.png similarity index 100% rename from R6S/app/src/main/assets/Weapons/19.png rename to App/app/src/main/assets/img/weapons/19.png diff --git a/R6S/app/src/main/assets/Weapons/2.png b/App/app/src/main/assets/img/weapons/2.png similarity index 100% rename from R6S/app/src/main/assets/Weapons/2.png rename to App/app/src/main/assets/img/weapons/2.png diff --git a/R6S/app/src/main/assets/Weapons/20.png b/App/app/src/main/assets/img/weapons/20.png similarity index 100% rename from R6S/app/src/main/assets/Weapons/20.png rename to App/app/src/main/assets/img/weapons/20.png diff --git a/R6S/app/src/main/assets/Weapons/21.png b/App/app/src/main/assets/img/weapons/21.png similarity index 100% rename from R6S/app/src/main/assets/Weapons/21.png rename to App/app/src/main/assets/img/weapons/21.png diff --git a/R6S/app/src/main/assets/Weapons/22.png b/App/app/src/main/assets/img/weapons/22.png similarity index 100% rename from R6S/app/src/main/assets/Weapons/22.png rename to App/app/src/main/assets/img/weapons/22.png diff --git a/R6S/app/src/main/assets/Weapons/23.png b/App/app/src/main/assets/img/weapons/23.png similarity index 100% rename from R6S/app/src/main/assets/Weapons/23.png rename to App/app/src/main/assets/img/weapons/23.png diff --git a/R6S/app/src/main/assets/Weapons/24.png b/App/app/src/main/assets/img/weapons/24.png similarity index 100% rename from R6S/app/src/main/assets/Weapons/24.png rename to App/app/src/main/assets/img/weapons/24.png diff --git a/R6S/app/src/main/assets/Weapons/25.png b/App/app/src/main/assets/img/weapons/25.png similarity index 100% rename from R6S/app/src/main/assets/Weapons/25.png rename to App/app/src/main/assets/img/weapons/25.png diff --git a/R6S/app/src/main/assets/Weapons/26.png b/App/app/src/main/assets/img/weapons/26.png similarity index 100% rename from R6S/app/src/main/assets/Weapons/26.png rename to App/app/src/main/assets/img/weapons/26.png diff --git a/R6S/app/src/main/assets/Weapons/27.png b/App/app/src/main/assets/img/weapons/27.png similarity index 100% rename from R6S/app/src/main/assets/Weapons/27.png rename to App/app/src/main/assets/img/weapons/27.png diff --git a/R6S/app/src/main/assets/Weapons/28.png b/App/app/src/main/assets/img/weapons/28.png similarity index 100% rename from R6S/app/src/main/assets/Weapons/28.png rename to App/app/src/main/assets/img/weapons/28.png diff --git a/R6S/app/src/main/assets/Weapons/29.png b/App/app/src/main/assets/img/weapons/29.png similarity index 100% rename from R6S/app/src/main/assets/Weapons/29.png rename to App/app/src/main/assets/img/weapons/29.png diff --git a/R6S/app/src/main/assets/Weapons/3.png b/App/app/src/main/assets/img/weapons/3.png similarity index 100% rename from R6S/app/src/main/assets/Weapons/3.png rename to App/app/src/main/assets/img/weapons/3.png diff --git a/R6S/app/src/main/assets/Weapons/30.png b/App/app/src/main/assets/img/weapons/30.png similarity index 100% rename from R6S/app/src/main/assets/Weapons/30.png rename to App/app/src/main/assets/img/weapons/30.png diff --git a/R6S/app/src/main/assets/Weapons/31.png b/App/app/src/main/assets/img/weapons/31.png similarity index 100% rename from R6S/app/src/main/assets/Weapons/31.png rename to App/app/src/main/assets/img/weapons/31.png diff --git a/R6S/app/src/main/assets/Weapons/32.png b/App/app/src/main/assets/img/weapons/32.png similarity index 100% rename from R6S/app/src/main/assets/Weapons/32.png rename to App/app/src/main/assets/img/weapons/32.png diff --git a/R6S/app/src/main/assets/Weapons/33.png b/App/app/src/main/assets/img/weapons/33.png similarity index 100% rename from R6S/app/src/main/assets/Weapons/33.png rename to App/app/src/main/assets/img/weapons/33.png diff --git a/R6S/app/src/main/assets/Weapons/34.png b/App/app/src/main/assets/img/weapons/34.png similarity index 100% rename from R6S/app/src/main/assets/Weapons/34.png rename to App/app/src/main/assets/img/weapons/34.png diff --git a/R6S/app/src/main/assets/Weapons/4.png b/App/app/src/main/assets/img/weapons/4.png similarity index 100% rename from R6S/app/src/main/assets/Weapons/4.png rename to App/app/src/main/assets/img/weapons/4.png diff --git a/R6S/app/src/main/assets/Weapons/5.png b/App/app/src/main/assets/img/weapons/5.png similarity index 100% rename from R6S/app/src/main/assets/Weapons/5.png rename to App/app/src/main/assets/img/weapons/5.png diff --git a/R6S/app/src/main/assets/Weapons/6.png b/App/app/src/main/assets/img/weapons/6.png similarity index 100% rename from R6S/app/src/main/assets/Weapons/6.png rename to App/app/src/main/assets/img/weapons/6.png diff --git a/R6S/app/src/main/assets/Weapons/7.png b/App/app/src/main/assets/img/weapons/7.png similarity index 100% rename from R6S/app/src/main/assets/Weapons/7.png rename to App/app/src/main/assets/img/weapons/7.png diff --git a/R6S/app/src/main/assets/Weapons/8.png b/App/app/src/main/assets/img/weapons/8.png similarity index 100% rename from R6S/app/src/main/assets/Weapons/8.png rename to App/app/src/main/assets/img/weapons/8.png diff --git a/R6S/app/src/main/assets/Weapons/9.png b/App/app/src/main/assets/img/weapons/9.png similarity index 100% rename from R6S/app/src/main/assets/Weapons/9.png rename to App/app/src/main/assets/img/weapons/9.png diff --git a/App/app/src/main/assets/r6s.json b/App/app/src/main/assets/r6s.json new file mode 100644 index 0000000..d5f364e --- /dev/null +++ b/App/app/src/main/assets/r6s.json @@ -0,0 +1,1571 @@ +{ + "_schema": { + "version": 0 + }, + "factions": { + "0": { + "name": "SAS", + "nation": "British", + "ops": [ + 0, + 1, + 13, + 14 + ] + }, + "1": { + "name": "FBI SWAT", + "nation": "USA", + "ops": [ + 2, + 4, + 15, + 16 + ] + }, + "2": { + "name": "GIGN", + "nation": "France", + "ops": [ + 3, + 5, + 17, + 18 + ] + }, + "3": { + "name": "Spetsnaz", + "nation": "Russia", + "ops": [ + 6, + 7, + 19, + 20 + ] + }, + "4": { + "name": "GSG9", + "nation": "Germany", + "ops": [ + 8, + 9, + 21, + 22 + ] + }, + "5": { + "name": "JTF2", + "nation": "Canada", + "ops": [ + 10, + 23 + ] + }, + "6": { + "name": "Navy SEALs", + "nation": "USA", + "ops": [ + 11, + 24 + ] + }, + "7": { + "name": "BOPE", + "nation": "Brazil", + "ops": [ + 12, + 25 + ] + }, + "8": { + "name": "SAT", + "nation": "Japan", + "ops": [ + 26, + 27 + ] + }, + "9": { + "name": "GEO", + "nation": "Spain", + "ops": [ + 28, + 29 + ] + } + }, + "gadgets": { + "0": { + "name": "Frag Granade" + }, + "1": { + "name": "Stun Granade" + }, + "2": { + "name": "Breaching Charge" + }, + "3": { + "name": "Deployable Shield" + }, + "4": { + "name": "Smoke Granade" + }, + "5": { + "name": "Nitro Cell" + }, + "6": { + "name": "Barbed Wire" + }, + "7": { + "name": "Impact Granade" + }, + "8": { + "name": "Claymore" + } + }, + "maps": { + "0": { + "name": "Bank" + }, + "1": { + "name": "Border" + }, + "2": { + "name": "Chalet" + }, + "3": { + "name": "Club House" + }, + "4": { + "name": "Consulate" + }, + "5": { + "name": "Favela" + }, + "6": { + "name": "Hereford Base" + }, + "7": { + "name": "House" + }, + "8": { + "name": "Kafe Dostoyevsky" + }, + "9": { + "name": "Kanal" + }, + "10": { + "name": "Oregon" + }, + "11": { + "name": "Presidantial Plane" + }, + "12": { + "name": "Skyscraper" + }, + "13": { + "name": "Yacht" + }, + "14": { + "name": "Resort" + } + }, + "operators_types": { + "0": "Attacker", + "1": "Defender", + "2": "Recruit" + }, + "operators": { + "0": { + "ability": "Tactical Breaching Hammer", + "armor": 2, + "faction": 0, + "gadget": [ + 0, + 1 + ], + "name": "Sledge", + "speed": 2, + "type": 0, + "wid": [ + 22, + 9, + 31, + 34 + ] + }, + "1": { + "ability": "EMP Granade", + "armor": 2, + "faction": 0, + "gadget": [ + 8, + 2 + ], + "name": "Thatcher", + "speed": 2, + "type": 0, + "wid": [ + 5, + 22, + 9, + 31 + ] + }, + "2": { + "ability": "M120 Breaching Round", + "armor": 1, + "faction": 1, + "gadget": [ + 2, + 4 + ], + "name": "Ash", + "speed": 3, + "type": 0, + "wid": [ + 8, + 10, + 29, + 26 + ] + }, + "3": { + "ability": "BC-3 Exo-Thermic Charge", + "armor": 2, + "faction": 1, + "gadget": [ + 4, + 8 + ], + "name": "Thermite", + "speed": 2, + "type": 0, + "wid": [ + 21, + 3, + 29, + 26 + ] + }, + "4": { + "ability": "RSD Shock Drone", + "armor": 2, + "faction": 2, + "gadget": [ + 2, + 8 + ], + "name": "Twitch", + "speed": 2, + "type": 0, + "wid": [ + 7, + 1, + 28, + 32 + ] + }, + "5": { + "ability": "Extendable Shield", + "armor": 3, + "faction": 2, + "gadget": [ + 1, + 4 + ], + "name": "Montagne", + "speed": 1, + "type": 0, + "wid": [ + 35, + 32, + 28 + ] + }, + "6": { + "ability": "HDS Flip Sight", + "armor": 2, + "faction": 3, + "gadget": [ + 4, + 8 + ], + "name": "Glaz", + "speed": 2, + "type": 0, + "wid": [ + 0, + 33, + 27 + ] + }, + "7": { + "ability": "APM-6 Cluster Charge", + "armor": 3, + "faction": 3, + "gadget": [ + 2, + 1 + ], + "name": "Fuze", + "speed": 1, + "type": 0, + "wid": [ + 35, + 18, + 27, + 33 + ] + }, + "8": { + "ability": "G52 Tactical Flash", + "armor": 3, + "faction": 4, + "gadget": [ + 4, + 2 + ], + "name": "Blitz", + "speed": 1, + "type": 0, + "wid": [ + 35, + 30 + ] + }, + "9": { + "ability": "Electronics Detector", + "armor": 1, + "faction": 4, + "gadget": [ + 2, + 1 + ], + "name": "IQ", + "speed": 3, + "type": 0, + "wid": [ + 6, + 2, + 19, + 30 + ] + }, + "10": { + "ability": "Skeleton Key", + "armor": 2, + "faction": 5, + "gadget": [ + 0, + 1 + ], + "name": "Buck", + "speed": 2, + "type": 0, + "wid": [ + 36, + 37, + 38 + ] + }, + "11": { + "ability": "Rifle Shield", + "armor": 2, + "faction": 6, + "gadget": [ + 2, + 1 + ], + "name": "Blackbeard", + "speed": 2, + "type": 0, + "wid": [ + 39, + 40, + 41 + ] + }, + "12": { + "ability": "Tactical Crossbow", + "armor": 1, + "faction": 7, + "gadget": [ + 0, + 1 + ], + "name": "Capitao", + "speed": 3, + "type": 0, + "wid": [ + 42, + 43, + 44 + ] + }, + "13": { + "ability": "Z8 Remote Gas Granade", + "armor": 2, + "faction": 0, + "gadget": [ + 7, + 6 + ], + "name": "Smoke", + "speed": 2, + "type": 1, + "wid": [ + 22, + 12, + 31, + 34 + ] + }, + "14": { + "ability": "GC90 Signal Disrupter", + "armor": 2, + "faction": 0, + "gadget": [ + 5, + 3 + ], + "name": "Mute", + "speed": 2, + "type": 1, + "wid": [ + 22, + 14, + 31 + ] + }, + "15": { + "ability": "Armor Panel", + "armor": 2, + "faction": 1, + "gadget": [ + 3, + 7 + ], + "name": "Castle", + "speed": 2, + "type": 1, + "wid": [ + 17, + 21, + 26, + 29 + ] + }, + "16": { + "ability": "HB-5 Cardiac Sensor", + "armor": 1, + "faction": 1, + "gadget": [ + 6, + 5 + ], + "name": "Pulse", + "speed": 3, + "type": 1, + "wid": [ + 21, + 17, + 29, + 26 + ] + }, + "17": { + "ability": "MPD-0 Stim Pistol", + "armor": 3, + "faction": 2, + "gadget": [ + 6, + 3 + ], + "name": "Doc", + "speed": 1, + "type": 1, + "wid": [ + 25, + 13, + 16, + 32, + 28 + ] + }, + "18": { + "ability": "R1N Armor Pack", + "armor": 3, + "faction": 2, + "gadget": [ + 3, + 7 + ], + "name": "Rook", + "speed": 1, + "type": 1, + "wid": [ + 16, + 13, + 25, + 28, + 32 + ] + }, + "19": { + "ability": "EDD MK II Entry Denial Device", + "armor": 3, + "faction": 3, + "gadget": [ + 6, + 5 + ], + "name": "Kapkan", + "speed": 1, + "type": 1, + "wid": [ + 11, + 24, + 33, + 27 + ] + }, + "20": { + "ability": "RP-46 Mounted LMG", + "armor": 3, + "faction": 3, + "gadget": [ + 6, + 3 + ], + "name": "Tachanka", + "speed": 1, + "type": 1, + "wid": [ + 24, + 11, + 27, + 33 + ] + }, + "21": { + "ability": "ADS-MKIV Active Defense", + "armor": 1, + "faction": 4, + "gadget": [ + 3, + 6 + ], + "name": "Jager", + "speed": 3, + "type": 1, + "wid": [ + 23, + 0, + 30 + ] + }, + "22": { + "ability": "CED-1 Shock Wire", + "armor": 1, + "faction": 4, + "gadget": [ + 6, + 5 + ], + "name": "Bandit", + "speed": 3, + "type": 1, + "wid": [ + 15, + 23, + 30 + ] + }, + "23": { + "ability": "MK2 LHT Welcome Mat", + "armor": 2, + "faction": 5, + "gadget": [ + 3, + 6 + ], + "name": "Frost", + "speed": 2, + "type": 1, + "wid": [ + 45, + 46, + 38 + ] + }, + "24": { + "ability": "Black Eye", + "armor": 2, + "faction": 6, + "gadget": [ + 3, + 5 + ], + "name": "Valkyrie", + "speed": 2, + "type": 1, + "wid": [ + 47, + 48, + 41 + ] + }, + "25": { + "ability": "Silent Step & Interrogation", + "armor": 1, + "faction": 7, + "gadget": [ + 7, + 6 + ], + "name": "Caveira", + "speed": 3, + "type": 1, + "wid": [ + 49, + 50, + 44 + ] + }, + "26": { + "ability": "X-KAIROS 40mm Launcher", + "armor": 1, + "faction": 8, + "gadget": [ + 1, + 8 + ], + "name": "Hibana", + "speed": 3, + "type": 0, + "wid": [ + 39, + 38, + 37, + 36 + ] + }, + "27": { + "ability": "YOKAI Drone", + "armor": 3, + "faction": 8, + "gadget": [ + 6, + 3 + ], + "name": "Echo", + "speed": 1, + "type": 1, + "wid": [ + 38, + 40, + 37, + 36 + ] + }, + "28": { + "ability": "Eyenox (3)", + "armor": 2, + "faction": 9, + "gadget": [ + 2, + 1 + ], + "name": "Jackal", + "speed": 2, + "type": 0, + "wid": [ + 56, + 57, + 58, + 60, + 61 + ] + }, + "29": { + "ability": "Black Mirror (2)", + "armor": 3, + "faction": 9, + "gadget": [ + 3, + 5 + ], + "name": "Mira", + "speed": 1, + "type": 1, + "wid": [ + 56, + 57, + 58, + 59 + ] + } + }, + "weapons_types": { + "0": "AR", + "1": "SMG", + "2": "LMG", + "3": "SR", + "4": "SG", + "5": "PS", + "6": "SH" + }, + "weapons": { + "0": { + "class": 0, + "dmg_n": 45, + "dmg_s": 38, + "mag": 30, + "mob": 41, + "name": "416-C Carbine", + "op": [ + 21 + ], + "slot": 0, + "rpm": 700 + }, + "1": { + "class": 0, + "dmg_n": 65, + "dmg_s": 55, + "mag": 10, + "mob": 38, + "name": 417, + "op": [ + 4 + ], + "slot": 0, + "rpm": 0 + }, + "2": { + "class": 0, + "dmg_n": 50, + "dmg_s": 42, + "mag": 30, + "mob": 40, + "name": "552-Commando", + "op": [ + 9 + ], + "slot": 0, + "rpm": 690 + }, + "3": { + "class": 0, + "dmg_n": 49, + "dmg_s": 42, + "mag": 30, + "mob": 40, + "name": "556xi", + "op": [ + 4 + ], + "slot": 0, + "rpm": 690 + }, + "4": { + "class": 0, + "dmg_n": 47, + "dmg_s": 40, + "mag": 30, + "mob": 40, + "name": "AK-12", + "op": [ + 7 + ], + "slot": 0, + "rpm": 850 + }, + "5": { + "class": 0, + "dmg_n": 45, + "dmg_s": 38, + "mag": 25, + "mob": 40, + "name": "K33", + "op": [ + 1 + ], + "slot": 0, + "rpm": 749 + }, + "6": { + "class": 0, + "dmg_n": 44, + "dmg_s": 37, + "mag": 30, + "mob": 40, + "name": "Aug-A2", + "op": [ + 9 + ], + "slot": 0, + "rpm": 770 + }, + "7": { + "class": 0, + "dmg_n": 42, + "dmg_s": 36, + "mag": 30, + "mob": 40, + "name": "F2", + "op": [ + 3 + ], + "slot": 0, + "rpm": 980 + }, + "8": { + "class": 0, + "dmg_n": 40, + "dmg_s": 34, + "mag": 30, + "mob": 41, + "name": "G36C", + "op": [ + 2 + ], + "slot": 0, + "rpm": 780 + }, + "9": { + "class": 0, + "dmg_n": 48, + "dmg_s": 41, + "mag": 30, + "mob": 40, + "name": "L85A2", + "op": [ + 0, + 1 + ], + "slot": 0, + "rpm": 670 + }, + "10": { + "class": 0, + "dmg_n": 44, + "dmg_s": 37, + "mag": 30, + "mob": 41, + "name": "R4-C", + "op": [ + 2 + ], + "slot": 0, + "rpm": 860 + }, + "11": { + "class": 1, + "dmg_n": 42, + "dmg_s": 36, + "mag": 30, + "mob": 45, + "name": "9x19VSN", + "op": [ + 19, + 20 + ], + "slot": 0, + "rpm": 750 + }, + "12": { + "class": 1, + "dmg_n": 35, + "dmg_s": 30, + "mag": 30, + "mob": 45, + "name": "FMG-9", + "op": [ + 13 + ], + "slot": 0, + "rpm": 800 + }, + "13": { + "class": 1, + "dmg_n": 40, + "dmg_s": 34, + "mag": 30, + "mob": 45, + "name": "MP5", + "op": [ + 17, + 18 + ], + "slot": 0, + "rpm": 800 + }, + "14": { + "class": 1, + "dmg_n": 40, + "dmg_s": 34, + "mag": 30, + "mob": 45, + "name": "MP5K", + "op": [ + 14 + ], + "slot": 0, + "rpm": 800 + }, + "15": { + "class": 1, + "dmg_n": 38, + "dmg_s": 32, + "mag": 30, + "mob": 45, + "name": "MP7", + "op": [ + 22 + ], + "slot": 0, + "rpm": 750 + }, + "16": { + "class": 1, + "dmg_n": 25, + "dmg_s": 21, + "mag": 50, + "mob": 45, + "name": "P90", + "op": [ + 17, + 18 + ], + "slot": 0, + "rpm": 970 + }, + "17": { + "class": 1, + "dmg_n": 48, + "dmg_s": 40, + "mag": 25, + "mob": 45, + "name": "UMP45", + "op": [ + 15, + 16 + ], + "slot": 0, + "rpm": 600 + }, + "18": { + "class": 2, + "dmg_n": 42, + "dmg_s": 36, + "mag": 100, + "mob": 35, + "name": "6P41", + "op": [ + 7 + ], + "slot": 0, + "rpm": 680 + }, + "19": { + "class": 2, + "dmg_n": 39, + "dmg_s": 33, + "mag": 50, + "mob": 35, + "name": "G8A1", + "op": [ + 9 + ], + "slot": 0, + "rpm": 850 + }, + "20": { + "class": 3, + "dmg_n": 180, + "dmg_s": 153, + "mag": 10, + "mob": 38, + "name": "OTs-03", + "op": [ + 6 + ], + "slot": 0, + "rpm": 0 + }, + "21": { + "class": 4, + "dmg_n": 45, + "dmg_s": 38, + "mag": 8, + "mob": 42, + "name": "M1014", + "op": [ + 15, + 16, + 4 + ], + "slot": 0, + "rpm": 0 + }, + "22": { + "class": 4, + "dmg_n": 48, + "dmg_s": 40, + "mag": 7, + "mob": 42, + "name": "M590A1", + "op": [ + 0, + 13, + 14 + ], + "slot": 0, + "rpm": 0 + }, + "23": { + "class": 4, + "dmg_n": 60, + "dmg_s": 51, + "mag": 7, + "mob": 43, + "name": "M870", + "op": [ + 21, + 22 + ], + "slot": 0, + "rpm": 0 + }, + "24": { + "class": 4, + "dmg_n": 50, + "dmg_s": 43, + "mag": 8, + "mob": 50, + "name": "SASG-12", + "op": [ + 19, + 20 + ], + "slot": 0, + "rpm": 0 + }, + "25": { + "class": 4, + "dmg_n": 53, + "dmg_s": 45, + "mag": 7, + "mob": 42, + "name": "SG-CQB", + "op": [ + 3, + 17, + 18 + ], + "slot": 0, + "rpm": 0 + }, + "26": { + "class": 5, + "dmg_n": 38, + "dmg_s": 32, + "mag": 20, + "mob": 50, + "name": "5.7 USG", + "op": [ + 2, + 4, + 15, + 16 + ], + "slot": 1, + "rpm": 0 + }, + "27": { + "class": 5, + "dmg_n": 42, + "dmg_s": 36, + "mag": 18, + "mob": 50, + "name": "GSH-18", + "op": [ + 6, + 7, + 19, + 20 + ], + "slot": 1, + "rpm": 0 + }, + "28": { + "class": 5, + "dmg_n": 64, + "dmg_s": 54, + "mag": 6, + "mob": 50, + "name": "LFP586", + "op": [ + 3, + 5, + 17, + 18 + ], + "slot": 1, + "rpm": 0 + }, + "29": { + "class": 5, + "dmg_n": 50, + "dmg_s": 43, + "mag": 7, + "mob": 50, + "name": "M45 MEUSOC", + "op": [ + 2, + 4, + 15, + 16 + ], + "slot": 1, + "rpm": 0 + }, + "30": { + "class": 5, + "dmg_n": 48, + "dmg_s": 41, + "mag": 15, + "mob": 50, + "name": "P12", + "op": [ + 8, + 9, + 21, + 22 + ], + "slot": 1, + "rpm": 0 + }, + "31": { + "class": 5, + "dmg_n": 53, + "dmg_s": 45, + "mag": 15, + "mob": 50, + "name": "P226 Mk 25", + "op": [ + 0, + 1, + 13, + 14 + ], + "slot": 1, + "rpm": 0 + }, + "32": { + "class": 5, + "dmg_n": 40, + "dmg_s": 34, + "mag": 16, + "mob": 50, + "name": "P9", + "op": [ + 3, + 5, + 17, + 18 + ], + "slot": 1, + "rpm": 0 + }, + "33": { + "class": 5, + "dmg_n": 58, + "dmg_s": 49, + "mag": 8, + "mob": 50, + "name": "PMM", + "op": [ + 6, + 7, + 19, + 20 + ], + "slot": 1, + "rpm": 0 + }, + "34": { + "class": 1, + "dmg_n": 34, + "dmg_s": 29, + "mag": 16, + "mob": 48, + "name": "SMG-11", + "op": [ + 0, + 13 + ], + "slot": 1, + "rpm": 1270 + }, + "35": { + "class": 6, + "dmg_n": 0, + "dmg_s": 0, + "mag": 0, + "mob": 0, + "name": "Ballistic Shield", + "op": [ + 5 + ], + "slot": 0, + "rpm": 0 + }, + "36": { + "class": 1, + "dmg_n": 32, + "dmg_s": 27, + "mag": 25, + "mob": 50, + "name": "Bearing 9", + "op": [ + 26, + 27 + ], + "slot": 1, + "rpm": 1100 + }, + "37": { + "class": 3, + "dmg_n": 52, + "dmg_s": null, + "mag": 20, + "mob": 39, + "name": "CAMRS", + "op": [ + 10 + ], + "slot": 0, + "rpm": 0 + }, + "38": { + "class": 5, + "dmg_n": 45, + "dmg_s": 38, + "mag": 13, + "mob": 50, + "name": "MK1 9mm", + "op": [ + 10 + ], + "slot": 1, + "rpm": 0 + }, + "39": { + "class": 0, + "dmg_n": 52, + "dmg_s": null, + "mag": 20, + "mob": 40, + "name": "MK17 CQB", + "op": [ + 11 + ], + "slot": 0, + "rpm": 585 + }, + "40": { + "class": 3, + "dmg_n": 75, + "dmg_s": 65, + "mag": 20, + "mob": 38, + "name": "SR-25", + "op": [ + 11 + ], + "slot": 0, + "rpm": 0 + }, + "41": { + "class": 5, + "dmg_n": 60, + "dmg_s": null, + "mag": 7, + "mob": 50, + "name": "D-50", + "op": [ + 11 + ], + "slot": 1, + "rpm": 0 + }, + "42": { + "class": 0, + "dmg_n": 52, + "dmg_s": 44, + "mag": 30, + "mob": 50, + "name": "PARA-308", + "op": [ + 12 + ], + "slot": 0, + "rpm": 650 + }, + "43": { + "class": 2, + "dmg_n": 39, + "dmg_s": null, + "mag": 100, + "mob": 50, + "name": "M249", + "op": [ + 12 + ], + "slot": 0, + "rpm": 650 + }, + "44": { + "class": 5, + "dmg_n": 39, + "dmg_s": 33, + "mag": 15, + "mob": 50, + "name": "92FS", + "op": [ + 12 + ], + "slot": 1, + "rpm": 0 + }, + "45": { + "class": 4, + "dmg_n": 42, + "dmg_s": null, + "mag": 8, + "mob": 42, + "name": "Super 90", + "op": [ + 23 + ], + "slot": 0, + "rpm": 0 + }, + "46": { + "class": 1, + "dmg_n": 38, + "dmg_s": null, + "mag": 34, + "mob": 45, + "name": "9mm C1", + "op": [ + 23 + ], + "slot": 0, + "rpm": 575 + }, + "47": { + "class": 1, + "dmg_n": 32, + "dmg_s": null, + "mag": 30, + "mob": 45, + "name": "MPX", + "op": [ + 24 + ], + "slot": 0, + "rpm": 970 + }, + "48": { + "class": 4, + "dmg_n": 50, + "dmg_s": null, + "mag": 7, + "mob": 42, + "name": "SPAS-12", + "op": [ + 24 + ], + "slot": 0, + "rpm": 0 + }, + "49": { + "class": 1, + "dmg_n": 36, + "dmg_s": 30, + "mag": 30, + "mob": 50, + "name": "M12", + "op": [ + 25 + ], + "slot": 0, + "rpm": 550 + }, + "50": { + "class": 4, + "dmg_n": 28, + "dmg_s": null, + "mag": 6, + "mob": 50, + "name": "SPAS-15", + "op": [ + 25 + ], + "slot": 0, + "rpm": 0 + }, + "51": { + "class": 0, + "dmg_n": 42, + "dmg_s": null, + "mag": 30, + "mob": 40, + "name": "C8-SFW", + "op": [ + 10 + ], + "slot": 0, + "rpm": 837 + }, + "52": { + "class": 5, + "dmg_n": 50, + "dmg_s": 42, + "mag": 12, + "mob": 50, + "name": "P229", + "op": [ + 26, + 27 + ], + "slot": 1, + "rpm": 0 + }, + "53": { + "class": 4, + "dmg_n": 32, + "dmg_s": null, + "mag": 7, + "mob": 50, + "name": "SuperNova", + "op": [ + 26, + 27 + ], + "slot": 0, + "rpm": 0 + }, + "54": { + "class": 0, + "dmg_n": 41, + "dmg_s": 34, + "mag": 20, + "mob": 50, + "name": "Type-89", + "op": [ + 26 + ], + "slot": 0, + "rpm": 850 + }, + "55": { + "class": 1, + "dmg_n": 23, + "dmg_s": 23, + "mag": 30, + "mob": 50, + "name": "MP5SD", + "op": [ + 27 + ], + "slot": 0, + "rpm": 800 + }, + "56": { + "class": 4, + "dmg_n": 66, + "dmg_s": null, + "mag": 4, + "mob": 50, + "name": "ITA12S", + "op": [ + 29, + 28 + ], + "slot": 1, + "rpm": 95 + }, + "57": { + "class": 5, + "dmg_n": 43, + "dmg_s": 36, + "mag": 12, + "mob": 50, + "name": "USP40", + "op": [ + 29, + 28 + ], + "slot": 1, + "rpm": 375 + }, + "58": { + "class": 4, + "dmg_n": 47, + "dmg_s": null, + "mag": 7, + "mob": 50, + "name": "ITA12L", + "op": [ + 29, + 28 + ], + "slot": 0, + "rpm": 95 + }, + "59": { + "class": 1, + "dmg_n": 23, + "dmg_s": 19, + "mag": 25, + "mob": 50, + "name": "Vector .45 ACP", + "op": [ + 29 + ], + "slot": 0, + "rpm": 1200 + }, + "60": { + "class": 0, + "dmg_n": 46, + "dmg_s": 39, + "mag": 30, + "mob": 50, + "name": "C7E", + "op": [ + 28 + ], + "slot": 0, + "rpm": 800 + }, + "61": { + "class": 1, + "dmg_n": 33, + "dmg_s": 28, + "mag": 50, + "mob": 50, + "name": "PDW9", + "op": [ + 28 + ], + "slot": 0, + "rpm": 800 + } + } +} \ No newline at end of file diff --git a/App/app/src/main/java/io/nicco/r6s/DB.java b/App/app/src/main/java/io/nicco/r6s/DB.java new file mode 100644 index 0000000..10ea80f --- /dev/null +++ b/App/app/src/main/java/io/nicco/r6s/DB.java @@ -0,0 +1,35 @@ +package io.nicco.r6s; + +import android.util.Log; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.IOException; +import java.io.InputStream; + +class DB { + + static private JSONObject db = null; + + private static void load() { + Log.i("JSON", "Ini..."); + try { + InputStream is = main.am.open("r6s.json"); + byte[] buffer = new byte[is.available()]; + is.read(buffer); + is.close(); + db = new JSONObject(new String(buffer, "UTF-8")); + } catch (IOException | JSONException e) { + db = null; + e.printStackTrace(); + } + } + + static JSONObject getDB() { + if (db == null) + load(); + return db; + } + +} diff --git a/App/app/src/main/java/io/nicco/r6s/ID.java b/App/app/src/main/java/io/nicco/r6s/ID.java new file mode 100644 index 0000000..15b62e9 --- /dev/null +++ b/App/app/src/main/java/io/nicco/r6s/ID.java @@ -0,0 +1,74 @@ +package io.nicco.r6s; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.ArrayList; +import java.util.List; + +class ID { + + static final int OPERATOR = 0; + static final int WEAPON = 1; + static final int GADGET = 2; + static final int FACTION = 3; + static final int MAP = 4; + String id; + private int type; + + ID(int t, String id) { + this.type = t; + this.id = id; + } + + static ID[] fromJSONArray(int type, JSONArray a) { + List tmp = new ArrayList<>(); + for (int i = 0; i < a.length(); i++) + try { + tmp.add(new ID(type, a.getString(i))); + } catch (JSONException e) { + e.printStackTrace(); + } + return tmp.toArray(new ID[0]); + } + + T get() { + switch (this.type) { + case OPERATOR: + return (T) new ModelOp(this); + case WEAPON: + return (T) new ModelWeapon(this); + case GADGET: + return (T) new ModelGadget(this); + case FACTION: + return (T) new ModelFaction(this); + case MAP: + return (T) new ModelMap(this); + default: + return null; + } + } + + JSONObject getJSON() { + try { + switch (this.type) { + case OPERATOR: + return DB.getDB().getJSONObject("operators").getJSONObject(this.id); + case WEAPON: + return DB.getDB().getJSONObject("weapons").getJSONObject(this.id); + case GADGET: + return DB.getDB().getJSONObject("gadgets").getJSONObject(this.id); + case FACTION: + return DB.getDB().getJSONObject("factions").getJSONObject(this.id); + case MAP: + return DB.getDB().getJSONObject("maps").getJSONObject(this.id); + default: + return null; + } + } catch (JSONException e) { + e.printStackTrace(); + return null; + } + } +} \ No newline at end of file diff --git a/App/app/src/main/java/io/nicco/r6s/ListStd.java b/App/app/src/main/java/io/nicco/r6s/ListStd.java new file mode 100644 index 0000000..f9d933b --- /dev/null +++ b/App/app/src/main/java/io/nicco/r6s/ListStd.java @@ -0,0 +1,68 @@ +package io.nicco.r6s; + +import android.content.Context; +import android.graphics.drawable.Drawable; +import android.support.annotation.NonNull; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ArrayAdapter; +import android.widget.ImageView; +import android.widget.TextView; + +import java.util.ArrayList; + +interface ListStdBuilder { + void onClick(ID id); + + ListStdItem getItem(T cur); +} + +class ListStdItem { + String name, sub, attr; + Drawable img; + ID id; + + ListStdItem(String name, String sub, String attr, Drawable img, ID id) { + this.name = name; + this.sub = sub; + this.attr = attr; + this.img = img; + this.id = id; + } +} + +class ListStd extends ArrayAdapter implements View.OnClickListener { + + private ListStdBuilder h = null; + + ListStd(ArrayList data, Context context, ListStdBuilder h) { + super(context, R.layout.frag_list_std, data); + this.h = h; + } + + @Override + public void onClick(View v) { + h.onClick((ID) v.getTag()); + } + + @NonNull + @Override + public View getView(int position, View v, @NonNull ViewGroup p) { + ListStdItem item = h.getItem(getItem(position)); + + if (v == null) { + v = LayoutInflater.from(getContext()).inflate(R.layout.frag_list_std, p, false); + } + + ((TextView) v.findViewById(R.id.list_std_title)).setText(item.name); + ((TextView) v.findViewById(R.id.list_std_sub)).setText(item.sub); + ((TextView) v.findViewById(R.id.list_std_attr)).setText(item.attr); + ((ImageView) v.findViewById(R.id.list_std_icon)).setImageDrawable(item.img); + + v.setTag(item.id); + v.setOnClickListener(this); + + return v; + } +} diff --git a/App/app/src/main/java/io/nicco/r6s/ModelFaction.java b/App/app/src/main/java/io/nicco/r6s/ModelFaction.java new file mode 100644 index 0000000..ee16e3f --- /dev/null +++ b/App/app/src/main/java/io/nicco/r6s/ModelFaction.java @@ -0,0 +1,25 @@ +package io.nicco.r6s; + +import org.json.JSONException; +import org.json.JSONObject; + +public class ModelFaction { + + String name; + ID id; + ID[] ops; + + ModelFaction(ID id) { + this.id = id; + + JSONObject d = id.getJSON(); + if (d == null) { + this.name = ""; + } else + try { + this.name = d.getString("name"); + } catch (JSONException e) { + e.printStackTrace(); + } + } +} diff --git a/App/app/src/main/java/io/nicco/r6s/ModelGadget.java b/App/app/src/main/java/io/nicco/r6s/ModelGadget.java new file mode 100644 index 0000000..aa6244c --- /dev/null +++ b/App/app/src/main/java/io/nicco/r6s/ModelGadget.java @@ -0,0 +1,26 @@ +package io.nicco.r6s; + +import org.json.JSONException; +import org.json.JSONObject; + +public class ModelGadget { + + String name, msg; + ID id; + + ModelGadget(ID id) { + this.id = id; + + JSONObject d = id.getJSON(); + if (d != null) { + try { + // Safe Parses + name = d.getString("name"); + // msg = d.getString("msg"); + } catch (JSONException e) { + e.printStackTrace(); + } + } + } + +} diff --git a/App/app/src/main/java/io/nicco/r6s/ModelMap.java b/App/app/src/main/java/io/nicco/r6s/ModelMap.java new file mode 100644 index 0000000..60ec018 --- /dev/null +++ b/App/app/src/main/java/io/nicco/r6s/ModelMap.java @@ -0,0 +1,94 @@ +package io.nicco.r6s; + +import android.graphics.drawable.Drawable; +import android.util.Log; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +public class ModelMap { + + private static List maps = null; + String name; + ID id; + int floor; + + ModelMap(ID id) { + this.id = id; + this.floor = 0; + + JSONObject d = id.getJSON(); + if (d != null) { + try { + // Safe Parses + name = d.getString("name"); + } catch (JSONException e) { + e.printStackTrace(); + } + } + + } + + static List getMaps() { + if (maps == null) { + maps = new ArrayList<>(); + Iterator it; + try { + it = DB.getDB().getJSONObject("maps").keys(); + while (it.hasNext()) + maps.add(new ModelMap(new ID(ID.MAP, it.next()))); + } catch (JSONException e) { + e.printStackTrace(); + } + } + return maps; + } + + static List getMapsNames() { + if (maps == null) + getMaps(); + + Log.i("MAPS", maps.toString()); + List ret = new ArrayList<>(); + for (ModelMap map : maps) + ret.add(map.name); + return ret; + } + + Drawable getImage() { + try { + InputStream is = main.am.open("img/maps/" + id.id + "/" + String.valueOf(floor) + ".jpg"); + return Drawable.createFromStream(is, null); + } catch (IOException ignore) { + Log.i("IMAGE", "CLoud not find"); + return null; + } + } + + private boolean check_floor(int f) { + try { + main.am.open("img/maps/" + id.id + "/" + String.valueOf(f) + ".jpg"); + return true; + } catch (IOException e) { + return false; + } + } + + void setFloor(int f) { + if (check_floor(f)) + floor = f; + } + + void setFloor(boolean up) { + int n = up ? floor + 1 : floor - 1; + if (check_floor(n)) + floor = n; + } + +} diff --git a/App/app/src/main/java/io/nicco/r6s/ModelOp.java b/App/app/src/main/java/io/nicco/r6s/ModelOp.java new file mode 100644 index 0000000..fd29573 --- /dev/null +++ b/App/app/src/main/java/io/nicco/r6s/ModelOp.java @@ -0,0 +1,215 @@ +package io.nicco.r6s; + +import android.graphics.drawable.Drawable; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.Comparator; +import java.util.Iterator; +import java.util.List; + +public class ModelOp { + + static final String[] TYPES = {"Attacker", "Defender", "Recruit"}; + static final String[] TYPES_SHORT = {"A", "D", "R"}; + + // Cache + private static ModelOp[][] cache_ops = null; + String name, ability, ability_msg; + int armor, speed, type, faction; + ID id; + ID[] weapons, gadgets; + private ModelWeapon[][] cache_weapons = null; + + ModelOp(ID id) { + this.id = id; + + JSONObject d = id.getJSON(); + if (d != null) { + try { + armor = d.getInt("armor"); + } catch (JSONException e) { + e.printStackTrace(); + } + try { + speed = d.getInt("speed"); + } catch (JSONException e) { + e.printStackTrace(); + } + try { + type = d.getInt("type"); + } catch (JSONException e) { + e.printStackTrace(); + } + try { + name = d.getString("name"); + } catch (JSONException e) { + e.printStackTrace(); + } + try { + ability = d.getString("ability"); + } catch (JSONException e) { + e.printStackTrace(); + } + try { + faction = d.getInt("faction"); + } catch (JSONException e) { + e.printStackTrace(); + } + try { + weapons = ID.fromJSONArray(ID.WEAPON, d.getJSONArray("wid")); + } catch (JSONException e) { + e.printStackTrace(); + } + try { + gadgets = ID.fromJSONArray(ID.GADGET, d.getJSONArray("gadget")); + } catch (JSONException e) { + e.printStackTrace(); + } + } + } + + public static ModelOp[] getAttackers() { + mk_ops(); + return cache_ops[0]; + } + + public static ModelOp[] getDefenders() { + mk_ops(); + return cache_ops[1]; + } + + private static void mk_ops() { + if (cache_ops == null) { + List a = new ArrayList<>(); + List d = new ArrayList<>(); + + // Populate with operators + Iterator it; + try { + it = DB.getDB().getJSONObject("operators").keys(); + while (it.hasNext()) { + ModelOp cur = new ModelOp(new ID(ID.OPERATOR, it.next())); + if (cur.type == 0) + a.add(cur); + else + d.add(cur); + } + cache_ops = new ModelOp[][]{ + a.toArray(new ModelOp[0]), + d.toArray(new ModelOp[0]) + }; + } catch (JSONException e) { + e.printStackTrace(); + cache_ops = null; + } + } + + } + + // COMPARATORS + static Comparator sortByName() { + return new Comparator() { + @Override + public int compare(ModelOp a, ModelOp b) { + return a.name.compareTo(b.name); + } + }; + } + + static Comparator sortByType() { + return new Comparator() { + @Override + public int compare(ModelOp a, ModelOp b) { + return a.type > b.type ? 1 : -1; + } + }; + } + + static Comparator sortByFaction() { + return new Comparator() { + @Override + public int compare(ModelOp a, ModelOp b) { + return a.faction > b.faction ? 1 : -1; + } + }; + } + + String getFaction() { + try { + return ((ModelFaction) new ID(ID.FACTION, String.valueOf(faction)).get()).name; + } catch (Exception e) { + return ""; + } + } + + String getTypeLong() { + return TYPES[type]; + } + + String getTypeShort() { + return TYPES_SHORT[type]; + } + + Drawable getIcon() { + return getAsset("icon", "png"); + } + + Drawable getImage() { + return getAsset("full", "jpg"); + } + + ModelWeapon[] getPrimary() { + mk_weapons(); + return cache_weapons[0]; + } + + ModelWeapon[] getSecondary() { + mk_weapons(); + return cache_weapons[1]; + } + + public ID[] getGadgetsIds() { + return gadgets; + } + + private void mk_weapons() { + if (cache_weapons == null) { + List prim = new ArrayList<>(); + List side = new ArrayList<>(); + + // Populate with operators + for (ID id : weapons) { + ModelWeapon cur = new ModelWeapon(id); + if (cur.slot == 0) + prim.add(cur); + else + side.add(cur); + } + cache_weapons = new ModelWeapon[][]{ + prim.toArray(new ModelWeapon[0]), + side.toArray(new ModelWeapon[0]) + }; + } + + } + + private Drawable getAsset(String p, String f) { + try { + InputStream is = main.am.open("img/ops/" + p + "/" + this.id.id + "." + f); + return Drawable.createFromStream(is, null); + } catch (IOException ignore) { + try { + return Drawable.createFromStream(main.am.open("img/no_img.png"), null); + } catch (IOException e) { + e.printStackTrace(); + return null; + } + } + } + +} \ No newline at end of file diff --git a/App/app/src/main/java/io/nicco/r6s/ModelWeapon.java b/App/app/src/main/java/io/nicco/r6s/ModelWeapon.java new file mode 100644 index 0000000..c85980f --- /dev/null +++ b/App/app/src/main/java/io/nicco/r6s/ModelWeapon.java @@ -0,0 +1,98 @@ +package io.nicco.r6s; + +import android.graphics.drawable.Drawable; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.IOException; +import java.util.Comparator; + +public class ModelWeapon { + + static final String[] TYPES = {"Assault Rifle", "Submachine Gun", "Light Machine Gun", "Sniper Rifle", "Shotgun", "Secondary", "Shield"}; + static final String[] TYPES_SHORT = {"AR", "SMG", "LMG", "SR", "SG", "PS", "SH"}; + static final String[] SLOTS = {"Primary", "Secondary"}; + static final String[] SLOTS_SHORT = {"P", "S"}; + + String name; + int dmg_n, dmg_s, rpm, mob, mag, type, slot; + ID id; + ID[] ops; + + ModelWeapon(ID id) { + this.id = id; + + JSONObject d = id.getJSON(); + if (d != null) { + try { + // Safe Parses + ops = ID.fromJSONArray(ID.OPERATOR, d.getJSONArray("op")); + type = d.getInt("class"); + name = d.getString("name"); + slot = d.getInt("slot"); + + dmg_n = d.getInt("dmg_n"); + mob = d.getInt("mob"); + rpm = d.getInt("rpm"); + mag = d.getInt("mag"); + + if (!d.isNull("dmg_s")) + dmg_s = d.getInt("dmg_s"); + else + dmg_s = -1; + + } catch (JSONException e) { + e.printStackTrace(); + } + } + } + + String getTypeShort() { + return TYPES_SHORT[type]; + } + + String getTypeLong() { + return TYPES[type]; + } + + String getSlotShort() { + return SLOTS_SHORT[slot]; + } + + String getSlotLong() { + return SLOTS[slot]; + } + + Drawable getImage() { + try { + return Drawable.createFromStream(main.am.open("img/weapons/" + this.id.id + ".png"), null); + } catch (IOException ignore) { + try { + return Drawable.createFromStream(main.am.open("img/no_img.png"), null); + } catch (IOException e) { + e.printStackTrace(); + return null; + } + } + } + + static Comparator sortByName() { + return new Comparator() { + @Override + public int compare(ModelWeapon a, ModelWeapon b) { + return a.name.compareTo(b.name); + } + }; + } + + static Comparator sortByClass() { + return new Comparator() { + @Override + public int compare(ModelWeapon a, ModelWeapon b) { + return a.type > b.type ? 1 : -1; + } + }; + } + +} diff --git a/App/app/src/main/java/io/nicco/r6s/Static.java b/App/app/src/main/java/io/nicco/r6s/Static.java new file mode 100644 index 0000000..e51237f --- /dev/null +++ b/App/app/src/main/java/io/nicco/r6s/Static.java @@ -0,0 +1,36 @@ +package io.nicco.r6s; + +import android.app.Activity; +import android.os.Build; +import android.view.View; +import android.widget.LinearLayout; +import android.widget.TextView; + + +public class Static { + + static LinearLayout mkItem(final String s, final Activity a) { + LinearLayout frame = new LinearLayout(a); + TextView tmp = new TextView(a); + + LinearLayout.LayoutParams fp = new LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.WRAP_CONTENT, 1); + int marg = a.getResources().getDimensionPixelSize(R.dimen.spacing05x); + fp.setMargins(marg, marg, marg, marg); + frame.setLayoutParams(fp); + frame.setOrientation(LinearLayout.HORIZONTAL); + + tmp.setText(s); + tmp.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT)); + int pad = a.getResources().getDimensionPixelSize(R.dimen.spacing1x); + tmp.setPadding(pad, pad, pad, pad); + tmp.setTextAlignment(View.TEXT_ALIGNMENT_CENTER); + tmp.setBackgroundResource(R.drawable.tag); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + tmp.setTextAppearance(android.R.style.TextAppearance_DeviceDefault_Medium); + } + tmp.setTextColor(0xffffffff); + frame.addView(tmp); + return frame; + } + +} diff --git a/R6S/app/src/main/java/io/nicco/r6s/TouchImageView.java b/App/app/src/main/java/io/nicco/r6s/TouchImageView.java similarity index 98% rename from R6S/app/src/main/java/io/nicco/r6s/TouchImageView.java rename to App/app/src/main/java/io/nicco/r6s/TouchImageView.java index c63c518..ef73457 100644 --- a/R6S/app/src/main/java/io/nicco/r6s/TouchImageView.java +++ b/App/app/src/main/java/io/nicco/r6s/TouchImageView.java @@ -1,20 +1,3 @@ -/* - -https://github.com/MikeOrtiz/TouchImageView - -Android: TouchImageView -Created by: Mike Ortiz -Contributions by: - * Patrick Lackemacher - * Babay88 - * @ipsilondev - * hank-cp - * singpolyma - -THANKS!!! - -*/ - package io.nicco.r6s; import android.annotation.TargetApi; @@ -28,8 +11,6 @@ import android.graphics.RectF; import android.graphics.drawable.Drawable; import android.net.Uri; import android.os.Build; -import android.os.Build.VERSION; -import android.os.Build.VERSION_CODES; import android.os.Bundle; import android.os.Parcelable; import android.util.AttributeSet; @@ -39,11 +20,14 @@ import android.view.MotionEvent; import android.view.ScaleGestureDetector; import android.view.View; import android.view.animation.AccelerateDecelerateInterpolator; -import android.widget.ImageView; import android.widget.OverScroller; import android.widget.Scroller; -public class TouchImageView extends ImageView { +/* +* Author Mike Ortiz +* https://github.com/MikeOrtiz/TouchImageView +*/ +public class TouchImageView extends android.support.v7.widget.AppCompatImageView { private static final String DEBUG = "DEBUG"; @@ -67,37 +51,26 @@ public class TouchImageView extends ImageView { // saved prior to the screen rotating. // private Matrix matrix, prevMatrix; - - private static enum State {NONE, DRAG, ZOOM, FLING, ANIMATE_ZOOM} - private State state; - private float minScale; private float maxScale; private float superMinScale; private float superMaxScale; private float[] m; - private Context context; private Fling fling; - private ScaleType mScaleType; - private boolean imageRenderedAtLeastOnce; private boolean onDrawReady; - private ZoomVariables delayedZoomVariables; - // // Size of view and previous view size (ie before rotation) // private int viewWidth, viewHeight, prevViewWidth, prevViewHeight; - // // Size of image when it is stretched to fit view. Before and After rotation. // private float matchViewWidth, matchViewHeight, prevMatchViewWidth, prevMatchViewHeight; - private ScaleGestureDetector mScaleDetector; private GestureDetector mGestureDetector; private GestureDetector.OnDoubleTapListener doubleTapListener = null; @@ -183,6 +156,11 @@ public class TouchImageView extends ImageView { fitImageToView(); } + @Override + public ScaleType getScaleType() { + return mScaleType; + } + @Override public void setScaleType(ScaleType type) { if (type == ScaleType.FIT_START || type == ScaleType.FIT_END) { @@ -203,11 +181,6 @@ public class TouchImageView extends ImageView { } } - @Override - public ScaleType getScaleType() { - return mScaleType; - } - /** * Returns false if image is in initial, unzoomed state. False, otherwise. * @@ -328,16 +301,6 @@ public class TouchImageView extends ImageView { return minScale; } - /** - * Get the current zoom. This is the zoom relative to the initial - * scale, not the original resource. - * - * @return current zoom multiplier. - */ - public float getCurrentZoom() { - return normalizedScale; - } - /** * Set the min zoom multiplier. Default value: 1. * @@ -348,6 +311,16 @@ public class TouchImageView extends ImageView { superMinScale = SUPER_MIN_MULTIPLIER * minScale; } + /** + * Get the current zoom. This is the zoom relative to the initial + * scale, not the original resource. + * + * @return current zoom multiplier. + */ + public float getCurrentZoom() { + return normalizedScale; + } + /** * Reset zoom and translation to initial state. */ @@ -759,6 +732,100 @@ public class TouchImageView extends ImageView { return true; } + private void scaleImage(double deltaScale, float focusX, float focusY, boolean stretchImageToSuper) { + + float lowerScale, upperScale; + if (stretchImageToSuper) { + lowerScale = superMinScale; + upperScale = superMaxScale; + + } else { + lowerScale = minScale; + upperScale = maxScale; + } + + float origScale = normalizedScale; + normalizedScale *= deltaScale; + if (normalizedScale > upperScale) { + normalizedScale = upperScale; + deltaScale = upperScale / origScale; + } else if (normalizedScale < lowerScale) { + normalizedScale = lowerScale; + deltaScale = lowerScale / origScale; + } + + matrix.postScale((float) deltaScale, (float) deltaScale, focusX, focusY); + fixScaleTrans(); + } + + /** + * This function will transform the coordinates in the touch event to the coordinate + * system of the drawable that the imageview contain + * + * @param x x-coordinate of touch event + * @param y y-coordinate of touch event + * @param clipToBitmap Touch event may occur within view, but outside image content. True, to clip return value + * to the bounds of the bitmap size. + * @return Coordinates of the point touched, in the coordinate system of the original drawable. + */ + private PointF transformCoordTouchToBitmap(float x, float y, boolean clipToBitmap) { + matrix.getValues(m); + float origW = getDrawable().getIntrinsicWidth(); + float origH = getDrawable().getIntrinsicHeight(); + float transX = m[Matrix.MTRANS_X]; + float transY = m[Matrix.MTRANS_Y]; + float finalX = ((x - transX) * origW) / getImageWidth(); + float finalY = ((y - transY) * origH) / getImageHeight(); + + if (clipToBitmap) { + finalX = Math.min(Math.max(finalX, 0), origW); + finalY = Math.min(Math.max(finalY, 0), origH); + } + + return new PointF(finalX, finalY); + } + + /** + * Inverse of transformCoordTouchToBitmap. This function will transform the coordinates in the + * drawable's coordinate system to the view's coordinate system. + * + * @param bx x-coordinate in original bitmap coordinate system + * @param by y-coordinate in original bitmap coordinate system + * @return Coordinates of the point in the view's coordinate system. + */ + private PointF transformCoordBitmapToTouch(float bx, float by) { + matrix.getValues(m); + float origW = getDrawable().getIntrinsicWidth(); + float origH = getDrawable().getIntrinsicHeight(); + float px = bx / origW; + float py = by / origH; + float finalX = m[Matrix.MTRANS_X] + getImageWidth() * px; + float finalY = m[Matrix.MTRANS_Y] + getImageHeight() * py; + return new PointF(finalX, finalY); + } + + @TargetApi(Build.VERSION_CODES.JELLY_BEAN) + private void compatPostOnAnimation(Runnable runnable) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { + postOnAnimation(runnable); + + } else { + postDelayed(runnable, 1000 / 60); + } + } + + private void printMatrixInfo() { + float[] n = new float[9]; + matrix.getValues(n); + Log.d(DEBUG, "Scale: " + n[Matrix.MSCALE_X] + " TransX: " + n[Matrix.MTRANS_X] + " TransY: " + n[Matrix.MTRANS_Y]); + } + + private static enum State {NONE, DRAG, ZOOM, FLING, ANIMATE_ZOOM} + + public interface OnTouchImageViewListener { + public void onMove(); + } + /** * Gesture Listener detects a single click or long click and passes that on * to the view's listener. @@ -818,10 +885,6 @@ public class TouchImageView extends ImageView { } } - public interface OnTouchImageViewListener { - public void onMove(); - } - /** * Responsible for all touch events. Handles the heavy lifting of drag and also sends * touch events to Scale Detector and Gesture Detector. @@ -939,32 +1002,6 @@ public class TouchImageView extends ImageView { } } - private void scaleImage(double deltaScale, float focusX, float focusY, boolean stretchImageToSuper) { - - float lowerScale, upperScale; - if (stretchImageToSuper) { - lowerScale = superMinScale; - upperScale = superMaxScale; - - } else { - lowerScale = minScale; - upperScale = maxScale; - } - - float origScale = normalizedScale; - normalizedScale *= deltaScale; - if (normalizedScale > upperScale) { - normalizedScale = upperScale; - deltaScale = upperScale / origScale; - } else if (normalizedScale < lowerScale) { - normalizedScale = lowerScale; - deltaScale = lowerScale / origScale; - } - - matrix.postScale((float) deltaScale, (float) deltaScale, focusX, focusY); - fixScaleTrans(); - } - /** * DoubleTapZoom calls a series of runnables which apply * an animated zoom in/out graphic to the image. @@ -973,8 +1010,8 @@ public class TouchImageView extends ImageView { */ private class DoubleTapZoom implements Runnable { - private long startTime; private static final float ZOOM_TIME = 500; + private long startTime; private float startZoom, targetZoom; private float bitmapX, bitmapY; private boolean stretchImageToSuper; @@ -1069,52 +1106,6 @@ public class TouchImageView extends ImageView { } } - /** - * This function will transform the coordinates in the touch event to the coordinate - * system of the drawable that the imageview contain - * - * @param x x-coordinate of touch event - * @param y y-coordinate of touch event - * @param clipToBitmap Touch event may occur within view, but outside image content. True, to clip return value - * to the bounds of the bitmap size. - * @return Coordinates of the point touched, in the coordinate system of the original drawable. - */ - private PointF transformCoordTouchToBitmap(float x, float y, boolean clipToBitmap) { - matrix.getValues(m); - float origW = getDrawable().getIntrinsicWidth(); - float origH = getDrawable().getIntrinsicHeight(); - float transX = m[Matrix.MTRANS_X]; - float transY = m[Matrix.MTRANS_Y]; - float finalX = ((x - transX) * origW) / getImageWidth(); - float finalY = ((y - transY) * origH) / getImageHeight(); - - if (clipToBitmap) { - finalX = Math.min(Math.max(finalX, 0), origW); - finalY = Math.min(Math.max(finalY, 0), origH); - } - - return new PointF(finalX, finalY); - } - - /** - * Inverse of transformCoordTouchToBitmap. This function will transform the coordinates in the - * drawable's coordinate system to the view's coordinate system. - * - * @param bx x-coordinate in original bitmap coordinate system - * @param by y-coordinate in original bitmap coordinate system - * @return Coordinates of the point in the view's coordinate system. - */ - private PointF transformCoordBitmapToTouch(float bx, float by) { - matrix.getValues(m); - float origW = getDrawable().getIntrinsicWidth(); - float origH = getDrawable().getIntrinsicHeight(); - float px = bx / origW; - float py = by / origH; - float finalX = m[Matrix.MTRANS_X] + getImageWidth() * px; - float finalY = m[Matrix.MTRANS_Y] + getImageHeight() * py; - return new PointF(finalX, finalY); - } - /** * Fling launches sequential runnables which apply * the fling graphic to the image. The values for the translation @@ -1203,7 +1194,7 @@ public class TouchImageView extends ImageView { boolean isPreGingerbread; public CompatScroller(Context context) { - if (VERSION.SDK_INT < VERSION_CODES.GINGERBREAD) { + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.GINGERBREAD) { isPreGingerbread = true; scroller = new Scroller(context); @@ -1263,16 +1254,6 @@ public class TouchImageView extends ImageView { } } - @TargetApi(Build.VERSION_CODES.JELLY_BEAN) - private void compatPostOnAnimation(Runnable runnable) { - if (VERSION.SDK_INT >= VERSION_CODES.JELLY_BEAN) { - postOnAnimation(runnable); - - } else { - postDelayed(runnable, 1000 / 60); - } - } - private class ZoomVariables { public float scale; public float focusX; @@ -1286,10 +1267,4 @@ public class TouchImageView extends ImageView { this.scaleType = scaleType; } } - - private void printMatrixInfo() { - float[] n = new float[9]; - matrix.getValues(n); - Log.d(DEBUG, "Scale: " + n[Matrix.MSCALE_X] + " TransX: " + n[Matrix.MTRANS_X] + " TransY: " + n[Matrix.MTRANS_Y]); - } -} \ No newline at end of file +} diff --git a/App/app/src/main/java/io/nicco/r6s/error.java b/App/app/src/main/java/io/nicco/r6s/error.java new file mode 100644 index 0000000..006b91d --- /dev/null +++ b/App/app/src/main/java/io/nicco/r6s/error.java @@ -0,0 +1,25 @@ +package io.nicco.r6s; + +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +public class error extends Fragment { + + + public error() { + } + + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + View v = inflater.inflate(R.layout.frag_error, container, false); + + main.setActionBarTitle(getString(R.string.frag_error_txt)); + + return v; + } + +} diff --git a/App/app/src/main/java/io/nicco/r6s/group_ops.java b/App/app/src/main/java/io/nicco/r6s/group_ops.java new file mode 100644 index 0000000..702ad56 --- /dev/null +++ b/App/app/src/main/java/io/nicco/r6s/group_ops.java @@ -0,0 +1,104 @@ +package io.nicco.r6s; + +import android.content.Context; +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ListView; + +import org.json.JSONException; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.Iterator; + +public class group_ops extends Fragment { + + private ArrayList ops = null; + private ListStd adapter = null; + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + final View v = inflater.inflate(R.layout.frag_group_ops, container, false); + + main.setActionBarTitle(getString(R.string.nav_ops)); + setMenuVisibility(true); + setHasOptionsMenu(true); + + ops = new ArrayList<>(); + + // Populate with operators + Iterator it; + try { + it = DB.getDB().getJSONObject("operators").keys(); + while (it.hasNext()) + ops.add(new ModelOp(new ID(ID.OPERATOR, it.next()))); + } catch (JSONException e) { + e.printStackTrace(); + } + + adapter = new ListStd<>(ops, getContext(), new ListStdBuilder() { + public void onClick(ID id) { + Bundle b = new Bundle(); + b.putString("ID", id.id); + Fragment f = new single_op(); + f.setArguments(b); + main.transition(f); + } + + @Override + public ListStdItem getItem(ModelOp cur) { + return new ListStdItem( + cur.name, + cur.getFaction(), + ModelOp.TYPES_SHORT[cur.type], + cur.getIcon(), + cur.id + ); + } + }); + + // Set sort from last time + setSort(getActivity().getPreferences(Context.MODE_PRIVATE).getInt(main.SORT_OPS, R.id.menu_group_ops_sort_faction)); + + ((ListView) v.findViewById(R.id.group_ops_list)).setAdapter(adapter); + + return v; + } + + private void setSort(int i) { + switch (i) { + case R.id.menu_group_ops_sort_name: + Collections.sort(ops, ModelOp.sortByName()); + break; + case R.id.menu_group_ops_sort_type: + Collections.sort(ops, ModelOp.sortByType()); + break; + case R.id.menu_group_ops_sort_faction: + Collections.sort(ops, ModelOp.sortByFaction()); + break; + default: + return; + } + getActivity().getPreferences(Context.MODE_PRIVATE).edit().putInt(main.SORT_OPS, i).apply(); + adapter.notifyDataSetChanged(); + } + + @Override + public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { + inflater.inflate(R.menu.group_ops, menu); + super.onCreateOptionsMenu(menu, inflater); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + setSort(item.getItemId()); + return super.onOptionsItemSelected(item); + } + +} diff --git a/App/app/src/main/java/io/nicco/r6s/group_weapons.java b/App/app/src/main/java/io/nicco/r6s/group_weapons.java new file mode 100644 index 0000000..1021458 --- /dev/null +++ b/App/app/src/main/java/io/nicco/r6s/group_weapons.java @@ -0,0 +1,100 @@ +package io.nicco.r6s; + +import android.content.Context; +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ListView; + +import org.json.JSONException; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.Iterator; + +public class group_weapons extends Fragment { + + private ArrayList weapons = null; + private ListStd adapter = null; + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + final View v = inflater.inflate(R.layout.frag_group_weapons, container, false); + + main.setActionBarTitle(getString(R.string.nav_weapons)); + setMenuVisibility(true); + setHasOptionsMenu(true); + + weapons = new ArrayList<>(); + + // Populate with operators + Iterator it; + try { + it = DB.getDB().getJSONObject("weapons").keys(); + while (it.hasNext()) + weapons.add(new ModelWeapon(new ID(ID.WEAPON, it.next()))); + } catch (JSONException e) { + e.printStackTrace(); + } + + adapter = new ListStd<>(weapons, getContext(), new ListStdBuilder() { + public void onClick(ID id) { + Bundle b = new Bundle(); + b.putString("ID", id.id); + Fragment f = new single_weapon(); + f.setArguments(b); + main.transition(f); + } + + @Override + public ListStdItem getItem(ModelWeapon cur) { + return new ListStdItem( + cur.name, + "", + cur.getTypeShort(), + cur.getImage(), + cur.id + ); + } + }); + + // Set sort from last time + setSort(getActivity().getPreferences(Context.MODE_PRIVATE).getInt(main.SORT_WEAPONS, R.id.menu_group_ops_sort_faction)); + ((ListView) v.findViewById(R.id.group_weapons_list)).setAdapter(adapter); + + return v; + } + + private void setSort(int i) { + switch (i) { + case R.id.menu_group_weapons_sort_name: + Collections.sort(weapons, ModelWeapon.sortByName()); + break; + case R.id.menu_group_weapons_sort_class: + Collections.sort(weapons, ModelWeapon.sortByClass()); + break; + default: + return; + } + getActivity().getPreferences(Context.MODE_PRIVATE).edit().putInt(main.SORT_WEAPONS, i).apply(); + adapter.notifyDataSetChanged(); + } + + @Override + public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { + inflater.inflate(R.menu.group_weapons, menu); + super.onCreateOptionsMenu(menu, inflater); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + setSort(item.getItemId()); + return super.onOptionsItemSelected(item); + } + +} diff --git a/App/app/src/main/java/io/nicco/r6s/main.java b/App/app/src/main/java/io/nicco/r6s/main.java new file mode 100644 index 0000000..873253f --- /dev/null +++ b/App/app/src/main/java/io/nicco/r6s/main.java @@ -0,0 +1,205 @@ +package io.nicco.r6s; + +import android.content.res.AssetManager; +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.design.widget.NavigationView; +import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentManager; +import android.support.v4.app.FragmentTransaction; +import android.support.v4.view.GravityCompat; +import android.support.v4.widget.DrawerLayout; +import android.support.v7.app.ActionBar; +import android.support.v7.app.ActionBarDrawerToggle; +import android.support.v7.app.AppCompatActivity; +import android.support.v7.widget.Toolbar; +import android.view.MenuInflater; +import android.view.MenuItem; +import android.view.View; + +public class main extends AppCompatActivity { + + // Alert settings + static final int NUM_ALERTS = 5; + static final String TAG_ALERT_MAP = "TAG_ALERT_MAP"; + static final String TAG_ALERT_OP = "TAG_ALERT_OP"; + + // Links + static final String ABOUT_GIT = "https://github.com/CupCakeArmy/R6S/"; + static final String ABOUT_CHANGES = "https://github.com/CupCakeArmy/R6S/blob/master/README.md#versions"; + static final String ABOUT_BUG = "https://github.com/CupCakeArmy/R6S/issues/new"; + static final String ABOUT_EMAIL = "nicco.borgioli@gmail.com"; + + // Settings + static final String SORT_OPS = "GROUPS_OPS_SORT"; + static final String SORT_WEAPONS = "GROUPS_WEAPONS_SORT"; + + // Accessed by fragments in static manner + static AssetManager am; + static FragmentManager fm; + private static ActionBar actionBar; + private NavigationView nv; + + // Vars + private DrawerLayout drawerLayout; + private ActionBarDrawerToggle drawerToggle; + private Class prev = null; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.main); + + am = getAssets(); + fm = getSupportFragmentManager(); + MenuInflater mi = getMenuInflater(); + + setSupportActionBar((Toolbar) findViewById(R.id.toolbar)); + actionBar = getSupportActionBar(); + if (actionBar != null) { + actionBar.setDisplayHomeAsUpEnabled(true); + actionBar.setHomeButtonEnabled(true); + } + + drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); + + nv = (NavigationView) findViewById(R.id.nvView); + nv.inflateHeaderView(R.layout.drawer_header); + nv.inflateMenu(R.menu.drawer); + + nv.setNavigationItemSelectedListener( + new NavigationView.OnNavigationItemSelectedListener() { + @Override + public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) { + selectDrawerItem(menuItem); + return true; + } + }); + + drawerToggle = new ActionBarDrawerToggle(this, drawerLayout, R.string.app_drawer_open, R.string.app_drawer_closed) { + + public void onDrawerOpened(View drawerView) { + super.onDrawerOpened(drawerView); + invalidateOptionsMenu(); + } + + public void onDrawerClosed(View view) { + super.onDrawerClosed(view); + invalidateOptionsMenu(); + } + }; + drawerToggle.setDrawerIndicatorEnabled(true); + drawerLayout.addDrawerListener(drawerToggle); + + + // SETUP INITIAL VIEW + nv.getMenu().getItem(0).setChecked(true); + prev = single_home.class; + clearBackStack(); + transition(new single_home()); + + } + + static void transition(final Fragment f) { + f.setMenuVisibility(false); + FragmentTransaction transaction = fm.beginTransaction(); + transaction.setCustomAnimations(R.anim.enter, R.anim.exit, R.anim.pop_enter, R.anim.pop_exit); + transaction.replace(R.id.flContent, f); + transaction.addToBackStack(null); + transaction.commit(); + } + + static void clearBackStack() { + fm.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE); + } + + public static void setActionBarTitle(final String s) { + actionBar.setTitle(s); + } + + private void selectDrawerItem(MenuItem menuItem) { + Fragment fragment = null; + Class fragmentClass; + + switch (menuItem.getItemId()) { + case R.id.drawer_item_home: + fragmentClass = single_home.class; + break; + case R.id.drawer_item_maps: + fragmentClass = single_maps.class; + break; + case R.id.drawer_item_ops: + fragmentClass = group_ops.class; + break; + case R.id.drawer_item_weapons: + fragmentClass = group_weapons.class; + break; + case R.id.drawer_item_shuffle: + fragmentClass = single_rand.class; + break; +// case R.id.drawer_item_settings: +// fragmentClass = error.class; +// break; + case R.id.drawer_item_info: + fragmentClass = single_about.class; + break; + default: + fragmentClass = error.class; + } + + menuItem.setChecked(true); + drawerLayout.closeDrawers(); + + // If the fragment is already loaded + if (prev == fragmentClass) + return; + prev = fragmentClass; + + try { + fragment = (Fragment) fragmentClass.newInstance(); + } catch (Exception e) { + e.printStackTrace(); + } + + clearBackStack(); + transition(fragment); + } + + @Override + public void onBackPressed() { + if (drawerLayout.isDrawerOpen(GravityCompat.START)) + // If the drawer is open, close it + drawerLayout.closeDrawer(GravityCompat.START); + else if (fm.getBackStackEntryCount() == 1 && !actionBar.getTitle().equals(getString(R.string.nav_home))) { + // If there is only one left, return to home + clearBackStack(); + FragmentTransaction transaction = fm.beginTransaction(); + transaction.setCustomAnimations(R.anim.enter, R.anim.exit, R.anim.pop_enter, R.anim.pop_exit); + transaction.replace(R.id.flContent, new single_home()); + transaction.commit(); + } else if (fm.getBackStackEntryCount() < 1 || (fm.getBackStackEntryCount() < 2 && actionBar.getTitle().equals(getString(R.string.nav_home)))) + // If already home -> close the app + finish(); + else + // Just go back to previous window + fm.popBackStack(); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + if (item.getItemId() == android.R.id.home) { + if (drawerLayout.isDrawerOpen(GravityCompat.START)) + drawerLayout.closeDrawer(GravityCompat.START); + else + drawerLayout.openDrawer(GravityCompat.START); + return true; + } + return super.onOptionsItemSelected(item); + } + + @Override + protected void onPostCreate(Bundle savedInstanceState) { + super.onPostCreate(savedInstanceState); + drawerToggle.syncState(); + } +} diff --git a/App/app/src/main/java/io/nicco/r6s/single_about.java b/App/app/src/main/java/io/nicco/r6s/single_about.java new file mode 100644 index 0000000..704b4ff --- /dev/null +++ b/App/app/src/main/java/io/nicco/r6s/single_about.java @@ -0,0 +1,73 @@ +package io.nicco.r6s; + +import android.content.ActivityNotFoundException; +import android.content.Intent; +import android.net.Uri; +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +public class single_about extends Fragment { + + private void openUrl(String url) { + Intent i = new Intent(Intent.ACTION_VIEW); + i.setData(Uri.parse(url)); + try { + startActivity(i); + } catch (ActivityNotFoundException e) { + e.printStackTrace(); + } + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + View v = inflater.inflate(R.layout.frag_single_about, container, false); + + main.setActionBarTitle(getString(R.string.nav_about)); + + setHasOptionsMenu(false); + + // Set the current version name + ((TextView) v.findViewById(R.id.single_about_version)).setText("V" + BuildConfig.VERSION_NAME + " "); + + v.findViewById(R.id.single_about_changelog).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + openUrl(main.ABOUT_CHANGES); + } + }); + + v.findViewById(R.id.single_about_contribute).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + openUrl(main.ABOUT_GIT); + } + }); + + v.findViewById(R.id.single_about_report).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { +// Intent i = new Intent(Intent.ACTION_SEND); +// i.setType("message/rfc822"); +// i.putExtra(Intent.EXTRA_EMAIL, main.ABOUT_EMAIL); +// i.putExtra(Intent.EXTRA_SUBJECT, "Bughunter"); +// i.putExtra(Intent.EXTRA_TEXT, "Hi, i found this awesome bug!"); +// startActivity(Intent.createChooser(i, "Send...")); + + openUrl(main.ABOUT_BUG); + } + }); + + v.findViewById(R.id.single_about_img).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + openUrl(main.ABOUT_GIT); + } + }); + + return v; + } +} diff --git a/App/app/src/main/java/io/nicco/r6s/single_home.java b/App/app/src/main/java/io/nicco/r6s/single_home.java new file mode 100644 index 0000000..9303ce3 --- /dev/null +++ b/App/app/src/main/java/io/nicco/r6s/single_home.java @@ -0,0 +1,39 @@ +package io.nicco.r6s; + +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +public class single_home extends Fragment { + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + View v = inflater.inflate(R.layout.frag_single_home, container, false); + + main.setActionBarTitle(getString(R.string.nav_home)); + + v.findViewById(R.id.single_home_btn_ops).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + main.transition(new group_ops()); + } + }); + v.findViewById(R.id.single_home_btn_weapons).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + main.transition(new group_weapons()); + } + }); + v.findViewById(R.id.single_home_btn_maps).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + main.transition(new single_maps()); + } + }); + + return v; + } + +} diff --git a/App/app/src/main/java/io/nicco/r6s/single_maps.java b/App/app/src/main/java/io/nicco/r6s/single_maps.java new file mode 100644 index 0000000..a392697 --- /dev/null +++ b/App/app/src/main/java/io/nicco/r6s/single_maps.java @@ -0,0 +1,79 @@ +package io.nicco.r6s; + + +import android.content.Context; +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.ArrayAdapter; +import android.widget.Spinner; +import android.widget.TextView; + +import java.util.List; + +public class single_maps extends Fragment { + + private final List maps = ModelMap.getMaps(); + private TextView maps_floor_txt; + private TouchImageView img; + private ModelMap map; + + private void setImg(ModelMap map) { + img.setImageDrawable(map.getImage()); + maps_floor_txt.setText(String.valueOf(map.floor)); + } + + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + View view = inflater.inflate(R.layout.frag_single_maps, container, false); + + main.setActionBarTitle(getString(R.string.nav_maps)); + + map = new ModelMap(new ID(ID.MAP, "0")); + + Spinner maps_sel = (Spinner) view.findViewById(R.id.single_maps_spinner); + maps_floor_txt = (TextView) view.findViewById(R.id.single_maps_floor_txt); + img = (TouchImageView) view.findViewById(R.id.single_maps_img); + + maps_sel.setAdapter(new ArrayAdapter<>(getActivity(), android.R.layout.simple_spinner_dropdown_item, ModelMap.getMapsNames())); + maps_sel.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { + @Override + public void onItemSelected(AdapterView parentView, View selectedItemView, int position, long id) { + map = maps.get(position); + setImg(map); + } + + @Override + public void onNothingSelected(AdapterView parentView) { + } + }); + + view.findViewById(R.id.single_maps_btn_up).setOnClickListener(new View.OnClickListener() { + public void onClick(View v) { + map.setFloor(true); + setImg(map); + } + }); + view.findViewById(R.id.single_maps_btn_down).setOnClickListener(new View.OnClickListener() { + public void onClick(View v) { + map.setFloor(false); + setImg(map); + } + }); + + int showed_toast = Integer.parseInt(getActivity().getPreferences(Context.MODE_PRIVATE).getString(main.TAG_ALERT_MAP, "0")); + if (showed_toast < main.NUM_ALERTS) { +// Toast.makeText(getActivity(), "Pinch the Map, You can ZOOM!", Toast.LENGTH_LONG).show(); + getActivity().getPreferences(Context.MODE_PRIVATE).edit().putString(main.TAG_ALERT_MAP, String.valueOf(++showed_toast)).apply(); + } + + img.resetZoom(); + + return view; + } + +} diff --git a/App/app/src/main/java/io/nicco/r6s/single_op.java b/App/app/src/main/java/io/nicco/r6s/single_op.java new file mode 100644 index 0000000..8126755 --- /dev/null +++ b/App/app/src/main/java/io/nicco/r6s/single_op.java @@ -0,0 +1,128 @@ +package io.nicco.r6s; + + +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.drawable.BitmapDrawable; +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.ViewTreeObserver; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.TextView; + +public class single_op extends Fragment { + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + + final View v = inflater.inflate(R.layout.frag_single_op, container, false); + + //Get Operator Info + Bundle b = this.getArguments(); + final ModelOp op = new ModelOp(new ID(ID.OPERATOR, b.getString("ID"))); + + main.setActionBarTitle(op.name); + + LinearLayout row0 = (LinearLayout) v.findViewById(R.id.single_op_row0); + LinearLayout row1 = (LinearLayout) v.findViewById(R.id.single_op_row1); + LinearLayout row2 = (LinearLayout) v.findViewById(R.id.single_op_row2); + + // Set the text views + ((TextView) v.findViewById(R.id.single_op_name)).setText(op.name); + ((TextView) v.findViewById(R.id.single_op_faction)).setText(op.getFaction()); + ((TextView) v.findViewById(R.id.single_op_armor)).setText(String.valueOf(op.armor)); + ((TextView) v.findViewById(R.id.single_op_speed)).setText(String.valueOf(op.speed)); + ((TextView) v.findViewById(R.id.single_op_type)).setText(op.getTypeLong()); + ((TextView) v.findViewById(R.id.single_op_ability)).setText(op.ability); + + for (ID wpnId : op.weapons) { + final ModelWeapon wpn = wpnId.get(); + LinearLayout curItem = Static.mkItem(wpn.name, getActivity()); + + curItem.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Bundle b = new Bundle(); + b.putString("ID", wpn.id.id); + Fragment f = new single_weapon(); + f.setArguments(b); + main.transition(f); + } + }); + if (wpn.slot == 0) { + row0.addView(curItem); + } else { + row1.addView(curItem); + } + } + + for (final ID gadgetId : op.gadgets) { + final ModelGadget gadget = gadgetId.get(); + LinearLayout curItem = Static.mkItem(gadget.name, getActivity()); + +// curItem.setOnClickListener(new View.OnClickListener() { +// @Override +// public void onClick(View v) { +// Bundle b = new Bundle(); +// b.putString("ID", curWeapon.id.id); +//// Fragment f = new (); +//// f.setArguments(b); +//// main.transition(f); +// } +// }); + row2.addView(curItem); + } + + // Setting the icon + ((ImageView) v.findViewById(R.id.single_op_icon)).setImageDrawable(op.getIcon()); + + // Setting the bg image + v.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { + @Override + public void onGlobalLayout() { + ImageView op_bg = (ImageView) v.findViewById(R.id.single_op_img); + Bitmap bitmap = ((BitmapDrawable) op.getImage()).getBitmap(); + + int b_h = bitmap.getHeight(); + int b_w = bitmap.getWidth(); + int bg_h = op_bg.getHeight(); + int bg_w = op_bg.getWidth(); + float ratio = (float) bg_h / bg_w; + + try { + if (ratio > 1) { + // BG is portrait + if (b_h > b_w) + bitmap = Bitmap.createBitmap(bitmap, 0, 0, b_w, Math.min((int) (b_w * ratio), b_h)); + else + bitmap = Bitmap.createBitmap(bitmap, 0, 0, Math.min((int) (b_w / ratio), b_h), b_w); + } else { + // BG is landscape + if (b_h > b_w) + bitmap = Bitmap.createBitmap(bitmap, 0, 0, b_w, (int) (b_w * ratio)); + else + bitmap = Bitmap.createBitmap(bitmap, 0, 0, b_h, (int) (b_h * ratio)); + } + } catch (Exception e) { + e.printStackTrace(); + } + + //Crop + op_bg.setImageBitmap(bitmap); + } + }); + + int showed_toast = Integer.parseInt(getActivity().getPreferences(Context.MODE_PRIVATE).getString(main.TAG_ALERT_OP, "0")); + if (showed_toast < main.NUM_ALERTS) { +// Snackbar.make(v, "Scroll down to see more!", Snackbar.LENGTH_LONG).show(); + getActivity().getPreferences(Context.MODE_PRIVATE).edit().putString(main.TAG_ALERT_OP, String.valueOf(++showed_toast)).apply(); + } + + return v; + } + +} diff --git a/App/app/src/main/java/io/nicco/r6s/single_rand.java b/App/app/src/main/java/io/nicco/r6s/single_rand.java new file mode 100644 index 0000000..61ddb26 --- /dev/null +++ b/App/app/src/main/java/io/nicco/r6s/single_rand.java @@ -0,0 +1,156 @@ +package io.nicco.r6s; + + +import android.graphics.Color; +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import java.util.Random; + +public class single_rand extends Fragment { + + private TextView t0, t1, t2, t3; + + private int rand_clr() { + // Retorn a random color + return Color.argb(255, rand_int(256), rand_int(256), rand_int(256)); + } + + private int rand_int(int max) { + if (max < 1) + return 0; + else + return new Random().nextInt(max); + } + + private Rand rand_obj(int i) { + Rand ret = new Rand(); + + ModelOp[] ops; + switch (i) { + case 0: + ops = ModelOp.getAttackers(); + break; + case 1: + ops = ModelOp.getDefenders(); + break; + default: + ops = new ModelOp[0]; + } + + // Get a random op + ret.op = ops[rand_int(ops.length)]; + + // From the random op choose random attributes + try { + // Get a random from primary guns + ret.main = ret.op.getPrimary()[ + rand_int(ret.op.getPrimary().length)]; + // Get a random from Side guns + ret.side = ret.op.getSecondary()[ + rand_int(ret.op.getSecondary().length)]; + // Get a random from pgadgets + ret.gadget = new ModelGadget( + ret.op.getGadgetsIds()[ + rand_int(ret.op.getGadgetsIds().length)]); + + } catch (ArrayIndexOutOfBoundsException e) { + // If there is aproblem with the json, don't make it crash + e.printStackTrace(); + } + + return ret; + } + + private void rand(int i) { + final Rand r = rand_obj(i); + + // Set the text content + t0.setText(r.op.name); + t1.setText(r.main.name); + t2.setText(r.side.name); + t3.setText(r.gadget.name); + + // Set onclick listener to get to the specifics + t0.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Bundle b = new Bundle(); + b.putString("ID", r.op.id.id); + Fragment f = new single_op(); + f.setArguments(b); + main.transition(f); + } + }); + t1.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Bundle b = new Bundle(); + b.putString("ID", r.main.id.id); + Fragment f = new single_weapon(); + f.setArguments(b); + main.transition(f); + } + }); + t2.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Bundle b = new Bundle(); + b.putString("ID", r.side.id.id); + Fragment f = new single_weapon(); + f.setArguments(b); + main.transition(f); + } + }); + + // Set colors + t0.setBackgroundColor(rand_clr()); + t1.setBackgroundColor(rand_clr()); + t2.setBackgroundColor(rand_clr()); + t3.setBackgroundColor(rand_clr()); + + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + View v = inflater.inflate(R.layout.frag_single_rand, container, false); + + main.setActionBarTitle(getString(R.string.nav_rand)); + + t0 = (TextView) v.findViewById(R.id.single_rand_t0); + t1 = (TextView) v.findViewById(R.id.single_rand_t1); + t2 = (TextView) v.findViewById(R.id.single_rand_t2); + t3 = (TextView) v.findViewById(R.id.single_rand_t3); + + v.findViewById(R.id.single_rand_btn_att).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + rand(0); + } + }); + + v.findViewById(R.id.single_rand_btn_def).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + rand(1); + } + }); + + return v; + } + + private class Rand { + ModelOp op; + ModelWeapon main; + ModelWeapon side; + ModelGadget gadget; + + Rand() { + } + } + +} diff --git a/App/app/src/main/java/io/nicco/r6s/single_weapon.java b/App/app/src/main/java/io/nicco/r6s/single_weapon.java new file mode 100644 index 0000000..be929fb --- /dev/null +++ b/App/app/src/main/java/io/nicco/r6s/single_weapon.java @@ -0,0 +1,58 @@ +package io.nicco.r6s; + + +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.TextView; + +public class single_weapon extends Fragment { + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + View v = inflater.inflate(R.layout.frag_single_weapon, container, false); + + //Get Gun Info + final ModelWeapon wpn = new ModelWeapon(new ID(ID.WEAPON, getArguments().getString("ID"))); + + main.setActionBarTitle(wpn.name); + + LinearLayout row0 = (LinearLayout) v.findViewById(R.id.single_weapon_row0); + + ((TextView) v.findViewById(R.id.single_weapon_name)).setText(wpn.name); + ((TextView) v.findViewById(R.id.single_weapon_type)).setText(wpn.getTypeShort()); + ((TextView) v.findViewById(R.id.single_weapon_dmg_b)).setText(String.valueOf(wpn.dmg_n)); + ((TextView) v.findViewById(R.id.single_weapon_dmg_s)).setText(String.valueOf(wpn.dmg_s)); + ((TextView) v.findViewById(R.id.single_weapon_mag)).setText(String.valueOf(wpn.mag)); + ((TextView) v.findViewById(R.id.single_weapon_mob)).setText(String.valueOf(wpn.mob)); + ((TextView) v.findViewById(R.id.single_weapon_rpm)).setText(String.valueOf(wpn.rpm)); + ((TextView) v.findViewById(R.id.single_weapon_slot)).setText(String.valueOf(wpn.getSlotLong())); + + //Setting Image + ((ImageView) v.findViewById(R.id.single_weapon_img)).setImageDrawable(wpn.getImage()); + + for (final ID opId : wpn.ops) { + final ModelOp op = opId.get(); + LinearLayout curItem = Static.mkItem(op.name, getActivity()); + + curItem.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Bundle b = new Bundle(); + b.putString("ID", op.id.id); + Fragment f = new single_op(); + f.setArguments(b); + main.transition(f); + } + }); + + row0.addView(curItem); + } + + return v; + } +} diff --git a/App/app/src/main/res/anim/enter.xml b/App/app/src/main/res/anim/enter.xml new file mode 100644 index 0000000..d616ae8 --- /dev/null +++ b/App/app/src/main/res/anim/enter.xml @@ -0,0 +1,20 @@ + + + + + + + + + \ No newline at end of file diff --git a/App/app/src/main/res/anim/exit.xml b/App/app/src/main/res/anim/exit.xml new file mode 100644 index 0000000..ed9b0cc --- /dev/null +++ b/App/app/src/main/res/anim/exit.xml @@ -0,0 +1,21 @@ + + + + + + + + + + \ No newline at end of file diff --git a/App/app/src/main/res/anim/pop_enter.xml b/App/app/src/main/res/anim/pop_enter.xml new file mode 100644 index 0000000..54d5644 --- /dev/null +++ b/App/app/src/main/res/anim/pop_enter.xml @@ -0,0 +1,21 @@ + + + + + + + + + + \ No newline at end of file diff --git a/App/app/src/main/res/anim/pop_exit.xml b/App/app/src/main/res/anim/pop_exit.xml new file mode 100644 index 0000000..69a50a1 --- /dev/null +++ b/App/app/src/main/res/anim/pop_exit.xml @@ -0,0 +1,20 @@ + + + + + + + + + \ No newline at end of file diff --git a/App/app/src/main/res/color/navigation_drawer_item_color.xml b/App/app/src/main/res/color/navigation_drawer_item_color.xml new file mode 100644 index 0000000..2a83e84 --- /dev/null +++ b/App/app/src/main/res/color/navigation_drawer_item_color.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/R6S/app/src/main/res/drawable-xxhdpi/bg_w_c.jpg b/App/app/src/main/res/drawable/bg_abstract_0.jpg similarity index 100% rename from R6S/app/src/main/res/drawable-xxhdpi/bg_w_c.jpg rename to App/app/src/main/res/drawable/bg_abstract_0.jpg diff --git a/App/app/src/main/res/drawable/bg_primary.xml b/App/app/src/main/res/drawable/bg_primary.xml new file mode 100644 index 0000000..f142b69 --- /dev/null +++ b/App/app/src/main/res/drawable/bg_primary.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/App/app/src/main/res/drawable/ic_bars.png b/App/app/src/main/res/drawable/ic_bars.png new file mode 100644 index 0000000..4567c23 Binary files /dev/null and b/App/app/src/main/res/drawable/ic_bars.png differ diff --git a/App/app/src/main/res/drawable/ic_drop_down.xml b/App/app/src/main/res/drawable/ic_drop_down.xml new file mode 100644 index 0000000..534b2bf --- /dev/null +++ b/App/app/src/main/res/drawable/ic_drop_down.xml @@ -0,0 +1,11 @@ + + + + + diff --git a/App/app/src/main/res/drawable/ic_home.xml b/App/app/src/main/res/drawable/ic_home.xml new file mode 100644 index 0000000..125e46e --- /dev/null +++ b/App/app/src/main/res/drawable/ic_home.xml @@ -0,0 +1,9 @@ + + + diff --git a/App/app/src/main/res/drawable/ic_info.png b/App/app/src/main/res/drawable/ic_info.png new file mode 100644 index 0000000..cab4fe5 Binary files /dev/null and b/App/app/src/main/res/drawable/ic_info.png differ diff --git a/App/app/src/main/res/drawable/ic_maps.png b/App/app/src/main/res/drawable/ic_maps.png new file mode 100644 index 0000000..e051aa5 Binary files /dev/null and b/App/app/src/main/res/drawable/ic_maps.png differ diff --git a/App/app/src/main/res/drawable/ic_menu.xml b/App/app/src/main/res/drawable/ic_menu.xml new file mode 100644 index 0000000..114a1b0 --- /dev/null +++ b/App/app/src/main/res/drawable/ic_menu.xml @@ -0,0 +1,11 @@ + + + + + diff --git a/App/app/src/main/res/drawable/ic_more_vert.xml b/App/app/src/main/res/drawable/ic_more_vert.xml new file mode 100644 index 0000000..8b060f2 --- /dev/null +++ b/App/app/src/main/res/drawable/ic_more_vert.xml @@ -0,0 +1,11 @@ + + + + + diff --git a/App/app/src/main/res/drawable/ic_operators.png b/App/app/src/main/res/drawable/ic_operators.png new file mode 100644 index 0000000..8ade4af Binary files /dev/null and b/App/app/src/main/res/drawable/ic_operators.png differ diff --git a/App/app/src/main/res/drawable/ic_r.xml b/App/app/src/main/res/drawable/ic_r.xml new file mode 100644 index 0000000..1271be0 --- /dev/null +++ b/App/app/src/main/res/drawable/ic_r.xml @@ -0,0 +1,10 @@ + + + + diff --git a/App/app/src/main/res/drawable/ic_settings.png b/App/app/src/main/res/drawable/ic_settings.png new file mode 100644 index 0000000..0de3e08 Binary files /dev/null and b/App/app/src/main/res/drawable/ic_settings.png differ diff --git a/App/app/src/main/res/drawable/ic_shuffle.png b/App/app/src/main/res/drawable/ic_shuffle.png new file mode 100644 index 0000000..7f8bcef Binary files /dev/null and b/App/app/src/main/res/drawable/ic_shuffle.png differ diff --git a/App/app/src/main/res/drawable/ic_sort.xml b/App/app/src/main/res/drawable/ic_sort.xml new file mode 100644 index 0000000..8f4129e --- /dev/null +++ b/App/app/src/main/res/drawable/ic_sort.xml @@ -0,0 +1,9 @@ + + + diff --git a/App/app/src/main/res/drawable/ic_weapons.png b/App/app/src/main/res/drawable/ic_weapons.png new file mode 100644 index 0000000..12a9c70 Binary files /dev/null and b/App/app/src/main/res/drawable/ic_weapons.png differ diff --git a/R6S/app/src/main/res/drawable/line_gradient.xml b/App/app/src/main/res/drawable/line_gradient.xml similarity index 100% rename from R6S/app/src/main/res/drawable/line_gradient.xml rename to App/app/src/main/res/drawable/line_gradient.xml diff --git a/App/app/src/main/res/drawable/logo_github_b.png b/App/app/src/main/res/drawable/logo_github_b.png new file mode 100644 index 0000000..9490ffc Binary files /dev/null and b/App/app/src/main/res/drawable/logo_github_b.png differ diff --git a/App/app/src/main/res/drawable/logo_github_w.png b/App/app/src/main/res/drawable/logo_github_w.png new file mode 100644 index 0000000..5c0edba Binary files /dev/null and b/App/app/src/main/res/drawable/logo_github_w.png differ diff --git a/App/app/src/main/res/drawable/round_box.xml b/App/app/src/main/res/drawable/round_box.xml new file mode 100644 index 0000000..280513d --- /dev/null +++ b/App/app/src/main/res/drawable/round_box.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/App/app/src/main/res/drawable/round_box_inv.xml b/App/app/src/main/res/drawable/round_box_inv.xml new file mode 100644 index 0000000..e8b4892 --- /dev/null +++ b/App/app/src/main/res/drawable/round_box_inv.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/R6S/app/src/main/res/drawable/weapon_selector.xml b/App/app/src/main/res/drawable/tag.xml similarity index 68% rename from R6S/app/src/main/res/drawable/weapon_selector.xml rename to App/app/src/main/res/drawable/tag.xml index d1ca971..4c10365 100644 --- a/R6S/app/src/main/res/drawable/weapon_selector.xml +++ b/App/app/src/main/res/drawable/tag.xml @@ -3,14 +3,14 @@ android:shape="rectangle"> - + + android:color="@color/text_dark" /> - + \ No newline at end of file diff --git a/App/app/src/main/res/layout/drawer_header.xml b/App/app/src/main/res/layout/drawer_header.xml new file mode 100644 index 0000000..96f5462 --- /dev/null +++ b/App/app/src/main/res/layout/drawer_header.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/App/app/src/main/res/layout/frag_error.xml b/App/app/src/main/res/layout/frag_error.xml new file mode 100644 index 0000000..ef925d2 --- /dev/null +++ b/App/app/src/main/res/layout/frag_error.xml @@ -0,0 +1,14 @@ + + + + + diff --git a/App/app/src/main/res/layout/frag_group_ops.xml b/App/app/src/main/res/layout/frag_group_ops.xml new file mode 100644 index 0000000..2f0d1a7 --- /dev/null +++ b/App/app/src/main/res/layout/frag_group_ops.xml @@ -0,0 +1,17 @@ + + + + + + + diff --git a/App/app/src/main/res/layout/frag_group_weapons.xml b/App/app/src/main/res/layout/frag_group_weapons.xml new file mode 100644 index 0000000..4b3c972 --- /dev/null +++ b/App/app/src/main/res/layout/frag_group_weapons.xml @@ -0,0 +1,17 @@ + + + + + + + diff --git a/App/app/src/main/res/layout/frag_list_std.xml b/App/app/src/main/res/layout/frag_list_std.xml new file mode 100644 index 0000000..ac43c0a --- /dev/null +++ b/App/app/src/main/res/layout/frag_list_std.xml @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/App/app/src/main/res/layout/frag_single_about.xml b/App/app/src/main/res/layout/frag_single_about.xml new file mode 100644 index 0000000..40a98f0 --- /dev/null +++ b/App/app/src/main/res/layout/frag_single_about.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + diff --git a/App/app/src/main/res/layout/frag_single_home.xml b/App/app/src/main/res/layout/frag_single_home.xml new file mode 100644 index 0000000..a9c2fc5 --- /dev/null +++ b/App/app/src/main/res/layout/frag_single_home.xml @@ -0,0 +1,83 @@ + + + + + + + + + + + + + + + + +