// Update is called once per frame void Update() { if (talkTime > 0) { talkTime -= Time.deltaTime; } if (Talk.activeSelf && talkTime <= 0) { talkTime = 0; Talk.SetActive(false); } //set to correct look direction when moving towards selected if (Selected != null && state == State.Move) { float scale = gameObject.transform.localScale.x; if (scale < 0 && Selected.transform.position.x < gameObject.transform.position.x) { gameObject.transform.localScale = new Vector3(scale * -1, 60, 1); } else if (scale > 0 && Selected.transform.position.x >= gameObject.transform.position.x) { gameObject.transform.localScale = new Vector3(scale * -1, 60, 1); } } //set text bubble to correct direction if (gameObject.transform.localScale.x > 0 && Talk.transform.localScale.x < 0) { Talk.transform.localScale = new Vector3(-Talk.transform.localScale.x, Talk.transform.localScale.y, Talk.transform.localScale.z); if (Talk.transform.localPosition == originalTalkPos) { Talk.transform.localPosition = new Vector3(-originalTalkPos.x, Talk.transform.localPosition.y, Talk.transform.localPosition.z); } } else if (gameObject.transform.localScale.x < 0 && Talk.transform.localScale.x > 0) { Talk.transform.localScale = new Vector3(-Talk.transform.localScale.x, Talk.transform.localScale.y, Talk.transform.localScale.z); if (Talk.transform.localPosition != originalTalkPos) { Talk.transform.localPosition = originalTalkPos; } } switch (state) { case State.Idle: Sounds.CatStop(); OriginalTexture(); WalkLines.SetActive(false); gameObject.transform.localScale = new Vector3(-60, 60, 1); break; case State.Move: if (!Sounds.CatSource.isPlaying) { Sounds.CatWalking(); } WalkLines.SetActive(true); gameObject.GetComponent <Animator>().SetBool("Move", true); gameObject.transform.position = Vector3.MoveTowards(gameObject.transform.position, Selected.transform.position, speed * Time.deltaTime); if (gameObject.GetComponent <Collider>().bounds.Contains(Selected.transform.position) && Selected.tag == "Food") { Selected.GetComponent <Food>().held = true; GrabFood(); } break; case State.Return: float magnitude = (originalPos - gameObject.transform.position).magnitude; if (!Sounds.CatSource.isPlaying) { Sounds.CatWalking(); } //set correct look direction when returning to original position if (originalPos.x < gameObject.transform.position.x) { gameObject.transform.localScale = new Vector3(60, 60, 1); } else { gameObject.transform.localScale = new Vector3(-60, 60, 1); } WalkLines.SetActive(true); if (magnitude > 0.5) { gameObject.transform.position = Vector3.MoveTowards(gameObject.transform.position, originalPos, speed * Time.deltaTime); } else { gameObject.transform.position = originalPos; gameObject.GetComponent <Animator>().SetBool("Move", false); Selected = null; state = State.Idle; } break; case State.Twitch: Sounds.CatStop(); OriginalTexture(); WalkLines.SetActive(false); gameObject.GetComponent <Animator>().SetTrigger("Twitch"); gameObject.GetComponent <Animator>().SetBool("Move", false); if (gameObject.transform.position != originalPos) { if (gameObject.GetComponent <Animator>().GetCurrentAnimatorStateInfo(0).IsName("Twitch")) { wait = true; } else { if (wait && gameObject.GetComponent <Animator>().GetCurrentAnimatorStateInfo(0).IsName("Idle")) { wait = false; state = State.Return; } } } else { state = State.Idle; } break; case State.Reach: Sounds.CatStop(); WalkLines.SetActive(false); gameObject.GetComponent <Animator>().SetTrigger("Reach"); if (gameObject.GetComponent <Animator>().GetCurrentAnimatorStateInfo(0).IsName("Reach")) { reach = true; } else if (reach && gameObject.GetComponent <Animator>().GetCurrentAnimatorStateInfo(0).IsName("Walk")) { Destroy(Held); reach = false; state = State.Return; } break; } }