using UnityEngine; using System.Collections; using GameKitController.Editor; #if UNITY_EDITOR using UnityEditor; [CustomEditor (typeof(vehicleWeaponSystem))] public class vehicleWeaponSystemEditor : Editor { SerializedProperty weaponsEnabled; SerializedProperty vehicle; SerializedProperty weaponsEffectsSource; SerializedProperty outOfAmmo; SerializedProperty outOfAmmoAudioElement; SerializedProperty layer; SerializedProperty targetForScorchLayer; SerializedProperty useCustomIgnoreTags; SerializedProperty customTagsToIgnoreList; SerializedProperty weaponLookDirection; SerializedProperty weaponsSlotsAmount; SerializedProperty weaponIndexToStart; SerializedProperty hasBaseRotation; SerializedProperty minimumX; SerializedProperty maximumX; SerializedProperty minimumY; SerializedProperty maximumY; SerializedProperty mainVehicleWeaponsGameObject; SerializedProperty baseX; SerializedProperty baseY; SerializedProperty baseXRotationSpeed; SerializedProperty baseYRotationSpeed; SerializedProperty noInputWeaponDirection; SerializedProperty canRotateWeaponsWithNoCameraInput; SerializedProperty noCameraInputWeaponRotationSpeed; SerializedProperty weaponCursorMovementSpeed; SerializedProperty weaponCursorRaycastLayer; SerializedProperty useWeaponCursorScreenLimit; SerializedProperty weaponCursorHorizontalLimit; SerializedProperty weaponCursorVerticalLimit; SerializedProperty circleCameraLimit2_5d; SerializedProperty vehicleCameraManager; SerializedProperty mainRigidbody; SerializedProperty actionManager; SerializedProperty hudManager; SerializedProperty parable; SerializedProperty gravityControlManager; SerializedProperty minSwipeDist; SerializedProperty weaponsActivate; SerializedProperty reloading; SerializedProperty aimingCorrectly; SerializedProperty choosedWeapon; SerializedProperty currentWeaponName; SerializedProperty weapons; SerializedProperty impactDecalList; SerializedProperty mainDecalManagerName; SerializedProperty projectilesPoolEnabled; SerializedProperty maxAmountOfPoolElementsOnWeapon; SerializedProperty vehicleCameraManagerTransform; Color buttonColor; vehicleWeaponSystem manager; bool expanded; GUIStyle buttonStyle = new GUIStyle (); void OnEnable () { weaponsEnabled = serializedObject.FindProperty ("weaponsEnabled"); vehicle = serializedObject.FindProperty ("vehicle"); weaponsEffectsSource = serializedObject.FindProperty ("weaponsEffectsSource"); outOfAmmo = serializedObject.FindProperty ("outOfAmmo"); outOfAmmoAudioElement = serializedObject.FindProperty ("outOfAmmoAudioElement"); layer = serializedObject.FindProperty ("layer"); targetForScorchLayer = serializedObject.FindProperty ("targetForScorchLayer"); useCustomIgnoreTags = serializedObject.FindProperty ("useCustomIgnoreTags"); customTagsToIgnoreList = serializedObject.FindProperty ("customTagsToIgnoreList"); weaponLookDirection = serializedObject.FindProperty ("weaponLookDirection"); weaponsSlotsAmount = serializedObject.FindProperty ("weaponsSlotsAmount"); weaponIndexToStart = serializedObject.FindProperty ("weaponIndexToStart"); hasBaseRotation = serializedObject.FindProperty ("hasBaseRotation"); minimumX = serializedObject.FindProperty ("minimumX"); maximumX = serializedObject.FindProperty ("maximumX"); minimumY = serializedObject.FindProperty ("minimumY"); maximumY = serializedObject.FindProperty ("maximumY"); mainVehicleWeaponsGameObject = serializedObject.FindProperty ("mainVehicleWeaponsGameObject"); baseX = serializedObject.FindProperty ("baseX"); baseY = serializedObject.FindProperty ("baseY"); baseXRotationSpeed = serializedObject.FindProperty ("baseXRotationSpeed"); baseYRotationSpeed = serializedObject.FindProperty ("baseYRotationSpeed"); noInputWeaponDirection = serializedObject.FindProperty ("noInputWeaponDirection"); canRotateWeaponsWithNoCameraInput = serializedObject.FindProperty ("canRotateWeaponsWithNoCameraInput"); noCameraInputWeaponRotationSpeed = serializedObject.FindProperty ("noCameraInputWeaponRotationSpeed"); weaponCursorMovementSpeed = serializedObject.FindProperty ("weaponCursorMovementSpeed"); weaponCursorRaycastLayer = serializedObject.FindProperty ("weaponCursorRaycastLayer"); useWeaponCursorScreenLimit = serializedObject.FindProperty ("useWeaponCursorScreenLimit"); weaponCursorHorizontalLimit = serializedObject.FindProperty ("weaponCursorHorizontalLimit"); weaponCursorVerticalLimit = serializedObject.FindProperty ("weaponCursorVerticalLimit"); circleCameraLimit2_5d = serializedObject.FindProperty ("circleCameraLimit2_5d"); vehicleCameraManager = serializedObject.FindProperty ("vehicleCameraManager"); mainRigidbody = serializedObject.FindProperty ("mainRigidbody"); actionManager = serializedObject.FindProperty ("actionManager"); hudManager = serializedObject.FindProperty ("hudManager"); parable = serializedObject.FindProperty ("parable"); gravityControlManager = serializedObject.FindProperty ("gravityControlManager"); minSwipeDist = serializedObject.FindProperty ("minSwipeDist"); weaponsActivate = serializedObject.FindProperty ("weaponsActivate"); reloading = serializedObject.FindProperty ("reloading"); aimingCorrectly = serializedObject.FindProperty ("aimingCorrectly"); choosedWeapon = serializedObject.FindProperty ("choosedWeapon"); currentWeaponName = serializedObject.FindProperty ("currentWeaponName"); weapons = serializedObject.FindProperty ("weapons"); impactDecalList = serializedObject.FindProperty ("impactDecalList"); mainDecalManagerName = serializedObject.FindProperty ("mainDecalManagerName"); projectilesPoolEnabled = serializedObject.FindProperty ("projectilesPoolEnabled"); maxAmountOfPoolElementsOnWeapon = serializedObject.FindProperty ("maxAmountOfPoolElementsOnWeapon"); vehicleCameraManagerTransform = serializedObject.FindProperty ("vehicleCameraManagerTransform"); manager = (vehicleWeaponSystem)target; } public override void OnInspectorGUI () { EditorGUILayout.Space (); buttonStyle = new GUIStyle (GUI.skin.button); buttonStyle.fontStyle = FontStyle.Bold; buttonStyle.fontSize = 12; GUILayout.BeginVertical ("Basic Settings", "window"); EditorGUILayout.PropertyField (weaponsEnabled); EditorGUILayout.PropertyField (vehicle); EditorGUILayout.PropertyField (weaponsEffectsSource); EditorGUILayout.PropertyField (outOfAmmo); EditorGUILayout.PropertyField (outOfAmmoAudioElement); EditorGUILayout.PropertyField (weaponLookDirection); EditorGUILayout.PropertyField (weaponsSlotsAmount); EditorGUILayout.PropertyField (weaponIndexToStart); EditorGUILayout.PropertyField (projectilesPoolEnabled); EditorGUILayout.PropertyField (maxAmountOfPoolElementsOnWeapon); GUILayout.EndVertical (); EditorGUILayout.Space (); GUILayout.BeginVertical ("Target Detection Settings", "window"); EditorGUILayout.PropertyField (layer); EditorGUILayout.PropertyField (targetForScorchLayer); EditorGUILayout.PropertyField (useCustomIgnoreTags); if (useCustomIgnoreTags.boolValue) { showSimpleList (customTagsToIgnoreList); } GUILayout.EndVertical (); EditorGUILayout.Space (); GUILayout.BeginVertical ("Base Rotation Settings", "window"); EditorGUILayout.PropertyField (hasBaseRotation); if (hasBaseRotation.boolValue) { EditorGUILayout.PropertyField (minimumX); EditorGUILayout.PropertyField (maximumX); EditorGUILayout.PropertyField (minimumY); EditorGUILayout.PropertyField (maximumY); EditorGUILayout.PropertyField (mainVehicleWeaponsGameObject); EditorGUILayout.PropertyField (baseX); EditorGUILayout.PropertyField (baseY); EditorGUILayout.PropertyField (baseXRotationSpeed); EditorGUILayout.PropertyField (baseYRotationSpeed); EditorGUILayout.PropertyField (noInputWeaponDirection); EditorGUILayout.PropertyField (canRotateWeaponsWithNoCameraInput); if (canRotateWeaponsWithNoCameraInput.boolValue) { EditorGUILayout.PropertyField (noCameraInputWeaponRotationSpeed); EditorGUILayout.PropertyField (weaponCursorMovementSpeed); EditorGUILayout.PropertyField (weaponCursorRaycastLayer); EditorGUILayout.PropertyField (useWeaponCursorScreenLimit); if (useWeaponCursorScreenLimit.boolValue) { EditorGUILayout.PropertyField (weaponCursorHorizontalLimit); EditorGUILayout.PropertyField (weaponCursorVerticalLimit); } } EditorGUILayout.PropertyField (circleCameraLimit2_5d); } GUILayout.EndVertical (); EditorGUILayout.Space (); GUILayout.BeginVertical ("Vehicle Elements", "window"); EditorGUILayout.PropertyField (vehicleCameraManager); EditorGUILayout.PropertyField (mainRigidbody); EditorGUILayout.PropertyField (actionManager); EditorGUILayout.PropertyField (hudManager); EditorGUILayout.PropertyField (parable); EditorGUILayout.PropertyField (gravityControlManager); EditorGUILayout.PropertyField (vehicleCameraManagerTransform); GUILayout.EndVertical (); EditorGUILayout.Space (); GUILayout.BeginVertical ("Touch Options", "window"); EditorGUILayout.PropertyField (minSwipeDist); GUILayout.EndVertical (); EditorGUILayout.Space (); GUILayout.BeginVertical ("State Info", "window"); GUILayout.Label ("Weapons Activate\t\t" + weaponsActivate.boolValue); GUILayout.Label ("Reloading\t\t\t" + reloading.boolValue); GUILayout.Label ("Aiming Correctly\t\t" + aimingCorrectly.boolValue); GUILayout.Label ("Current Weapon Index\t" + choosedWeapon.intValue); GUILayout.Label ("Current Weapon Name\t" + currentWeaponName.stringValue); GUILayout.EndVertical (); EditorGUILayout.Space (); EditorGUILayout.Space (); GUILayout.BeginVertical ("Weapons List", "window"); showWeaponList (weapons); EditorGUILayout.Space (); EditorGUILayout.PropertyField (mainDecalManagerName); GUILayout.EndVertical (); EditorGUILayout.Space (); if (GUI.changed) { serializedObject.ApplyModifiedProperties (); } } void showWeaponListElement (SerializedProperty list, int weaponIndex) { GUILayout.BeginVertical ("box"); EditorGUILayout.Space (); GUILayout.BeginVertical ("Weapon Info", "window"); EditorGUILayout.PropertyField (list.FindPropertyRelative ("Name")); EditorGUILayout.PropertyField (list.FindPropertyRelative ("numberKey")); EditorGUILayout.PropertyField (list.FindPropertyRelative ("enabled")); GUILayout.EndVertical (); EditorGUILayout.Space (); GUILayout.BeginVertical ("Custom Reticle Settings", "window"); EditorGUILayout.PropertyField (list.FindPropertyRelative ("useCustomReticle")); if (list.FindPropertyRelative ("useCustomReticle").boolValue) { EditorGUILayout.PropertyField (list.FindPropertyRelative ("customReticle")); EditorGUILayout.PropertyField (list.FindPropertyRelative ("useCustomReticleColor")); if (list.FindPropertyRelative ("useCustomReticleColor").boolValue) { EditorGUILayout.PropertyField (list.FindPropertyRelative ("customReticleColor")); } EditorGUILayout.PropertyField (list.FindPropertyRelative ("useCustomReticleSize")); if (list.FindPropertyRelative ("useCustomReticleSize").boolValue) { EditorGUILayout.PropertyField (list.FindPropertyRelative ("customReticleSize")); } } GUILayout.EndVertical (); EditorGUILayout.Space (); GUILayout.BeginVertical ("Cursor Settings", "window"); EditorGUILayout.PropertyField (list.FindPropertyRelative ("disableWeaponCursorWhileNotShooting")); if (list.FindPropertyRelative ("disableWeaponCursorWhileNotShooting").boolValue) { EditorGUILayout.PropertyField (list.FindPropertyRelative ("delayToDisableWeaponCursor")); } GUILayout.EndVertical (); EditorGUILayout.Space (); GUILayout.BeginVertical ("Fire Settings", "window"); EditorGUILayout.PropertyField (list.FindPropertyRelative ("automatic")); EditorGUILayout.PropertyField (list.FindPropertyRelative ("fireRate")); EditorGUILayout.PropertyField (list.FindPropertyRelative ("reloadTime")); GUILayout.EndVertical (); EditorGUILayout.Space (); GUILayout.BeginVertical ("Projectile Settings", "window"); EditorGUILayout.PropertyField (list.FindPropertyRelative ("shootAProjectile")); EditorGUILayout.PropertyField (list.FindPropertyRelative ("launchProjectile")); if (list.FindPropertyRelative ("shootAProjectile").boolValue || list.FindPropertyRelative ("launchProjectile").boolValue) { EditorGUILayout.PropertyField (list.FindPropertyRelative ("projectileToShoot")); EditorGUILayout.PropertyField (list.FindPropertyRelative ("projectilesPerShoot")); EditorGUILayout.PropertyField (list.FindPropertyRelative ("projectileDamage")); EditorGUILayout.PropertyField (list.FindPropertyRelative ("killInOneShot")); EditorGUILayout.PropertyField (list.FindPropertyRelative ("projectileWithAbility")); EditorGUILayout.Space (); EditorGUILayout.PropertyField (list.FindPropertyRelative ("checkObjectsWithMultipleDamageReceiversEnabled")); EditorGUILayout.Space (); if (list.FindPropertyRelative ("launchProjectile").boolValue) { EditorGUILayout.Space (); GUILayout.BeginVertical ("Launch Projectile Settings", "window"); EditorGUILayout.PropertyField (list.FindPropertyRelative ("activateLaunchParable")); EditorGUILayout.PropertyField (list.FindPropertyRelative ("useParableSpeed")); if (!list.FindPropertyRelative ("useParableSpeed").boolValue) { EditorGUILayout.PropertyField (list.FindPropertyRelative ("projectileSpeed")); EditorGUILayout.PropertyField (list.FindPropertyRelative ("parableDirectionTransform")); } else { EditorGUILayout.PropertyField (list.FindPropertyRelative ("parableTrayectoryPosition")); EditorGUILayout.PropertyField (list.FindPropertyRelative ("useMaxDistanceWhenNoSurfaceFound")); if (list.FindPropertyRelative ("useMaxDistanceWhenNoSurfaceFound").boolValue) { EditorGUILayout.PropertyField (list.FindPropertyRelative ("maxDistanceWhenNoSurfaceFound")); } } EditorGUILayout.PropertyField (list.FindPropertyRelative ("projectileModel")); GUILayout.EndVertical (); EditorGUILayout.Space (); } else { EditorGUILayout.PropertyField (list.FindPropertyRelative ("fireWeaponForward")); EditorGUILayout.PropertyField (list.FindPropertyRelative ("useRayCastShoot")); if (!list.FindPropertyRelative ("useRayCastShoot").boolValue) { EditorGUILayout.PropertyField (list.FindPropertyRelative ("projectileSpeed")); EditorGUILayout.PropertyField (list.FindPropertyRelative ("useRaycastCheckingOnRigidbody")); EditorGUILayout.PropertyField (list.FindPropertyRelative ("customRaycastCheckingRate")); EditorGUILayout.PropertyField (list.FindPropertyRelative ("customRaycastCheckingDistance")); } else { EditorGUILayout.PropertyField (list.FindPropertyRelative ("useRaycastAllToCheckSurfaceFound")); if (list.FindPropertyRelative ("useRaycastAllToCheckSurfaceFound").boolValue) { EditorGUILayout.PropertyField (list.FindPropertyRelative ("maxDistanceToRaycastAll")); } EditorGUILayout.Space (); GUILayout.BeginVertical ("Shoot Delay and Fake Trail Settings", "window"); EditorGUILayout.PropertyField (list.FindPropertyRelative ("useRaycastShootDelay")); if (list.FindPropertyRelative ("useRaycastShootDelay").boolValue) { EditorGUILayout.PropertyField (list.FindPropertyRelative ("getDelayWithDistance")); if (list.FindPropertyRelative ("getDelayWithDistance").boolValue) { EditorGUILayout.PropertyField (list.FindPropertyRelative ("delayWithDistanceSpeed")); EditorGUILayout.PropertyField (list.FindPropertyRelative ("maxDelayWithDistance")); } else { EditorGUILayout.PropertyField (list.FindPropertyRelative ("raycastShootDelay")); } } EditorGUILayout.PropertyField (list.FindPropertyRelative ("useFakeProjectileTrails")); GUILayout.EndVertical (); EditorGUILayout.Space (); } } EditorGUILayout.Space (); GUILayout.BeginVertical ("Search Target Settings", "window"); EditorGUILayout.PropertyField (list.FindPropertyRelative ("isHommingProjectile")); EditorGUILayout.PropertyField (list.FindPropertyRelative ("isSeeker")); if (list.FindPropertyRelative ("isHommingProjectile").boolValue || list.FindPropertyRelative ("isSeeker").boolValue) { EditorGUILayout.PropertyField (list.FindPropertyRelative ("waitTimeToSearchTarget")); showSimpleList (list.FindPropertyRelative ("tagToLocate")); EditorGUILayout.PropertyField (list.FindPropertyRelative ("targetOnScreenForSeeker")); } if (list.FindPropertyRelative ("isHommingProjectile").boolValue) { EditorGUILayout.PropertyField (list.FindPropertyRelative ("locatedEnemyIconName")); } GUILayout.EndVertical (); EditorGUILayout.Space (); GUILayout.BeginVertical ("Force Settings", "window"); EditorGUILayout.PropertyField (list.FindPropertyRelative ("impactForceApplied")); EditorGUILayout.PropertyField (list.FindPropertyRelative ("forceMode")); EditorGUILayout.PropertyField (list.FindPropertyRelative ("applyImpactForceToVehicles")); if (list.FindPropertyRelative ("applyImpactForceToVehicles").boolValue) { EditorGUILayout.PropertyField (list.FindPropertyRelative ("impactForceToVehiclesMultiplier")); } EditorGUILayout.PropertyField (list.FindPropertyRelative ("forceMassMultiplier")); GUILayout.EndVertical (); EditorGUILayout.Space (); GUILayout.BeginVertical ("Explosion Settings", "window"); EditorGUILayout.PropertyField (list.FindPropertyRelative ("isExplosive")); EditorGUILayout.PropertyField (list.FindPropertyRelative ("isImplosive")); if (list.FindPropertyRelative ("isExplosive").boolValue || list.FindPropertyRelative ("isImplosive").boolValue) { EditorGUILayout.PropertyField (list.FindPropertyRelative ("explosionForce")); EditorGUILayout.PropertyField (list.FindPropertyRelative ("explosionRadius")); EditorGUILayout.PropertyField (list.FindPropertyRelative ("useExplosionDelay")); if (list.FindPropertyRelative ("useExplosionDelay").boolValue) { EditorGUILayout.PropertyField (list.FindPropertyRelative ("explosionDelay")); } EditorGUILayout.PropertyField (list.FindPropertyRelative ("explosionDamage")); EditorGUILayout.PropertyField (list.FindPropertyRelative ("pushCharacters")); EditorGUILayout.PropertyField (list.FindPropertyRelative ("applyExplosionForceToVehicles")); if (list.FindPropertyRelative ("applyExplosionForceToVehicles").boolValue) { EditorGUILayout.PropertyField (list.FindPropertyRelative ("explosionForceToVehiclesMultiplier")); } EditorGUILayout.PropertyField (list.FindPropertyRelative ("searchClosestWeakSpot")); } GUILayout.EndVertical (); EditorGUILayout.Space (); GUILayout.BeginVertical ("Disable Projectile Settings", "window"); EditorGUILayout.PropertyField (list.FindPropertyRelative ("useDisableTimer")); if (list.FindPropertyRelative ("useDisableTimer").boolValue) { EditorGUILayout.PropertyField (list.FindPropertyRelative ("noImpactDisableTimer")); EditorGUILayout.PropertyField (list.FindPropertyRelative ("impactDisableTimer")); } GUILayout.EndVertical (); EditorGUILayout.Space (); GUILayout.BeginVertical ("Particle Settings", "window"); EditorGUILayout.PropertyField (list.FindPropertyRelative ("muzzleParticles")); EditorGUILayout.PropertyField (list.FindPropertyRelative ("projectileParticles")); EditorGUILayout.PropertyField (list.FindPropertyRelative ("impactParticles")); GUILayout.EndVertical (); EditorGUILayout.Space (); } GUILayout.EndVertical (); EditorGUILayout.Space (); GUILayout.BeginVertical ("Sound Settings", "window"); EditorGUILayout.PropertyField (list.FindPropertyRelative ("shootSoundEffect")); EditorGUILayout.PropertyField (list.FindPropertyRelative ("shootAudioElement")); EditorGUILayout.PropertyField (list.FindPropertyRelative ("impactSoundEffect")); EditorGUILayout.PropertyField (list.FindPropertyRelative ("impactAudioElement")); EditorGUILayout.PropertyField (list.FindPropertyRelative ("outOfAmmo")); EditorGUILayout.PropertyField (list.FindPropertyRelative ("outOfAmmoAudioElement")); EditorGUILayout.PropertyField (list.FindPropertyRelative ("reloadSoundEffect")); EditorGUILayout.PropertyField (list.FindPropertyRelative ("reloadAudioElement")); GUILayout.EndVertical (); EditorGUILayout.Space (); GUILayout.BeginVertical ("Ammo Settings", "window"); EditorGUILayout.PropertyField (list.FindPropertyRelative ("clipSize")); EditorGUILayout.PropertyField (list.FindPropertyRelative ("infiniteAmmo")); if (!list.FindPropertyRelative ("infiniteAmmo").boolValue) { EditorGUILayout.PropertyField (list.FindPropertyRelative ("remainAmmo")); } EditorGUILayout.PropertyField (list.FindPropertyRelative ("useAmmoLimit")); if (list.FindPropertyRelative ("useAmmoLimit").boolValue) { EditorGUILayout.PropertyField (list.FindPropertyRelative ("ammoLimit")); } GUILayout.EndVertical (); EditorGUILayout.Space (); GUILayout.BeginVertical ("Laser Settings", "window"); EditorGUILayout.PropertyField (list.FindPropertyRelative ("isLaser")); GUILayout.EndVertical (); EditorGUILayout.Space (); GUILayout.BeginVertical ("Spread Settings", "window"); EditorGUILayout.PropertyField (list.FindPropertyRelative ("useProjectileSpread")); if (list.FindPropertyRelative ("useProjectileSpread").boolValue) { EditorGUILayout.PropertyField (list.FindPropertyRelative ("spreadAmount")); } GUILayout.EndVertical (); EditorGUILayout.Space (); GUILayout.BeginVertical ("Projectile Position Settings", "window"); showSimpleList (list.FindPropertyRelative ("projectilePosition")); GUILayout.EndVertical (); EditorGUILayout.Space (); GUILayout.BeginVertical ("Shell Settings", "window"); EditorGUILayout.PropertyField (list.FindPropertyRelative ("ejectShellOnShot")); if (list.FindPropertyRelative ("ejectShellOnShot").boolValue) { EditorGUILayout.PropertyField (list.FindPropertyRelative ("shell")); if (list.FindPropertyRelative ("shell").objectReferenceValue) { showSimpleList (list.FindPropertyRelative ("shellPosition")); EditorGUILayout.PropertyField (list.FindPropertyRelative ("shellEjectionForce")); showSimpleList (list.FindPropertyRelative ("shellDropSoundList")); EditorGUIHelper.showAudioElementList (list.FindPropertyRelative ("shellDropAudioElements")); } } GUILayout.EndVertical (); EditorGUILayout.Space (); GUILayout.BeginVertical ("Weapon Components", "window"); EditorGUILayout.PropertyField (list.FindPropertyRelative ("weapon")); EditorGUILayout.PropertyField (list.FindPropertyRelative ("animation")); GUILayout.EndVertical (); EditorGUILayout.Space (); GUILayout.BeginVertical ("Scorch Settings", "window"); EditorGUILayout.Space (); GUILayout.BeginVertical ("Scorch from Decal Manager", "window"); if (impactDecalList.arraySize > 0) { list.FindPropertyRelative ("impactDecalIndex").intValue = EditorGUILayout.Popup ("Default Decal Type", list.FindPropertyRelative ("impactDecalIndex").intValue, manager.impactDecalList); list.FindPropertyRelative ("impactDecalName").stringValue = manager.impactDecalList [list.FindPropertyRelative ("impactDecalIndex").intValue]; } EditorGUILayout.Space (); if (GUILayout.Button ("Update Decal Impact List")) { manager.getImpactListInfo (); } EditorGUILayout.Space (); GUILayout.EndVertical (); EditorGUILayout.Space (); GUILayout.BeginVertical ("Regular Scorch", "window"); EditorGUILayout.PropertyField (list.FindPropertyRelative ("scorch")); if (list.FindPropertyRelative ("scorch").objectReferenceValue) { EditorGUILayout.PropertyField (list.FindPropertyRelative ("scorchRayCastDistance")); } GUILayout.EndVertical (); EditorGUILayout.Space (); GUILayout.EndVertical (); EditorGUILayout.Space (); GUILayout.BeginVertical ("Auto Shoot Settings", "window"); EditorGUILayout.PropertyField (list.FindPropertyRelative ("autoShootOnTag")); if (list.FindPropertyRelative ("autoShootOnTag").boolValue) { EditorGUILayout.PropertyField (list.FindPropertyRelative ("layerToAutoShoot")); EditorGUILayout.PropertyField (list.FindPropertyRelative ("maxDistanceToRaycast")); EditorGUILayout.PropertyField (list.FindPropertyRelative ("shootAtLayerToo")); EditorGUILayout.Space (); GUILayout.BeginVertical ("Auto Shoot Tag List", "window"); showSimpleList (list.FindPropertyRelative ("autoShootTagList")); GUILayout.EndVertical (); } GUILayout.EndVertical (); EditorGUILayout.Space (); GUILayout.BeginVertical ("Weapon Force Settings", "window"); EditorGUILayout.PropertyField (list.FindPropertyRelative ("applyForceAtShoot")); if (list.FindPropertyRelative ("applyForceAtShoot").boolValue) { EditorGUILayout.PropertyField (list.FindPropertyRelative ("forceDirection")); EditorGUILayout.PropertyField (list.FindPropertyRelative ("forceAmount")); EditorGUILayout.PropertyField (list.FindPropertyRelative ("useCustomTransformToForceShoot")); if (list.FindPropertyRelative ("useCustomTransformToForceShoot").boolValue) { EditorGUILayout.PropertyField (list.FindPropertyRelative ("customTransformToForceShoot")); } } GUILayout.EndVertical (); EditorGUILayout.Space (); GUILayout.BeginVertical ("Projectile Adherence Settings", "window"); EditorGUILayout.PropertyField (list.FindPropertyRelative ("useGravityOnLaunch")); EditorGUILayout.PropertyField (list.FindPropertyRelative ("useGraivtyOnImpact")); EditorGUILayout.PropertyField (list.FindPropertyRelative ("adhereToSurface")); if (list.FindPropertyRelative ("adhereToSurface").boolValue) { EditorGUILayout.PropertyField (list.FindPropertyRelative ("adhereToLimbs")); } EditorGUILayout.PropertyField (list.FindPropertyRelative ("ignoreSetProjectilePositionOnImpact")); GUILayout.EndVertical (); EditorGUILayout.Space (); GUILayout.BeginVertical ("Projectile Pierce Settings", "window"); EditorGUILayout.PropertyField (list.FindPropertyRelative ("breakThroughObjects")); if (list.FindPropertyRelative ("breakThroughObjects").boolValue) { EditorGUILayout.PropertyField (list.FindPropertyRelative ("infiniteNumberOfImpacts")); if (!list.FindPropertyRelative ("infiniteNumberOfImpacts").boolValue) { EditorGUILayout.PropertyField (list.FindPropertyRelative ("numberOfImpacts")); } EditorGUILayout.PropertyField (list.FindPropertyRelative ("canDamageSameObjectMultipleTimes")); EditorGUILayout.PropertyField (list.FindPropertyRelative ("ignoreNewRotationOnProjectileImpact")); EditorGUILayout.Space (); EditorGUILayout.PropertyField (list.FindPropertyRelative ("canBreakThroughArmorSurface")); if (list.FindPropertyRelative ("canBreakThroughArmorSurface").boolValue) { EditorGUILayout.PropertyField (list.FindPropertyRelative ("breakThroughArmorSurfacePriorityValue")); } } GUILayout.EndVertical (); EditorGUILayout.Space (); GUILayout.BeginVertical ("Muzzle Flash Light Settings", "window"); EditorGUILayout.PropertyField (list.FindPropertyRelative ("useMuzzleFlash")); if (list.FindPropertyRelative ("useMuzzleFlash").boolValue) { EditorGUILayout.PropertyField (list.FindPropertyRelative ("muzzleFlahsLight")); EditorGUILayout.PropertyField (list.FindPropertyRelative ("muzzleFlahsDuration")); } GUILayout.EndVertical (); EditorGUILayout.Space (); GUILayout.BeginVertical ("Damage Target Over Time Settings", "window"); EditorGUILayout.PropertyField (list.FindPropertyRelative ("damageTargetOverTime")); if (list.FindPropertyRelative ("damageTargetOverTime").boolValue) { EditorGUILayout.PropertyField (list.FindPropertyRelative ("damageOverTimeDelay")); EditorGUILayout.PropertyField (list.FindPropertyRelative ("damageOverTimeDuration")); EditorGUILayout.PropertyField (list.FindPropertyRelative ("damageOverTimeAmount")); EditorGUILayout.PropertyField (list.FindPropertyRelative ("damageOverTimeRate")); EditorGUILayout.PropertyField (list.FindPropertyRelative ("damageOverTimeToDeath")); } EditorGUILayout.PropertyField (list.FindPropertyRelative ("removeDamageOverTimeState")); GUILayout.EndVertical (); EditorGUILayout.Space (); GUILayout.BeginVertical ("Sedate Characters Settings", "window"); EditorGUILayout.PropertyField (list.FindPropertyRelative ("sedateCharacters")); if (list.FindPropertyRelative ("sedateCharacters").boolValue) { EditorGUILayout.PropertyField (list.FindPropertyRelative ("sedateDelay")); EditorGUILayout.PropertyField (list.FindPropertyRelative ("useWeakSpotToReduceDelay")); EditorGUILayout.PropertyField (list.FindPropertyRelative ("sedateUntilReceiveDamage")); if (!list.FindPropertyRelative ("sedateUntilReceiveDamage").boolValue) { EditorGUILayout.PropertyField (list.FindPropertyRelative ("sedateDuration")); } } GUILayout.EndVertical (); EditorGUILayout.Space (); GUILayout.BeginVertical ("Push Characters Settings", "window"); EditorGUILayout.PropertyField (list.FindPropertyRelative ("pushCharacter")); if (list.FindPropertyRelative ("pushCharacter").boolValue) { EditorGUILayout.PropertyField (list.FindPropertyRelative ("pushCharacterForce")); EditorGUILayout.PropertyField (list.FindPropertyRelative ("pushCharacterRagdollForce")); } GUILayout.EndVertical (); EditorGUILayout.Space (); GUILayout.BeginVertical ("Remote Event Settings", "window"); EditorGUILayout.PropertyField (list.FindPropertyRelative ("useRemoteEventOnObjectsFound")); if (list.FindPropertyRelative ("useRemoteEventOnObjectsFound").boolValue) { EditorGUILayout.Space (); showSimpleList (list.FindPropertyRelative ("remoteEventNameList")); } EditorGUILayout.Space (); EditorGUILayout.PropertyField (list.FindPropertyRelative ("useRemoteEventOnObjectsFoundOnExplosion")); if (list.FindPropertyRelative ("useRemoteEventOnObjectsFoundOnExplosion").boolValue) { EditorGUILayout.Space (); EditorGUILayout.PropertyField (list.FindPropertyRelative ("remoteEventNameOnExplosion")); } GUILayout.EndVertical (); EditorGUILayout.Space (); GUILayout.BeginVertical ("Shield And Reaction Settings", "window"); EditorGUILayout.PropertyField (list.FindPropertyRelative ("ignoreShield")); EditorGUILayout.PropertyField (list.FindPropertyRelative ("canActivateReactionSystemTemporally")); EditorGUILayout.PropertyField (list.FindPropertyRelative ("damageReactionID")); EditorGUILayout.PropertyField (list.FindPropertyRelative ("damageTypeID")); EditorGUILayout.PropertyField (list.FindPropertyRelative ("projectileCanBeDeflected")); EditorGUILayout.PropertyField (list.FindPropertyRelative ("damageCanBeBlocked")); GUILayout.EndVertical (); EditorGUILayout.Space (); EditorGUILayout.Space (); GUILayout.BeginVertical ("Slice Surface Settings", "window"); EditorGUILayout.PropertyField (list.FindPropertyRelative ("sliceObjectsDetected")); if (list.FindPropertyRelative ("sliceObjectsDetected").boolValue) { EditorGUILayout.PropertyField (list.FindPropertyRelative ("layerToSlice")); EditorGUILayout.PropertyField (list.FindPropertyRelative ("randomSliceDirection")); EditorGUILayout.Space (); EditorGUILayout.PropertyField (list.FindPropertyRelative ("useBodyPartsSliceList")); if (list.FindPropertyRelative ("useBodyPartsSliceList").boolValue) { EditorGUILayout.PropertyField (list.FindPropertyRelative ("maxDistanceToBodyPart")); EditorGUILayout.Space (); showSimpleList (list.FindPropertyRelative ("bodyPartsSliceList")); } EditorGUILayout.Space (); EditorGUILayout.PropertyField (list.FindPropertyRelative ("useGeneralProbabilitySliceObjects")); if (list.FindPropertyRelative ("useGeneralProbabilitySliceObjects").boolValue) { EditorGUILayout.PropertyField (list.FindPropertyRelative ("generalProbabilitySliceObjects")); } EditorGUILayout.Space (); EditorGUILayout.PropertyField (list.FindPropertyRelative ("showSliceGizmo")); EditorGUILayout.PropertyField (list.FindPropertyRelative ("activateRigidbodiesOnNewObjects")); } GUILayout.EndVertical (); bool shakeSettings = list.FindPropertyRelative ("showShakeSettings").boolValue; buttonColor = GUI.backgroundColor; EditorGUILayout.BeginVertical (); string buttonText = ""; if (shakeSettings) { GUI.backgroundColor = Color.gray; buttonText = "Hide Shake Settings"; } else { GUI.backgroundColor = buttonColor; buttonText = "Show Shake Settings"; } if (GUILayout.Button (buttonText)) { shakeSettings = !shakeSettings; } GUI.backgroundColor = buttonColor; EditorGUILayout.EndVertical (); list.FindPropertyRelative ("showShakeSettings").boolValue = shakeSettings; if (shakeSettings) { EditorGUILayout.Space (); GUI.color = Color.cyan; EditorGUILayout.HelpBox ("Shake Settings when this weapon fires", MessageType.None); GUI.color = Color.white; EditorGUILayout.Space (); GUILayout.BeginVertical ("Shake Settings", "window"); EditorGUILayout.PropertyField (list.FindPropertyRelative ("shootShakeInfo.useDamageShake")); EditorGUILayout.PropertyField (list.FindPropertyRelative ("shootShakeInfo.sameValueBothViews")); if (list.FindPropertyRelative ("shootShakeInfo.useDamageShake").boolValue) { EditorGUILayout.Space (); if (list.FindPropertyRelative ("shootShakeInfo.sameValueBothViews").boolValue) { showShakeInfo (list.FindPropertyRelative ("shootShakeInfo.thirdPersonDamageShake"), "Shake In Third Person"); } else { EditorGUILayout.PropertyField (list.FindPropertyRelative ("shootShakeInfo.useDamageShakeInThirdPerson")); if (list.FindPropertyRelative ("shootShakeInfo.useDamageShakeInThirdPerson").boolValue) { showShakeInfo (list.FindPropertyRelative ("shootShakeInfo.thirdPersonDamageShake"), "Shake In Third Person"); EditorGUILayout.Space (); } EditorGUILayout.PropertyField (list.FindPropertyRelative ("shootShakeInfo.useDamageShakeInFirstPerson")); if (list.FindPropertyRelative ("shootShakeInfo.useDamageShakeInFirstPerson").boolValue) { showShakeInfo (list.FindPropertyRelative ("shootShakeInfo.firstPersonDamageShake"), "Shake In First Person"); EditorGUILayout.Space (); } } EditorGUILayout.Space (); if (GUILayout.Button ("Test Shake")) { if (Application.isPlaying) { manager.testWeaponShake (weaponIndex); } } } GUILayout.EndVertical (); } GUILayout.EndVertical (); } void showWeaponList (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 weapons: " + list.arraySize); EditorGUILayout.Space (); GUILayout.BeginHorizontal (); if (GUILayout.Button ("Add")) { list.arraySize++; } 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; showWeaponListElement (list.GetArrayElementAtIndex (i), 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 (); } void showSimpleList (SerializedProperty list) { EditorGUILayout.Space (); if (GUILayout.Button ("Show/Hide " + list.displayName, buttonStyle)) { list.isExpanded = !list.isExpanded; } EditorGUILayout.Space (); if (list.isExpanded) { 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 (); if (GUILayout.Button ("x")) { list.DeleteArrayElementAtIndex (i); return; } if (i < list.arraySize && i >= 0) { EditorGUILayout.PropertyField (list.GetArrayElementAtIndex (i), new GUIContent ("", null, ""), false); } GUILayout.EndHorizontal (); } } } void showShakeInfo (SerializedProperty list, string shakeName) { GUILayout.BeginVertical (shakeName, "window"); EditorGUILayout.PropertyField (list.FindPropertyRelative ("shakeRotation")); EditorGUILayout.PropertyField (list.FindPropertyRelative ("shakeRotationSpeed")); EditorGUILayout.PropertyField (list.FindPropertyRelative ("shakeRotationSmooth")); EditorGUILayout.PropertyField (list.FindPropertyRelative ("shakeDuration")); GUILayout.EndVertical (); } } #endif