/// <summary> /// Check if a contact is dangerous to the wolf /// </summary> /// <param name="contact"></param> /// <param name="potentialState"></param> private void checkContact(Transform contact, WOLF_STATE potentialState) { PartyMember partyMember = contact.GetComponent<PartyMember>(); if (partyMember == null) // In case the contact was a weapon { WeaponController weaponController = contact.GetComponent<WeaponController>(); if (weaponController) { partyMember = weaponController.owner; } else { return; } } else { if (partyMember.following == null) // If contacted a dropped member { if (Vector3.Distance(wolfMover.position, partyMember.transform.position) - Vector3.Distance(wolfMover.position, partyMember.lastPosition) > 0) // Quit if they're moving away { return; } } else // If contacted a party member see the main member { partyMember = PlayerController.getInstance().mainMember; if (Vector3.Distance(wolfMover.position, partyMember.transform.position) - Vector3.Distance(wolfMover.position, partyMember.lastPosition) > 0) // Quit if they're moving away { return; } } } // TODO: Whitelistpossible targets Debug.Log(partyMember.gameObject + " " + potentialState.ToString()); attackTarget = partyMember.transform; setState(potentialState); }
/// <summary> /// Set's the Wolf's state /// </summary> /// <param name="newState"></param> public void setState(WOLF_STATE newState) { Debug.Log(transform.parent.name + " new state: " + newState.ToString()); curState = newState; switch (curState) { case WOLF_STATE.ATTACKING: initState(null, MAX_ANGER, true); wolfUpdate = wolfAttack; break; case WOLF_STATE.DEFENSIVE: initState(ANIM_DEF, angerInc, false); wolfUpdate = wolfDefend; break; default: initState(LiveBody.ANIM_WALK, 0, false); wolfUpdate = wolfPatrol; break; } }