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); }
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); }
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); }