/// <summary>
 /// When alerting an enemy to a certin alertness level,call this method to record
 /// the action, and punish the users score
 /// </summary>
 /// <param name="alertLevel">Level of alertness the player has alerted an enemy to</param>
 ///<param name="prevAlertLevel">Previous level of alertness the enemy was at</param>
 public void EnemyAlerted(AwarenessState prevAlertLevel, AwarenessState alertLevel)
 {
     if (awarnessWeight[alertLevel] > awarnessWeight[prevAlertLevel]) ///if the new alertness level is 'better' then the old one
     {
         return;                                                      //////we wont record it, because we only record the worst
     }
     enemiesAlerted[prevAlertLevel]--;
     enemiesAlerted[alertLevel]++;
 }
Example #2
0
    public bool CheckHearingAwareness()
    {
        AwarenessState currentState    = trollState.GetStateComponent();
        float          hearingDistance = currentState.hearingDistance;

        if (distToPlayer < hearingDistance)
        {
            return(true);
        }
        return(false);
    }
Example #3
0
 public void SetState(AwarenessState newState)
 {
     if (stateTable.ContainsValue(newState))
     {
         SetState(newState.type);
     }
     else
     {
         Debug.LogError("state " + newState + " is not part of the TrollState state table!");
     }
 }
Example #4
0
    bool UpdateVisionAwareness()
    {
        if (CheckVisionAwareness())
        {
            // Get values from awareness state
            AwarenessState currentState = trollState.GetStateComponent();
            float          multiplier   = currentState.visionIncrease;
            float          viewDistance = currentState.viewDistance;
            float          viewAngle    = currentState.viewAngle;

            float dA_dist  = multiplier * (1 - (distToPlayer / viewDistance));
            float dA_angle = multiplier * (1 - (Mathf.Abs(angleToPlayer) / viewAngle));
            float dA       = dA_dist + dA_angle;
            awareness += dA;
            return(true);
        }
        return(false);
    }
Example #5
0
    bool UpdateHearingAwareness()
    {
        if (CheckHearingAwareness())
        {
            // TODO:
            AwarenessState currentState    = trollState.GetStateComponent();
            float          multiplier      = currentState.hearingIncrease;
            float          hearingDistance = currentState.hearingDistance;

            float playerSpeed = player.GetComponent <Velocity>().Value().magnitude;
            Debug.Log("Player velocity: " + playerSpeed);

            float dA_dist = multiplier * (1 - (distToPlayer / hearingDistance)) * playerSpeed - currentState.awarenessDecrease;
            awareness += dA_dist;

            return(true);
        }
        return(false);
    }
Example #6
0
    // Update is called once per frame
    void Update()
    {
        // Get awareness value for currently active state
        AwarenessState currentState = trollState.GetStateComponent();

        //if(currentState.atMax())
        //{
        //
        //}



        // Update awareness

        distToPlayer  = Vector3.Distance(transform.position, player.position);
        angleToPlayer = Quaternion.FromToRotation(head.forward, player.position - transform.position).eulerAngles.y;
        angleToPlayer = angleToPlayer > 180 ? angleToPlayer = angleToPlayer - 360 : angleToPlayer;

        bool awarenessUpdated = UpdateVisionAwareness() ||
                                UpdateHearingAwareness() ||
                                UpdateSmellAwareness();


        if (!awarenessUpdated)
        {
            awareness = awareness - currentState.awarenessDecrease;
        }

        visionState = VisionState.UNSEEN;
        if (currentState.checkMin(awareness))
        {
            awareness = currentState.min;
        }

        if (currentState.checkMax(awareness))
        {
            awareness   = currentState.max;
            visionState = VisionState.SEEN;
        }
    }
Example #7
0
    public bool CheckVisionAwareness()
    {
        AwarenessState currentState = trollState.GetStateComponent();
        float          viewDistance = currentState.viewDistance;
        float          viewAngle    = currentState.viewAngle;

        if (distToPlayer < viewDistance)
        {
            if (angleToPlayer > -viewAngle && angleToPlayer < viewAngle)
            {
                // Check line of sight
                Ray        ray = new Ray(head.position, player.position - head.position);
                RaycastHit hit;
                if (Physics.Raycast(ray, out hit, viewDistance))
                {
                    if (hit.transform == player.transform)
                    {
                        return(true);
                    }
                }
            }
        }
        return(false);
    }