UNPKG

doggo-quest-logic

Version:

The game logic for the Doggo Quest text-based game sample project

62 lines (61 loc) 2.18 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const Room_1 = require("../World/Room"); class NounMapper { mapNouns(context) { const currentRoom = context.world.getRoom(context.currentRoom); if (!currentRoom) { return; } for (const noun of context.sentence.rootWords.filter(w => w.isNoun)) { noun.gameObject = this.findMatchForNoun(currentRoom, currentRoom.objects, noun.reduced); noun.addTag('Mapped'); } for (const dir of context.sentence.rootWords.filter(w => w.isDirection)) { const dirName = dir.reduced; if (dirName) { dir.room = NounMapper.getRoomTarget(dirName, currentRoom); dir.addTag('Mapped'); } } } static getRoomTarget(direction, room) { switch (direction) { case 'north': return room.north || Room_1.Room.CantGo; case 'east': return room.east || Room_1.Room.CantGo; case 'south': return room.south || Room_1.Room.CantGo; case 'west': return room.west || Room_1.Room.CantGo; case 'up': return room.up || Room_1.Room.CantGo; case 'down': return room.down || Room_1.Room.CantGo; case 'in': return room.in || Room_1.Room.CantGo; case 'out': return room.out || Room_1.Room.CantGo; default: return undefined; } } findMatchForNoun(room, objects, reduced) { if (!reduced) return null; for (const obj of objects) { if (obj.matches(reduced, room.id)) { return obj; } if (obj.children) { const childResult = this.findMatchForNoun(room, obj.children, reduced); if (childResult) { return childResult; } } } return null; } } exports.NounMapper = NounMapper;