Beispiel #1
0
    //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);
            }
        }
    }
Beispiel #2
0
 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);
         }
     }
 }
Beispiel #3
0
    //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());
    }
Beispiel #4
0
 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;
            }
        }
    }
Beispiel #6
0
    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);
            }
        }
    }
Beispiel #7
0
    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);
    }
Beispiel #8
0
    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;
    }
Beispiel #9
0
    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
    }