public override void Process() { RaycastHit raycastHit; Collider component = base.GetComponent <Collider>(); Bounds bound = component.bounds; int num = TerrainMeta.HeightMap.Index(TerrainMeta.NormalizeX(bound.min.x)); int num1 = TerrainMeta.HeightMap.Index(TerrainMeta.NormalizeZ(bound.max.x)); int num2 = TerrainMeta.HeightMap.Index(TerrainMeta.NormalizeX(bound.min.z)); int num3 = TerrainMeta.HeightMap.Index(TerrainMeta.NormalizeZ(bound.max.z)); for (int i = num2; i <= num3; i++) { float single = TerrainMeta.HeightMap.Coordinate(i); for (int j = num; j <= num1; j++) { float single1 = TerrainMeta.HeightMap.Coordinate(j); Vector3 vector3 = new Vector3(TerrainMeta.DenormalizeX(single1), bound.max.y, TerrainMeta.DenormalizeZ(single)); Ray ray = new Ray(vector3, Vector3.down); if (component.Raycast(ray, out raycastHit, bound.size.y)) { float single2 = TerrainMeta.NormalizeY(raycastHit.point.y); if (single2 > TerrainMeta.HeightMap.GetHeight01(j, i)) { TerrainMeta.HeightMap.SetHeight(j, i, single2); } } } } GameManager.Destroy(this, 0f); }
protected override void ApplyHeight(Matrix4x4 localToWorld, Matrix4x4 worldToLocal) { if (Radius == 0f) { Radius = extents.x; } bool useBlendMap = blendmap.isValid; Vector3 position = localToWorld.MultiplyPoint3x4(Vector3.zero); TextureData heightdata = new TextureData(heightmap.Get()); TextureData blenddata = new TextureData(useBlendMap ? blendmap.Get() : null); float num = (useBlendMap ? extents.x : Radius); float num2 = (useBlendMap ? extents.z : Radius); Vector3 v = localToWorld.MultiplyPoint3x4(offset + new Vector3(0f - num, 0f, 0f - num2)); Vector3 v2 = localToWorld.MultiplyPoint3x4(offset + new Vector3(num, 0f, 0f - num2)); Vector3 v3 = localToWorld.MultiplyPoint3x4(offset + new Vector3(0f - num, 0f, num2)); Vector3 v4 = localToWorld.MultiplyPoint3x4(offset + new Vector3(num, 0f, num2)); TerrainMeta.HeightMap.ForEachParallel(v, v2, v3, v4, delegate(int x, int z) { float normZ = TerrainMeta.HeightMap.Coordinate(z); float normX = TerrainMeta.HeightMap.Coordinate(x); Vector3 point = new Vector3(TerrainMeta.DenormalizeX(normX), 0f, TerrainMeta.DenormalizeZ(normZ)); Vector3 v5 = worldToLocal.MultiplyPoint3x4(point) - offset; float num3 = 1f; num3 = ((!useBlendMap) ? Mathf.InverseLerp(Radius, Radius - Fade, v5.Magnitude2D()) : blenddata.GetInterpolatedVector((v5.x + extents.x) / size.x, (v5.z + extents.z) / size.z).w); if (num3 != 0f) { float to = TerrainMeta.NormalizeY(position.y + offset.y + heightdata.GetInterpolatedHalf((v5.x + extents.x) / size.x, (v5.z + extents.z) / size.z) * size.y); to = Mathf.SmoothStep(TerrainMeta.HeightMap.GetHeight01(x, z), to, num3); TerrainMeta.HeightMap.SetHeight(x, z, to); } }); }
protected override void ApplyHeight(Matrix4x4 localToWorld, Matrix4x4 worldToLocal) { if ((double)this.Radius == 0.0) { this.Radius = (float)this.extents.x; } bool useBlendMap = Object.op_Inequality((Object)this.blendmap, (Object)null); Vector3 position = ((Matrix4x4) ref localToWorld).MultiplyPoint3x4(Vector3.get_zero()); TextureData heightdata = new TextureData(this.heightmap); TextureData blenddata = useBlendMap ? new TextureData(this.blendmap) : new TextureData(); TerrainMeta.HeightMap.ForEachParallel(((Matrix4x4) ref localToWorld).MultiplyPoint3x4(Vector3.op_Addition(this.offset, new Vector3(-this.Radius, 0.0f, -this.Radius))), ((Matrix4x4) ref localToWorld).MultiplyPoint3x4(Vector3.op_Addition(this.offset, new Vector3(this.Radius, 0.0f, -this.Radius))), ((Matrix4x4) ref localToWorld).MultiplyPoint3x4(Vector3.op_Addition(this.offset, new Vector3(-this.Radius, 0.0f, this.Radius))), ((Matrix4x4) ref localToWorld).MultiplyPoint3x4(Vector3.op_Addition(this.offset, new Vector3(this.Radius, 0.0f, this.Radius))), (Action <int, int>)((x, z) => { float normZ = TerrainMeta.HeightMap.Coordinate(z); float normX = TerrainMeta.HeightMap.Coordinate(x); Vector3 vector3_1; ((Vector3) ref vector3_1).\u002Ector(TerrainMeta.DenormalizeX(normX), 0.0f, TerrainMeta.DenormalizeZ(normZ)); Vector3 vector3_2 = Vector3.op_Subtraction(((Matrix4x4) ref worldToLocal).MultiplyPoint3x4(vector3_1), this.offset); float num1 = !useBlendMap ? Mathf.InverseLerp(this.Radius, this.Radius - this.Fade + Noise.Billow((float)vector3_1.x, (float)vector3_1.z, 4, 0.005f, 0.25f * this.Fade, 2f, 0.5f), Vector3Ex.Magnitude2D(vector3_2)) : (float)blenddata.GetInterpolatedVector((float)((vector3_2.x + this.extents.x) / this.size.x), (float)((vector3_2.z + this.extents.z) / this.size.z)).w; if ((double)num1 == 0.0) { return; } float num2 = TerrainMeta.NormalizeY((float)(position.y + this.offset.y + (double)heightdata.GetInterpolatedHalf((float)((vector3_2.x + this.extents.x) / this.size.x), (float)((vector3_2.z + this.extents.z) / this.size.z)) * this.size.y)); float height = Mathf.SmoothStep(TerrainMeta.HeightMap.GetHeight01(x, z), num2, num1); TerrainMeta.HeightMap.SetHeight(x, z, height); })); }
public void SetHeight(Vector3 worldPos, float opacity, float radius, float fade = 0f) { float single = TerrainMeta.NormalizeX(worldPos.x); float single1 = TerrainMeta.NormalizeZ(worldPos.z); float single2 = TerrainMeta.NormalizeY(worldPos.y); this.SetHeight(single, single1, single2, opacity, radius, fade); }
public void AdjustTerrainHeight() { TerrainHeightMap heightMap = TerrainMeta.HeightMap; TerrainTopologyMap topologyMap = TerrainMeta.TopologyMap; float single6 = 1f; float randomScale = this.RandomScale; float outerPadding = this.OuterPadding; float innerPadding = this.InnerPadding; float outerFade = this.OuterFade; float innerFade = this.InnerFade; float terrainOffset = this.TerrainOffset * TerrainMeta.OneOverSize.y; float width = this.Width * 0.5f; Vector3 startPoint = this.Path.GetStartPoint(); Vector3 endPoint = this.Path.GetEndPoint(); Vector3 startTangent = this.Path.GetStartTangent(); Vector3 vector32 = PathList.rot90 * startTangent; Vector3 vector33 = startPoint - (vector32 * (width + outerPadding + outerFade)); Vector3 vector34 = startPoint + (vector32 * (width + outerPadding + outerFade)); float length = this.Path.Length + single6; for (float i = 0f; i < length; i += single6) { Vector3 vector35 = (this.Spline ? this.Path.GetPointCubicHermite(i) : this.Path.GetPoint(i)); float single7 = (startPoint - vector35).Magnitude2D(); float single8 = (endPoint - vector35).Magnitude2D(); float single9 = Mathf.InverseLerp(0f, width, Mathf.Min(single7, single8)); float single10 = Mathf.Lerp(width, width * randomScale, Noise.Billow(vector35.x, vector35.z, 2, 0.005f, 1f, 2f, 0.5f)); Vector3 vector36 = this.Path.GetTangent(i).XZ3D(); startTangent = vector36.normalized; vector32 = PathList.rot90 * startTangent; Ray ray = new Ray(vector35, startTangent); Vector3 vector37 = vector35 - (vector32 * (single10 + outerPadding + outerFade)); Vector3 vector38 = vector35 + (vector32 * (single10 + outerPadding + outerFade)); float single11 = TerrainMeta.NormalizeY(vector35.y); heightMap.ForEach(vector33, vector34, vector37, vector38, (int x, int z) => { float single = heightMap.Coordinate(x); float single1 = heightMap.Coordinate(z); if ((topologyMap.GetTopology(single, single1) & this.Topology) != 0) { return; } Vector3 vector3 = TerrainMeta.Denormalize(new Vector3(single, single11, single1)); Vector3 vector31 = ray.ClosestPoint(vector3); float single2 = (vector3 - vector31).Magnitude2D(); float single3 = Mathf.InverseLerp(single10 + outerPadding + outerFade, single10 + outerPadding, single2); float single4 = Mathf.InverseLerp(single10 - innerPadding, single10 - innerPadding - innerFade, single2); float single5 = TerrainMeta.NormalizeY(vector31.y); single3 = Mathf.SmoothStep(0f, 1f, single3); single4 = Mathf.SmoothStep(0f, 1f, single4); heightMap.SetHeight(x, z, single5 + terrainOffset * single4, single9 * single3); }); vector33 = vector37; vector34 = vector38; } }
public override void Process() { Collider component = GetComponent <Collider>(); Bounds bounds = component.bounds; int num = TerrainMeta.WaterMap.Index(TerrainMeta.NormalizeX(bounds.min.x)); int num2 = TerrainMeta.WaterMap.Index(TerrainMeta.NormalizeZ(bounds.max.x)); int num3 = TerrainMeta.WaterMap.Index(TerrainMeta.NormalizeX(bounds.min.z)); int num4 = TerrainMeta.WaterMap.Index(TerrainMeta.NormalizeZ(bounds.max.z)); if (component is BoxCollider && base.transform.rotation == Quaternion.identity) { float num5 = TerrainMeta.NormalizeY(bounds.max.y); for (int i = num3; i <= num4; i++) { for (int j = num; j <= num2; j++) { float height = TerrainMeta.WaterMap.GetHeight01(j, i); if (num5 > height) { TerrainMeta.WaterMap.SetHeight(j, i, num5); } } } } else { for (int k = num3; k <= num4; k++) { float normZ = TerrainMeta.WaterMap.Coordinate(k); for (int l = num; l <= num2; l++) { float normX = TerrainMeta.WaterMap.Coordinate(l); Vector3 origin = new Vector3(TerrainMeta.DenormalizeX(normX), bounds.max.y + 1f, TerrainMeta.DenormalizeZ(normZ)); Ray ray = new Ray(origin, Vector3.down); RaycastHit hitInfo; if (component.Raycast(ray, out hitInfo, bounds.size.y + 1f + 1f)) { float num6 = TerrainMeta.NormalizeY(hitInfo.point.y); float height2 = TerrainMeta.WaterMap.GetHeight01(l, k); if (num6 > height2) { TerrainMeta.WaterMap.SetHeight(l, k, num6); } } } } } GameManager.Destroy(this); }
public void AdjustTerrainTopology() { if (this.Topology == 0) { return; } TerrainTopologyMap topologyMap = TerrainMeta.TopologyMap; float single3 = 1f; float randomScale = this.RandomScale; float outerPadding = this.OuterPadding; float innerPadding = this.InnerPadding; float width = this.Width * 0.5f; Vector3 startPoint = this.Path.GetStartPoint(); Vector3 endPoint = this.Path.GetEndPoint(); Vector3 startTangent = this.Path.GetStartTangent(); Vector3 vector31 = PathList.rot90 * startTangent; Vector3 vector32 = startPoint - (vector31 * (width + outerPadding)); Vector3 vector33 = startPoint + (vector31 * (width + outerPadding)); float length = this.Path.Length + single3; for (float i = 0f; i < length; i += single3) { Vector3 vector34 = (this.Spline ? this.Path.GetPointCubicHermite(i) : this.Path.GetPoint(i)); float single4 = (startPoint - vector34).Magnitude2D(); float single5 = (endPoint - vector34).Magnitude2D(); float single6 = Mathf.InverseLerp(0f, width, Mathf.Min(single4, single5)); float single7 = Mathf.Lerp(width, width * randomScale, Noise.Billow(vector34.x, vector34.z, 2, 0.005f, 1f, 2f, 0.5f)); Vector3 vector35 = this.Path.GetTangent(i).XZ3D(); startTangent = vector35.normalized; vector31 = PathList.rot90 * startTangent; Ray ray = new Ray(vector34, startTangent); Vector3 vector36 = vector34 - (vector31 * (single7 + outerPadding)); Vector3 vector37 = vector34 + (vector31 * (single7 + outerPadding)); float single8 = TerrainMeta.NormalizeY(vector34.y); topologyMap.ForEach(vector32, vector33, vector36, vector37, (int x, int z) => { float single = topologyMap.Coordinate(x); float single1 = topologyMap.Coordinate(z); Vector3 vector3 = TerrainMeta.Denormalize(new Vector3(single, single8, single1)); float single2 = (vector3 - ray.ClosestPoint(vector3)).Magnitude2D(); if (Mathf.InverseLerp(single7 + outerPadding, single7 - innerPadding, single2) * single6 > 0.3f) { topologyMap.SetTopology(x, z, this.Topology); } }); vector32 = vector36; vector33 = vector37; } }
public override void Process() { RaycastHit raycastHit; Collider component = base.GetComponent <Collider>(); Bounds bound = component.bounds; int num = TerrainMeta.WaterMap.Index(TerrainMeta.NormalizeX(bound.min.x)); int num1 = TerrainMeta.WaterMap.Index(TerrainMeta.NormalizeZ(bound.max.x)); int num2 = TerrainMeta.WaterMap.Index(TerrainMeta.NormalizeX(bound.min.z)); int num3 = TerrainMeta.WaterMap.Index(TerrainMeta.NormalizeZ(bound.max.z)); if (!(component is BoxCollider) || !(base.transform.rotation == Quaternion.identity)) { for (int i = num2; i <= num3; i++) { float single = TerrainMeta.WaterMap.Coordinate(i); for (int j = num; j <= num1; j++) { float single1 = TerrainMeta.WaterMap.Coordinate(j); Vector3 vector3 = new Vector3(TerrainMeta.DenormalizeX(single1), bound.max.y + 1f, TerrainMeta.DenormalizeZ(single)); Ray ray = new Ray(vector3, Vector3.down); if (component.Raycast(ray, out raycastHit, bound.size.y + 1f + 1f)) { float single2 = TerrainMeta.NormalizeY(raycastHit.point.y); if (single2 > TerrainMeta.WaterMap.GetHeight01(j, i)) { TerrainMeta.WaterMap.SetHeight(j, i, single2); } } } } } else { float single3 = TerrainMeta.NormalizeY(bound.max.y); for (int k = num2; k <= num3; k++) { for (int l = num; l <= num1; l++) { if (single3 > TerrainMeta.WaterMap.GetHeight01(l, k)) { TerrainMeta.WaterMap.SetHeight(l, k, single3); } } } } GameManager.Destroy(this, 0f); }
protected override void ApplyHeight(Matrix4x4 localToWorld, Matrix4x4 worldToLocal) { if (this.Radius == 0f) { this.Radius = this.extents.x; } bool flag = this.blendmap != null; Vector3 vector32 = localToWorld.MultiplyPoint3x4(Vector3.zero); TextureData textureDatum = new TextureData(this.heightmap); TextureData textureDatum1 = (flag ? new TextureData(this.blendmap) : new TextureData()); Vector3 vector33 = localToWorld.MultiplyPoint3x4(this.offset + new Vector3(-this.Radius, 0f, -this.Radius)); Vector3 vector34 = localToWorld.MultiplyPoint3x4(this.offset + new Vector3(this.Radius, 0f, -this.Radius)); Vector3 vector35 = localToWorld.MultiplyPoint3x4(this.offset + new Vector3(-this.Radius, 0f, this.Radius)); Vector3 vector36 = localToWorld.MultiplyPoint3x4(this.offset + new Vector3(this.Radius, 0f, this.Radius)); TerrainMeta.HeightMap.ForEachParallel(vector33, vector34, vector35, vector36, (int x, int z) => { float single = TerrainMeta.HeightMap.Coordinate(z); Vector3 vector3 = new Vector3(TerrainMeta.DenormalizeX(TerrainMeta.HeightMap.Coordinate(x)), 0f, TerrainMeta.DenormalizeZ(single)); Vector3 vector31 = worldToLocal.MultiplyPoint3x4(vector3) - this.offset; float interpolatedVector = 1f; if (!flag) { float single1 = Noise.Billow(vector3.x, vector3.z, 4, 0.005f, 0.25f * this.Fade, 2f, 0.5f); interpolatedVector = Mathf.InverseLerp(this.Radius, this.Radius - this.Fade + single1, vector31.Magnitude2D()); } else { interpolatedVector = textureDatum1.GetInterpolatedVector((vector31.x + this.extents.x) / this.size.x, (vector31.z + this.extents.z) / this.size.z).w; } if (interpolatedVector == 0f) { return; } float single2 = TerrainMeta.NormalizeY(vector32.y + this.offset.y + textureDatum.GetInterpolatedHalf((vector31.x + this.extents.x) / this.size.x, (vector31.z + this.extents.z) / this.size.z) * this.size.y); single2 = Mathf.SmoothStep(TerrainMeta.HeightMap.GetHeight01(x, z), single2, interpolatedVector); TerrainMeta.HeightMap.SetHeight(x, z, single2); }); }
public override void Process() { Collider component = GetComponent <Collider>(); Bounds bounds = component.bounds; int num = TerrainMeta.HeightMap.Index(TerrainMeta.NormalizeX(bounds.min.x)); int num2 = TerrainMeta.HeightMap.Index(TerrainMeta.NormalizeZ(bounds.max.x)); int num3 = TerrainMeta.HeightMap.Index(TerrainMeta.NormalizeX(bounds.min.z)); int num4 = TerrainMeta.HeightMap.Index(TerrainMeta.NormalizeZ(bounds.max.z)); for (int i = num3; i <= num4; i++) { float normZ = TerrainMeta.HeightMap.Coordinate(i); for (int j = num; j <= num2; j++) { float normX = TerrainMeta.HeightMap.Coordinate(j); Vector3 origin = new Vector3(TerrainMeta.DenormalizeX(normX), bounds.max.y, TerrainMeta.DenormalizeZ(normZ)); Ray ray = new Ray(origin, Vector3.down); RaycastHit hitInfo; if (component.Raycast(ray, out hitInfo, bounds.size.y)) { float num5 = TerrainMeta.NormalizeY(hitInfo.point.y); float height = TerrainMeta.HeightMap.GetHeight01(j, i); if (num5 > height) { TerrainMeta.HeightMap.SetHeight(j, i, num5); } } } } if (DestroyGameObject) { GameManager.Destroy(base.gameObject); } else { GameManager.Destroy(this); } }
protected override void ApplyHeight(Matrix4x4 localToWorld, Matrix4x4 worldToLocal) { Vector3 position = ((Matrix4x4) ref localToWorld).MultiplyPoint3x4(Vector3.get_zero()); TextureData heightdata = new TextureData(this.heightmap); TerrainMeta.HeightMap.ForEachParallel(((Matrix4x4) ref localToWorld).MultiplyPoint3x4(Vector3.op_Addition(this.offset, new Vector3((float)-this.extents.x, 0.0f, (float)-this.extents.z))), ((Matrix4x4) ref localToWorld).MultiplyPoint3x4(Vector3.op_Addition(this.offset, new Vector3((float)this.extents.x, 0.0f, (float)-this.extents.z))), ((Matrix4x4) ref localToWorld).MultiplyPoint3x4(Vector3.op_Addition(this.offset, new Vector3((float)-this.extents.x, 0.0f, (float)this.extents.z))), ((Matrix4x4) ref localToWorld).MultiplyPoint3x4(Vector3.op_Addition(this.offset, new Vector3((float)this.extents.x, 0.0f, (float)this.extents.z))), (Action <int, int>)((x, z) => { float normZ = TerrainMeta.HeightMap.Coordinate(z); float normX = TerrainMeta.HeightMap.Coordinate(x); Vector3 vector3_1; ((Vector3) ref vector3_1).\u002Ector(TerrainMeta.DenormalizeX(normX), 0.0f, TerrainMeta.DenormalizeZ(normZ)); Vector3 vector3_2 = Vector3.op_Subtraction(((Matrix4x4) ref worldToLocal).MultiplyPoint3x4(vector3_1), this.offset); float y = (float)(position.y + this.offset.y + (double)heightdata.GetInterpolatedHalf((float)((vector3_2.x + this.extents.x) / this.size.x), (float)((vector3_2.z + this.extents.z) / this.size.z)) * this.size.y); float opacity = Mathf.InverseLerp((float)position.y, (float)position.y + this.Fade, y); if ((double)opacity == 0.0) { return; } float num = TerrainMeta.NormalizeY(y); float height = Mathx.SmoothMax(TerrainMeta.HeightMap.GetHeight01(x, z), num, 0.1f); TerrainMeta.HeightMap.SetHeight(x, z, height, opacity); })); }
protected override void ApplyHeight(Matrix4x4 localToWorld, Matrix4x4 worldToLocal) { Vector3 vector32 = localToWorld.MultiplyPoint3x4(Vector3.zero); TextureData textureDatum = new TextureData(this.heightmap); Vector3 vector33 = localToWorld.MultiplyPoint3x4(this.offset + new Vector3(-this.extents.x, 0f, -this.extents.z)); Vector3 vector34 = localToWorld.MultiplyPoint3x4(this.offset + new Vector3(this.extents.x, 0f, -this.extents.z)); Vector3 vector35 = localToWorld.MultiplyPoint3x4(this.offset + new Vector3(-this.extents.x, 0f, this.extents.z)); Vector3 vector36 = localToWorld.MultiplyPoint3x4(this.offset + new Vector3(this.extents.x, 0f, this.extents.z)); TerrainMeta.HeightMap.ForEachParallel(vector33, vector34, vector35, vector36, (int x, int z) => { float single = TerrainMeta.HeightMap.Coordinate(z); Vector3 vector3 = new Vector3(TerrainMeta.DenormalizeX(TerrainMeta.HeightMap.Coordinate(x)), 0f, TerrainMeta.DenormalizeZ(single)); Vector3 vector31 = worldToLocal.MultiplyPoint3x4(vector3) - this.offset; float u003cu003e4_this = vector32.y + this.offset.y + textureDatum.GetInterpolatedHalf((vector31.x + this.extents.x) / this.size.x, (vector31.z + this.extents.z) / this.size.z) * this.size.y; float single1 = Mathf.InverseLerp(vector32.y, vector32.y + this.Fade, u003cu003e4_this); if (single1 == 0f) { return; } float single2 = TerrainMeta.NormalizeY(u003cu003e4_this); single2 = Mathx.SmoothMax(TerrainMeta.HeightMap.GetHeight01(x, z), single2, 0.1f); TerrainMeta.HeightMap.SetHeight(x, z, single2, single1); }); }
public void RaiseHeight(Vector3 worldPos, float opacity, float radius, float fade = 0.0f) { this.RaiseHeight(TerrainMeta.NormalizeX((float)worldPos.x), TerrainMeta.NormalizeZ((float)worldPos.z), TerrainMeta.NormalizeY((float)worldPos.y), opacity, radius, fade); }