private static void ApplyOffsets(CameraControlGetCommand getCmd, CameraControlCommandBase deltaCmd)
        {
            Assert.False(deltaCmd.IntData == null && deltaCmd.FloatData == null && deltaCmd.LongData == null && deltaCmd.BoolData == null);
            if (deltaCmd.IntData != null)
            {
                Assert.NotNull(getCmd.IntData);
                Assert.Equal(getCmd.IntData.Length, deltaCmd.IntData.Length);

                var newVals = new int[getCmd.IntData.Length];
                for (int i = 0; i < newVals.Length; i++)
                {
                    newVals[i] = getCmd.IntData[i] + deltaCmd.IntData[i];
                }
                getCmd.IntData = newVals;
            }
            if (deltaCmd.LongData != null)
            {
                Assert.NotNull(getCmd.LongData);
                Assert.Equal(getCmd.LongData.Length, deltaCmd.LongData.Length);

                var newVals = new long[getCmd.LongData.Length];
                for (int i = 0; i < newVals.Length; i++)
                {
                    newVals[i] = getCmd.LongData[i] + deltaCmd.LongData[i];
                }
                getCmd.LongData = newVals;
            }
            if (deltaCmd.FloatData != null)
            {
                Assert.NotNull(getCmd.FloatData);
                Assert.Equal(getCmd.FloatData.Length, deltaCmd.FloatData.Length);

                var newVals = new double[getCmd.FloatData.Length];
                for (int i = 0; i < getCmd.FloatData.Length; i++)
                {
                    newVals[i] = getCmd.FloatData[i] + deltaCmd.FloatData[i];
                }
                getCmd.FloatData = newVals;
            }

            if (deltaCmd.BoolData != null)
            {
                Assert.NotNull(getCmd.BoolData);
                Assert.Equal(getCmd.BoolData.Length, deltaCmd.BoolData.Length);

                var newVals = new bool[getCmd.BoolData.Length];
                for (int i = 0; i < getCmd.BoolData.Length; i++)
                {
                    newVals[i] = deltaCmd.BoolData[i] ? !getCmd.BoolData[i] : getCmd.BoolData[i];
                }
                getCmd.BoolData = newVals;
            }
        }
 private static CameraControlGetCommand CopyCommand(CameraControlCommandBase cmd)
 {
     return(new CameraControlGetCommand
     {
         Input = cmd.Input,
         Category = cmd.Category,
         Parameter = cmd.Parameter,
         Type = cmd.Type,
         IntData = cmd.IntData,
         LongData = cmd.LongData,
         FloatData = cmd.FloatData,
         StringData = cmd.StringData,
         BoolData = cmd.BoolData,
     });
 }