using System.Collections; using System.Collections.Generic; using UnityEngine; /// /// This class provides a keyboard controller for a ShopModel in a list view, it defines how to handle keyboard input in HandleInput() /// public class ListKeyboardController : ShopController { private ViewConfig viewConfig;//To move the focus up and down, we need to know how many columns the grid view has, in the current setup, private int columnCount; //this information can be found in a ViewConfig scriptable object, which serves as a configuration file for //views. private int currentItemIndex = 0;//The current item index is changed whenever the focus is moved with keyboard keys //------------------------------------------------------------------------------------------------------------------------ // Initialize() //------------------------------------------------------------------------------------------------------------------------ //Override Initialize to set up additional information needed by this concrete controller: number of columns in the view public override ShopController Initialize(ShopModel pShopModel) { base.Initialize(pShopModel);//Call base.Initialize to set up the model currentItemIndex = model.GetSelectedItemIndex();//Synchronize the current item index with the model viewConfig = Resources.Load("ViewConfig");//Load the ViewConfig scriptable object from the Resources folder Debug.Assert(viewConfig != null); columnCount = viewConfig.gridViewColumnCount;//Try to set up the column count, fails silently return this; } //------------------------------------------------------------------------------------------------------------------------ // HandleInput() //------------------------------------------------------------------------------------------------------------------------ //Currently hardcoded to AWSD to move focus and K to confirm the selected item. No criterion for the grade, so since lists are assumed to have one colum, we just hardcode that public override void HandleInput() { //Move the focus to the left if possible if (Input.GetKeyDown(KeyCode.A)) { currentItemIndex--; if (currentItemIndex < 0) { currentItemIndex = 0; } } //Move the focus to the right if possible if (Input.GetKeyDown(KeyCode.D)) { currentItemIndex++; if (currentItemIndex >= this.Model.inventory.GetItemCount()) { currentItemIndex = this.Model.inventory.GetItemCount() - 1; } } //Move the focus up if possible if (Input.GetKeyDown(KeyCode.W)) { currentItemIndex--; if (currentItemIndex < 0) { currentItemIndex = 0; } } //Move the focus down if possible if (Input.GetKeyDown(KeyCode.S)) { currentItemIndex++; if (currentItemIndex >= this.Model.inventory.GetItemCount()) { currentItemIndex = this.Model.inventory.GetItemCount() - 1; } } // List view does not support item filtering at the moment so we don't use the list at all //Select the item SelectItemByIndex(currentItemIndex); //Confirm the selected item when K is pressed if (Input.GetKeyDown(KeyCode.K)) { ConfirmSelectedItem(); currentItemIndex--; } } }