IndieGame/client/Assets/ParadoxNotion/NodeCanvas/Tasks/Conditions/SystemEvents/CheckTrigger.cs

120 lines
4.1 KiB
C#
Raw Permalink Normal View History

2024-10-11 10:12:15 +08:00
using NodeCanvas.Framework;
using ParadoxNotion;
using ParadoxNotion.Design;
using UnityEngine;
namespace NodeCanvas.Tasks.Conditions
{
[Category("System Events")]
[Description("The agent is type of Transform so that Triggers can either work with a Collider or a Rigidbody attached.")]
[Name("Check Trigger")]
public class CheckTrigger_Transform : ConditionTask<Transform>
{
public TriggerTypes checkType = TriggerTypes.TriggerEnter;
public bool specifiedTagOnly;
[TagField, ShowIf("specifiedTagOnly", 1)]
public string objectTag = "Untagged";
[BlackboardOnly]
public BBParameter<GameObject> saveGameObjectAs;
private bool stay;
protected override string info {
get { return checkType.ToString() + ( specifiedTagOnly ? ( " '" + objectTag + "' tag" ) : "" ); }
}
protected override bool OnCheck() {
if ( checkType == TriggerTypes.TriggerStay ) { return stay; }
return false;
}
protected override void OnEnable() {
router.onTriggerEnter += OnTriggerEnter;
router.onTriggerExit += OnTriggerExit;
}
protected override void OnDisable() {
router.onTriggerEnter -= OnTriggerEnter;
router.onTriggerExit -= OnTriggerExit;
}
public void OnTriggerEnter(ParadoxNotion.EventData<Collider> data) {
if ( !specifiedTagOnly || data.value.gameObject.CompareTag(objectTag) ) {
stay = true;
if ( checkType == TriggerTypes.TriggerEnter || checkType == TriggerTypes.TriggerStay ) {
saveGameObjectAs.value = data.value.gameObject;
YieldReturn(true);
}
}
}
public void OnTriggerExit(ParadoxNotion.EventData<Collider> data) {
if ( !specifiedTagOnly || data.value.gameObject.CompareTag(objectTag) ) {
stay = false;
if ( checkType == TriggerTypes.TriggerExit ) {
saveGameObjectAs.value = data.value.gameObject;
YieldReturn(true);
}
}
}
}
///----------------------------------------------------------------------------------------------
[Category("System Events")]
[DoNotList]
public class CheckTrigger : ConditionTask<Collider>
{
public TriggerTypes checkType = TriggerTypes.TriggerEnter;
public bool specifiedTagOnly;
[TagField, ShowIf("specifiedTagOnly", 1)]
public string objectTag = "Untagged";
[BlackboardOnly]
public BBParameter<GameObject> saveGameObjectAs;
private bool stay;
protected override string info {
get { return checkType.ToString() + ( specifiedTagOnly ? ( " '" + objectTag + "' tag" ) : "" ); }
}
protected override bool OnCheck() {
if ( checkType == TriggerTypes.TriggerStay ) { return stay; }
return false;
}
protected override void OnEnable() {
router.onTriggerEnter += OnTriggerEnter;
router.onTriggerExit += OnTriggerExit;
}
protected override void OnDisable() {
router.onTriggerEnter -= OnTriggerEnter;
router.onTriggerExit -= OnTriggerExit;
}
public void OnTriggerEnter(ParadoxNotion.EventData<Collider> data) {
if ( !specifiedTagOnly || data.value.gameObject.CompareTag(objectTag) ) {
stay = true;
if ( checkType == TriggerTypes.TriggerEnter || checkType == TriggerTypes.TriggerStay ) {
saveGameObjectAs.value = data.value.gameObject;
YieldReturn(true);
}
}
}
public void OnTriggerExit(ParadoxNotion.EventData<Collider> data) {
if ( !specifiedTagOnly || data.value.gameObject.CompareTag(objectTag) ) {
stay = false;
if ( checkType == TriggerTypes.TriggerExit ) {
saveGameObjectAs.value = data.value.gameObject;
YieldReturn(true);
}
}
}
}
}