예제 #1
0
    /// <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);
    }
예제 #2
0
    /// <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;

        }
    }