//--------------------------------------------------------------------------------------------------------------------------------------------------- // // 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; } } }