コード例 #1
0
 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);
 }
コード例 #2
0
ファイル: NiceLobbyPlugin.cs プロジェクト: venomshock/MiNET
        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);
        }
コード例 #3
0
ファイル: NiceLobbyPlugin.cs プロジェクト: venomshock/MiNET
        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);
        }
コード例 #4
0
ファイル: VideoCommand.cs プロジェクト: apieceofcaken/MiNET
        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);
        }
コード例 #5
0
 public CustomItemFrame(List <MapEntity> frames, FrameTicker frameTicker)
 {
     _frames      = frames;
     _frameTicker = frameTicker;
 }