public EmelieCharacter(EmelieSimulationContext context) { traits = new List <EmelieTrait>(); attributes = new List <string>(); personalityPoints = new Dictionary <string, uint>(); for (int i = 0; i < context.personalityMeasurements.Length; i++) { string personalityMeasurement = context.personalityMeasurements[i]; if (!personalityPoints.ContainsKey(personalityMeasurement)) { personalityPoints.Add(personalityMeasurement, 5); } } if (EmelieUtilities.PercentageChance(50f)) { gender = "male"; } else { gender = "female"; } }
public static EmelieSimulationContext Deserialize(string json) { try{ EmelieSimulationContext newContext = (EmelieSimulationContext)JsonConvert.DeserializeObject(json, typeof(EmelieSimulationContext)); return(newContext); } catch (Exception e) { Log.Error("Failure in parsing JSON: \"" + e.Message + "\""); return(null); } }
private static EmelieSimulationContext Load(string path) { string fileToLoad = path.Replace("%20", " "); string fileContents = EmelieIO.ReadFile(fileToLoad); if (fileContents != null) { EmelieSimulationContext context = EmelieSimulationContext.Deserialize(fileContents); Log.Msg(context.ToString()); return(context); } return(null); }
private static void Run(string[] parameters, EmelieSimulationContext context, string outputFile) { outputFile = outputFile.Replace("%20", " "); if (CheckParameters("run", parameters, 1)) { string runResult = "\n" + "// -- Using Emelie Simulation Engine v." + VERSION + " --\n" + "// -- Generated on " + System.DateTime.Now.ToString("G") + " --\n" + "\n#stories\n{\n" + ""; uint times = 0; if (!uint.TryParse(parameters[1], out times)) { Log.Msg("Parameter " + parameters[1] + " could not be converted to a positive integer!"); } else { for (uint i = 0; i < times; i++) { if (context != null) { EmelieSimulation simulation = new EmelieSimulation(); string result = simulation.Run(context, VERSION); Log.Msg("SIMULATION RESULT: '" + result + "'"); runResult += result; } else { Log.Msg("No Simulation context has been set! Please load an emelie file to set it!"); } } runResult += "}\n\n" + "// [Emelie end]"; EmelieIO.WriteStringToFile(runResult, outputFile); } } }
public string Run(EmelieSimulationContext context, string programVersion) { string resultingEvert = ""; simulationLog = new List <string>(); if (context.simulationStep <= 0f) { Log.Error("simulationStep cannot be" + " 0"); return("Simulation Failed"); } // Create charcter EmelieCharacter c = new EmelieCharacter(context); c.name = "<# " + c.gender + "_name>∫<# surName>"; c.finalAge = EmelieUtilities.RandomRange(5f, 90f); resultingEvert += "<= character_name " + c.name + " >"; resultingEvert += "<= gender " + c.gender + " >"; resultingEvert += "<= finalAge " + c.finalAge + " >"; c.currentAge = 0f; int numOfTraits = 3; while (c.traits.Count < numOfTraits) { EmelieTrait randomTrait = context.traits[EmelieUtilities.RandomRange(0, context.traits.Length)]; if (c.AddTrait(randomTrait)) { SimLog(c.currentAge, "born with trait " + randomTrait.name); } } foreach (EmelieTrait trait in context.traits) { bool r = c.traits.Contains(trait); resultingEvert += "<= IS_" + trait.name + " " + r.ToString().ToLower() + ">"; } foreach (string s in context.personalityMeasurements) { resultingEvert += "<= " + s + " " + c.personalityPoints[s] + ">"; } float currentYear = context.year - c.finalAge; EmelieState startingState = context.GetStartingState(); SimLog(c.currentAge, "Character Born, gender=" + c.gender + ", final age=" + System.Math.Round((double)c.finalAge).ToString()); resultingEvert += "<# CHARACTER_BORN><= currentYear " + currentYear.ToString("####") + ">"; EmelieState currentState = startingState; while (c.currentAge < c.finalAge) { List <string> possibleEvents = new List <string>(); possibleEvents.AddRange(currentState.events); possibleEvents.AddRange(context.alwaysPossibleEvents); foreach (string eventName in possibleEvents) { EmelieEvent _event = context.GetEvent(eventName); if (EmelieUtilities.PercentageChance(_event.probability)) { bool passedAlltests = true; foreach (EmelieRequirement req in _event.requirements) { if (!req.IsMet(c, _event)) { passedAlltests = false; break; } } if (!passedAlltests) { continue; } SimLog(c.currentAge, "EVENT: " + _event.name); resultingEvert += "<= currentAge " + c.currentAge + ">"; resultingEvert += "<= currentYear " + currentYear.ToString("####") + ">"; resultingEvert += "<# EVENT_" + _event.name + ">"; foreach (string attr in _event.attributesAdded) { c.AddAttribute(attr); SimLog(c.currentAge, "ATTRIBUTE_ADDED: " + attr); resultingEvert += "<= HAS_ATTRIBUTE_" + attr + " true>"; } if (_event.destinationState != "") { currentState = context.GetState(_event.destinationState); SimLog(c.currentAge, "STATE: " + currentState.name); continue; } } } c.currentAge += context.simulationStep; currentYear += context.simulationStep; if (c.currentAge > c.finalAge) { c.currentAge = c.finalAge; } } resultingEvert += "<# story_end>\n"; return(resultingEvert); }
public static string Serialize(EmelieSimulationContext context) { return(JsonConvert.SerializeObject(context, Formatting.Indented)); }
public static void Main(string[] args) { Console.WriteLine("------ Starting Emelie Text Engine v" + VERSION + " ------\n" + "Code by Oskar Lundqvist 2016 | @oskar_lq | [email protected]\n"); string OUTPUT_FILE = ""; bool programIsRunning = true; EmelieSimulationContext context = new EmelieSimulationContext(); //EmelieIO.WriteStringToFile(EmelieSimulationContext.Serialize(context,""),OUTPUT_FILE); if (args.Length == 1) { context = Load(args[0]); } if (args.Length == 2) { context = Load(args[0]); OUTPUT_FILE = args[1]; } if (args.Length == 3) { context = Load(args[0]); OUTPUT_FILE = args[1]; string[] f = new string[2 ]; f[0] = "run"; f[1] = args[2]; Console.WriteLine(f.Length); Run(f, context, OUTPUT_FILE); programIsRunning = false; } string lastCommand = "help"; while (programIsRunning) { Console.Write("Enter a command: "); string resultingLine = ""; while (resultingLine == "") { resultingLine = Console.ReadLine(); } resultingLine = resultingLine.Replace("\\ ", "%20"); if (resultingLine == "a") { resultingLine = lastCommand; } else { lastCommand = resultingLine; } string[] parameters = resultingLine.Split(new string[] { " ", "\t" }, StringSplitOptions.RemoveEmptyEntries); string command = parameters[0].ToLower(); switch (command) { case "help": Help(); break; case "quit": { programIsRunning = false; Console.WriteLine("Closing Emelie..."); } break; case "set_output_file": { if (CheckParameters("set_output_file", parameters, 1)) { OUTPUT_FILE = parameters[1].Replace("%20", " "); Log.Msg("OUTPUT_FILE = " + OUTPUT_FILE); } } break; case "load": { if (CheckParameters("load", parameters, 1)) { context = Load(parameters[1]); } } break; case "out": { if (OUTPUT_FILE != "") { EmelieIO.WriteStringToFile(EmelieSimulationContext.Serialize(context), OUTPUT_FILE); } else { Log.Error("No output file set. Please use \"set_output_file\""); } } break; case "run": { Run(parameters, context, OUTPUT_FILE); } break; default: Console.WriteLine("Unknown command '" + command + "'. Type 'help' to get a list of commands."); break; } } }