private void OnTriggerEnter2D(Collider2D collision) { if (slottedFlingable == null && !onCooldown) { Flingable flingableCheck = collision.GetComponent <Flingable>(); if (flingableCheck != null && flingableCheck.slottable) { SlotFlingable(flingableCheck); } } }
void SlotFlingable(Flingable newFlingable) { newFlingable.flingSlot = this; slottedFlingable = newFlingable; slottedFlingable.springJoint.connectedBody = rb; slottedFlingable.springJoint.connectedAnchor = Vector2.zero; //slottedFlingable.springJoint.breakForce = Mathf.Infinity; slottedFlingable.springJoint.distance = 0.005f; slottedFlingable.springJoint.enabled = true; //StartCoroutine(SetBreakableForce()); }
IEnumerator TempDisableCollision(Flingable flingable) { Physics2D.IgnoreCollision(flingable.collider, collider2d, true); //print("disabled collision between " + this.name + " and " + flingable.name); while (!flingable.CanFling || flingable.focused) { yield return(null); } //print("re-enabled collision between " + this.name + " and " + flingable.name); Physics2D.IgnoreCollision(flingable.collider, collider2d, false); }
void HighlightTarget(Flingable newHighlight) { if (currentHighlight != null) { currentHighlight.Highlight(false); } currentHighlight = newHighlight; if (newHighlight != null) { newHighlight.Highlight(true); } }
// Update is called once per frame void Update() { //don't care if we can do this in the water any more GetCandidateFlingables(); if (flingCandidates.Count > 0) { target = GetBestFlingable(); HighlightTarget(target); if (!determiningDirection && playerMovement.fishPlayer.GetButtonDown("SecondaryAbility")) { determiningDirection = true; target.focused = true; StartCoroutine(SlowTime(timeSlow)); StartCoroutine(TempDisableCollision(target)); } if (determiningDirection) { playerMovement.SetAimerVisibility(true); Vector2 aimVector = playerMovement.fishPlayer.GetAxis2D("Horizontal", "Vertical"); if (aimVector.magnitude == 0) { aimVector = playerMovement.aimDirection; } playerMovement.aimDirection = aimVector.normalized; transform.position = Vector2.Lerp(transform.position, target.transform.position, .1f); if (playerMovement.fishPlayer.GetButtonUp("SecondaryAbility")) { target.Fling(rb, -aimVector.normalized, flingSpeed, flingAcceleration); determiningDirection = false; HighlightTarget(null); playerMovement.SetAimerVisibility(false); } } } else { determiningDirection = false; target = null; HighlightTarget(null); } }
Flingable GetBestFlingable() { Flingable result = null; float smallestDist = 10000; foreach (Flingable flingable in flingCandidates) { float dist = Vector2.Distance(transform.position, flingable.transform.position); if (dist < smallestDist) { smallestDist = dist; result = flingable; } } return(result); }
public void UnslotFlingable() { slottedFlingable = null; StartCoroutine(CooldownSlot(cooldownAfterFling)); }