/// /// /// module EveryTurn { export var EveryTurn = new Rulebook("Every Turn"); export var RunAIRule = EveryTurn.createAndAddRule({ name : "Run NPC AI Rule", code : async function () { function isAIAvailable (person : Person) { return (person != WorldState.player && ((person.getRoom() instanceof RoomRandom && ( person.getRoom()).placed)) && (person.lastActionTurn < WorldState.getCurrentTurn())); } let people = > Thing.InsideRoomRelation.getAnyRightType(Person).filter(isAIAvailable); for (let i = 0; i < people.length; i++) { let person = people[i]; if (person.getHealthOnScale() > 0) { let action = await people[i].AI.execute(); let visible = people[i].isVisibleTo(WorldState.player); if (action == undefined) action = new ActionWait(person); let printValue: Say = await action.execute(); if ( ( visible || person.isVisibleTo(WorldState.player) ) && printValue != undefined) { Elements.CurrentTurnHandler.printAsContent(printValue); } } } } }); export var incrementTurnCounterRule = EveryTurn.createAndAddRule({ firstPriority: Rule.PRIORITY_LOWEST, priority: Rule.PRIORITY_LOWEST, name: "Increment Turn Counter", code: function () { WorldState.incrementWorldTurn(); } }); }