using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Events; public class PlayableCharacterSkin : MonoBehaviour { private PlayerEntity connectedPlayer; private UICameraPositioner uiCamera; private PlayerUIRenderer playerRenderer; internal event Action OnInitProvide; [SerializeField] private float cameraViewSize = 1f; [SerializeField] private float cameraHeight = 1.63f; [SerializeField] private float chatBubbleContainerHeight = 308.42f; [System.NonSerialized] public SkinnedMeshRenderer SkinnedMeshRenderer; [Space] [SerializeField] private Vector3 characterSize = Vector3.one; [SerializeField] private Transform chatBubbleContainer; [SerializeField] private Transform root; [System.NonSerialized] public UnityEvent SkinActiveEvent = new UnityEvent(); [Space] [SerializeField] private Vector3 characterSelectPosition = new Vector3(1.206f, 1.214f, 1.895f); [Space] [SerializeField] private List TargetedSkinMeshes = new List(); [SerializeField] private List tragetedSkinMeshes = new List(); private void Awake() { SkinnedMeshRenderer = GetComponent(); connectedPlayer = GetComponentInParent(); uiCamera = GetComponentInParent(); playerRenderer = uiCamera.GetPlayerRenderer(); SkinActiveEvent.AddListener(HandleSkinChange); } private void HandleSkinChange() { OnInitProvide?.Invoke(this); //Local player only. if (connectedPlayer.FirstPersonCameraPivot != null) { Vector3 cameraHeight = connectedPlayer.FirstPersonCameraPivot.localPosition; cameraHeight.y = this.cameraHeight; connectedPlayer.FirstPersonCameraPivot.localPosition = cameraHeight; } if (playerRenderer.CharacterSelectCanvasOpen()) { if (uiCamera != null) { uiCamera.GetPlayerRenderCameraTransform().localPosition = characterSelectPosition; playerRenderer.GetCamera().orthographicSize = cameraViewSize; } } root.transform.localScale = characterSize; Vector3 chatBubbleContainer = this.chatBubbleContainer.localPosition; chatBubbleContainer.y = chatBubbleContainerHeight; this.chatBubbleContainer.localPosition = chatBubbleContainer; } public void DeactivateSkin() { SkinnedMeshRenderer.enabled = false; foreach (var varTargetedSkinMesh in TargetedSkinMeshes) { varTargetedSkinMesh.SetActive(false); } foreach (var varSkinMesh in tragetedSkinMeshes) { varSkinMesh.enabled = false; } } public void ActivateSkin() { SkinnedMeshRenderer.enabled = true; foreach (var varTargetedSkinMesh in TargetedSkinMeshes) { varTargetedSkinMesh.SetActive(true); } foreach (var varSkinMesh in tragetedSkinMeshes) { varSkinMesh.enabled = true; } SkinActiveEvent?.Invoke(); } public void DeactivateEditor() { GetComponent().enabled = false; foreach (var varTargetedSkinMesh in TargetedSkinMeshes) { varTargetedSkinMesh.SetActive(false); } foreach (var varSkinMesh in tragetedSkinMeshes) { varSkinMesh.enabled = false; } } public void ActivateEditor() { GetComponent().enabled = true; foreach (var varTargetedSkinMesh in TargetedSkinMeshes) { varTargetedSkinMesh.SetActive(true); } foreach (var varSkinMesh in tragetedSkinMeshes) { varSkinMesh.enabled = true; } } }