private float GetMutationStrength(JointMotion motion, Individual parentA, Individual parentB) { float extinction = 0.5f * (parentA.Extinction + parentB.Extinction); float span = motion.GetUpperLimit() - motion.GetLowerLimit(); return(span * extinction); }
private float Clip(float gene, JointMotion motion) { if (motion.Joint.Type == JointType.Continuous) { /* * while(gene > Mathf.PI) { * gene -= Mathf.PI; * } * while(gene < -Mathf.PI) { * gene += Mathf.PI; * } */ } else { gene = Mathf.Clamp(gene, motion.GetLowerLimit(), motion.GetUpperLimit()); } return(gene); //return motion.ConstrainToLimits(gene); }
private void DrawMotionInspector(JointMotion motion, string name) { using (var scope = new EditorGUILayout.VerticalScope("Button")) { EditorGUILayout.HelpBox(name, MessageType.None); motion.State = (JointState)EditorGUILayout.EnumPopup("State", motion.State); if (motion.State != JointState.Fixed) { motion.MotionType = (MotionType)EditorGUILayout.EnumPopup("Motion Type", motion.MotionType); if (motion.MotionType != MotionType.Teleport) { motion.SetMaximumVelocity(EditorGUILayout.FloatField("Max Velocity", motion.GetMaximumVelocity())); motion.SetMaximumAcceleration(EditorGUILayout.FloatField("Max Acceleration", motion.GetMaximumAcceleration())); } if (motion.Joint.Type != JointType.Continuous) { motion.SetLowerLimit(EditorGUILayout.FloatField("Lower Limit", motion.GetLowerLimit())); motion.SetUpperLimit(EditorGUILayout.FloatField("Upper Limit", motion.GetUpperLimit())); } motion.SetTargetValue(EditorGUILayout.FloatField("Target Value", motion.GetTargetValue())); } //motion.Output = EditorGUILayout.Toggle("Output", motion.Output); //motion.Record = EditorGUILayout.Toggle("Record", motion.Record); } }