public CustomFrame(List <MapEntity> frames, ItemFrameBlockEntity itemFrameBlockEntity, Level level, FrameTicker frameTicker) : base() { Log.Error("Created new Custom Item Frame"); _frames = frames; _itemFrameBlockEntity = itemFrameBlockEntity; _level = level; _frameTicker = frameTicker; _timer = new Timer(Tick, null, 33, 33); _frameTicker.Register(this); }
public void Video2X(Player player, int numberOfFrames, bool color) { Task.Run(delegate { try { Dictionary <Tuple <int, int>, List <MapEntity> > entities = new Dictionary <Tuple <int, int>, List <MapEntity> >(); int width = 3; int height = 2; int frameCount = numberOfFrames; //int frameOffset = 0; int frameOffset = 120; var frameTicker = new FrameTicker(frameCount); // 768x384 for (int frame = frameOffset; frame < frameCount + frameOffset; frame++) { Log.Info($"Generating frame {frame}"); string file = Path.Combine(@"D:\Development\Other\Smash Heroes 3x6 (128)\Smash Heroes 3x6 (128)", $"Smash Heroes Trailer{frame:D4}.bmp"); //string file = Path.Combine(@"D:\Development\Other\2 by 1 PE test app ad for Gurun-2\exported frames 2", $"pe app ad{frame:D2}.bmp"); if (!File.Exists(file)) { continue; } Bitmap image = new Bitmap((Bitmap)Image.FromFile(file), width * 128, height * 128); for (int x = 0; x < width; x++) { for (int y = 0; y < height; y++) { var key = new Tuple <int, int>(x, y); if (!entities.ContainsKey(key)) { entities.Add(key, new List <MapEntity>()); } List <MapEntity> frames = entities[key]; var croppedImage = CropImage(image, new Rectangle(new Point(x * 128, y * 128), new Size(128, 128))); byte[] bitmapToBytes = BitmapToBytes(croppedImage, color); if (bitmapToBytes.Length != 128 * 128 * 4) { return; } MapEntity entity = new MapEntity(player.Level); entity.ImageProvider = new MapImageProvider { Batch = CreateCachedPacket(entity.EntityId, bitmapToBytes) }; entity.SpawnEntity(); frames.Add(entity); } } } int i = 0; player.Inventory.Slots[i++] = new ItemBlock(new Planks(), 0) { Count = 64 }; foreach (var entites in entities.Values) { player.Inventory.Slots[i++] = new CustomItemItemFrame(entites, frameTicker) { Count = 64 }; } player.SendPlayerInventory(); player.SendMessage("Done generating video.", MessageType.Raw); BlockCoordinates center = player.KnownPosition.GetCoordinates3D(); var level = player.Level; for (int x = 0; x < width; x++) { for (int y = 0; y < height; y++) { var key = new Tuple <int, int>(x, y); List <MapEntity> frames = entities[key]; BlockCoordinates bc = new BlockCoordinates(center.X - x, center.Y + height - y - 1, center.Z + 2); var wood = new Planks { Coordinates = bc }; level.SetBlock(wood); BlockCoordinates frambc = new BlockCoordinates(center.X - x, center.Y + height - y - 1, center.Z + 1); ItemFrameBlockEntity itemFrameBlockEntity = new ItemFrameBlockEntity { Coordinates = frambc }; var itemFrame = new CustomItemFrame(frames, itemFrameBlockEntity, level, frameTicker) { Coordinates = frambc, Metadata = 3 }; level.SetBlock(itemFrame); level.SetBlockEntity(itemFrameBlockEntity); } } } catch (Exception e) { Log.Error("Aborted video generation", e); } }); player.SendMessage("Generating video...", MessageType.Raw); }
public void VideoX(Player player, int numberOfFrames, bool color) { Task.Run(delegate { try { Dictionary <Tuple <int, int>, MapEntity> entities = new Dictionary <Tuple <int, int>, MapEntity>(); int width = 1; int height = 1; int frameCount = numberOfFrames; //int frameOffset = 0; int frameOffset = 120; var frameTicker = new FrameTicker(frameCount); // 768x384 for (int frame = frameOffset; frame < frameCount + frameOffset; frame++) { Log.Info($"Generating frame {frame}"); string file = Path.Combine(@"D:\Development\Other\Smash Heroes 3x6 (128)\Smash Heroes 3x6 (128)", $"Smash Heroes Trailer{frame:D4}.bmp"); //string file = Path.Combine(@"D:\Development\Other\2 by 1 PE test app ad for Gurun-2\exported frames 2", $"pe app ad{frame:D2}.bmp"); if (!File.Exists(file)) { continue; } Bitmap image = new Bitmap((Bitmap)Image.FromFile(file), width * 128, height * 128); for (int x = 0; x < width; x++) { for (int y = 0; y < height; y++) { var key = new Tuple <int, int>(x, y); if (!entities.ContainsKey(key)) { entities.Add(key, new MapEntity(player.Level) { ImageProvider = new VideoImageProvider(frameTicker) }); } var croppedImage = CropImage(image, new Rectangle(new Point(x * 128, y * 128), new Size(128, 128))); byte[] bitmapToBytes = BitmapToBytes(croppedImage, color); if (bitmapToBytes.Length != 128 * 128 * 4) { return; } ((VideoImageProvider)entities[key].ImageProvider).Frames.Add(CreateCachedPacket(entities[key].EntityId, bitmapToBytes)); } } } int i = 0; player.Inventory.Slots[i++] = new ItemBlock(new Planks(), 0) { Count = 64 }; player.Inventory.Slots[i++] = new ItemItemFrame { Count = 64 }; foreach (MapEntity entity in entities.Values) { entity.SpawnEntity(); player.Inventory.Slots[i++] = new ItemMap(entity.EntityId); } player.SendPlayerInventory(); player.SendMessage("Done generating video.", MessageType.Raw); } catch (Exception e) { Log.Error("Aborted video generation", e); } }); player.SendMessage("Generating video...", MessageType.Raw); }
public void Video2X(Player player, int numberOfFrames, bool color) { Task.Run(delegate { try { var entities = new ConcurrentDictionary <Tuple <int, int>, MapEntity[]>(); int width = 6; int height = 3; int frameCount = numberOfFrames; //int frameOffset = 0; int frameOffset = 120; var frameTicker = new FrameTicker(frameCount); // 768x384 Parallel.For(frameOffset, frameOffset + frameCount, (frame) => { Log.Info($"Generating frame {frame}"); string file = Path.Combine(@"C:\Development\Other\Smash Heroes 3x6 (128)\Smash Heroes 3x6 (128)", $"Smash Heroes Trailer{frame:D4}.bmp"); //string file = Path.Combine(@"D:\Development\Other\2 by 1 PE test app ad for Gurun-2\exported frames 2", $"pe app ad{frame:D2}.bmp"); if (!File.Exists(file)) { Log.Warn($"Couldn't find file: {file}"); return; } var image = new Bitmap((Bitmap)Image.FromFile(file), width * 128, height * 128); for (int x = 0; x < width; x++) { for (int y = 0; y < height; y++) { var key = new Tuple <int, int>(x, y); var frames = entities.GetOrAdd(key, new MapEntity[frameCount]); var croppedImage = CropImage(image, new Rectangle(new Point(x * 128, y * 128), new Size(128, 128))); byte[] bitmapToBytes = BitmapToBytes(croppedImage, color); if (bitmapToBytes.Length != 128 * 128 * 4) { return; } var entity = new MapEntity(player.Level); var cachedPacket = CreateCachedPacket(entity.EntityId, bitmapToBytes); player.SendPacket(cachedPacket); entity.ImageProvider = new MapImageProvider { Batch = cachedPacket }; entity.SpawnEntity(); frames[frame - frameOffset] = entity; } } }); //int i = 0; //player.Inventory.Slots[i++] = new ItemBlock(new Planks(), 0) {Count = 64, UniqueId = Environment.TickCount}; //foreach (var entites in entities.Values) //{ // player.Inventory.Slots[i++] = new CustomItemFrame(entites.Keys.ToList(), frameTicker) {Count = 64, UniqueId = Environment.TickCount}; //} //player.SendPlayerInventory(); player.SendMessage("Done generating video.", MessageType.Raw); BlockCoordinates center = player.KnownPosition.GetCoordinates3D(); var level = player.Level; for (int x = 0; x < width; x++) { for (int y = 0; y < height; y++) { var key = new Tuple <int, int>(x, y); var frames = new List <MapEntity>(entities[key]); frames = frames.Where(f => f != null).ToList(); var bc = new BlockCoordinates(center.X - x, center.Y + height - y - 1, center.Z + 2); var wood = new Planks { Coordinates = bc }; level.SetBlock(wood); var frambc = new BlockCoordinates(center.X - x, center.Y + height - y - 1, center.Z + 1); var itemFrameBlockEntity = new ItemFrameBlockEntity { Coordinates = frambc }; var itemFrame = new CustomFrame(frames, itemFrameBlockEntity, level, frameTicker) { Coordinates = frambc, FacingDirection = (int)BlockFace.North }; level.SetBlock(itemFrame); level.SetBlockEntity(itemFrameBlockEntity); } } } catch (Exception e) { Log.Error("Aborted video generation", e); } }); player.SendMessage("Generating video...", MessageType.Raw); }
public CustomItemFrame(List <MapEntity> frames, FrameTicker frameTicker) { _frames = frames; _frameTicker = frameTicker; }