public void Execute(object parameter) { if (Clipboard.ContainsData("Article")) { var data = Clipboard.GetData("Article"); if (data is string text) { var serializer = new JsonSerializer(); using (var reader = new StringReader(text)) { JObject obj = JObject.Load(new JsonTextReader(reader)); Article article; ArticleType type = (ArticleType)obj.Value <int>("Article"); switch (type) { case ArticleType.Terrain: article = new Terrain(); break; case ArticleType.Zone: article = new Zone(); break; case ArticleType.Target: article = new Target(); break; default: article = new Article(); break; } serializer.Populate(obj.CreateReader(), article); article.X += 1; article.Y += 1; var sb = new StringBuilder(); using (var writer = new StringWriter(sb)) { serializer.Serialize(writer, article); Clipboard.SetData("Article", sb.ToString()); } var op = new CreateArticleOperation(ApplicationSettings.Instance.ActiveProject, article); ApplicationSettings.Instance.ActiveProject.ExecuteOp(op); } } } }
private void OkButton_Click(object sender, RoutedEventArgs e) { var type = (ArticleType)(articleType.SelectedItem as ComboBoxItem).Tag; Article obj = null; switch (type) { case ArticleType.Terrain: obj = new Terrain(); break; case ArticleType.Zone: obj = new Zone(); break; case ArticleType.Target: obj = new Target(); (obj as Target).MoveVel.Add(0); break; } if (obj == null) { return; } obj.ArticleNum = type; var point = RoomEditor.Instance.GetTransform().Transform(new Point(RoomEditor.Instance.ActualWidth / 2, RoomEditor.Instance.ActualHeight / 2)); // Round to nearest 1/16 obj.X = (int)point.X / (float)ROAAM_CONST.GRID_SIZE; obj.Y = (int)point.Y / (float)ROAAM_CONST.GRID_SIZE; obj.Name = obj.ArticleNum.ToString(); var op = new CreateArticleOperation(ApplicationSettings.Instance.ActiveProject, obj); ApplicationSettings.Instance.ActiveProject.ExecuteOp(op); Close(); }