147 lines
5.9 KiB
C#
147 lines
5.9 KiB
C#
|
|
using Game.Network.DTO;
|
|
using NUnit.Framework;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Diagnostics;
|
|
using System.Linq;
|
|
using UnityEngine;
|
|
using UnityEngine.InputSystem;
|
|
using UnityEngine.SceneManagement;
|
|
using Debug = UnityEngine.Debug;
|
|
|
|
|
|
public class LevelManager : MonoBehaviour
|
|
{
|
|
#region 플레이어 관련
|
|
[SerializeField] private GameObject[] _playableCharacterPrefabs; //플레이어가 될수 있는 캐릭터들 프리팹 할당
|
|
public GameObject[] PlayableCharacterPrefabs { get { return _playableCharacterPrefabs; } private set { _playableCharacterPrefabs = value; } }
|
|
public GameObject CurrentCharacter { get; private set; } // 현재 캐릭터
|
|
public PlayerCharacterController CurrentCharacterController { get { return CurrentCharacter?.GetComponent<PlayerCharacterController>(); } } // 현재 캐릭터의 컨트롤러
|
|
public int CurrentCharacterIdx { get; private set; } //현재캐릭터 인덱스
|
|
#endregion
|
|
|
|
private void Awake()
|
|
{
|
|
|
|
}
|
|
|
|
public void OnSceneLoaded(Scene scene, LoadSceneMode mode)
|
|
{
|
|
if (scene.name == "GameStartScene")
|
|
{
|
|
InputManager.Instance.SetUIInputMap("IntroUI");
|
|
}
|
|
|
|
if (scene.name == "GameScene")
|
|
{
|
|
|
|
List<UserCharacter> myCharacters = DataManager.Instance.MyCharacters;
|
|
|
|
if (myCharacters != null && myCharacters.Count > 0 && PlayableCharacterPrefabs != null && PlayableCharacterPrefabs.Length > 0)
|
|
{
|
|
|
|
Dictionary<string, PlayerCharacterController> playableCharacterPrefabsDic = PlayableCharacterPrefabs
|
|
.Select(p => p.GetComponent<PlayerCharacterController>())
|
|
.Where(pcc => pcc != null && pcc.PlayerCharacterIdentity != null)
|
|
.ToDictionary(pcc => pcc.PlayerCharacterIdentity.CharacterCode, pcc => pcc);
|
|
|
|
foreach (UserCharacter uc in myCharacters)
|
|
{
|
|
//내가 가진 캐릭터 코드와 일치하는 플레이어블 캐릭터 프리팹 객체들
|
|
if (playableCharacterPrefabsDic.TryGetValue(uc.CharacterCode, out PlayerCharacterController pcc))
|
|
{
|
|
ApplyCharacterInfo(pcc, uc);
|
|
}
|
|
}
|
|
|
|
bool defaultCharacterFlag = false;
|
|
|
|
for (int i = 0; i < PlayableCharacterPrefabs.Length; i++)
|
|
{
|
|
|
|
GameObject pc = PlayableCharacterPrefabs[i];
|
|
if (pc.TryGetComponent<PlayerCharacterController>(out PlayerCharacterController pcc) && pcc.PlayerCharacterIdentity.IsDefaultControl)
|
|
{
|
|
CurrentCharacter = PlayableCharacterPrefabs[i];
|
|
CurrentCharacterIdx = i;
|
|
CurrentCharacterController.PlayerCharacterIdentity.SynchronizeControll();
|
|
defaultCharacterFlag = true;
|
|
break;
|
|
}
|
|
}
|
|
if(!defaultCharacterFlag)
|
|
{
|
|
//0번 캐릭터를 현재캐릭터로 설정
|
|
if (PlayableCharacterPrefabs != null && PlayableCharacterPrefabs.Length > 0)
|
|
{
|
|
CurrentCharacter = PlayableCharacterPrefabs[0];
|
|
CurrentCharacterIdx = 0;
|
|
CurrentCharacterController.PlayerCharacterIdentity.SynchronizeControll();
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
//0번 캐릭터를 현재캐릭터로 설정
|
|
if (PlayableCharacterPrefabs != null && PlayableCharacterPrefabs.Length > 0)
|
|
{
|
|
CurrentCharacter = PlayableCharacterPrefabs[0];
|
|
CurrentCharacterIdx = 0;
|
|
CurrentCharacterController.PlayerCharacterIdentity.SynchronizeControll();
|
|
}
|
|
}
|
|
|
|
InputManager.Instance.SetUIInputMap("InGameUI");
|
|
InputManager.Instance.SetCharacterInputMap("Character");
|
|
|
|
//카메라 줌 매핑
|
|
InputManager.Instance.OnMouseScrollEvent += GameManager.Instance.Camera.ZoomCamera;
|
|
|
|
//이동 매핑
|
|
InputManager.Instance.OnMoveEvent += CurrentCharacterController.MoveInput;
|
|
InputManager.Instance.OnSprintEvent += CurrentCharacterController.SprintInput;
|
|
InputManager.Instance.OnJumpEvent += CurrentCharacterController.JumpInput;
|
|
//InputManager.Instance.OnNormalAttackEvent;
|
|
//InputManager.Instance.OnHeavyAttackEvent;
|
|
|
|
//화면 켜기
|
|
}
|
|
|
|
}
|
|
|
|
private void ApplyCharacterInfo(PlayerCharacterController pcc, UserCharacter uc)
|
|
{
|
|
pcc.PlayerCharacterStat.MaxHp = uc.MaxHp;
|
|
pcc.PlayerCharacterStat.MaxMp = uc.MaxMp;
|
|
pcc.PlayerCharacterStat.Lv = uc.Lv;
|
|
pcc.PlayerCharacterStat.StrStat = uc.StrStat;
|
|
pcc.PlayerCharacterStat.IntStat = uc.IntStat;
|
|
pcc.PlayerCharacterIdentity.IsDefaultControl = uc.DefaultControl;
|
|
}
|
|
|
|
private void OnDestroy()
|
|
{
|
|
if(InputManager.Instance != null)
|
|
{
|
|
|
|
//카메라 줌 매핑 해제
|
|
if (GameManager.Instance != null && GameManager.Instance.Camera != null)
|
|
{
|
|
InputManager.Instance.OnMouseScrollEvent -= GameManager.Instance.Camera.ZoomCamera;
|
|
}
|
|
|
|
|
|
if(CurrentCharacterController != null)
|
|
{
|
|
//이동 매핑 해제
|
|
InputManager.Instance.OnMoveEvent -= CurrentCharacterController.MoveInput;
|
|
InputManager.Instance.OnSprintEvent -= CurrentCharacterController.SprintInput;
|
|
InputManager.Instance.OnJumpEvent -= CurrentCharacterController.JumpInput;
|
|
//InputManager.Instance.OnNormalAttackEvent;
|
|
//InputManager.Instance.OnHeavyAttackEvent;
|
|
}
|
|
}
|
|
}
|
|
}
|