/// <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]++; }
public bool CheckHearingAwareness() { AwarenessState currentState = trollState.GetStateComponent(); float hearingDistance = currentState.hearingDistance; if (distToPlayer < hearingDistance) { return(true); } return(false); }
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!"); } }
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); }
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); }
// 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; } }
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); }