diff options
Diffstat (limited to 'Runtime/Terrain/ScriptBindings/TerrainDataBindings.txt')
-rw-r--r-- | Runtime/Terrain/ScriptBindings/TerrainDataBindings.txt | 406 |
1 files changed, 406 insertions, 0 deletions
diff --git a/Runtime/Terrain/ScriptBindings/TerrainDataBindings.txt b/Runtime/Terrain/ScriptBindings/TerrainDataBindings.txt new file mode 100644 index 0000000..c14d84a --- /dev/null +++ b/Runtime/Terrain/ScriptBindings/TerrainDataBindings.txt @@ -0,0 +1,406 @@ +C++RAW +#include "UnityPrefix.h" +#include "Runtime/Terrain/Heightmap.h" +#include "Runtime/Filters/Mesh/LodMesh.h" +#include "Runtime/Terrain/DetailDatabase.h" +#include "Runtime/Terrain/SplatDatabase.h" +#include "Runtime/Terrain/TerrainData.h" +#include "Runtime/Terrain/TerrainInstance.h" +#include "Runtime/Mono/MonoBehaviour.h" +#include "Runtime/BaseClasses/GameObject.h" +#include "Runtime/Terrain/TerrainRenderer.h" +#include "Runtime/Camera/Light.h" +#include "Runtime/Terrain/DetailRenderer.h" +#include "Runtime/Terrain/ImposterRenderTexture.h" +#include "Runtime/Terrain/TreeRenderer.h" +#include "Runtime/Terrain/Wind.h" +#include "Runtime/Terrain/Tree.h" +#include "Runtime/Scripting/Scripting.h" +#include "Runtime/Scripting/ScriptingUtility.h" +#include "Runtime/Scripting/ScriptingExportUtility.h" + +using namespace Unity; +using namespace std; + +CSRAW + +#if ENABLE_TERRAIN + +using System; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Collections; +using System.Collections.Generic; + +namespace UnityEngine +{ + +CSRAW [StructLayout (LayoutKind.Sequential)] +CONDITIONAL ENABLE_TERRAIN +CLASS TreePrototype + CSRAW internal GameObject m_Prefab; + CSRAW internal float m_BendFactor; + + CSRAW public GameObject prefab { get { return m_Prefab; } set { m_Prefab = value; } } + + CSRAW public float bendFactor { get { return m_BendFactor; } set { m_BendFactor = value; } } +END + +ENUM DetailRenderMode + GrassBillboard = 0, + VertexLit = 1, + Grass = 2 +END + +CSRAW [StructLayout (LayoutKind.Sequential)] +CONDITIONAL ENABLE_TERRAIN +CLASS DetailPrototype + CSRAW GameObject m_Prototype = null; + CSRAW Texture2D m_PrototypeTexture = null; + CSRAW Color m_HealthyColor = new Color (67/255F, 249/255F, 42/255F, 1 ); + CSRAW Color m_DryColor = new Color (205/255.0F, 188/255.0F, 26/255.0F, 1.0F ) ; + CSRAW float m_MinWidth = 1.0F; + CSRAW float m_MaxWidth = 2.0F; + CSRAW float m_MinHeight = 1F; + CSRAW float m_MaxHeight = 2F; + CSRAW float m_NoiseSpread = 0.1F; + CSRAW float m_BendFactor = 0.1F; + CSRAW int m_RenderMode = 2; + CSRAW int m_UsePrototypeMesh = 0; + + CSRAW public GameObject prototype { get { return m_Prototype; } set { m_Prototype = value; } } + + CSRAW public Texture2D prototypeTexture { get { return m_PrototypeTexture; } set { m_PrototypeTexture = value; } } + + CSRAW public float minWidth { get { return m_MinWidth; } set { m_MinWidth = value; } } + + CSRAW public float maxWidth { get { return m_MaxWidth; } set { m_MaxWidth = value; } } + + CSRAW public float minHeight { get { return m_MinHeight; } set { m_MinHeight = value; } } + + CSRAW public float maxHeight { get { return m_MaxHeight; } set { m_MaxHeight = value; } } + + CSRAW public float noiseSpread { get { return m_NoiseSpread; } set { m_NoiseSpread = value; } } + + CSRAW public float bendFactor { get { return m_BendFactor; } set { m_BendFactor = value; } } + + CSRAW public Color healthyColor { get { return m_HealthyColor; } set { m_HealthyColor = value; } } + + CSRAW public Color dryColor { get { return m_DryColor; } set { m_DryColor = value; } } + + CSRAW public DetailRenderMode renderMode { get { return (DetailRenderMode)m_RenderMode; } set { m_RenderMode = (int)value; } } + + CSRAW public bool usePrototypeMesh { get { return m_UsePrototypeMesh != 0; } set { m_UsePrototypeMesh = value ? 1 : 0; } } +END + +CSRAW [StructLayout (LayoutKind.Sequential)] +CONDITIONAL ENABLE_TERRAIN +CLASS SplatPrototype + CSRAW Texture2D m_Texture; + CSRAW Texture2D m_NormalMap; + CSRAW Vector2 m_TileSize = new Vector2 (15,15); + CSRAW Vector2 m_TileOffset = new Vector2 (0, 0); + + CSRAW public Texture2D texture { get { return m_Texture; } set { m_Texture = value; } } + + CSRAW public Texture2D normalMap { get { return m_NormalMap; } set { m_NormalMap = value; } } + + CSRAW public Vector2 tileSize { get { return m_TileSize; } set { m_TileSize = value; } } + + CSRAW public Vector2 tileOffset { get { return m_TileOffset; } set { m_TileOffset = value; } } +END + + +CONDITIONAL ENABLE_TERRAIN +STRUCT TreeInstance + CSRAW Vector3 m_Position; + CSRAW float m_WidthScale; + CSRAW float m_HeightScale; + CSRAW Color32 m_Color; + CSRAW Color32 m_LightmapColor; + CSRAW int m_Index; + CSRAW float m_TemporaryDistance; + + public Vector3 position { get { return m_Position; } set { m_Position = value; } } + + public float widthScale { get { return m_WidthScale; } set { m_WidthScale = value; } } + + public float heightScale { get { return m_HeightScale; } set { m_HeightScale = value; } } + + public Color color { get { return m_Color; } set { m_Color = value; } } + + public Color lightmapColor { get { return m_LightmapColor; } set { m_LightmapColor = value; } } + + public int prototypeIndex { get { return m_Index; } set { m_Index = value; } } + + internal float temporaryDistance { get { return m_TemporaryDistance; } set { m_TemporaryDistance = value; } } +END + +CONDITIONAL ENABLE_TERRAIN +CLASS TerrainData : Object + CSRAW public TerrainData () + { + Internal_Create(this); + } + + CUSTOM internal void Internal_Create ([Writable]TerrainData terrainData) + { + TerrainData* td = NEW_OBJECT (TerrainData); + td->Reset(); + + //this is only for ensuring, that HeightMap initialized properly before someone uses TerrainData + if (td) + td->GetHeightmap().SetResolution(0); + + Scripting::ConnectScriptingWrapperToObject (terrainData.GetScriptingObject(), td); + td->AwakeFromLoad(kInstantiateOrCreateFromCodeAwakeFromLoad); + } + + CUSTOM internal bool HasUser (GameObject user) { return self->HasUser (user); } + CUSTOM internal void AddUser (GameObject user) { self->AddUser (user); } + CUSTOM internal void RemoveUser (GameObject user) { self->RemoveUser (user); } + + // HEIGHTMAP INTERFACE + C++RAW #define GETHEIGHT (&(self->GetHeightmap())) + + // ============================================= + C++RAW #define GETDETAIL (&(self->GetDetailDatabase())) + + C++RAW #define GETTREEDATABASE (&(self->GetTreeDatabase())) + + // PhysicMaterial the terrain. + CONDITIONAL ENABLE_PHYSICS + CUSTOM_PROP PhysicMaterial physicMaterial { return Scripting::ScriptingWrapperFor(GETHEIGHT->GetPhysicMaterial ()); } { GETHEIGHT->SetPhysicMaterial (value); } + CUSTOM_PROP int heightmapWidth { return GETHEIGHT->GetWidth (); } + CUSTOM_PROP int heightmapHeight { return GETHEIGHT->GetHeight (); } + + CUSTOM_PROP int heightmapResolution { return GETHEIGHT->GetResolution (); } { GETHEIGHT->SetResolution (value); } + + CUSTOM_PROP Vector3 heightmapScale { return GETHEIGHT->GetScale (); } + + CUSTOM_PROP Vector3 size { return GETHEIGHT->GetSize (); } { GETHEIGHT->SetSize (value); } + + CUSTOM float GetHeight (int x, int y) { return GETHEIGHT->GetHeight (x,y); } + CUSTOM float GetInterpolatedHeight (float x, float y) { return GETHEIGHT->GetInterpolatedHeight (x,y); } + + CUSTOM public float[,] GetHeights (int xBase, int yBase, int width, int height) { + + if(xBase < 0 || yBase < 0 || xBase+width > GETHEIGHT->GetWidth() || yBase+height > GETHEIGHT->GetHeight ()) + { + Scripting::RaiseMonoException ("Trying to access out-of-bounds terrain height information."); + return SCRIPTING_NULL; + } + + ScriptingArrayPtr map = CreateScriptingArray2D<float> (MONO_COMMON.floatSingle, height, width); + GETHEIGHT->GetHeights (xBase, yBase, width, height, &Scripting::GetScriptingArrayElement<float>(map, 0)); + return map; + } + + CSRAW public void SetHeights (int xBase, int yBase, float[,] heights) { + if (heights == null) + { + throw new System.NullReferenceException (); + } + if (xBase+heights.GetLength(1) > heightmapWidth || xBase < 0 || yBase < 0 || yBase+heights.GetLength(0) > heightmapHeight) + { + throw new System.Exception (UnityString.Format ("X or Y base out of bounds. Setting up to {0}x{1} while map size is {2}x{3}", xBase+heights.GetLength(1), yBase+heights.GetLength(0), heightmapWidth, heightmapHeight)); + } + + Internal_SetHeights (xBase, yBase, heights.GetLength(1), heights.GetLength(0), heights); + } + + CUSTOM private void Internal_SetHeights (int xBase, int yBase, int width, int height, float[,] heights) + { + GETHEIGHT->SetHeights(xBase, yBase, width, height, &Scripting::GetScriptingArrayElement<float>(heights, 0), false); + GETTREEDATABASE->RecalculateTreePositions(); + } + + CUSTOM private void Internal_SetHeightsDelayLOD (int xBase, int yBase, int width, int height, float[,] heights) + { + GETHEIGHT->SetHeights(xBase, yBase, width, height, &Scripting::GetScriptingArrayElement<float>(heights, 0), true); + } + + CSRAW internal void SetHeightsDelayLOD (int xBase, int yBase, float[,] heights) + { + Internal_SetHeightsDelayLOD (xBase, yBase, heights.GetLength(1), heights.GetLength(0), heights); + } + + CUSTOM float GetSteepness (float x, float y) { return GETHEIGHT->GetSteepness (x,y); } + + CUSTOM Vector3 GetInterpolatedNormal (float x, float y) { return GETHEIGHT->GetInterpolatedNormal (x,y); } + + + CUSTOM internal int GetAdjustedSize (int size) { return GETHEIGHT->GetAdjustedSize (size); } + + C++RAW #undef GETHEIGHT + + CUSTOM_PROP float wavingGrassStrength { return GETDETAIL->GetWavingGrassStrength(); } { GETDETAIL->SetWavingGrassStrength (value); self->SetDirty(); } + CUSTOM_PROP float wavingGrassAmount { return GETDETAIL->GetWavingGrassAmount(); } { GETDETAIL-> SetWavingGrassAmount (value); self->SetDirty(); } + CUSTOM_PROP float wavingGrassSpeed { return GETDETAIL->GetWavingGrassSpeed(); } { GETDETAIL-> SetWavingGrassSpeed (value); self->SetDirty(); } + CUSTOM_PROP Color wavingGrassTint { return GETDETAIL->GetWavingGrassTint(); } { GETDETAIL-> SetWavingGrassTint (value); self->SetDirty(); } + + CUSTOM_PROP int detailWidth { return GETDETAIL->GetWidth (); } + + CUSTOM_PROP int detailHeight { return GETDETAIL->GetHeight (); } + + CUSTOM void SetDetailResolution (int detailResolution, int resolutionPerPatch) + { + GETDETAIL->SetDetailResolution(detailResolution, resolutionPerPatch); + } + + CUSTOM_PROP int detailResolution { return GETDETAIL->GetResolution (); } + + CUSTOM_PROP internal int detailResolutionPerPatch { return GETDETAIL->GetResolutionPerPatch (); } + + CUSTOM internal void ResetDirtyDetails () { GETDETAIL->ResetDirtyDetails (); } + + CUSTOM void RefreshPrototypes () + { + GETDETAIL->RefreshPrototypes (); + GETTREEDATABASE->RefreshPrototypes (); + } + + CUSTOM_PROP DetailPrototype[] detailPrototypes + { + return VectorToScriptingClassArray<DetailPrototype, MonoDetailPrototype> (GETDETAIL->GetDetailPrototypes(), MONO_COMMON.detailPrototype, DetailPrototypeToMono); + } + { + GETDETAIL->SetDetailPrototypes (ScriptingClassArrayToVector<DetailPrototype, MonoDetailPrototype> (value, DetailPrototypeToCpp)); + } + + CUSTOM int[] GetSupportedLayers (int xBase, int yBase, int totalWidth, int totalHeight) { + int size = GETDETAIL->GetSupportedLayers (xBase, yBase, totalWidth, totalHeight, NULL); // Get the count of layers + ScriptingArrayPtr arr = CreateScriptingArray<int>(MONO_COMMON.int_32, size); + GETDETAIL->GetSupportedLayers (xBase, yBase, totalWidth, totalHeight, &Scripting::GetScriptingArrayElement<int> (arr, 0)); + return arr; + } + + CUSTOM int[,] GetDetailLayer (int xBase, int yBase, int width, int height, int layer) { + ScriptingArrayPtr map = CreateScriptingArray2D<int> (MONO_COMMON.int_32, height, width); + GETDETAIL->GetLayer (xBase, yBase, width, height, layer, &Scripting::GetScriptingArrayElement<int> (map, 0)); + return map; + } + + CSRAW public void SetDetailLayer (int xBase, int yBase, int layer, int[,] details) { + Internal_SetDetailLayer (xBase, yBase, details.GetLength(1), details.GetLength(0), layer, details); + } + + CUSTOM private void Internal_SetDetailLayer (int xBase, int yBase, int totalWidth, int totalHeight, int detailIndex, int[,] data) + { + GETDETAIL->SetLayer (xBase, yBase, totalWidth, totalHeight, detailIndex, &Scripting::GetScriptingArrayElement<int> (data, 0)); + } + + CUSTOM_PROP TreeInstance[] treeInstances + { + return CreateScriptingArray(&GETTREEDATABASE->GetInstances()[0], GETTREEDATABASE->GetInstances().size(), MONO_COMMON.treeInstance); + } + { + Scripting::RaiseIfNull((ScriptingObjectPtr)value); + TreeInstance *first = &Scripting::GetScriptingArrayElement<TreeInstance> (value, 0); + GETTREEDATABASE->GetInstances().assign (first, first + GetScriptingArraySize(value)); + GETTREEDATABASE->UpdateTreeInstances(); + } + CUSTOM_PROP TreePrototype[] treePrototypes + { return VectorToScriptingClassArray<TreePrototype, MonoTreePrototype> (GETTREEDATABASE->GetTreePrototypes(), MONO_COMMON.treePrototype, TreePrototypeToMono); } + { GETTREEDATABASE->SetTreePrototypes (ScriptingClassArrayToVector<TreePrototype, MonoTreePrototype> (value, TreePrototypeToCpp)); } + + CUSTOM internal void RemoveTreePrototype (int index) + { + GETTREEDATABASE->RemoveTreePrototype (index); + } + + CUSTOM internal void RecalculateTreePositions () + { + GETTREEDATABASE->RecalculateTreePositions (); + } + + CUSTOM internal void RemoveDetailPrototype (int index) + { + GETDETAIL->RemoveDetailPrototype (index); + } + + C++RAW #undef GETDETAIL + + + // OLD SPLAT DATABASE + // ============================================= + C++RAW #define GETSPLAT (&(self->GetSplatDatabase())) + + CUSTOM_PROP int alphamapLayers { return GETSPLAT->GetDepth(); } + CUSTOM public float[,,] GetAlphamaps (int x, int y, int width, int height) { + ScriptingArrayPtr map = CreateScriptingArray3D<float> (MONO_COMMON.floatSingle, height, width, GETSPLAT->GetDepth ()); + GETSPLAT->GetAlphamaps (x, y, width, height, &Scripting::GetScriptingArrayElement<float>(map, 0)); + return map; + } + + CUSTOM_PROP int alphamapResolution { return GETSPLAT->GetAlphamapResolution(); } { return GETSPLAT->SetAlphamapResolution(value); } + CUSTOM_PROP int alphamapWidth { return GETSPLAT->GetAlphamapResolution(); } + CUSTOM_PROP int alphamapHeight { return GETSPLAT->GetAlphamapResolution(); } + CUSTOM_PROP int baseMapResolution { return GETSPLAT->GetBaseMapResolution(); } { return GETSPLAT->SetBaseMapResolution(value); } + + CSRAW public void SetAlphamaps (int x, int y, float[,,] map) + { + if (map.GetLength(2) != alphamapLayers) { + throw new System.Exception (UnityString.Format ("Float array size wrong (layers should be {0})", alphamapLayers)); + } + // TODO: crop the map or throw if outside, + + Internal_SetAlphamaps (x,y, map.GetLength(1), map.GetLength(0), map); + } + CUSTOM private void Internal_SetAlphamaps (int x, int y, int width, int height, float[,,] map) + { + GETSPLAT->SetAlphamaps (x, y, width, height, &Scripting::GetScriptingArrayElement<float>(map, 0)); + } + + CUSTOM internal void RecalculateBasemapIfDirty() + { + GETSPLAT->RecalculateBasemapIfDirty(); + } + + CUSTOM internal void SetBasemapDirty(bool dirty) + { + GETSPLAT->SetBasemapDirty(dirty); + } + + CUSTOM private Texture2D GetAlphamapTexture(int index) { + return Scripting::ScriptingWrapperFor (GETSPLAT->GetAlphaTexture(index)); + } + + CUSTOM_PROP private int alphamapTextureCount { + return GETSPLAT->GetAlphaTextureCount(); + } + + CSRAW internal Texture2D[] alphamapTextures + { + get { + Texture2D[] splatTextures = new Texture2D[alphamapTextureCount]; + for (int i=0;i<splatTextures.Length;i++) + splatTextures[i] = GetAlphamapTexture(i); + return splatTextures; + } + } + + CUSTOM_PROP SplatPrototype[] splatPrototypes + { return VectorToScriptingClassArray<SplatPrototype, MonoSplatPrototype> (GETSPLAT->GetSplatPrototypes(), MONO_COMMON.splatPrototype, SplatPrototypeToMono); } + { GETSPLAT->SetSplatPrototypes (ScriptingClassArrayToVector<SplatPrototype, MonoSplatPrototype> (value, SplatPrototypeToCpp)); } + C++RAW #undef GET + + CUSTOM internal bool HasTreeInstances () + { + return !self->GetTreeDatabase().GetInstances().empty(); + } + + CUSTOM internal void AddTree (out TreeInstance tree) + { + self->GetTreeDatabase().AddTree (*tree); + } + + CUSTOM internal int RemoveTrees (Vector2 position, float radius, int prototypeIndex) + { + return self->GetTreeDatabase().RemoveTrees (position, radius, prototypeIndex); + } +END + +CSRAW +} +#endif // ENABLE_TERRAIN |