/// <summary> /// Draws the inspector. /// </summary> public static MovementVariable[] DrawInspector(MovementVariable[] movementData, ref bool showDetails, Character target) { if (movementData == null || movementData.Length < MovementVariableCount) { movementData = new MovementVariable[MovementVariableCount]; } // Air speed if (movementData[AirSpeedIndex] == null) { movementData[AirSpeedIndex] = new MovementVariable(DefaultAirSpeed); } movementData[AirSpeedIndex].FloatValue = EditorGUILayout.FloatField(new GUIContent("Air Speed (x)", "How fast the character moves in the X direction whle in the air."), movementData[AirSpeedIndex].FloatValue); if (movementData[AirSpeedIndex].FloatValue < 0) { movementData[AirSpeedIndex].FloatValue = 0.0f; } showDetails = EditorGUILayout.Foldout(showDetails, "Details"); if (showDetails) { movementData = AirMovement.DrawStandardJumpDetails(movementData, JumpRelativeGravityIndex, GroundedLeewayIndex, JumpWhenButtonHeldIndex); } return(movementData); }
/// <summary> /// Draws the inspector. /// </summary> public static MovementVariable[] DrawInspector(MovementVariable[] movementData, ref bool showDetails, Character target) { if (movementData == null || movementData.Length != MovementVariableCount) { movementData = new MovementVariable[MovementVariableCount]; } // Air speed if (movementData[AirSpeedIndex] == null) { movementData[AirSpeedIndex] = new MovementVariable(DefaultAirSpeed); } movementData[AirSpeedIndex].FloatValue = EditorGUILayout.FloatField(new GUIContent("Air Speed (x)", "How fast the character moves in the X direction whle in the air."), movementData[AirSpeedIndex].FloatValue); if (movementData[AirSpeedIndex].FloatValue < 0) { movementData[AirSpeedIndex].FloatValue = 0.0f; } // Jump height if (movementData[JumpHeightIndex] == null) { movementData[JumpHeightIndex] = new MovementVariable(DefaultJumpHeight); } movementData[JumpHeightIndex].FloatValue = EditorGUILayout.FloatField(new GUIContent("Jump Height", "How high the character jumps"), movementData[JumpHeightIndex].FloatValue); if (movementData[JumpHeightIndex].FloatValue < 0) { movementData[JumpHeightIndex].FloatValue = 0.0f; } showDetails = EditorGUILayout.Foldout(showDetails, "Details"); // Make sure we set defaults regardless of showDetails if (movementData[JumpRelativeGravityIndex] == null || movementData[JumpRelativeGravityIndex].FloatValue <0.01f || movementData[JumpRelativeGravityIndex].FloatValue> 2.0f) { movementData[JumpRelativeGravityIndex] = new MovementVariable(DefaultRelativeJumpGravity); } if (movementData[GroundedLeewayIndex] == null) { movementData[GroundedLeewayIndex] = new MovementVariable(DefaultGroundedLeeway); } if (movementData[JumpWhenButtonHeldIndex] == null) { movementData[JumpWhenButtonHeldIndex] = new MovementVariable(); } if (showDetails) { movementData = AirMovement.DrawStandardJumpDetails(movementData, JumpRelativeGravityIndex, GroundedLeewayIndex, JumpWhenButtonHeldIndex); } return(movementData); }
/// <summary> /// Draws the inspector. /// </summary> public static MovementVariable[] DrawInspector(MovementVariable[] movementData, ref bool showDetails, Character target) { if (movementData == null || movementData.Length < MovementVariableCount) { movementData = new MovementVariable[MovementVariableCount]; } // Air speed if (movementData[AirSpeedIndex] == null) { movementData[AirSpeedIndex] = new MovementVariable(DefaultAirSpeed); } movementData[AirSpeedIndex].FloatValue = EditorGUILayout.FloatField(new GUIContent("Air Speed (x)", "How fast the character moves in the X direction whle in the air."), movementData[AirSpeedIndex].FloatValue); if (movementData[AirSpeedIndex].FloatValue < 0) { movementData[AirSpeedIndex].FloatValue = 0.0f; } // Min Jump height if (movementData[MinJumpHeightIndex] == null) { movementData[MinJumpHeightIndex] = new MovementVariable(DefaultMinJumpHeight); } movementData[MinJumpHeightIndex].FloatValue = EditorGUILayout.FloatField(new GUIContent("Min Jump Height", "How high the character jumps if jump button is tapped."), movementData[MinJumpHeightIndex].FloatValue); if (movementData[MinJumpHeightIndex].FloatValue < 0) { movementData[MinJumpHeightIndex].FloatValue = 0.0f; } // Max Jump height if (movementData[MaxJumpHeightIndex] == null) { movementData[MaxJumpHeightIndex] = new MovementVariable(DefaultMaxJumpHeight); } movementData[MaxJumpHeightIndex].FloatValue = EditorGUILayout.FloatField(new GUIContent("Max Jump Height", "How high the character jumps if jump button is held for full jump acceleration time."), movementData[MaxJumpHeightIndex].FloatValue); if (movementData[MaxJumpHeightIndex].FloatValue < movementData[MinJumpHeightIndex].FloatValue) { movementData[MaxJumpHeightIndex].FloatValue = movementData[MinJumpHeightIndex].FloatValue; } // Jump Time if (movementData[MaxJumpAccelerationTimeIndex] == null) { movementData[MaxJumpAccelerationTimeIndex] = new MovementVariable(DefaultMaxJumpAccelerationTime); } movementData[MaxJumpAccelerationTimeIndex].FloatValue = EditorGUILayout.Slider(new GUIContent("Max Jump Time", "How long the player has to hold jump for the max height to be reached."), movementData[MaxJumpAccelerationTimeIndex].FloatValue, 0.01f, 1.0f); // Jump Time if (movementData[CanDoubleJumpIndex] == null) { movementData[CanDoubleJumpIndex] = new MovementVariable(); } movementData[CanDoubleJumpIndex].BoolValue = EditorGUILayout.Toggle(new GUIContent("Can Double Jump", "If true player can double jump."), movementData[CanDoubleJumpIndex].BoolValue); showDetails = EditorGUILayout.Foldout(showDetails, "Details"); // Make sure we set defaults regardless of showDetails if (movementData[JumpRelativeGravityIndex] == null || movementData[JumpRelativeGravityIndex].FloatValue <0.01f || movementData[JumpRelativeGravityIndex].FloatValue> 2.0f) { movementData[JumpRelativeGravityIndex] = new MovementVariable(DefaultRelativeJumpGravity); } if (movementData[GroundedLeewayIndex] == null) { movementData[GroundedLeewayIndex] = new MovementVariable(DefaultGroundedLeeway); } if (movementData[JumpWhenButtonHeldIndex] == null) { movementData[JumpWhenButtonHeldIndex] = new MovementVariable(); } if (showDetails) { movementData = AirMovement.DrawStandardJumpDetails(movementData, JumpRelativeGravityIndex, GroundedLeewayIndex, JumpWhenButtonHeldIndex); } // As this may not be set if show details are closed lets set it. if (movementData [JumpRelativeGravityIndex] == null) { movementData [JumpRelativeGravityIndex] = new MovementVariable(DefaultRelativeJumpGravity); } // Check for things that don't look right if (((movementData[MaxJumpHeightIndex].FloatValue - movementData[MinJumpHeightIndex].FloatValue) * movementData[MaxJumpAccelerationTimeIndex].FloatValue) > 0.5f) { EditorGUILayout.HelpBox("Your jump settings mean that your character may moves in an unnatural floaty way if jump is held. Consider reducing Max Jump Time or increasing the Min Jump Height.", MessageType.Warning); float betterTime = 0.5f / (movementData[MaxJumpHeightIndex].FloatValue - movementData[MinJumpHeightIndex].FloatValue); if (betterTime < 1 && betterTime >= 0.1f) { GUILayout.BeginHorizontal(); GUILayout.FlexibleSpace(); if (GUILayout.Button(string.Format("Set time to {0:0.00}", betterTime))) { movementData[MaxJumpAccelerationTimeIndex].FloatValue = betterTime; } GUILayout.EndHorizontal(); } } // Check for things that don't look right if (movementData[JumpRelativeGravityIndex].FloatValue < 1.4f) { EditorGUILayout.HelpBox("Variable height jumps tend to look more natural with a high relative jump gravity.", MessageType.Warning); GUILayout.BeginHorizontal(); GUILayout.FlexibleSpace(); if (GUILayout.Button("Set to " + DefaultRelativeJumpGravity)) { movementData[JumpRelativeGravityIndex].FloatValue = DefaultRelativeJumpGravity; } GUILayout.EndHorizontal(); } return(movementData); }
/// <summary> /// Draws the inspector. /// </summary> public static MovementVariable[] DrawInspector(MovementVariable[] movementData, ref bool showDetails, Character target) { if (movementData != null && movementData.Length == MovementVariableCount - 1) { MovementVariable[] tmp = movementData; movementData = new MovementVariable[MovementVariableCount]; System.Array.Copy(tmp, movementData, MovementVariableCount - 1); } else if (movementData == null || movementData.Length < MovementVariableCount) { movementData = new MovementVariable[MovementVariableCount]; } // Air speed if (movementData[AirSpeedIndex] == null) { movementData[AirSpeedIndex] = new MovementVariable(DefaultAirSpeed); } movementData[AirSpeedIndex].FloatValue = EditorGUILayout.FloatField(new GUIContent("Air Speed (x)", "How fast the character moves in the X direction whle in the air."), movementData[AirSpeedIndex].FloatValue); if (movementData[AirSpeedIndex].FloatValue < 0) { movementData[AirSpeedIndex].FloatValue = 0.0f; } // Jump height if (movementData[JumpHeightIndex] == null) { movementData[JumpHeightIndex] = new MovementVariable(DefaultJumpHeight); } movementData[JumpHeightIndex].FloatValue = EditorGUILayout.FloatField(new GUIContent("Jump Height", "How high the character jumps"), movementData[JumpHeightIndex].FloatValue); if (movementData[JumpHeightIndex].FloatValue < 0) { movementData[JumpHeightIndex].FloatValue = 0.0f; } // Can double-jump if (movementData[CanDoubleJumpIndex] == null) { movementData[CanDoubleJumpIndex] = new MovementVariable(DefaultCanDoubleJump); } movementData[CanDoubleJumpIndex].BoolValue = EditorGUILayout.Toggle(new GUIContent("Can Double-jump", "Can the character double-jump?"), movementData[CanDoubleJumpIndex].BoolValue); // Double-jump settings if (movementData[DoubleJumpHeightIndex] == null) { movementData[DoubleJumpHeightIndex] = new MovementVariable(DefaultDoubleJumpHeight); } if (movementData[MaxDoubleJumpCountIndex] == null) { movementData[MaxDoubleJumpCountIndex] = new MovementVariable(2); } if (movementData[CanDoubleJumpIndex].BoolValue) { // Double-jump height movementData[DoubleJumpHeightIndex].FloatValue = EditorGUILayout.FloatField(new GUIContent("Double Jump Height", "How high the character jumps on a double-jump."), movementData[DoubleJumpHeightIndex].FloatValue); if (movementData[DoubleJumpHeightIndex].FloatValue < 0) { movementData[DoubleJumpHeightIndex].FloatValue = 0.0f; } if (EditorGUILayout.Toggle(new GUIContent("Infinite Double Jumps", "Can the character jump in the air forever?"), movementData[MaxDoubleJumpCountIndex].IntValue == -1)) { movementData[MaxDoubleJumpCountIndex].IntValue = -1; } else { // Max Double Jump Count movementData[MaxDoubleJumpCountIndex].IntValue = 1 + EditorGUILayout.IntField(new GUIContent("Max Jumps", "How many times can the character jump while in the air."), movementData[MaxDoubleJumpCountIndex].IntValue - 1); if (movementData[MaxDoubleJumpCountIndex].IntValue < 2) { movementData[MaxDoubleJumpCountIndex].IntValue = 2; } } } showDetails = EditorGUILayout.Foldout(showDetails, "Details"); // Make sure we set defaults regardless of showDetails if (movementData[JumpRelativeGravityIndex] == null || movementData[JumpRelativeGravityIndex].FloatValue <0.01f || movementData[JumpRelativeGravityIndex].FloatValue> 2.0f) { movementData[JumpRelativeGravityIndex] = new MovementVariable(DefaultRelativeJumpGravity); } if (movementData[GroundedLeewayIndex] == null) { movementData[GroundedLeewayIndex] = new MovementVariable(DefaultGroundedLeeway); } if (movementData[JumpWhenButtonHeldIndex] == null) { movementData[JumpWhenButtonHeldIndex] = new MovementVariable(); } if (showDetails) { movementData = AirMovement.DrawStandardJumpDetails(movementData, JumpRelativeGravityIndex, GroundedLeewayIndex, JumpWhenButtonHeldIndex); } return(movementData); }