private void OnTriggerExit2D(Collider2D col) { // if it's not my receptor I'm exiting, there is nothing to do. if (col.GetComponent <DragAndDropReceptor>() == receptor) { if (OverlapsNoReceptor()) { receptor = null; OnExitedAllReceptors(); } else { // If this does not hold a receptor, or if the overlappingReceptor priority is enough, cache the overlapping receptor DragAndDropReceptor receptorCandidate = GetValidOverlappingReceptor(); if (receptor == null) { receptor = receptorCandidate; } else if (receptorCandidate != null && receptor.Priority <= receptorCandidate.Priority) { if (receptorCandidate == receptor) { L.ogWarning(this, "Damn, How can this be overlapping something it exited?"); } receptor = receptorCandidate; } else { // I exited my receptor and I'm not overlapping nothing interesting enough receptor = null; } } } }
protected override void OnEnteredAReceptor(DragAndDropReceptor receptor) { bool isTheTipOfHowToUseTips = ((TipReceptor)receptor).Title == text.text; if (!isTheTipOfHowToUseTips) { text.fontStyle = FontStyle.Bold; } }
private void IfIsAboveASingleReceptorMakeItBecomeTheReceptor() { int count = 0; ForEachOverlappingValidReceptorDo(() => { count++; }); if (count == 1) { receptor = GetValidOverlappingReceptor(); } }
private void RegisterIfIsReceptorAndCallWhosInterested(Collider2D possibleReceptorCollider) { DragAndDropReceptor maybeAReceptor = possibleReceptorCollider.GetComponent <DragAndDropReceptor>(); if (maybeAReceptor.GetDragAndDropReceptorType() == GetDragAndDropType()) { this.receptor = maybeAReceptor; OnEnteredAReceptor(maybeAReceptor); } }
private void OnTriggerEnter2D(Collider2D col) { DragAndDropReceptor maybeAReceptor = col.GetComponent <DragAndDropReceptor>(); if (maybeAReceptor != null) { if (ConditionToReplace(maybeAReceptor)) { RegisterIfIsReceptorAndCallWhosInterested(possibleReceptorCollider: col); } } }
private void ForEachOverlappingValidReceptorDo(DoForEachValidOverlappingReceptor doForEachValidReceptor) { // Get all colliders that overlap this object's collider. Collider2D[] colliders = new Collider2D[10]; ContactFilter2D contactFilter = new ContactFilter2D(); int colliderCount = GetComponent <Collider2D>().OverlapCollider(contactFilter.NoFilter(), colliders); for (int i = 0; i < colliderCount; i++) { maybeAReceptor = colliders[i].GetComponent <DragAndDropReceptor>(); if (maybeAReceptor != null && maybeAReceptor.GetDragAndDropReceptorType() == GetDragAndDropType()) { doForEachValidReceptor(); } } }
public void Drop() { if (snap) { BeforeDrop(); snap = false; if (this.receptor != null) { this.receptor.OnDroppedInReceptor(); } else { ReturnToOriginalPosition(); } OnDroppedSpecificBehaviour(); this.receptor = null; } }
public DragAndDropReceptor Get() { dragAndDrop.ForEachOverlappingValidReceptorDo(() => { validOverlappingReceptor = dragAndDrop.maybeAReceptor; }); return(validOverlappingReceptor); }
protected abstract void OnEnteredAReceptor(DragAndDropReceptor receptor);
protected virtual bool ConditionToReplace(DragAndDropReceptor maybeAReceptor) { return(receptor == null || (receptor != null && receptor.Priority <= maybeAReceptor.Priority)); }