public void UpdateDetailTextureProperties(DetailTextureResource tex, bool bUpdateMaterialID)
        {
            Debug.Assert(DetailTextures.Contains(tex));
              Modified = true;
              if (!HasEngineInstance())
            return;

              bool bShowProgess = !EngineTerrain.AllSectorsLoaded(tex._iSectorX1, tex._iSectorY1,tex._iSectorX2, tex._iSectorY2);
              if (bShowProgess)
              {
            EditorManager.Progress.ShowProgressDialog("Updating detail texture properties");
            EngineTerrain.UpdateDetailTextureProperties(tex, true, EditorManager.Progress, bUpdateMaterialID);
            EditorManager.Progress.HideProgressDialog();
              }
              else
              {
            EngineTerrain.UpdateDetailTextureProperties(tex, true, null, bUpdateMaterialID); // fast enough without progress bar
              }

              // update the terrain effect
              UpdateAutoTerrainEffect();

              EditorManager.ActiveView.UpdateView(false);
        }
 public DetailTextureResource CreateDetailTexture()
 {
     DetailTextureResource tex = new DetailTextureResource(this, GetNewDetailTextureID());
       return tex;
 }
        public void DeleteDetailTexture(DetailTextureResource tex)
        {
            Debug.Assert(DetailTextures.Contains(tex));
              Debug.Assert(tex._ownerTerrain==this);
              Debug.Assert(tex._bIsBaseTexture == false);
              DetailTextures.Remove(tex);
              EnumDetailTextures();
              Modified = true;
              if (!HasEngineInstance())
            return;

              bool bShowProgess = !EngineTerrain.AllSectorsLoaded(tex._iSectorX1, tex._iSectorY1,tex._iSectorX2, tex._iSectorY2);
              if (bShowProgess)
              {
            EditorManager.Progress.ShowProgressDialog("Updating detail texture properties");
            EngineTerrain.DeleteDetailTexture(tex, EditorManager.Progress);
            EditorManager.Progress.HideProgressDialog();
              }
              else
              {
            EngineTerrain.DeleteDetailTexture(tex, null); // fast enough without progress
              }

              // update the terrain effect
              UpdateAutoTerrainEffect();

              TerrainEditor.TriggerOnDetailTextureListChanged(new DetailTextureListChangedArgs(DetailTextureListChangedArgs.Action.RemovedTexture, tex));
              EditorManager.ActiveView.UpdateView(false);
              tex._ownerTerrain = null;
        }
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="component"></param>
 /// <param name="propertyName"></param>
 public DetailTextureListChangedArgs(Action action, DetailTextureResource textureElement)
 {
     _textureElement = textureElement;
       _action = action;
 }
        public void AddDetailTexture(DetailTextureResource tex)
        {
            Debug.Assert(!DetailTextures.Contains(tex));
              tex._bIsBaseTexture = DetailTextures.Count == 0; // the first one is the detail texture
              if (tex._bIsBaseTexture)
              {
            tex._iSectorX1 = tex._iSectorY1 = 0;
            tex._iSectorX2 = Config._sectorCount.Width - 1;
            tex._iSectorY2 = Config._sectorCount.Height - 1;
              }

              if (tex._iListIndex < 0 || tex._iListIndex >= DetailTextures.Count)
            DetailTextures.Add(tex);
              else
            DetailTextures.Insert(tex._iListIndex, tex);
              EnumDetailTextures();
              tex._ownerTerrain = this;
              Modified = true;
              if (HasEngineInstance())
              {
            EngineTerrain.UpdateDetailTextureProperties(tex, true, null,false); // does not perform time consuming update
            EngineTerrain.UpdateDetailTextureOrder(this.DetailTextures, false, null);
              }

              // update the terrain effect
              UpdateAutoTerrainEffect();

              TerrainEditor.TriggerOnDetailTextureListChanged(new DetailTextureListChangedArgs(DetailTextureListChangedArgs.Action.AddedTexture, tex));
              EditorManager.ActiveView.UpdateView(false);
        }
 public AddDetailTextureAction(TerrainShape terrain, DetailTextureResource texture)
 {
     _texture = texture;
       _terrain = terrain;
 }
 protected AddDetailTextureAction(SerializationInfo info, StreamingContext context)
     : base(info, context)
 {
     _terrain = (TerrainShape)info.GetValue("_terrain", typeof(TerrainShape));
       _texture = (DetailTextureResource)info.GetValue("_texture", typeof(DetailTextureResource));
 }
 protected MoveDetailTextureAction(SerializationInfo info, StreamingContext context)
     : base(info, context)
 {
     _terrain = (TerrainShape)info.GetValue("_terrain", typeof(TerrainShape));
       _texture = (DetailTextureResource)info.GetValue("_texture", typeof(DetailTextureResource));
       iOldIndex = info.GetInt32("iOldIndex");
       iNewIndex = info.GetInt32("iNewIndex");
 }
        /// <summary>
        /// Helper function
        /// </summary>
        /// <param name="_terrain"></param>
        /// <param name="_texture"></param>
        /// <param name="iMoveDelta"></param>
        /// <returns></returns>
        public static bool CanMove(TerrainShape _terrain, DetailTextureResource _texture, int iMoveDelta)
        {
            if (_terrain == null || !_terrain.Modifiable || _terrain.EngineTerrain == null || _texture == null)
            return false;

              int iOldIndex = _terrain.DetailTextures.IndexOf(_texture);
              int iNewIndex = iOldIndex + iMoveDelta;

              if (_texture._bIsBaseTexture)
            return false;

              if (iOldIndex < 0 || iOldIndex >= _terrain.DetailTextures.Count)
            return false;
              if (iNewIndex < 1 || iNewIndex >= _terrain.DetailTextures.Count)
            return false;
              return true;
        }
 public MoveDetailTextureAction(TerrainShape terrain, DetailTextureResource texture, int iMoveDelta)
 {
     _texture = texture;
       _terrain = terrain;
       _iMoveDelta = iMoveDelta;
       iOldIndex = _terrain.DetailTextures.IndexOf(_texture);
       iNewIndex = iOldIndex + iMoveDelta;
 }
        public object Clone()
        {
            DetailTextureResource copy = (DetailTextureResource)MemberwiseClone();

            return(copy);
        }
        public bool CopyPropertiesFrom(DetailTextureResource other, bool bTriggerChangedEvent)
        {
            bool bAnyChanged = false;

            if (_Name != other._Name)
            {
                if (bTriggerChangedEvent)
                {
                    TriggerPropertyChangedEvent(new DetailTextureResourcePropertyChangedArgs(_Name, other._Name, "Name"));
                }
                _Name       = other._Name;
                bAnyChanged = true;
            }
            if (_ExportFilename != other._ExportFilename)
            {
                if (bTriggerChangedEvent)
                {
                    TriggerPropertyChangedEvent(new DetailTextureResourcePropertyChangedArgs(_ExportFilename, other._ExportFilename, "ExportFilename"));
                }
                _ExportFilename = other._ExportFilename;
                bAnyChanged     = true;
            }
            if (_DiffuseFilename != other._DiffuseFilename)
            {
                if (bTriggerChangedEvent)
                {
                    TriggerPropertyChangedEvent(new DetailTextureResourcePropertyChangedArgs(_DiffuseFilename, other._DiffuseFilename, "DiffuseFilename"));
                }
                _DiffuseFilename = other._DiffuseFilename;
                bAnyChanged      = true;
            }
            if (_NormalmapFilename != other._NormalmapFilename)
            {
                if (bTriggerChangedEvent)
                {
                    TriggerPropertyChangedEvent(new DetailTextureResourcePropertyChangedArgs(_NormalmapFilename, other._NormalmapFilename, "NormalmapFilename"));
                }
                _NormalmapFilename = other._NormalmapFilename;
                bAnyChanged        = true;
            }
            if (_SpecularmapFilename != other._SpecularmapFilename)
            {
                if (bTriggerChangedEvent)
                {
                    TriggerPropertyChangedEvent(new DetailTextureResourcePropertyChangedArgs(_SpecularmapFilename, other._SpecularmapFilename, "SpecularmapFilename"));
                }
                _SpecularmapFilename = other._SpecularmapFilename;
                bAnyChanged          = true;
            }
            if (_fBakePriority != other._fBakePriority)
            {
                if (bTriggerChangedEvent)
                {
                    TriggerPropertyChangedEvent(new DetailTextureResourcePropertyChangedArgs(_fBakePriority, other._fBakePriority, "BakePriority"));
                }
                _fBakePriority = other._fBakePriority;
                bAnyChanged    = true;
            }
            if (_iMaterialID != other._iMaterialID)
            {
                if (bTriggerChangedEvent)
                {
                    TriggerPropertyChangedEvent(new DetailTextureResourcePropertyChangedArgs(_iMaterialID, other._iMaterialID, "MaterialID"));
                }
                _iMaterialID = other._iMaterialID;
                bAnyChanged  = true;
            }
            if (_Tiling != other._Tiling)
            {
                if (bTriggerChangedEvent)
                {
                    TriggerPropertyChangedEvent(new DetailTextureResourcePropertyChangedArgs(_Tiling, other._Tiling, "Tiling"));
                }
                _Tiling     = other._Tiling;
                bAnyChanged = true;
            }
            if (_Offset != other._Offset)
            {
                if (bTriggerChangedEvent)
                {
                    TriggerPropertyChangedEvent(new DetailTextureResourcePropertyChangedArgs(_Offset, other._Offset, "Offset"));
                }
                _Offset     = other._Offset;
                bAnyChanged = true;
            }

            return(bAnyChanged);
        }
 protected PaintDetailTextureAction(SerializationInfo info, StreamingContext context)
     : base(info, context)
 {
     _texture = (DetailTextureResource)info.GetValue("_texture", typeof(DetailTextureResource));
 }
 public PaintDetailTextureAction(TerrainShape terrain, DetailTextureResource texture)
     : base(terrain.EngineTerrain, "Edit detail texture")
 {
     _texture = texture;
 }