ClientServer/Client/Assets/Scripts/Player/PlayableCharacterSkin.cs
TG9six 03a642d635 first push
first push
2025-09-06 17:17:39 +04:00

134 lines
3.9 KiB
C#

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<PlayableCharacterSkin> 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<GameObject> TargetedSkinMeshes = new List<GameObject>();
[SerializeField] private List<SkinnedMeshRenderer> tragetedSkinMeshes = new List<SkinnedMeshRenderer>();
private void Awake()
{
SkinnedMeshRenderer = GetComponent<SkinnedMeshRenderer>();
connectedPlayer = GetComponentInParent<PlayerEntity>();
uiCamera = GetComponentInParent<UICameraPositioner>();
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<SkinnedMeshRenderer>().enabled = false;
foreach (var varTargetedSkinMesh in TargetedSkinMeshes)
{
varTargetedSkinMesh.SetActive(false);
}
foreach (var varSkinMesh in tragetedSkinMeshes)
{
varSkinMesh.enabled = false;
}
}
public void ActivateEditor()
{
GetComponent<SkinnedMeshRenderer>().enabled = true;
foreach (var varTargetedSkinMesh in TargetedSkinMeshes)
{
varTargetedSkinMesh.SetActive(true);
}
foreach (var varSkinMesh in tragetedSkinMeshes)
{
varSkinMesh.enabled = true;
}
}
}