static LookPoints GetLookPoints(vLookTarget lookTarget) { LookPoints points = new LookPoints(); var centerArea = lookTarget.centerArea; var sizeArea = lookTarget.sizeArea; var lookTransform = lookTarget.transform; points.frontTopLeft = new Vector3(centerArea.x - sizeArea.x, centerArea.y + sizeArea.y, centerArea.z - sizeArea.z); points.frontTopRight = new Vector3(centerArea.x + sizeArea.x, centerArea.y + sizeArea.y, centerArea.z - sizeArea.z); points.frontBottomLeft = new Vector3(centerArea.x - sizeArea.x, centerArea.y - sizeArea.y, centerArea.z - sizeArea.z); points.frontBottomRight = new Vector3(centerArea.x + sizeArea.x, centerArea.y - sizeArea.y, centerArea.z - sizeArea.z); points.backTopLeft = new Vector3(centerArea.x - sizeArea.x, centerArea.y + sizeArea.y, centerArea.z + sizeArea.z); points.backTopRight = new Vector3(centerArea.x + sizeArea.x, centerArea.y + sizeArea.y, centerArea.z + sizeArea.z); points.backBottomLeft = new Vector3(centerArea.x - sizeArea.x, centerArea.y - sizeArea.y, centerArea.z + sizeArea.z); points.backBottomRight = new Vector3(centerArea.x + sizeArea.x, centerArea.y - sizeArea.y, centerArea.z + sizeArea.z); points.frontTopLeft = lookTransform.TransformPoint(points.frontTopLeft); points.frontTopRight = lookTransform.TransformPoint(points.frontTopRight); points.frontBottomLeft = lookTransform.TransformPoint(points.frontBottomLeft); points.frontBottomRight = lookTransform.TransformPoint(points.frontBottomRight); points.backTopLeft = lookTransform.TransformPoint(points.backTopLeft); points.backTopRight = lookTransform.TransformPoint(points.backTopRight); points.backBottomLeft = lookTransform.TransformPoint(points.backBottomLeft); points.backBottomRight = lookTransform.TransformPoint(points.backBottomRight); return(points); }
// public IEnumerator Attack (Weapon weapon) // { // if (weapon != null) { // if (weapon.projectileCount > 0 && weapon.ready) { // weapon.ready = false; // Projectile obj = ProjectilePoolScript.current.getPooledProjectile (); // if (obj == null) // yield return null; // obj.gameObject.SetActive (true); // obj.transform.position = weapon.openingLocation.position; // obj.transform.rotation = weapon.openingLocation.rotation; // Vector3 relativePos = weapon.target.position - obj.transform.position; // Rigidbody2D projectileRB = obj.GetComponent<Rigidbody2D> (); // projectileRB.AddForce (relativePos * obj.speed); // weapon.projectileCount--; // yield return new WaitForSeconds (weapon.fireRate); // weapon.ready = true; // } // } // } public void UpdateLookDirection(Weapon weapon, float vertical, LookPoints lookPoints) { if (weapon != null) { if (.55 > vertical && vertical > .10) { weapon.transform.position = Vector3.Lerp(weapon.transform.position, lookPoints.upperRightPoint.position, 1); weapon.transform.rotation = Quaternion.Slerp(weapon.transform.rotation, lookPoints.upperRightPoint.rotation, Time.deltaTime * weapon.rotateSpeed); } else if (vertical >= .55) { weapon.transform.position = Vector3.Lerp(weapon.transform.position, lookPoints.abovePoint.position, 1); weapon.transform.rotation = Quaternion.Slerp(weapon.transform.rotation, lookPoints.abovePoint.rotation, Time.deltaTime * weapon.rotateSpeed); } else if (-.10 >= vertical && vertical >= -1) { weapon.transform.position = Vector3.Lerp(weapon.transform.position, lookPoints.bottomRightPoint.position, 1); weapon.transform.rotation = Quaternion.Slerp(weapon.transform.rotation, lookPoints.bottomRightPoint.rotation, Time.deltaTime * weapon.rotateSpeed); } else { weapon.transform.position = Vector3.Lerp(weapon.transform.position, lookPoints.rightPoint.position, 1); weapon.transform.rotation = Quaternion.Slerp(weapon.transform.rotation, lookPoints.rightPoint.rotation, Time.deltaTime * weapon.rotateSpeed); } } }
/// <summary> /// Check if anny corner points of LookTarget area is visible from observer /// </summary> /// <param name="lookTarget">principal transform of lookTarget</param> /// <param name="from">observer point</param> /// <param name="debug">Draw lines </param> /// <returns></returns> public static bool IsVisible(this vLookTarget lookTarget, Vector3 from, bool debug = false) { if (lookTarget.HideObject) { return(false); } LookPoints points = GetLookPoints(lookTarget); if (lookTarget.visibleCheckType == vLookTarget.VisibleCheckType.None) { return(true); } else if (lookTarget.visibleCheckType == vLookTarget.VisibleCheckType.SingleCast) { if (CastPoint(from, lookTarget.transform.TransformPoint(lookTarget.centerArea), lookTarget.transform, debug)) { return(true); } else { return(false); } } else if (lookTarget.visibleCheckType == vLookTarget.VisibleCheckType.BoxCast) { if (CastPoint(from, points.frontTopLeft, lookTarget.transform, debug)) { return(true); } if (CastPoint(from, points.frontTopRight, lookTarget.transform, debug)) { return(true); } if (CastPoint(from, points.frontBottomLeft, lookTarget.transform, debug)) { return(true); } if (CastPoint(from, points.frontBottomRight, lookTarget.transform, debug)) { return(true); } if (CastPoint(from, points.backTopLeft, lookTarget.transform, debug)) { return(true); } if (CastPoint(from, points.backTopRight, lookTarget.transform, debug)) { return(true); } if (CastPoint(from, points.backBottomLeft, lookTarget.transform, debug)) { return(true); } if (CastPoint(from, points.backBottomRight, lookTarget.transform, debug)) { return(true); } } return(false); }
/// <summary> /// Check if anny corner points of LookTarget area is visible from observer /// </summary> /// <param name="lookTarget">principal transform of lookTarget</param> /// <param name="from">observer point</param> /// <param name="layerMask">Layer to check</param> /// <param name="debug">Draw lines </param> /// <returns></returns> public static bool IsVisible(this vLookTarget lookTarget, Vector3 from, LayerMask layerMask, bool debug = false) { if (lookTarget.HideObject) { return(false); } if (lookTarget.visibleCheckType == vLookTarget.VisibleCheckType.None) { if (lookTarget.useLimitToDetect && Vector3.Distance(from, lookTarget.transform.position) > lookTarget.minDistanceToDetect) { return(false); } return(true); } else if (lookTarget.visibleCheckType == vLookTarget.VisibleCheckType.SingleCast) { if (lookTarget.useLimitToDetect && Vector3.Distance(from, lookTarget.centerArea) > lookTarget.minDistanceToDetect) { return(false); } if (CastPoint(from, lookTarget.transform.TransformPoint(lookTarget.centerArea), lookTarget.transform, layerMask, debug)) { return(true); } else { return(false); } } else if (lookTarget.visibleCheckType == vLookTarget.VisibleCheckType.BoxCast) { if (lookTarget.useLimitToDetect && Vector3.Distance(from, lookTarget.transform.position) > lookTarget.minDistanceToDetect) { return(false); } LookPoints points = GetLookPoints(lookTarget); if (CastPoint(from, points.frontTopLeft, lookTarget.transform, layerMask, debug)) { return(true); } if (CastPoint(from, points.frontTopRight, lookTarget.transform, layerMask, debug)) { return(true); } if (CastPoint(from, points.frontBottomLeft, lookTarget.transform, layerMask, debug)) { return(true); } if (CastPoint(from, points.frontBottomRight, lookTarget.transform, layerMask, debug)) { return(true); } if (CastPoint(from, points.backTopLeft, lookTarget.transform, layerMask, debug)) { return(true); } if (CastPoint(from, points.backTopRight, lookTarget.transform, layerMask, debug)) { return(true); } if (CastPoint(from, points.backBottomLeft, lookTarget.transform, layerMask, debug)) { return(true); } if (CastPoint(from, points.backBottomRight, lookTarget.transform, layerMask, debug)) { return(true); } } return(false); }