Exemple #1
0
        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";
            }
        }
Exemple #2
0
 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);
     }
 }
Exemple #3
0
        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);
        }
Exemple #4
0
        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);
                }
            }
        }
Exemple #5
0
        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);
        }
Exemple #6
0
 public static string Serialize(EmelieSimulationContext context)
 {
     return(JsonConvert.SerializeObject(context, Formatting.Indented));
 }
Exemple #7
0
        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;
                }
            }
        }