private static string GetInvalidResponse(InteractionGenerator interactionGenerator, Character player, Character npc) { string npcResponse; var invalidCriteria = interactionGenerator.GetInvalidInteraction(npc, player); var cantHandleResponse = invalidCriteria; npcResponse = $"{cantHandleResponse.BodyLanguage}\n\n{npc.Name}: {cantHandleResponse.Dialogue}"; return(npcResponse); }
void GenerateInteractible(Tile tile) { var interactibleTemplateKey = tpd.RollMap(env.interactibleChances); var interactibleTemplate = JSONResource.Get<InteractionTemplate>(interactibleTemplateKey); var interactibleGenerator = new InteractionGenerator(interactibleTemplate); var interactible = interactibleGenerator.Generate(); var randomTile = room.RandomOpenTile(); interactible.position = randomTile.position; InteractibleStore.Save(interactible); randomTile.Occupy(Constants.interactibleContentKey, interactible.id); }
void GenerateInteractible(Tile tile) { var interactibleTemplateKey = tpd.RollMap(env.interactibleChances); var interactibleTemplate = JSONResource.Get <InteractionTemplate>(interactibleTemplateKey); var interactibleGenerator = new InteractionGenerator(interactibleTemplate); var interactible = interactibleGenerator.Generate(); var randomTile = room.RandomOpenTile(); interactible.position = randomTile.position; InteractibleStore.Save(interactible); randomTile.Occupy(Constants.interactibleContentKey, interactible.id); }
public void Enter() { var interactionTemplateKey = sim.currentEnvironment.enterInteractionTemplateKey; var interactionTemplate = JSONResource.Get <InteractionTemplate>(interactionTemplateKey); if (interactionTemplate == null) { return; } var interaction = InteractionGenerator.Generate(interactionTemplate); sim.SetInteraction(interaction); var interactionProcessor = new InteractionProcessor(sim); interactionProcessor.Start(); }
static void Main(string[] args) { RandomSeedGenerator.InitializeRandom(4); IGameDataReader gameDataReader = new GameDataJsonFileReader(new ActionParser(), new List <string> { "Data" }); var interactionGenerator = new InteractionGenerator( gameDataReader.GetInteractions().ToList(), new CriteriaParser(), new StringTemplateReplacer()); Character player = CreatePlayer(interactionGenerator); Character npc = CreateNpc(interactionGenerator); string npcResponse = "You are standing in front of a villager. She is standing there, looking bored."; WriteResponse(npcResponse); char playerInput = AskInput(); while (playerInput != 'e' && playerInput != 'q') { if (playerInput == 'h') { WriteResponse(@"Press the numbers to choose an interaction. e - exit. h - help. m - info about you. q - exit. y - info about the one you're talking to.", npcResponse); playerInput = AskInput(); continue; } if (playerInput == 'm') { WriteResponse($"You are:\n{player}", npcResponse); playerInput = AskInput(); continue; } if (playerInput == 'y') { WriteResponse($"The one you are speaking to is:\n{npc}", npcResponse); playerInput = AskInput(); continue; } int playerChoice = 0; var interactionTypeMaxValue = (int)Enum.GetValues(typeof(ActionVerb)).Cast <ActionVerb>().Last(); bool isGood = int.TryParse(playerInput.ToString(), out playerChoice); isGood = isGood && playerChoice > 0 && playerChoice <= interactionTypeMaxValue; if (isGood) { ActionVerb playerChoiceType = (ActionVerb)playerChoice; string objectText = string.Empty; if (playerChoiceType == ActionVerb.RequestItemType) { objectText = "Sword"; } var interaction = interactionGenerator.GetInteraction( player, new ParsedAction { Adverb = ActionAdverb.Neutrally, Verb = playerChoiceType }, npc); if (interaction != null) { interaction.Action.Object = objectText; var interactionResult = player.InteractWith(interaction, npc); if (interactionResult != null) { npcResponse = $"{interactionResult.BodyLanguage}\n\n{npc.Name}: {interactionResult.Dialogue}"; } else { npcResponse = GetInvalidResponse(interactionGenerator, player, npc); } } else { npcResponse = GetInvalidResponse(interactionGenerator, player, npc); } } else { npcResponse = GetInvalidResponse(interactionGenerator, player, npc); } WriteResponse(npcResponse); playerInput = AskInput(); } }