Difference between revisions of "Game Programming Class5"
(→Input Controller Unity) |
|||
Line 135: | Line 135: | ||
</csharp> | </csharp> | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
==Homework== | ==Homework== |
Revision as of 03:29, 6 October 2015
Contents
Game Services
Review Game Components
IntroGameLibrary
Turn the console class into a service
Each GameService needs to have a unique interface so that there is an entry in the system types table. The interface allows the game to return the correct type.
- GameConsole.cs
All of these files are available in the IntoGameLibrary Project in the classfolders.
Input Controller Mongame
from project IntroPacManMovementController file PacManController.cs
<csharp> InputHandler input; //game service to handle input public Vector2 Direction {get; private set;} ...
public PacManController(Game game)
{ //get input handler from game services input = (InputHandler)game.Services.GetService<IInputHandler>(); if (input == null) { throw new Exception("PacMan controller depends on InputHandler service please add Input Handler as a service first"); }
...
public void Update() //update accesses InputHandler
{ //Input for update from analog stick GamePadState gamePad1State = input.GamePads[0]; //HACK hard coded player index #region LeftStick Vector2 pacStickDir = Vector2.Zero; if (gamePad1State.ThumbSticks.Left.Length() > 0.0f) { pacStickDir = gamePad1State.ThumbSticks.Left; pacStickDir.Y *= -1; //Invert Y Axis
... </csharp>
The MonoGamePacMan game component then uses the controller
<csharp> internal PacManController controller { get; private set; } ... public MonoGamePacMan(Game game)
: base(game) { this.controller = new PacManController(game); ... }
... public override void Update(GameTime gameTime)
{ //Elapsed time since last update float time = (float)gameTime.ElapsedGameTime.TotalMilliseconds; this.controller.Update();
this.Location += ((this.controller.Direction * (time / 1000)) * Speed); //Simple Move this.Rotate = this.controller.Rotate;
...
</csharp>
Input Controller Unity
PlayerController from https://iam.colum.edu:8443/!/#GPMonogame3/view/head/trunk/jeffUnity/UnityGameDemos/Assets/Scripts/PacMan/PlayerController.cs
<csharp> public Vector2 direction = new Vector2();
private Vector2 keyDirection; private Vector2 padDirection;
... void Update () {
HandleKeyboard();
HandleGamepad();
...
private void HandleGamepad()
{ //Gamepad padDirection.x = padDirection.y = 0; //and keyboard unity already sums them together padDirection.x = Input.GetAxis("Horizontal"); padDirection.y = Input.GetAxis("Vertical");
if (padDirection.magnitude > 0) { //Debug.Log(padDirection + " " + padDirection.magnitude + " " + (padDirection.magnitude > 0)); direction += padDirection; } }
</csharp>
Player.cs from https://iam.colum.edu:8443/!/#GPMonogame3/view/head/trunk/jeffUnity/UnityGameDemos/Assets/Scripts/PacMan/Player.cs
<csharp> private PlayerController controller;
public Vector2 Direction = new Vector2(1, 0);
... void Start()
{ //Get PlayerController from game object controller = GetComponent<PlayerController>(); //Log error if controller is null will throw null refernece exception eventually if (controller == null) { Debug.LogWarning("GetComponent of type " + typeof(PlayerController) + " failed on " + this.name, this); }
...
// Update is called once per frame
void Update() { //Check for input from PlayerController if (this.controller.hasInputForMoverment) { this.Direction = this.controller.direction; //Get Direction from PlayerController
</csharp>
Homework
InputControllerMonogame
InputControllerUnity