ARCed.Controls.TilesetXnaPanel.ChangeData C# (CSharp) Метод

ChangeData() приватный Метод

Performs logic for changing tileset data during mouse events.
private ChangeData ( MouseEventArgs e ) : void
e MouseEventArgs Mouse event arguments.
Результат void
        private void ChangeData(MouseEventArgs e)
        {
            if (e.Button != MouseButtons.Left && e.Button != MouseButtons.Right)
                return;
            int id = this.GetTileAtPoint(e.X, e.Y);
            switch (this.TilesetMode)
            {
                case TilesetMode.Passage:
                    if ((_tileset.passages[id] & ~0x40 & ~0x80) == 0)
                        _tileset.passages[id] |= 0x01 | 0x02 | 0x04 | 0x08;
                    else
                        _tileset.passages[id] &= ~(0x01 | 0x02 | 0x04 | 0x08);
                    break;
                case TilesetMode.Passage4Dir:
                    {
                        const int half = Constants.TILESIZE / 2;
                        int x = 1 + e.X % Constants.TILESIZE;
                        int y = 1 + e.Y % Constants.TILESIZE;
                        var dist = new List<double>
                    {
                        Math.Pow(half - x, 2) + Math.Pow(Constants.TILESIZE - y, 2), // Bottom
                        Math.Pow(x, 2) + Math.Pow(half - y, 2),            // Left
                        Math.Pow(Constants.TILESIZE - x, 2) + Math.Pow(half - y, 2), // Right
                        Math.Pow(half - x, 2) + Math.Pow(y, 2)             // Top
                    };
                        int index = dist.IndexOf(dist.Min());
                        int bit = new[] { 0x01, 0x02, 0x04, 0x08 }[index];
                        if ((_tileset.passages[id] & bit) == bit)
                            _tileset.passages[id] &= ~bit;
                        else
                            _tileset.passages[id] |= bit;
                    }
                    break;
                case TilesetMode.Priority:
                    if (e.Button == MouseButtons.Left)
                        _tileset.priorities[id] = (_tileset.priorities[id] + 1) % Constants.PRIORITIES;
                    else
                    {
                        _tileset.priorities[id]--;
                        if (_tileset.priorities[id] < 0)
                            _tileset.priorities[id] = Constants.PRIORITIES - 1;
                    }
                    break;
                case TilesetMode.Bush:
                    if ((_tileset.passages[id] & 0x40) == 0x40)
                        _tileset.passages[id] &= ~0x40;
                    else
                        _tileset.passages[id] |= 0x40;
                    break;
                case TilesetMode.Counter:
                    if ((_tileset.passages[id] & 0x80) == 0x80)
                        _tileset.passages[id] &= ~0x80;
                    else
                        _tileset.passages[id] |= 0x80;
                    break;
                case TilesetMode.Terrain:
                    if (e.Button == MouseButtons.Left)
                        _tileset.terrain_tags[id] = (_tileset.terrain_tags[id] + 1) % Constants.TERRAINS;
                    else
                    {
                        _tileset.terrain_tags[id]--;
                        if (_tileset.terrain_tags[id] < 0)
                            _tileset.terrain_tags[id] = Constants.TERRAINS - 1;
                    }
                    break;
            }
            Invalidate();
        }