Beispiel #1
0
        private void PageVisibilityHandler(object sender, PageVisibilityEventArgs msg)
        {
            TerrainPage terrainPage = sender as TerrainPage;

            if (msg.visible)
            {
                // the page has become visible, so generate and assign the hilight mask texture
                Debug.Assert(terrainPage.HilightMask == null);

                SetRoadMask(terrainPage);
            }
            else
            {
                // the page is moving out of the visible area, so free up the mask textures
                if (terrainPage.HilightMask != null)
                {
                    Texture hilightMask = terrainPage.HilightMask;

                    terrainPage.HilightType = TerrainPage.PageHilightType.None;
                    terrainPage.HilightMask = null;

                    TextureManager.Instance.Unload(hilightMask);
                }
            }
        }
Beispiel #2
0
        private void SetRoadMask(TerrainPage terrainPage)
        {
            // generate a texture from the mask
            PageCoord pc = new PageCoord(terrainPage.Location, TerrainManager.Instance.PageSize);

            byte[] byteMask = mask.GetMask(pc);
            if (byteMask != null)
            {
                Image   maskImage = Image.FromDynamicImage(byteMask, mask.PageSize, mask.PageSize, PixelFormat.A8);
                String  texName   = String.Format("RoadMask-{0}", pc.ToString());
                Texture texImage  = TextureManager.Instance.LoadImage(texName, maskImage);

                terrainPage.HilightMask = texImage;
                terrainPage.HilightType = TerrainPage.PageHilightType.EdgeSharpBlend;
            }
        }
Beispiel #3
0
        private void UpdateRoadMaskTextures()
        {
            int numPages = TerrainManager.Instance.PageArraySize;

            for (int x = 0; x < numPages; x++)
            {
                for (int z = 0; z < numPages; z++)
                {
                    TerrainPage terrainPage = TerrainManager.Instance.LookupPage(x, z).TerrainPage;
                    if ((terrainPage.HilightMask != null) && (terrainPage.HilightType == TerrainPage.PageHilightType.EdgeSharpBlend))
                    {
                        terrainPage.HilightType = TerrainPage.PageHilightType.None;
                        terrainPage.HilightMask.Dispose();
                        terrainPage.HilightMask = null;
                    }

                    SetRoadMask(terrainPage);
                }
            }
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="size">size of the terrain patch in meters</param>
        /// <param name="metersPerSample">meters per sample</param>
        /// <param name="pageHeightMap">which page heightmap to use to build the patch</param>
        /// <param name="startX">starting X offset of the patch within the page (in meters)</param>
        /// <param name="startZ">starting Z offset of the patch within the page (in meters)</param>
        public TerrainPatch(TerrainPage terrainPage, int size, int metersPerSample, int startX, int startZ)
        {
            this.terrainPage = terrainPage;
            patchSize = size;

            // save patch params
            this.pageHeightMap = terrainPage.PageHeightMap;
            this.metersPerSample = metersPerSample;
            this.startX = startX;
            this.startZ = startZ;

            patchLoc = new Vector3(
                terrainPage.Location.x + startX * TerrainManager.oneMeter,
                0,
                terrainPage.Location.z + startZ * TerrainManager.oneMeter);

            numSamples = patchSize / metersPerSample;

            pageHeightMap.SetPatchLOD(startX, startZ, patchSize, metersPerSample);

            ComputeStitchSize();
        }
Beispiel #5
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="size">size of the terrain patch in meters</param>
        /// <param name="metersPerSample">meters per sample</param>
        /// <param name="pageHeightMap">which page heightmap to use to build the patch</param>
        /// <param name="startX">starting X offset of the patch within the page (in meters)</param>
        /// <param name="startZ">starting Z offset of the patch within the page (in meters)</param>
        public TerrainPatch(TerrainPage terrainPage, int size, int metersPerSample, int startX, int startZ)
        {
            this.terrainPage = terrainPage;
            patchSize        = size;

            // save patch params
            this.pageHeightMap   = terrainPage.PageHeightMap;
            this.metersPerSample = metersPerSample;
            this.startX          = startX;
            this.startZ          = startZ;

            patchLoc = new Vector3(
                terrainPage.Location.x + startX * TerrainManager.oneMeter,
                0,
                terrainPage.Location.z + startZ * TerrainManager.oneMeter);

            numSamples = patchSize / metersPerSample;

            pageHeightMap.SetPatchLOD(startX, startZ, patchSize, metersPerSample);

            ComputeStitchSize();
        }
        private void SetRoadMask(TerrainPage terrainPage)
        {
            // generate a texture from the mask
            PageCoord pc = new PageCoord(terrainPage.Location, TerrainManager.Instance.PageSize);

            byte[] byteMask = mask.GetMask(pc);
            if (byteMask != null)
            {

                Image maskImage = Image.FromDynamicImage(byteMask, mask.PageSize, mask.PageSize, PixelFormat.A8);
                String texName = String.Format("RoadMask-{0}", pc.ToString());
                Texture texImage = TextureManager.Instance.LoadImage(texName, maskImage);

                terrainPage.HilightMask = texImage;
                terrainPage.HilightType = TerrainPage.PageHilightType.EdgeSharpBlend;
            }
        }
 /// <summary>
 /// Raise the page visibility event
 /// </summary>
 /// <param name="vis">true if the page is entering visible area, false if the page is leaving visible area</param>
 /// <param name="terrainPage">the page</param>
 private void OnPageVisibility(bool vis, TerrainPage terrainPage)
 {
     PageVisibilityEventHandler pageVis = PageVisibility;
     if (pageVis != null)
     {
         pageVis(terrainPage, new PageVisibilityEventArgs(vis, terrainPage.Location));
     }
 }
 private static String HighlightMaterialName(TerrainPage.PageHilightType type)
 {
     switch (type)
     {
         case TerrainPage.PageHilightType.None:
         default:
             return "MVSMTerrain";
         case TerrainPage.PageHilightType.Colorized:
             return "MVSMTerrainColorizedHilight";
         case TerrainPage.PageHilightType.EdgeBlend:
             return "MVSMTerrainEdgeBlendHilight";
         case TerrainPage.PageHilightType.EdgeSharpBlend:
             return "MVSMTerrainEdgeSharpBlendHilight";
         case TerrainPage.PageHilightType.EdgeSharp:
             return "MVSMTerrainEdgeSharpHilight";
     }
 }