UNPKG

hobgoblin

Version:

A framework for writing roguelike games in JavaScript, implementing ROT.js

103 lines (96 loc) 7.24 kB
Game.Input = {}; Game.Input.controlMaps = {}; // Defining controlMaps like this should, theoretically, allow key bindings for each screen // to be re-configured on the fly; simply say: // // `Game.Input.controlMaps[screen][inputType][input] = someFunc.bind(this, params);` // // and ker-blamo. // These controlMaps could/should be defined from each screen? Maybe not Game.Input.controlMaps.playScreen = { keydown: { 'ArrowRight': Game.Commands.moveCommand.bind(this, -1, 0, 0), 'ArrowLeft': Game.Commands.moveCommand.bind(this, 1, 0, 0), 'ArrowDown': Game.Commands.moveCommand.bind(this, 0, -1, 0), 'ArrowUp': Game.Commands.moveCommand.bind(this, 0, 1, 0), '>': Game.Commands.moveCommand.bind(this, 0, 0, -1), '<': Game.Commands.moveCommand.bind(this, 0, 0, 1), 'Space': Game.Commands.showScreenCommand.bind(this, Game.Screen.actionScreen, Game.Screen.playScreen), 'i': Game.Commands.showItemScreenCommand.bind(this, Game.Screen.inventoryScreen, Game.Screen.playScreen, 'You are not carrying anything.'), 'd': Game.Commands.showItemScreenCommand.bind(this, Game.Screen.dropScreen, Game.Screen.playScreen, 'You have nothing to drop.'), 'e': Game.Commands.showItemScreenCommand.bind(this, Game.Screen.eatScreen, Game.Screen.playScreen, 'You have nothing to eat.'), 'w': Game.Commands.showItemScreenCommand.bind(this, Game.Screen.wieldScreen, Game.Screen.playScreen, 'You have nothing to wield.'), 'W': Game.Commands.showItemScreenCommand.bind(this, Game.Screen.wearScreen, Game.Screen.playScreen, 'You have nothing to wear.'), 'x': Game.Commands.showItemScreenCommand.bind(this, Game.Screen.examineScreen, Game.Screen.playScreen, 'You have nothing to examine.'), 't': Game.Commands.showItemScreenCommand.bind(this, Game.Screen.throwScreen, Game.Screen.playScreen, 'You have nothing to throw.'), ',': Game.Commands.showItemScreenCommand.bind(this, Game.Screen.pickupScreen, Game.Screen.playScreen, 'There is nothing here to pick up.', function(entity) { return entity.getMap().getItemsAt(entity.getX(), entity.getY(), entity.getZ()); }), ';': Game.Commands.showTargettingScreenCommand.bind(this, Game.Screen.lookScreen, Game.Screen.playScreen), '?': Game.Commands.showScreenCommand.bind(this, Game.Screen.helpScreen, Game.Screen.playScreen) } }; Game.Input.controlMaps.ItemListScreen = { keydown: { 'Escape': Game.Commands.removeSubScreenCommand.bind(this, Game.Screen.playScreen), 'Enter': Game.Commands.ItemScreenExecuteOkCommand.bind(this, Game.Screen.playScreen, 'Enter'), '0': Game.Commands.ItemScreenExecuteOkCommand.bind(this, Game.Screen.playScreen, "0"), "a": Game.Commands.ItemScreenExecuteOkCommand.bind(this, Game.Screen.playScreen, "a"), "b": Game.Commands.ItemScreenExecuteOkCommand.bind(this, Game.Screen.playScreen, "b"), "c": Game.Commands.ItemScreenExecuteOkCommand.bind(this, Game.Screen.playScreen, "c"), "d": Game.Commands.ItemScreenExecuteOkCommand.bind(this, Game.Screen.playScreen, "d"), "e": Game.Commands.ItemScreenExecuteOkCommand.bind(this, Game.Screen.playScreen, "e"), "f": Game.Commands.ItemScreenExecuteOkCommand.bind(this, Game.Screen.playScreen, "f"), "g": Game.Commands.ItemScreenExecuteOkCommand.bind(this, Game.Screen.playScreen, "g"), "h": Game.Commands.ItemScreenExecuteOkCommand.bind(this, Game.Screen.playScreen, "h"), "i": Game.Commands.ItemScreenExecuteOkCommand.bind(this, Game.Screen.playScreen, "i"), "j": Game.Commands.ItemScreenExecuteOkCommand.bind(this, Game.Screen.playScreen, "j"), "k": Game.Commands.ItemScreenExecuteOkCommand.bind(this, Game.Screen.playScreen, "k"), "l": Game.Commands.ItemScreenExecuteOkCommand.bind(this, Game.Screen.playScreen, "l"), "m": Game.Commands.ItemScreenExecuteOkCommand.bind(this, Game.Screen.playScreen, "m"), "n": Game.Commands.ItemScreenExecuteOkCommand.bind(this, Game.Screen.playScreen, "n"), "o": Game.Commands.ItemScreenExecuteOkCommand.bind(this, Game.Screen.playScreen, "o"), "p": Game.Commands.ItemScreenExecuteOkCommand.bind(this, Game.Screen.playScreen, "p"), "q": Game.Commands.ItemScreenExecuteOkCommand.bind(this, Game.Screen.playScreen, "q"), "r": Game.Commands.ItemScreenExecuteOkCommand.bind(this, Game.Screen.playScreen, "r"), "s": Game.Commands.ItemScreenExecuteOkCommand.bind(this, Game.Screen.playScreen, "s"), "t": Game.Commands.ItemScreenExecuteOkCommand.bind(this, Game.Screen.playScreen, "t"), "u": Game.Commands.ItemScreenExecuteOkCommand.bind(this, Game.Screen.playScreen, "u"), "v": Game.Commands.ItemScreenExecuteOkCommand.bind(this, Game.Screen.playScreen, "v"), "w": Game.Commands.ItemScreenExecuteOkCommand.bind(this, Game.Screen.playScreen, "w"), "x": Game.Commands.ItemScreenExecuteOkCommand.bind(this, Game.Screen.playScreen, "x"), "y": Game.Commands.ItemScreenExecuteOkCommand.bind(this, Game.Screen.playScreen, "y"), "z": Game.Commands.ItemScreenExecuteOkCommand.bind(this, Game.Screen.playScreen, "z") } }; Game.Input.controlMaps.TargetBasedScreen = { keydown: { "ArrowRight": Game.Commands.moveCursorCommand.bind(this, Game.Screen.playScreen, 1, 0), "ArrowLeft": Game.Commands.moveCursorCommand.bind(this, Game.Screen.playScreen, -1, 0), "ArrowUp": Game.Commands.moveCursorCommand.bind(this, Game.Screen.playScreen, 0, -1), "ArrowDown": Game.Commands.moveCursorCommand.bind(this, Game.Screen.playScreen, 0, 1), "Enter": Game.Commands.TargetBasedScreenOkCommand.bind(this, Game.Screen.playScreen), "Escape": Game.Commands.removeSubScreenCommand.bind(this, Game.Screen.playScreen) } }; Game.Input.controlMaps.MenuScreen = { keydown: { "ArrowUp": Game.Commands.moveMenuIndexCommand.bind(this, Game.Screen.playScreen, -1), "ArrowDown": Game.Commands.moveMenuIndexCommand.bind(this, Game.Screen.playScreen, 1), "Enter": Game.Commands.MenuScreenOkCommand.bind(this, Game.Screen.playScreen), " ": Game.Commands.MenuScreenOkCommand.bind(this, Game.Screen.playScreen), "Escape": Game.Commands.removeSubScreenCommand.bind(this, Game.Screen.playScreen) } } // This function is meant to handle input data of all types Game.Input.handleInput = function(screen, inputType, inputData) { // Each keyMap object should contain a list of references to Commands with specific parameters // bound to them. These command functions will return a function that can be executed later, // by passing in a specific entity to the function returned from `handleInput` // TODO: inputData.key is only good for key events. need a way to abstract out data depending on event type if(Game.Input.controlMaps[screen][inputType][inputData.key]) return Game.Input.controlMaps[screen][inputType][inputData.key](); else { return Game.Commands.nullCommand(); } };