+82
-13
lines changedFilter options
+82
-13
lines changed Original file line number Diff line number Diff line change
@@ -20,7 +20,6 @@ import javafx.scene.Node
20
20
import javafx.scene.input.*
21
21
import java.util.*
22
22
import java.util.concurrent.CopyOnWriteArrayList
23
-
import kotlin.collections.ArrayList
24
23
import kotlin.collections.HashMap
25
24
import kotlin.collections.LinkedHashMap
26
25
@@ -271,15 +270,25 @@ class Input {
271
270
currentActions[i].action()
272
271
}
273
272
274
-
activeTriggers.forEach { trigger ->
275
-
listeners.forEach {
276
-
it.action(trigger)
277
-
}
273
+
activeTriggers.forEach {
274
+
updateTriggerListeners(it)
278
275
}
279
276
280
277
captureAppliers.forEach { it.update(tpf) }
281
278
}
282
279
280
+
private fun updateTriggerListeners(trigger: Trigger) {
281
+
listeners.forEach {
282
+
if (trigger is KeyTrigger) {
283
+
it.actionKey(trigger)
284
+
} else if (trigger is MouseTrigger) {
285
+
it.actionBtn(trigger)
286
+
}
287
+
288
+
it.action(trigger)
289
+
}
290
+
}
291
+
283
292
/**
284
293
* Called automatically by FXGL on key event.
285
294
*/
@@ -337,9 +346,7 @@ class Input {
337
346
if (newTrigger !in activeTriggers) {
338
347
activeTriggers += newTrigger
339
348
340
-
listeners.forEach {
341
-
it.begin(newTrigger)
342
-
}
349
+
handleTriggerPressed(newTrigger)
343
350
}
344
351
345
352
bindings.filter { (act, trigger) -> act !in currentActions && trigger.isTriggered(event) }
@@ -361,12 +368,22 @@ class Input {
361
368
}
362
369
}
363
370
364
-
private fun handleReleased(event: InputEvent) {
365
-
val releasedTriggers = activeTriggers.filter { it.isReleased(event) }
366
-
releasedTriggers.forEach { trigger ->
367
-
listeners.forEach {
368
-
it.end(trigger)
371
+
private fun handleTriggerPressed(trigger: Trigger) {
372
+
listeners.forEach {
373
+
if (trigger is KeyTrigger) {
374
+
it.beginKey(trigger)
375
+
} else if (trigger is MouseTrigger) {
376
+
it.beginBtn(trigger)
369
377
}
378
+
379
+
it.begin(trigger)
380
+
}
381
+
}
382
+
383
+
private fun handleReleased(event: InputEvent) {
384
+
val releasedTriggers = activeTriggers.filter { it.isReleased(event) || (it is KeyTrigger && isIllegal(it.key)) }
385
+
releasedTriggers.forEach {
386
+
handleTriggerReleased(it)
370
387
}
371
388
372
389
activeTriggers -= releasedTriggers
@@ -392,6 +409,18 @@ class Input {
392
409
}
393
410
}
394
411
412
+
private fun handleTriggerReleased(trigger: Trigger) {
413
+
listeners.forEach {
414
+
if (trigger is KeyTrigger) {
415
+
it.endKey(trigger)
416
+
} else if (trigger is MouseTrigger) {
417
+
it.endBtn(trigger)
418
+
}
419
+
420
+
it.end(trigger)
421
+
}
422
+
}
423
+
395
424
fun addTriggerListener(triggerListener: TriggerListener) {
396
425
listeners += triggerListener
397
426
}
Original file line number Diff line number Diff line change
@@ -16,6 +16,14 @@ abstract class TriggerListener {
16
16
internal fun action(trigger: Trigger) = onAction(trigger)
17
17
internal fun end(trigger: Trigger) = onActionEnd(trigger)
18
18
19
+
internal fun beginKey(trigger: KeyTrigger) = onKeyBegin(trigger)
20
+
internal fun actionKey(trigger: KeyTrigger) = onKey(trigger)
21
+
internal fun endKey(trigger: KeyTrigger) = onKeyEnd(trigger)
22
+
23
+
internal fun beginBtn(trigger: MouseTrigger) = onButtonBegin(trigger)
24
+
internal fun actionBtn(trigger: MouseTrigger) = onButton(trigger)
25
+
internal fun endBtn(trigger: MouseTrigger) = onButtonEnd(trigger)
26
+
19
27
/**
20
28
* Called once in the same tick when triggered.
21
29
*/
@@ -31,4 +39,36 @@ abstract class TriggerListener {
31
39
* Called once in the same tick when trigger was released.
32
40
*/
33
41
protected open fun onActionEnd(trigger: Trigger) {}
42
+
43
+
/**
44
+
* Called once in the same tick when triggered.
45
+
*/
46
+
protected open fun onKeyBegin(keyTrigger: KeyTrigger) {}
47
+
48
+
/**
49
+
* Called as long as the trigger is being held (pressed).
50
+
* Starts from the next tick from the one when was triggered.
51
+
*/
52
+
protected open fun onKey(keyTrigger: KeyTrigger) {}
53
+
54
+
/**
55
+
* Called once in the same tick when trigger was released.
56
+
*/
57
+
protected open fun onKeyEnd(keyTrigger: KeyTrigger) {}
58
+
59
+
/**
60
+
* Called once in the same tick when triggered.
61
+
*/
62
+
protected open fun onButtonBegin(mouseTrigger: MouseTrigger) {}
63
+
64
+
/**
65
+
* Called as long as the trigger is being held (pressed).
66
+
* Starts from the next tick from the one when was triggered.
67
+
*/
68
+
protected open fun onButton(mouseTrigger: MouseTrigger) {}
69
+
70
+
/**
71
+
* Called once in the same tick when trigger was released.
72
+
*/
73
+
protected open fun onButtonEnd(mouseTrigger: MouseTrigger) {}
34
74
}
You can’t perform that action at this time.
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4