protected override void _Process(dynamic incomingData, Action <IFlowResult> callBack) { var sacrificeType = (incomingData as Sacrifice)?.Type; ConsoleAccessor.WriteLine($"The {sacrificeType} has been sacrificed, and the ritual has begun. Now, speak!"); ConsoleAccessor.Write("-> "); var input = ConsoleAccessor.Read(); bool satanPleased; if (string.IsNullOrEmpty(input)) { ConsoleAccessor.WriteLine("Satan responds: \"Insolent wretch!\""); satanPleased = false; } else if (input == "Hail, Satan!") { ConsoleAccessor.WriteLine("Satan responds: \"Your master is pleased, vassal.\""); satanPleased = true; } else { ConsoleAccessor.WriteLine("Satan responds: \"Begone, whelp!\""); satanPleased = sacrificeType == SacrificeType.Human; } var ritualResult = new RitualResult { SoulIntact = satanPleased }; callBack(new FlowResult(ritualResult)); }
/// <summary> /// Call this when an object is interacted to see what happens with the ritual /// </summary> /// <returns><c>true</c>, if a ritual is in progress or completed after the interaction, <c>false</c> otherwise.</returns> /// <param name="objectNumber">object number 0..objectCount-1</param> /// <param name="interactionNumber">interaction number 0..interactionCount-1</param> public bool InteractWithObject(int objectNumber, int interactionNumber) { // Check to see if this interaction is the next step in the current ritual if (currentInternalRitualIndex >= 0) { var currentRitual = rituals[currentInternalRitualIndex]; if (objectNumber == currentRitual.objects[currentRitualProgress.currentSteps] && interactionNumber == currentRitual.interactions[currentRitualProgress.currentSteps]) { ++currentRitualProgress.currentSteps; if (currentRitualProgress.currentSteps >= currentRitual.objects.Count) { // Ritual complete! RitualResult result = new RitualResult(); result.isDud = currentRitual.isDud; result.ritualNumber = currentRitual.ritualNumber; completedRitualMessages.Add(result); lastCompletedRitual = currentRitual.ritualNumber; // start working on another currentInternalRitualIndex = -1; } // We made progress, so return true return true; } else { return false; // Not the current ritual, cancel it // dont' cancel rituals anymore, you gotta finish it //currentInternalRitualIndex = -1; } } // Find a ritual that starts with this interaction for (int i = 0; i < rituals.Count; ++i) { var currentRitual = rituals[i]; if (objectNumber == currentRitual.objects[0] && interactionNumber == currentRitual.interactions[0]) { // it's this ritual! currentInternalRitualIndex = i; currentRitualProgress.isDud = currentRitual.isDud; currentRitualProgress.ritualNumber = currentRitual.ritualNumber; currentRitualProgress.currentSteps = 1; currentRitualProgress.requiredSteps = currentRitual.objects.Count; return true; } } currentRitualProgress.isDud = true; currentRitualProgress.ritualNumber = -1; currentRitualProgress.currentSteps = -1; currentRitualProgress.requiredSteps = -1; return false; }