示例#1
0
 public void TriggerPairEnter(PassThroughTriggerPair trigger)
 {
     //Debug.Log ("Trigger pair enter: " + trigger.name);
     if (LastSingleIntersection == null)
     {
         //if we have no last single intersection
         //then whatever just triggered this is the last single
         LastSingleIntersection = trigger;
         OnIntersect();
     }
     enabled = true;
 }
示例#2
0
        public override void OnEditorRefresh()
        {
            GameObject innerTriggerColliderGameObject = gameObject.FindOrCreateChild("InnerTrigger").gameObject;

            innerTriggerColliderGameObject.layer = Globals.LayerNumTrigger;
            InnerTriggerCollider           = innerTriggerColliderGameObject.GetOrAdd <BoxCollider> ();
            InnerTriggerCollider.isTrigger = true;
            State.InnerTrigger.CopyFrom(InnerTriggerCollider.transform);
            InnerTrigger             = innerTriggerColliderGameObject.GetOrAdd <PassThroughTriggerPair> ();
            InnerTrigger.TriggerType = PassThroughTriggerType.Inner;

            GameObject outerTriggerColliderGameObject = gameObject.FindOrCreateChild("OuterTrigger").gameObject;

            outerTriggerColliderGameObject.layer = Globals.LayerNumTrigger;
            OuterTriggerCollider           = outerTriggerColliderGameObject.GetOrAdd <BoxCollider> ();
            OuterTriggerCollider.isTrigger = true;
            State.OuterTrigger.CopyFrom(OuterTriggerCollider.transform);
            OuterTrigger             = outerTriggerColliderGameObject.GetOrAdd <PassThroughTriggerPair> ();
            OuterTrigger.TriggerType = PassThroughTriggerType.Outer;

            //InnerTrigger.Sibling = OuterTrigger;
            //OuterTrigger.Sibling = InnerTrigger;
            //InnerTrigger.TargetObject = gameObject;
            //OuterTrigger.TargetObject = gameObject;

            /*
             *                      InnerTrigger.EnterFunctionName = "OnPassThroughTrigger";
             *                      InnerTrigger.ExitFunctionName = "OnPassThroughTrigger";
             *                      OuterTrigger.EnterFunctionName = "OnPassThroughTrigger";
             *                      OuterTrigger.ExitFunctionName = "OnPassThroughTrigger";
             */

            ParentTrigger = gameObject.GetOrAdd <PassThroughTrigger> ();
            ParentTrigger.TargetObject            = gameObject;
            ParentTrigger.OuterTrigger            = OuterTrigger;
            ParentTrigger.InnerTrigger            = InnerTrigger;
            ParentTrigger.PassThroughFunctionName = "OnPassThroughTrigger";

            CrucialColliderGizmo ccgInner = InnerTriggerCollider.gameObject.GetOrAdd <CrucialColliderGizmo> ();
            CrucialColliderGizmo ccgOuter = OuterTriggerCollider.gameObject.GetOrAdd <CrucialColliderGizmo> ();

            ccgInner.fillColor = Colors.Alpha(Color.red, 0.25f);
            ccgOuter.fillColor = Colors.Alpha(Color.cyan, 0.25f);

            //there are a few things we can assume about this trigger
            State.Targets           = WorldTriggerTarget.None;
            State.Behavior          = AvailabilityBehavior.Max;
            State.NumTimesTriggered = 1;
            State.ColliderType      = WIColliderType.None;       //we make our own
        }
示例#3
0
        public override void OnInitialized()
        {
            GameObject innerTriggerColliderGameObject = gameObject.FindOrCreateChild("InnerTrigger").gameObject;

            innerTriggerColliderGameObject.layer = Globals.LayerNumTrigger;
            InnerTriggerCollider           = innerTriggerColliderGameObject.GetOrAdd <BoxCollider> ();
            InnerTriggerCollider.isTrigger = true;
            State.InnerTrigger.ApplyTo(InnerTriggerCollider.transform, true);
            InnerTrigger             = innerTriggerColliderGameObject.GetOrAdd <PassThroughTriggerPair> ();
            InnerTrigger.TriggerType = PassThroughTriggerType.Inner;

            GameObject outerTriggerColliderGameObject = gameObject.FindOrCreateChild("OuterTrigger").gameObject;

            outerTriggerColliderGameObject.layer = Globals.LayerNumTrigger;
            OuterTriggerCollider           = outerTriggerColliderGameObject.GetOrAdd <BoxCollider> ();
            OuterTriggerCollider.isTrigger = true;
            State.OuterTrigger.ApplyTo(OuterTriggerCollider.transform, true);
            OuterTrigger             = outerTriggerColliderGameObject.GetOrAdd <PassThroughTriggerPair> ();
            OuterTrigger.TriggerType = PassThroughTriggerType.Outer;

            //InnerTrigger.Sibling = OuterTrigger;
            //OuterTrigger.Sibling = InnerTrigger;
            //InnerTrigger.TargetObject = gameObject;
            //OuterTrigger.TargetObject = gameObject;

            ParentTrigger = gameObject.GetOrAdd <PassThroughTrigger> ();
            ParentTrigger.TargetObject            = gameObject;
            ParentTrigger.OuterTrigger            = OuterTrigger;
            ParentTrigger.InnerTrigger            = InnerTrigger;
            ParentTrigger.PassThroughFunctionName = "OnPassThroughTrigger";

            State.Behavior             = AvailabilityBehavior.Always;
            State.Targets             |= WorldTriggerTarget.Player;
            State.TimeOfDayRequirement = TimeOfDay.a_None;
            State.MissionRequirement   = MissionRequireType.None;
            State.ObjectiveRequirement = MissionRequireType.None;
            State.QuestItemRequirement = string.Empty;

            /*
             *                      InnerTrigger.EnterFunctionName = "OnPassThroughTrigger";
             *                      InnerTrigger.ExitFunctionName = "OnPassThroughTrigger";
             *                      OuterTrigger.EnterFunctionName = "OnPassThroughTrigger";
             *                      OuterTrigger.ExitFunctionName = "OnPassThroughTrigger";
             */
        }
示例#4
0
        public void Update()
        {
            //if we're ready to pass through
            if (ReadyToPassThrough)
            {
                //if both are still intersecting
                if (OuterTrigger.IsIntersecting && InnerTrigger.IsIntersecting)
                {
                    //nothing has changed so get out of there
                    return;
                }
                //we're no longer ready to pass through
                //we've either passed through or else moved back
                //find out which next
                ReadyToPassThrough = false;
                if (LastSingleIntersection == InnerTrigger)
                {
                    //if the last single intersection was inner
                    //then the new single intersection has to be outer
                    //for us to have passed through
                    if (OuterTrigger.IsIntersecting)
                    {
                        //we've passed through
                        //set the last single intersection to outer
                        LastSingleIntersection = OuterTrigger;
                        OnPassThrough();
                        return;
                    }
                }
                else                    //if LastSingleIntersection == OuterTrigger) {
                                        //if the last single intersection was outer
                                        //then the new single intersection has to be inner
                                        //for us to have passed through
                {
                    if (InnerTrigger.IsIntersecting)
                    {
                        //we've passed through
                        //set the last single intersection to outer
                        LastSingleIntersection = InnerTrigger;
                        OnPassThrough();
                        return;
                    }
                }
            }

            //if we're not ready to pass through, see if we've become ready
            //if both are intersecting then the next time we only have one intersecting
            //we will have passed through the trigger
            if (InnerTrigger.IsIntersecting && OuterTrigger.IsIntersecting)
            {
                ReadyToPassThrough = true;
                //do a sanity check
                //if we don't have a LastSingleIntersection then something has gone wrong
                //take the closest collider to the player and use that instead
                if (LastSingleIntersection == null)
                {
                    if (Vector3.Distance(InnerTrigger.transform.position, Player.Local.Position) <
                        Vector3.Distance(OuterTrigger.transform.position, Player.Local.Position))
                    {
                        Debug.Log("Last single intersection was null in door, setting to inner trigger");
                        LastSingleIntersection = InnerTrigger;
                    }
                    else
                    {
                        Debug.Log("Last single intersection was null in door, setting to outer trigger");
                        LastSingleIntersection = OuterTrigger;
                    }
                }
                return;
            }

            //if neither trigger is intersecting then we're either done
            //or else something has gone wrong
            if (!InnerTrigger.IsIntersecting && !OuterTrigger.IsIntersecting)
            {
                //this may have happened because the player passed through the triggers
                //too fast for Unity to send the correct OnEnter / OnExit messages
                //SO we're going to try a sanity check before saying that we're done
                if (LastSingleIntersection != null)
                {
                    LastSingleIntersection = null;
                }
            }
        }