diff options
Diffstat (limited to 'OpenSim.Terrain.BasicTerrain/TerrainEngine.cs')
-rw-r--r-- | OpenSim.Terrain.BasicTerrain/TerrainEngine.cs | 82 |
1 files changed, 54 insertions, 28 deletions
diff --git a/OpenSim.Terrain.BasicTerrain/TerrainEngine.cs b/OpenSim.Terrain.BasicTerrain/TerrainEngine.cs index 87dbf7e..bd4b85f 100644 --- a/OpenSim.Terrain.BasicTerrain/TerrainEngine.cs +++ b/OpenSim.Terrain.BasicTerrain/TerrainEngine.cs | |||
@@ -1,7 +1,7 @@ | |||
1 | using System; | 1 | using System; |
2 | using System.Collections.Generic; | 2 | using System.Collections.Generic; |
3 | using System.Text; | 3 | using System.Text; |
4 | using OpenSim.Terrain.BasicTerrain; | 4 | using libTerrain; |
5 | 5 | ||
6 | namespace OpenSim.Terrain | 6 | namespace OpenSim.Terrain |
7 | { | 7 | { |
@@ -10,11 +10,8 @@ namespace OpenSim.Terrain | |||
10 | /// <summary> | 10 | /// <summary> |
11 | /// A [normally] 256x256 heightmap | 11 | /// A [normally] 256x256 heightmap |
12 | /// </summary> | 12 | /// </summary> |
13 | public float[,] map; | 13 | public Channel heightmap; |
14 | /// <summary> | 14 | |
15 | /// A 256x256 heightmap storing water height values | ||
16 | /// </summary> | ||
17 | public float[,] water; | ||
18 | int w, h; | 15 | int w, h; |
19 | 16 | ||
20 | /// <summary> | 17 | /// <summary> |
@@ -24,8 +21,7 @@ namespace OpenSim.Terrain | |||
24 | { | 21 | { |
25 | w = 256; | 22 | w = 256; |
26 | h = 256; | 23 | h = 256; |
27 | map = new float[w, h]; | 24 | heightmap = new Channel(w, h); |
28 | water = new float[w, h]; | ||
29 | 25 | ||
30 | } | 26 | } |
31 | 27 | ||
@@ -38,7 +34,21 @@ namespace OpenSim.Terrain | |||
38 | float[] heights = new float[w*h]; | 34 | float[] heights = new float[w*h]; |
39 | int i; | 35 | int i; |
40 | for(i=0;i<w*h;i++) { | 36 | for(i=0;i<w*h;i++) { |
41 | heights[i] = map[i / w, i % w]; | 37 | heights[i] = (float)heightmap.map[i / w, i % w]; |
38 | } | ||
39 | return heights; | ||
40 | } | ||
41 | |||
42 | public float[,] getHeights2D() | ||
43 | { | ||
44 | float[,] heights = new float[w, h]; | ||
45 | int x, y; | ||
46 | for (x = 0; x < w; x++) | ||
47 | { | ||
48 | for (y = 0; y < h; y++) | ||
49 | { | ||
50 | heights[x, y] = (float)heightmap.map[x, y]; | ||
51 | } | ||
42 | } | 52 | } |
43 | return heights; | 53 | return heights; |
44 | } | 54 | } |
@@ -52,13 +62,27 @@ namespace OpenSim.Terrain | |||
52 | int i; | 62 | int i; |
53 | for (i = 0; i < w * h; i++) | 63 | for (i = 0; i < w * h; i++) |
54 | { | 64 | { |
55 | map[i / w, i % w] = heights[i]; | 65 | heightmap.map[i / w, i % w] = heights[i]; |
66 | } | ||
67 | } | ||
68 | |||
69 | public float[,] setHeights2D(float[,] heights) | ||
70 | { | ||
71 | int x, y; | ||
72 | for (x = 0; x < w; x++) | ||
73 | { | ||
74 | for (y = 0; y < h; y++) | ||
75 | { | ||
76 | heightmap.set(x,y,(double)heights[x,y]); | ||
77 | } | ||
56 | } | 78 | } |
79 | return heights; | ||
57 | } | 80 | } |
58 | 81 | ||
59 | /// <summary> | 82 | /// <summary> |
60 | /// Loads a file consisting of 256x256 doubles and imports it as an array into the map. | 83 | /// Loads a file consisting of 256x256 doubles and imports it as an array into the map. |
61 | /// </summary> | 84 | /// </summary> |
85 | /// <remarks>TODO: Move this to libTerrain itself</remarks> | ||
62 | /// <param name="filename">The filename of the double array to import</param> | 86 | /// <param name="filename">The filename of the double array to import</param> |
63 | public void loadFromFileF64(string filename) | 87 | public void loadFromFileF64(string filename) |
64 | { | 88 | { |
@@ -70,22 +94,12 @@ namespace OpenSim.Terrain | |||
70 | { | 94 | { |
71 | for (y = 0; y < h; y++) | 95 | for (y = 0; y < h; y++) |
72 | { | 96 | { |
73 | map[x, y] = (float)bs.ReadDouble(); | 97 | heightmap.map[x, y] = bs.ReadDouble(); |
74 | } | 98 | } |
75 | } | 99 | } |
76 | } | 100 | } |
77 | 101 | ||
78 | /// <summary> | 102 | /// <summary> |
79 | /// Swaps the references between the height and water buffers to allow you to edit the water heightmap. Remember to swap back when you are done. | ||
80 | /// </summary> | ||
81 | public void swapWaterBuffer() | ||
82 | { | ||
83 | float[,] temp = map; | ||
84 | map = water; | ||
85 | water = temp; | ||
86 | } | ||
87 | |||
88 | /// <summary> | ||
89 | /// Raises land in a sphere around the specified coordinates | 103 | /// Raises land in a sphere around the specified coordinates |
90 | /// </summary> | 104 | /// </summary> |
91 | /// <param name="rx">Center of the sphere on the X axis</param> | 105 | /// <param name="rx">Center of the sphere on the X axis</param> |
@@ -94,9 +108,9 @@ namespace OpenSim.Terrain | |||
94 | /// <param name="amount">Scale the height of the sphere by this amount (recommended 0..2)</param> | 108 | /// <param name="amount">Scale the height of the sphere by this amount (recommended 0..2)</param> |
95 | public void raise(double rx, double ry, double size, double amount) | 109 | public void raise(double rx, double ry, double size, double amount) |
96 | { | 110 | { |
97 | lock (map) | 111 | lock (heightmap) |
98 | { | 112 | { |
99 | RaiseLower.raiseSphere(this.map, rx, ry, size, amount); | 113 | heightmap.raise(rx, ry, size, amount); |
100 | } | 114 | } |
101 | } | 115 | } |
102 | 116 | ||
@@ -109,9 +123,9 @@ namespace OpenSim.Terrain | |||
109 | /// <param name="amount">Scale the height of the sphere by this amount (recommended 0..2)</param> | 123 | /// <param name="amount">Scale the height of the sphere by this amount (recommended 0..2)</param> |
110 | public void lower(double rx, double ry, double size, double amount) | 124 | public void lower(double rx, double ry, double size, double amount) |
111 | { | 125 | { |
112 | lock (map) | 126 | lock (heightmap) |
113 | { | 127 | { |
114 | RaiseLower.lowerSphere(this.map, rx, ry, size, amount); | 128 | heightmap.lower(rx, ry, size, amount); |
115 | } | 129 | } |
116 | } | 130 | } |
117 | 131 | ||
@@ -120,12 +134,24 @@ namespace OpenSim.Terrain | |||
120 | /// </summary> | 134 | /// </summary> |
121 | public void hills() | 135 | public void hills() |
122 | { | 136 | { |
123 | lock (map) | 137 | lock (heightmap) |
124 | { | 138 | { |
125 | Hills.hillsSpheres(this.map, 1337, 200, 20, 40, true, true, false); | 139 | heightmap.hillsSpheres(200, 20, 40, true, true, false); |
126 | Normalise.normalise(this.map,60); | 140 | heightmap.normalise(); |
141 | heightmap *= 60.0; // Raise to 60m | ||
127 | } | 142 | } |
128 | } | 143 | } |
129 | 144 | ||
145 | public float this[int x, int y] | ||
146 | { | ||
147 | get | ||
148 | { | ||
149 | return (float)heightmap.get(x,y); | ||
150 | } | ||
151 | set | ||
152 | { | ||
153 | heightmap.set(x,y,(double)value); | ||
154 | } | ||
155 | } | ||
130 | } | 156 | } |
131 | } | 157 | } |