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);
        }
Exemplo n.º 2
0
    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);
    }
Exemplo n.º 3
0
    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);
    }
Exemplo n.º 4
0
    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();
            }
        }