Exemple #1
0
 public static MyTerrain GetTerrainAndInitializeIfNeeded(Texture2D heightmap, float seaLevel, float beachWidth, float scaleFactor)
 {
     if (singleton == null)
     {
         singleton = new MyTerrain(heightmap, seaLevel, beachWidth, scaleFactor);
     }
     return(singleton);
 }
        /// <summary>
        /// Encapsula a mudança de sistema de coordenadas.
        /// </summary>
        /// <param name="terrain"></param>
        /// <param name="pointInWC"></param>
        /// <returns></returns>
        protected int[] WorldCoordinateToImageCoordinate(MyTerrain terrain, Vector3 pointInWC)
        {
            Vector3 origin  = terrain.GetOrigin();
            Vector2 spacing = terrain.GetXZSpacing();
            Vector3 _temp   = pointInWC - origin;

            _temp.x *= spacing.x;
            _temp.z *= spacing.y;//(spacing é de 2 coordenadas (xz), com z sendo chamado de y pela classe Vector2.
            int[] pointInImageCoordinate = new int[] { (int)_temp.x, (int)_temp.z };
            return(pointInImageCoordinate);
        }
 //Pega a posição na textura a partir do ponto em wc. A origin dos meu terrenos é em (0,0,0) e a largura
 //é igual à width do bitmap. Não devo jamais tocar em vértices especificos pq a topologia da mesh não é
 //garantida e é responsabilidade da camada acima dessa, a camada de Aplicação. A partir dessa posição eu
 //aplico uma função à imagem pra modificá-la (função essa a ser definida pelos herdeiros) e modifico o terreno,
 //que ficará com o status de Dirty.
 abstract public void Execute(MyTerrain terrain, float intensity, Vector3 pointInWC);
 public Modificator(MyTerrain terrain)
 {
     this.terrain    = terrain;
     currentStrategy = null;
     Intensity       = 0;
 }