mirror of
https://gitlab.com/lecarore/breakout71.git
synced 2025-04-22 21:16:14 -04:00
Initial commit
I cleared the project history to start fresh on the public version
This commit is contained in:
commit
d2cfce2a0e
34 changed files with 11578 additions and 0 deletions
1
app/.gitignore
vendored
Normal file
1
app/.gitignore
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
/build
|
83
app/build.gradle.kts
Normal file
83
app/build.gradle.kts
Normal file
|
@ -0,0 +1,83 @@
|
|||
import java.time.ZonedDateTime
|
||||
import java.time.format.DateTimeFormatter
|
||||
import java.time.ZoneId
|
||||
|
||||
plugins {
|
||||
alias(libs.plugins.androidApplication)
|
||||
alias(libs.plugins.jetbrainsKotlinAndroid)
|
||||
}
|
||||
|
||||
android {
|
||||
namespace = "me.lecaro.breakout"
|
||||
compileSdk = 34
|
||||
|
||||
defaultConfig {
|
||||
applicationId = "me.lecaro.breakout"
|
||||
minSdk = 21
|
||||
targetSdk = 34
|
||||
// versionCode = 7
|
||||
// versionName = "7.0"
|
||||
|
||||
// Get the current Unix timestamp in seconds
|
||||
versionCode = (System.currentTimeMillis() / 1000/60).toInt()
|
||||
// Get the current date as a string
|
||||
versionName = ZonedDateTime.now(ZoneId.of("CET"))
|
||||
.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))
|
||||
|
||||
|
||||
|
||||
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
|
||||
vectorDrawables {
|
||||
useSupportLibrary = true
|
||||
}
|
||||
}
|
||||
|
||||
buildTypes {
|
||||
release {
|
||||
isMinifyEnabled = true
|
||||
isShrinkResources = true
|
||||
proguardFiles(
|
||||
getDefaultProguardFile("proguard-android-optimize.txt"),
|
||||
"proguard-rules.pro"
|
||||
)
|
||||
signingConfig = signingConfigs.getByName("debug")
|
||||
}
|
||||
}
|
||||
compileOptions {
|
||||
sourceCompatibility = JavaVersion.VERSION_1_8
|
||||
targetCompatibility = JavaVersion.VERSION_1_8
|
||||
}
|
||||
kotlinOptions {
|
||||
jvmTarget = "1.8"
|
||||
}
|
||||
buildFeatures {
|
||||
// compose = true
|
||||
}
|
||||
composeOptions {
|
||||
kotlinCompilerExtensionVersion = "1.5.1"
|
||||
}
|
||||
packaging {
|
||||
resources {
|
||||
excludes += "/META-INF/{AL2.0,LGPL2.1}"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//dependencies {
|
||||
//
|
||||
// implementation(libs.androidx.core.ktx)
|
||||
// implementation(libs.androidx.lifecycle.runtime.ktx)
|
||||
// implementation(libs.androidx.activity.compose)
|
||||
// implementation(platform(libs.androidx.compose.bom))
|
||||
// implementation(libs.androidx.ui)
|
||||
// implementation(libs.androidx.ui.graphics)
|
||||
// implementation(libs.androidx.ui.tooling.preview)
|
||||
// implementation(libs.androidx.material3)
|
||||
// testImplementation(libs.junit)
|
||||
// androidTestImplementation(libs.androidx.junit)
|
||||
// androidTestImplementation(libs.androidx.espresso.core)
|
||||
// androidTestImplementation(platform(libs.androidx.compose.bom))
|
||||
// androidTestImplementation(libs.androidx.ui.test.junit4)
|
||||
// debugImplementation(libs.androidx.ui.tooling)
|
||||
// debugImplementation(libs.androidx.ui.test.manifest)
|
||||
//}
|
21
app/proguard-rules.pro
vendored
Normal file
21
app/proguard-rules.pro
vendored
Normal file
|
@ -0,0 +1,21 @@
|
|||
# Add project specific ProGuard rules here.
|
||||
# You can control the set of applied configuration files using the
|
||||
# proguardFiles setting in build.gradle.
|
||||
#
|
||||
# For more details, see
|
||||
# http://developer.android.com/guide/developing/tools/proguard.html
|
||||
|
||||
# If your project uses WebView with JS, uncomment the following
|
||||
# and specify the fully qualified class name to the JavaScript interface
|
||||
# class:
|
||||
#-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
|
26
app/src/main/AndroidManifest.xml
Normal file
26
app/src/main/AndroidManifest.xml
Normal file
|
@ -0,0 +1,26 @@
|
|||
<?xml version="1.0" encoding ="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools">
|
||||
|
||||
<application
|
||||
android:allowBackup="true"
|
||||
android:dataExtractionRules="@xml/data_extraction_rules"
|
||||
android:fullBackupContent="@xml/backup_rules"
|
||||
android:icon="@drawable/icon"
|
||||
android:roundIcon="@drawable/icon"
|
||||
android:label="@string/app_name"
|
||||
android:supportsRtl="true"
|
||||
tools:targetApi="31">
|
||||
<activity
|
||||
|
||||
android:name=".MainActivity"
|
||||
android:screenOrientation="portrait"
|
||||
android:exported="true"
|
||||
android:label="Breakout 71">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
<category android:name="android.intent.category.LAUNCHER" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
</application>
|
||||
</manifest>
|
2200
app/src/main/assets/game.js
Normal file
2200
app/src/main/assets/game.js
Normal file
File diff suppressed because it is too large
Load diff
146
app/src/main/assets/icon.svg
Normal file
146
app/src/main/assets/icon.svg
Normal file
|
@ -0,0 +1,146 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="64"
|
||||
height="64"
|
||||
viewBox="0 0 16.933333 16.933333"
|
||||
version="1.1"
|
||||
id="svg5"
|
||||
xml:space="preserve"
|
||||
sodipodi:docname="icon.svg"
|
||||
inkscape:export-filename="icon.png"
|
||||
inkscape:export-xdpi="768"
|
||||
inkscape:export-ydpi="768"
|
||||
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"><sodipodi:namedview
|
||||
id="namedview212"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#999999"
|
||||
borderopacity="1"
|
||||
inkscape:showpageshadow="0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
showgrid="false"
|
||||
inkscape:zoom="5.84375"
|
||||
inkscape:cx="30.802139"
|
||||
inkscape:cy="32.085561"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1080"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="layer1" /><defs
|
||||
id="defs2" /><g
|
||||
id="layer1"><rect
|
||||
style="fill:#030b1f;fill-opacity:1;stroke-width:0.819666;stroke-linecap:round;stroke-linejoin:round;paint-order:markers stroke fill;stop-color:#000000"
|
||||
id="rect234"
|
||||
width="16.933332"
|
||||
height="16.933332"
|
||||
x="0"
|
||||
y="0" /><rect
|
||||
style="fill:#ffffff;fill-opacity:1;stroke-width:0.730758;stroke-linecap:round;stroke-linejoin:round;paint-order:markers stroke fill;stop-color:#000000"
|
||||
id="rect1706"
|
||||
width="4.2333331"
|
||||
height="2.1166666"
|
||||
x="2.5952761"
|
||||
y="14.816667" /><path
|
||||
style="fill:#ffffff;fill-opacity:1;stroke-width:0.840585;stroke-linecap:round;stroke-linejoin:round;paint-order:markers stroke fill;stop-color:#000000"
|
||||
id="path1760"
|
||||
d="M 8.6672224,9.1329346 A 1.0583333,1.0583333 0 0 1 7.6113975,10.191265 1.0583333,1.0583333 0 0 1 6.5505677,9.1379514 1.0583333,1.0583333 0 0 1 7.6013639,8.074628 1.0583333,1.0583333 0 0 1 8.6671748,9.122901" /><path
|
||||
style="fill:#8953e5;fill-opacity:1;stroke-width:0.271844;stroke-linecap:round;stroke-linejoin:round;paint-order:markers stroke fill;stop-color:#000000"
|
||||
id="path1760-2"
|
||||
d="M 7.0868055,6.1665268 A 0.34226292,0.34226292 0 0 1 6.7453538,6.5087888 0.34226292,0.34226292 0 0 1 6.4022835,6.1681492 0.34226292,0.34226292 0 0 1 6.7421089,5.8242725 0.34226292,0.34226292 0 0 1 7.0867901,6.1632819" /><path
|
||||
style="fill:#8953e5;fill-opacity:1;stroke-width:0.271844;stroke-linecap:round;stroke-linejoin:round;paint-order:markers stroke fill;stop-color:#000000"
|
||||
id="path1760-2-7"
|
||||
d="M 9.9609095,4.6433425 A 0.34226292,0.34226292 0 0 1 9.6194578,4.9856045 0.34226292,0.34226292 0 0 1 9.2763875,4.6449649 0.34226292,0.34226292 0 0 1 9.616213,4.3010882 0.34226292,0.34226292 0 0 1 9.9608942,4.6400976" /><path
|
||||
style="fill:#8953e5;fill-opacity:1;stroke-width:0.271844;stroke-linecap:round;stroke-linejoin:round;paint-order:markers stroke fill;stop-color:#000000"
|
||||
id="path1760-2-0"
|
||||
d="M 9.4754292,6.0612068 A 0.34226292,0.34226292 0 0 1 9.1339775,6.4034688 0.34226292,0.34226292 0 0 1 8.7909072,6.0628293 0.34226292,0.34226292 0 0 1 9.1307327,5.7189525 0.34226292,0.34226292 0 0 1 9.4754139,6.057962" /><path
|
||||
style="fill:#8953e5;fill-opacity:1;stroke-width:0.271844;stroke-linecap:round;stroke-linejoin:round;paint-order:markers stroke fill;stop-color:#000000"
|
||||
id="path1760-2-9"
|
||||
d="M 8.7935426,7.682621 A 0.34226292,0.34226292 0 0 1 8.4520909,8.024883 0.34226292,0.34226292 0 0 1 8.1090206,7.6842434 0.34226292,0.34226292 0 0 1 8.448846,7.3403667 0.34226292,0.34226292 0 0 1 8.7935272,7.6793762" /><path
|
||||
style="fill:#8953e5;fill-opacity:1;stroke-width:0.271844;stroke-linecap:round;stroke-linejoin:round;paint-order:markers stroke fill;stop-color:#000000"
|
||||
id="path1760-2-3"
|
||||
d="M 10.550572,7.5443454 A 0.34226292,0.34226292 0 0 1 10.20912,7.8866073 0.34226292,0.34226292 0 0 1 9.8660501,7.5459678 0.34226292,0.34226292 0 0 1 10.205876,7.2020911 0.34226292,0.34226292 0 0 1 10.550557,7.5411005" /><path
|
||||
style="fill:#8953e5;fill-opacity:1;stroke-width:0.271844;stroke-linecap:round;stroke-linejoin:round;paint-order:markers stroke fill;stop-color:#000000"
|
||||
id="path1760-2-6"
|
||||
d="m 11.171486,10.027683 a 0.34226292,0.34226292 0 0 1 -0.341452,0.342262 0.34226292,0.34226292 0 0 1 -0.34307,-0.340639 0.34226292,0.34226292 0 0 1 0.339825,-0.343877 0.34226292,0.34226292 0 0 1 0.344681,0.339009" /><path
|
||||
style="fill:#8953e5;fill-opacity:1;stroke-width:0.271844;stroke-linecap:round;stroke-linejoin:round;paint-order:markers stroke fill;stop-color:#000000"
|
||||
id="path1760-2-06"
|
||||
d="M 9.6700341,9.248889 A 0.34226292,0.34226292 0 0 1 9.3285824,9.5911509 0.34226292,0.34226292 0 0 1 8.9855121,9.2505114 0.34226292,0.34226292 0 0 1 9.3253375,8.9066347 0.34226292,0.34226292 0 0 1 9.6700187,9.2456441" /><path
|
||||
style="fill:#8953e5;fill-opacity:1;stroke-width:0.271844;stroke-linecap:round;stroke-linejoin:round;paint-order:markers stroke fill;stop-color:#000000"
|
||||
id="path1760-2-2"
|
||||
d="m 9.8461224,10.381763 a 0.34226292,0.34226292 0 0 1 -0.3414517,0.342262 0.34226292,0.34226292 0 0 1 -0.3430703,-0.340639 0.34226292,0.34226292 0 0 1 0.3398255,-0.343877 0.34226292,0.34226292 0 0 1 0.3446812,0.33901" /><path
|
||||
style="fill:#8953e5;fill-opacity:1;stroke-width:0.271844;stroke-linecap:round;stroke-linejoin:round;paint-order:markers stroke fill;stop-color:#000000"
|
||||
id="path1760-2-61"
|
||||
d="m 10.677446,12.346528 a 0.34226292,0.34226292 0 0 1 -0.341452,0.342262 0.34226292,0.34226292 0 0 1 -0.3430699,-0.34064 0.34226292,0.34226292 0 0 1 0.3398249,-0.343876 0.34226292,0.34226292 0 0 1 0.344682,0.339009" /><path
|
||||
style="fill:#8953e5;fill-opacity:1;stroke-width:0.271844;stroke-linecap:round;stroke-linejoin:round;paint-order:markers stroke fill;stop-color:#000000"
|
||||
id="path1760-2-8"
|
||||
d="m 12.174136,14.576557 a 0.34226292,0.34226292 0 0 1 -0.341452,0.342262 0.34226292,0.34226292 0 0 1 -0.34307,-0.340639 0.34226292,0.34226292 0 0 1 0.339825,-0.343877 0.34226292,0.34226292 0 0 1 0.344681,0.339009" /><path
|
||||
style="fill:#4aaae5;fill-opacity:1;stroke-width:0.271844;stroke-linecap:round;stroke-linejoin:round;paint-order:markers stroke fill;stop-color:#000000"
|
||||
id="path1760-2-8-7"
|
||||
d="m 12.155115,8.4203005 a 0.34226292,0.34226292 0 0 1 -0.341452,0.3422619 0.34226292,0.34226292 0 0 1 -0.34307,-0.3406395 0.34226292,0.34226292 0 0 1 0.339825,-0.3438767 0.34226292,0.34226292 0 0 1 0.344681,0.3390094" /><path
|
||||
style="fill:#4aaae5;fill-opacity:1;stroke-width:0.271844;stroke-linecap:round;stroke-linejoin:round;paint-order:markers stroke fill;stop-color:#000000"
|
||||
id="path1760-2-8-7-9"
|
||||
d="M 13.807412,9.5352793 A 0.34226292,0.34226292 0 0 1 13.46596,9.8775412 0.34226292,0.34226292 0 0 1 13.12289,9.5369017 0.34226292,0.34226292 0 0 1 13.462715,9.193025 0.34226292,0.34226292 0 0 1 13.807396,9.5320344" /><path
|
||||
style="fill:#4aaae5;fill-opacity:1;stroke-width:0.271844;stroke-linecap:round;stroke-linejoin:round;paint-order:markers stroke fill;stop-color:#000000"
|
||||
id="path1760-2-8-7-2"
|
||||
d="M 10.550572,8.4820604 A 0.34226292,0.34226292 0 0 1 10.20912,8.8243224 0.34226292,0.34226292 0 0 1 9.8660501,8.4836829 0.34226292,0.34226292 0 0 1 10.205876,8.1398062 0.34226292,0.34226292 0 0 1 10.550557,8.4788156" /><path
|
||||
style="fill:#4aaae5;fill-opacity:1;stroke-width:0.271844;stroke-linecap:round;stroke-linejoin:round;paint-order:markers stroke fill;stop-color:#000000"
|
||||
id="path1760-2-8-7-0"
|
||||
d="m 11.829275,6.7558122 a 0.34226292,0.34226292 0 0 1 -0.341452,0.3422619 0.34226292,0.34226292 0 0 1 -0.34307,-0.3406395 0.34226292,0.34226292 0 0 1 0.339825,-0.3438767 0.34226292,0.34226292 0 0 1 0.344681,0.3390094" /><path
|
||||
style="fill:#4aaae5;fill-opacity:1;stroke-width:0.271844;stroke-linecap:round;stroke-linejoin:round;paint-order:markers stroke fill;stop-color:#000000"
|
||||
id="path1760-2-8-7-23"
|
||||
d="m 10.76369,5.8607206 a 0.34226292,0.34226292 0 0 1 -0.341452,0.342262 0.34226292,0.34226292 0 0 1 -0.34307,-0.3406395 0.34226292,0.34226292 0 0 1 0.339825,-0.3438767 0.34226292,0.34226292 0 0 1 0.344681,0.3390094" /><path
|
||||
style="fill:#4aaae5;fill-opacity:1;stroke-width:0.271844;stroke-linecap:round;stroke-linejoin:round;paint-order:markers stroke fill;stop-color:#000000"
|
||||
id="path1760-2-8-7-7"
|
||||
d="M 8.3128425,4.9443169 A 0.34226292,0.34226292 0 0 1 7.9713908,5.2865788 0.34226292,0.34226292 0 0 1 7.6283205,4.9459393 0.34226292,0.34226292 0 0 1 7.968146,4.6020626 0.34226292,0.34226292 0 0 1 8.3128272,4.941072" /><path
|
||||
style="fill:#4aaae5;fill-opacity:1;stroke-width:0.271844;stroke-linecap:round;stroke-linejoin:round;paint-order:markers stroke fill;stop-color:#000000"
|
||||
id="path1760-2-8-7-5"
|
||||
d="M 8.5685832,6.3082666 A 0.34226292,0.34226292 0 0 1 8.2271315,6.6505286 0.34226292,0.34226292 0 0 1 7.8840612,6.3098891 0.34226292,0.34226292 0 0 1 8.2238866,5.9660124 0.34226292,0.34226292 0 0 1 8.5685678,6.3050218" /><path
|
||||
style="fill:#4aaae5;fill-opacity:1;stroke-width:0.271844;stroke-linecap:round;stroke-linejoin:round;paint-order:markers stroke fill;stop-color:#000000"
|
||||
id="path1760-2-8-7-92"
|
||||
d="M 9.7620389,7.0115528 A 0.34226292,0.34226292 0 0 1 9.4205872,7.3538148 0.34226292,0.34226292 0 0 1 9.0775169,7.0131753 0.34226292,0.34226292 0 0 1 9.4173423,6.6692985 0.34226292,0.34226292 0 0 1 9.7620235,7.008308" /><rect
|
||||
style="fill:#4aaae5;fill-opacity:1;stroke-width:1.46181;stroke-linecap:round;stroke-linejoin:round;paint-order:markers stroke fill;stop-color:#000000"
|
||||
id="rect1762"
|
||||
width="4.2333331"
|
||||
height="4.2333331"
|
||||
x="0"
|
||||
y="-6.9388939e-18" /><rect
|
||||
style="fill:#8953e5;fill-opacity:1;stroke-width:1.46181;stroke-linecap:round;stroke-linejoin:round;paint-order:markers stroke fill;stop-color:#000000"
|
||||
id="rect1762-3"
|
||||
width="4.2333331"
|
||||
height="4.2333331"
|
||||
x="4.2333331"
|
||||
y="0" /><rect
|
||||
style="fill:#4aaae5;fill-opacity:1;stroke-width:1.46181;stroke-linecap:round;stroke-linejoin:round;paint-order:markers stroke fill;stop-color:#000000"
|
||||
id="rect1762-5"
|
||||
width="4.2333331"
|
||||
height="4.2333331"
|
||||
x="8.4666662"
|
||||
y="3.469447e-18" /><rect
|
||||
style="fill:#8953e5;fill-opacity:1;stroke-width:1.46181;stroke-linecap:round;stroke-linejoin:round;paint-order:markers stroke fill;stop-color:#000000"
|
||||
id="rect1762-3-3"
|
||||
width="4.2333331"
|
||||
height="4.2333331"
|
||||
x="12.699999"
|
||||
y="3.469447e-18" /><rect
|
||||
style="fill:#4aaae5;fill-opacity:1;stroke-width:1.46181;stroke-linecap:round;stroke-linejoin:round;paint-order:markers stroke fill;stop-color:#000000"
|
||||
id="rect1762-56"
|
||||
width="4.2333331"
|
||||
height="4.2333331"
|
||||
x="-16.933332"
|
||||
y="4.2333331"
|
||||
transform="scale(-1,1)" /><rect
|
||||
style="fill:#8953e5;fill-opacity:1;stroke-width:1.46181;stroke-linecap:round;stroke-linejoin:round;paint-order:markers stroke fill;stop-color:#000000"
|
||||
id="rect1762-3-3-1"
|
||||
width="4.2333331"
|
||||
height="4.2333331"
|
||||
x="-4.2333331"
|
||||
y="4.2333331"
|
||||
transform="scale(-1,1)" /></g></svg>
|
After Width: | Height: | Size: 11 KiB |
21
app/src/main/assets/index.html
Normal file
21
app/src/main/assets/index.html
Normal file
|
@ -0,0 +1,21 @@
|
|||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta
|
||||
name="viewport"
|
||||
content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0"
|
||||
/>
|
||||
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
|
||||
<title>Breakout 𝟕𝟏</title>
|
||||
<link rel="stylesheet" href="style.css?v=5388" />
|
||||
<link rel="icon" href="./icon.svg" />
|
||||
</head>
|
||||
<body>
|
||||
<button id="menu">☰<span> menu</span></button>
|
||||
<button id="score"></button>
|
||||
<canvas id="game"></canvas>
|
||||
<script src="levels.js?v=5388"></script>
|
||||
<script src="game.js?v=5388"></script>
|
||||
</body>
|
||||
</html>
|
6458
app/src/main/assets/levels.js
Normal file
6458
app/src/main/assets/levels.js
Normal file
File diff suppressed because one or more lines are too long
39
app/src/main/assets/privacy.html
Normal file
39
app/src/main/assets/privacy.html
Normal file
|
@ -0,0 +1,39 @@
|
|||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta
|
||||
name="viewport"
|
||||
content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0"
|
||||
/>
|
||||
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
|
||||
<title>Breakout privacy policy</title>
|
||||
<link rel="icon" href="./icon.svg" />
|
||||
|
||||
<style type="text/css">
|
||||
body {
|
||||
max-width: 800px;
|
||||
margin: 40px auto;
|
||||
font-family: sans-serif;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<h1>Privacy policy</h1>
|
||||
<p>
|
||||
<a href="https://breakout.lecaro.me">Breakout 71</a> is published
|
||||
by Renan LE CARO, a French citizen and programmer. You can contact me at
|
||||
this adress : breakout71@lecaro.me
|
||||
</p>
|
||||
<p>
|
||||
If you access breakout.lecaro.me though a web browser, your IP address
|
||||
will be logged on my server to prevent abuses.
|
||||
<a href="https://staging.lecaro.me/">My server</a> is hosted by Hetzner
|
||||
Online GmbH in germany.
|
||||
</p>
|
||||
<p>
|
||||
If you install the app through google play, no information will
|
||||
be collected at all by me.
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
227
app/src/main/assets/style.css
Normal file
227
app/src/main/assets/style.css
Normal file
|
@ -0,0 +1,227 @@
|
|||
* {
|
||||
font-family:
|
||||
Courier New,
|
||||
Courier,
|
||||
Lucida Sans Typewriter,
|
||||
Lucida Typewriter,
|
||||
monospace;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
body {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
overflow: hidden;
|
||||
width: 100vw;
|
||||
height: 100vh;
|
||||
color: white;
|
||||
background-size: 120px 120px;
|
||||
background-color: var(--background1);
|
||||
--background1: #030c23;
|
||||
--background2: #03112a;
|
||||
}
|
||||
|
||||
#game {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
height: 100vh;
|
||||
width: 100vw;
|
||||
}
|
||||
#score,
|
||||
#menu {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
z-index: 1;
|
||||
padding: 10px;
|
||||
appearance: none;
|
||||
background: none;
|
||||
border: none;
|
||||
font: inherit;
|
||||
color: white;
|
||||
min-width: 40px;
|
||||
min-height: 40px;
|
||||
line-height: 20px;
|
||||
}
|
||||
body.black_puck #score,
|
||||
body.black_puck #menu {
|
||||
color:black;
|
||||
}
|
||||
#score:hover,
|
||||
#score:focus,
|
||||
#menu:hover,
|
||||
#menu:focus {
|
||||
background: rgba(0,0,0,0.3);
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
#score {
|
||||
right: 0;
|
||||
}
|
||||
#menu {
|
||||
left: 0;
|
||||
}
|
||||
@media screen and (orientation: portrait) {
|
||||
#menu > span {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
.popup {
|
||||
position: fixed;
|
||||
inset: 0;
|
||||
background: rgba(0, 0, 0, 0.95);
|
||||
z-index: 10;
|
||||
display: flex;
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
.popup > div {
|
||||
margin: auto;
|
||||
padding: 20px;
|
||||
/*border: 1px solid white;*/
|
||||
transform-origin: center;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: stretch;
|
||||
width: 90%;
|
||||
max-width: 450px;
|
||||
}
|
||||
|
||||
.popup > div > * {
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.popup > div > h2,
|
||||
.popup > div > p {
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
.popup > div > button {
|
||||
font:inherit;
|
||||
background: rgba(0, 0, 0, 0.8);
|
||||
color: white;
|
||||
padding: 10px;
|
||||
cursor: pointer;
|
||||
border: 1px solid white;
|
||||
text-align: left;
|
||||
display: flex;
|
||||
gap: 10px;
|
||||
margin-top: -1px;
|
||||
}
|
||||
|
||||
.popup > div > button:not([disabled]):hover,
|
||||
.popup > div > button:not([disabled]):focus {
|
||||
border-color: #f1d33b;
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
|
||||
.popup button.close-modale {
|
||||
color:white;
|
||||
position: absolute;
|
||||
top:0;
|
||||
right:0;
|
||||
width: 60px;
|
||||
height: 60px;
|
||||
background:none;
|
||||
border: none;
|
||||
cursor: pointer;
|
||||
background: rgba(0,0,0,0.2);
|
||||
overflow: hidden;
|
||||
}
|
||||
.popup button.close-modale:before {
|
||||
content: "+";
|
||||
position: absolute;
|
||||
transform: translate(-50%, -50%) rotate(45deg) ;
|
||||
font-size: 80px;
|
||||
display: inline-block;
|
||||
}
|
||||
.popup button.close-modale:hover {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.popup > div > button[disabled] {
|
||||
/*border: 1px solid #666;*/
|
||||
opacity: 0.5;
|
||||
}
|
||||
|
||||
.popup > div > button > div {
|
||||
flex-grow: 1;
|
||||
}
|
||||
.popup > div > button > div > em {
|
||||
display: block;
|
||||
opacity: 0.8;
|
||||
}
|
||||
|
||||
.popup > div > button > span.checks {
|
||||
width: 40px;
|
||||
height: 40px;
|
||||
display: inline-flex;
|
||||
gap:5px;
|
||||
flex-grow: 0;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
.popup > div > button > span.checks>span {
|
||||
flex-basis: 10px;
|
||||
flex-grow: 1;
|
||||
flex-shrink: 1;
|
||||
/*border: 1px solid white;*/
|
||||
background: white;
|
||||
opacity: 0.1;
|
||||
border-radius: 4px;
|
||||
align-self: stretch;
|
||||
}
|
||||
.popup > div > button > span.checks>span.checked {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
.popup .textAfterButtons{
|
||||
color: rgba(255, 255, 255, 0.58);
|
||||
}
|
||||
|
||||
.popup a[href]{
|
||||
color:inherit;
|
||||
}
|
||||
.popup a[href]:hover,
|
||||
.popup a[href]:focus
|
||||
{
|
||||
color:white;
|
||||
}
|
||||
|
||||
/*Unlocks progress bar*/
|
||||
.progress {
|
||||
display: block;
|
||||
padding: 5px 10px;
|
||||
background: #1c1c2f;
|
||||
color:#fff;
|
||||
box-shadow: inset 3px 3px 5px rgba(0,0,0,0.5);
|
||||
border-radius: 5px;
|
||||
text-align: center;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
}
|
||||
.progress >.progress_bar_part{
|
||||
display: block;
|
||||
background: #4049ca;
|
||||
box-shadow: inset 3px 3px 5px rgba(0,0,0,0.5);
|
||||
left: 0;
|
||||
position: absolute;
|
||||
right: 0;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
transform-origin: top left;
|
||||
animation: grow 1s both ease-out;
|
||||
z-index: 1;
|
||||
}
|
||||
.progress> span {
|
||||
display: block;
|
||||
position: relative;
|
||||
z-index: 2;
|
||||
}
|
||||
@keyframes grow {
|
||||
0%{
|
||||
transform: scale(0,1);
|
||||
}
|
||||
}
|
33
app/src/main/java/me/lecaro/breakout/MainActivity.kt
Normal file
33
app/src/main/java/me/lecaro/breakout/MainActivity.kt
Normal file
|
@ -0,0 +1,33 @@
|
|||
package me.lecaro.breakout
|
||||
import android.os.Bundle
|
||||
import android.util.Log
|
||||
import android.view.Window
|
||||
import android.view.WindowManager
|
||||
import android.webkit.ConsoleMessage
|
||||
import android.webkit.WebChromeClient
|
||||
import android.webkit.WebView
|
||||
class MainActivity : android.app.Activity() {
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
requestWindowFeature(Window.FEATURE_NO_TITLE);
|
||||
window.setFlags(
|
||||
WindowManager.LayoutParams.FLAG_FULLSCREEN,
|
||||
WindowManager.LayoutParams.FLAG_FULLSCREEN
|
||||
);
|
||||
// WebView.setWebContentsDebuggingEnabled(true)
|
||||
val webView = WebView(this)
|
||||
webView.settings.javaScriptEnabled = true
|
||||
webView.settings.domStorageEnabled = true
|
||||
webView.loadUrl("file:///android_asset/index.html")
|
||||
webView.webChromeClient = object : WebChromeClient() {
|
||||
override fun onConsoleMessage(consoleMessage: ConsoleMessage): Boolean {
|
||||
Log.d(
|
||||
"WebView", "${consoleMessage.message()} -- From line " +
|
||||
"${consoleMessage.lineNumber()} of ${consoleMessage.sourceId()}"
|
||||
)
|
||||
return true
|
||||
}
|
||||
}
|
||||
setContentView(webView)
|
||||
}
|
||||
}
|
195
app/src/main/res/drawable/icon.xml
Normal file
195
app/src/main/res/drawable/icon.xml
Normal file
|
@ -0,0 +1,195 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="64dp"
|
||||
android:height="64dp"
|
||||
android:viewportWidth="16.933"
|
||||
android:viewportHeight="16.933">
|
||||
<path
|
||||
android:pathData="M0,0h16.933v16.933h-16.933z"
|
||||
android:strokeLineJoin="round"
|
||||
android:strokeWidth="0.819666"
|
||||
android:fillColor="#030b1f"
|
||||
android:strokeColor="#00000000"
|
||||
android:strokeLineCap="round"/>
|
||||
<path
|
||||
android:pathData="M0,14.817h4.233v2.117h-4.233z"
|
||||
android:strokeLineJoin="round"
|
||||
android:strokeWidth="0.730758"
|
||||
android:fillColor="#ffffff"
|
||||
android:strokeColor="#00000000"
|
||||
android:strokeLineCap="round"/>
|
||||
<path
|
||||
android:pathData="M8.667,9.133A1.058,1.058 0,0 1,7.611 10.191,1.058 1.058,0 0,1 6.551,9.138 1.058,1.058 0,0 1,7.601 8.075,1.058 1.058,0 0,1 8.667,9.123"
|
||||
android:strokeLineJoin="round"
|
||||
android:strokeWidth="0.840585"
|
||||
android:fillColor="#ffffff"
|
||||
android:strokeColor="#00000000"
|
||||
android:strokeLineCap="round"/>
|
||||
<path
|
||||
android:pathData="M7.087,6.167A0.342,0.342 0,0 1,6.745 6.509,0.342 0.342,0 0,1 6.402,6.168 0.342,0.342 0,0 1,6.742 5.824,0.342 0.342,0 0,1 7.087,6.163"
|
||||
android:strokeLineJoin="round"
|
||||
android:strokeWidth="0.271844"
|
||||
android:fillColor="#8953e5"
|
||||
android:strokeColor="#00000000"
|
||||
android:strokeLineCap="round"/>
|
||||
<path
|
||||
android:pathData="M9.961,4.643A0.342,0.342 0,0 1,9.619 4.986,0.342 0.342,0 0,1 9.276,4.645 0.342,0.342 0,0 1,9.616 4.301,0.342 0.342,0 0,1 9.961,4.64"
|
||||
android:strokeLineJoin="round"
|
||||
android:strokeWidth="0.271844"
|
||||
android:fillColor="#8953e5"
|
||||
android:strokeColor="#00000000"
|
||||
android:strokeLineCap="round"/>
|
||||
<path
|
||||
android:pathData="M9.475,6.061A0.342,0.342 0,0 1,9.134 6.403,0.342 0.342,0 0,1 8.791,6.063 0.342,0.342 0,0 1,9.131 5.719,0.342 0.342,0 0,1 9.475,6.058"
|
||||
android:strokeLineJoin="round"
|
||||
android:strokeWidth="0.271844"
|
||||
android:fillColor="#8953e5"
|
||||
android:strokeColor="#00000000"
|
||||
android:strokeLineCap="round"/>
|
||||
<path
|
||||
android:pathData="M8.794,7.683A0.342,0.342 0,0 1,8.452 8.025,0.342 0.342,0 0,1 8.109,7.684 0.342,0.342 0,0 1,8.449 7.34,0.342 0.342,0 0,1 8.794,7.679"
|
||||
android:strokeLineJoin="round"
|
||||
android:strokeWidth="0.271844"
|
||||
android:fillColor="#8953e5"
|
||||
android:strokeColor="#00000000"
|
||||
android:strokeLineCap="round"/>
|
||||
<path
|
||||
android:pathData="M10.551,7.544A0.342,0.342 0,0 1,10.209 7.887,0.342 0.342,0 0,1 9.866,7.546 0.342,0.342 0,0 1,10.206 7.202,0.342 0.342,0 0,1 10.551,7.541"
|
||||
android:strokeLineJoin="round"
|
||||
android:strokeWidth="0.271844"
|
||||
android:fillColor="#8953e5"
|
||||
android:strokeColor="#00000000"
|
||||
android:strokeLineCap="round"/>
|
||||
<path
|
||||
android:pathData="m11.171,10.028a0.342,0.342 0,0 1,-0.341 0.342,0.342 0.342,0 0,1 -0.343,-0.341 0.342,0.342 0,0 1,0.34 -0.344,0.342 0.342,0 0,1 0.345,0.339"
|
||||
android:strokeLineJoin="round"
|
||||
android:strokeWidth="0.271844"
|
||||
android:fillColor="#8953e5"
|
||||
android:strokeColor="#00000000"
|
||||
android:strokeLineCap="round"/>
|
||||
<path
|
||||
android:pathData="M9.67,9.249A0.342,0.342 0,0 1,9.329 9.591,0.342 0.342,0 0,1 8.986,9.251 0.342,0.342 0,0 1,9.325 8.907,0.342 0.342,0 0,1 9.67,9.246"
|
||||
android:strokeLineJoin="round"
|
||||
android:strokeWidth="0.271844"
|
||||
android:fillColor="#8953e5"
|
||||
android:strokeColor="#00000000"
|
||||
android:strokeLineCap="round"/>
|
||||
<path
|
||||
android:pathData="m9.846,10.382a0.342,0.342 0,0 1,-0.341 0.342,0.342 0.342,0 0,1 -0.343,-0.341 0.342,0.342 0,0 1,0.34 -0.344,0.342 0.342,0 0,1 0.345,0.339"
|
||||
android:strokeLineJoin="round"
|
||||
android:strokeWidth="0.271844"
|
||||
android:fillColor="#8953e5"
|
||||
android:strokeColor="#00000000"
|
||||
android:strokeLineCap="round"/>
|
||||
<path
|
||||
android:pathData="m10.677,12.347a0.342,0.342 0,0 1,-0.341 0.342,0.342 0.342,0 0,1 -0.343,-0.341 0.342,0.342 0,0 1,0.34 -0.344,0.342 0.342,0 0,1 0.345,0.339"
|
||||
android:strokeLineJoin="round"
|
||||
android:strokeWidth="0.271844"
|
||||
android:fillColor="#8953e5"
|
||||
android:strokeColor="#00000000"
|
||||
android:strokeLineCap="round"/>
|
||||
<path
|
||||
android:pathData="m12.174,14.577a0.342,0.342 0,0 1,-0.341 0.342,0.342 0.342,0 0,1 -0.343,-0.341 0.342,0.342 0,0 1,0.34 -0.344,0.342 0.342,0 0,1 0.345,0.339"
|
||||
android:strokeLineJoin="round"
|
||||
android:strokeWidth="0.271844"
|
||||
android:fillColor="#8953e5"
|
||||
android:strokeColor="#00000000"
|
||||
android:strokeLineCap="round"/>
|
||||
<path
|
||||
android:pathData="m12.155,8.42a0.342,0.342 0,0 1,-0.341 0.342,0.342 0.342,0 0,1 -0.343,-0.341 0.342,0.342 0,0 1,0.34 -0.344,0.342 0.342,0 0,1 0.345,0.339"
|
||||
android:strokeLineJoin="round"
|
||||
android:strokeWidth="0.271844"
|
||||
android:fillColor="#4aaae5"
|
||||
android:strokeColor="#00000000"
|
||||
android:strokeLineCap="round"/>
|
||||
<path
|
||||
android:pathData="M13.807,9.535A0.342,0.342 0,0 1,13.466 9.878,0.342 0.342,0 0,1 13.123,9.537 0.342,0.342 0,0 1,13.463 9.193,0.342 0.342,0 0,1 13.807,9.532"
|
||||
android:strokeLineJoin="round"
|
||||
android:strokeWidth="0.271844"
|
||||
android:fillColor="#4aaae5"
|
||||
android:strokeColor="#00000000"
|
||||
android:strokeLineCap="round"/>
|
||||
<path
|
||||
android:pathData="M10.551,8.482A0.342,0.342 0,0 1,10.209 8.824,0.342 0.342,0 0,1 9.866,8.484 0.342,0.342 0,0 1,10.206 8.14,0.342 0.342,0 0,1 10.551,8.479"
|
||||
android:strokeLineJoin="round"
|
||||
android:strokeWidth="0.271844"
|
||||
android:fillColor="#4aaae5"
|
||||
android:strokeColor="#00000000"
|
||||
android:strokeLineCap="round"/>
|
||||
<path
|
||||
android:pathData="m11.829,6.756a0.342,0.342 0,0 1,-0.341 0.342,0.342 0.342,0 0,1 -0.343,-0.341 0.342,0.342 0,0 1,0.34 -0.344,0.342 0.342,0 0,1 0.345,0.339"
|
||||
android:strokeLineJoin="round"
|
||||
android:strokeWidth="0.271844"
|
||||
android:fillColor="#4aaae5"
|
||||
android:strokeColor="#00000000"
|
||||
android:strokeLineCap="round"/>
|
||||
<path
|
||||
android:pathData="m10.764,5.861a0.342,0.342 0,0 1,-0.341 0.342,0.342 0.342,0 0,1 -0.343,-0.341 0.342,0.342 0,0 1,0.34 -0.344,0.342 0.342,0 0,1 0.345,0.339"
|
||||
android:strokeLineJoin="round"
|
||||
android:strokeWidth="0.271844"
|
||||
android:fillColor="#4aaae5"
|
||||
android:strokeColor="#00000000"
|
||||
android:strokeLineCap="round"/>
|
||||
<path
|
||||
android:pathData="M8.313,4.944A0.342,0.342 0,0 1,7.971 5.287,0.342 0.342,0 0,1 7.628,4.946 0.342,0.342 0,0 1,7.968 4.602,0.342 0.342,0 0,1 8.313,4.941"
|
||||
android:strokeLineJoin="round"
|
||||
android:strokeWidth="0.271844"
|
||||
android:fillColor="#4aaae5"
|
||||
android:strokeColor="#00000000"
|
||||
android:strokeLineCap="round"/>
|
||||
<path
|
||||
android:pathData="M8.569,6.308A0.342,0.342 0,0 1,8.227 6.651,0.342 0.342,0 0,1 7.884,6.31 0.342,0.342 0,0 1,8.224 5.966,0.342 0.342,0 0,1 8.569,6.305"
|
||||
android:strokeLineJoin="round"
|
||||
android:strokeWidth="0.271844"
|
||||
android:fillColor="#4aaae5"
|
||||
android:strokeColor="#00000000"
|
||||
android:strokeLineCap="round"/>
|
||||
<path
|
||||
android:pathData="M9.762,7.012A0.342,0.342 0,0 1,9.421 7.354,0.342 0.342,0 0,1 9.078,7.013 0.342,0.342 0,0 1,9.417 6.669,0.342 0.342,0 0,1 9.762,7.008"
|
||||
android:strokeLineJoin="round"
|
||||
android:strokeWidth="0.271844"
|
||||
android:fillColor="#4aaae5"
|
||||
android:strokeColor="#00000000"
|
||||
android:strokeLineCap="round"/>
|
||||
<path
|
||||
android:pathData="M0,-0h4.233v4.233h-4.233z"
|
||||
android:strokeLineJoin="round"
|
||||
android:strokeWidth="1.46181"
|
||||
android:fillColor="#4aaae5"
|
||||
android:strokeColor="#00000000"
|
||||
android:strokeLineCap="round"/>
|
||||
<path
|
||||
android:pathData="M4.233,0h4.233v4.233h-4.233z"
|
||||
android:strokeLineJoin="round"
|
||||
android:strokeWidth="1.46181"
|
||||
android:fillColor="#8953e5"
|
||||
android:strokeColor="#00000000"
|
||||
android:strokeLineCap="round"/>
|
||||
<path
|
||||
android:pathData="M8.467,0h4.233v4.233h-4.233z"
|
||||
android:strokeLineJoin="round"
|
||||
android:strokeWidth="1.46181"
|
||||
android:fillColor="#4aaae5"
|
||||
android:strokeColor="#00000000"
|
||||
android:strokeLineCap="round"/>
|
||||
<path
|
||||
android:pathData="M12.7,0h4.233v4.233h-4.233z"
|
||||
android:strokeLineJoin="round"
|
||||
android:strokeWidth="1.46181"
|
||||
android:fillColor="#8953e5"
|
||||
android:strokeColor="#00000000"
|
||||
android:strokeLineCap="round"/>
|
||||
<path
|
||||
android:pathData="M16.933,4.233l-4.233,0l-0,4.233l4.233,0z"
|
||||
android:strokeLineJoin="round"
|
||||
android:strokeWidth="1.46181"
|
||||
android:fillColor="#4aaae5"
|
||||
android:strokeColor="#00000000"
|
||||
android:strokeLineCap="round"/>
|
||||
<path
|
||||
android:pathData="M4.233,4.233l-4.233,0l-0,4.233l4.233,0z"
|
||||
android:strokeLineJoin="round"
|
||||
android:strokeWidth="1.46181"
|
||||
android:fillColor="#8953e5"
|
||||
android:strokeColor="#00000000"
|
||||
android:strokeLineCap="round"/>
|
||||
</vector>
|
3
app/src/main/res/values/strings.xml
Normal file
3
app/src/main/res/values/strings.xml
Normal file
|
@ -0,0 +1,3 @@
|
|||
<resources>
|
||||
<string name="app_name">Breakout</string>
|
||||
</resources>
|
13
app/src/main/res/xml/backup_rules.xml
Normal file
13
app/src/main/res/xml/backup_rules.xml
Normal file
|
@ -0,0 +1,13 @@
|
|||
<?xml version="1.0" encoding="utf-8"?><!--
|
||||
Sample backup rules file; uncomment and customize as necessary.
|
||||
See https://developer.android.com/guide/topics/data/autobackup
|
||||
for details.
|
||||
Note: This file is ignored for devices older that API 31
|
||||
See https://developer.android.com/about/versions/12/backup-restore
|
||||
-->
|
||||
<full-backup-content>
|
||||
<!--
|
||||
<include domain="sharedpref" path="."/>
|
||||
<exclude domain="sharedpref" path="device.xml"/>
|
||||
-->
|
||||
</full-backup-content>
|
19
app/src/main/res/xml/data_extraction_rules.xml
Normal file
19
app/src/main/res/xml/data_extraction_rules.xml
Normal file
|
@ -0,0 +1,19 @@
|
|||
<?xml version="1.0" encoding="utf-8"?><!--
|
||||
Sample data extraction rules file; uncomment and customize as necessary.
|
||||
See https://developer.android.com/about/versions/12/backup-restore#xml-changes
|
||||
for details.
|
||||
-->
|
||||
<data-extraction-rules>
|
||||
<cloud-backup>
|
||||
<!-- TODO: Use <include> and <exclude> to control what is backed up.
|
||||
<include .../>
|
||||
<exclude .../>
|
||||
-->
|
||||
</cloud-backup>
|
||||
<!--
|
||||
<device-transfer>
|
||||
<include .../>
|
||||
<exclude .../>
|
||||
</device-transfer>
|
||||
-->
|
||||
</data-extraction-rules>
|
Loading…
Add table
Add a link
Reference in a new issue