コード例 #1
0
    public void Idle()
    {
        tempPos.y          = tempVal + amplitude * Mathf.Sin(speed * Time.time); //emotion y-coord change by amplitude (length of up-down), mathf.sin calculate up-down position from 0 to 1
        transform.position = tempPos;

        if (colliderDetector.GetListOfTriggerColliders().Count != 0)     // if collider list in trigger zone isn't empty
        {                                                                // or if trigger zone contain colliders
            nearestTransform = Helper.GetClosestTransform(colliderDetector.GetListOfTriggerTransforms(), transform);

            closestEmotionController = nearestTransform.GetComponentInChildren <EmotionController>();    // !
            // foundClosestTransform = true;

            if ((closestEmotionController != null) && (!closestEmotionController.EmotionExists(emotionColor)))
            {
                fsm.TransitTo(Magnet);
            }
        }
    }
コード例 #2
0
    public void Magnet()
    {
        distanceToPlayer = Vector3.Distance(transform.position, nearestTransform.position);   // calculate distance to player
        if ((closestEmotionController.EmotionExists(emotionColor)) || (distanceToPlayer > 1.5f))
        {
            fsm.TransitTo(Idle);
        }
        else
        {
            pickUpSpeed        = 1.5f - distanceToPlayer;                                                                          //become faster while distance decreases (like a magnet)
            transform.position = Vector2.MoveTowards(transform.position, nearestTransform.position, pickUpSpeed * Time.deltaTime); //move towards player by pickUpSpeed speed
            tempVal            = transform.position.y;                                                                             //respond for UpDown transform if magnet sequence interrupted (without it emotion will transform to position where it spawned)
            tempPos            = transform.position;

            // check in update if touching nearest Collider
            if (this.GetComponent <BoxCollider2D>().IsTouching(nearestTransform.GetComponent <BoxCollider2D>()))
            {
                Debug.Log("Closest emotion controller parent: " + closestEmotionController.transform.parent.tag);
                Debug.Log("After comparing colliders: " + this.name + " with " + nearestTransform.name);
                switch (emotionColor)
                {
                case EmotionColor.blue: closestEmotionController.SaveEmotionWorld(this.gameObject); closestEmotionController.Handle(EmotionColor.blue); break;

                case EmotionColor.green: closestEmotionController.SaveEmotionWorld(this.gameObject); closestEmotionController.Handle(EmotionColor.green); break;

                case EmotionColor.pink: closestEmotionController.SaveEmotionWorld(this.gameObject); closestEmotionController.Handle(EmotionColor.pink); break;

                case EmotionColor.purple: closestEmotionController.SaveEmotionWorld(this.gameObject); closestEmotionController.Handle(EmotionColor.purple); break;

                case EmotionColor.yellow: closestEmotionController.SaveEmotionWorld(this.gameObject); closestEmotionController.Handle(EmotionColor.yellow); break;

                default: break;
                }
            }
        }
    }