playMaker

Author Topic: Trigger Event Ignore Game Object  (Read 1850 times)

mdotstrange

  • Hero Member
  • *****
  • Posts: 555
    • Can't code? Who cares! Make games anyway!
Trigger Event Ignore Game Object
« on: February 06, 2016, 06:32:33 AM »
 I took the get hit object from the Get Trigger Info action and added it to Trigger Event- whatever game object you have in the "Ignore This" var will not fire the send event if it enters the trigger-

If you have an NPC firing projectiles that use trigger events to deal damage and you want to have friendly fire- you can use this action to prevent the NPC from damaging itself with its own projectiles-

Code: [Select]
// (c) Copyright HutongGames, LLC 2010-2013. All rights reserved.

using System;
using UnityEngine;

namespace HutongGames.PlayMaker.Actions
{
    [ActionCategory(ActionCategory.Physics)]
    [Tooltip("The same functionality as Trigger Enter except the game object set as 'ignoreThis' will be ignored. ")]
    public class TriggerEventIgnoreGameObject : FsmStateAction
    {

        [Tooltip("The gameobject you want the trigger to ignore.")]
        public FsmOwnerDefault ignoreThis;

        public TriggerType trigger;
        [UIHint(UIHint.Tag)]
        public FsmString collideTag;
        public FsmEvent sendEvent;
        [UIHint(UIHint.Variable)]
        public FsmGameObject storeCollider;
        [Tooltip("The gameobject that activated the trigger. Use this to debug or instead of an additional get trigger info action.")]
        public FsmGameObject gameObjectHit;

        public override void Reset()
        {
            trigger = TriggerType.OnTriggerEnter;
            collideTag = "Untagged";
            sendEvent = null;
            storeCollider = null;
            ignoreThis = null;
            gameObjectHit = null;
        }

        public override void OnPreprocess()
        {
            switch (trigger)
            {
                case TriggerType.OnTriggerEnter:
                    Fsm.HandleTriggerEnter = true;
                    break;
                case TriggerType.OnTriggerStay:
                    Fsm.HandleTriggerStay = true;
                    break;
                case TriggerType.OnTriggerExit:
                    Fsm.HandleTriggerExit = true;
                    break;
            }
        }

        void StoreCollisionInfo(Collider collisionInfo)
        {
            storeCollider.Value = collisionInfo.gameObject;
            gameObjectHit.Value = Fsm.TriggerCollider.gameObject;
           // Debug.Log(ignoreThis.GameObject.Value.name);
        }

        public override void DoTriggerEnter(Collider other)
        {
            gameObjectHit.Value = Fsm.TriggerCollider.gameObject;
           
             // Debug.Log("true");
            {
                gameObjectHit.Value = Fsm.TriggerCollider.gameObject;
               if (other.gameObject.tag == collideTag.Value && gameObjectHit.Value != ignoreThis.GameObject.Value)
                {
                    StoreCollisionInfo(other);
                    Fsm.Event(sendEvent);
                   // Debug.Log(gameObjectHit.Value.name);
                }
            }
        }

        public override void DoTriggerStay(Collider other)
        {
            if (trigger == TriggerType.OnTriggerStay)
            {
                if (other.gameObject.tag == collideTag.Value && gameObjectHit.Value != ignoreThis.GameObject.Value)
                {
                    StoreCollisionInfo(other);
                    Fsm.Event(sendEvent);
                }
            }
        }

        public override void DoTriggerExit(Collider other)
        {
            if (trigger == TriggerType.OnTriggerExit && gameObjectHit.Value != ignoreThis.GameObject.Value)
            {
                if (other.gameObject.tag == collideTag.Value)
                {
                    StoreCollisionInfo(other);
                    Fsm.Event(sendEvent);
                }
            }
        }

        public override string ErrorCheck()
        {
            return ActionHelpers.CheckOwnerPhysicsSetup(Owner);
        }


    }
}
Indie game dev and instructor at the Strange School. Learn Playmaker at the Strange School!