using UnityEngine; using System.Collections; using System.Collections.Generic; using GameKitController.Audio; public class dissolveProjectile : projectileSystem { [Header ("Main Settings")] [Space] public LayerMask layer; [Space] public bool useLayerMaskToIgnore; public LayerMask layerMaskToIgnore; [Space] public float timeToDestroyObject = 0.9f; public float dissolveSpeed = 1; [Space] [Header ("Shader Settings")] [Space] public Shader shaderToApply; public Texture dissolveTexture; public Color dissolveColor; public float dissolveColorAlpha; public string dissolveShaderFieldName = "_Amount"; public string dissolveShaderTextureFieldName = "_DissolveTexture"; public string dissolveShaderColorFieldName = "_DissolveColor"; public string dissolveShaderAlphaColorFieldName = "_DissolveColorAlpha"; [Space] [Header ("Debug")] [Space] public bool objectToDissolveFound; public float currentFadeValue = 1; dissolveObject currentDissolveObject; GameObject objectToDissolve; void Update () { if (objectToDissolveFound) { currentFadeValue = currentDissolveObject.currentFadeValue; if (currentFadeValue >= 1 || currentFadeValue > timeToDestroyObject) { destroyObject (); } } } public void dissolveObject (GameObject objectToDissolve) { checkObjectDetected (objectToDissolve.GetComponent ()); } //when the bullet touchs a surface, then public void checkObjectDetected (Collider col) { if (canActivateEffect (col)) { if (currentProjectileInfo.impactAudioElement != null) { currentProjectileInfo.impactAudioElement.audioSource = GetComponent (); AudioPlayer.PlayOneShot (currentProjectileInfo.impactAudioElement, gameObject); } setProjectileUsedState (true); //set the bullet kinematic objectToDamage = col.GetComponent ().gameObject; mainRigidbody.isKinematic = true; if ((1 << col.gameObject.layer & layer.value) == 1 << col.gameObject.layer) { if (objectToDamage.GetComponent ()) { objectToDissolve = objectToDamage; objectToDissolveFound = true; } if (useLayerMaskToIgnore) { if ((1 << col.gameObject.layer & layerMaskToIgnore.value) == 1 << col.gameObject.layer) { objectToDissolveFound = false; setProjectileUsedState (false); setIgnoreProjectileWithAbilityState (true); checkSurface (col); return; } } bool isCharacter = applyDamage.isCharacter (objectToDamage); if (isCharacter) { objectToDissolve = applyDamage.getCharacter (objectToDamage); objectToDissolveFound = true; } else { bool isVehicle = applyDamage.isVehicle (objectToDamage); if (isVehicle) { objectToDissolve = applyDamage.getVehicle (objectToDamage); objectToDissolveFound = true; } } if (objectToDissolveFound) { currentDissolveObject = objectToDissolve.GetComponent (); if (currentDissolveObject != null) { destroyObject (); return; } if (currentDissolveObject == null) { currentDissolveObject = objectToDissolve.AddComponent (); } if (currentDissolveObject != null) { currentDissolveObject.shaderToApply = shaderToApply; currentDissolveObject.dissolveTexture = dissolveTexture; currentDissolveObject.dissolveColor = dissolveColor; currentDissolveObject.dissolveColorAlpha = dissolveColorAlpha; currentDissolveObject.timeToDestroyObject = timeToDestroyObject; currentDissolveObject.dissolveSpeed = dissolveSpeed; currentDissolveObject.activateDissolve (objectToDissolve); } } } checkProjectilesParent (); } } public void destroyObject () { destroyProjectile (); } public override void resetProjectile () { base.resetProjectile (); objectToDissolveFound = false; currentDissolveObject = null; objectToDissolve = null; } }