public void Init(Vector3 g_position, Vector3 g_spawnPosition, float g_spawnRadius, PP_BeanSpawnPoint g_manager = null) { myManager = g_manager; this.transform.position = g_position; myButts = GameObject.FindGameObjectsWithTag("Butt"); myTargets = new Vector3[5]; for (int i = 0; i < myTargets.Length; i++) { Vector3 t_targetPoint = g_spawnPosition + (Vector3)Random.insideUnitCircle.normalized * g_spawnRadius; t_targetPoint.x = Mathf.Clamp(t_targetPoint.x, PP_BeanManager.Instance.GetBounds().x * -1f, PP_BeanManager.Instance.GetBounds().x); t_targetPoint.y = Mathf.Clamp(t_targetPoint.y, PP_BeanManager.Instance.GetBounds().y * -1f, PP_BeanManager.Instance.GetBounds().y); myTargets [i] = t_targetPoint; } myState = PP_Global.BeanStatus.Idle; if (g_manager == null) { transform.position = g_spawnPosition; myCurrentTarget = 0; } else { transform.position = myTargets [0]; myCurrentTarget = 1; } GetDirection(myTargets[myCurrentTarget]); Look(); this.gameObject.SetActive(true); myAnimator.SetInteger("Type", (int)Random.Range(0, 4)); }
public void Stun() { if (myState != PP_Global.BeanStatus.Frozen) { Debug.Log("bean down"); GetComponent <Animator> ().SetBool("isStunned", true); GetComponent <SpriteRenderer> ().color = new Color(0.75f, 0.75f, 0.75f); myState = PP_Global.BeanStatus.Frozen; myStatus_FreezeTimer = 0f; } }
void FixedUpdate() { if (myState == PP_Global.BeanStatus.Idle) { GetComponent <Animator> ().SetBool("isStunned", false); GetComponent <SpriteRenderer> ().color = Color.white; GetDirection(myTargets [myCurrentTarget]); Look(); mySpeed = myIdleSpeed; if ((myTargets [myCurrentTarget] - transform.position).magnitude < 0.5f) { myCurrentTarget = (myCurrentTarget + 1) % myTargets.Length; GetDirection(myTargets [myCurrentTarget]); Look(); } //check if it should run away from a butt int t_ClosestButt = -1; float t_ClosestDistance = 0f; for (int i = 0; i < myButts.Length; i++) { if (((Vector2)(myButts [i].transform.position) - (Vector2)(transform.position)).sqrMagnitude < myButtDistance) { float t_Distance = ((Vector2)(myButts [i].transform.position) - (Vector2)(transform.position)).sqrMagnitude; if (t_Distance < t_ClosestDistance || t_ClosestDistance == 0f) { t_ClosestButt = i; t_ClosestDistance = t_Distance; } } } if (t_ClosestButt > -1) { myState = PP_Global.BeanStatus.Running; Vector3 t_direction = ((Vector2)(transform.position) - (Vector2)(myButts [t_ClosestButt].transform.position)); Vector3 t_target = transform.position + t_direction.normalized * 100f; GetDirection(t_target); Look(); } } else if (myState == PP_Global.BeanStatus.Running) { // GetComponent<SpriteRenderer> ().color = Color.red; mySpeed = myRunningSpeed; PP_Global.BeanStatus t_MyState = PP_Global.BeanStatus.Idle; for (int i = 0; i < myButts.Length; i++) { //stay running if either butt is too close if (((Vector2)(myButts [i].transform.position) - (Vector2)(transform.position)).sqrMagnitude < myButtDistance * 2f) { Vector3 t_direction = ((Vector2)(transform.position) - (Vector2)(myButts [i].transform.position)); Vector3 t_target = transform.position + t_direction.normalized * 100f; GetDirection(t_target); Look(); t_MyState = PP_Global.BeanStatus.Running; } } myState = t_MyState; } else if (myState == PP_Global.BeanStatus.Frozen) { mySpeed = 0f; myStatus_FreezeTimer += Time.deltaTime; if (myStatus_FreezeTimer > myStatus_FreezeTime) { myState = PP_Global.BeanStatus.Idle; } } transform.position += myDirection * mySpeed * Time.fixedDeltaTime; UpdateRotation(); }