134 lines
3.9 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|