コード例 #1
0
ファイル: Form1.cs プロジェクト: davidsiaw/kubus
        private void OpenFile(string filename)
        {
            var img = new Bitmap(filename);
            img.SetResolution(96, 96);

            string name = Path.GetFileNameWithoutExtension(filename);
            tc_topRight.TabPages.Add(name, name);

            DraggableMap dm = new DraggableMap();
            tc_topRight.TabPages[name].Controls.Add(dm);

            Button basicTile = new Button();
            basicTile.Click += new EventHandler(basicTile_Click);
            basicTile.Text = "Create Basic Tile";
            basicTile.Dock = DockStyle.Bottom;

            tc_topRight.TabPages[name].Controls.Add(basicTile);

            Button autoTile12 = new Button();
            autoTile12.Click += new EventHandler((obj, evt) => {
                AutoTile12 at12 = new AutoTile12();
                DraggableMap dmap = ((Button)obj).Tag as DraggableMap;

                int x, y;
                dmap.GetHighlightedTile(out x, out y);

                for (int i = 0; i < AutoTile12.tileToRawTileIndex.Length; i++)
                {
                    Rectangle rect = AutoTile12.tileToRawTileIndex[i];
                    SimpleTile st = GetSelectedTile(dmap, rect.X + x * Tile.tilesize, rect.Y + y * Tile.tilesize);
                    at12.rawtiles[i] = st;
                }

                AddAutotile12(at12, at12);
            });
            autoTile12.Tag = dm;
            autoTile12.Text = "Create Autotile";
            autoTile12.Dock = DockStyle.Bottom;
            autoTile12.Enabled = false;

            tc_topRight.TabPages[name].Controls.Add(autoTile12);

            dm.map = new Tile[img.Width / Tile.tilesize, img.Height / Tile.tilesize, 1];
            dm.img = img;
            dm.Dock = DockStyle.Fill;
            dm.LeftClick += new Action<DraggableMap, MouseEventArgs>((dmap, evt) =>
            {
                int x, y;
                dmap.GetMapPos(evt, out x, out y);

                SimpleTile st = GetSelectedTile(dmap, x, y);

                currentTile = st;

                if (dmap.highlightwidth == 3 && dmap.highlightheight == 4)
                {
                    autoTile12.Enabled = true;
                }
                else
                {
                    autoTile12.Enabled = false;
                }
            });
            dm.LeftClickDrag += new Action<DraggableMap, MouseEventArgs>((dmap, evt) =>
            {
                int x, y;
                dmap.GetMapPos(evt, out x, out y);

                int tilex = x / Tile.tilesize;
                int tiley = y / Tile.tilesize;

                int htilex, htiley;
                dmap.GetHighlightedTile(out htilex, out htiley);

                dmap.HighlightTile(Math.Min(tilex, htilex), Math.Min(tiley, htiley));

                int dx = Math.Max(Math.Abs(tilex - htilex + 1), 1);
                int dy = Math.Max(Math.Abs(tiley - htiley + 1), 1);

                dmap.highlightwidth = dx;
                dmap.highlightheight = dy;

                if (dx == 3 && dy == 4)
                {
                    autoTile12.Enabled = true;
                }
                else
                {
                    autoTile12.Enabled = false;
                }

            });
        }
コード例 #2
0
ファイル: Form1.cs プロジェクト: davidsiaw/kubus
        void autoTile12_Click(object sender, EventArgs e)
        {
            if (selectedBasicTile != null)
            {
                Tile autotile = selectedBasicTile;
                AutoTile12 at = new AutoTile12();
                AddAutotile12(autotile, at);

            }
        }
コード例 #3
0
ファイル: Form1.cs プロジェクト: davidsiaw/kubus
        private void btn_loadtiles_Click(object sender, EventArgs e)
        {
            OpenFileDialog ofd = new OpenFileDialog();
            ofd.ShowDialog();
            if (string.IsNullOrEmpty(ofd.FileName))
            {
                return;
            }
            string basename = Path.Combine(Path.GetDirectoryName(ofd.FileName), Path.GetFileNameWithoutExtension(ofd.FileName));
            string basictilesname = basename + ".basictiles";
            string tilesname = basename + ".tiles";
            string pngname = basename + ".png";
            if (!File.Exists(basictilesname) || !File.Exists(tilesname))
            {
                return;
            }

            using (Bitmap bmp = new Bitmap(pngname))
            {
                using (FormattedReader tiles = new FormattedReader(tilesname))
                using (FormattedReader basictiles = new FormattedReader(basictilesname))
                {
                    var btff = basictiles.Read<BasicTilesFileFormat>();
                    var simpletiles = btff.tiles.Select(x => new SimpleTile(x, bmp)).ToArray();
                    //foreach (var st in simpletiles)
                    //{
                    //    AddBasicTile(st);
                    //}

                    var tff = tiles.Read<TilesFileFormat>();
                    foreach (var tile in tff.tiles)
                    {
                        if (tile.type == TileType.SIMPLE)
                        {
                            AddSimpleTile(simpletiles[tile.simp[0].basictile]);
                        }
                        else if (tile.type == TileType.AUTOTILE12)
                        {
                            AutoTile12 at = new AutoTile12(simpletiles, tile.auto[0].basictiles);
                            AddAutotile12(at, at);
                        }
                        else if (tile.type == TileType.AUTOTILE94)
                        {
                            AutoTile94 at = new AutoTile94(simpletiles, tile.auto[0].basictiles);
                            AddAutotile94(at, at);
                        }
                    }
                }
            }
        }
コード例 #4
0
ファイル: Form1.cs プロジェクト: davidsiaw/kubus
        private void AddAutotile12(Tile autotile, AutoTile12 at)
        {
            RadioButton btn = new RadioButton();
            btn.Appearance = Appearance.Button;
            btn.Size = new System.Drawing.Size(40, 40);
            btn.Image = autotile.GetBitmap(0, 0);

            int t = Tile.tilesize;
            var twelve = new Bitmap(t * 3, t * 4);
            using (Graphics g = Graphics.FromImage(twelve))
            {
                for (int x = 0; x < 3; x++)
                {
                    for (int y = 0; y < 4; y++)
                    {
                        g.DrawImage(autotile.GetBitmap(0, 0), t * x, t * y);
                    }
                }
            }

            btn.Tag = at;
            btn.Click += new EventHandler((o, evt) =>
            {
                paintTile = (Tile)((RadioButton)o).Tag;
                populatePanel2WithTileEditor();
            });
            flow_tiles.Controls.Add(btn);
        }