Files
2025-05-29 22:31:40 +03:00

866 lines
35 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System.Collections;
using System.Collections.Generic;
using TMPro;
using UnityEngine;
using PuppetFace;
[System.Serializable]
public class PoseControllerAvailablePoses
{
[Header("Body")]
public List<string> BodyPosesAnimationNames;
public List<string> BodyPosesNames;
[Header("Face")]
public List<string> FacePosesAnimationNames;
public List<string> FacePosesNames;
[Header("Head")]
public Transform HeadLookAt;
public float HeadUpDownMin;
public float HeadUpDownMax;
public float HeadLeftRightMin;
public float HeadLeftRightMax;
[Header("Eyes")]
public float EyesUpDownMin;
public float EyesUpDownMax;
public float EyesLeftRightMin;
public float EyesLeftRightMax;
}
[System.Serializable]
public class PoseControllerAvailableCharacters
{
public GameObject PlayerPosingCharacter;
public Animator PlayerPosingCharacterAnimator;
public List<SkinnedMeshRenderer> PlayerActiveSkinnedMeshes = new List<SkinnedMeshRenderer>();
public GameObject MedeaPosingCharacter;
public Animator MedeaPosingCharacterAnimator;
public List<SkinnedMeshRenderer> MedeaActiveSkinnedMeshes = new List<SkinnedMeshRenderer>();
}
public class PoseManager : MonoBehaviour
{
public Quaternion temporarilySavedPlayerRot;
public Vector3 temporarilySavedPlayerPos;
private SkinnedMeshRenderer[] _currentCharacterSkinnedMeshes;
private SkinnedMeshRenderer[] _companionSkinnedMeshes;
private MeshRenderer[] _butterflyMeshRenderers;
public bool _currentlySelectedCharacterIsHidden;
public bool _companionIsHidden;
private GameObject previousSelectedCharacter;
private Animator previousSelectetCharacterAnimator;
public List<SkinnedMeshRenderer> previousSelectedCharacterActiveSkinnedMeshes = new List<SkinnedMeshRenderer>();
public GameObject currentCharacter;
public Animator currentCharacterAnimator;
public int currentCharacterAnimFaceLayer;
public int currentCharacterAnimBodyLayer;
public List<SkinnedMeshRenderer> currentSelectedCharacterActiveSkinnedMeshes = new List<SkinnedMeshRenderer>();
public List<string> currentCharacterBodyPosesAnimationNames;
public List<string> currentCharacterBodyPosesNames;
public List<string> currentCharacterFacePosesAnimationNames;
public List<string> currentCharacterFacePosesNames;
public Transform currentCharacterHeadLookAt;
public float currentCharacterHeadUpDownMin;
public float currentCharacterHeadUpDownMax;
public float currentCharacterHeadLeftRightMin;
public float currentCharacterHeadLeftRightMax;
public float currentCharacterEyesUpDownMin;
public float currentCharacterEyesUpDownMax;
public float currentCharacterEyesLeftRightMin;
public float currentCharacterEyesLeftRightMax;
[SerializeField] private TextMeshProUGUI _bodyPoseName;
[SerializeField] private TextMeshProUGUI _facePoseName;
[SerializeField] private TextMeshProUGUI _outfitName;
[SerializeField] private GameObject _outfitChangePanel;
[SerializeField] private AvatarMask avatarmaskBodyPart;
[SerializeField] private int _indexPoses = 0;
[SerializeField] private int _bodyPose = 1;
[SerializeField] private int _indexFaces = 0;
[SerializeField] private int _facePose = 1;
[SerializeField] private int _indexOutfits = 0;
[SerializeField] private int _Outftis = 1;
public List<float> time;
public List<int> nameHash;
public List<string> animationName;
[Header("Butterfly Pose Values")]
[SerializeField] private GameObject _butterflyObj;
[SerializeField] private Transform _ChloeFinger;
[SerializeField] private Transform _MaxFinger;
private HairFront hairFrontDynamicBone;
private bool _butterflyPose;
[Header("Max's Face Material")]
private Renderer _faceRenderer;
private EyeMotion _eyeMotion;
[HideInInspector] public bool eyesMotionON;
//[SerializeField] private Renderer _MaxsfaceRenderer;
//[SerializeField] private Renderer _ChloesfaceRenderer;
//[SerializeField] private EyeMotion _MaxsEyeMotion;
//[SerializeField] private EyeMotion _ChloesEyeMotion;
private float crySmoothnessDefaultValue;
private float nosebleedSmoothnessDefaultValue;
private float _headUpDownDefaultValue;
private float _headLeftRightDefaultValue;
private float _eyesUpDownDefaultValue;
private float _eyesLeftRightDefaultValue;
[Header("Eyes Motion Min/Max Values")]
[Header("Max")]
[SerializeField] private float _MaxEyesUpDownMinValue = 0f;
[SerializeField] private float _MaxEyesUpDownMaxValue = 100f;
[SerializeField] private float _MaxEyesLeftRightMinValue = -100f;
[SerializeField] private float _MaxEyesLeftRightMaxValue = 0f;
[Header("Chloe")]
[SerializeField] private float _ChloeEyesUpDownMinValue = -60f;
[SerializeField] private float _ChloeEyesUpDownMaxValue = 10f;
[SerializeField] private float _ChloeEyesLeftRightMinValue = -60f;
[SerializeField] private float _ChloeEyesLeftRightMaxValue = 60f;
//[Header("Replace Character Models")]
//[SerializeField] private ReplaceCharacterModel _MaxReplaceCharacterModel;
//[SerializeField] private ReplaceCharacterModel _ChloeReplaceCharacterModel;
//[SerializeField] private ReplaceCharacterModel _replaceCharacterModel;
float speedPercentSavedValue;
public PoseControllerAvailableCharacters poseControllerAvailableCharacters;
public PoseControllerAvailablePoses poseControllerAvailablePosesForPlayer;
public PoseControllerAvailablePoses poseControllerAvailablePosesForMedea;
private int _indexBodyPose = 0;
private int _indexFacePose = 0;
private static PoseManager _instance;
public static PoseManager Getinstance() { return _instance; }
public void Awake()
{
if (!_instance)
{
_instance = this;
}
_butterflyObj.SetActive(false);
for (int i = 0; i < 3; i++)
{
time.Add(i);
nameHash.Add(i);
animationName.Add("");
}
}
private void Start()
{
poseControllerAvailableCharacters.PlayerPosingCharacter = PlayerManager.GetInstance().playerGameObj;
poseControllerAvailableCharacters.PlayerPosingCharacterAnimator = PlayerManager.GetInstance()._PlayerMovement._CharacterAnimator;
currentCharacter = poseControllerAvailableCharacters.PlayerPosingCharacter;
currentCharacterAnimator = poseControllerAvailableCharacters.PlayerPosingCharacterAnimator;
currentSelectedCharacterActiveSkinnedMeshes = poseControllerAvailableCharacters.PlayerActiveSkinnedMeshes;
foreach (var skinnedMesh in currentCharacter.GetComponentsInChildren<SkinnedMeshRenderer>())
{
if (skinnedMesh.enabled) // Ελέγχουμε αν είναι ενεργό
{
poseControllerAvailableCharacters.PlayerActiveSkinnedMeshes.Add(skinnedMesh); // Το προσθέτουμε στη λίστα
}
}
currentCharacterBodyPosesAnimationNames = new List<string>(poseControllerAvailablePosesForPlayer.BodyPosesAnimationNames);
currentCharacterBodyPosesNames = new List<string>(poseControllerAvailablePosesForPlayer.BodyPosesNames);
currentCharacterFacePosesAnimationNames = new List<string>(poseControllerAvailablePosesForPlayer.FacePosesAnimationNames);
currentCharacterFacePosesNames = new List<string>(poseControllerAvailablePosesForPlayer.FacePosesNames);
previousSelectedCharacter = currentCharacter;
previousSelectetCharacterAnimator = currentCharacterAnimator;
previousSelectedCharacterActiveSkinnedMeshes = currentSelectedCharacterActiveSkinnedMeshes;
}
void OnValidate()
{
#if UNITY_EDITOR
if (!Application.isPlaying)
{
//if (PlayersManager.GetInstance()._MaxReplaceCharacterModel == null)
//{
// PlayersManager.GetInstance()._MaxReplaceCharacterModel = GameObject.Find("ReplaceCharacterModel (Max)").GetComponent<ReplaceCharacterModel>();
// #region Max finger set up
// #endregion
//}
//if (PlayersManager.GetInstance()._ChloeReplaceCharacterModel == null)
//{
// PlayersManager.GetInstance()._ChloeReplaceCharacterModel = GameObject.Find("ReplaceCharacterModel (Chloe)").GetComponent<ReplaceCharacterModel>();
// #region Chloe finger set up
// #endregion
// print("Character Models Replace is set");
//}
//if (PlayersManager.GetInstance().MaxReplaceCharacterModel != null)
//{
// #region Max finger set up
// _MaxFinger = PlayersManager.GetInstance().MaxReplaceCharacterModel.characterBase.transform.Find
// ("CharacterModelPivot/" + PlayersManager.GetInstance().MaxReplaceCharacterModel.characterModelName
// + "/Reference/Hips/Spine/Spine1/Spine2/RightShoulder/RightArm/RightArmRoll/RightForearm/RightForearmRoll/RightHand/RightHandIndex1/RightHandIndex2").transform;
// #endregion
//}
//if (PlayersManager.GetInstance().ChloeReplaceCharacterModel != null)
//{
// #region Chloe finger set up
// _ChloeFinger = PlayersManager.GetInstance().ChloeReplaceCharacterModel.characterBase.transform.Find
// ("CharacterModelPivot/" + PlayersManager.GetInstance().ChloeReplaceCharacterModel.characterModelName
// + "/Reference/Hips/Spine/Spine1/Spine2/RightShoulder/RightArm/RightArmRoll/RightForearm/RightForearmRoll/RightHand/RightHandIndex1/RightHandIndex2").transform;
// #endregion
//}
}
#endif
}
public void SetCharacterFingers()
{
//if (PlayersManager.GetInstance().ChloeIsPlaying)
//{
// _ChloeFinger = PlayersManager.GetInstance().ChloeReplaceCharacterModel.characterBase.transform.Find("CharacterModelPivot/" + PlayersManager.GetInstance().ChloeReplaceCharacterModel.characterModelName +
// "/Reference/Hips/Spine/Spine1/Spine2/RightShoulder/RightArm/RightArmRoll/RightForearm/RightForearmRoll/RightHand/RightHandIndex1/RightHandIndex2").transform;
//}
//else
//{
// _MaxFinger = PlayersManager.GetInstance().MaxReplaceCharacterModel.characterBase.transform.Find("CharacterModelPivot/" + PlayersManager.GetInstance().MaxReplaceCharacterModel.characterModelName +
// "/Reference/Hips/Spine/Spine1/Spine2/RightShoulder/RightArm/RightArmRoll/RightForearm/RightForearmRoll/RightHand/RightHandIndex1/RightHandIndex2").transform;
//}
}
private IEnumerator GetHairFront()
{
//hairFrontDynamicBone = PlayersManager.GetInstance()._playerGameObject.GetComponentInChildren<HairFront>();
//hairFrontDynamicBone.hairFrontDynamicBone.enabled = false;
yield return new WaitForSecondsRealtime(0.1f);
//hairFrontDynamicBone.hairFrontDynamicBone.enabled = true;
}
public void EyesMotionON()
{
PhotomodeManager.GetInstance()._eyesUpDownSlider.interactable = true;
PhotomodeManager.GetInstance()._eyesLeftRightSlider.interactable = true;
if (_eyeMotion != null)
{
_eyeMotion.enabled = true;
}
//Check UI:
PhotomodeManager.GetInstance().EyesControlONCheckUI.SetActive(true);
PhotomodeManager.GetInstance().EyesControlOFFCheckUI.SetActive(false);
if (_eyeMotion != null)
{
eyesMotionON = true;
}
}
public void EyesMotionOFF()
{
PhotomodeManager.GetInstance()._eyesUpDownSlider.interactable = false;
PhotomodeManager.GetInstance()._eyesLeftRightSlider.interactable = false;
if (_eyeMotion != null)
{
_eyeMotion.enabled = false;
}
//Check UI:
PhotomodeManager.GetInstance().EyesControlONCheckUI.SetActive(false);
PhotomodeManager.GetInstance().EyesControlOFFCheckUI.SetActive(true);
if (_eyeMotion != null)
{
eyesMotionON = false;
}
}
public void UpdateFaceRendererValues()
{
if (currentCharacter.TryGetComponent<FaceRenderer>(out var faceRenderer))
{
_faceRenderer = faceRenderer.faceRenderer;
}
else
{
Debug.LogWarning("FaceRenderer component not found on " + currentCharacter.name);
}
if (currentCharacterHeadLookAt != null)
{
PhotomodeManager.GetInstance()._headUpDownSlider.minValue = currentCharacterHeadUpDownMin;
PhotomodeManager.GetInstance()._headUpDownSlider.maxValue = currentCharacterHeadUpDownMax;
PhotomodeManager.GetInstance()._headLeftRightSlider.minValue = currentCharacterHeadLeftRightMin;
PhotomodeManager.GetInstance()._headLeftRightSlider.maxValue = currentCharacterHeadLeftRightMax;
}
_eyeMotion = currentCharacter.GetComponentInChildren<EyeMotion>();
if (_eyeMotion == null)
{
Debug.LogWarning("EyeMotion component not found in children of " + currentCharacter.name);
}
//PlayersManager.GetInstance().replaceCharacterModel = PlayersManager.GetInstance().MaxReplaceCharacterModel;
PhotomodeManager.GetInstance()._eyesUpDownSlider.minValue = currentCharacterEyesUpDownMin;
PhotomodeManager.GetInstance()._eyesUpDownSlider.maxValue = currentCharacterEyesUpDownMax;
PhotomodeManager.GetInstance()._eyesLeftRightSlider.minValue = currentCharacterEyesLeftRightMin;
PhotomodeManager.GetInstance()._eyesLeftRightSlider.maxValue = currentCharacterEyesLeftRightMax;
}
public void Cry_NoseBleed_SmoothnessDefaultValues()
{
//if(_faceRenderer!=null)
//crySmoothnessDefaultValue = _faceRenderer.material.GetFloat("_CrySmoothness_1");
//nosebleedSmoothnessDefaultValue = _faceRenderer.material.GetFloat("_NoseBleedSmoothness");
if(currentCharacterHeadLookAt!=null)
_headUpDownDefaultValue = currentCharacterHeadLookAt.localPosition.y;
_headLeftRightDefaultValue = currentCharacterHeadLookAt.localPosition.x;
PhotomodeManager.GetInstance()._headUpDownSlider.value = _headUpDownDefaultValue;
PhotomodeManager.GetInstance()._headLeftRightSlider.value = _headLeftRightDefaultValue;
}
public void EyeMotionDefaultValues()
{
_eyesUpDownDefaultValue = _eyeMotion.LookAtTarget.localPosition.y;
_eyesLeftRightDefaultValue = _eyeMotion.LookAtTarget.localPosition.x;
PhotomodeManager.GetInstance()._eyesUpDownSlider.value = _eyesUpDownDefaultValue;
PhotomodeManager.GetInstance()._eyesLeftRightSlider.value = _eyesLeftRightDefaultValue;
}
public void UpdateFaceRenderer()
{
//if (_faceRenderer != null)
//{
// _faceRenderer.material.SetFloat("_CrySmoothness_1", PhotomodeManager.GetInstance()._headUpDownSlider.value);
// _faceRenderer.material.SetFloat("_NoseBleedSmoothness", PhotomodeManager.GetInstance()._headLeftRightSlider.value);
//}
if(currentCharacterHeadLookAt != null)
{
currentCharacterHeadLookAt.transform.localPosition = new Vector3(PhotomodeManager.GetInstance()._headLeftRightSlider.value, PhotomodeManager.GetInstance()._headUpDownSlider.value, currentCharacterHeadLookAt.localPosition.z);
}
if (_eyeMotion != null)
{
_eyeMotion.LookAtTarget.localPosition = new Vector3(_eyeMotion.LookAtTarget.localPosition.x, PhotomodeManager.GetInstance()._eyesUpDownSlider.value, PhotomodeManager.GetInstance()._eyesLeftRightSlider.value);
}
}
#region Hide & Show Player
public void HideCharacter()
{
_currentCharacterSkinnedMeshes = currentCharacter.GetComponentsInChildren<SkinnedMeshRenderer>();
foreach (SkinnedMeshRenderer currentCharacterSkinnedMeshes in _currentCharacterSkinnedMeshes)
{
currentCharacterSkinnedMeshes.enabled = false;
}
_currentlySelectedCharacterIsHidden = true;
#region Butterfly Mesh Renderers
_butterflyMeshRenderers = _butterflyObj.GetComponentsInChildren<MeshRenderer>();
foreach (MeshRenderer _butterflySkinnedMeshes in _butterflyMeshRenderers)
{
_butterflySkinnedMeshes.enabled = false;
}
#endregion
}
public void DisplayCharacter()
{
_currentCharacterSkinnedMeshes = currentCharacter.GetComponentsInChildren<SkinnedMeshRenderer>();
foreach (SkinnedMeshRenderer _playerSkinnedMeshes in _currentCharacterSkinnedMeshes)
{
_playerSkinnedMeshes.enabled = true;
}
_currentlySelectedCharacterIsHidden = false;
#region Butterfly Mesh Renderers
_butterflyMeshRenderers = _butterflyObj.GetComponentsInChildren<MeshRenderer>();
foreach (MeshRenderer _butterflySkinnedMeshes in _butterflyMeshRenderers)
{
_butterflySkinnedMeshes.enabled = true;
}
#endregion
}
#endregion
#region Hide & Show Companion
public void HideCompanion()
{
if (MedeaDemonicEnemyBehaviour.GetInstance() != null)
{
_companionSkinnedMeshes = MedeaDemonicEnemyBehaviour.GetInstance()._medeaSkinnedMeshRenderer.ToArray();
foreach (SkinnedMeshRenderer _companionSkinnedMeshes in _companionSkinnedMeshes)
{
_companionSkinnedMeshes.enabled = false;
}
_companionIsHidden = true;
}
}
public void DisplayCompanion()
{
if (MedeaDemonicEnemyBehaviour.GetInstance() != null)
{
_companionSkinnedMeshes = MedeaDemonicEnemyBehaviour.GetInstance()._medeaSkinnedMeshRenderer.ToArray();
foreach (SkinnedMeshRenderer _companionSkinnedMeshes in _companionSkinnedMeshes)
{
_companionSkinnedMeshes.enabled = true;
}
_companionIsHidden = false;
}
}
#endregion
public void SaveAnimatorStateAndAnimationFrame()
{
time[0] = PlayerManager.GetInstance()._PlayerMovement._CharacterAnimator.GetCurrentAnimatorStateInfo(0).normalizedTime; //Saves the frames of the animation.
nameHash[0] = PlayerManager.GetInstance()._PlayerMovement._CharacterAnimator.GetCurrentAnimatorStateInfo(0).nameHash; //Saves the current state of the animator.
time[1] = GetCurrentAnimatorTime(PlayerManager.GetInstance()._PlayerMovement._CharacterAnimator, 1); //Saves the frames of the animation.
nameHash[1] = PlayerManager.GetInstance()._PlayerMovement._CharacterAnimator.GetCurrentAnimatorStateInfo(1).nameHash; //Saves the current state of the animator.
time[2] = GetCurrentAnimatorTime(PlayerManager.GetInstance()._PlayerMovement._CharacterAnimator, 2); //Saves the frames of the animation.
nameHash[2] = PlayerManager.GetInstance()._PlayerMovement._CharacterAnimator.GetCurrentAnimatorStateInfo(2).nameHash; //Saves the current state of the animator.
speedPercentSavedValue = PlayerManager.GetInstance()._PlayerMovement._CharacterAnimator.GetFloat("speedPercent");
}
public float GetCurrentAnimatorTime(Animator targetAnim, int layer = 0)
{
AnimatorStateInfo animState = targetAnim.GetCurrentAnimatorStateInfo(layer);
float currentTime = animState.normalizedTime;
return currentTime;
}
public string GetCurrentClipName(Animator targetAnim, int layer = 0)
{
AnimatorStateInfo animState = targetAnim.GetCurrentAnimatorStateInfo(layer);
string name = animState.nameHash.ToString();
return name;
}
#region Player Body
public enum PlayerBody
{
Game,
MiddleFingers,
Dancing,
ReverseTime,
ThumbsUp,
FoldedArms,
ButterflyInHand
}
public PlayerBody bodyState = PlayerBody.Game;
public void PlayerBodyUpdate()
{
if (currentCharacterBodyPosesAnimationNames.Count == 0) return;
_indexBodyPose = Mathf.Clamp(_indexBodyPose, 0, currentCharacterBodyPosesAnimationNames.Count - 1);
if (_indexBodyPose == 0) // Game animation
{
print("Game animation");
PlayerManager.GetInstance()._PlayerMovement._CharacterAnimator.Play(nameHash[0], 0, time[0]);
PlayerManager.GetInstance()._PlayerMovement._CharacterAnimator.Play(nameHash[1], 1, time[1]);
PlayerManager.GetInstance()._PlayerMovement._CharacterAnimator.Play(nameHash[2], 2, time[2]);
PlayerManager.GetInstance()._PlayerMovement._CharacterAnimator.Play("None", 3);
PlayerManager.GetInstance()._PlayerMovement._CharacterAnimator.SetFloat("speedPercent", speedPercentSavedValue);
PoseLookAt.GetInstance()._neckGameRot = PoseLookAt.GetInstance()._neck.rotation;
UpdatePlayerBodyLookAt_Game();
_bodyPoseName.text = "Game";
if (currentCharacter != poseControllerAvailableCharacters.PlayerPosingCharacter)
{
currentCharacterAnimator.Play("None", currentCharacterAnimBodyLayer);
}
}
else
{
string animationName = currentCharacterBodyPosesAnimationNames[_indexBodyPose];
currentCharacterAnimator.Play(animationName, currentCharacterAnimBodyLayer);
_bodyPoseName.text = currentCharacterBodyPosesNames[_indexBodyPose];
}
}
#region Butterfly Pose Related
IEnumerator UpdateButterflyPose()
{
yield return new WaitForSecondsRealtime(0.01f);
//if (PlayersManager.GetInstance().ChloeIsPlaying)
//{
// _butterflyObj.SetActive(true);
// _butterflyObj.transform.position = _ChloeFinger.position;
// _butterflyObj.transform.rotation = _ChloeFinger.rotation;
//}
//else
//{
// _butterflyObj.SetActive(true);
// _butterflyObj.transform.position = _MaxFinger.position;
// _butterflyObj.transform.rotation = _MaxFinger.rotation;
//}
}
public void ButterflyObjIsDisabled()
{
_butterflyObj.SetActive(false);
}
#endregion
public void NextBodyPose()
{
if (currentCharacterBodyPosesAnimationNames.Count == 0) return;
_indexBodyPose = (_indexBodyPose + 1) % currentCharacterBodyPosesAnimationNames.Count;
PlayerBodyUpdate();
}
public void PreviousBodyPose()
{
if (currentCharacterBodyPosesAnimationNames.Count == 0) return;
_indexBodyPose = (_indexBodyPose - 1 + currentCharacterBodyPosesAnimationNames.Count) % currentCharacterBodyPosesAnimationNames.Count;
PlayerBodyUpdate();
}
#region Update PoseLookAt.
public void UpdatePlayerBodyLookAt_Game()
{
PoseLookAt.GetInstance()._lookAt.localEulerAngles = new Vector3(PoseLookAt.GetInstance()._neckGameRot.x, PoseLookAt.GetInstance()._neckGameRot.y, PoseLookAt.GetInstance()._neckGameRot.z);
}
public void UpdatePlayerBodyLookAt_MiddleFingers()
{
PoseLookAt.GetInstance()._lookAt.localEulerAngles = new Vector3(-0.28f, -0.821f, -4.132f);
}
public void UpdatePlayerBodyLookAt_Dancing()
{
PoseLookAt.GetInstance()._lookAt.localEulerAngles = new Vector3(22.75675f, 315.1279f, 3.121685f);
}
public void UpdatePlayerBodyLookAt_ReverseTime()
{
PoseLookAt.GetInstance()._lookAt.localEulerAngles = new Vector3(4.686f, 25.758f, -13.544f);
}
public void UpdatePlayerBodyLookAt_ThumbsUp()
{
PoseLookAt.GetInstance()._lookAt.localEulerAngles = new Vector3(3.645f, 15.321f, -6.409f);
}
public void UpdatePlayerBodyLookAt_FoldedArms()
{
PoseLookAt.GetInstance()._lookAt.localEulerAngles = new Vector3(4.704f, 22.423f, -0.15f);
}
public void UpdatePlayerBodyLookAt_ButterflyAtHand()
{
PoseLookAt.GetInstance()._lookAt.localEulerAngles = new Vector3(16.37787f, 350.2041f, 3.878617f);
}
#endregion
public void PlayerBodyPoseReset()
{
bodyState = PlayerBody.Game;
PlayerBodyUpdate();
_indexPoses = 0;
_bodyPose = 1;
}
#endregion
#region Player Face
public enum PlayerFace
{
Game,
Angry,
Happy,
Sad,
Smiling,
Silly,
Disgusted,
Wondermend,
Annoyed
}
public PlayerFace faceState = PlayerFace.Game;
public void PlayerFaceUpdate()
{
if (currentCharacterFacePosesAnimationNames.Count == 0) return;
_indexFacePose = Mathf.Clamp(_indexFacePose, 0, currentCharacterFacePosesAnimationNames.Count - 1);
string animationName = currentCharacterFacePosesAnimationNames[_indexFacePose];
currentCharacterAnimator.Play(animationName, currentCharacterAnimFaceLayer);
_facePoseName.text = currentCharacterFacePosesNames[_indexFacePose];
}
public enum CharacterModel
{
Player,
Medea,
DarkRoom
}
public CharacterModel SelectedCharacterModelState = CharacterModel.Player;
public void NextFacePose()
{
if (currentCharacterFacePosesAnimationNames.Count == 0) return;
_indexFacePose = (_indexFacePose + 1) % currentCharacterFacePosesAnimationNames.Count;
PlayerFaceUpdate();
}
public void PreviousFacePose()
{
if (currentCharacterFacePosesAnimationNames.Count == 0) return;
_indexFacePose = (_indexFacePose - 1 + currentCharacterFacePosesAnimationNames.Count) % currentCharacterFacePosesAnimationNames.Count;
PlayerFaceUpdate();
}
#endregion
public void ChangePlayerOutfit()
{
//if (PlayersManager.GetInstance().ChloeIsPlaying)
//{
// //Chloe blah blah...
// _outfitName.text = "Jacket & Beanie"; //Placeholder
//}
//else
//{
switch (SelectedCharacterModelState)
{
case CharacterModel.Player:
_outfitName.text = "Player";
UpdateCharacterModels(poseControllerAvailableCharacters.PlayerPosingCharacter,
poseControllerAvailableCharacters.PlayerPosingCharacterAnimator,
poseControllerAvailableCharacters.MedeaActiveSkinnedMeshes,
poseControllerAvailableCharacters.PlayerActiveSkinnedMeshes,5,1,poseControllerAvailablePosesForPlayer);
break;
case CharacterModel.Medea:
_outfitName.text = "Medea";
UpdateCharacterModels(poseControllerAvailableCharacters.MedeaPosingCharacter,
poseControllerAvailableCharacters.MedeaPosingCharacterAnimator,
poseControllerAvailableCharacters.PlayerActiveSkinnedMeshes,
poseControllerAvailableCharacters.MedeaActiveSkinnedMeshes,1,2,poseControllerAvailablePosesForMedea);
break;
case CharacterModel.DarkRoom:
//PlayersManager.GetInstance().replaceCharacterModel.modelID = 2;
//Destroy(PlayersManager.GetInstance().replaceCharacterModel.currentCharacterModel);
//PlayersManager.GetInstance().replaceCharacterModel.InstansiateNewModel();
_outfitName.text = "PLACEHOLDER";
UpdateCharacterModels(poseControllerAvailableCharacters.MedeaPosingCharacter,
poseControllerAvailableCharacters.MedeaPosingCharacterAnimator,
poseControllerAvailableCharacters.MedeaActiveSkinnedMeshes,
poseControllerAvailableCharacters.PlayerActiveSkinnedMeshes,1,2, poseControllerAvailablePosesForMedea);
break;
default:
break;
//}
}
}
public void PreviousOutfit()
{
#region Previous outfit
_indexOutfits--;
if (_indexOutfits < 1) // Αν πέσει κάτω από 1, πήγαινε στο 3
{
_indexOutfits = 3;
}
_Outftis = _indexOutfits;
switch (_Outftis)
{
case 1: SelectedCharacterModelState = CharacterModel.Player; break;
case 2: SelectedCharacterModelState = CharacterModel.Medea; break;
case 3: SelectedCharacterModelState = CharacterModel.DarkRoom; break;
}
ChangePlayerOutfit();
#endregion
}
public void NextOutfit()
{
#region Next outfit
_indexOutfits++;
if (_indexOutfits > 3) // Αν περάσει το 3, πήγαινε στο 1
{
_indexOutfits = 1;
}
_Outftis = _indexOutfits;
switch (_Outftis)
{
case 1: SelectedCharacterModelState = CharacterModel.Player; break;
case 2: SelectedCharacterModelState = CharacterModel.Medea; break;
case 3: SelectedCharacterModelState = CharacterModel.DarkRoom; break;
}
ChangePlayerOutfit();
#endregion
}
public void UpdateCharacterModels(GameObject newCharacterGo,
Animator newCharacterAnimator, List<SkinnedMeshRenderer> ModelSkinnedMeshesToDisable,
List<SkinnedMeshRenderer> ModelSkinnedMeshesToEnable,
int faceAnimLayer, int bodyAnimLayer, PoseControllerAvailablePoses poseControllerAvailablePoses)
{
previousSelectedCharacter = currentCharacter;
previousSelectetCharacterAnimator = currentCharacterAnimator;
if (previousSelectedCharacter != poseControllerAvailableCharacters.PlayerPosingCharacter)
{
previousSelectedCharacter.gameObject.SetActive(false);
}
currentCharacter = newCharacterGo;
currentCharacter.gameObject.SetActive(true);
currentCharacterAnimator = newCharacterAnimator;
currentCharacter.transform.position = temporarilySavedPlayerPos;
currentCharacter.transform.rotation = temporarilySavedPlayerRot;
currentCharacterAnimFaceLayer = faceAnimLayer;
currentCharacterAnimBodyLayer = bodyAnimLayer;
UpdateCharacterModelSkinnedMeshes(ModelSkinnedMeshesToDisable, ModelSkinnedMeshesToEnable);
currentCharacterBodyPosesAnimationNames = new List<string>(poseControllerAvailablePoses.BodyPosesAnimationNames);
currentCharacterBodyPosesNames = new List<string>(poseControllerAvailablePoses.BodyPosesNames);
currentCharacterFacePosesAnimationNames = new List<string>(poseControllerAvailablePoses.FacePosesAnimationNames);
currentCharacterFacePosesNames = new List<string>(poseControllerAvailablePoses.FacePosesNames);
currentCharacterHeadLookAt = poseControllerAvailablePoses.HeadLookAt;
currentCharacterHeadUpDownMin = poseControllerAvailablePoses.HeadUpDownMin;
currentCharacterHeadUpDownMax = poseControllerAvailablePoses.HeadUpDownMax;
currentCharacterHeadLeftRightMin = poseControllerAvailablePoses.HeadLeftRightMin;
currentCharacterHeadLeftRightMax = poseControllerAvailablePoses.HeadLeftRightMax;
currentCharacterEyesUpDownMin = poseControllerAvailablePoses.EyesUpDownMin;
currentCharacterEyesUpDownMax = poseControllerAvailablePoses.EyesUpDownMax;
currentCharacterEyesLeftRightMin = poseControllerAvailablePoses.EyesLeftRightMin;
currentCharacterEyesLeftRightMax = poseControllerAvailablePoses.EyesLeftRightMax;
PoseLookAt.GetInstance().ValuesUpdate();
UpdateFaceRendererValues();
StartCoroutine(ResetPlayerGameAnimAfterModelSwap());
}
public void UpdateCharacterModelSkinnedMeshes(List<SkinnedMeshRenderer> ModelSkinnedMeshesToDisable, List<SkinnedMeshRenderer> ModelSkinnedMeshesToEnable)
{
foreach (var skinnedMesh in ModelSkinnedMeshesToDisable)
{
skinnedMesh.enabled = false; // Το απενεργοποιούμε
}
foreach (var skinnedMesh in ModelSkinnedMeshesToEnable)
{
skinnedMesh.enabled = true; // Το ενεργοποιούμε
}
}
IEnumerator ResetPlayerGameAnimAfterModelSwap()
{
_outfitChangePanel.SetActive(true);
yield return new WaitForSecondsRealtime(0.001f);
PoseLookAt.GetInstance().ValuesUpdate();
currentCharacterAnimator.Play(nameHash[0], 0, time[0]);
currentCharacterAnimator.Play(nameHash[1], 0, time[1]);
currentCharacterAnimator.Play(nameHash[2], 0, time[2]);
currentCharacterAnimator.Play("None", 3); //Sets the Body Pose layer animation state to None.
//if (PlayersManager.GetInstance().ChloeIsPlaying)
//{
// _ChloeFinger = PlayersManager.GetInstance().ChloeReplaceCharacterModel.characterBase.transform.Find("CharacterModelPivot/" + PlayersManager.GetInstance().ChloeReplaceCharacterModel.characterModelName +
// "/Reference/Hips/Spine/Spine1/Spine2/RightShoulder/RightArm/RightArmRoll/RightForearm/RightForearmRoll/RightHand/RightHandIndex1/RightHandIndex2").transform;
//}
//else
//{
// _MaxFinger = PlayersManager.GetInstance().MaxReplaceCharacterModel.characterBase.transform.Find("CharacterModelPivot/" + PlayersManager.GetInstance().MaxReplaceCharacterModel.characterModelName +
// "/Reference/Hips/Spine/Spine1/Spine2/RightShoulder/RightArm/RightArmRoll/RightForearm/RightForearmRoll/RightHand/RightHandIndex1/RightHandIndex2").transform;
//}
if (!_currentlySelectedCharacterIsHidden)
{
_currentCharacterSkinnedMeshes = currentCharacter.GetComponentsInChildren<SkinnedMeshRenderer>();
foreach (SkinnedMeshRenderer _playerSkinnedMeshes in _currentCharacterSkinnedMeshes)
{
_playerSkinnedMeshes.enabled = true;
}
}
yield return new WaitForSecondsRealtime(0.01f);
PlayerFaceUpdate();
PlayerBodyUpdate();
_outfitChangePanel.SetActive(false);
}
public void PlayerFacePoseReset()
{
faceState = PlayerFace.Game;
PlayerFaceUpdate();
_indexFaces = 0;
_facePose = 1;
#region Face renderer effects reset
//_faceRenderer.material.SetFloat("_CrySmoothness_1", crySmoothnessDefaultValue);
//_faceRenderer.material.SetFloat("_NoseBleedSmoothness", nosebleedSmoothnessDefaultValue);
PhotomodeManager.GetInstance()._headUpDownSlider.value = _headUpDownDefaultValue;
PhotomodeManager.GetInstance()._headLeftRightSlider.value = _headLeftRightDefaultValue;
PhotomodeManager.GetInstance()._eyesUpDownSlider.value = _eyesUpDownDefaultValue;
PhotomodeManager.GetInstance()._eyesLeftRightSlider.value = _eyesLeftRightDefaultValue;
EyesMotionOFF();
#endregion
}
public void PlayerOutfitReset()
{
SelectedCharacterModelState = CharacterModel.Player;
ChangePlayerOutfit();
_indexOutfits = 0;
_Outftis = 1;
}
public void PoseManagerReset()
{
DisplayCharacter();
DisplayCompanion();
PlayerBodyPoseReset();
PlayerFacePoseReset();
PlayerOutfitReset();
}
}