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; } }
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); } }
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); } }
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); }