public void Release() { state = GrappleHookFSM.UNHOOKED; ropeJoint.enabled = lineRenderer.enabled = false; if (onRelease != null) { onRelease(hookedOn); } // Stop listening for keypresses to alter rope length. InputManager.instance.onUpPressed -= Contract; InputManager.instance.onDownPressed -= Loosen; StopCoroutine(HoldOn()); if (hookedOn) { //get rid of this //check and call de-grapple events /* * Event target = hookedOn.GetComponent<Event>(); * if (target) * if(target.type == EEventType.ON_RELEASE) * target.target.SendMessage(target.function); */ hookedOn.Release(); hookedOn = null; } }
private void OnEnable() { Grapplable g = GetComponent <Grapplable>(); g.onGrappled += StartGrapple; g.onReleased += StopGrapple; }
public void shrinkAndDestroy(float duration) { Grapplable g = GetComponentInChildren <Grapplable>(); if (g) { g.ForceStateChange(false); } StartCoroutine(shrink(duration)); }
private void OnTriggerExit2D(Collider2D collision) { Grapplable g = collision.GetComponent <Grapplable>(); if (g.IsGrapplable()) { hooks.Remove(g); nearButUngrapplableHooks.Remove(g); g.Dehighlight(); } }
private void OnTriggerEnter2D(Collider2D collision) { Grapplable g = collision.GetComponent <Grapplable>(); if (isSuitableToGrapple(g)) { addGrappableHook(g); } else if (g.IsGrapplable() && !inLineOfSight(collision.transform)) { nearButUngrapplableHooks.Add(g); } }
private Grapplable pickBestHook() { Grapplable bestSoFar = null; float bestRatingSoFar = 0; foreach (Grapplable currentHook in hooks) { float currentRating = rateHook(currentHook); if (currentRating > bestRatingSoFar) { bestSoFar = currentHook; bestRatingSoFar = currentRating; } } return(bestSoFar); }
public void Fire() { hookedOn = hookPicker.getBestHook(); if (hookedOn) { if (hookedOn.Grapple()) { state = GrappleHookFSM.HOOKED; } if (state == GrappleHookFSM.UNHOOKED) { return; } if (onSuccessfulGrapple != null) { onSuccessfulGrapple(hookedOn); } // Start listening for keypresses to alter rope length. InputManager.instance.onUpPressed += Contract; InputManager.instance.onDownPressed += Loosen; //enable the rope physics ropeJoint.distance = Vector2.Distance(transform.position, hookedOn.transform.position); ropeJoint.connectedBody = hookedOn.GetComponent <Rigidbody2D>(); ropeJoint.enabled = true; //draw the rope lineRenderer.enabled = true; StartCoroutine(HoldOn()); // get rid of this //check and call grapple events /* * Event target = hookedOn.GetComponent<Event>(); * if (target) * if (target.type == EEventType.ON_GRAPPLE) * target.target.SendMessage(target.function); */ //MAKE IT HANDLE MULTIPLE EVENTS ON 1 GO } }
private void addGrappableHook(Grapplable g) { hooks.Add(g); g.Highlight(); }
private bool isSuitableToGrapple(Grapplable g) { return(g.IsGrapplable() && inLineOfSight(g.transform)); }
private void toFree(Grapplable releasedFrom) { state = GameplayFSM.FREE; }
private void toHooked(Grapplable hookedOn) { state = GameplayFSM.HOOKED; }
// assign a float value based on the direction we're aiming private float rateHook(Grapplable hook) { return(1 / Vector2.Distance(new Vector2(transform.position.x, transform.position.y) + Direction.getAimingVector() * idealDistance, hook.transform.position)); }
private void Update() { bestHook = pickBestHook(); drawLineToBestHook(); }