Skip to content

Interaction Conditions

  • Interaction conditions, only allow the interaction to trigger once its conditions are met.
  • If you recall, the Interaction Node, checks all the conditions under the parent conditions node. Allowing the interaction to decide weather it should trigger the logics or not.

Base Class

extends Node
class_name InteractionCondition

func check() -> bool:
    return true

Example Interaction Conditions

OR Condition

extends InteractionCondition

## If either of these interactions are triggered, this interaction will work
class_name InteractionConditionOr

@export var interaction_trigger_check    : Interaction
@export var interaction_trigger_check_02 : Interaction

var interaction_triggered    : bool  = false
var interaction_triggered_02 : bool  = false

func _ready():
    interaction_trigger_check.interaction_triggered.connect(func(): interaction_triggered = true)
    interaction_trigger_check_02.interaction_triggered.connect(func(): interaction_triggered_02 = true)

func check() -> bool:
    return check_keys() 

func check_keys():
    return interaction_triggered or interaction_triggered_02

AND Condition

extends InteractionCondition

## Checks if two interactions have been triggerd, if not the interaction will not work
class_name InteractionConditionAnd

@export var interaction_trigger_check    : Interaction
@export var interaction_trigger_check_02 : Interaction

var interaction_triggered    : bool  = false
var interaction_triggered_02 : bool  = false

func _ready():
    interaction_trigger_check.interaction_triggered.connect(func(): interaction_triggered = true)
    interaction_trigger_check_02.interaction_triggered.connect(func(): interaction_triggered_02 = true)

func check() -> bool:
    return check_keys() 

func check_keys():
    return interaction_triggered and interaction_triggered_02

MULTI Conditon

  • Basically just AND, but with more than 1 or more interactions as a conditional
    extends InteractionCondition
    class_name InteractionConditionMulti
    
    @export var interactions : Array[Interaction]
    var interactions_mapping : Dictionary
    
    func _ready() -> void:
        setup()
    
    func setup():
        for interaction in interactions:
            interactions_mapping.set(interaction, false)
            interaction.interaction_triggered.connect(func(): interactions_mapping.set(interaction, true))
    
    func check() -> bool:
        for i in interactions_mapping:
            if interactions_mapping.get(i) == false: return false
    
        return true