public BlocksGroup(BlocksGroup old)
 {
     Blocks  = old.Blocks.ConvertAll(i => new Block(i));
     Version = old.Version;
     Role    = old.Role;
     Group   = old.Group;
 }
 public void UpdateBlocksGroups()
 {
     blocksGroups = new List <BlocksGroup>();
     foreach (var pair in blocksDict)
     {
         Block b = pair.Value;
         if (b.Type >= 0)
         {
             b.Position = pair.Key;
             BlocksGroup group = blocksGroups.FirstOrDefault(i => i.Role == b.Role && i.Group == b.Group);
             if (group == null)
             {
                 group = new BlocksGroup(b.Role, b.Group);
                 blocksGroups.Add(group);
             }
             group.Blocks.Add(b);
         }
     }
 }