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; }