Skip to content

Commit 4819aa3

Browse files
committed
Add support for GTAV Enhanced
1 parent c6db29f commit 4819aa3

File tree

12 files changed

+195
-44
lines changed

12 files changed

+195
-44
lines changed

client/build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ plugins {
88
alias(libs.plugins.buildconfig)
99
}
1010

11-
version = "1.4.1"
11+
version = "1.5.0"
1212

1313
repositories {
1414
mavenCentral()

client/src/main/kotlin/Launcher.kt

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,29 +7,37 @@ import androidx.compose.material3.CircularProgressIndicator
77
import androidx.compose.material3.MaterialTheme
88
import androidx.compose.material3.Scaffold
99
import androidx.compose.material3.Text
10-
import androidx.compose.runtime.getValue
11-
import androidx.compose.runtime.mutableStateOf
12-
import androidx.compose.runtime.remember
13-
import androidx.compose.runtime.setValue
10+
import androidx.compose.runtime.*
1411
import androidx.compose.ui.Alignment
1512
import androidx.compose.ui.Modifier
1613
import androidx.compose.ui.window.Window
1714
import androidx.compose.ui.window.application
18-
import dev.schlaubi.mastermind.core.KeyBoardListener
1915
import dev.schlaubi.mastermind.core.Updater
16+
import dev.schlaubi.mastermind.core.settings.settings
17+
import dev.schlaubi.mastermind.core.settings.writeSettings
2018
import dev.schlaubi.mastermind.resources.Res
2119
import dev.schlaubi.mastermind.resources.icon
2220
import dev.schlaubi.mastermind.theme.AppTheme
2321
import dev.schlaubi.mastermind.ui.GTAKiller
22+
import dev.schlaubi.mastermind.windows_helper.GTAVersion
23+
import io.github.oshai.kotlinlogging.KotlinLogging
2424
import org.jetbrains.compose.resources.painterResource
2525

26+
private val LOG = KotlinLogging.logger { }
27+
2628
fun main() = application {
2729
Updater()
30+
LaunchedEffect(Unit) {
31+
val detectedVersion = GTAVersion.systemDefault()
32+
LOG.info { "Detected GTA version: $detectedVersion" }
33+
34+
if (detectedVersion != null) {
35+
writeSettings(settings.copy(gtaVersion = detectedVersion))
36+
}
37+
}
2838
Window(title = "GTA Killer", icon = painterResource(Res.drawable.icon), onCloseRequest = ::exitApplication) {
2939
var loading by remember { mutableStateOf(true) }
30-
KeyBoardListener()
3140
if (loading) {
32-
3341
AppTheme {
3442
Scaffold {
3543
Column(

client/src/main/kotlin/core/ProcessHandler.kt

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,17 +16,18 @@ private val _events = MutableSharedFlow<Unit>(extraBufferCapacity = Channel.UNLI
1616
val gtaKillErrors = _events.asSharedFlow()
1717

1818
suspend fun killGta() {
19-
LOG.info { "Trying to kill GTA5.exe" }
19+
val version = settings.gtaVersion
20+
LOG.info { "Trying to kill ${version.process}" }
2021

2122
val gtaProcess = ProcessHandle.allProcesses()
22-
.filter { it.info().command().getOrNull()?.contains("GTA5.exe") == true }
23+
.filter { it.info().command().getOrNull()?.contains(version.process) == true }
2324
.findFirst()
2425
if (gtaProcess.isPresent) {
2526
gtaProcess.get().destroyForcibly()
2627

2728
if (settings.autostartGta) {
2829
LOG.info { "Restarting GTA5.exe" }
29-
val gtaPath = WindowsAPI.readGtaLocation() / "PlayGTAV.exe"
30+
val gtaPath = WindowsAPI.readGtaLocation(version) / version.startBinary
3031
Runtime.getRuntime().exec(arrayOf(gtaPath.absolutePathString()))
3132
}
3233
} else {

client/src/main/kotlin/core/settings/Settings.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package dev.schlaubi.mastermind.core.settings
22

33
import androidx.compose.ui.input.key.Key
44
import androidx.compose.ui.input.key.nativeKeyCode
5+
import dev.schlaubi.mastermind.windows_helper.GTAVersion
56
import io.ktor.http.*
67
import kotlinx.serialization.Serializable
78

@@ -13,6 +14,7 @@ data class Settings(
1314
val pastUrls: Set<Url>,
1415
val userName: String,
1516
val hotkey: Int = F3_KEY,
17+
val gtaVersion: GTAVersion = GTAVersion.LEGACY,
1618
val autostartGta: Boolean = true,
1719
val tokens: Map<String, String> = emptyMap()
1820
)

client/src/main/kotlin/ui/components/settings/Settings.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ fun Settings(modifier: Modifier = Modifier) {
2626
UsernameInput()
2727
KeyboardInput()
2828
AutoLaunchGtaSetting()
29+
VersionSwitcher()
2930
}
3031
}
3132
}
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
package dev.schlaubi.mastermind.ui.components.settings
2+
3+
import androidx.compose.animation.core.animateFloat
4+
import androidx.compose.animation.core.updateTransition
5+
import androidx.compose.foundation.layout.Arrangement
6+
import androidx.compose.foundation.layout.Row
7+
import androidx.compose.foundation.layout.fillMaxWidth
8+
import androidx.compose.material3.MaterialTheme
9+
import androidx.compose.material3.Switch
10+
import androidx.compose.material3.Text
11+
import androidx.compose.material3.contentColorFor
12+
import androidx.compose.runtime.Composable
13+
import androidx.compose.runtime.rememberCoroutineScope
14+
import androidx.compose.ui.Alignment
15+
import androidx.compose.ui.Modifier
16+
import androidx.compose.ui.unit.dp
17+
import dev.schlaubi.mastermind.core.settings.settings
18+
import dev.schlaubi.mastermind.core.settings.writeSettings
19+
import dev.schlaubi.mastermind.windows_helper.GTAVersion
20+
import kotlinx.coroutines.Dispatchers
21+
import kotlinx.coroutines.launch
22+
23+
@Composable
24+
fun VersionSwitcher(modifier: Modifier = Modifier) {
25+
val scope = rememberCoroutineScope()
26+
InputWithHeading("Version Switcher", modifier) {
27+
Row(
28+
horizontalArrangement = Arrangement.spacedBy(10.dp, Alignment.CenterHorizontally),
29+
verticalAlignment = Alignment.CenterVertically,
30+
modifier = Modifier.fillMaxWidth()
31+
) {
32+
val currentVersion = settings.gtaVersion
33+
GTAVersion("Legacy", currentVersion == GTAVersion.LEGACY)
34+
Switch(currentVersion == GTAVersion.ENHANCED, {
35+
scope.launch(Dispatchers.IO) {
36+
writeSettings(settings.copy(gtaVersion = if (it) GTAVersion.ENHANCED else GTAVersion.LEGACY))
37+
}
38+
})
39+
GTAVersion("Enhanced", currentVersion == GTAVersion.ENHANCED)
40+
}
41+
}
42+
}
43+
44+
@Composable
45+
private fun GTAVersion(name: String, selected: Boolean) {
46+
val transition = updateTransition(selected)
47+
val opacity = transition.animateFloat { if (it) 1f else 0.5f }
48+
49+
Text(name, color = contentColorFor(MaterialTheme.colorScheme.surface).copy(alpha = opacity.value))
50+
}

windows_helper/Cargo.lock

Lines changed: 48 additions & 27 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

windows_helper/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ edition = "2021"
77
crate-type = ["cdylib", "lib"]
88

99
[dependencies]
10+
enum-ordinalize = "4.3.0"
1011
safer-ffi = "0.1.12"
1112
windows-registry = "0.5.0"
1213
mki = "0.2.3"

windows_helper/build.gradle.kts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import org.jetbrains.kotlin.konan.target.HostManager
55
plugins {
66
java
77
kotlin("jvm")
8+
alias(libs.plugins.kotlin.serialization)
89
}
910

1011
val jextractOutput: Provider<Directory> = layout.buildDirectory.dir("generated/jextract/main/java")
@@ -16,6 +17,10 @@ sourceSets {
1617
}
1718
}
1819

20+
dependencies {
21+
implementation(libs.kotlinx.serialization.json)
22+
}
23+
1924
tasks {
2025
val compileRust by registering(Exec::class) {
2126
inputs.dir("src")
@@ -57,6 +62,7 @@ tasks {
5762
"--library", libraryPath,
5863
"--output", jextractOutput.get().asFile.absolutePath,
5964
"--include-function", "read_gta_location",
65+
"--include-function", "detect_version",
6066
"--include-function", "register_keyboard_handler",
6167
"--include-function", "register_keyboard_hook",
6268
"--include-function", "spawn_detached_process",

0 commit comments

Comments
 (0)