mirror of
https://github.com/opensim/opensim.git
synced 2026-08-11 11:57:03 +08:00
varregion: plug in TerrainData class and modify TerrainModule and LLClientView to use same. This passes a terrain info class around rather than passing a one dimensional array thus allowing variable regions. Update the database storage for variable region sizes. This should be downward compatible (same format for 256x256 regions).
This commit is contained in:
@@ -136,24 +136,4 @@ namespace OpenSim.Region.Framework.Interfaces
|
||||
void Shutdown();
|
||||
}
|
||||
|
||||
// The terrain is stored as a blob in the database with a 'revision' field.
|
||||
// Some implementations of terrain storage would fill the revision field with
|
||||
// the time the terrain was stored. When real revisions were added and this
|
||||
// feature removed, that left some old entries with the time in the revision
|
||||
// field.
|
||||
// Thus, if revision is greater than 'RevisionHigh' then terrain db entry is
|
||||
// left over and it is presumed to be 'Legacy256'.
|
||||
// Numbers are arbitrary and are chosen to to reduce possible mis-interpretation.
|
||||
// If a revision does not match any of these, it is assumed to be Legacy256.
|
||||
public enum DBTerrainRevision
|
||||
{
|
||||
// Terrain is 'double[256,256]'
|
||||
Legacy256 = 11,
|
||||
// Terrain is 'int32, int32, float[,]' where the shorts are X and Y dimensions
|
||||
// The dimensions are presumed to be multiples of 16 and, more likely, multiples of 256.
|
||||
Variable2D = 22,
|
||||
// A revision that is not listed above or any revision greater than this value is 'Legacy256'.
|
||||
RevisionHigh = 1234
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -25,6 +25,8 @@
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
using OpenSim.Framework;
|
||||
|
||||
namespace OpenSim.Region.Framework.Interfaces
|
||||
{
|
||||
public interface ITerrainChannel
|
||||
@@ -35,18 +37,20 @@ namespace OpenSim.Region.Framework.Interfaces
|
||||
|
||||
double this[int x, int y] { get; set; }
|
||||
|
||||
// Return the packaged terrain data for passing into lower levels of communication
|
||||
TerrainData GetTerrainData();
|
||||
|
||||
/// <summary>
|
||||
/// Squash the entire heightmap into a single dimensioned array
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
float[] GetFloatsSerialised();
|
||||
// Get version of map as a single dimensioned array and each value compressed
|
||||
// into an int (compressedHeight = (int)(floatHeight * Constants.TerrainCompression);)
|
||||
// This is done to make the map smaller as it can get pretty larger for variable sized regions.
|
||||
short[] GetCompressedMap();
|
||||
|
||||
double[,] GetDoubles();
|
||||
|
||||
// Check if a location has been updated. Clears the taint flag as a side effect.
|
||||
bool Tainted(int x, int y);
|
||||
|
||||
ITerrainChannel MakeCopy();
|
||||
string SaveToXmlString();
|
||||
void LoadFromXmlString(string data);
|
||||
|
||||
Reference in New Issue
Block a user