Example #1
0
    void Update()
    {
        if (head != null && head.activeSelf)
        {
            transform.position = Vector3.Lerp(transform.position, head.transform.position, 0.5f);

            Vector3 moveDirection = head.transform.position - transform.position;
            if (moveDirection != Vector3.zero)
            {
                float angle = Mathf.Atan2(-moveDirection.x, moveDirection.y) * Mathf.Rad2Deg;
                transform.rotation = Quaternion.AngleAxis(angle, Vector3.forward);
            }
        }
        else
        {
            if (secondaryHead && !head.activeSelf)
            {
                if (!destroing)
                {
                    StartCoroutine(slowDestoy());
                }
            }
            else
            {
                HeadPool.goHeadSpriteInPool(gameObject);
            }
        }
    }
Example #2
0
    public IEnumerator attachCreature()
    {
        tempBack = mainHead.GetComponent <EnemyHead>().back;
        if (tempBack != null)
        {
            for (int i = 0; i < 50; i++)
            {
                if (tempBack.GetComponent <EnemyBack>().back != null)
                {
                    if (tempBack.GetComponent <EnemyBack>().back.GetComponent <EnemyTail>() != null)
                    {
                        tempTail = tempBack.GetComponent <EnemyBack>().back;
                        break;
                    }
                    tempBack = tempBack.GetComponent <EnemyBack>().back;
                }
                else
                {
                    break;
                }
            }
        }
        attachingCreature = true;
        yield return(new WaitForSeconds(0.8f));

        tempBack.GetComponent <EnemyBack>().back = back;
        back.GetComponent <EnemyBack>().front    = tempBack;
        TailPool.goInPool(tempTail);
        HeadPool.goHeadInPool(gameObject);
    }
Example #3
0
 IEnumerator slowDestoy()
 {
     destroing = true;
     for (int i = 0; i < 7; i++)
     {
         gameObject.transform.localScale -= new Vector3(0.02f, 0.02f, 0);
         yield return(new WaitForSeconds(0.01f));
     }
     HeadPool.goHeadSpriteInPool(gameObject);
     destroing = false;
 }
Example #4
0
    IEnumerator createHead()
    {
        creatingHead = true;
        yield return(new WaitForSeconds(0.5f));

        if (front == null || front.activeSelf == false)
        {
            headFromPool = HeadPool.getHead();
            headFromPool.GetComponent <EnemyHead>().firstStart = false;
            headFromPool.transform.position = gameObject.transform.position;
            if (gameObject.GetComponent <EnemyBack>() != null)
            {
                gameObject.GetComponent <EnemyBack>().front  = headFromPool;
                headFromPool.GetComponent <EnemyHead>().back = gameObject;
            }

            headSprite = HeadPool.getHeadSprite();
            if (headSprite != null)
            {
                headSprite.transform.position = headFromPool.transform.position;
                headSprite.GetComponent <HeadSprite>().head = headFromPool;
                headSprite.transform.localScale             = new Vector3(0, 0, 0);
            }
            yield return(new WaitForSeconds(0.01f));

            headFromPool.GetComponent <EnemyHead>().isPlayerOnTarget = true;
            for (int i = 0; i < 28; i++)
            {
                headSprite.transform.localScale += new Vector3(0.005f, 0.005f, 0.005f);
                yield return(new WaitForSeconds(0.01f));
            }

            yield return(new WaitForSeconds(0.05f));

            creatingHead = false;
            yield return(new WaitForSeconds(Random.Range(5f, 25f)));

            headSprite.GetComponent <HeadSprite>().secondaryHead  = true;
            headFromPool.GetComponent <EnemyHead>().secondaryHead = true;
        }
        else
        {
            creatingHead = false;
        }
    }
Example #5
0
    void Update()
    {
        if (player == null)
        {
            player = GameObject.Find("Player");
        }

        //Логика движения змеи

        if (!secondaryHead)
        {
            if (firstStart)
            {
                if (transform.position != startPoint)
                {
                    transform.position = Vector3.MoveTowards(transform.position, startPoint, Time.deltaTime * speed);
                }
                else
                {
                    firstStart = false;
                }
            }
            else
            {
                if (isPlayerOnTarget)
                {
                    transform.position = Vector3.MoveTowards(transform.position, player.transform.position, Time.deltaTime * speed);
                    pointOnCircle      = randomPiontOnCircle();
                    direction          = new Vector3(pointOnCircle.x, pointOnCircle.y, 0f);
                }
                else
                {
                    if (Mathf.Abs(transform.position.x) >= Mathf.Abs(screenSize.x) || Mathf.Abs(transform.position.y) >= Mathf.Abs(screenSize.y))
                    {
                        if (Mathf.Abs(transform.position.x) >= Mathf.Abs(screenSize.x))
                        {
                            direction = new Vector3(-direction.x, randomPiontOnCircle().y, 0f);
                            transform.Translate(direction * Time.deltaTime * speed);
                            if (Mathf.Abs(transform.position.x) >= Mathf.Abs(screenSize.x))
                            {
                                transform.Translate(direction * Time.deltaTime * speed);
                                if (Mathf.Abs(transform.position.y) >= Mathf.Abs(screenSize.x))
                                {
                                    isPlayerOnTarget = true;
                                }
                            }
                        }
                        if (Mathf.Abs(transform.position.y) >= Mathf.Abs(screenSize.y))
                        {
                            direction = new Vector3(randomPiontOnCircle().x, -direction.y, 0f);
                            transform.Translate(direction * Time.deltaTime * speed);
                            if (Mathf.Abs(transform.position.y) >= Mathf.Abs(screenSize.x))
                            {
                                transform.Translate(direction * Time.deltaTime * speed);
                                if (Mathf.Abs(transform.position.y) >= Mathf.Abs(screenSize.x))
                                {
                                    isPlayerOnTarget = true;
                                }
                            }
                        }
                    }
                    else
                    {
                        transform.Translate(direction * Time.deltaTime * speed);
                    }
                }

                if (back == null)
                {
                    HeadPool.goHeadInPool(gameObject);
                }
            }
        }
        else
        {
            tempBack = mainHead.GetComponent <EnemyHead>().back;
            if (tempBack != null)
            {
                for (int i = 0; i < 50; i++)
                {
                    if (tempBack.GetComponent <EnemyBack>().back != null)
                    {
                        if (tempBack.GetComponent <EnemyBack>().back.GetComponent <EnemyTail>() != null)
                        {
                            tempTail = tempBack.GetComponent <EnemyBack>().back;
                            break;
                        }
                        tempBack = tempBack.GetComponent <EnemyBack>().back;
                    }
                    else
                    {
                        break;
                    }
                }
            }
            transform.position = Vector3.MoveTowards(transform.position, tempBack.transform.position, Time.deltaTime * speed * 1.5f);
            if (!attachingCreature)
            {
                StartCoroutine(attachCreature());
            }
        }

        if (back.GetComponent <EnemyBack>().front != gameObject)
        {
            HeadPool.goHeadInPool(gameObject);
        }

        //Логика скорости
        if (System.Math.Round(score.score) % 10 == 0 && score.score > tempscore)
        {
            Debug.Log("+ Speed");
            speed     += 0.05f / GameObject.FindGameObjectsWithTag("EnemyHead").Length;
            tempscore += 10;
        }
    }