/*--------------------------------------------------------------------------------*/ public Vector2 GetVAInterPolated(float radialRatio, float angularRatio, Character2D.Mood innerface_1, Character2D.Mood innerface_2, Character2D.Mood outerface_1, Character2D.Mood outerface_2) { float innerValence, innerArousal, outerValence, outerArousal, valence, arousal; if (innerface_1 == 0 && innerface_2 == 0) { innerValence = Character2D.getValence(Character2D.Mood.NEUTRAL); innerArousal = Character2D.getArousal(Character2D.Mood.NEUTRAL); } else { innerValence = angularRatio * Character2D.getValence(innerface_1); innerValence += (1 - angularRatio) * Character2D.getValence(innerface_2); innerArousal = angularRatio * Character2D.getArousal(innerface_1); innerArousal += (1 - angularRatio) * Character2D.getArousal(innerface_2); } outerValence = angularRatio * Character2D.getValence(outerface_1); outerValence += (1 - angularRatio) * Character2D.getValence(outerface_2); valence = (1 - radialRatio) * innerValence + radialRatio * outerValence; outerArousal = angularRatio * Character2D.getArousal(outerface_1); outerArousal += (1 - angularRatio) * Character2D.getArousal(outerface_2); arousal = (1 - radialRatio) * innerArousal + radialRatio * outerArousal; return(new Vector2(valence, arousal)); }
/*--------------------------------------------------------------------------------*/ public void SetMoodInterPolated(float radialRatio, float angularRatio, Character2D.Mood innerface_1, Character2D.Mood innerface_2, Character2D.Mood outerface_1, Character2D.Mood outerface_2) { float value, innerValue, outerValue; for (int key = 0; key < Character2D.MAX_FACE_KEYS; key++) { innerValue = angularRatio * Character2D.getKeyShapeVal(Character2D.Part.FACE, innerface_1, key); innerValue += (1 - angularRatio) * Character2D.getKeyShapeVal(Character2D.Part.FACE, innerface_2, key); outerValue = angularRatio * Character2D.getKeyShapeVal(Character2D.Part.FACE, outerface_1, key); outerValue += (1 - angularRatio) * Character2D.getKeyShapeVal(Character2D.Part.FACE, outerface_2, key); value = (1 - radialRatio) * innerValue + radialRatio * outerValue; meshRendererFace.SetBlendShapeWeight(key, value); } for (int key = 0; key < Character2D.MAX_EYE_KEYS; key++) { innerValue = angularRatio * Character2D.getKeyShapeVal(Character2D.Part.EYES, innerface_1, key); innerValue += (1 - angularRatio) * Character2D.getKeyShapeVal(Character2D.Part.EYES, innerface_2, key); outerValue = angularRatio * Character2D.getKeyShapeVal(Character2D.Part.EYES, outerface_1, key); outerValue += (1 - angularRatio) * Character2D.getKeyShapeVal(Character2D.Part.EYES, outerface_2, key); value = (1 - radialRatio) * innerValue + radialRatio * outerValue; meshRendererEyes.SetBlendShapeWeight(key, value); } }
/*--------------------------------------------------------------------------------*/ public void SetMood(Character2D.Mood newMood) { mood = newMood; for (int key = 0; key < Character2D.MAX_FACE_KEYS; key++) { meshRendererFace.SetBlendShapeWeight(key, Character2D.getKeyShapeVal(Character2D.Part.FACE, mood, key)); } for (int key = 0; key < Character2D.MAX_EYE_KEYS; key++) { meshRendererEyes.SetBlendShapeWeight(key, Character2D.getKeyShapeVal(Character2D.Part.EYES, mood, key)); } }
/*--------------------------------------------------------------------------------*/ public void SetMoodInterPolated(float intensity, Character2D.Mood face_1, Character2D.Mood face_2, float ratio) { float value; for (int key = 0; key < Character2D.MAX_FACE_KEYS; key++) { value = ratio * Character2D.getKeyShapeVal(Character2D.Part.FACE, face_1, key); value += (1 - ratio) * Character2D.getKeyShapeVal(Character2D.Part.FACE, face_2, key); value *= intensity; meshRendererFace.SetBlendShapeWeight(key, value); } for (int key = 0; key < Character2D.MAX_EYE_KEYS; key++) { value = ratio * Character2D.getKeyShapeVal(Character2D.Part.EYES, face_1, key); value += (1 - ratio) * Character2D.getKeyShapeVal(Character2D.Part.EYES, face_2, key); value *= intensity; meshRendererEyes.SetBlendShapeWeight(key, value); } }