From 766cdff5ffa72b65d7f106658d1603f47739b2ba Mon Sep 17 00:00:00 2001 From: chai <215380520@qq.com> Date: Fri, 27 Oct 2023 11:05:14 +0800 Subject: + init --- GameCode/CharacterCreatorHandler.cs | 135 ++++++++++++++++++++++++++++++++++++ 1 file changed, 135 insertions(+) create mode 100644 GameCode/CharacterCreatorHandler.cs (limited to 'GameCode/CharacterCreatorHandler.cs') diff --git a/GameCode/CharacterCreatorHandler.cs b/GameCode/CharacterCreatorHandler.cs new file mode 100644 index 0000000..1dd23c7 --- /dev/null +++ b/GameCode/CharacterCreatorHandler.cs @@ -0,0 +1,135 @@ +using System; +using System.Collections.Generic; +using UnityEngine; + +public class CharacterCreatorHandler : MonoBehaviour +{ + public static CharacterCreatorHandler instance; + + public PlayerFace[] playerFaces = new PlayerFace[10]; + + public PlayerFace[] selectedPlayerFaces = new PlayerFace[4]; + + public int[] selectedFaceID = new int[4]; + + public List lockedPortraits; + + public Action lockedPortraitAction; + + public Action faceWasUpdatedAction; + + public void LockPortrait(int portrait) + { + lockedPortraits.Add(portrait); + lockedPortraitAction?.Invoke(); + } + + public void ReleasePortrait(int porttrait) + { + for (int i = 0; i < lockedPortraits.Count; i++) + { + if (porttrait == lockedPortraits[i]) + { + lockedPortraits.RemoveAt(i); + break; + } + } + lockedPortraitAction?.Invoke(); + } + + private void ReleaseAllPortraits() + { + lockedPortraits.Clear(); + lockedPortraitAction?.Invoke(); + } + + private void Awake() + { + instance = this; + for (int i = 0; i < playerFaces.Length; i++) + { + playerFaces[i].LoadFace(i.ToString()); + } + for (int j = 0; j < selectedFaceID.Length; j++) + { + selectedFaceID[j] = PlayerPrefs.GetInt("SelectedFace" + j); + SelectFace(j, playerFaces[selectedFaceID[j]], selectedFaceID[j]); + } + } + + internal void SelectFace(int faceID, PlayerFace selectedFace, int faceSlot) + { + selectedFaceID[faceID] = faceSlot; + PlayerPrefs.SetInt("SelectedFace" + faceID, selectedFaceID[faceID]); + selectedPlayerFaces[faceID] = selectedFace; + } + + public PlayerFace GetFacePreset(int faceID) + { + return playerFaces[faceID]; + } + + public bool SomeoneIsEditing() + { + for (int i = 0; i < base.transform.childCount; i++) + { + if (base.transform.GetChild(i).gameObject.activeSelf) + { + return true; + } + } + return false; + } + + internal void SetFacePreset(int faceID, PlayerFace currentPlayerFace) + { + playerFaces[faceID] = PlayerFace.CopyFace(currentPlayerFace); + playerFaces[faceID].SaveFace(faceID.ToString()); + faceWasUpdatedAction?.Invoke(faceID); + } + + public void EditCharacterLocalMultiplayer(int playerId, int portraitID, GameObject objectToEnable, PlayerFace currentFace) + { + LockPortrait(portraitID); + CharacterCreator component = base.transform.GetChild(playerId + 1).GetComponent(); + component.playerActions = PlayerManager.instance.players[playerId].data.playerActions; + component.inputType = PlayerManager.instance.players[playerId].data.input.inputType; + component.gameObject.SetActive(value: true); + component.playerID = playerId; + component.objectToEnable = objectToEnable; + component.currentPlayerFace = currentFace; + component.portraitID = portraitID; + component.SpawnFace(currentFace); + } + + public void EditCharacterPortrait(int portraitID, PlayerFace currentFace) + { + LockPortrait(portraitID); + MainMenuHandler.instance.Close(); + CharacterCreator component = base.transform.GetChild(0).GetComponent(); + component.inputType = GeneralInput.InputType.Either; + component.currentPlayerFace = currentFace; + component.gameObject.SetActive(value: true); + component.playerID = 0; + component.portraitID = portraitID; + component.SpawnFace(currentFace); + } + + public void CloseMenus() + { + for (int i = 0; i < base.transform.childCount; i++) + { + base.transform.GetChild(i).GetComponent().Close(); + } + ReleaseAllPortraits(); + } + + public void EndCustomization(int playerId = -1) + { + if (playerId == -1) + { + GetComponentInChildren(includeInactive: true).Finish(); + base.transform.GetChild(0).gameObject.SetActive(value: false); + } + } +} -- cgit v1.1-26-g67d0