From b4844e98619766232645d70f80a29c2a53bc2709 Mon Sep 17 00:00:00 2001 From: Fredia Huya-Kouadio Date: Fri, 14 Jul 2023 13:46:24 -0700 Subject: Update the directory structure to make room for additional Godot Android samples besides plugins --- .../android/hellosignals/HelloSignalsPlugin.kt | 59 ++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 plugins/hello_signals/src/main/java/fhuyakou/godot/plugin/android/hellosignals/HelloSignalsPlugin.kt (limited to 'plugins/hello_signals/src/main/java') diff --git a/plugins/hello_signals/src/main/java/fhuyakou/godot/plugin/android/hellosignals/HelloSignalsPlugin.kt b/plugins/hello_signals/src/main/java/fhuyakou/godot/plugin/android/hellosignals/HelloSignalsPlugin.kt new file mode 100644 index 0000000..d6df7ef --- /dev/null +++ b/plugins/hello_signals/src/main/java/fhuyakou/godot/plugin/android/hellosignals/HelloSignalsPlugin.kt @@ -0,0 +1,59 @@ +package fhuyakou.godot.plugin.android.hellosignals + +import android.util.Log +import org.godotengine.godot.Godot +import org.godotengine.godot.plugin.GodotPlugin +import org.godotengine.godot.plugin.SignalInfo +import org.godotengine.godot.plugin.UsedByGodot +import java.util.concurrent.Executors +import java.util.concurrent.ScheduledFuture +import java.util.concurrent.TimeUnit + +/** + * Exposes a [onButtonPressed] method to the game logic. Invoking the method starts a timer which + * fires a `TikTok` signal every second. Invoking the method a second time stops the timer. + */ +class HelloSignalsPlugin(godot: Godot) : GodotPlugin(godot) { + + companion object { + val TAG = HelloSignalsPlugin::class.java.simpleName + } + + private val tikTokSignalInfo = SignalInfo("TikTok") + private var tikTokTask : ScheduledFuture<*>? = null + + override fun getPluginName() = "HelloSignals" + + override fun getPluginSignals(): Set { + Log.i(TAG, "Registering $tikTokSignalInfo") + return setOf(tikTokSignalInfo) + } + + private fun startTikTok(): Boolean { + if (tikTokTask == null || tikTokTask!!.isDone) { + Log.i(TAG, "Starting tiktok...") + tikTokTask = Executors.newSingleThreadScheduledExecutor() + .scheduleAtFixedRate({ emitSignal(tikTokSignalInfo.name) }, 0, 1, TimeUnit.SECONDS) + return true + } + return false + } + + private fun stopTikTok() { + if (tikTokTask != null) { + if (!tikTokTask!!.isDone) { + Log.i(TAG, "Stopping tiktok...") + tikTokTask!!.cancel(true) + } + tikTokTask = null + } + } + + @UsedByGodot + private fun onButtonPressed() { + Log.i(TAG, "OnButtonPressed from Kotlin") + if (!startTikTok()) { + stopTikTok() + } + } +} -- cgit v1.2.3