// Update is called once per frame new void FixedUpdate() { base.FixedUpdate(); if (Hp < MaxHp * 0.2f) { state = BoarState.Flee; } if (state == BoarState.Flee && Hp > MaxHp * 0.7f) { state = BoarState.Normal; } if (foodTarget) { // food is too far to see if ((foodTarget.position - transform.position).magnitude > visionRadius) { foodTarget = null; } } if (!foodTarget) { boarTarget = null; } if (boarTarget) { if (state == BoarState.Normal) { // other boar runs away if ((boarTarget.position - foodTarget.position).magnitude > (visionRadius - 1.0f)) { boarTarget = null; } } else if (state == BoarState.Flee) { // TODO: multiple boar flee if ((boarTarget.position - transform.position).magnitude > (visionRadius + 1.0f)) { boarTarget = null; } } } if (state == BoarState.Normal && boarTarget && waitAttack == false) { if ((boarTarget.position - transform.position).magnitude < 1.5f) { Attack(boarTarget.GetComponent <Character>()); waitAttack = true; StartCoroutine(attackCooldown()); } } }
// Use this for initialization new void Start() { base.Start(); // default speed //rb2D.velocity = new Vector2(Random.Range(-1f, 1f), Random.Range(-1f, 1f)).normalized * speed; state = BoarState.Normal; StartCoroutine(Wander()); animator = GetComponent <Animator>(); animator.SetBool("Move", true); visionRadius = transform.Find("Vision").GetComponent <CircleCollider2D>().radius; }