示例#1
0
        void Redo()
        {
            history h = redo.Pop();

            if (actionMode != h.mode)
            {
                UpdateMode(h.mode);
            }

            if (!h.action)
            {
                removeTile(h.x, h.y);
            }
            else
            {
                if (h.mode == 1)
                {
                    selectedEntity = tilemap.Entities[viewIndexToId[h.index]];
                }
                if (h.mode == 2)
                {
                    selectedImage = h.index;
                }
                addTile(h.x, h.y);
            }

            if (redo.Count == 0)
            {
                btnredo.Enabled = false;
            }
        }
示例#2
0
        void addTile(int x, int y)
        {
            if (noSelection)
            {
                return;
            }

            if (actionMode == 0 && tilemap.CollisionGrid[x, y] == 0)
            {
                tilemap.CollisionGrid[x, y] = 1;
                undo.Push(new history(x, y, true, 0));
                btnundo.Invoke((Action) delegate { btnundo.Enabled = true; });
                optimizeCollision();
            }
            else if (actionMode == 1 && tilemap.EntityGrid[x, y] == 0)
            {
                TileMap.Entity e = selectedEntity;
                if (e.FilePath != null && e.FilePath != "")
                {
                    Sprite s = new Sprite(e.FilePath, new vec2(x, y) * gridScale + new vec2(gridScale / 2, -gridScale / 2 + gridScale * 1), e.Scale * gridScale, rotationSpeed: e.RotationSpeed);
                    s.DrawIndex = 0;
                    egrid[x, y] = can.Add(s);
                    tilemap.EntityGrid[x, y] = e.Id;
                    if (e.Duration > 0)
                    {
                        s.SetAnimation(e.TilesPerRow, e.Duration);
                    }
                }
                else
                {
                    Polygon p = new Polygon(new vec2(x, y) * gridScale + new vec2(gridScale / 2, -gridScale / 2 + gridScale * 1), new vec2(gridScale), 0, 4, e.color);
                    p.DrawIndex = 0;
                    egrid[x, y] = can.Add(p);
                    tilemap.EntityGrid[x, y] = e.Id;
                }
                undo.Push(new history(x, y, true, 1, e.Id));
                btnundo.Invoke((Action) delegate { btnundo.Enabled = true; });
            }
            else if (actionMode == 2 && tilemap.SpriteGrid[currentLayer][x, y] == 0)
            {
                if (selectedImage == 0)
                {
                    return;
                }
                tilemap.SpriteGrid[currentLayer][x, y] = selectedImage;

                if (!usedPaths.Contains(impaths[selectedImage - 1]))
                {
                    usedPaths.Add(impaths[selectedImage - 1]);
                    tilemap.SpritePaths.Add(selectedImage, impaths[selectedImage - 1]);
                }

                undo.Push(new history(x, y, true, 2, selectedImage, currentLayer));
                btnundo.Invoke((Action) delegate { btnundo.Enabled = true; });
                optimizeTextures(selectedImage, currentLayer);
            }
        }
示例#3
0
        private void loadMap(object sender, EventArgs p)
        {
            tilemap  = new TileMap(workFile);
            sgrid    = new Sprite[2][, ];
            sgrid[0] = new Sprite[tilemap.Xtiles, tilemap.Ytiles];
            sgrid[1] = new Sprite[tilemap.Xtiles, tilemap.Ytiles];
            cgrid    = new Polygon[tilemap.Xtiles, tilemap.Ytiles];
            drawLines();

            optimizeCollision();
            optimizeAllTextures();

            loadEntities();
            for (int j = 0; j < tilemap.Ytiles; j++)
            {
                for (int i = 0; i < tilemap.Xtiles; i++)
                {
                    if (tilemap.EntityGrid[i, j] > 0)
                    {
                        TileMap.Entity e = tilemap.Entities[tilemap.EntityGrid[i, j]];
                        if (e.FilePath != null && e.FilePath != "")
                        {
                            egrid[i, j] = can.Add(new Sprite(e.FilePath, new vec2(i, j) * gridScale + new vec2(gridScale / 2, -gridScale / 2 + gridScale * 1), e.Scale * gridScale, rotationSpeed: e.RotationSpeed));
                            if (e.Duration > 0)
                            {
                                ((Sprite)egrid[i, j]).SetAnimation(e.TilesPerRow, e.Duration);
                            }
                        }
                        else
                        {
                            egrid[i, j] = can.Add(new Polygon(new vec2(i, j) * gridScale + new vec2(gridScale / 2, -gridScale / 2 + gridScale * 1), new vec2(gridScale), 0, 4, e.color));
                        }
                    }
                }
            }

            enableBtns(true);
            UpdateMode(actionMode); //update opacity
            can.CameraPosition += (new vec2(tilemap.Xtiles, tilemap.Ytiles) * gridScale) / 2f;
            usedPaths.Clear();
            foreach (KeyValuePair <int, string> entry in tilemap.SpritePaths)
            {
                usedPaths.Add(entry.Value);
            }
        }
示例#4
0
        private void ListView2_SelectedIndexChanged(object sender, EventArgs e)
        {
            int selectedCount = 0;

            listView2.Invoke((Action) delegate { selectedCount = listView2.SelectedIndices.Count; });
            if (selectedCount < 1)
            {
                pictureBox1.Hide();
                noSelection = true;
                return;
            }

            int selectedIndex = 0;

            listView2.Invoke((Action) delegate { selectedIndex = listView2.SelectedIndices[0]; });
            selectedEntity = tilemap.Entities[viewIndexToId[selectedIndex]];
            noSelection    = false;
            UpdateMode(1);
        }