void DestroyPlane() { if( sceneNode != null ) { sceneNode.Dispose(); sceneNode = null; } if( meshObject != null ) { meshObject.Dispose(); meshObject = null; } if( meshPlane != null ) { meshPlane.Dispose(); meshPlane = null; } if( material != null ) { material.Dispose(); material = null; } }
void CreatePlane() { DestroyPlane(); string meshName; if( !string.IsNullOrEmpty( customMesh ) ) { meshName = customMesh; } else { meshName = MeshManager.Instance.GetUniqueName( "WaterPlane" ); Vec2 tile; if( fixedPipelineMapTiling != 0 ) tile = size / fixedPipelineMapTiling; else tile = new Vec2( 0, 0 ); meshPlane = MeshManager.Instance.CreatePlane( meshName, new Plane( new Vec3( 0, 0, 1 ), 0 ), size, segments, true, 1, tile, new Vec3( 0, 1, 0 ) ); } //create material string materialName = MaterialManager.Instance.GetUniqueName( "_GeneratedWaterPlane" ); material = (WaterPlaneHighLevelMaterial)HighLevelMaterialManager.Instance. CreateMaterial( materialName, "WaterPlaneHighLevelMaterial" ); material.Init( this ); material.UpdateBaseMaterial(); meshObject = SceneManager.Instance.CreateMeshObject( meshName ); if( meshObject != null ) { meshObject.SetMaterialNameForAllSubObjects( material.Name ); meshObject.RenderQueueGroup = renderQueueGroup; sceneNode = new SceneNode(); sceneNode.Position = position; sceneNode.Visible = Visible; sceneNode.AllowSceneManagementCulling = false; sceneNode.Attach( meshObject ); } needUpdatePlane = false; }