Esempio n. 1
0
        public virtual bool TryTrigger(IOnTrigger trigger, ref ContactEvent contactEvent, int compatibleMounts)
        {
            //Debug.Log("TryTrigger BAsic Inv. compat with: " + compatibleMounts + " defMountId: " + defaultMounting.id + " defMask: " + defaultMountingMask);

            if (validHitGroups != 0)
            {
                var hga         = contactEvent.contacted.GetComponent <HitGroupAssign>();
                int triggermask = hga ? hga.Mask : 0;
                if ((validHitGroups.Mask & triggermask) == 0)
                {
                    Debug.Log("Try trigger... HitGroup mismatch");
                    return(false);
                }
            }

            /// Return if the object being picked up exceeds remaining inventory.
            if (TestCapacity(trigger as IInventoryable <T>) == false)
            {
                return(false);
            }

            /// If both are set to 0 (Root) then consider that a match, otherwise zero for one but not the other is a mismatch (for now)
            if ((compatibleMounts == defaultMountingMask) || (compatibleMounts & defaultMountingMask) != 0)
            {
                return(true);
            }
            else
            {
                return(false);
            }
        }
        private void OnTriggerExitHandler(IOnTrigger obj)
        {
            obj.IsInteractable = false;
            var materialColor = obj.GameObject.GetComponent <SpriteRenderer>().color;

            obj.GameObject.GetComponent <SpriteRenderer>().DOColor(new Color(materialColor.r,
                                                                             materialColor.g, materialColor.b, 1.0f), 1.0f);
        }
Esempio n. 3
0
 public void AddTriggers(TriggerObjectType type, IOnTrigger trigger)
 {
     if (_onTriggers.ContainsKey(type))
     {
         _onTriggers[type].Add(trigger);
     }
     else
     {
         _onTriggers.Add(type, new List <IOnTrigger>
         {
             trigger
         });
     }
 }
        public IOnTrigger GetNearestObject(Vector3 targetPosition, HashSet <IOnTrigger> objectBuffer)
        {
            float      nearestDistance = Mathf.Infinity;
            IOnTrigger result          = null;

            foreach (IOnTrigger trigger in objectBuffer)
            {
                float objectDistance = (targetPosition - trigger.GameObject.transform.position).sqrMagnitude;
                if (objectDistance >= nearestDistance)
                {
                    continue;
                }

                nearestDistance = objectDistance;
                result          = trigger;
            }

            return(result);
        }
Esempio n. 5
0
        public bool TryTrigger(IOnTrigger trigger, ref ContactEvent contactEvent, int compatibleMounts)
        {
            if (!useHitGroups || validHitGroups != 0)
            {
                var hga         = contactEvent.contacted.GetComponent <HitGroupAssign>();
                int triggermask = hga ? hga.Mask : 0;
                if ((validHitGroups.Mask & triggermask) == 0)
                {
#if UNITY_EDITOR
                    Debug.Log(name + " SyncVitals.TryTrigger() HitGroup Mismatch. Cannot pick up '" + hga.transform.root.name + "' because its has a non-matching HitGroupAssign.");
#endif
                    return(false);
                }
            }

            ///TODO: Make this into an interface rather than this component type
            var otherVitalNameType = (trigger as IVitalsAffector);

            Vital vital = vitals.GetVital(otherVitalNameType.VitalNameType);
            if (vital == null)
            {
                return(false);
            }

            /// If both are set to 0 (Root) then consider that a match, otherwise zero for one but not the other is a mismatch (for now)
            if ((compatibleMounts == defaultMountingMask) || (compatibleMounts & defaultMountingMask) != 0)
            {
                contactEvent = new ContactEvent(contactEvent)
                {
                    triggeringObj = vital
                };
                return(true);
            }
            else
            {
                return(false);
            }
        }
        public HashSet <IOnTrigger> SphereCastObject(Vector2 center, float radius, HashSet <IOnTrigger> outBuffer,
                                                     int layerMask = LayerManager.DEFAULTLAYER)
        {
            outBuffer.Clear();

            int hitCount = Physics2D.CircleCastNonAlloc(center,
                                                        radius,
                                                        Vector2.zero,
                                                        _castBuffer,
                                                        0.0f,
                                                        layerMask);

            for (int i = 0; i < hitCount; i++)
            {
                IOnTrigger carTriggerProvider = _castBuffer[i].collider.GetComponent <IOnTrigger>();
                if (carTriggerProvider != null)
                {
                    outBuffer.Add(carTriggerProvider);
                }
            }


            return(outBuffer);
        }