/// <summary> /// Randomize the rotate direction. /// </summary> private void RandomizeTheRotateDirection() { // NOTE(jenchieh): see JCS_Vector3Direction.cs enum. // there are 0 ~ 26 options. int directionSize = JCS_Random.Range(0, 26); mRotateDirection = (JCS_Vector3Direction)directionSize; }
/// <summary> /// Set on top of the box above the ray. /// </summary> /// <param name="cap"></param> /// <param name="maxDistance"></param> public static bool SetOnTopOfClosestBoxWithRay( CharacterController cap, float maxDistance, JCS_Vector3Direction inDirection) { Vector3 direction = cap.transform.TransformDirection(JCS_Util.VectorDirection(inDirection)); RaycastHit[] hits = Physics.RaycastAll(cap.transform.position, direction, maxDistance); /* Nothing detected. */ if (hits.Length == 0) { return(false); } foreach (RaycastHit hit in hits) { /* Check if there are box collider on hit. */ BoxCollider boxCollider = hit.transform.GetComponent <BoxCollider>(); if (boxCollider == null) { continue; } /* Check ray ignore attached. */ JCS_RayIgnore ri = hit.transform.GetComponent <JCS_RayIgnore>(); if (ri != null) { continue; } // set on top of that box SetOnTopOfBox(cap, boxCollider); return(true); } return(false); }
/// <summary> /// Return direction of Unity's Vector system. /// </summary> /// <param name="direction"> direction u wants. </param> /// <returns> vector value. </returns> public static Vector3 VectorDirection(JCS_Vector3Direction direction) { switch (direction) { case JCS_Vector3Direction.CENTER: return(Vector3.zero); case JCS_Vector3Direction.UP: return(Vector3.up); case JCS_Vector3Direction.DOWN: return(Vector3.down); case JCS_Vector3Direction.FORWARD: return(Vector3.forward); case JCS_Vector3Direction.BACK: return(Vector3.back); case JCS_Vector3Direction.RIGHT: return(Vector3.right); case JCS_Vector3Direction.LEFT: return(Vector3.left); case JCS_Vector3Direction.FORWARD_LEFT: return(new Vector3(-1, 0, 1)); case JCS_Vector3Direction.FORWARD_RIGHT: return(new Vector3(1, 0, 1)); case JCS_Vector3Direction.BACK_LEFT: return(new Vector3(-1, 0, -1)); case JCS_Vector3Direction.BACK_RIGHT: return(new Vector3(1, 0, -1)); case JCS_Vector3Direction.UP_LEFT: return(new Vector3(-1, 1, 0)); case JCS_Vector3Direction.UP_RIGHT: return(new Vector3(1, 1, 0)); case JCS_Vector3Direction.FORWARD_UP: return(new Vector3(0, 1, 1)); case JCS_Vector3Direction.FORWARD_DOWN: return(new Vector3(0, -1, 1)); case JCS_Vector3Direction.BACK_UP: return(new Vector3(0, 1, -1)); case JCS_Vector3Direction.BACK_DOWN: return(new Vector3(0, -1, -1)); case JCS_Vector3Direction.DOWN_LEFT: return(new Vector3(-1, -1, 0)); case JCS_Vector3Direction.DOWN_RIGHT: return(new Vector3(1, -1, 0)); case JCS_Vector3Direction.FORWARD_UP_LEFT: return(new Vector3(-1, 1, 1)); case JCS_Vector3Direction.FORWARD_UP_RIGHT: return(new Vector3(1, 1, 1)); case JCS_Vector3Direction.FORWARD_DOWN_LEFT: return(new Vector3(-1, -1, 1)); case JCS_Vector3Direction.FORWARD_DOWN_RIGHT: return(new Vector3(1, -1, 1)); case JCS_Vector3Direction.BACK_UP_LEFT: return(new Vector3(-1, 1, -1)); case JCS_Vector3Direction.BACK_UP_RIGHT: return(new Vector3(1, 1, -1)); case JCS_Vector3Direction.BACK_DOWN_LEFT: return(new Vector3(-1, -1, -1)); case JCS_Vector3Direction.BACK_DOWN_RIGHT: return(new Vector3(1, -1, -1)); } JCS_Debug.LogError("This cannot happed."); // this cannot happens return(Vector3.zero); }