public WorldEditorTerrainToolsViewModel(IPackageRepository repository, SpriteLoader spriteLoader) { this._repository = repository; this._spriteLoader = spriteLoader; this._isGridVisible = false; this._tiles = new ObservableCollection<TileViewModel>(); foreach (var asset in repository.Assets.Where(x => x.Type == EditorAssetTypes.TerrainTileDefinition).OrderBy(x => x.Key)) { var tileData = _repository.GetAssetData<TerrainTileDefinitionResource>(asset.Id); _tiles.Add(new TileViewModel() { Key = tileData.Key, Sprite = _spriteLoader.LoadSprite(tileData.SpriteKey) }); } this.SelectedTile = _tiles.FirstOrDefault(); this.SelectedTool = TerrainEditorTools.Paint; SetToolCommand = new DelegateCommand<String>(x => { if (x == "Fill") SelectedTool = TerrainEditorTools.Fill; else if (x == "Paint") SelectedTool = TerrainEditorTools.Paint; else if (x == "EyeDropper") SelectedTool = TerrainEditorTools.EyeDropper; }); }
public WorldEditorWorldViewModel(CompositionContainer container, IPackageRepository packageRepository) { this._objectTypes = new ObservableCollection<WorldObjectTypeViewModel>(); this._packageRepository = packageRepository; this._worldObjects = new ObservableCollection<WorldObjectViewModel>(); this._worldObjectModelToObjectTypeDefinitionMapping = new Dictionary<Type, WorldObjectDefinition>(); this.SelectedObjectName = "No Object Selected"; this._editSelectedObjectCommand = new DelegateCommand(EditSelectedObjectExecute, EditSelectedObjectCanExecute); this._deleteSelectedObjectCommand = new DelegateCommand(DeleteSelectedObjectExecute, DeleteSelectedObjectCanExecute); this._copyCommand = new DelegateCommand(CopyExecute, CopyCanExecute); this._pasteCommand = new DelegateCommand(PasteExecute, PasteCanExecute); var worldObjectTypeExports = container.GetExports<IWorldEditorTypeDefinition, IWorldEditorTypeMetaData>(); foreach (var export in worldObjectTypeExports) { var definition = new WorldObjectTypeViewModel(this, export.Metadata, export.Value); _objectTypes.Add(definition); _worldObjectModelToObjectTypeDefinitionMapping[export.Value.WorldObjectType] = definition; } var archetypeBasedWorldObjectTypeExports = container.GetExports<IArchetypeBasedWorldEditorTypeDefinition, IArchetypeBasedWorldEditorTypeMetaData>(); foreach (var export in archetypeBasedWorldObjectTypeExports) { var definition = new ExistingWorldObjectArchetypeViewModel(this, export.Metadata, export.Value); _worldObjectModelToObjectTypeDefinitionMapping[export.Value.WorldObjectType] = definition; } this._archetypes = new ObservableCollection<NewWorldObjectArchetypeViewModel>(); foreach (var asset in _packageRepository.Assets.Where(x => x.Type == EditorAssetTypes.Archetype).OrderBy(x => x.Key)) { var data = _packageRepository.GetAssetData<ArchetypeResource>(asset.Id); if (!(data.Data is WorldObjectArchetypeData)) continue; IArchetypeBasedWorldEditorTypeDefinition typeDefinition = null; IArchetypeBasedWorldEditorTypeMetaData metaData = null; foreach (var export in archetypeBasedWorldObjectTypeExports) { if (export.Value.ArchetypeDataType == data.Data.GetType()) { typeDefinition = export.Value; metaData = export.Metadata; break; } } var definition = new NewWorldObjectArchetypeViewModel( this, asset.Key.Split('.').Last(), (WorldObjectArchetypeData)data.Data, asset.Key, metaData, typeDefinition); this._archetypes.Add(definition); } }