//---------------------------------------------------------------------------------------------------------------------------------------------------
//
// Copyright (C)2007 DarkWynter Studios. All rights reserved.
//
//---------------------------------------------------------------------------------------------------------------------------------------------------
// {Contact : darkwynter.com for licensing information
//---------------------------------------------------------------------------------------------------------------------------------------------------
namespace DarkWynter.Engine.Controllers
{
#region Using Statements
using System;
using System.Collections;
using System.Collections.Generic;
using System.Text;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Input;
using System.Diagnostics;
using DarkWynter.Engine.Globals;
using DarkWynter.Engine.ObjectLib;
using DarkWynter.Engine.Menus;
using DarkWynter.Engine.Controllers;
using DarkWynter.Stream;
using Microsoft.Xna.Framework.Graphics;
#endregion
///
/// Event Publisher
/// Game level classes observer and subscribe to these events
///
public class ControllerManager
{
///
/// Checks to see if a new controller has been plugged in
///
/// ObjectLibrary
public static void CheckForControllers(ObjectLibrary objectLibrary)
{
// Retrieve a list of PlayerIndexs already connected
List alreadyConnected = CheckControllersAreStillConnected();
for (PlayerIndex i = PlayerIndex.One; i <= PlayerIndex.Four; i++)
{
// Check if our gamepad is connected
if (!alreadyConnected.Contains(i) && GamePad.GetState(i).IsConnected)
{
// This player has not been initialized so increment number of players and create the new player.
DarkWynterEngine.gameControllers.Add(new GameController(i));
DarkWynterEngine.menuControllers.Add(new MenuController(i));
Statics_Engine.SystemSettings.TOTAL_PLAYERS++;
Renderer.ResetViewports(Statics_Engine.SystemSettings.TOTAL_PLAYERS);
}
}
#if !XBOX360
// This part is to setup the default keyboard player in case there are no controllers connected
if (Statics_Engine.SystemSettings.TOTAL_PLAYERS == 0)
{
if (DarkWynterEngine.gameControllers.Count == 0)
{
// If we are player 1 then we also have pc controls
DarkWynterEngine.gameControllers.Add(new GameController(Statics_Engine.SystemSettings.TOTAL_PLAYERS));
DarkWynterEngine.menuControllers.Add(new MenuController(Statics_Engine.SystemSettings.TOTAL_PLAYERS));
}
// We have one player the keyboard player
Statics_Engine.SystemSettings.TOTAL_PLAYERS++;
// Create the player, PlayerIndex.One is passed as a default value and not used
Renderer.ResetViewports(Statics_Engine.SystemSettings.TOTAL_PLAYERS);
// Initialize the player as alive
objectLibrary.humans[0].health = 0;
objectLibrary.humans[0].manna = 100;
}
// If Player 1 has a controller make sure they are given the keyboard too
else if (Statics_Engine.SystemSettings.TOTAL_PLAYERS >= 1 &&
DarkWynterEngine.gameControllers[0].playerControllerType == Enums_Engine.ControllerType.XBOX_ONLY)
{
DarkWynterEngine.gameControllers[0] = new GameController(0, PlayerIndex.One);
DarkWynterEngine.menuControllers[0] = new MenuController(0, PlayerIndex.One);
}
#endif
}
private static List CheckControllersAreStillConnected()
{
List alreadyConnected = new List();
for (int i = 0; i < DarkWynterEngine.gameControllers.Count; i++)
{
if (DarkWynterEngine.gameControllers[i].playerControllerType != Enums_Engine.ControllerType.PC_ONLY)
{
// Check if controller has been disconnected
if (!GamePad.GetState(DarkWynterEngine.gameControllers[i].playerIndex).IsConnected)
{
// Controller has been disconnected so remove it
DarkWynterEngine.gameControllers.RemoveAt(i);
DarkWynterEngine.menuControllers.RemoveAt(i);
i--;
}
else
{
// Still connected so add to our list of already connected controllers
alreadyConnected.Add(DarkWynterEngine.gameControllers[i].playerIndex);
}
}
}
return alreadyConnected;
}
}
}