private void SyncWithoutBackup(Tile?tile, Sprite sprite, Point index) { if (tile == null) { SyncWithoutBackup(index); return; } tiles[index.X, index.Y] = tile; Ground.CastSprite(tile.Value, sprite); OnSpriteChanged(new SpriteChangedEventArgs(index, sprite)); }
private void Sync(Tile?tile, Sprite sprite, Point index, out Tile?prevTile, out Sprite prevSprite, out Point prevIndex) { prevSprite = sprite; prevTile = tiles[index.X, index.Y]; prevIndex = index; if (tile == null) { Sync(index, out prevTile, out prevSprite, out prevIndex); return; } //prevSprite = sprite; //prevTile = tiles[index.X, index.Y]; //prevIndex = index; tiles[index.X, index.Y] = tile; Ground.CastSprite(tile.Value, sprite); OnSpriteChanged(new SpriteChangedEventArgs(index, sprite)); }
protected override void KeyboardHandler(KeyboardState kbs, KeyboardState okbs) { if (kbs.IsKeyDown(Keys.Enter) && !okbs.IsKeyDown(Keys.Enter)) { GC.Collect(); } if (kbs.IsKeyDown(Keys.Left)) { camera.MoveOn(new Vector2(-cameraSpeed, 0)); } if (kbs.IsKeyDown(Keys.Right)) { camera.MoveOn(new Vector2(cameraSpeed, 0)); } if (kbs.IsKeyDown(Keys.Up)) { camera.MoveOn(new Vector2(0, -cameraSpeed)); } if (kbs.IsKeyDown(Keys.Down)) { camera.MoveOn(new Vector2(0, cameraSpeed)); } if (kbs.IsKeyDown(Keys.LeftControl)) { ctrl = true; } if (kbs.IsKeyUp(Keys.LeftControl)) { ctrl = false; } if (ctrl) { if (kbs.IsKeyDown(Keys.Z) && !okbs.IsKeyDown(Keys.Z)) { if (backups.Count != 0) { BackUp(backups.Pop()); } } } if (kbs.IsKeyDown(Keys.R) && !okbs.IsKeyDown(Keys.R)) { RenderMinimap(ground.Sprites); } if (kbs.IsKeyDown(Keys.Space) && !okbs.IsKeyDown(Keys.Space)) { Point index = FromPosToIndex(MousePosition(MS), World.TileW); panel.SetCurrentPrev(tiles[index.X, index.Y]); } #region Сохранение выбранного тайла в .png с добавлением оттенка. Путь = "Customs\*.png". (DEBUG only) #if DEBUG //ctrl + S if (ctrl) { if (kbs.IsKeyDown(Keys.S) && !okbs.IsKeyDown(Keys.S)) { if (CurrentTile != null && CurrentTile.HasValue) { Tile ctile = CurrentTile.Value; Texture2D texture = new Texture2D(GraphicsDevice, World.TileW, World.TileW); Color[] data = new Color[World.TileW * World.TileW]; Sprite sprite = new Sprite(Content); Ground.CastSprite(ctile, sprite); sprite.GetTexture().GetData <Color>(data); Color tint = ctile.Color; long fnameGen = 0; //Имя генерируется исходя из цвета текстуры for (int i = 0; i < data.Length; i++) { data[i] = new Color(data[i].R * tint.R / 255, data[i].G * tint.G / 255, data[i].B * tint.B / 255, data[i].A); fnameGen += (long)data[i].R + (long)data[i].G + (long)data[i].B; } texture.SetData <Color>(data); string dir = @"Customs"; string fname = fnameGen.ToString() + ".png"; if (!Directory.Exists(dir)) { Directory.CreateDirectory(dir); } if (File.Exists(Path.Combine(dir, fname))) { throw new InvalidOperationException("Имя совпало"); } using (FileStream fs = File.Create(Path.Combine(dir, fname))) { texture.SaveAsPng(fs, World.TileW, World.TileW); } } } } #endif #endregion }