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); } } }
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; } } } }