doggo-quest-logic
Version:
The game logic for the Doggo Quest text-based game sample project
62 lines (61 loc) • 2.18 kB
JavaScript
;
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;