43 lines
1.1 KiB
JavaScript
43 lines
1.1 KiB
JavaScript
|
import LookCommand from "./commands/look";
|
||
|
import UseCommand from "./commands/use";
|
||
|
const defaultCommands = [
|
||
|
[["look", "l"], LookCommand],
|
||
|
[["use", "interact"], UseCommand]
|
||
|
];
|
||
|
|
||
|
export default class Commands {
|
||
|
constructor(context, commands) {
|
||
|
this.context = context;
|
||
|
this.commands = commands || new Map();
|
||
|
this.addDefaultCommands();
|
||
|
}
|
||
|
|
||
|
doCommand(str) {
|
||
|
const room = this.context.getRoom(this.context.player.currentRoom);
|
||
|
const split = str.split(" ");
|
||
|
if (this.commands.get(split[0])) {
|
||
|
this.commands.get(split[0])(split, this.context);
|
||
|
}
|
||
|
if (room.getExit(split[0])) {
|
||
|
this.context.move(room.getExit(split[0]));
|
||
|
}
|
||
|
}
|
||
|
|
||
|
addCommand(name, func) {
|
||
|
if (Array.isArray(name)) {
|
||
|
name.forEach((command) => this.commands.set(command, func));
|
||
|
} else {
|
||
|
this.commands.set(name, func);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
addCommands(commands) {
|
||
|
commands.forEach((command) => {
|
||
|
this.addCommand(command[0], command[1]);
|
||
|
});
|
||
|
}
|
||
|
|
||
|
addDefaultCommands() {
|
||
|
this.addCommands(defaultCommands);
|
||
|
}
|
||
|
}
|