using UnityEngine;
using System.Collections;
using XboxCtrlrInput;
using PlayerInput;
using System.Collections.Generic;
using System;
using System.Linq;
namespace PlayerInput
{
public class InputManager : MonoBehaviour
{
// TODO old
//public GameManager GameManager;
public PlayerController PlayerPrefab;
// Use this for initialization
void Start()
{
// TODO old
//GameManager.OnResolutionChanged += ResolutionChanged;
RegisterControllerToPlayer(XboxController.First, FindObjectOfType<PlayerController>(), PotentialPlayers[0]);
}
public enum UICorner
{
TopLeft,
TopRight,
BottomLeft,
BottomRight
}
public struct PlayerInfo
{
public int ID;
//public UICorner Corner;
//public Color Color;
//public string TextureName;
//public string PortraitName;
}
public static readonly List<PlayerInfo> PotentialPlayers = new List<PlayerInfo>
{
new PlayerInfo { ID = 1, /*Corner = UICorner.TopLeft, Color = Color.green */ }, //, TextureName = "WizardAquaTex", PortraitName = "PlayerPortraitTeal" },
new PlayerInfo { ID = 2, /*Corner = UICorner.TopRight, Color = Color.red */ }, //, TextureName = "WizardBlackTex", PortraitName = "PlayerPortraitBlack" },
new PlayerInfo { ID = 3, /*Corner = UICorner.BottomLeft, Color = Color.yellow */ }, //, TextureName = "WizardRedTex", PortraitName = "PlayerPortraitRed" },
new PlayerInfo { ID = 4, /*Corner = UICorner.BottomRight, Color = Color.cyan */ }, //, TextureName = "WizardWhiteTex", PortraitName = "PlayerPortraitWhite" },
/*
new PlayerInfo { ID = 1, Corner = UICorner.TopLeft, Color = new Color(104 / 255.0f, 98 / 255.0f, 182 / 255.0f) }, //, TextureName = "WizardAquaTex", PortraitName = "PlayerPortraitTeal" },
new PlayerInfo { ID = 2, Corner = UICorner.TopRight, Color = new Color(146 / 255.0f, 55 / 255.0f, 64 / 255.0f) }, //, TextureName = "WizardBlackTex", PortraitName = "PlayerPortraitBlack" },
new PlayerInfo { ID = 3, Corner = UICorner.BottomLeft, Color = new Color(37 / 255.0f, 122 / 255.0f, 97 / 255.0f) }, //, TextureName = "WizardRedTex", PortraitName = "PlayerPortraitRed" },
new PlayerInfo { ID = 4, Corner = UICorner.BottomRight, Color = new Color(234 / 255.0f, 242 / 255.0f, 183 / 255.0f) }, //, TextureName = "WizardWhiteTex", PortraitName = "PlayerPortraitWhite" },
*/
};
private Dictionary<XboxController, InputSource<PlayerController>> controllersToInput = new Dictionary<XboxController, InputSource<PlayerController>>();
private HashSet<PlayerInfo> usedPlayers = new HashSet<PlayerInfo>();
public IEnumerable<PlayerController> ActivePlayers
{
get
{
return controllersToInput.Values.Select(source => source.Target);
}
}
public Action OnPlayerAdded;
// Update is called once per frame
void Update()
{
for (int i = 1; i <= 4; i++)
{
XboxController controller = (XboxController)i;
if (XCI.GetButtonDown(XboxButton.Start, controller))
{
if (!controllersToInput.ContainsKey(controller))
{
PlayerInfo? newPlayerInfo = null;
foreach (PlayerInfo info in PotentialPlayers)
{
if (!usedPlayers.Contains(info))
{
newPlayerInfo = info;
break;
}
}
if (newPlayerInfo.HasValue)
{
PlayerController p = GameObject.Instantiate(PlayerPrefab).GetComponentInChildren<PlayerController>();
RegisterControllerToPlayer(controller, p, newPlayerInfo.Value);
}
}
}
}
}
public void RegisterControllerToPlayer(XboxController controller, PlayerController p, PlayerInfo newPlayerInfo)
{
XboxControllerInputSource<PlayerController> newPlayerInput = new XboxControllerInputSource<PlayerController>(controller);
p.SetInput(newPlayerInput, newPlayerInfo);
newPlayerInput.SetTarget(p);
controllersToInput.Add(controller, newPlayerInput);
//GameManager.RootDrawable.addChild(p.UI);
//LayoutUI(p.UI, p.UICorner);
usedPlayers.Add(newPlayerInfo);
if (OnPlayerAdded != null) OnPlayerAdded();
}
private void ResolutionChanged(int width, int height)
{
foreach (PlayerController player in controllersToInput.Values.Select(input => input.Target))
{
//LayoutUI(player.UI, player.UICorner);
}
}
// TODO old
/*
private void LayoutUI(Drawable ui, UICorner uiCorner)
{
switch (uiCorner)
{
case UICorner.TopLeft:
ui.X = 0;
ui.Y = 0;
break;
case UICorner.TopRight:
ui.X = GameSettings.ScreenWidth;
ui.Y = 0;
break;
case UICorner.BottomLeft:
ui.X = 0;
ui.Y = GameSettings.ScreenHeight;
break;
case UICorner.BottomRight:
ui.X = GameSettings.ScreenWidth;
ui.Y = GameSettings.ScreenHeight;
break;
}
}
*/
}
}