Files
FueraDeEscala/Assets/Game Kit Controller/Scripts/Editor/IKDrivingSystemEditor.cs
Robii Aragon fd87a6ffd5 add ckg
plantilla base para movimiento básico
2026-02-05 05:07:55 -08:00

1199 lines
43 KiB
C#

using UnityEngine;
using System.Collections;
#if UNITY_EDITOR
using UnityEditor;
[CustomEditor (typeof(IKDrivingSystem))]
public class IKDrivingSystemEditor : Editor
{
SerializedProperty vehicle;
SerializedProperty vehicelCameraGameObject;
SerializedProperty useCustomVehicleGameObject;
SerializedProperty customVehicleGameObject;
SerializedProperty playerIsAlwaysDriver;
SerializedProperty hidePlayerFromNPCs;
SerializedProperty playerVisibleInVehicle;
SerializedProperty hidePlayerWeaponsWhileDriving;
SerializedProperty canBeDrivenRemotely;
SerializedProperty drawFireWeaponIfCarryingPreviously;
SerializedProperty drawMeleeWeaponIfCarryingPreviously;
SerializedProperty resetCameraRotationWhenGetOn;
SerializedProperty resetCameraRotationWhenGetOff;
SerializedProperty ejectPlayerWhenDestroyed;
SerializedProperty ejectingPlayerForce;
SerializedProperty activateFreeFloatingModeOnEject;
SerializedProperty activateFreeFloatingModeOnEjectDelay;
SerializedProperty useExplosionForceWhenDestroyed;
SerializedProperty explosionRadius;
SerializedProperty explosionForce;
SerializedProperty explosionDamage;
SerializedProperty ignoreShield;
SerializedProperty damageTypeID;
SerializedProperty damageCanBeBlocked;
SerializedProperty searchClosestWeakSpot;
SerializedProperty useRemoteEventOnObjectsFound;
SerializedProperty removeEventName;
SerializedProperty pushCharactersOnExplosion;
SerializedProperty applyExplosionForceToVehicles;
SerializedProperty explosionForceToVehiclesMultiplier;
SerializedProperty killObjectsInRadius;
SerializedProperty forceMode;
SerializedProperty useLayerMask;
SerializedProperty layer;
SerializedProperty addCollisionForceDirectionToPassengers;
SerializedProperty extraCollisionForceAmount;
SerializedProperty useMinCollisionForce;
SerializedProperty minCollisionForce;
SerializedProperty debugCollisionForce;
SerializedProperty addAngularDirectionToPassengers;
SerializedProperty vehicleStabilitySpeed;
SerializedProperty extraAngularDirectioAmount;
SerializedProperty startGameInThisVehicle;
SerializedProperty playerForVehicle;
SerializedProperty isBeingDrivenRemotely;
SerializedProperty activateActionScreen;
SerializedProperty actionScreenName;
SerializedProperty useEventOnDriverGetOn;
SerializedProperty eventOnDriverGetOn;
SerializedProperty useEventOnDriverGetOff;
SerializedProperty eventOnDriverGetOff;
SerializedProperty sendPlayersEnterExitTriggerToEvent;
SerializedProperty eventToSendPlayersEnterTriggerToEvent;
SerializedProperty eventToSendPlayersExitTriggerToEvent;
SerializedProperty useRemoteEventsOnPassengers;
SerializedProperty remoteEventNameListGetOn;
SerializedProperty remoteEventNameListGetOff;
SerializedProperty actionManager;
SerializedProperty vehicleCameraManager;
SerializedProperty HUDManager;
SerializedProperty currentVehicleWeaponSystem;
SerializedProperty vehicleGravityManager;
SerializedProperty mainCollider;
SerializedProperty showSettings;
SerializedProperty IKVehiclePassengersList;
SerializedProperty showGizmo;
SerializedProperty gizmoLabelColor;
SerializedProperty gizmoRadius;
SerializedProperty useHandleForVertex;
SerializedProperty handleRadius;
SerializedProperty handleGizmoColor;
SerializedProperty usePositionHandle;
SerializedProperty passengerGameObjectList;
SerializedProperty showDebugPrint;
SerializedProperty setPlayerCameraStateOnGetOff;
SerializedProperty setPlayerCameraStateOnFirstPersonOnGetOff;
SerializedProperty playerCameraStateOnGetOff;
SerializedProperty setVehicleCameraStateOnGetOn;
SerializedProperty setVehicleCameraStateOnFirstPersonOnGetOn;
SerializedProperty vehicleCameraStateOnGetOn;
SerializedProperty resetAnimatorDrivingStateID;
SerializedProperty vehicleCanBeStolen;
SerializedProperty checkIfStealerSelectingDriverSeat;
SerializedProperty useRemoteEventsOnPreviuosDriverOnSteal;
SerializedProperty remoteEventsOnPreviuosDriverOnStealList;
SerializedProperty forcePassengersToGetOffOnExternalDestroy;
SerializedProperty ignoreObstacleCheckOnGetOffEnabled;
IKDrivingSystem manager;
Color defBackgroundColor;
bool expanded;
Vector3 curretPositionHandle;
Quaternion currentRotationHandle;
Vector3 currentFreeHandlePosition;
Vector3 newFreeHandlePosition;
Vector3 snapValue = new Vector3 (.25f, .25f, .25f);
bool showVehicleElements;
string buttonMessage;
GUIStyle style = new GUIStyle ();
GUIStyle buttonStyle = new GUIStyle ();
void OnEnable ()
{
vehicle = serializedObject.FindProperty ("vehicle");
vehicelCameraGameObject = serializedObject.FindProperty ("vehicelCameraGameObject");
useCustomVehicleGameObject = serializedObject.FindProperty ("useCustomVehicleGameObject");
customVehicleGameObject = serializedObject.FindProperty ("customVehicleGameObject");
playerIsAlwaysDriver = serializedObject.FindProperty ("playerIsAlwaysDriver");
hidePlayerFromNPCs = serializedObject.FindProperty ("hidePlayerFromNPCs");
playerVisibleInVehicle = serializedObject.FindProperty ("playerVisibleInVehicle");
hidePlayerWeaponsWhileDriving = serializedObject.FindProperty ("hidePlayerWeaponsWhileDriving");
canBeDrivenRemotely = serializedObject.FindProperty ("canBeDrivenRemotely");
drawFireWeaponIfCarryingPreviously = serializedObject.FindProperty ("drawFireWeaponIfCarryingPreviously");
drawMeleeWeaponIfCarryingPreviously = serializedObject.FindProperty ("drawMeleeWeaponIfCarryingPreviously");
resetCameraRotationWhenGetOn = serializedObject.FindProperty ("resetCameraRotationWhenGetOn");
resetCameraRotationWhenGetOff = serializedObject.FindProperty ("resetCameraRotationWhenGetOff");
ejectPlayerWhenDestroyed = serializedObject.FindProperty ("ejectPlayerWhenDestroyed");
ejectingPlayerForce = serializedObject.FindProperty ("ejectingPlayerForce");
activateFreeFloatingModeOnEject = serializedObject.FindProperty ("activateFreeFloatingModeOnEject");
activateFreeFloatingModeOnEjectDelay = serializedObject.FindProperty ("activateFreeFloatingModeOnEjectDelay");
useExplosionForceWhenDestroyed = serializedObject.FindProperty ("useExplosionForceWhenDestroyed");
explosionRadius = serializedObject.FindProperty ("explosionRadius");
explosionForce = serializedObject.FindProperty ("explosionForce");
explosionDamage = serializedObject.FindProperty ("explosionDamage");
ignoreShield = serializedObject.FindProperty ("ignoreShield");
damageTypeID = serializedObject.FindProperty ("damageTypeID");
damageCanBeBlocked = serializedObject.FindProperty ("damageCanBeBlocked");
searchClosestWeakSpot = serializedObject.FindProperty ("searchClosestWeakSpot");
useRemoteEventOnObjectsFound = serializedObject.FindProperty ("useRemoteEventOnObjectsFound");
removeEventName = serializedObject.FindProperty ("removeEventName");
pushCharactersOnExplosion = serializedObject.FindProperty ("pushCharactersOnExplosion");
applyExplosionForceToVehicles = serializedObject.FindProperty ("applyExplosionForceToVehicles");
explosionForceToVehiclesMultiplier = serializedObject.FindProperty ("explosionForceToVehiclesMultiplier");
killObjectsInRadius = serializedObject.FindProperty ("killObjectsInRadius");
forceMode = serializedObject.FindProperty ("forceMode");
useLayerMask = serializedObject.FindProperty ("useLayerMask");
layer = serializedObject.FindProperty ("layer");
addCollisionForceDirectionToPassengers = serializedObject.FindProperty ("addCollisionForceDirectionToPassengers");
extraCollisionForceAmount = serializedObject.FindProperty ("extraCollisionForceAmount");
useMinCollisionForce = serializedObject.FindProperty ("useMinCollisionForce");
minCollisionForce = serializedObject.FindProperty ("minCollisionForce");
debugCollisionForce = serializedObject.FindProperty ("debugCollisionForce");
addAngularDirectionToPassengers = serializedObject.FindProperty ("addAngularDirectionToPassengers");
vehicleStabilitySpeed = serializedObject.FindProperty ("vehicleStabilitySpeed");
extraAngularDirectioAmount = serializedObject.FindProperty ("extraAngularDirectioAmount");
startGameInThisVehicle = serializedObject.FindProperty ("startGameInThisVehicle");
playerForVehicle = serializedObject.FindProperty ("playerForVehicle");
isBeingDrivenRemotely = serializedObject.FindProperty ("isBeingDrivenRemotely");
activateActionScreen = serializedObject.FindProperty ("activateActionScreen");
actionScreenName = serializedObject.FindProperty ("actionScreenName");
useEventOnDriverGetOn = serializedObject.FindProperty ("useEventOnDriverGetOn");
eventOnDriverGetOn = serializedObject.FindProperty ("eventOnDriverGetOn");
useEventOnDriverGetOff = serializedObject.FindProperty ("useEventOnDriverGetOff");
eventOnDriverGetOff = serializedObject.FindProperty ("eventOnDriverGetOff");
sendPlayersEnterExitTriggerToEvent = serializedObject.FindProperty ("sendPlayersEnterExitTriggerToEvent");
eventToSendPlayersEnterTriggerToEvent = serializedObject.FindProperty ("eventToSendPlayersEnterTriggerToEvent");
eventToSendPlayersExitTriggerToEvent = serializedObject.FindProperty ("eventToSendPlayersExitTriggerToEvent");
useRemoteEventsOnPassengers = serializedObject.FindProperty ("useRemoteEventsOnPassengers");
remoteEventNameListGetOn = serializedObject.FindProperty ("remoteEventNameListGetOn");
remoteEventNameListGetOff = serializedObject.FindProperty ("remoteEventNameListGetOff");
actionManager = serializedObject.FindProperty ("actionManager");
vehicleCameraManager = serializedObject.FindProperty ("vehicleCameraManager");
HUDManager = serializedObject.FindProperty ("HUDManager");
currentVehicleWeaponSystem = serializedObject.FindProperty ("currentVehicleWeaponSystem");
vehicleGravityManager = serializedObject.FindProperty ("vehicleGravityManager");
mainCollider = serializedObject.FindProperty ("mainCollider");
showSettings = serializedObject.FindProperty ("showSettings");
IKVehiclePassengersList = serializedObject.FindProperty ("IKVehiclePassengersList");
showGizmo = serializedObject.FindProperty ("showGizmo");
gizmoLabelColor = serializedObject.FindProperty ("gizmoLabelColor");
gizmoRadius = serializedObject.FindProperty ("gizmoRadius");
useHandleForVertex = serializedObject.FindProperty ("useHandleForVertex");
handleRadius = serializedObject.FindProperty ("handleRadius");
handleGizmoColor = serializedObject.FindProperty ("handleGizmoColor");
usePositionHandle = serializedObject.FindProperty ("usePositionHandle");
passengerGameObjectList = serializedObject.FindProperty ("passengerGameObjectList");
showDebugPrint = serializedObject.FindProperty ("showDebugPrint");
setPlayerCameraStateOnGetOff = serializedObject.FindProperty ("setPlayerCameraStateOnGetOff");
setPlayerCameraStateOnFirstPersonOnGetOff = serializedObject.FindProperty ("setPlayerCameraStateOnFirstPersonOnGetOff");
playerCameraStateOnGetOff = serializedObject.FindProperty ("playerCameraStateOnGetOff");
setVehicleCameraStateOnGetOn = serializedObject.FindProperty ("setVehicleCameraStateOnGetOn");
setVehicleCameraStateOnFirstPersonOnGetOn = serializedObject.FindProperty ("setVehicleCameraStateOnFirstPersonOnGetOn");
vehicleCameraStateOnGetOn = serializedObject.FindProperty ("vehicleCameraStateOnGetOn");
resetAnimatorDrivingStateID = serializedObject.FindProperty ("resetAnimatorDrivingStateID");
vehicleCanBeStolen = serializedObject.FindProperty ("vehicleCanBeStolen");
checkIfStealerSelectingDriverSeat = serializedObject.FindProperty ("checkIfStealerSelectingDriverSeat");
useRemoteEventsOnPreviuosDriverOnSteal = serializedObject.FindProperty ("useRemoteEventsOnPreviuosDriverOnSteal");
remoteEventsOnPreviuosDriverOnStealList = serializedObject.FindProperty ("remoteEventsOnPreviuosDriverOnStealList");
forcePassengersToGetOffOnExternalDestroy = serializedObject.FindProperty ("forcePassengersToGetOffOnExternalDestroy");
ignoreObstacleCheckOnGetOffEnabled = serializedObject.FindProperty ("ignoreObstacleCheckOnGetOffEnabled");
manager = (IKDrivingSystem)target;
}
void OnSceneGUI ()
{
if (!Application.isPlaying) {
if (manager.showGizmo) {
style.normal.textColor = manager.gizmoLabelColor;
style.alignment = TextAnchor.MiddleCenter;
if (manager.useExplosionForceWhenDestroyed) {
Handles.Label (manager.gameObject.transform.position + manager.gameObject.transform.up * manager.explosionRadius,
"Explosion Radius " + manager.explosionRadius + "\n" + "Explosion Force " + manager.explosionForce, style);
}
for (int i = 0; i < manager.IKVehiclePassengersList.Count; i++) {
if (manager.IKVehiclePassengersList [i].showIKPositionsGizmo) {
for (int j = 0; j < manager.IKVehiclePassengersList [i].IKDrivingPos.Count; j++) {
if (manager.IKVehiclePassengersList [i].IKDrivingPos [j].position != null) {
Handles.Label (manager.IKVehiclePassengersList [i].IKDrivingPos [j].position.position, manager.IKVehiclePassengersList [i].IKDrivingPos [j].Name, style);
}
}
for (int j = 0; j < manager.IKVehiclePassengersList [i].IKDrivingKneePos.Count; j++) {
if (manager.IKVehiclePassengersList [i].IKDrivingKneePos [j].position != null) {
Handles.Label (manager.IKVehiclePassengersList [i].IKDrivingKneePos [j].position.position, manager.IKVehiclePassengersList [i].IKDrivingKneePos [j].Name, style);
}
}
}
if (manager.IKVehiclePassengersList [i].steerDirecion != null) {
Handles.Label (manager.IKVehiclePassengersList [i].steerDirecion.position, "Steer Position " + i, style);
}
if (manager.IKVehiclePassengersList [i].headLookDirection != null) {
Handles.Label (manager.IKVehiclePassengersList [i].headLookDirection.position, "Head Look\n Direction " + i, style);
}
if (manager.IKVehiclePassengersList [i].headLookPosition != null) {
Handles.Label (manager.IKVehiclePassengersList [i].headLookPosition.position, "Head Look\n Position " + i, style);
}
Handles.color = manager.handleGizmoColor;
if (manager.IKVehiclePassengersList [i].showGizmo) {
if (manager.IKVehiclePassengersList [i].vehicleSeatInfo.rightGetOffPosition) {
Handles.Label (manager.IKVehiclePassengersList [i].vehicleSeatInfo.rightGetOffPosition.position, "Right Get \n Off Ray " + i, style);
if (manager.useHandleForVertex) {
showFreeMoveHandle (manager.IKVehiclePassengersList [i].vehicleSeatInfo.rightGetOffPosition, "move Right Get Off Position Handle " + i, manager.handleRadius);
}
if (manager.usePositionHandle) {
showPositionHandle (manager.IKVehiclePassengersList [i].vehicleSeatInfo.rightGetOffPosition, "move Right Get Off Position Handle " + i);
}
}
if (manager.IKVehiclePassengersList [i].vehicleSeatInfo.leftGetOffPosition != null) {
Handles.Label (manager.IKVehiclePassengersList [i].vehicleSeatInfo.leftGetOffPosition.position, "Left Get \n Off Ray " + i, style);
if (manager.useHandleForVertex) {
showFreeMoveHandle (manager.IKVehiclePassengersList [i].vehicleSeatInfo.leftGetOffPosition, "move Left Get Off Position Handle " + i, manager.handleRadius);
}
if (manager.usePositionHandle) {
showPositionHandle (manager.IKVehiclePassengersList [i].vehicleSeatInfo.leftGetOffPosition, "move Left Get Off Position Handle " + i);
}
}
if (manager.IKVehiclePassengersList [i].vehicleSeatInfo.seatTransform != null) {
Handles.Label (manager.IKVehiclePassengersList [i].vehicleSeatInfo.seatTransform.position, manager.IKVehiclePassengersList [i].Name, style);
if (manager.useHandleForVertex) {
showFreeMoveHandle (manager.IKVehiclePassengersList [i].vehicleSeatInfo.seatTransform, "move Seat Transform Position Handle " + i, manager.handleRadius);
}
if (manager.usePositionHandle) {
showPositionHandle (manager.IKVehiclePassengersList [i].vehicleSeatInfo.seatTransform, "move Seat Transform Position Handle " + i);
}
}
}
}
}
}
}
public override void OnInspectorGUI ()
{
EditorGUILayout.Space ();
buttonStyle = new GUIStyle (GUI.skin.button);
buttonStyle.fontStyle = FontStyle.Bold;
buttonStyle.fontSize = 12;
GUILayout.BeginVertical ("Driver Settings", "window");
EditorGUILayout.PropertyField (vehicle);
EditorGUILayout.PropertyField (vehicelCameraGameObject);
EditorGUILayout.PropertyField (useCustomVehicleGameObject);
if (useCustomVehicleGameObject.boolValue) {
EditorGUILayout.PropertyField (customVehicleGameObject);
}
EditorGUILayout.PropertyField (playerIsAlwaysDriver);
EditorGUILayout.PropertyField (hidePlayerFromNPCs, new GUIContent ("Hide Player From NPCs"), false);
EditorGUILayout.PropertyField (playerVisibleInVehicle);
EditorGUILayout.PropertyField (hidePlayerWeaponsWhileDriving);
EditorGUILayout.PropertyField (canBeDrivenRemotely);
EditorGUILayout.PropertyField (resetAnimatorDrivingStateID);
EditorGUILayout.PropertyField (ignoreObstacleCheckOnGetOffEnabled);
GUILayout.EndVertical ();
EditorGUILayout.Space ();
GUILayout.BeginVertical ("Other Settings", "window");
EditorGUILayout.PropertyField (vehicleCanBeStolen);
EditorGUILayout.PropertyField (checkIfStealerSelectingDriverSeat);
EditorGUILayout.Space ();
EditorGUILayout.PropertyField (useRemoteEventsOnPreviuosDriverOnSteal);
if (useRemoteEventsOnPreviuosDriverOnSteal.boolValue) {
showSimpleList (remoteEventsOnPreviuosDriverOnStealList);
}
EditorGUILayout.Space ();
EditorGUILayout.PropertyField (forcePassengersToGetOffOnExternalDestroy);
GUILayout.EndVertical ();
EditorGUILayout.Space ();
GUILayout.BeginVertical ("Passengers Weapons Settings", "window");
EditorGUILayout.PropertyField (drawFireWeaponIfCarryingPreviously);
EditorGUILayout.PropertyField (drawMeleeWeaponIfCarryingPreviously);
GUILayout.EndVertical ();
EditorGUILayout.Space ();
GUILayout.BeginVertical ("Camera Settings", "window");
EditorGUILayout.PropertyField (resetCameraRotationWhenGetOn);
EditorGUILayout.PropertyField (resetCameraRotationWhenGetOff);
EditorGUILayout.Space ();
EditorGUILayout.PropertyField (setPlayerCameraStateOnGetOff);
if (setPlayerCameraStateOnGetOff.boolValue) {
EditorGUILayout.PropertyField (setPlayerCameraStateOnFirstPersonOnGetOff);
if (!setPlayerCameraStateOnFirstPersonOnGetOff.boolValue) {
EditorGUILayout.PropertyField (playerCameraStateOnGetOff);
}
}
EditorGUILayout.Space ();
EditorGUILayout.PropertyField (setVehicleCameraStateOnGetOn);
if (setVehicleCameraStateOnGetOn.boolValue) {
EditorGUILayout.PropertyField (setVehicleCameraStateOnFirstPersonOnGetOn);
EditorGUILayout.PropertyField (vehicleCameraStateOnGetOn);
}
GUILayout.EndVertical ();
EditorGUILayout.Space ();
GUILayout.BeginVertical ("Eject Settings", "window");
EditorGUILayout.PropertyField (ejectPlayerWhenDestroyed);
if (ejectPlayerWhenDestroyed.boolValue) {
EditorGUILayout.PropertyField (ejectingPlayerForce);
}
EditorGUILayout.PropertyField (activateFreeFloatingModeOnEject);
EditorGUILayout.PropertyField (activateFreeFloatingModeOnEjectDelay);
GUILayout.EndVertical ();
EditorGUILayout.Space ();
GUILayout.BeginVertical ("Explosion Settings", "window");
EditorGUILayout.PropertyField (useExplosionForceWhenDestroyed);
if (useExplosionForceWhenDestroyed.boolValue) {
EditorGUILayout.PropertyField (explosionRadius);
EditorGUILayout.PropertyField (explosionForce);
EditorGUILayout.PropertyField (explosionDamage);
EditorGUILayout.PropertyField (ignoreShield);
EditorGUILayout.PropertyField (damageTypeID);
EditorGUILayout.PropertyField (damageCanBeBlocked);
EditorGUILayout.PropertyField (searchClosestWeakSpot);
EditorGUILayout.Space ();
EditorGUILayout.PropertyField (useRemoteEventOnObjectsFound);
EditorGUILayout.PropertyField (removeEventName);
EditorGUILayout.PropertyField (pushCharactersOnExplosion);
EditorGUILayout.PropertyField (applyExplosionForceToVehicles);
if (applyExplosionForceToVehicles.boolValue) {
EditorGUILayout.PropertyField (explosionForceToVehiclesMultiplier);
}
EditorGUILayout.PropertyField (killObjectsInRadius);
EditorGUILayout.PropertyField (forceMode);
EditorGUILayout.PropertyField (useLayerMask);
if (useLayerMask.boolValue) {
EditorGUILayout.PropertyField (layer);
}
}
GUILayout.EndVertical ();
EditorGUILayout.Space ();
GUILayout.BeginVertical ("Shake Passengers Body Settings", "window");
EditorGUILayout.PropertyField (addCollisionForceDirectionToPassengers);
if (addCollisionForceDirectionToPassengers.boolValue) {
EditorGUILayout.PropertyField (extraCollisionForceAmount);
EditorGUILayout.PropertyField (useMinCollisionForce);
if (useMinCollisionForce.boolValue) {
EditorGUILayout.PropertyField (minCollisionForce);
}
EditorGUILayout.Space ();
GUILayout.BeginVertical ("Debug Settings", "window");
EditorGUILayout.PropertyField (debugCollisionForce);
if (GUILayout.Button ("Simulate Collision")) {
manager.setCollisionForceDirectionToPassengers (debugCollisionForce.vector3Value);
}
GUILayout.EndVertical ();
EditorGUILayout.Space ();
}
EditorGUILayout.PropertyField (addAngularDirectionToPassengers);
if (addAngularDirectionToPassengers.boolValue) {
EditorGUILayout.PropertyField (vehicleStabilitySpeed);
EditorGUILayout.PropertyField (extraAngularDirectioAmount);
}
GUILayout.EndVertical ();
EditorGUILayout.Space ();
GUILayout.BeginVertical ("Start Game In Vehicle Settings", "window");
EditorGUILayout.PropertyField (startGameInThisVehicle);
if (startGameInThisVehicle.boolValue) {
EditorGUILayout.PropertyField (playerForVehicle);
}
GUILayout.EndVertical ();
EditorGUILayout.Space ();
GUILayout.BeginVertical ("Vehicle State", "window");
GUILayout.Label ("Driving remotely\t" + isBeingDrivenRemotely.boolValue);
EditorGUILayout.Space ();
GUILayout.BeginVertical ("Passengers List", "window");
showSimpleList (passengerGameObjectList);
GUILayout.EndVertical ();
GUILayout.EndVertical ();
EditorGUILayout.Space ();
GUILayout.BeginVertical ("Action Screen Settings", "window");
EditorGUILayout.PropertyField (activateActionScreen);
if (activateActionScreen.boolValue) {
EditorGUILayout.PropertyField (actionScreenName);
}
GUILayout.EndVertical ();
EditorGUILayout.Space ();
GUILayout.BeginVertical ("Event Settings", "window");
EditorGUILayout.PropertyField (useEventOnDriverGetOn);
if (useEventOnDriverGetOn.boolValue) {
EditorGUILayout.PropertyField (eventOnDriverGetOn);
}
EditorGUILayout.Space ();
EditorGUILayout.PropertyField (useEventOnDriverGetOff);
if (useEventOnDriverGetOff.boolValue) {
EditorGUILayout.PropertyField (eventOnDriverGetOff);
}
EditorGUILayout.Space ();
EditorGUILayout.PropertyField (sendPlayersEnterExitTriggerToEvent);
if (sendPlayersEnterExitTriggerToEvent.boolValue) {
EditorGUILayout.PropertyField (eventToSendPlayersEnterTriggerToEvent);
EditorGUILayout.PropertyField (eventToSendPlayersExitTriggerToEvent);
}
GUILayout.EndVertical ();
EditorGUILayout.Space ();
GUILayout.BeginVertical ("Remote Event Settings", "window");
EditorGUILayout.PropertyField (useRemoteEventsOnPassengers);
if (useRemoteEventsOnPassengers.boolValue) {
EditorGUILayout.Space ();
showSimpleList (remoteEventNameListGetOn);
EditorGUILayout.Space ();
showSimpleList (remoteEventNameListGetOff);
}
EditorGUILayout.Space ();
GUILayout.EndVertical ();
EditorGUILayout.Space ();
defBackgroundColor = GUI.backgroundColor;
EditorGUILayout.BeginHorizontal ();
if (showVehicleElements) {
GUI.backgroundColor = Color.gray;
buttonMessage = "Hide Vehicle Elements";
} else {
GUI.backgroundColor = defBackgroundColor;
buttonMessage = "Show Vehicle Elements";
}
if (GUILayout.Button (buttonMessage)) {
showVehicleElements = !showVehicleElements;
}
GUI.backgroundColor = defBackgroundColor;
EditorGUILayout.EndHorizontal ();
if (showVehicleElements) {
EditorGUILayout.Space ();
GUILayout.BeginVertical ("Vehicle Elements", "window");
EditorGUILayout.PropertyField (actionManager);
EditorGUILayout.PropertyField (vehicleCameraManager);
EditorGUILayout.PropertyField (HUDManager);
EditorGUILayout.PropertyField (currentVehicleWeaponSystem);
EditorGUILayout.PropertyField (vehicleGravityManager);
EditorGUILayout.PropertyField (mainCollider);
GUILayout.EndVertical ();
}
EditorGUILayout.Space ();
defBackgroundColor = GUI.backgroundColor;
EditorGUILayout.BeginHorizontal ();
if (showSettings.boolValue) {
GUI.backgroundColor = Color.gray;
buttonMessage = "Hide Passenger Seats Settings";
} else {
GUI.backgroundColor = defBackgroundColor;
buttonMessage = "Show Passenger Seats Settings";
}
if (GUILayout.Button (buttonMessage)) {
showSettings.boolValue = !showSettings.boolValue;
}
GUI.backgroundColor = defBackgroundColor;
EditorGUILayout.EndHorizontal ();
EditorGUILayout.Space ();
if (showSettings.boolValue) {
EditorGUILayout.Space ();
GUI.color = Color.cyan;
EditorGUILayout.HelpBox ("IK positions in vehicle", MessageType.None);
GUI.color = Color.white;
EditorGUILayout.Space ();
GUILayout.BeginVertical ("IK Passengers List", "window");
showIKVehiclePassengersList (IKVehiclePassengersList);
GUILayout.EndVertical ();
EditorGUILayout.Space ();
}
GUI.backgroundColor = defBackgroundColor;
GUILayout.BeginVertical ("Gizmo Settings", "window");
EditorGUILayout.PropertyField (showGizmo);
if (showGizmo.boolValue) {
EditorGUILayout.PropertyField (gizmoLabelColor);
EditorGUILayout.PropertyField (gizmoRadius);
EditorGUILayout.PropertyField (useHandleForVertex);
if (useHandleForVertex.boolValue) {
EditorGUILayout.PropertyField (handleRadius);
EditorGUILayout.PropertyField (handleGizmoColor);
}
EditorGUILayout.PropertyField (usePositionHandle);
}
EditorGUILayout.PropertyField (showDebugPrint);
GUILayout.EndVertical ();
EditorGUILayout.Space ();
if (GUI.changed) {
serializedObject.ApplyModifiedProperties ();
}
}
void showIKDrivingInfo (SerializedProperty list)
{
GUILayout.BeginVertical ("Main Settings", "window");
EditorGUILayout.PropertyField (list.FindPropertyRelative ("Name"));
GUILayout.EndVertical ();
EditorGUILayout.Space ();
GUILayout.BeginVertical ("Passenger Scale Settings", "window");
EditorGUILayout.PropertyField (list.FindPropertyRelative ("setNewScaleOnPassenger"));
if (list.FindPropertyRelative ("setNewScaleOnPassenger").boolValue) {
EditorGUILayout.PropertyField (list.FindPropertyRelative ("newScaleOnPassenger"));
}
GUILayout.EndVertical ();
EditorGUILayout.Space ();
GUILayout.BeginVertical ("Seat IK Settings", "window");
EditorGUILayout.PropertyField (list.FindPropertyRelative ("useIKOnVehicle"));
showIkHintList (list.FindPropertyRelative ("IKDrivingPos"));
EditorGUILayout.Space ();
showIKGoalList (list.FindPropertyRelative ("IKDrivingKneePos"));
GUILayout.EndVertical ();
if (list.FindPropertyRelative ("vehicleSeatInfo.isDriverSeat").boolValue) {
EditorGUILayout.Space ();
GUILayout.BeginVertical ("Body Look Settings", "window");
EditorGUILayout.PropertyField (list.FindPropertyRelative ("useSteerDirection"));
if (list.FindPropertyRelative ("useSteerDirection").boolValue) {
EditorGUILayout.PropertyField (list.FindPropertyRelative ("steerDirecion"), new GUIContent ("Steer Direction"), false);
}
EditorGUILayout.PropertyField (list.FindPropertyRelative ("useHeadLookDirection"));
if (list.FindPropertyRelative ("useHeadLookDirection").boolValue) {
EditorGUILayout.PropertyField (list.FindPropertyRelative ("headLookDirection"));
}
EditorGUILayout.PropertyField (list.FindPropertyRelative ("useHeadLookPosition"));
if (list.FindPropertyRelative ("useHeadLookPosition").boolValue) {
EditorGUILayout.PropertyField (list.FindPropertyRelative ("headLookPosition"));
}
GUILayout.EndVertical ();
}
EditorGUILayout.Space ();
GUILayout.BeginVertical ("Seat Info", "window");
showSeatInfo (list.FindPropertyRelative ("vehicleSeatInfo"));
EditorGUILayout.Space ();
EditorGUILayout.PropertyField (list.FindPropertyRelative ("shakePlayerBodyOnCollision"));
if (list.FindPropertyRelative ("shakePlayerBodyOnCollision").boolValue) {
EditorGUILayout.PropertyField (list.FindPropertyRelative ("playerBodyParent"));
EditorGUILayout.PropertyField (list.FindPropertyRelative ("stabilitySpeed"));
EditorGUILayout.PropertyField (list.FindPropertyRelative ("shakeSpeed"));
EditorGUILayout.PropertyField (list.FindPropertyRelative ("shakeFadeSpeed"));
EditorGUILayout.PropertyField (list.FindPropertyRelative ("shakeForceDirectionMinClamp"));
EditorGUILayout.PropertyField (list.FindPropertyRelative ("shakeForceDirectionMaxClamp"));
EditorGUILayout.PropertyField (list.FindPropertyRelative ("forceDirection"));
}
GUILayout.EndVertical ();
EditorGUILayout.Space ();
GUILayout.BeginVertical ("Seat Posture Animation Settings", "window");
EditorGUILayout.PropertyField (list.FindPropertyRelative ("useAnimationActionIDOnDriveIdle"));
if (list.FindPropertyRelative ("useAnimationActionIDOnDriveIdle").boolValue) {
EditorGUILayout.PropertyField (list.FindPropertyRelative ("animationActionID"));
EditorGUILayout.PropertyField (list.FindPropertyRelative ("setSteeringWheelAnimationFromInput"));
EditorGUILayout.PropertyField (list.FindPropertyRelative ("horizontalAnimatorName"));
}
GUILayout.EndVertical ();
EditorGUILayout.Space ();
GUILayout.BeginVertical ("Events Settings", "window");
EditorGUILayout.PropertyField (list.FindPropertyRelative ("useEventOnGetOnOff"));
if (list.FindPropertyRelative ("useEventOnGetOnOff").boolValue) {
EditorGUILayout.PropertyField (list.FindPropertyRelative ("eventOnGetOn"));
EditorGUILayout.PropertyField (list.FindPropertyRelative ("eventOnGetOff"));
}
EditorGUILayout.Space ();
EditorGUILayout.PropertyField (list.FindPropertyRelative ("useEventOnGetOnOffAI"));
if (list.FindPropertyRelative ("useEventOnGetOnOffAI").boolValue) {
EditorGUILayout.PropertyField (list.FindPropertyRelative ("eventOnGetOnAI"));
EditorGUILayout.PropertyField (list.FindPropertyRelative ("eventOnGetOffAI"));
}
EditorGUILayout.Space ();
EditorGUILayout.PropertyField (list.FindPropertyRelative ("useEventOnGetOnOffPlayer"));
if (list.FindPropertyRelative ("useEventOnGetOnOffPlayer").boolValue) {
EditorGUILayout.PropertyField (list.FindPropertyRelative ("eventOnGetOnPlayer"));
EditorGUILayout.PropertyField (list.FindPropertyRelative ("eventOnGetOffPlayer"));
}
GUILayout.EndVertical ();
EditorGUILayout.Space ();
GUILayout.BeginVertical ("Gizmo Settings", "window");
EditorGUILayout.PropertyField (list.FindPropertyRelative ("showIKPositionsGizmo"));
EditorGUILayout.PropertyField (list.FindPropertyRelative ("showGizmo"));
GUILayout.EndVertical ();
}
void showSeatInfo (SerializedProperty list)
{
EditorGUILayout.PropertyField (list.FindPropertyRelative ("seatTransform"));
EditorGUILayout.PropertyField (list.FindPropertyRelative ("rightGetOffPosition"));
EditorGUILayout.PropertyField (list.FindPropertyRelative ("leftGetOffPosition"));
EditorGUILayout.PropertyField (list.FindPropertyRelative ("getOffDistance"));
EditorGUILayout.PropertyField (list.FindPropertyRelative ("getOffPlace"));
EditorGUILayout.Space ();
EditorGUILayout.PropertyField (list.FindPropertyRelative ("checkGetOffPositionOnFrontAndRear"));
if (list.FindPropertyRelative ("checkGetOffPositionOnFrontAndRear").boolValue) {
EditorGUILayout.PropertyField (list.FindPropertyRelative ("frontGetOffPosition"));
EditorGUILayout.PropertyField (list.FindPropertyRelative ("rearGetOffPosition"));
}
EditorGUILayout.Space ();
EditorGUILayout.PropertyField (list.FindPropertyRelative ("isDriverSeat"));
EditorGUILayout.Space ();
GUILayout.BeginVertical ("Grabbing Hands Settings", "window");
EditorGUILayout.PropertyField (list.FindPropertyRelative ("useGrabbingHandID"));
if (list.FindPropertyRelative ("useGrabbingHandID").boolValue) {
EditorGUILayout.PropertyField (list.FindPropertyRelative ("rightGrabbingHandID"));
EditorGUILayout.PropertyField (list.FindPropertyRelative ("leftGrabbingHandID"));
}
GUILayout.EndVertical ();
EditorGUILayout.Space ();
GUILayout.BeginVertical ("Action System Enter/Exit Settings", "window");
EditorGUILayout.PropertyField (list.FindPropertyRelative ("useActionSystemToEnterExitSeat"));
if (list.FindPropertyRelative ("useActionSystemToEnterExitSeat").boolValue) {
EditorGUILayout.PropertyField (list.FindPropertyRelative ("actionSystemToEnterVehicle"));
EditorGUILayout.PropertyField (list.FindPropertyRelative ("actionSystemToExitVehicle"));
EditorGUILayout.PropertyField (list.FindPropertyRelative ("actionSystemToJumpOffFromVehicle"));
EditorGUILayout.Space ();
EditorGUILayout.PropertyField (list.FindPropertyRelative ("eventOnActionToEnter"));
EditorGUILayout.Space ();
EditorGUILayout.PropertyField (list.FindPropertyRelative ("eventOnActionToExit"));
EditorGUILayout.Space ();
EditorGUILayout.PropertyField (list.FindPropertyRelative ("eventToCancelActionEnterAndExit"));
EditorGUILayout.Space ();
EditorGUILayout.PropertyField (list.FindPropertyRelative ("cancelActionEnterExitVehicleIfSpeedTooHigh"));
EditorGUILayout.PropertyField (list.FindPropertyRelative ("minSpeedToCancelActionEnterExitVehicle"));
EditorGUILayout.PropertyField (list.FindPropertyRelative ("remoteEventToCancelActionEnterExitInsideVehicle"));
EditorGUILayout.PropertyField (list.FindPropertyRelative ("remoteEventToCancelActionEnterExitOutsideVehicle"));
EditorGUILayout.PropertyField (list.FindPropertyRelative ("minSpeedToJumpOffFromVehicle"));
EditorGUILayout.PropertyField (list.FindPropertyRelative ("delayToStartJumpOff"));
}
GUILayout.EndVertical ();
EditorGUILayout.Space ();
GUILayout.BeginVertical ("Seat State", "window");
GUILayout.Label ("Seat Is Free\t" + list.FindPropertyRelative ("seatIsFree").boolValue);
EditorGUILayout.PropertyField (list.FindPropertyRelative ("currentPassenger"));
EditorGUILayout.PropertyField (list.FindPropertyRelative ("enterExitActionInProcess"));
//EditorGUILayout.PropertyField (list.FindPropertyRelative ("seatIsFree"));
GUILayout.EndVertical ();
}
void showUpperListElementInfo (SerializedProperty list, bool showListNames)
{
GUILayout.BeginVertical ("box");
EditorGUILayout.PropertyField (list.FindPropertyRelative ("Name"));
EditorGUILayout.PropertyField (list.FindPropertyRelative ("limb"));
EditorGUILayout.PropertyField (list.FindPropertyRelative ("position"), new GUIContent ("Position Transform"), false);
GUILayout.EndVertical ();
}
void showIkHintList (SerializedProperty list)
{
GUILayout.BeginVertical ();
EditorGUILayout.Space ();
if (GUILayout.Button ("Show/Hide IK Hint List", buttonStyle)) {
list.isExpanded = !list.isExpanded;
}
EditorGUILayout.Space ();
if (list.isExpanded) {
EditorGUILayout.Space ();
GUILayout.Label ("Number Of IK Positions: \t" + list.arraySize);
EditorGUILayout.Space ();
GUILayout.BeginHorizontal ();
if (GUILayout.Button ("Add IK Pos")) {
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++) {
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) {
showUpperListElementInfo (list.GetArrayElementAtIndex (i), true);
}
EditorGUILayout.Space ();
GUILayout.EndVertical ();
}
GUILayout.EndHorizontal ();
if (GUILayout.Button ("x")) {
list.DeleteArrayElementAtIndex (i);
}
GUILayout.EndHorizontal ();
}
}
GUILayout.EndVertical ();
}
void showLowerListElementInfo (SerializedProperty list, bool showListNames)
{
GUILayout.BeginVertical ("box");
EditorGUILayout.PropertyField (list.FindPropertyRelative ("Name"), new GUIContent ("Name"), false);
EditorGUILayout.PropertyField (list.FindPropertyRelative ("knee"), new GUIContent ("Limb"), false);
EditorGUILayout.PropertyField (list.FindPropertyRelative ("position"), new GUIContent ("Position Transform"), false);
GUILayout.EndVertical ();
}
void showIKGoalList (SerializedProperty list)
{
GUILayout.BeginVertical ();
EditorGUILayout.Space ();
if (GUILayout.Button ("Show/Hide IK Goal List", buttonStyle)) {
list.isExpanded = !list.isExpanded;
}
EditorGUILayout.Space ();
if (list.isExpanded) {
EditorGUILayout.Space ();
GUILayout.Label ("Number Of IK Goals: \t" + list.arraySize);
EditorGUILayout.Space ();
GUILayout.BeginHorizontal ();
if (GUILayout.Button ("Add IK Pos")) {
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++) {
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) {
showLowerListElementInfo (list.GetArrayElementAtIndex (i), true);
}
EditorGUILayout.Space ();
GUILayout.EndVertical ();
}
GUILayout.EndHorizontal ();
if (GUILayout.Button ("x")) {
list.DeleteArrayElementAtIndex (i);
}
GUILayout.EndHorizontal ();
}
}
GUILayout.EndVertical ();
}
void showIKVehiclePassengersList (SerializedProperty list)
{
GUILayout.BeginVertical ();
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 Passengers: \t" + list.arraySize);
EditorGUILayout.Space ();
GUILayout.BeginHorizontal ();
if (GUILayout.Button ("Add Passenger")) {
manager.addPassenger ();
}
if (GUILayout.Button ("Clear")) {
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++) {
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;
showIKDrivingInfo (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 ();
}
}
GUILayout.EndVertical ();
}
public void showPositionHandle (Transform currentTransform, string handleName)
{
currentRotationHandle = Tools.pivotRotation == PivotRotation.Local ? currentTransform.rotation : Quaternion.identity;
EditorGUI.BeginChangeCheck ();
curretPositionHandle = currentTransform.position;
if (Tools.current == Tool.Move) {
curretPositionHandle = Handles.DoPositionHandle (curretPositionHandle, currentRotationHandle);
}
currentRotationHandle = currentTransform.rotation;
if (Tools.current == Tool.Rotate) {
currentRotationHandle = Handles.DoRotationHandle (currentRotationHandle, curretPositionHandle);
}
if (EditorGUI.EndChangeCheck ()) {
Undo.RecordObject (currentTransform, handleName);
currentTransform.position = curretPositionHandle;
currentTransform.rotation = currentRotationHandle;
}
}
public void showFreeMoveHandle (Transform currentTransform, string handleName, float handleRadius)
{
EditorGUI.BeginChangeCheck ();
currentFreeHandlePosition = currentTransform.position;
var fmh_1139_78_638979118402404391 = Quaternion.identity; newFreeHandlePosition = Handles.FreeMoveHandle (currentFreeHandlePosition, handleRadius, snapValue, Handles.CircleHandleCap);
if (EditorGUI.EndChangeCheck ()) {
Undo.RecordObject (currentTransform, handleName);
currentTransform.position = newFreeHandlePosition;
}
}
void showSimpleList (SerializedProperty list)
{
GUILayout.BeginVertical ();
EditorGUILayout.Space ();
if (GUILayout.Button ("Show/Hide " + list.displayName, buttonStyle)) {
list.isExpanded = !list.isExpanded;
}
EditorGUILayout.Space ();
if (list.isExpanded) {
EditorGUILayout.Space ();
GUILayout.Label ("Number: \t" + list.arraySize);
EditorGUILayout.Space ();
GUILayout.BeginHorizontal ();
if (GUILayout.Button ("Add")) {
list.arraySize++;
}
if (GUILayout.Button ("Clear")) {
list.arraySize = 0;
}
GUILayout.EndHorizontal ();
EditorGUILayout.Space ();
for (int i = 0; i < list.arraySize; i++) {
GUILayout.BeginHorizontal ();
GUILayout.BeginHorizontal ("box");
EditorGUILayout.Space ();
if (i < list.arraySize && i >= 0) {
EditorGUILayout.BeginVertical ();
EditorGUILayout.PropertyField (list.GetArrayElementAtIndex (i), false);
GUILayout.EndVertical ();
}
GUILayout.EndHorizontal ();
if (GUILayout.Button ("x")) {
list.DeleteArrayElementAtIndex (i);
}
GUILayout.EndHorizontal ();
}
}
GUILayout.EndVertical ();
}
}
#endif