plantilla base para movimiento básico
This commit is contained in:
Robii Aragon
2026-02-05 05:07:55 -08:00
parent 195b696771
commit 779f2c8b20
14443 changed files with 23840465 additions and 452 deletions

View File

@@ -0,0 +1,768 @@
using UnityEngine;
using System.Collections;
#if UNITY_EDITOR
using UnityEditor;
[CustomEditor (typeof (ragdollActivator))]
[CanEditMultipleObjects]
public class ragdollActivatorEditor : Editor
{
SerializedProperty typeOfDeath;
SerializedProperty timeToGetUp;
SerializedProperty checkPlayerOnGroundToGetUp;
SerializedProperty getUpDelay;
SerializedProperty useDeathSound;
SerializedProperty deathSound;
SerializedProperty mainAudioSource;
SerializedProperty deathSoundAudioElement;
SerializedProperty getUpFromBellyAnimatorName;
SerializedProperty getUpFromBackAnimatorName;
SerializedProperty deathAnimatorName;
SerializedProperty deathAnimationID;
SerializedProperty actionIDAnimatorName;
SerializedProperty useGetUpFromBellyAfterDeathActive;
SerializedProperty enableAnimatorLayerOnDeath;
SerializedProperty animatorLayerToEnableName;
SerializedProperty ragdollToMecanimBlendTime;
SerializedProperty layer;
SerializedProperty maxRagdollVelocity;
SerializedProperty maxVelocityToGetUp;
SerializedProperty extraForceOnRagdoll;
SerializedProperty eventOnEnterRagdoll;
SerializedProperty eventOnExitRagdoll;
SerializedProperty eventOnDeath;
SerializedProperty eventOnResurrect;
SerializedProperty playerState;
SerializedProperty currentState;
SerializedProperty onGround;
SerializedProperty canMove;
SerializedProperty ragdollCanReceiveDamageOnImpact;
SerializedProperty minTimeToReceiveDamageOnImpact;
SerializedProperty minVelocityToReceiveDamageOnImpact;
SerializedProperty receiveDamageOnImpactMultiplier;
SerializedProperty minTimToReceiveImpactDamageAgain;
SerializedProperty usedByAI;
SerializedProperty timeToShowMenu;
SerializedProperty tagForColliders;
SerializedProperty setLayerOnRagdollState;
SerializedProperty layerOnRagdollState;
SerializedProperty showComponents;
SerializedProperty characterBody;
SerializedProperty rootMotion;
SerializedProperty headTransform;
SerializedProperty leftFootTransform;
SerializedProperty rightFootTransform;
SerializedProperty hipsRigidbody;
SerializedProperty playerCOM;
SerializedProperty weaponsManager;
SerializedProperty mainCameraTransform;
SerializedProperty statesManager;
SerializedProperty healthManager;
SerializedProperty mainCollider;
SerializedProperty playerInput;
SerializedProperty mainAnimator;
SerializedProperty playerControllerManager;
SerializedProperty cameraManager;
SerializedProperty powersManager;
SerializedProperty gravityManager;
SerializedProperty IKSystemManager;
SerializedProperty mainRigidbody;
SerializedProperty stepsManager;
SerializedProperty combatManager;
SerializedProperty mainRagdollBuilder;
SerializedProperty activateRagdollAfterDeath;
SerializedProperty delayToActivateRagdollAfterDeath;
SerializedProperty canMoveCharacterOnRagdollState;
SerializedProperty moveCharacterOnRagdollStateForceAmount;
SerializedProperty moveCharacterOnRagdollStateForceMode;
SerializedProperty extraRagdollsInfoList;
SerializedProperty checkpointManagerStateEnabled;
SerializedProperty bodyParts;
SerializedProperty ignoreIfRagdollOnGroundToShowDeathMenu;
SerializedProperty setRagdollStateOnStart;
SerializedProperty pauseGetUpStateOnRagdollOnStart;
SerializedProperty ragdollOnStartForce;
SerializedProperty setSleepStateOnStart;
SerializedProperty useDurationForSleepStateOnStart;
SerializedProperty durationForSleepStateOnStart;
SerializedProperty checkIfCharacterOnAirOnDeath;
SerializedProperty minDistanceToCheckIfCharacterOnAir;
ragdollActivator manager;
bool showEventsSettings;
Color defBackgroundColor;
string buttonText;
GUIStyle buttonStyle = new GUIStyle ();
void OnEnable ()
{
typeOfDeath = serializedObject.FindProperty ("typeOfDeath");
timeToGetUp = serializedObject.FindProperty ("timeToGetUp");
checkPlayerOnGroundToGetUp = serializedObject.FindProperty ("checkPlayerOnGroundToGetUp");
getUpDelay = serializedObject.FindProperty ("getUpDelay");
useDeathSound = serializedObject.FindProperty ("useDeathSound");
deathSound = serializedObject.FindProperty ("deathSound");
mainAudioSource = serializedObject.FindProperty ("mainAudioSource");
deathSoundAudioElement = serializedObject.FindProperty ("deathSoundAudioElement");
getUpFromBellyAnimatorName = serializedObject.FindProperty ("getUpFromBellyAnimatorName");
getUpFromBackAnimatorName = serializedObject.FindProperty ("getUpFromBackAnimatorName");
deathAnimatorName = serializedObject.FindProperty ("deathAnimatorName");
deathAnimationID = serializedObject.FindProperty ("deathAnimationID");
actionIDAnimatorName = serializedObject.FindProperty ("actionIDAnimatorName");
useGetUpFromBellyAfterDeathActive = serializedObject.FindProperty ("useGetUpFromBellyAfterDeathActive");
enableAnimatorLayerOnDeath = serializedObject.FindProperty ("enableAnimatorLayerOnDeath");
animatorLayerToEnableName = serializedObject.FindProperty ("animatorLayerToEnableName");
ragdollToMecanimBlendTime = serializedObject.FindProperty ("ragdollToMecanimBlendTime");
layer = serializedObject.FindProperty ("layer");
maxRagdollVelocity = serializedObject.FindProperty ("maxRagdollVelocity");
maxVelocityToGetUp = serializedObject.FindProperty ("maxVelocityToGetUp");
extraForceOnRagdoll = serializedObject.FindProperty ("extraForceOnRagdoll");
eventOnEnterRagdoll = serializedObject.FindProperty ("eventOnEnterRagdoll");
eventOnExitRagdoll = serializedObject.FindProperty ("eventOnExitRagdoll");
eventOnDeath = serializedObject.FindProperty ("eventOnDeath");
eventOnResurrect = serializedObject.FindProperty ("eventOnResurrect");
playerState = serializedObject.FindProperty ("playerState");
currentState = serializedObject.FindProperty ("currentState");
onGround = serializedObject.FindProperty ("onGround");
canMove = serializedObject.FindProperty ("canMove");
ragdollCanReceiveDamageOnImpact = serializedObject.FindProperty ("ragdollCanReceiveDamageOnImpact");
minTimeToReceiveDamageOnImpact = serializedObject.FindProperty ("minTimeToReceiveDamageOnImpact");
minVelocityToReceiveDamageOnImpact = serializedObject.FindProperty ("minVelocityToReceiveDamageOnImpact");
receiveDamageOnImpactMultiplier = serializedObject.FindProperty ("receiveDamageOnImpactMultiplier");
minTimToReceiveImpactDamageAgain = serializedObject.FindProperty ("minTimToReceiveImpactDamageAgain");
usedByAI = serializedObject.FindProperty ("usedByAI");
timeToShowMenu = serializedObject.FindProperty ("timeToShowMenu");
tagForColliders = serializedObject.FindProperty ("tagForColliders");
setLayerOnRagdollState = serializedObject.FindProperty ("setLayerOnRagdollState");
layerOnRagdollState = serializedObject.FindProperty ("layerOnRagdollState");
showComponents = serializedObject.FindProperty ("showComponents");
characterBody = serializedObject.FindProperty ("characterBody");
rootMotion = serializedObject.FindProperty ("rootMotion");
headTransform = serializedObject.FindProperty ("headTransform");
leftFootTransform = serializedObject.FindProperty ("leftFootTransform");
rightFootTransform = serializedObject.FindProperty ("rightFootTransform");
hipsRigidbody = serializedObject.FindProperty ("hipsRigidbody");
playerCOM = serializedObject.FindProperty ("playerCOM");
weaponsManager = serializedObject.FindProperty ("weaponsManager");
mainCameraTransform = serializedObject.FindProperty ("mainCameraTransform");
statesManager = serializedObject.FindProperty ("statesManager");
healthManager = serializedObject.FindProperty ("healthManager");
mainCollider = serializedObject.FindProperty ("mainCollider");
playerInput = serializedObject.FindProperty ("playerInput");
mainAnimator = serializedObject.FindProperty ("mainAnimator");
playerControllerManager = serializedObject.FindProperty ("playerControllerManager");
cameraManager = serializedObject.FindProperty ("cameraManager");
powersManager = serializedObject.FindProperty ("powersManager");
gravityManager = serializedObject.FindProperty ("gravityManager");
IKSystemManager = serializedObject.FindProperty ("IKSystemManager");
mainRigidbody = serializedObject.FindProperty ("mainRigidbody");
stepsManager = serializedObject.FindProperty ("stepsManager");
combatManager = serializedObject.FindProperty ("combatManager");
mainRagdollBuilder = serializedObject.FindProperty ("mainRagdollBuilder");
activateRagdollAfterDeath = serializedObject.FindProperty ("activateRagdollAfterDeath");
delayToActivateRagdollAfterDeath = serializedObject.FindProperty ("delayToActivateRagdollAfterDeath");
canMoveCharacterOnRagdollState = serializedObject.FindProperty ("canMoveCharacterOnRagdollState");
moveCharacterOnRagdollStateForceAmount = serializedObject.FindProperty ("moveCharacterOnRagdollStateForceAmount");
moveCharacterOnRagdollStateForceMode = serializedObject.FindProperty ("moveCharacterOnRagdollStateForceMode");
extraRagdollsInfoList = serializedObject.FindProperty ("extraRagdollsInfoList");
checkpointManagerStateEnabled = serializedObject.FindProperty ("checkpointManagerStateEnabled");
bodyParts = serializedObject.FindProperty ("bodyParts");
ignoreIfRagdollOnGroundToShowDeathMenu = serializedObject.FindProperty ("ignoreIfRagdollOnGroundToShowDeathMenu");
setRagdollStateOnStart = serializedObject.FindProperty ("setRagdollStateOnStart");
pauseGetUpStateOnRagdollOnStart = serializedObject.FindProperty ("pauseGetUpStateOnRagdollOnStart");
ragdollOnStartForce = serializedObject.FindProperty ("ragdollOnStartForce");
setSleepStateOnStart = serializedObject.FindProperty ("setSleepStateOnStart");
useDurationForSleepStateOnStart = serializedObject.FindProperty ("useDurationForSleepStateOnStart");
durationForSleepStateOnStart = serializedObject.FindProperty ("durationForSleepStateOnStart");
checkIfCharacterOnAirOnDeath = serializedObject.FindProperty ("checkIfCharacterOnAirOnDeath");
minDistanceToCheckIfCharacterOnAir = serializedObject.FindProperty ("minDistanceToCheckIfCharacterOnAir");
manager = (ragdollActivator)target;
}
public override void OnInspectorGUI ()
{
EditorGUILayout.Space ();
buttonStyle = new GUIStyle (GUI.skin.button);
buttonStyle.fontStyle = FontStyle.Bold;
buttonStyle.fontSize = 12;
GUILayout.BeginVertical ("Main Settings", "window");
EditorGUILayout.PropertyField (typeOfDeath);
EditorGUILayout.PropertyField (timeToGetUp);
EditorGUILayout.PropertyField (checkPlayerOnGroundToGetUp);
EditorGUILayout.PropertyField (getUpDelay);
EditorGUILayout.PropertyField (useDeathSound);
if (useDeathSound.boolValue) {
EditorGUILayout.PropertyField (deathSound);
EditorGUILayout.PropertyField (mainAudioSource);
EditorGUILayout.PropertyField (deathSoundAudioElement);
}
EditorGUILayout.Space ();
EditorGUILayout.PropertyField (checkIfCharacterOnAirOnDeath);
if (checkIfCharacterOnAirOnDeath.boolValue) {
EditorGUILayout.PropertyField (minDistanceToCheckIfCharacterOnAir);
}
EditorGUILayout.Space ();
EditorGUILayout.Space ();
EditorGUILayout.PropertyField (canMoveCharacterOnRagdollState);
if (canMoveCharacterOnRagdollState.boolValue) {
EditorGUILayout.PropertyField (moveCharacterOnRagdollStateForceAmount);
EditorGUILayout.PropertyField (moveCharacterOnRagdollStateForceMode);
}
EditorGUILayout.Space ();
EditorGUILayout.PropertyField (checkpointManagerStateEnabled);
EditorGUILayout.Space ();
EditorGUILayout.PropertyField (setRagdollStateOnStart);
if (setRagdollStateOnStart.boolValue) {
EditorGUILayout.PropertyField (pauseGetUpStateOnRagdollOnStart);
EditorGUILayout.PropertyField (ragdollOnStartForce);
}
EditorGUILayout.Space ();
EditorGUILayout.PropertyField (setSleepStateOnStart);
if (setSleepStateOnStart.boolValue) {
EditorGUILayout.PropertyField (useDurationForSleepStateOnStart);
EditorGUILayout.PropertyField (durationForSleepStateOnStart);
}
GUILayout.EndVertical ();
EditorGUILayout.Space ();
GUILayout.BeginVertical ("Animation Settings", "window");
EditorGUILayout.PropertyField (getUpFromBellyAnimatorName);
EditorGUILayout.PropertyField (getUpFromBackAnimatorName);
EditorGUILayout.PropertyField (deathAnimatorName);
EditorGUILayout.PropertyField (deathAnimationID);
EditorGUILayout.PropertyField (actionIDAnimatorName);
EditorGUILayout.PropertyField (useGetUpFromBellyAfterDeathActive);
EditorGUILayout.Space ();
EditorGUILayout.PropertyField (activateRagdollAfterDeath);
if (activateRagdollAfterDeath.boolValue) {
EditorGUILayout.PropertyField (delayToActivateRagdollAfterDeath);
}
EditorGUILayout.Space ();
EditorGUILayout.PropertyField (enableAnimatorLayerOnDeath);
if (enableAnimatorLayerOnDeath.boolValue) {
EditorGUILayout.PropertyField (animatorLayerToEnableName);
}
GUILayout.EndVertical ();
EditorGUILayout.Space ();
if (manager.typeOfDeath == ragdollActivator.deathType.ragdoll) {
EditorGUILayout.Space ();
GUILayout.BeginVertical ("Ragdoll Physics Settings", "window");
EditorGUILayout.PropertyField (ragdollToMecanimBlendTime);
EditorGUILayout.PropertyField (layer);
EditorGUILayout.PropertyField (maxRagdollVelocity);
EditorGUILayout.PropertyField (maxVelocityToGetUp);
EditorGUILayout.PropertyField (extraForceOnRagdoll);
GUILayout.EndVertical ();
}
EditorGUILayout.Space ();
GUILayout.BeginVertical ("Ragdoll Events Settings", "window");
EditorGUILayout.Space ();
defBackgroundColor = GUI.backgroundColor;
EditorGUILayout.BeginHorizontal ();
if (showEventsSettings) {
GUI.backgroundColor = Color.gray;
buttonText = "Hide Events Settings";
} else {
GUI.backgroundColor = defBackgroundColor;
buttonText = "Show Events Settings";
}
if (GUILayout.Button (buttonText)) {
showEventsSettings = !showEventsSettings;
}
GUI.backgroundColor = defBackgroundColor;
EditorGUILayout.EndHorizontal ();
if (showEventsSettings) {
EditorGUILayout.Space ();
EditorGUILayout.PropertyField (eventOnEnterRagdoll);
EditorGUILayout.Space ();
EditorGUILayout.PropertyField (eventOnExitRagdoll);
EditorGUILayout.Space ();
EditorGUILayout.PropertyField (eventOnDeath);
EditorGUILayout.Space ();
EditorGUILayout.PropertyField (eventOnResurrect);
}
GUILayout.EndVertical ();
EditorGUILayout.Space ();
GUILayout.BeginVertical ("Receive Damage On Impact Settings", "window");
EditorGUILayout.PropertyField (ragdollCanReceiveDamageOnImpact);
if (ragdollCanReceiveDamageOnImpact.boolValue) {
EditorGUILayout.PropertyField (minTimeToReceiveDamageOnImpact);
EditorGUILayout.PropertyField (minVelocityToReceiveDamageOnImpact);
EditorGUILayout.PropertyField (receiveDamageOnImpactMultiplier);
EditorGUILayout.PropertyField (minTimToReceiveImpactDamageAgain);
}
GUILayout.EndVertical ();
EditorGUILayout.Space ();
GUILayout.BeginVertical ("Extra Ragdoll List Settings", "window");
showExtraRagdollsInfoList (extraRagdollsInfoList);
GUILayout.EndVertical ();
EditorGUILayout.Space ();
if (!usedByAI.boolValue) {
GUILayout.BeginVertical ("Player Settings", "window");
EditorGUILayout.PropertyField (timeToShowMenu);
GUILayout.EndVertical ();
EditorGUILayout.Space ();
}
GUILayout.BeginVertical ("AI Settings", "window");
EditorGUILayout.PropertyField (usedByAI);
EditorGUILayout.PropertyField (tagForColliders);
EditorGUILayout.Space ();
EditorGUILayout.PropertyField (setLayerOnRagdollState);
if (setLayerOnRagdollState.boolValue) {
EditorGUILayout.PropertyField (layerOnRagdollState);
}
GUILayout.EndVertical ();
EditorGUILayout.Space ();
GUILayout.BeginVertical ("Ragdoll State", "window");
EditorGUILayout.PropertyField (playerState);
EditorGUILayout.PropertyField (currentState);
GUILayout.Label ("On Ground\t\t" + onGround.boolValue);
GUILayout.Label ("Can Move\t\t" + canMove.boolValue);
GUILayout.Label ("Ignore Ground Death Menu\t" + ignoreIfRagdollOnGroundToShowDeathMenu.boolValue);
GUILayout.EndVertical ();
EditorGUILayout.Space ();
GUILayout.BeginVertical ("Ragdoll Body Parts List Debug", "window");
showBodyPartsList (bodyParts);
GUILayout.EndVertical ();
EditorGUILayout.Space ();
defBackgroundColor = GUI.backgroundColor;
EditorGUILayout.BeginHorizontal ();
if (showComponents.boolValue) {
GUI.backgroundColor = Color.gray;
buttonText = "Hide Components";
} else {
GUI.backgroundColor = defBackgroundColor;
buttonText = "Show Components";
}
if (GUILayout.Button (buttonText)) {
showComponents.boolValue = !showComponents.boolValue;
}
GUI.backgroundColor = defBackgroundColor;
EditorGUILayout.EndHorizontal ();
if (showComponents.boolValue) {
EditorGUILayout.Space ();
GUILayout.BeginVertical ("Player Elements", "window");
EditorGUILayout.PropertyField (characterBody);
EditorGUILayout.PropertyField (rootMotion);
EditorGUILayout.PropertyField (headTransform);
EditorGUILayout.PropertyField (leftFootTransform);
EditorGUILayout.PropertyField (rightFootTransform);
EditorGUILayout.PropertyField (hipsRigidbody);
EditorGUILayout.PropertyField (playerCOM);
EditorGUILayout.PropertyField (weaponsManager);
EditorGUILayout.PropertyField (mainCameraTransform);
EditorGUILayout.PropertyField (statesManager);
EditorGUILayout.PropertyField (healthManager);
EditorGUILayout.PropertyField (mainCollider);
EditorGUILayout.PropertyField (playerInput);
EditorGUILayout.PropertyField (mainAnimator);
EditorGUILayout.PropertyField (playerControllerManager);
EditorGUILayout.PropertyField (cameraManager);
EditorGUILayout.PropertyField (powersManager);
EditorGUILayout.PropertyField (gravityManager);
EditorGUILayout.PropertyField (IKSystemManager);
EditorGUILayout.PropertyField (mainRigidbody);
EditorGUILayout.PropertyField (stepsManager);
EditorGUILayout.PropertyField (combatManager);
EditorGUILayout.PropertyField (mainRagdollBuilder);
GUILayout.EndVertical ();
}
EditorGUILayout.Space ();
if (GUI.changed) {
serializedObject.ApplyModifiedProperties ();
}
}
void showSimpleList (SerializedProperty list)
{
EditorGUILayout.Space ();
if (GUILayout.Button ("Show/Hide " + list.displayName, buttonStyle)) {
list.isExpanded = !list.isExpanded;
}
EditorGUILayout.Space ();
if (list.isExpanded) {
EditorGUILayout.Space ();
GUILayout.Label ("Number Of Elements: \t" + list.arraySize);
EditorGUILayout.Space ();
// GUILayout.BeginHorizontal ();
// if (GUILayout.Button ("Add Function")) {
// list.arraySize++;
// }
// if (GUILayout.Button ("Clear")) {
// list.arraySize = 0;
// }
// GUILayout.EndHorizontal ();
//
// EditorGUILayout.Space ();
for (int i = 0; i < list.arraySize; i++) {
GUILayout.BeginHorizontal ();
if (i < list.arraySize && i >= 0) {
EditorGUILayout.PropertyField (list.GetArrayElementAtIndex (i), new GUIContent ("", null, ""), false);
}
GUILayout.BeginHorizontal ();
if (GUILayout.Button ("x")) {
list.DeleteArrayElementAtIndex (i);
}
if (GUILayout.Button ("v")) {
if (i >= 0) {
list.MoveArrayElement (i, i + 1);
}
}
if (GUILayout.Button ("^")) {
if (i < list.arraySize) {
list.MoveArrayElement (i, i - 1);
}
}
GUILayout.EndHorizontal ();
GUILayout.EndHorizontal ();
}
}
}
void showExtraRagdollsInfoList (SerializedProperty list)
{
EditorGUILayout.Space ();
if (GUILayout.Button ("Show/Hide " + list.displayName, buttonStyle)) {
list.isExpanded = !list.isExpanded;
}
EditorGUILayout.Space ();
if (list.isExpanded) {
GUILayout.BeginVertical ("box");
EditorGUILayout.Space ();
GUILayout.Label ("Number Of Elements: \t" + list.arraySize);
EditorGUILayout.Space ();
GUILayout.BeginHorizontal ();
if (GUILayout.Button ("Add Type")) {
list.arraySize++;
}
if (GUILayout.Button ("Clear List")) {
list.arraySize = 0;
}
GUILayout.EndHorizontal ();
EditorGUILayout.Space ();
GUILayout.BeginHorizontal ();
if (GUILayout.Button ("Expand All")) {
for (int i = 0; i < list.arraySize; i++) {
list.GetArrayElementAtIndex (i).isExpanded = true;
}
}
if (GUILayout.Button ("Collapse All")) {
for (int i = 0; i < list.arraySize; i++) {
list.GetArrayElementAtIndex (i).isExpanded = false;
}
}
GUILayout.EndHorizontal ();
EditorGUILayout.Space ();
for (int i = 0; i < list.arraySize; i++) {
bool expanded = false;
GUILayout.BeginHorizontal ();
GUILayout.BeginHorizontal ("box");
EditorGUILayout.Space ();
if (i < list.arraySize && i >= 0) {
EditorGUILayout.BeginVertical ();
EditorGUILayout.PropertyField (list.GetArrayElementAtIndex (i), false);
if (list.GetArrayElementAtIndex (i).isExpanded) {
expanded = true;
showExtraRagdollsInfoListElement (list.GetArrayElementAtIndex (i));
}
EditorGUILayout.Space ();
GUILayout.EndVertical ();
}
GUILayout.EndHorizontal ();
if (expanded) {
GUILayout.BeginVertical ();
} else {
GUILayout.BeginHorizontal ();
}
if (GUILayout.Button ("x")) {
list.DeleteArrayElementAtIndex (i);
}
if (GUILayout.Button ("v")) {
if (i >= 0) {
list.MoveArrayElement (i, i + 1);
}
}
if (GUILayout.Button ("^")) {
if (i < list.arraySize) {
list.MoveArrayElement (i, i - 1);
}
}
if (expanded) {
GUILayout.EndVertical ();
} else {
GUILayout.EndHorizontal ();
}
GUILayout.EndHorizontal ();
}
EditorGUILayout.Space ();
GUILayout.EndVertical ();
}
}
void showExtraRagdollsInfoListElement (SerializedProperty list)
{
GUILayout.BeginVertical ("box");
EditorGUILayout.PropertyField (list.FindPropertyRelative ("Name"));
EditorGUILayout.PropertyField (list.FindPropertyRelative ("isCurrentRagdoll"));
EditorGUILayout.PropertyField (list.FindPropertyRelative ("characterBody"));
EditorGUILayout.PropertyField (list.FindPropertyRelative ("rootMotion"));
EditorGUILayout.PropertyField (list.FindPropertyRelative ("hipsRigidbody"));
EditorGUILayout.PropertyField (list.FindPropertyRelative ("rotationYOffset"));
GUILayout.EndVertical ();
}
void showBodyPartsList (SerializedProperty list)
{
EditorGUILayout.Space ();
if (GUILayout.Button ("Show/Hide " + list.displayName, buttonStyle)) {
list.isExpanded = !list.isExpanded;
}
EditorGUILayout.Space ();
if (list.isExpanded) {
GUILayout.BeginVertical ("box");
EditorGUILayout.Space ();
GUILayout.Label ("Number Of Elements: \t" + list.arraySize);
EditorGUILayout.Space ();
GUILayout.BeginHorizontal ();
if (GUILayout.Button ("Add Type")) {
list.arraySize++;
}
if (GUILayout.Button ("Clear List")) {
list.arraySize = 0;
}
GUILayout.EndHorizontal ();
EditorGUILayout.Space ();
GUILayout.BeginHorizontal ();
if (GUILayout.Button ("Expand All")) {
for (int i = 0; i < list.arraySize; i++) {
list.GetArrayElementAtIndex (i).isExpanded = true;
}
}
if (GUILayout.Button ("Collapse All")) {
for (int i = 0; i < list.arraySize; i++) {
list.GetArrayElementAtIndex (i).isExpanded = false;
}
}
GUILayout.EndHorizontal ();
EditorGUILayout.Space ();
for (int i = 0; i < list.arraySize; i++) {
bool expanded = false;
GUILayout.BeginHorizontal ();
GUILayout.BeginHorizontal ("box");
EditorGUILayout.Space ();
if (i < list.arraySize && i >= 0) {
EditorGUILayout.BeginVertical ();
EditorGUILayout.PropertyField (list.GetArrayElementAtIndex (i), false);
if (list.GetArrayElementAtIndex (i).isExpanded) {
expanded = true;
showBodyPartsListElement (list.GetArrayElementAtIndex (i));
}
EditorGUILayout.Space ();
GUILayout.EndVertical ();
}
GUILayout.EndHorizontal ();
if (expanded) {
GUILayout.BeginVertical ();
} else {
GUILayout.BeginHorizontal ();
}
if (GUILayout.Button ("x")) {
list.DeleteArrayElementAtIndex (i);
}
if (GUILayout.Button ("v")) {
if (i >= 0) {
list.MoveArrayElement (i, i + 1);
}
}
if (GUILayout.Button ("^")) {
if (i < list.arraySize) {
list.MoveArrayElement (i, i - 1);
}
}
if (expanded) {
GUILayout.EndVertical ();
} else {
GUILayout.EndHorizontal ();
}
GUILayout.EndHorizontal ();
}
EditorGUILayout.Space ();
GUILayout.EndVertical ();
}
}
void showBodyPartsListElement (SerializedProperty list)
{
GUILayout.BeginVertical ("box");
EditorGUILayout.PropertyField (list.FindPropertyRelative ("name"));
EditorGUILayout.PropertyField (list.FindPropertyRelative ("transform"));
GUILayout.EndVertical ();
}
}
#endif