generated from SGDA/GodotExampleProject
feat: made sure the aspect ration fit a pixel art game and added useful addons
This commit is contained in:
72
addons/guide/triggers/guide_trigger_stability.gd
Normal file
72
addons/guide/triggers/guide_trigger_stability.gd
Normal file
@ -0,0 +1,72 @@
|
||||
@tool
|
||||
## Triggers depending on whether the input changes while actuated. This trigger is
|
||||
## is implicit, so it must succeed for all other triggers to succeed.
|
||||
class_name GUIDETriggerStability
|
||||
extends GUIDETrigger
|
||||
|
||||
enum TriggerWhen {
|
||||
## Input must be stable
|
||||
INPUT_IS_STABLE,
|
||||
## Input must change
|
||||
INPUT_CHANGES
|
||||
}
|
||||
|
||||
|
||||
## The maximum amount that the input can change after actuation before it is
|
||||
## considered "changed".
|
||||
@export var max_deviation:float = 1
|
||||
|
||||
## When should the trigger trigger?
|
||||
@export var trigger_when:TriggerWhen = TriggerWhen.INPUT_IS_STABLE
|
||||
|
||||
|
||||
var _initial_value:Vector3
|
||||
var _deviated:bool = false
|
||||
|
||||
|
||||
func _get_trigger_type() -> GUIDETriggerType:
|
||||
return GUIDETriggerType.IMPLICIT
|
||||
|
||||
|
||||
func _update_state(input:Vector3, delta:float, value_type:GUIDEAction.GUIDEActionValueType) -> GUIDETriggerState:
|
||||
if _is_actuated(input, value_type):
|
||||
if _deviated:
|
||||
if trigger_when == TriggerWhen.INPUT_IS_STABLE:
|
||||
return GUIDETriggerState.NONE
|
||||
return GUIDETriggerState.TRIGGERED
|
||||
|
||||
|
||||
if not _is_actuated(_last_value, value_type):
|
||||
# we went from "not actuated" to actuated, start
|
||||
_initial_value = input
|
||||
if trigger_when == TriggerWhen.INPUT_IS_STABLE:
|
||||
return GUIDETriggerState.TRIGGERED
|
||||
else:
|
||||
return GUIDETriggerState.ONGOING
|
||||
|
||||
# calculate how far the input is from the initial value
|
||||
if _initial_value.distance_squared_to(input) > (max_deviation * max_deviation):
|
||||
_deviated = true
|
||||
if trigger_when == TriggerWhen.INPUT_IS_STABLE:
|
||||
return GUIDETriggerState.NONE
|
||||
return GUIDETriggerState.TRIGGERED
|
||||
|
||||
if trigger_when == TriggerWhen.INPUT_IS_STABLE:
|
||||
return GUIDETriggerState.TRIGGERED
|
||||
|
||||
return GUIDETriggerState.ONGOING
|
||||
|
||||
# if the input is not actuated
|
||||
_deviated = false
|
||||
return GUIDETriggerState.NONE
|
||||
|
||||
|
||||
|
||||
|
||||
func _editor_name() -> String:
|
||||
return "Stability"
|
||||
|
||||
|
||||
func _editor_description() -> String:
|
||||
return "Triggers depending on whether the input changes while actuated. This trigger\n" +\
|
||||
"is implicit, so it must succeed for all other triggers to succeed."
|
Reference in New Issue
Block a user