using UnityEngine; using System.Collections.Generic; using UnityEngine.InputSystem; using static ModeSelection; using UnityEngine.InputSystem.Users; using Unity.VisualScripting; using Cinemachine; using System.Collections; using System; using TMPro; using UnityEngine.InputSystem.UI; using static UnityEngine.AudioSettings; public class SelectionOptions : MonoBehaviour { private static SelectionOptions instance; public static SelectionOptions Instance { get { return instance; } } //public ModeSelection modeSelection; public Dictionary selectedPlayerDevice; public Dictionary selectedPlayersAI; public InputActionAsset existingInputAsset; public InputDevice activeDeviceforAI; public string controlSchemeforAI; private int count; public GameObject eventSytem; public bool is1v1Selected; public bool isKillSelected; public bool isTimeSelected; public bool isPlayerSelected; public bool isAISelected; public bool isCashSystemSelected; private bool isMobile; // Cash System team data public string[] playerTeam = new string[3]; // 3 characters for player team public string[] enemyTeam = new string[3]; // 3 characters for enemy team public int captainIndex = 0; // Index of player-controlled character public int currentControlledIndex = 0; // Index of currently controlled character (for switching) // Character portrait sprites — stored before scene transition so Game scene can use them [System.NonSerialized] public Sprite[] playerTeamSprites; [System.NonSerialized] public Sprite[] enemyTeamSprites; private void Awake() { if (instance != null && instance != this) { Destroy(gameObject); return; } instance = this; DontDestroyOnLoad(gameObject); is1v1Selected = false; isKillSelected = false; isTimeSelected = false; isPlayerSelected = false; isAISelected = false; isCashSystemSelected = false; } public Dictionary GetSelectedPlayerDevice() { return selectedPlayerDevice; //return modeSelection.selectedPlayerDevice; } public Dictionary GetSelectedPlayersAI() { return selectedPlayersAI; //return modeSelection.selectedPlayerDevice; } public Transform FindGrandchildByName(Transform parent, string name) { foreach (Transform child in parent) { foreach (Transform grandchild in child) { if (grandchild.name == name) { return grandchild; } } } return null; } private void DeterminePlatform() { if (UnityEngine.Application.platform == RuntimePlatform.Android || UnityEngine.Application.platform == RuntimePlatform.IPhonePlayer) { isMobile = true; } } private GameObject LoadPrefab(string playerName, string playerMode) { bool isAI = playerMode == "AI"; GameObject prefab = CharacterPrefabManager.Instance.GetCharacterPrefab(playerName, isAI); if (prefab == null) { Debug.LogError($"Failed to load prefab for character {playerName} (AI: {isAI})"); } else { // Ensure prefab has required components if (prefab.GetComponent() == null) { Debug.LogWarning($"Adding missing PlayerInput component to prefab {playerName}"); prefab.AddComponent(); } } return prefab; } private GameObject LoadPlayerPrefab(string playerName) { return CharacterPrefabManager.Instance.GetCharacterPrefab(playerName, false); } private void SetUpPlayerInput(GameObject playerPrefab, string playerMode) { if (playerPrefab == null) { Debug.LogError("Player prefab is null in SetUpPlayerInput"); return; } // Check if the prefab has a PlayerInput component if (playerPrefab.GetComponent() == null) { Debug.LogError($"Prefab {playerPrefab.name} does not have a PlayerInput component."); // Add PlayerInput component if it doesn't exist playerPrefab.AddComponent(); } PlayerInput playerInput = null; PlayerScript playerScript = null; GameObject player = null; if (playerMode == "AI") { try { playerInput = PlayerInput.Instantiate(playerPrefab, controlScheme: controlSchemeforAI, pairWithDevices: activeDeviceforAI); player = playerInput.gameObject; player.tag = "Enemy"; // === NEW: Configure as EnemyAI using ControlType system === TeamMember teamMember = player.GetComponent(); if (teamMember == null) teamMember = player.AddComponent(); teamMember.CurrentTeam = TeamMember.Team.EnemyTeam1; teamMember.SetControlType(TeamMember.ControlType.EnemyAI); if (CameraManager.Instance != null) { CameraManager.Instance.RegisterTeamMember(teamMember); } Debug.Log($"[SelectionOptions] SetUpPlayerInput: Spawned {player.name} as EnemyAI"); } catch (Exception e) { Debug.LogError($"Error instantiating AI player: {e.Message}"); // Fallback to regular instantiation player = Instantiate(playerPrefab); player.tag = "Enemy"; } } else if (playerMode == "PLAYER") { try { playerInput = PlayerInput.Instantiate(playerPrefab, controlScheme: controlSchemeforAI, pairWithDevices: activeDeviceforAI); player = playerInput.gameObject; player.tag = "Player"; playerScript = player.GetComponent(); // === NEW: Configure as HumanControlled using ControlType system === TeamMember teamMember = player.GetComponent(); if (teamMember == null) teamMember = player.AddComponent(); teamMember.CurrentTeam = TeamMember.Team.PlayerTeam; teamMember.SetControlType(TeamMember.ControlType.HumanControlled); if (CameraManager.Instance != null) { CameraManager.Instance.RegisterTeamMember(teamMember); CameraManager.Instance.SetTarget(teamMember); Debug.Log($"[SelectionOptions] SetUpPlayerInput: Set camera target to {player.name}"); } Debug.Log($"[SelectionOptions] SetUpPlayerInput: Spawned {player.name} as HumanControlled"); if (playerInput != null && playerScript != null) { playerInput.neverAutoSwitchControlSchemes = true; playerInput.defaultActionMap = "Player Controls"; // Use the TryBindAction method to safely bind to actions only if they exist TryBindAction(playerInput, "Move", playerScript.OnMove); // For actions that might be canceled if (playerInput.currentActionMap != null && playerInput.currentActionMap.FindAction("Move") != null) { playerInput.currentActionMap["Move"].canceled += playerScript.OnMove; } // Punches TryBindAction(playerInput, "Jab", playerScript.OnJab); TryBindAction(playerInput, "Right", playerScript.OnRight); TryBindAction(playerInput, "LeftHook", playerScript.OnLeftHook); TryBindAction(playerInput, "RightHook", playerScript.OnRightHook); TryBindAction(playerInput, "LeftElbow", playerScript.OnLeftElbow); TryBindAction(playerInput, "RightElbow", playerScript.OnRightElbow); TryBindAction(playerInput, "RightBody", playerScript.OnRightBody); TryBindAction(playerInput, "PowerPunchLeft", playerScript.OnPowerPunchLeft); TryBindAction(playerInput, "SupermanPunch", playerScript.OnSupermanPunch); // Kicks TryBindAction(playerInput, "LegKickRight", playerScript.OnLegKickRight); TryBindAction(playerInput, "BodyKickRight", playerScript.OnBodyKickRight); TryBindAction(playerInput, "KneeRight", playerScript.OnKneeRight); TryBindAction(playerInput, "BackSideKick", playerScript.OnBackSideKick); TryBindAction(playerInput, "FrontKickRight", playerScript.OnFrontKickRight); TryBindAction(playerInput, "LegPowerKickRight", playerScript.OnLegPowerKickRight); // Dodges TryBindAction(playerInput, "JumpBack", playerScript.OnJumpBack); TryBindAction(playerInput, "JumpLeft", playerScript.OnJumpLeft); TryBindAction(playerInput, "JumpRight", playerScript.OnJumpRight); // Blocks TryBindAction(playerInput, "BlockStepBack", playerScript.OnBlockStepBack); TryBindAction(playerInput, "BlockBodyLeft", playerScript.OnBlockBodyLeft); TryBindAction(playerInput, "BlockLeg", playerScript.OnBlockLeg); // Pause TryBindAction(playerInput, "Pause", player.GetComponent().OnPause); } else { Debug.LogError($"Player {player.name} is missing required components: PlayerInput={playerInput != null}, PlayerScript={playerScript != null}"); } } catch (Exception e) { Debug.LogError($"Error instantiating Player: {e.Message}"); // Fallback to regular instantiation player = Instantiate(playerPrefab); player.gameObject.tag = "Player"; } } } private void SetUpPlayerInputAI(GameObject playerPrefab, string playerMode) { // Spawn the character var character = Instantiate(playerPrefab); // Add or get TeamMember component TeamMember teamMember = character.GetComponent(); if (teamMember == null) { teamMember = character.AddComponent(); } if (playerMode == "AI") { // Configure as enemy AI using the unified ControlType system teamMember.CurrentTeam = TeamMember.Team.EnemyTeam1; teamMember.SetControlType(TeamMember.ControlType.EnemyAI); character.gameObject.tag = "Enemy"; Debug.Log($"[SelectionOptions] Spawned {character.name} as EnemyAI"); } else if (playerMode == "PLAYER") { // Configure as human-controlled player teamMember.CurrentTeam = TeamMember.Team.PlayerTeam; teamMember.SetControlType(TeamMember.ControlType.HumanControlled); character.gameObject.tag = "Player"; Debug.Log($"[SelectionOptions] Spawned {character.name} as HumanControlled"); // DIRECTLY set camera target for the player character if (CameraManager.Instance != null) { CameraManager.Instance.SetTarget(teamMember); Debug.Log($"[SelectionOptions] Set CameraManager target to {character.name}"); } } // Register with CameraManager for automatic camera updates if (CameraManager.Instance != null) { CameraManager.Instance.RegisterTeamMember(teamMember); } } // private void SetUpCamera() // { // //print("user after pairing: " + inputUser); // GameObject camera = GameObject.Find("CinemachineCamera"); // var vcam = camera.GetComponent(); // if (vcam != null) // { // var targets = GameObject.FindGameObjectsWithTag("Player"); // Transform headTransform = transform; // if (targets[0].name == "Cheetah 2") // { // //Transform firstTarget = targets[0].transform; // headTransform = targets[0].transform.GetChild(9).GetChild(6).GetChild(1); // } // else if (targets[0].name == "Rabbit 2") // { // headTransform = targets[0].transform.GetChild(7).GetChild(6).GetChild(1); // } // else if (targets[0].name == "Eagle") // { // headTransform = targets[0].transform.GetChild(7).GetChild(6).GetChild(1); // } // else if (targets[0].name == "Hyena") // { // headTransform = targets[0].transform.GetChild(7).GetChild(6).GetChild(1); // } // else if (targets[0].name == "HM") // { // headTransform = targets[0].transform.GetChild(7).GetChild(6).GetChild(1); // } // else if (targets[0].name == "Cat") // { // headTransform = targets[0].transform.GetChild(7).GetChild(6).GetChild(1); // } // if (headTransform != null) // { // vcam.LookAt = vcam.Follow = GameObject.Find("mixamorig:Head").transform; // //vcam.LookAt = vcam.Follow = GameObject.Find("BUILD-WALL").transform; // //vcam.m_Lens.FieldOfView = 43; // } // } // } private void SetUpCamera() { if (isPlayerSelected) // Local multiplayer mode { SetupSplitScreenCameras(); } else // Single player or AI mode { SetupSingleCamera(); } } private void SetupSplitScreenCameras() { Camera mainCamera1 = GameObject.Find("MainCamera")?.GetComponent(); Camera mainCamera2 = GameObject.Find("MainCamera2")?.GetComponent(); if (mainCamera1 && mainCamera2) { // Set viewport rects mainCamera1.rect = new Rect(0, 0, 0.5f, 1); mainCamera2.rect = new Rect(0.5f, 0, 0.5f, 1); // Configure comprehensive layer masks for both cameras int commonLayers = LayerMask.GetMask("Default", "TransparentFX", "Water", "UI", "PostProcessing", "Ground"); // Camera 1: Everything + Player One specific layers mainCamera1.cullingMask = commonLayers | LayerMask.GetMask("Player One"); // Camera 2: Everything + Player Two specific layers mainCamera2.cullingMask = commonLayers | LayerMask.GetMask("Player Two"); SetupVirtualCameras(); } } private void SetupVirtualCameras() { var cinemachine1 = GameObject.Find("CinemachineCamera")?.GetComponent(); var cinemachine2 = GameObject.Find("CinemachineCamera2")?.GetComponent(); if (cinemachine1 && cinemachine2) { // Ensure both virtual cameras are active cinemachine1.gameObject.SetActive(true); cinemachine2.gameObject.SetActive(true); // Configure input providers var input1 = cinemachine1.GetComponent(); var input2 = cinemachine2.GetComponent(); if (input1) input1.PlayerIndex = 0; if (input2) input2.PlayerIndex = 1; // Assign players to cameras var player = GameObject.FindGameObjectWithTag("Player"); var enemy = GameObject.FindGameObjectWithTag("Enemy"); if (player && enemy) { // Set camera targets with correct Follow/LookAt separation // Follow = root (orbit center), LookAt = head (aim point) cinemachine1.Follow = player.transform; cinemachine1.LookAt = FindCharacterHead(player); cinemachine2.Follow = enemy.transform; cinemachine2.LookAt = FindCharacterHead(enemy); // Set player layers SetLayerRecursively(player, LayerMask.NameToLayer("Player One")); SetLayerRecursively(enemy, LayerMask.NameToLayer("Player Two")); } } } private void SetLayerRecursively(GameObject obj, int layer) { if (obj == null) return; obj.layer = layer; foreach (Transform child in obj.transform) { SetLayerRecursively(child.gameObject, layer); } } private void SetupSingleCamera() { GameObject camera = GameObject.Find("CinemachineCamera"); var vcam = camera?.GetComponent(); if (vcam != null) { var player = GameObject.FindGameObjectWithTag("Player"); Debug.Log($"[SelectionOptions] SetupSingleCamera - Found player: {(player != null ? player.name : "NULL")}"); if (player != null) { // Use root for Follow (stable orbit center) Transform followTransform = player.transform; // Use head for LookAt (camera points at upper body) Transform lookAtTransform = FindCharacterHead(player); vcam.Follow = followTransform; vcam.LookAt = lookAtTransform; Debug.Log($"[SelectionOptions] Camera - Follow: {followTransform.name}, LookAt: {lookAtTransform.name}"); } else { Debug.LogWarning("[SelectionOptions] No player with tag 'Player' found for camera setup!"); } } else { Debug.LogWarning("[SelectionOptions] CinemachineCamera not found in scene!"); } } private Transform FindCharacterHead(GameObject character) { if (character == null) return null; string characterName = character.name; Transform headTransform = null; // First, try to find head by common bone names (more reliable) string[] headBoneNames = { "mixamorig:Head", "Head", "head", "Bip001 Head", "Bone_Head" }; foreach (string boneName in headBoneNames) { headTransform = FindChildRecursive(character.transform, boneName); if (headTransform != null) { Debug.Log($"[SelectionOptions] Found head bone '{boneName}' for {characterName}"); return headTransform; } } // Fallback to character-specific hardcoded paths try { switch (characterName) { case var _ when characterName.Contains("Cheetah"): headTransform = character.transform.GetChild(9)?.GetChild(6)?.GetChild(1); break; case var _ when characterName.Contains("Rabbit"): case var _ when characterName.Contains("Eagle"): case var _ when characterName.Contains("Hyena"): case var _ when characterName.Contains("HM"): case var _ when characterName.Contains("Cat"): case var _ when characterName.Contains("CAT N"): headTransform = character.transform.GetChild(7)?.GetChild(6)?.GetChild(1); break; } if (headTransform != null) { Debug.Log($"[SelectionOptions] Found head via hardcoded path for {characterName}: {headTransform.name}"); return headTransform; } } catch (Exception e) { Debug.LogWarning($"Error finding head for character {characterName}: {e.Message}"); } // Final fallback: return root (will show legs like the user experienced) Debug.LogWarning($"[SelectionOptions] Could not find head bone for {characterName}, using root transform"); return character.transform; } private Transform FindChildRecursive(Transform parent, string name) { if (parent.name == name) return parent; foreach (Transform child in parent) { Transform result = FindChildRecursive(child, name); if (result != null) return result; } return null; } public void SpawnPlayers() { // Skip spawning for Cash System mode - CashSystemManager handles its own team spawning if (isCashSystemSelected) { Debug.Log("[SelectionOptions] SpawnPlayers skipped - Cash System mode uses CashSystemManager.SpawnTeams"); return; } try { isMobile = false; DeterminePlatform(); // Initialize dictionaries if they're null if (selectedPlayerDevice == null) { selectedPlayerDevice = new Dictionary(); } if (selectedPlayersAI == null) { selectedPlayersAI = new Dictionary(); } if (!isMobile) { if (isPlayerSelected) { if (selectedPlayerDevice == null) { selectedPlayerDevice = SelectionOptions.Instance.GetSelectedPlayerDevice(); } // Setup split screen immediately after spawning players SetupSplitScreenCameras(); // Setup split screen cameras var camera1 = GameObject.Find("MainCamera"); var camera2 = GameObject.Find("MainCamera2"); if (camera1 != null && camera2 != null) { camera1.GetComponent().rect = new Rect(0, 0, 0.5f, 1); camera2.GetComponent().rect = new Rect(0.5f, 0, 0.5f, 1); } foreach (var kvp in selectedPlayerDevice) { string playerName = kvp.Key; PlayerInfo playerInfo = kvp.Value; GameObject playerPrefab = LoadPlayerPrefab(playerName); if (playerPrefab != null) { PlayerInput playerInput = PlayerInput.Instantiate(playerPrefab, controlScheme: playerInfo.ControlScheme, pairWithDevices: playerInfo.Device); GameObject player = playerInput.gameObject; player.tag = "Player"; if (count == 0) { player.layer = LayerMask.NameToLayer("Player One"); } ConfigurePlayerInput(player); foreach (var pair in selectedPlayerDevice) { if (pair.Key == playerName) { count++; if (count == 2) { player.tag = "Enemy"; player.layer = LayerMask.NameToLayer("Player Two"); count = 0; } } } SetUpCamera(); } } } else if (isAISelected) { // Disable split screen for AI mode var camera2 = GameObject.Find("MainCamera2"); if (camera2 != null) { camera2.SetActive(false); } if (selectedPlayersAI == null) { selectedPlayersAI = SelectionOptions.Instance.GetSelectedPlayersAI(); } foreach (var kvp in selectedPlayersAI) { string playerName = kvp.Key; string playerMode = kvp.Value; GameObject playerPrefab = LoadPrefab(playerName, playerMode); if (playerPrefab != null) { SetUpPlayerInput(playerPrefab, playerMode); SetUpCamera(); } } } } else { if (isAISelected) { var camera2 = GameObject.Find("MainCamera2"); if (camera2 != null) { camera2.SetActive(false); } if (selectedPlayersAI == null) { selectedPlayersAI = SelectionOptions.Instance.GetSelectedPlayersAI(); } foreach (var kvp in selectedPlayersAI) { string playerName = kvp.Key; string playerMode = kvp.Value; GameObject playerPrefab = LoadPrefab(playerName, playerMode); if (playerPrefab != null) { SetUpPlayerInputAI(playerPrefab, playerMode); Debug.Log($"[SelectionOptions] Spawned {playerName} as {playerMode}"); } } // Set up camera AFTER all characters are spawned // This ensures the Player tag is properly assigned before camera targets SetUpCamera(); Debug.Log("[SelectionOptions] Camera setup complete after all spawns"); } } } // Close try block catch (Exception ex) { Debug.LogError($"Error in SpawnPlayers: {ex.Message}\n{ex.StackTrace}"); } } private void ConfigurePlayerInput(GameObject player) { PlayerInput playerInput = player.GetComponent(); PlayerScript playerScript = player.GetComponent(); // === NEW: Configure ControlType for local multiplayer === TeamMember teamMember = player.GetComponent(); if (teamMember == null) teamMember = player.AddComponent(); teamMember.CurrentTeam = TeamMember.Team.PlayerTeam; teamMember.SetControlType(TeamMember.ControlType.HumanControlled); if (CameraManager.Instance != null) { CameraManager.Instance.RegisterTeamMember(teamMember); // Note: In split screen, camera targets are handled differently via SetupVirtualCameras } Debug.Log($"[SelectionOptions] ConfigurePlayerInput: Configured {player.name} as HumanControlled"); playerInput.neverAutoSwitchControlSchemes = true; playerInput.defaultActionMap = "Player Controls"; // Movement playerInput.currentActionMap["Move"].performed += playerScript.OnMove; playerInput.currentActionMap["Move"].canceled += playerScript.OnMove; // Punches playerInput.currentActionMap["Jab"].performed += playerScript.OnJab; playerInput.currentActionMap["Right"].performed += playerScript.OnRight; playerInput.currentActionMap["LeftHook"].performed += playerScript.OnLeftHook; playerInput.currentActionMap["RightHook"].performed += playerScript.OnRightHook; playerInput.currentActionMap["LeftElbow"].performed += playerScript.OnLeftElbow; playerInput.currentActionMap["RightElbow"].performed += playerScript.OnRightElbow; playerInput.currentActionMap["RightBody"].performed += playerScript.OnRightBody; playerInput.currentActionMap["PowerPunchLeft"].performed += playerScript.OnPowerPunchLeft; playerInput.currentActionMap["SupermanPunch"].performed += playerScript.OnSupermanPunch; // Kicks playerInput.currentActionMap["LegKickRight"].performed += playerScript.OnLegKickRight; playerInput.currentActionMap["BodyKickRight"].performed += playerScript.OnBodyKickRight; playerInput.currentActionMap["KneeRight"].performed += playerScript.OnKneeRight; playerInput.currentActionMap["BackSideKick"].performed += playerScript.OnBackSideKick; playerInput.currentActionMap["FrontKickRight"].performed += playerScript.OnFrontKickRight; playerInput.currentActionMap["LegPowerKickRight"].performed += playerScript.OnLegPowerKickRight; // Dodges playerInput.currentActionMap["JumpBack"].performed += playerScript.OnJumpBack; playerInput.currentActionMap["JumpLeft"].performed += playerScript.OnJumpLeft; playerInput.currentActionMap["JumpRight"].performed += playerScript.OnJumpRight; // Blocks TryBindAction(playerInput, "BlockStepBack", playerScript.OnBlockStepBack); TryBindAction(playerInput, "BlockBodyLeft", playerScript.OnBlockBodyLeft); TryBindAction(playerInput, "BlockLeg", playerScript.OnBlockLeg); // NEW: Vicious Attacks - Make sure to add these to your input action asset TryBindAction(playerInput, "Chokeslam", playerScript.OnChokeslam); TryBindAction(playerInput, "Suplex", playerScript.OnSuplex); TryBindAction(playerInput, "GiantSwing", playerScript.OnGiantSwing); TryBindAction(playerInput, "DiamondCrusher", playerScript.OnDiamondCrusher); TryBindAction(playerInput, "SumoSlap", playerScript.OnSumoSlap); TryBindAction(playerInput, "JavelinTackle", playerScript.OnJavelinTackle); // NEW: Special Finishers - Make sure to add these to your input action asset TryBindAction(playerInput, "RKO", playerScript.OnRKO); TryBindAction(playerInput, "Spear", playerScript.OnSpear); TryBindAction(playerInput, "RockBottom", playerScript.OnRockBottom); TryBindAction(playerInput, "F5", playerScript.OnF5); // SwantonBomb method doesn't exist in PlayerScript yet // TODO: Implement OnSwantonBomb in PlayerScript // TryBindAction(playerInput, "SwantonBomb", playerScript.OnSwantonBomb); // Pause TryBindAction(playerInput, "Pause", player.GetComponent().OnPause); } // Helper method to safely bind an action if it exists in the action map private void TryBindAction(PlayerInput playerInput, string actionName, System.Action callback) { InputAction action = playerInput.currentActionMap.FindAction(actionName); if (action != null) { action.performed += callback; } else { Debug.LogWarning($"Action '{actionName}' not found in current action map. Make sure to add it to your Input Actions asset."); } } // public void SpawnPlayers() // { // //return this mobile to false // isMobile = false; // //determine platform // DeterminePlatform(); // //isAISelected boolean is switched in the ModeSelectionManager.cs // if (!isMobile) // { // if (isPlayerSelected) // { // if (selectedPlayerDevice == null) // { // selectedPlayerDevice = SelectionOptions.Instance.GetSelectedPlayerDevice(); // } // // Now you can iterate through playerDeviceDict and spawn players using the data // foreach (var kvp in selectedPlayerDevice) // { // string playerName = kvp.Key; // PlayerInfo playerInfo = kvp.Value; // GameObject playerPrefab = gameObject; // Assuming your player prefab names match the player object names // if (playerName == "Windham") // { // playerPrefab = Resources.Load("Rabbit 2"); // Assuming your player prefab names match the player object names // } // else if (playerName == "Amira") // { // playerPrefab = Resources.Load("Cheetah 2"); // Assuming your player prefab names match the player object names // } // else if (playerName == "Bahman") // { // playerPrefab = Resources.Load("Eagle"); // Assuming your player prefab names match the player object names // } // else if (playerName == "Ziggy") // { // playerPrefab = Resources.Load("Cat"); // Assuming your player prefab names match the player object names // } // else if (playerName == "Imani") // { // playerPrefab = Resources.Load("Hyena"); // Assuming your player prefab names match the player object names // } // else if (playerName == "Amon") // { // playerPrefab = Resources.Load("Hammerhead"); // Assuming your player prefab names match the player object names // } // if (playerPrefab != null) // { // var player = PlayerInput.Instantiate(playerPrefab, controlScheme: playerInfo.ControlScheme, pairWithDevices: playerInfo.Device); // player.tag = "Player"; // PlayerInput playerInput = player.GetComponent(); // PlayerScript playerScript = player.GetComponent(); // playerInput.neverAutoSwitchControlSchemes = true; // playerInput.defaultActionMap = "Player Controls"; // playerInput.currentActionMap["Move"].performed += playerScript.OnMove; // playerInput.currentActionMap["Move"].canceled += playerScript.OnMove; // //punches // playerInput.currentActionMap["Jab"].performed += playerScript.OnJab; // playerInput.currentActionMap["Right"].performed += playerScript.OnRight; // playerInput.currentActionMap["LeftHook"].performed += playerScript.OnLeftHook; // playerInput.currentActionMap["RightHook"].performed += playerScript.OnRightHook; // playerInput.currentActionMap["LeftElbow"].performed += playerScript.OnLeftElbow; // playerInput.currentActionMap["RightElbow"].performed += playerScript.OnRightElbow; // playerInput.currentActionMap["RightBody"].performed += playerScript.OnRightBody; // playerInput.currentActionMap["PowerPunchLeft"].performed += playerScript.OnPowerPunchLeft; // playerInput.currentActionMap["SupermanPunch"].performed += playerScript.OnSupermanPunch; // //kicks // playerInput.currentActionMap["LegKickRight"].performed += playerScript.OnLegKickRight; // playerInput.currentActionMap["BodyKickRight"].performed += playerScript.OnBodyKickRight; // playerInput.currentActionMap["KneeRight"].performed += playerScript.OnKneeRight; // playerInput.currentActionMap["BackSideKick"].performed += playerScript.OnBackSideKick; // playerInput.currentActionMap["FrontKickRight"].performed += playerScript.OnFrontKickRight; // playerInput.currentActionMap["LegPowerKickRight"].performed += playerScript.OnLegPowerKickRight; // //dodges // playerInput.currentActionMap["JumpBack"].performed += playerScript.OnJumpBack; // playerInput.currentActionMap["JumpLeft"].performed += playerScript.OnJumpLeft; // playerInput.currentActionMap["JumpRight"].performed += playerScript.OnJumpRight; // //blocks // playerInput.currentActionMap["BlockStepBack"].performed += playerScript.OnBlockStepBack; // playerInput.currentActionMap["BlockBodyLeft"].performed += playerScript.OnBlockBodyLeft; // playerInput.currentActionMap["BlockLeg"].performed += playerScript.OnBlockLeg; // playerInput.currentActionMap["Pause"].performed += player.GetComponent().OnPause; // foreach (var pair in selectedPlayerDevice) // { // if (pair.Key == playerName) // { // count++; // if (count == 2) // { // player.gameObject.tag = "Enemy"; // count = 0; // } // } // } // SetUpCamera(); // } // else // { // Debug.LogWarning($"Player prefab '{playerName}' not found in resources."); // } // } // } // else if (isAISelected) // { // if (selectedPlayersAI == null) // { // selectedPlayersAI = SelectionOptions.Instance.GetSelectedPlayersAI(); // } // foreach (var kvp in selectedPlayersAI) // { // string playerName = kvp.Key; // string playerMode = kvp.Value; // GameObject playerPrefab = gameObject; // playerPrefab = LoadPrefab(playerName, playerMode); // if (playerPrefab != null) // { // SetUpPlayerInput(playerPrefab, playerMode); // SetUpCamera(); // } // else // { // Debug.LogWarning($"Player prefab '{playerName}' not found in resources."); // } // } // } // } // else // { // if (isAISelected) // { // if (selectedPlayersAI == null) // { // selectedPlayersAI = SelectionOptions.Instance.GetSelectedPlayersAI(); // } // foreach (var kvp in selectedPlayersAI) // { // string playerName = kvp.Key; // string playerMode = kvp.Value; // GameObject playerPrefab = gameObject; // playerPrefab = LoadPrefab(playerName, playerMode); // if (playerPrefab != null) // { // SetUpPlayerInputAI(playerPrefab, playerMode); // SetUpCamera(); // } // else // { // Debug.LogWarning($"Player prefab '{playerName}' not found in resources."); // } // } // } // } // } }