Exemplo n.º 1
0
    private void OnTriggerEnter2D(Collider2D collision)
    {
        if (birdStateEnum == BirdStateEnum.flyToSeed && collision.tag == targetTag)
        {
            colliderObject = collision.GetComponent <ColliderObject>();
            if (colliderObject == null)
            {
                Debug.LogError("collider does not exist on " + collision.gameObject);
                return;
            }
            colliderObject.RemoveCollider();
            colliderObject.transform.rotation = Quaternion.identity;
            colliderObject.transform.position = transform.Find("beak").position;
            colliderObject.transform.parent   = transform;
            birdStateEnum = BirdStateEnum.flyToNest;

            //hide nest cover
            nestCover.SetActive(false);

            flyStartPosition = transform.position;
            target           = nestStop.position;
            direction        = (target - flyStartPosition).normalized;
            speed           /= 2f;
        }
    }
Exemplo n.º 2
0
 void DropSeed()
 {
     colliderObject.RecoverCollider();
     colliderObject.transform.parent = null;
     colliderObject.rb.velocity      = new Vector3(0, -1, 0);
     birdStateEnum = BirdStateEnum.flyAway;
     nestCover.SetActive(true);
 }
Exemplo n.º 3
0
    void StartFly()
    {
        birdStateEnum = BirdStateEnum.flyToSeed;

        flyStartPosition = transform.position;
        target           = targetObject.transform.position;
        direction        = (target - flyStartPosition).normalized;
    }
Exemplo n.º 4
0
    // Update is called once per frame
    void Update()
    {
        if (GameManager.Instance.IsGameEnd)
        {
            return;
        }
        switch (birdStateEnum)
        {
        case BirdStateEnum.wait:
            if (targetObject.transform.position.y < transform.position.y - birdFlyTriggerHeight)
            {
                Invoke("StartFly", isForLeaf?0: delay);
            }
            break;

        case BirdStateEnum.flyToSeed:
            if (isForLeaf)
            {
                target    = targetObject.transform.position;
                direction = (target - transform.position).normalized;
            }
            rb.MovePosition(transform.position + direction * speed * Time.deltaTime);
            break;

        case BirdStateEnum.flyToNest:
            rb.MovePosition(transform.position + direction * speed * Time.deltaTime);
            Vector3 vectorCur    = transform.position - flyStartPosition;
            Vector3 vectorTarget = target - flyStartPosition;
            float   lengthCur    = Vector3.Dot(vectorCur, direction);
            if (lengthCur * lengthCur >= vectorTarget.sqrMagnitude)
            {
                birdStateEnum = BirdStateEnum.pauseOnNest;
                Invoke("DropSeed", 0.5f);
            }
            break;

        case BirdStateEnum.pauseOnNest:
            break;

        case BirdStateEnum.flyAway:
            rb.MovePosition(transform.position + direction * speed * Time.deltaTime);
            break;
        }
    }
Exemplo n.º 5
0
    // Start is called before the first frame update
    void Start()
    {
        rb            = GetComponent <Rigidbody2D>();
        birdStateEnum = BirdStateEnum.wait;
        delay         = Random.Range(delayMin, delayMax);

        nestCover = transform.parent.Find("nest_cover").gameObject;

        if (isForLeaf)
        {
            targetObject = GameObject.Find("leaf");
            targetTag    = "leaf";
        }
        else
        {
            targetObject = GameObject.Find("seed");
            targetTag    = "seed";
        }
    }