//---------------------------------------------------------------------------------------------------------------------------------------------------
//
// 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.Generic;
using System.Text;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Input;
using DarkWynter.Engine;
using DarkWynter.Engine.Globals;
using DarkWynter.Engine.Utilities;
using DarkWynter.Engine.Controllers;
#endregion
///
/// Game Controller for getting player inputs in-game
///
public class GameController : Controller
{
///
/// Constructor for PC and mouse controls
///
/// Player index for this controller
public GameController(int playerNumber): base(playerNumber)
{
Add(new KeyboardControl(Keys.W, MoveForward, 10));
Add(new KeyboardControl(Keys.A, MoveLeft, 10));
Add(new KeyboardControl(Keys.D, MoveRight, 10));
Add(new KeyboardControl(Keys.S, MoveBackward, 10));
Add(new KeyboardControl(Keys.Space, Jump, 100));
//Add(new KeyboardControl(Keys.D1, IncrementTemperature, 100));
//Add(new KeyboardControl(Keys.D2, DecrementTemperature, 100));
//Add(new KeyboardControl(Keys.D3, IncrementDelta, 100));
//Add(new KeyboardControl(Keys.D4, DecrementDelta, 100));
Add(new KeyboardControl(Keys.Z, ZoomIn, 100));
Add(new KeyboardControl(Keys.X, ZoomOut, 100));
Add(new KeyboardControl(Keys.LeftShift, MovementToggle, 200));
Add(new KeyboardControl(Keys.F12, FPSToggle, 100));
Add(new KeyboardControl(Keys.OemTilde, CompilerConsoleToggle, 100));
Add(new KeyboardControl(Keys.Escape, Escape, 100));
Add(new KeyboardControl(Keys.F1, ChangeWeaponDown, 100));
Add(new KeyboardControl(Keys.F2, ChangeWeaponUp, 100));
Add(new KeyboardControl(Keys.RightShift, FPVToggle, 200));
Add(new MouseControl(Enums_Engine.ControlType.Motion, Rotate, 0));
Add(new MouseControl(Enums_Engine.ControlType.LeftButton, Attack, 0));
Add(new MouseControl(Enums_Engine.ControlType.RightButton, Defend, 0));
Add(new MouseControl(Enums_Engine.ControlType.ScrollWheel, ChangeWeapon, 0));
}
///
/// Constructor for Xbox only controls
///
///
public GameController(PlayerIndex playerIndex)
: base(playerIndex)
{
// Add xbox controls
}
///
/// Constructor for Xbox and keyboard controls
///
/// Player index in ObjectLibrary
/// Player index for this controller
public GameController(int player, PlayerIndex playerIndex)
: base(player, playerIndex)
{
Add(new KeyboardControl(Keys.W, MoveForward, 0));
Add(new KeyboardControl(Keys.A, MoveLeft, 0));
Add(new KeyboardControl(Keys.D, MoveRight, 0));
Add(new KeyboardControl(Keys.S, MoveBackward, 0));
Add(new KeyboardControl(Keys.Space, Jump, 10));
Add(new KeyboardControl(Keys.D1, IncrementTemperature, 100));
Add(new KeyboardControl(Keys.D2, DecrementTemperature, 100));
Add(new KeyboardControl(Keys.D3, IncrementDelta, 100));
Add(new KeyboardControl(Keys.D4, DecrementDelta, 100));
Add(new KeyboardControl(Keys.Z, ZoomIn, 100));
Add(new KeyboardControl(Keys.X, ZoomOut, 100));
Add(new KeyboardControl(Keys.LeftShift, MovementToggle, 200));
Add(new KeyboardControl(Keys.F12, FPSToggle, 100));
Add(new KeyboardControl(Keys.OemTilde, CompilerConsoleToggle, 100));
Add(new KeyboardControl(Keys.Escape, Escape, 3000));
// Add xbox controls
}
#region G2L form events
public static void NonControllerBasedTerrainMod(TerrainModRequest request)
{
//TerrainModRequest modRequest = new TerrainModRequest(amount, startPosition, endPosition, radius, Enums_Engine.TerrainModType.EQUALTO);
MajikWand.TerrainMod(request);
}
#endregion
private void Escape(ControllerBoolEventArgs args)
{
DarkWynter.Engine.DarkWynterEngine.DoExit(
new object(),
new System.Windows.Forms.FormClosingEventArgs( new System.Windows.Forms.CloseReason(), false)
);
}
private void CompilerConsoleToggle(ControllerBoolEventArgs args)
{
Statics_Engine.SystemSettings.enableCompilerConsole = !Statics_Engine.SystemSettings.enableCompilerConsole;
}
private void IncrementTemperature(ControllerBoolEventArgs args)
{
args.objectLibrary.humans[playerNumber].AttackTemperature(true);
}
private void DecrementTemperature(ControllerBoolEventArgs args)
{
args.objectLibrary.humans[playerNumber].AttackTemperature(false);
}
private void IncrementDelta(ControllerBoolEventArgs args)
{
args.objectLibrary.humans[playerNumber].AttackMagnitude(true);
}
private void DecrementDelta(ControllerBoolEventArgs args)
{
args.objectLibrary.humans[playerNumber].AttackMagnitude(false);
}
private void FPSToggle(ControllerBoolEventArgs args)
{
Statics_Engine.SystemSettings.enableFPSDisplay = !Statics_Engine.SystemSettings.enableFPSDisplay;
}
private void MovementToggle(ControllerBoolEventArgs args)
{
args.objectLibrary.humans[playerNumber].ToggleMovementType();
}
private void MoveForward(ControllerBoolEventArgs args)
{
args.objectLibrary.humans[playerNumber].Translate(new Vector2(0, 10));
}
private void MoveBackward(ControllerBoolEventArgs args)
{
args.objectLibrary.humans[playerNumber].Translate(new Vector2(0, -10));
}
private void MoveLeft(ControllerBoolEventArgs args)
{
args.objectLibrary.humans[playerNumber].Translate(new Vector2(-10, 0));
}
private void MoveRight(ControllerBoolEventArgs args)
{
args.objectLibrary.humans[playerNumber].Translate(new Vector2(10,0));
}
private void Rotate(ControllerVec2EventArgs args)
{
args.objectLibrary.humans[playerNumber].Rotate(args.value / new Vector2(4.0f));
}
private void Jump(ControllerBoolEventArgs args)
{
args.objectLibrary.humans[playerNumber].Jump(args.objectLibrary);
}
private void ZoomIn(ControllerBoolEventArgs args)
{
args.objectLibrary.humans[playerNumber].Zoom(true);
}
private void ZoomOut(ControllerBoolEventArgs args)
{
args.objectLibrary.humans[playerNumber].Zoom(false);
}
private void Attack(ControllerBoolEventArgs args)
{
args.objectLibrary.humans[playerNumber].ChangeAttackAmount(0.5f);
}
private void Defend(ControllerBoolEventArgs args)
{
args.objectLibrary.humans[playerNumber].ChangeAttackAmount(-0.5f);
}
private void ChangeWeapon(ControllerIntEventArgs args)
{
args.objectLibrary.humans[playerNumber].AttackModeSwitching(args.value);
}
private void ChangeWeaponUp(ControllerBoolEventArgs args)
{
args.objectLibrary.humans[playerNumber].AttackModeSwitching(true);
}
private void ChangeWeaponDown(ControllerBoolEventArgs args)
{
args.objectLibrary.humans[playerNumber].AttackModeSwitching(false);
}
private void FPVToggle(ControllerBoolEventArgs args)
{
args.objectLibrary.humans[playerNumber].FPVToggle();
}
}
}