//--------------------------------------------------------------------------------------------------------------------------------------------------- // // Copyright (C)2007 DarkWynter Studios. All rights reserved. // //--------------------------------------------------------------------------------------------------------------------------------------------------- // {Contact : darkwynter.com for licensing information //--------------------------------------------------------------------------------------------------------------------------------------------------- namespace DWControllerDemo { #region Using Statements using System; using System.Collections.Generic; using System.Text; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Input; using DarkWynter.Engine; using DarkWynter.Engine.Controllers; using DWControllerDemo; using DW.Globals; using DW.Stream; using DW.Data.GameObjects; #endregion /// /// Menu Controller for getting player inputs for the menu system /// public class MenuController : Controller { #region CTORs /// /// Constructor /// /// Player index for this controller public MenuController(int playerNumber) : base(playerNumber) { Init(); } /// /// Constructor for Xbox only controls /// public MenuController(PlayerIndex playerIndex) : base(playerIndex) { Init(); } /// /// Constructor for Xbox and keyboard controls /// /// Player index in ObjectLibrary /// Player index for this controller public MenuController(int player, PlayerIndex playerIndex) : base(player, playerIndex) { Init(); } #endregion // NOTES: // We need different controller constructors for differentiating xbox vs. pc vs. xboxpc controller types // We only want two key setups most of the time tho, so we defer to Init which switches pc and xbox configs concisely based on type. private void Init() { // NOTES: // We need different controller constructors for differentiating xbox vs. pc vs. xboxpc controller types // We only want two key setups most of the time tho, so we defer to Init which switches pc and xbox configs concisely based on type. if (playerControllerType == ControllerType.PC_ONLY || playerControllerType == ControllerType.PC_AND_XBOX) { Add(new KeyboardControl(Keys.Escape, Escape, 100)); Add(new KeyboardControl(Keys.Enter, AdvanceScreen, 100)); Add(new KeyboardControl(Keys.Back, ReverseScreen, 200)); Add(new KeyboardControl(Keys.Up, MenuUp, 200)); Add(new KeyboardControl(Keys.Down, MenuDown, 200)); Add(new KeyboardControl(Keys.Left, MenuLeft, 200)); Add(new KeyboardControl(Keys.Right, MenuRight, 200)); } if (playerControllerType == ControllerType.XBOX_ONLY || playerControllerType == ControllerType.PC_AND_XBOX) { Add(new XboxDigitalControl(Buttons.DPadUp, MenuUp, 100)); Add(new XboxDigitalControl(Buttons.DPadDown, MenuDown, 100)); Add(new XboxDigitalControl(Buttons.DPadLeft, MenuLeft, 100)); Add(new XboxDigitalControl(Buttons.DPadRight, MenuRight, 100)); Add(new XboxDigitalControl(Buttons.Back, Escape, 200)); Add(new XboxDigitalControl(Buttons.Start, AdvanceScreen, 200)); } } // NOTES: // the args list coming into each Input Delegate contain a "value" and a List "args". // "value" is always the EventArg type (booleventarg=true/false; floateventarg=0-1) // "args" can be used to pass data from PhoenixGame to the Input Delegates. // // EG- PhoenixGame could pass player into controller.Update(new object[]{player}) // Then our Input Delegate can access sumthing like: (args.args[0] as Player).paddle.MoveUp(args.value); // BTB: Apologies for the double "args" thing.. makes it easy to trace though.. Better ideas??? contact me.. flatline.darkwynter.com #region Input Delegates private void Escape(ControllerBoolEventArgs args) { Statics._self.Exit(); } private void AdvanceScreen(ControllerBoolEventArgs args) { for (int i = 0; i < Renderer.menuSystem.gameScreens.Count; i++) { // Update appropriate menu screen if (Statics.menuState == Renderer.menuSystem.gameScreens[i].GetEngineState()) { Renderer.menuSystem.gameScreens[i].MenuStart(0); break; } } } private void ReverseScreen(ControllerBoolEventArgs args) { for (int i = 0; i < Renderer.menuSystem.gameScreens.Count; i++) { // Update appropriate menu screen if (Statics.menuState == Renderer.menuSystem.gameScreens[i].GetEngineState()) { Renderer.menuSystem.gameScreens[i].MenuBack(); break; } } } private void MenuUp(ControllerBoolEventArgs args) { for (int i = 0; i < Renderer.menuSystem.gameScreens.Count; i++) { if (Renderer.menuSystem.gameScreens[i].hasMenu) { Renderer.menuSystem.gameScreens[i].MenuUp(); break; } } } private void MenuDown(ControllerBoolEventArgs args) { for (int i = 0; i < Renderer.menuSystem.gameScreens.Count; i++) { // Update appropriate menu screen if (Statics.menuState == Renderer.menuSystem.gameScreens[i].GetEngineState()) { Renderer.menuSystem.gameScreens[i].MenuDown(); break; } } } private void MenuLeft(ControllerBoolEventArgs args) { for (int i = 0; i < Renderer.menuSystem.gameScreens.Count; i++) { if (Renderer.menuSystem.gameScreens[i].hasMenu ==true) { Renderer.menuSystem.gameScreens[i].MenuLeft(); break; } } } private void MenuRight(ControllerBoolEventArgs args) { for (int i = 0; i < Renderer.menuSystem.gameScreens.Count; i++) { if (Renderer.menuSystem.gameScreens[i].hasMenu == true) { Renderer.menuSystem.gameScreens[i].MenuRight(); break; } } } #endregion } }