コード例 #1
0
    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;
        }
    }
コード例 #2
0
    private void OnEnable()
    {
        Grapplable g = GetComponent <Grapplable>();

        g.onGrappled += StartGrapple;
        g.onReleased += StopGrapple;
    }
コード例 #3
0
    public void shrinkAndDestroy(float duration)
    {
        Grapplable g = GetComponentInChildren <Grapplable>();

        if (g)
        {
            g.ForceStateChange(false);
        }

        StartCoroutine(shrink(duration));
    }
コード例 #4
0
ファイル: HookScout.cs プロジェクト: dpretzel/hookworm
    private void OnTriggerExit2D(Collider2D collision)
    {
        Grapplable g = collision.GetComponent <Grapplable>();

        if (g.IsGrapplable())
        {
            hooks.Remove(g);
            nearButUngrapplableHooks.Remove(g);
            g.Dehighlight();
        }
    }
コード例 #5
0
ファイル: HookScout.cs プロジェクト: dpretzel/hookworm
    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);
        }
    }
コード例 #6
0
    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);
    }
コード例 #7
0
    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
        }
    }
コード例 #8
0
ファイル: HookScout.cs プロジェクト: dpretzel/hookworm
 private void addGrappableHook(Grapplable g)
 {
     hooks.Add(g);
     g.Highlight();
 }
コード例 #9
0
ファイル: HookScout.cs プロジェクト: dpretzel/hookworm
 private bool isSuitableToGrapple(Grapplable g)
 {
     return(g.IsGrapplable() && inLineOfSight(g.transform));
 }
コード例 #10
0
 private void toFree(Grapplable releasedFrom)
 {
     state = GameplayFSM.FREE;
 }
コード例 #11
0
 private void toHooked(Grapplable hookedOn)
 {
     state = GameplayFSM.HOOKED;
 }
コード例 #12
0
 // 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));
 }
コード例 #13
0
 private void Update()
 {
     bestHook = pickBestHook();
     drawLineToBestHook();
 }