void HookSomething(Vector3 hookContactPoint)
 {
     // hook something
     if (nodes.Count >= minUpdateOrderNum)
     {
         keepPosition = hookContactPoint;
         hookStatus   = HookStatus.reverseInit;
     }
 }
Example #2
0
    /* Explanation:
     *              0           0       shooting hook
     *              0           1       holding player
     *              1           0       ready
     *              1           1       cooldown
     */

    private void setHookStatus(HookStatus newStatus)
    {
        currentStatus = newStatus;
        switch (newStatus)
        {
        case HookStatus.shooting_hook: { retracted = false;     inUse = false;    break; }

        case HookStatus.holding_player: { retracted = false;     inUse = true;     break; }

        case HookStatus.ready: { retracted = true;      inUse = false;    break; }

        case HookStatus.cooldown: { retracted = true;      inUse = true;     break; }

        default: { Debug.Log("Wrong Status assigned!", this); retracted = inUse = true; break; }
        }
    }
Example #3
0
    // Codigo UI sensor del gancho (hook sensor)
    public void setHookSensorStatus(HookStatus status)
    {
        switch (status)
        {
        case HookStatus.Free:
            txtHookStatus.text = "Estado: Libre";
            break;

        case HookStatus.Loaded:
            txtHookStatus.text = "Estado: Con carga";
            break;

        case HookStatus.CloseToLoad:
            txtHookStatus.text = "Estado: Detectada carga cerca. Listo para coger";
            break;
        }
    }
Example #4
0
    /* Explanation:
     *              0           0           0       shooting Hook
     *              0           0           1       holding Player
     *              0           1           0       ready for next shot
     *              0           1           1       ERROR
     *              1           0           0       pulling Hook
     *              1           0           1       pulling Player
     *              1           1           0       retracting completed
     *              1           1           1       TRUE (=ERROR)
     */
    private void setHookStatus(HookStatus newStatus)
    {
        currentStatus = newStatus;
        switch (newStatus)
        {
        case HookStatus.shooting_hook:  { retracting = false;     retracted = false;      inUse = false;    break; }

        case HookStatus.holding_player: { retracting = false;     retracted = false;      inUse = true;     break; }

        case HookStatus.ready_for_shot: { retracting = false;     retracted = true;       inUse = false;    break; }

        case HookStatus.error: { retracting = false;     retracted = true;       inUse = true;     break; }

        case HookStatus.pulling_hook: { retracting = true;      retracted = false;      inUse = false;    break; }

        case HookStatus.pulling_player: { retracting = true;      retracted = false;      inUse = true;     break; }

        case HookStatus.retracting_complete: { retracting = true;      retracted = true;       inUse = false;    break; }

        default: { Debug.Log("Wrong Status assigned!", this); retracting = retracted = inUse = true; break; }
        }
    }
    void HookLogic()
    {
        if (!shouldKeepPosition)
        {
            // keep hook leader follow owner's position
            mTransform.position = hookStartTransform.position;
        }

        // Pull back hook owner
        if (hookStatus == HookStatus.reverseInit)
        {
            shouldKeepPosition = true;
            // set leader position to hook contact point
            mTransform.position = keepPosition;
            // set leader rotation to hook contact point
            //mTransform.rotation = Quaternion.LookRotation (hook.transform.position - keepPosition, Vector3.up);
            // reverse hook nodes
            nodes.Reverse();
            // start reverse hook
            hookStatus = HookStatus.reverse;
            // Owner can not be controlled
            ownerController.Control(false);
        }


        // Hook shooting
        if (hookStatus == HookStatus.shooting)
        {
            if (nodeCount < maxNodes)
            {
                if (extendInterval > 0)
                {
                    if (Time.time - extendTime > extendInterval)
                    {
                        extendTime = Time.time;
                        addHookNode(shootHookSpeed);
                        nodeCount += shootHookSpeed;
                    }
                }
                else
                {
                    addHookNode(shootHookSpeed);
                    nodeCount += shootHookSpeed;
                }
            }
            else
            {
                hookStatus = HookStatus.takeback;
            }
        }


        // Adjust hook nodes transform when owner position change
        if (hookStatus != HookStatus.reverse && nodes.Count >= minUpdateOrderNum)
        {
            float angle = Quaternion.Angle(hookStartTransform.rotation, mTransform.rotation);
            if (ownerController.IsMoving() && angle < updateOrderAngle)
            {
                bool updateNodeOrder = false;
                if (updateOrderInterval > 0)
                {
                    if (Time.time - updateOrderTime > updateOrderInterval)
                    {
                        updateOrderTime = Time.time;
                        updateNodeOrder = true;
                    }
                }
                else
                {
                    updateNodeOrder = true;
                }
                if (updateNodeOrder)
                {
                    takeBackHook(updateOrderSpeed);
                    addHookNode(updateOrderSpeed);
                }
            }
        }


        // Pull back hook or reverse pull back hook.
        if (hookStatus == HookStatus.takeback || hookStatus == HookStatus.reverse)
        {
            if (nodes.Count > 0)
            {
                int speed = takeBackHookSpeed;
                if (takeBackInterval > 0)
                {
                    if (Time.time - takeBackTime > takeBackInterval)
                    {
                        takeBackTime = Time.time;
                        takeBackHook(speed);
                    }
                }
                else
                {
                    takeBackHook(speed);
                }

                if (hookStatus == HookStatus.reverse && hook != null)                  //pull back hook owner
                {
                    FollowPrev(hook.transform, ownerTransform);
                }
            }

            if (nodes.Count <= 0)
            {
                Destroy(hook);
                Destroy(gameObject);
            }
        }
    }
    private Vector3 keepPosition;                                                       // The position that hook should keep


    void StartTakeBackHook()
    {
        // pull back hook
        hookStatus = HookStatus.takeback;
    }
 void StartTakeBackHook()
 {
     // pull back hook
     hookStatus = HookStatus.takeback;
 }
 void HookSomething(Vector3 hookContactPoint)
 {
     // hook something
     if (nodes.Count >= minUpdateOrderNum) {
         keepPosition = hookContactPoint;
         hookStatus = HookStatus.reverseInit;
     }
 }
    void HookLogic()
    {
        if (!shouldKeepPosition) {
            // keep hook leader follow owner's position
            mTransform.position = hookStartTransform.position;
        }

        // Pull back hook owner
        if (hookStatus == HookStatus.reverseInit) {
            shouldKeepPosition = true;
            // set leader position to hook contact point
            mTransform.position = keepPosition;
            // set leader rotation to hook contact point
            //mTransform.rotation = Quaternion.LookRotation (hook.transform.position - keepPosition, Vector3.up);
            // reverse hook nodes
            nodes.Reverse ();
            // start reverse hook
            hookStatus = HookStatus.reverse;
            // Owner can not be controlled
            ownerController.Control(false);
        }

        // Hook shooting
        if (hookStatus == HookStatus.shooting) {
            if (nodeCount < maxNodes) {
                if(extendInterval > 0){
                    if (Time.time - extendTime > extendInterval) {
                        extendTime = Time.time;
                        addHookNode (shootHookSpeed);
                        nodeCount += shootHookSpeed;
                    }
                }else{
                    addHookNode (shootHookSpeed);
                    nodeCount += shootHookSpeed;
                }
            } else {
                hookStatus = HookStatus.takeback;
            }
        }

        // Adjust hook nodes transform when owner position change
        if (hookStatus != HookStatus.reverse && nodes.Count >= minUpdateOrderNum) {
            float angle = Quaternion.Angle (hookStartTransform.rotation, mTransform.rotation);
            if (ownerController.IsMoving () && angle < updateOrderAngle) {
                bool updateNodeOrder = false;
                if (updateOrderInterval > 0) {
                    if (Time.time - updateOrderTime > updateOrderInterval) {
                        updateOrderTime = Time.time;
                        updateNodeOrder = true;
                    }
                } else {
                    updateNodeOrder = true;
                }
                if (updateNodeOrder) {
                    takeBackHook (updateOrderSpeed);
                    addHookNode (updateOrderSpeed);
                }
            }
        }

        // Pull back hook or reverse pull back hook.
        if (hookStatus == HookStatus.takeback || hookStatus == HookStatus.reverse) {

            if (nodes.Count > 0) {

                int speed = takeBackHookSpeed;
                if (takeBackInterval > 0) {
                    if (Time.time - takeBackTime > takeBackInterval) {
                        takeBackTime = Time.time;
                        takeBackHook (speed);
                    }
                } else {
                    takeBackHook (speed);
                }

                if (hookStatus == HookStatus.reverse && hook != null) {//pull back hook owner
                    FollowPrev (hook.transform, ownerTransform);
                }
            }

            if (nodes.Count <= 0) {
                Destroy (hook);
                Destroy (gameObject);
            }
        }
    }