Game Programming Class5

esse quam videri
Revision as of 03:29, 6 October 2015 by Jeff (talk | contribs)
Jump to: navigation, search

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

https://iam.colum.edu:8443/!/#GPMonogame3/view/head/trunk/jeff/IntroPacManMovementController/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

https://iam.colum.edu:8443/!/#GPMonogame3/view/head/trunk/jeff/IntroPacManMovementController/MonoGamePacMan.cs

<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