private void bankList_SelectedIndexChanged(object sender, EventArgs e) { ObjectBank bank = Program.Banks.ByAbsoluteIndex(form.screen_bankList.SelectedIndex); form.screen_objectList.Items.Clear(); form.screen_objectList.LargeImageList.Images.Clear(); form.screen_objectList.Items.Add("0"); for (int i = 1; i < bank.Count; i++) { Tuple <int, Bitmap> t = bank.ByAbsoluteIndex(i); if (t.Item2 != null) { form.screen_objectList.LargeImageList.Images.Add(t.Item2); form.screen_objectList.Items.Add(t.Item1.ToString(), i - 1); } else { form.screen_objectList.Items.Add(t.Item1.ToString()); } } form.screen_objectList.SelectedIndices.Clear(); form.screen_objectList.SelectedIndices.Add(0); }
public ScreenTab(EditorForm parent) { form = parent; // These timers are used to create a delay between changing the tileset/gradient and redrawing the screen. // Otherwise, the program would freeze up when a user scrolled through the tilesets/gradients. this.TimerA = new System.Timers.Timer() { AutoReset = false, Interval = 75 }; this.TimerA.Elapsed += ChangeTilesetA; this.TimerB = new System.Timers.Timer() { AutoReset = false, Interval = 75 }; this.TimerB.Elapsed += ChangeTilesetB; this.TimerGrad = new System.Timers.Timer() { AutoReset = false, Interval = 75 }; this.TimerGrad.Elapsed += ChangeGradient; form.screen_tilesetA.ValueChanged += tilesetA_ValueChanged; form.screen_tilesetB.ValueChanged += tilesetB_ValueChanged; form.screen_gradient.ValueChanged += gradient_ValueChanged; form.screen_tilesetViewA.MouseUp += delegate(Object sender, MouseEventArgs e) { this.activeTileset = 0; this.selection = form.screen_tilesetViewA.Selection; form.screen_tilesetViewB.Active = false; }; form.screen_tilesetViewB.MouseUp += delegate(Object sender, MouseEventArgs e) { this.activeTileset = 1; this.selection = form.screen_tilesetViewB.Selection; form.screen_tilesetViewA.Active = false; }; form.screen_objectList.LargeImageList = new ImageList(); form.screen_objectList.LargeImageList.ImageSize = new Size(24, 24); Program.SendMessage(form.screen_objectList.Handle, 0x1000 + 53, IntPtr.Zero, (IntPtr)(((ushort)(30)) | (uint)((50) << 16))); // Sets margins and spacing. form.screen_bankList.SelectedIndexChanged += bankList_SelectedIndexChanged; foreach (ObjectBank b in Program.Banks) { form.screen_bankList.Items.Add(b.Index + ". " + b.Name); } form.screen_mainView.GetCanvas += delegate() { return(editingPattern == null ? (ICanvas)Program.ActiveScreen : (ICanvas)editingPattern); }; form.screen_mainView.GetLayer += delegate() { return(editingPattern == null ? Program.ActiveScreen.Layers[GetActiveLayer()] : editingPattern.Layers[GetActiveLayer()]); }; form.screen_mainView.GetTool += delegate() { return(currentTool); }; form.screen_mainView.GetSelection += delegate() { return(selection); }; form.screen_mainView.GetBrushSize += delegate() { return(new Size(this.brushSizeX, this.brushSizeY)); }; form.screen_mainView.GetTilesetIndex += delegate() { return(activeTileset); }; form.screen_mainView.GetObject += delegate() { return(new Tuple <int, int>(Program.Banks.ByAbsoluteIndex(form.screen_bankList.SelectedIndex).Index, form.screen_objectList.SelectedIndices.Count > 0 ? form.screen_objectList.SelectedIndices[0] : 0)); // TODO make more robust? }; form.screen_mainView.GetTilesetA += delegate() { return(TilesetA); }; form.screen_mainView.GetTilesetB += delegate() { return(TilesetB); }; form.screen_mainView.GetGradient += delegate() { return(Gradient); }; // TODO move to function form.screen_mainView.MouseUp += delegate(Object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Right) { int layer = GetActiveLayer(); int x = (int)(e.X / 24f); int y = (int)(e.Y / 24f); Tile t = editingPattern == null ? Program.ActiveScreen.Layers[layer].Tiles[y * Program.ScreenWidth + x] : editingPattern.Layers[layer].Tiles[y * Program.ScreenWidth + x]; if (layer < 4) { activeTileset = t.Tileset; if (activeTileset == 0) { form.screen_tilesetViewA.Active = true; form.screen_tilesetViewB.Active = false; selection = form.screen_tilesetViewA.Selection; } else { form.screen_tilesetViewA.Active = false; form.screen_tilesetViewB.Active = true; selection = form.screen_tilesetViewB.Selection; } selection.Clear(); Point p = Program.TilesetIndexToPoint(t.Index); selection.Add(new Rectangle(p.X, p.Y, 1, 1)); form.screen_tilesetViewA.Refresh(); form.screen_tilesetViewB.Refresh(); } else { ObjectBank bank = Program.Banks[t.Bank]; int idx = bank.AbsoluteIndex; int obj = bank.AbsoluteIndexOf(t.Index); if (idx < form.screen_bankList.Items.Count && obj >= 0 && obj < bank.Count) { form.screen_bankList.SelectedIndex = idx; form.screen_objectList.SelectedIndices.Clear(); form.screen_objectList.SelectedIndices.Add(obj); form.screen_objectList.EnsureVisible(form.screen_objectList.SelectedIndices[0]); } } } }; TabPage pg = form.tabControl1.TabPages["tabPageScreen"]; layerSelectors = new Tuple <RadioButton, Label> [8]; for (int i = 0; i < 8; i++) { layerSelectors[i] = new Tuple <RadioButton, Label>( (RadioButton)pg.Controls["screen_layer" + i], (Label)pg.Controls["screen_layer" + i + "Label"] ); layerSelectors[i].Item1.Tag = i; layerSelectors[i].Item1.MouseUp += layerSelector_MouseUp; } // TODO fix hotkeys form.screen_mainView.Click += delegate { form.tabControl1.Focus(); }; form.tabControl1.KeyUp += delegate(object sender, KeyEventArgs e) { switch (e.KeyCode) { case Keys.W: if (editingPattern == null && e.Shift) { this.ChangeScreen(Program.ActiveScreen.X, Program.ActiveScreen.Y - 1); } else { selection.Translate(0, -1); form.screen_tilesetViewA.Refresh(); form.screen_tilesetViewB.Refresh(); } break; case Keys.A: if (editingPattern == null && e.Shift) { this.ChangeScreen(Program.ActiveScreen.X - 1, Program.ActiveScreen.Y); } else { selection.Translate(-1, 0); form.screen_tilesetViewA.Refresh(); form.screen_tilesetViewB.Refresh(); } break; case Keys.S: if (editingPattern == null && e.Shift) { this.ChangeScreen(Program.ActiveScreen.X, Program.ActiveScreen.Y + 1); } else { selection.Translate(0, 1); form.screen_tilesetViewA.Refresh(); form.screen_tilesetViewB.Refresh(); } break; case Keys.D: if (editingPattern == null && e.Shift) { this.ChangeScreen(Program.ActiveScreen.X + 1, Program.ActiveScreen.Y); } else { selection.Translate(1, 0); form.screen_tilesetViewA.Refresh(); form.screen_tilesetViewB.Refresh(); } break; case Keys.D0: form.screen_layer0.Checked = true; break; case Keys.D1: form.screen_layer1.Checked = true; break; case Keys.D2: form.screen_layer2.Checked = true; break; case Keys.D3: form.screen_layer3.Checked = true; break; case Keys.D4: form.screen_layer4.Checked = true; break; case Keys.D5: form.screen_layer5.Checked = true; break; case Keys.D6: form.screen_layer6.Checked = true; break; case Keys.D7: form.screen_layer7.Checked = true; break; } }; form.screen_comboPatterns.Items.Add(""); form.screen_comboPatterns.SelectedIndex = 0; // TODO move to function form.screen_buttonEditPattern.Click += delegate { if (editingPattern == null) { form.screen_tilesetA.Enabled = false; form.screen_tilesetB.Enabled = false; form.screen_gradient.Enabled = false; form.screen_music.Enabled = false; form.screen_ambiA.Enabled = false; form.screen_ambiB.Enabled = false; form.screen_comboPatterns.DropDownStyle = ComboBoxStyle.Simple; form.screen_buttonEditPattern.Text = "Save"; form.screen_mainView.Resizable = true; if (form.screen_comboPatterns.SelectedIndex <= 0) { editingPattern = new Pattern(GetActiveLayer()); newPattern = true; for (int i = 0; i < 8; i++) { layerSelectors[i].Item2.Enabled = layerSelectors[i].Item1.Checked; } } else { editingPattern = Program.OpenStory.Patterns[form.screen_comboPatterns.SelectedIndex - 1]; form.screen_mainView.Size = new Size(editingPattern.Width * 24 + 2, editingPattern.Height * 24 + 2); for (int i = 0; i < 8; i++) { layerSelectors[i].Item2.Enabled = editingPattern.Layers[i].Active; } } form.screen_checkBoxOverwrite.Visible = true; form.screen_checkBoxOverwrite.Checked = editingPattern.Overwrite; form.screen_mainView.Draw(); } else { if (form.screen_comboPatterns.Text == "" && MessageBox.Show("Please enter a name for your pattern, or press Cancel to discard.", "Enter Pattern Name", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning) == DialogResult.OK) { return; } if (form.screen_comboPatterns.Text != "") { editingPattern.Name = form.screen_comboPatterns.Text; if (newPattern) { Program.OpenStory.Patterns.Add(editingPattern); form.screen_comboPatterns.Items.Add(editingPattern.Name); form.screen_comboPatterns.SelectedIndex = form.screen_comboPatterns.Items.Count - 1; } else { form.screen_comboPatterns.Items[Program.OpenStory.Patterns.IndexOf(editingPattern) + 1] = editingPattern.Name; form.screen_buttonEditPattern.Text = "Edit"; } ((PatternTool)tools[4]).Source = editingPattern; } else { form.screen_comboPatterns.SelectedIndex = 0; } newPattern = false; form.screen_tilesetA.Enabled = true; form.screen_tilesetB.Enabled = true; form.screen_gradient.Enabled = true; form.screen_music.Enabled = true; form.screen_ambiA.Enabled = true; form.screen_ambiB.Enabled = true; form.screen_comboPatterns.DropDownStyle = ComboBoxStyle.DropDown; form.screen_mainView.Resizable = false; form.screen_mainView.Size = new Size(Program.PxScreenWidth + 2, Program.PxScreenHeight + 2); for (int i = 0; i < 8; i++) { layerSelectors[i].Item2.Enabled = Program.ActiveScreen.Layers[i].Active; } form.screen_checkBoxOverwrite.Visible = false; editingPattern = null; form.screen_mainView.Draw(); } }; form.screen_comboPatterns.SelectedIndexChanged += delegate { if (form.screen_comboPatterns.SelectedIndex == 0) { form.screen_buttonEditPattern.Text = "New"; ((PatternTool)tools[4]).Source = null; } else if (editingPattern == null) { form.screen_buttonEditPattern.Text = "Edit"; ((PatternTool)tools[4]).Source = Program.OpenStory.Patterns[form.screen_comboPatterns.SelectedIndex - 1]; } }; form.screen_checkBoxOverwrite.CheckedChanged += delegate { editingPattern.Overwrite = form.screen_checkBoxOverwrite.Checked; }; this.selection = form.screen_tilesetViewA.Selection; form.screen_tilesetViewA.Active = true; tools = new List <EditingTool>(5); tools.Add(new PaintTool()); tools.Add(new FillTool()); tools.Add(new ReplaceTool()); tools.Add(new RandomizeTool()); tools.Add(new PatternTool()); currentTool = tools[0]; }
public void Add(ObjectBank b) { b.AbsoluteIndex = this.banks.Count; this.banks.Add(b); }
private static int doSort(ObjectBank a, ObjectBank b) { return(a.Index - b.Index); }