public float cliffHillRatio = 0; // -1 = cliff | 0 = flat | 1 = hill public void Calculate(HeightAttributes attrs, Vector3 origin, Vector3 castHillCliffDirection, Vector3 cameraDirection) { Vector3 cliffCastPosition; Vector3 hillCastPosition; float minDistance; float maxDistance; // we offset the y value of the raycast position by the length of the raycast hillCastPosition = origin + cameraDirection * attrs.cliffHillCastAwayDistance.y + (castHillCliffDirection * -1) * attrs.maxCliffHillCastDistance.y; minDistance = Vector3.Distance(origin, hillCastPosition + castHillCliffDirection * attrs.maxCliffHillCastDistance.y); maxDistance = Vector3.Distance(origin, hillCastPosition); if (Physics.Raycast(hillCastPosition, castHillCliffDirection, out this.raycastHit, attrs.maxCliffHillCastDistance.y, attrs.cliffHillMaskDetection)) { // there's a ground this.cliffHillRatio = (Vector3.Distance(origin, this.raycastHit.point) - minDistance) / maxDistance; this.BumpHeight = Mathf.SmoothDamp(this.BumpHeight, attrs.cliffHillHeight.y, ref this.bumpHeightSmooth, this.smoothDampTime); this.BumpDistance = Mathf.SmoothDamp(this.BumpDistance, attrs.cliffHillDistance.y, ref this.bumpDistanceSmooth, this.smoothDampTime); } else { // there's a cliff cliffCastPosition = origin + cameraDirection * attrs.cliffHillCastAwayDistance.x; minDistance = Vector3.Distance(origin, cliffCastPosition); maxDistance = Vector3.Distance(origin, cliffCastPosition + castHillCliffDirection * attrs.maxCliffHillCastDistance.x); this.cliffHillRatio = 1; if (Physics.Raycast(cliffCastPosition, castHillCliffDirection, out this.raycastHit, attrs.maxCliffHillCastDistance.x, attrs.cliffHillMaskDetection)) { this.cliffHillRatio = 1 * (Vector3.Distance(origin, this.raycastHit.point) - minDistance) / maxDistance; } this.BumpHeight = Mathf.SmoothDamp(this.BumpHeight, attrs.cliffHillHeight.x, ref this.bumpHeightSmooth, this.smoothDampTime); this.BumpDistance = Mathf.SmoothDamp(this.BumpDistance, attrs.cliffHillDistance.x, ref this.bumpDistanceSmooth, this.smoothDampTime); } }
void Start() { this.state = CameraState.Automatic; this.oldFollow = this.follow.position; this.oldRotation = this.transform.rotation; this.transform.position = this.follow.position + Vector3.one; // set position this.currentHeightAttributes = this.defaultHeightAttributes; this.attrs = this.defaultAttrs; }
public void resetHeightAttributes() { this.currentHeightAttributes = this.defaultHeightAttributes; }
public void setHeightAttributes(HeightAttributes newHeightAttrs) { this.currentHeightAttributes = newHeightAttrs; }