//When it hits an enemy public override void enemyCollisionEnter(GameObject enemy, Vector3 point) { if (!enemiesHit.Contains(enemy) && !enemy.GetComponent <IAController>().isDead) { enemiesHit.Add(enemy); //If it's an enemy we damage him enemy.GetComponent <IAController>().getHurt(damage, point, true); //We find the radius of areaEffect //enemy.GetComponent<Rigidbody>().AddExplosionForce(forceExplosion,transform.position,1f); GameObject newEffect = GameObject.Instantiate(enemyHitEffectPrefab) as GameObject; newEffect.transform.position = enemy.GetComponent <Rigidbody> ().worldCenterOfMass - (kameEffect.transform.forward * 0.15f); Vector3 direction = (enemy.transform.position - kameEffect.transform.position).normalized + (enemy.transform.up * 1f); //enemy.GetComponent<Rigidbody> ().AddForce (direction.normalized * forceExplosion,ForceMode.Impulse); //enemy.GetComponent<Rigidbody>().velocity += direction * forceExplosion; /*if(detonate || (hasHitGround && explodes)){ * enemy.GetComponent<IAController>().sendFlying(direction.normalized*forceExplosion); * }else{ * enemy.GetComponent<IAController>().hitInterruptsAndHitstone(); * enemy.GetComponent<Rigidbody> ().AddForce (direction.normalized * forceExplosion,ForceMode.Impulse); * * }*/ enemy.GetComponent <IAController>().sendFlyingByForce(direction.normalized * forceExplosion * scaleMultiplyier); GameManager.comboManager.addCombo(); if (!elementAttack.Equals(ElementType.None)) { AttackElementsManager.getElement(elementAttack).doEffect(enemy); } } }
public void enemyHit(GameObject enemy) { if (!enemiesHit.Contains(enemy) && !enemy.GetComponent <IAController>().isDead) { enemiesHit.Add(enemy); enemy.GetComponent <IAController>().getHurt(damage, (enemy.transform.position), true); GameManager.comboManager.addCombo(); if (!elementAttack.Equals(ElementType.None)) { AttackElementsManager.getElement(elementAttack).doEffect(enemy); } } }
//2. Initializes the kame and shows the direction line (Called when the animation starts) private void animationStarted() { chargeTimer = 0f; kameEffect.transform.rotation = Quaternion.LookRotation(GameManager.player.transform.forward, GameManager.player.transform.up); //Find closest planet GameObject[] planets = GravityAttractorsManager.getGravityAttractors(); float smallestDistance = float.PositiveInfinity; foreach (GameObject planet in planets) { if (Vector3.Distance(planet.transform.position, GameManager.player.transform.position) < smallestDistance) { closestPlanet = planet; smallestDistance = Vector3.Distance(planet.transform.position, GameManager.player.transform.position); } } //Initialize elements hasHitGround = false; isFinished = false; kameEffect.SetActive(false); kameCore.SetActive(true); kameCore.GetComponent <ParticleSystem>().Play(); startPosition = ((GameManager.player.GetComponent <Rigidbody> ().worldCenterOfMass + (GameManager.player.transform.up * 0.15f))) + (kameEffect.transform.forward * 0.4f); kameEffect.transform.position = startPosition; kameCore.transform.position = startPosition; kameCore.transform.forward = kameEffect.transform.forward; objectsCollided = 0; enemiesHit = new List <GameObject> (0); transform.parent = closestPlanet.transform; if (!elementAttack.Equals(ElementType.None)) { elementalParticleOnCharge.SetActive(true); elementalParticleOnCharge.GetComponent <ParticleSystem>().Play(); Material material = AttackElementsManager.getElement(elementAttack).material; if (material != null) { elementalParticleSystem.GetComponent <ParticleSystemRenderer>().material = material; elementalParticleOnCharge.GetComponent <ParticleSystemRenderer>().material = material; } } //Starts to update the charging up of the kame isCharged = false; isCharging = true; Util.changeTime(slowTimeProportion); isFinished = false; arrowDirection = GameManager.player.transform.forward; directionalLine.SetActive(true); directionalLine.GetComponent <LineRenderer> ().SetPosition(0, GameManager.player.GetComponent <Rigidbody>().worldCenterOfMass); directionalLine.GetComponent <LineRenderer> ().SetPosition(1, GameManager.player.GetComponent <Rigidbody>().worldCenterOfMass + (lineLength * arrowDirection.normalized)); StartCoroutine(updateCharge()); }
public override void enemyCollisionEnter(GameObject enemy, Vector3 point) { //If it's an enemy we damage him if (!enemiesHit.Contains(enemy) && !enemy.GetComponent <IAController>().isDead) { enemiesHit.Add(enemy); enemy.GetComponent <IAController>().getHurt(damage, enemy.transform.position, true); float radius = areaEffect.GetComponent <SphereCollider> ().radius *endScaleOfAttack; Vector3 position = areaEffect.transform.position; enemy.GetComponent <Rigidbody>().velocity = ((enemy.transform.position - chargeEffect.transform.position).normalized + enemy.transform.up).normalized * forceExplosion; GameManager.comboManager.addCombo(); if (!elementAttack.Equals(ElementType.None)) { AttackElementsManager.getElement(elementAttack).doEffect(enemy); } } }
public void initialize(Vector3 vectorUp, GameObject objective, TrackingMissilesAttack originalAttack, ElementType elementType) { timeHasBeenAlive = 0f; this.objective = objective; this.originalAttack = originalAttack; speed = new Vector3(Random.value, Random.value, 0f).normalized; speed = ((speed * 0.8f) + vectorUp).normalized; if (!elementType.Equals(ElementType.None)) { elementalParticleEffect.SetActive(true); elementalParticleEffect.GetComponent <ParticleSystem>().Play(); Material material = AttackElementsManager.getElement(elementType).material; if (material != null) { elementalParticleEffect.GetComponent <ParticleSystemRenderer>().material = material; } } }
public override void enemyCollisionEnter(GameObject enemy, Vector3 point) { if (!enemiesHit.Contains(enemy) && !enemy.GetComponent <IAController>().isDead) { enemiesHit.Add(enemy); //If it's an enemy we damage him enemy.GetComponent <IAController>().getHurt(damage, (kameEffect.transform.position + enemy.transform.position) / 2f, true); //We find the radius of areaEffect enemy.GetComponent <Rigidbody>().AddExplosionForce(forceExplosion, transform.position, 1f); GameObject newEffect = GameObject.Instantiate(enemyHitEffectPrefab) as GameObject; newEffect.transform.position = enemy.GetComponent <Rigidbody> ().worldCenterOfMass - (kameEffect.transform.forward * 0.15f); Vector3 direction = (enemy.transform.position - kameCore.transform.position).normalized + (enemy.transform.up * 2f); //enemy.GetComponent<Rigidbody> ().AddForce (direction.normalized * forceExplosion,ForceMode.Impulse); enemy.GetComponent <Rigidbody>().velocity += direction * forceExplosion; GameManager.comboManager.addCombo(); if (!elementAttack.Equals(ElementType.None)) { AttackElementsManager.getElement(elementAttack).doEffect(enemy); } } }
private IEnumerator doShockwave() { enemiesHit = new List <GameObject> (0); areaEffect.transform.localScale = new Vector3(0f, 0f, 0f); chargeEffect.transform.localScale = new Vector3(startChargeScale, startChargeScale, startChargeScale); areaEffect.transform.position = GameManager.player.transform.position; chargeEffect.transform.position = GameManager.player.transform.position; chargeEffect.SetActive(true); if (!elementAttack.Equals(ElementType.None)) { elementalParticlesOnCharge.SetActive(true); elementalParticlesOnCharge.transform.position = chargeEffect.transform.position; elementalParticlesOnCharge.GetComponent <ParticleSystem>().Play(); Material material = AttackElementsManager.getElement(elementAttack).material; if (material != null) { elementalParticlesOnCharge.GetComponent <ParticleSystemRenderer>().material = material; } } timer = 0f; while (timer < timeToCharge) { timer += Time.deltaTime; float ratio = (1f - ((timer) / (timeToCharge))) * startChargeScale; chargeEffect.transform.localScale = new Vector3(ratio, ratio, ratio); chargeEffect.transform.position = GameManager.playerController.lightGemObject.transform.position; elementalParticlesOnCharge.transform.position = GameManager.playerController.lightGemObject.transform.position; yield return(null); } elementalParticlesOnCharge.SetActive(false); if (!elementAttack.Equals(ElementType.None)) { elementalParticlesOnExplode.SetActive(true); elementalParticlesOnExplode.transform.position = areaEffect.transform.position; elementalParticlesOnExplode.GetComponent <ParticleSystem>().Play(); Material material = AttackElementsManager.getElement(elementAttack).material; if (material != null) { elementalParticlesOnExplode.GetComponent <ParticleSystemRenderer>().material = material; } } areaEffect.SetActive(true); chargeEffect.SetActive(false); GameManager.playerAnimator.SetBool("isDoingShockwave", true); timer = 0f; while (timer < timeItDoesAttack) { timer += Time.deltaTime; float ratio = (timer / (timeItDoesAttack)) * endScaleOfAttack; areaEffect.transform.localScale = new Vector3(ratio, ratio, ratio); areaEffect.transform.position = GameManager.playerController.lightGemObject.transform.position; elementalParticlesOnExplode.transform.position = GameManager.playerController.lightGemObject.transform.position; yield return(null); } isFinished = true; GameManager.playerAnimator.SetBool("isDoingShockwave", false); areaEffect.SetActive(false); elementalParticlesOnExplode.SetActive(false); }
IEnumerator doTrackingMissilesAttack() { enemiesHit = new List <GameObject> (0); attackCharge.SetActive(true); attackCharge.transform.position = GameManager.playerController.lightGemObject.transform.position; timer = 0f; if (!elementAttack.Equals(ElementType.None)) { elementalParticlesOnCharge.SetActive(true); elementalParticlesOnCharge.GetComponent <ParticleSystem>().Play(); Material material = AttackElementsManager.getElement(elementAttack).material; if (material != null) { elementalParticlesOnCharge.GetComponent <ParticleSystemRenderer>().material = material; } } timer = 0f; while (timer <= timeToChargeAttack) { timer += Time.deltaTime; float ratio = (1f - ((timer) / (timeToChargeAttack))) * startChargeScale; attackCharge.transform.localScale = new Vector3(ratio, ratio, ratio); attackCharge.transform.position = GameManager.playerController.lightGemObject.transform.position; elementalParticlesOnCharge.transform.position = GameManager.playerController.lightGemObject.transform.position; attackCharge.transform.position = GameManager.playerController.lightGemObject.transform.position; yield return(null); } attackCharge.SetActive(false); elementalParticlesOnCharge.SetActive(false); Vector3 up = GameManager.player.transform.up; kameUp.SetActive(true); kameUp.transform.position = attackCharge.transform.position; timer = 0f; float originalScale = kameUp.transform.localScale.x; while (timer < timeGoingUp) { timer += Time.deltaTime; float ratio = timer / timeGoingUp; float scale = ((maxScaleGrow - originalScale) * ratio) + originalScale; kameUp.transform.localScale = new Vector3(scale, scale, scale); kameUp.transform.position += up.normalized * Time.deltaTime * speedUp; yield return(null); } GameManager.playerAnimator.SetBool("isDoingMissiles", false); isFinished = true; timer = 0f; spawnMissiles(kameUp.transform.position); while (timer < timeToStayMaxGrowth) { timer += Time.deltaTime; float ratio = timer / timeToStayMaxGrowth; /*if(kameUp.GetComponent<Renderer>().material.HasProperty("_TintColor")){ * Color originalColor = kameUp.GetComponent<Renderer>().material.GetColor("_TintColor"); * Color newColor = new Color(originalColor.r,originalColor.g,originalColor.b,1f-ratio); * kameUp.GetComponent<Renderer>().material.SetColor("_TintColor",newColor); * } * foreach(Renderer r in kameUp.GetComponentsInChildren<Renderer>()){ * if(r.material.HasProperty("_TintColor")){ * Color originalColor = r.material.GetColor("_TintColor"); * Color newColor = new Color(originalColor.r,originalColor.g,originalColor.b,1f-ratio); * r.material.SetColor("_TintColor",newColor); * } * }*/ yield return(null); } /*if(kameUp.GetComponent<Renderer>().material.HasProperty("_TintColor")){ * Color originalColor = kameUp.GetComponent<Renderer>().material.GetColor("_TintColor"); * Color newColor = new Color(originalColor.r,originalColor.g,originalColor.b,1f); * kameUp.GetComponent<Renderer>().material.SetColor("_TintColor",newColor); * } * foreach(Renderer r in kameUp.GetComponentsInChildren<Renderer>()){ * if(r.material.HasProperty("_TintColor")){ * Color originalColor = r.material.GetColor("_TintColor"); * Color newColor = new Color(originalColor.r,originalColor.g,originalColor.b,1f); * r.material.SetColor("_TintColor",newColor); * } * }*/ kameUp.transform.localScale = new Vector3(originalScale, originalScale, originalScale); kameUp.SetActive(false); canDoNewAttack = true; }
IEnumerator doKame() { enemiesHit = new List <GameObject> (0); initializeVariables(); //CHARGE THE KAME START if (!elementAttack.Equals(ElementType.None)) { elementalParticleOnCharge.SetActive(true); elementalParticleOnCharge.GetComponent <ParticleSystem>().Play(); Material material = AttackElementsManager.getElement(elementAttack).material; if (material != null) { elementalParticleSystem.GetComponent <ParticleSystemRenderer>().material = material; elementalParticleOnCharge.GetComponent <ParticleSystemRenderer>().material = material; } } timer = 0f; while (timer < chargeTime && !isCharged) { timer += Time.deltaTime; float ratio = (1f - ((timer) / (chargeTime))) * startChargeScale; kameCore.transform.localScale = new Vector3(ratio, ratio, ratio); kameCore.transform.position = GameManager.playerController.lightGemObject.transform.position; kameCore.transform.position = GameManager.playerController.lightGemObject.transform.position; elementalParticleOnCharge.transform.position = GameManager.playerController.lightGemObject.transform.position; kameEffect.transform.position = GameManager.playerController.lightGemObject.transform.position; elementalParticleSystem.transform.position = kameEffect.transform.position; yield return(null); } isCharged = true; GameManager.playerAnimator.SetBool("isDoingKame", true); isFinished = true; kameEffect.SetActive(true); //CHARGE THE KAME END //THROW THE KAME START kameEffect.transform.position = GameManager.playerController.lightGemObject.transform.position - (kameEffect.transform.forward * distance * Time.deltaTime * 2f); kameCore.GetComponent <ParticleSystem>().Stop(); if (!elementAttack.Equals(ElementType.None)) { elementalParticleSystem.SetActive(true); elementalParticleSystem.GetComponent <ParticleSystem>().Play(); } StartCoroutine("resetTrails"); timer = 0f; while (timer < totalTimeLasts) { timer += Time.deltaTime; float ratio = (timer) / totalTimeLasts; float magnitude = ratio * distance; Vector3 newPostion = kameEffect.transform.position + (kameEffect.transform.forward * distance * Time.deltaTime); kameEffect.transform.position = newPostion; //We rotate the object Vector3 objectiveUp = (kameEffect.transform.position - closestPlanetCenter); objectiveUp = new Vector3(objectiveUp.x, objectiveUp.y, 0f).normalized; Vector3 objectUp = new Vector3(kameEffect.transform.up.x, kameEffect.transform.up.y, 0f).normalized; kameEffect.transform.rotation = Quaternion.FromToRotation(objectUp, objectiveUp) * kameEffect.transform.rotation; elementalParticleSystem.transform.position = kameEffect.transform.position; yield return(null); } //end test elementalParticleOnCharge.SetActive(false); //THROW THE KAME END //CLEAN THE KAME START kameCore.GetComponent <ParticleSystem>().Stop(); if (!elementAttack.Equals(ElementType.None)) { elementalParticleSystem.GetComponent <ParticleSystem>().Stop(); elementalParticleSystem.SetActive(true); } //StartCoroutine ("cleanKameTrail"); yield return(new WaitForSeconds(timeToDisappear)); if (isFinished) { kameEffect.SetActive(false); kameCore.SetActive(false); elementalParticleSystem.SetActive(false); canDoNext = true; } //CLEAN THE KAME END }