private static void SetGyroParams(GyroDefinition gyroDef, bool GyroOverride = false, float pitchValue = 0f, float yawValue = 0f, float rollValue = 0f) { IMyGyro gyro = gyroDef.Gyro; gyro.GyroOverride = GyroOverride; switch (gyroDef.Pitch) { case GyroRotations.Pitch: gyro.Pitch = pitchValue * gyroDef.PitchFactor; break; case GyroRotations.Yaw: gyro.Yaw = pitchValue * gyroDef.PitchFactor; break; default: //roll gyro.Roll = pitchValue * gyroDef.PitchFactor; break; } switch (gyroDef.Yaw) { case GyroRotations.Pitch: gyro.Pitch = yawValue * gyroDef.YawFactor; break; case GyroRotations.Yaw: gyro.Yaw = yawValue * gyroDef.YawFactor; break; default: //roll gyro.Roll = yawValue * gyroDef.YawFactor; break; } switch (gyroDef.Roll) { case GyroRotations.Pitch: gyro.Pitch = rollValue * gyroDef.RollFactor; break; case GyroRotations.Yaw: gyro.Yaw = rollValue * gyroDef.RollFactor; break; default: //roll gyro.Roll = rollValue * gyroDef.RollFactor; break; } }
private static void SetupGyros(IMyShipController OrientationCockpit, List <IMyGyro> GyrosList, List <GyroDefinition> GyroDefsList) { Matrix cockpitMatrix, orientMatrix; OrientationCockpit.Orientation.GetMatrix(out cockpitMatrix); GyroDefinition GyroDef; foreach (IMyGyro gyro in GyrosList) { gyro.Orientation.GetMatrix(out orientMatrix); GyroDef = new GyroDefinition(gyro); if (orientMatrix.Forward == cockpitMatrix.Forward) { GyroDef.Roll = GyroRotations.Roll; GyroDef.RollFactor = 1f; if (orientMatrix.Up == cockpitMatrix.Up) { GyroDef.Pitch = GyroRotations.Pitch; GyroDef.PitchFactor = 1f; GyroDef.Yaw = GyroRotations.Yaw; GyroDef.YawFactor = 1f; } else if (orientMatrix.Up == cockpitMatrix.Right) { GyroDef.Pitch = GyroRotations.Yaw; GyroDef.PitchFactor = 1f; GyroDef.Yaw = GyroRotations.Pitch; GyroDef.YawFactor = -1f; } else if (orientMatrix.Up == cockpitMatrix.Down) { GyroDef.Pitch = GyroRotations.Pitch; GyroDef.PitchFactor = -1f; GyroDef.Yaw = GyroRotations.Yaw; GyroDef.YawFactor = -1f; } else if (orientMatrix.Up == cockpitMatrix.Left) { GyroDef.Pitch = GyroRotations.Yaw; GyroDef.PitchFactor = -1f; GyroDef.Yaw = GyroRotations.Pitch; GyroDef.YawFactor = 1f; } } else if (orientMatrix.Forward == cockpitMatrix.Down) { GyroDef.Yaw = GyroRotations.Roll; GyroDef.YawFactor = 1f; if (orientMatrix.Up == cockpitMatrix.Forward) { GyroDef.Pitch = GyroRotations.Pitch; GyroDef.PitchFactor = 1f; GyroDef.Roll = GyroRotations.Yaw; GyroDef.RollFactor = -1f; } else if (orientMatrix.Up == cockpitMatrix.Right) { GyroDef.Pitch = GyroRotations.Yaw; GyroDef.PitchFactor = 1f; GyroDef.Roll = GyroRotations.Pitch; GyroDef.RollFactor = 1f; } else if (orientMatrix.Up == cockpitMatrix.Backward) { GyroDef.Pitch = GyroRotations.Pitch; GyroDef.PitchFactor = -1f; GyroDef.Roll = GyroRotations.Yaw; GyroDef.RollFactor = 1f; } else if (orientMatrix.Up == cockpitMatrix.Left) { GyroDef.Pitch = GyroRotations.Yaw; GyroDef.PitchFactor = -1f; GyroDef.Roll = GyroRotations.Pitch; GyroDef.RollFactor = -1f; } } else if (orientMatrix.Forward == cockpitMatrix.Backward) { GyroDef.Roll = GyroRotations.Roll; GyroDef.RollFactor = -1f; if (orientMatrix.Up == cockpitMatrix.Up) { GyroDef.Pitch = GyroRotations.Pitch; GyroDef.PitchFactor = -1f; GyroDef.Yaw = GyroRotations.Yaw; GyroDef.YawFactor = 1f; } else if (orientMatrix.Up == cockpitMatrix.Right) { GyroDef.Pitch = GyroRotations.Yaw; GyroDef.PitchFactor = 1f; GyroDef.Yaw = GyroRotations.Pitch; GyroDef.YawFactor = 1f; } else if (orientMatrix.Up == cockpitMatrix.Down) { GyroDef.Pitch = GyroRotations.Pitch; GyroDef.PitchFactor = 1f; GyroDef.Yaw = GyroRotations.Yaw; GyroDef.YawFactor = -1f; } else if (orientMatrix.Up == cockpitMatrix.Left) { GyroDef.Pitch = GyroRotations.Yaw; GyroDef.PitchFactor = -1f; GyroDef.Yaw = GyroRotations.Pitch; GyroDef.YawFactor = -1f; } } else if (orientMatrix.Forward == cockpitMatrix.Up) { GyroDef.Yaw = GyroRotations.Roll; GyroDef.YawFactor = -1f; if (orientMatrix.Up == cockpitMatrix.Forward) { GyroDef.Pitch = GyroRotations.Pitch; GyroDef.PitchFactor = -1f; GyroDef.Roll = GyroRotations.Yaw; GyroDef.RollFactor = -1f; } else if (orientMatrix.Up == cockpitMatrix.Right) { GyroDef.Pitch = GyroRotations.Yaw; GyroDef.PitchFactor = 1f; GyroDef.Roll = GyroRotations.Pitch; GyroDef.RollFactor = -1f; } else if (orientMatrix.Up == cockpitMatrix.Backward) { GyroDef.Pitch = GyroRotations.Pitch; GyroDef.PitchFactor = 1f; GyroDef.Roll = GyroRotations.Yaw; GyroDef.RollFactor = 1f; } else if (orientMatrix.Up == cockpitMatrix.Left) { GyroDef.Pitch = GyroRotations.Yaw; GyroDef.PitchFactor = -1f; GyroDef.Roll = GyroRotations.Pitch; GyroDef.RollFactor = 1f; } } else if (orientMatrix.Forward == cockpitMatrix.Right) { GyroDef.Pitch = GyroRotations.Roll; GyroDef.PitchFactor = -1f; if (orientMatrix.Up == cockpitMatrix.Up) { GyroDef.Yaw = GyroRotations.Yaw; GyroDef.YawFactor = 1f; GyroDef.Roll = GyroRotations.Pitch; GyroDef.RollFactor = 1f; } else if (orientMatrix.Up == cockpitMatrix.Forward) { GyroDef.Yaw = GyroRotations.Pitch; GyroDef.YawFactor = 1f; GyroDef.Roll = GyroRotations.Yaw; GyroDef.RollFactor = -1f; } else if (orientMatrix.Up == cockpitMatrix.Down) { GyroDef.Yaw = GyroRotations.Yaw; GyroDef.YawFactor = -1f; GyroDef.Roll = GyroRotations.Pitch; GyroDef.RollFactor = -1f; } else if (orientMatrix.Up == cockpitMatrix.Backward) { GyroDef.Yaw = GyroRotations.Pitch; GyroDef.YawFactor = -1f; GyroDef.Roll = GyroRotations.Yaw; GyroDef.RollFactor = 1f; } } else if (orientMatrix.Forward == cockpitMatrix.Left) { GyroDef.Pitch = GyroRotations.Roll; GyroDef.PitchFactor = 1f; if (orientMatrix.Up == cockpitMatrix.Up) { GyroDef.Yaw = GyroRotations.Yaw; GyroDef.YawFactor = 1f; GyroDef.Roll = GyroRotations.Pitch; GyroDef.RollFactor = -1f; } else if (orientMatrix.Up == cockpitMatrix.Forward) { GyroDef.Yaw = GyroRotations.Pitch; GyroDef.YawFactor = -1f; GyroDef.Roll = GyroRotations.Yaw; GyroDef.RollFactor = -1f; } else if (orientMatrix.Up == cockpitMatrix.Down) { GyroDef.Yaw = GyroRotations.Yaw; GyroDef.YawFactor = -1f; GyroDef.Roll = GyroRotations.Pitch; GyroDef.RollFactor = 1f; } else if (orientMatrix.Up == cockpitMatrix.Backward) { GyroDef.Yaw = GyroRotations.Pitch; GyroDef.YawFactor = 1f; GyroDef.Roll = GyroRotations.Yaw; GyroDef.RollFactor = 1f; } } GyroDefsList.Add(GyroDef); } }