private void Awake() { ui = FindObjectOfType <UI_Manager>(); timer = TIMER_START; socialState = Social_State.interacting; moodState = Mood_State.neutral; }
// Adds to current PAD Values public void gestureEffect(float p, float a, float d) { socialState = Social_State.interacting; pleasure += p; arousal += a; dominance += d; pleasure = Mathf.Clamp(pleasure, -1.0f, 1.0f); arousal = Mathf.Clamp(arousal, -1.0f, 1.0f); dominance = Mathf.Clamp(dominance, -1.0f, 1.0f); ui.UpdatePADText(pleasure.ToString("0.00"), arousal.ToString("0.00"), dominance.ToString("0.00")); }
// Changes the current NPC social state (e.g. waiting, noInteraction, interacting) public void ChangeSocialState(Social_State state) { socialState = state; }
// Performs behaviour adjustments based on current PAD private void EvaluatePAD() //*************************************** { // ============== Materials ============== // Neutral if ((pleasure == 0.0f && arousal == 0.0f && dominance == 0.0f) && meshRenderer.material != emotiveMaterials[0]) { meshRenderer.material = emotiveMaterials[0]; moodState = Mood_State.neutral; } //Happy else if ((pleasure > 0.0f && arousal > 0.0f && dominance < 0.0f) && meshRenderer.material != emotiveMaterials[1]) { meshRenderer.material = emotiveMaterials[1]; moodState = Mood_State.happy; } //Scared else if ((pleasure < 0.0f && arousal > 0.0f && dominance < 0.0f) && meshRenderer.material != emotiveMaterials[2]) { meshRenderer.material = emotiveMaterials[2]; moodState = Mood_State.sad; } //Angry else if ((pleasure < 0.0f && arousal > 0.0f && dominance > 0.0f) && meshRenderer.material != emotiveMaterials[3]) { meshRenderer.material = emotiveMaterials[3]; moodState = Mood_State.angry; } aniManager.AnimationEvaluation(moodState); /* Check PAD values then: * - Change State Material [x] * - Change Animation emphasis(Sad = Sad Wave) [x] * - Change Sound Files(Angry = Angry Speech) [ ] */ // Check Social state switch (socialState) { case Social_State.interacting: // Reset Bordem Timer timer = TIMER_START; socialState = Social_State.noInteraction; break; case Social_State.noInteraction: // Decrease timer for bordem if (timer >= 0.0f) { timer -= Time.deltaTime; } else if (arousal >= -1.0f) { BordemDecrease(); } break; case Social_State.waiting: // Ignore this enum break; default: Debug.LogError("Social_State not initialised!"); break; } }