void UndoHistoryEvent(BaseHistoryEvent baseHistoryEvent) { if (baseHistoryEvent.GetType() == typeof(ResizeHistoryEvent)) { var he = (ResizeHistoryEvent)baseHistoryEvent; this.map.size = he.oldSize; foreach (var tileOverride in he.removedTiles) { this.map.tileOverrides.Add(tileOverride); } foreach (var entity in he.removedEntities) { this.map.entities.Add(entity); } this.RebuildMapDisplay(); foreach (var pos in he.deselectedTiles) { this.selectedTiles.Add(this.mapDisplay.GetTile(pos)); } this.mapDisplay.SetSelectedTiles(this.selectedTiles); } else if (baseHistoryEvent.GetType() == typeof(SelectionChangeHistoryEvent)) { var he = (SelectionChangeHistoryEvent)baseHistoryEvent; this.selectedTiles = new List <MapTile>(he.oldSelectedTiles.Select(x => this.mapDisplay.GetTile(x))); this.mapDisplay.SetSelectedTiles(this.selectedTiles); } else if (baseHistoryEvent.GetType() == typeof(TileChangeHistoryEvent)) { var he = (TileChangeHistoryEvent)baseHistoryEvent; foreach (var tileOverride in he.oldTiles) { this.map.tileOverrides.RemoveAll(x => x.pos == tileOverride.pos); if (tileOverride.name != "") { this.map.tileOverrides.Add(tileOverride); } } this.RebuildMapDisplay(); } else if (baseHistoryEvent.GetType() == typeof(EntityChangeHistoryEvent)) { var he = (EntityChangeHistoryEvent)baseHistoryEvent; foreach (var entity in he.oldEntities) { this.map.entities.RemoveAll(x => x.pos == entity.pos); if (entity.name != "None") { this.map.entities.Add(entity); } } this.RebuildMapDisplay(); } }
void DoHistoryEvent(BaseHistoryEvent baseHistoryEvent) { if (baseHistoryEvent.GetType() == typeof(ResizeHistoryEvent)) { var he = (ResizeHistoryEvent)baseHistoryEvent; this.map.size = he.newSize; he.removedTiles = new List <BattleMap.TileOverride>(); for (int n = this.map.tileOverrides.Count; n-- > 0;) { bool isOutsideBounds = ( this.map.tileOverrides[n].pos.x >= he.newSize.x || this.map.tileOverrides[n].pos.y >= he.newSize.y ); if (isOutsideBounds) { he.removedTiles.Add(this.map.tileOverrides[n]); this.map.tileOverrides.RemoveAt(n); } } he.removedEntities = new List <BattleMap.Entity>(); for (int n = this.map.entities.Count; n-- > 0;) { bool isOutsideBounds = ( this.map.entities[n].pos.x >= he.newSize.x || this.map.entities[n].pos.y >= he.newSize.y ); if (isOutsideBounds) { he.removedEntities.Add(this.map.entities[n]); this.map.entities.RemoveAt(n); } } he.deselectedTiles = new List <Vector2i>(); for (int n = this.selectedTiles.Count; n-- > 0;) { var tile = this.selectedTiles[n]; bool isOutsideBounds = ( tile.pos.x >= he.newSize.x || tile.pos.y >= he.newSize.y ); if (isOutsideBounds) { he.deselectedTiles.Add(tile.pos); this.selectedTiles.RemoveAt(n); } } this.RebuildMapDisplay(); } else if (baseHistoryEvent.GetType() == typeof(SelectionChangeHistoryEvent)) { var he = (SelectionChangeHistoryEvent)baseHistoryEvent; this.selectedTiles = new List <MapTile>(he.newSelectedTiles.Select(x => this.mapDisplay.GetTile(x))); this.mapDisplay.SetSelectedTiles(this.selectedTiles); } else if (baseHistoryEvent.GetType() == typeof(TileChangeHistoryEvent)) { var he = (TileChangeHistoryEvent)baseHistoryEvent; foreach (var tileOverride in he.newTiles) { this.map.tileOverrides.RemoveAll(x => x.pos == tileOverride.pos); if (tileOverride.name != "") { this.map.tileOverrides.Add(tileOverride); } } this.RebuildMapDisplay(); } else if (baseHistoryEvent.GetType() == typeof(EntityChangeHistoryEvent)) { var he = (EntityChangeHistoryEvent)baseHistoryEvent; foreach (var entity in he.newEntities) { this.map.entities.RemoveAll(x => x.pos == entity.pos); if (entity.name != "None") { this.map.entities.Add(entity); } } this.RebuildMapDisplay(); } }