void HookSomething(Vector3 hookContactPoint) { // hook something if (nodes.Count >= minUpdateOrderNum) { keepPosition = hookContactPoint; hookStatus = HookStatus.reverseInit; } }
/* 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; } } }
// 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; } }
/* 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 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); } } }