private void MenuItem_NewSprite_Click(object sender, RoutedEventArgs e) { MenuItem menuitem = sender as MenuItem; UndertaleRoom.Layer layer = menuitem.DataContext as UndertaleRoom.Layer; AddSprite(layer); }
public override DataTemplate SelectTemplate(object item, DependencyObject container) { FrameworkElement element = container as FrameworkElement; if (element != null && item != null && item is UndertaleRoom.Layer) { UndertaleRoom.Layer layer = item as UndertaleRoom.Layer; switch (layer.LayerType) { case UndertaleRoom.LayerType.Instances: return(InstancesDataTemplate); case UndertaleRoom.LayerType.Tiles: return(TilesDataTemplate); case UndertaleRoom.LayerType.Assets: return(AssetsDataTemplate); case UndertaleRoom.LayerType.Background: return(BackgroundDataTemplate); } } return(null); }
private void AddLegacyTile(UndertaleRoom.Layer layer) { // add pointer list if one doesn't already exist if (layer.AssetsData.LegacyTiles == null) { layer.AssetsData.LegacyTiles = new UndertalePointerList <UndertaleRoom.Tile>(); } // add sprite pointer list if one doesn't already exist if (layer.AssetsData.Sprites == null) { layer.AssetsData.Sprites = new UndertalePointerList <UndertaleRoom.SpriteInstance>(); } // add tile to list var tile = new UndertaleRoom.Tile { InstanceID = (Application.Current.MainWindow as MainWindow).Data.GeneralInfo.LastTile++ }; tile._SpriteMode = true; layer.AssetsData.LegacyTiles.Add(tile); if (layer != null) { SelectObject(tile); } }
private void AddLayer <T>(UndertaleRoom.LayerType type, string name) where T : UndertaleRoom.Layer.LayerData, new() { UndertaleRoom room = this.DataContext as UndertaleRoom; // get last layer id var data = (Application.Current.MainWindow as MainWindow).Data; uint lastlayer_id = 0; for (var i = data.Rooms.Count - 1; i >= 0; i--) { var lastroom_layers = data.Rooms[i].Layers; if (lastroom_layers.Count != 0) { lastlayer_id = lastroom_layers[lastroom_layers.Count - 1].LayerId; break; } } UndertaleRoom.Layer layer = new UndertaleRoom.Layer(); layer.LayerName = (Application.Current.MainWindow as MainWindow).Data.Strings.MakeString(name); layer.LayerId = lastlayer_id + 1; layer.LayerType = type; layer.Data = new T(); room.Layers.Add(layer); SelectObject(layer); (this.DataContext as UndertaleRoom)?.SetupRoom(); }
private void Canvas_Drop(object sender, DragEventArgs e) { UndertaleObject sourceItem = e.Data.GetData(e.Data.GetFormats()[e.Data.GetFormats().Length - 1]) as UndertaleObject; e.Effects = e.AllowedEffects.HasFlag(DragDropEffects.Link) && sourceItem != null && (sourceItem is UndertaleGameObject || sourceItem is UndertalePath) ? DragDropEffects.Link : DragDropEffects.None; if (e.Effects == DragDropEffects.Link) { if (sourceItem is UndertaleBackground) { } else if (sourceItem is UndertaleGameObject) { UndertaleGameObject droppedObject = sourceItem as UndertaleGameObject; var mousePos = e.GetPosition(RoomGraphics); UndertaleRoom room = this.DataContext as UndertaleRoom; UndertaleRoom.Layer layer = ObjectEditor.Content as UndertaleRoom.Layer; if ((Application.Current.MainWindow as MainWindow).IsGMS2 == Visibility.Visible && layer == null) { MessageBox.Show("Must have a layer selected", "UndertaleModTool", MessageBoxButton.OK, MessageBoxImage.Error); return; } if (layer != null && layer.InstancesData == null) { MessageBox.Show("Must be on an instances layer", "UndertaleModTool", MessageBoxButton.OK, MessageBoxImage.Error); return; } var obj = new UndertaleRoom.GameObject() { X = (int)mousePos.X, Y = (int)mousePos.Y, ObjectDefinition = droppedObject, InstanceID = (Application.Current.MainWindow as MainWindow).Data.GeneralInfo.LastObj++ }; room.GameObjects.Add(obj); if (layer != null) { layer.InstancesData.Instances.Add(obj); } SelectObject(obj); } if (sourceItem is UndertalePath) { PreviewPath = sourceItem as UndertalePath; } } e.Handled = true; (this.DataContext as UndertaleRoom)?.SetupRoom(); }
private void AddLayer <T>(UndertaleRoom.LayerType type, string name) where T : UndertaleRoom.Layer.LayerData, new() { UndertaleRoom room = this.DataContext as UndertaleRoom; UndertaleRoom.Layer layer = new UndertaleRoom.Layer(); layer.LayerName = (Application.Current.MainWindow as MainWindow).Data.Strings.MakeString(name); layer.LayerId = 0; // TODO: find next ID layer.LayerType = type; layer.Data = new T(); room.Layers.Add(layer); SelectObject(layer); }
private void AddGMS2ObjectInstance(UndertaleRoom.Layer layer) { UndertaleRoom room = this.DataContext as UndertaleRoom; AddObjectInstance(room); var gameobject = room.GameObjects.Last(); layer.InstancesData.Instances.Add(gameobject); if (layer != null) { SelectObject(gameobject); } }
private void AddSprite(UndertaleRoom.Layer layer) { // add pointer list if one doesn't already exist if (layer.AssetsData.Sprites == null) { layer.AssetsData.Sprites = new UndertalePointerList <UndertaleRoom.SpriteInstance>(); } // add tile to list var spriteinstance = new UndertaleRoom.SpriteInstance(); layer.AssetsData.Sprites.Add(spriteinstance); if (layer != null) { SelectObject(spriteinstance); } }
private void AddLayer <T>(UndertaleRoom.LayerType type, string name) where T : UndertaleRoom.Layer.LayerData, new() { UndertaleRoom room = this.DataContext as UndertaleRoom; var data = (Application.Current.MainWindow as MainWindow).Data; uint largest_layerid = 0; // Find the largest layer id // See #355 foreach (UndertaleRoom Room in data.Rooms) { foreach (UndertaleRoom.Layer Layer in Room.Layers) { if (Layer.LayerId > largest_layerid) { largest_layerid = Layer.LayerId; } } } UndertaleRoom.Layer layer = new UndertaleRoom.Layer(); layer.LayerName = data.Strings.MakeString(name); layer.LayerId = largest_layerid + 1; layer.LayerType = type; layer.Data = new T(); room.Layers.Add(layer); if (layer.LayerType == UndertaleRoom.LayerType.Assets) { // create a new pointer list if (layer.AssetsData.LegacyTiles == null) { layer.AssetsData.LegacyTiles = new UndertalePointerList <UndertaleRoom.Tile>(); } // create new sprite pointer list if (layer.AssetsData.Sprites == null) { layer.AssetsData.Sprites = new UndertalePointerList <UndertaleRoom.SpriteInstance>(); } } SelectObject(layer); (this.DataContext as UndertaleRoom)?.SetupRoom(); }
public void Command_Paste(object sender, ExecutedRoutedEventArgs e) { /*IDataObject data = Clipboard.GetDataObject(); * UndertaleObject obj = data.GetData(data.GetFormats()[0]) as UndertaleObject; * if (obj != null) * { * Debug.WriteLine("Paste"); * Debug.WriteLine(obj); * }*/ if (copied != null) { UndertaleRoom room = this.DataContext as UndertaleRoom; UndertaleRoom.Layer layer = ObjectEditor.Content as UndertaleRoom.Layer; if ((Application.Current.MainWindow as MainWindow).IsGMS2 == Visibility.Visible && layer == null) { MessageBox.Show("Must paste onto a layer", "UndertaleModTool", MessageBoxButton.OK, MessageBoxImage.Error); return; } if (copied is UndertaleRoom.GameObject) { if (layer != null && layer.InstancesData == null) { MessageBox.Show("Must be on an instances layer", "UndertaleModTool", MessageBoxButton.OK, MessageBoxImage.Error); return; } var other = copied as UndertaleRoom.GameObject; var obj = new UndertaleRoom.GameObject(); obj.X = other.X; obj.Y = other.Y; obj.ObjectDefinition = other.ObjectDefinition; obj.InstanceID = (Application.Current.MainWindow as MainWindow).Data.GeneralInfo.LastObj++; obj.CreationCode = other.CreationCode; obj.ScaleX = other.ScaleX; obj.ScaleY = other.ScaleY; obj.Color = other.Color; obj.Rotation = other.Rotation; obj.PreCreateCode = other.PreCreateCode; room.GameObjects.Add(obj); if (layer != null) { layer.InstancesData.Instances.Add(obj); } SelectObject(obj); } if (copied is UndertaleRoom.Tile) { if (layer != null && layer.AssetsData == null) { MessageBox.Show("Must be on an assets layer", "UndertaleModTool", MessageBoxButton.OK, MessageBoxImage.Error); return; } var other = copied as UndertaleRoom.Tile; var obj = new UndertaleRoom.Tile(); obj.X = -(int)other.Height; //other.X; obj.Y = -(int)other.Height; //other.Y; obj._SpriteMode = other._SpriteMode; obj.ObjectDefinition = other.ObjectDefinition; obj.SourceX = other.SourceX; obj.SourceY = other.SourceY; obj.Width = other.Width; obj.Height = other.Height; obj.TileDepth = other.TileDepth; obj.InstanceID = (Application.Current.MainWindow as MainWindow).Data.GeneralInfo.LastTile++; obj.ScaleX = other.ScaleX; obj.ScaleY = other.ScaleY; obj.Color = other.Color; if (layer != null) { layer.AssetsData.LegacyTiles.Add(obj); } else { room.Tiles.Add(obj); } SelectObject(obj); } } (this.DataContext as UndertaleRoom)?.SetupRoom(); }
private void RoomObjectsTree_KeyDown(object sender, KeyEventArgs e) { if (e.Key == Key.Delete) { UndertaleRoom room = this.DataContext as UndertaleRoom; UndertaleObject selectedObj = ObjectEditor.Content as UndertaleObject; if (selectedObj is UndertaleRoom.Background) { UndertaleRoom.Background bg = selectedObj as UndertaleRoom.Background; bg.Enabled = false; bg.BackgroundDefinition = null; ObjectEditor.Content = null; } else if (selectedObj is UndertaleRoom.View) { UndertaleRoom.View view = selectedObj as UndertaleRoom.View; view.Enabled = false; ObjectEditor.Content = null; } else if (selectedObj is UndertaleRoom.Tile) { UndertaleRoom.Tile tile = selectedObj as UndertaleRoom.Tile; if ((Application.Current.MainWindow as MainWindow).IsGMS2 == Visibility.Visible) { foreach (var layer in room.Layers) { if (layer.AssetsData != null) { layer.AssetsData.LegacyTiles.Remove(tile); } } } room.Tiles.Remove(tile); ObjectEditor.Content = null; } else if (selectedObj is UndertaleRoom.GameObject) { UndertaleRoom.GameObject gameObj = selectedObj as UndertaleRoom.GameObject; if ((Application.Current.MainWindow as MainWindow).IsGMS2 == Visibility.Visible) { foreach (var layer in room.Layers) { if (layer.InstancesData != null) { layer.InstancesData.Instances.Remove(gameObj); } } } room.GameObjects.Remove(gameObj); ObjectEditor.Content = null; } else if (selectedObj is UndertaleRoom.Layer) { UndertaleRoom.Layer layer = selectedObj as UndertaleRoom.Layer; if (layer.InstancesData != null) { foreach (var go in layer.InstancesData.Instances) { room.GameObjects.Remove(go); } } room.Layers.Remove(layer); ObjectEditor.Content = null; } } }