Example #1
0
        public StatsObject(StatsObject baseStats, StatsModifierCollection toApply)
        {
            if (baseStats == null)
            {
                throw new ArgumentNullException(nameof(baseStats));
            }

            if (toApply == null)
            {
                throw new ArgumentNullException(nameof(toApply));
            }

            StatsObject retStats = new StatsObject();
            retStats.Strength = new RestrictedNumber(
                (int)(baseStats.HitPoints.Minimum * (1 + toApply.HitPoints.Percent) + toApply.HitPoints.Value),
                (int)(baseStats.HitPoints.Minimum * (1 + toApply.HitPoints.Percent) + toApply.HitPoints.Value),
                (int)(baseStats.HitPoints.Minimum * (1 + toApply.HitPoints.Percent) + toApply.HitPoints.Value));
        }
Example #2
0
        public StatsModifierCollection AddObjectToStatsModifierObject(StatsModifierCollection stats, object obj)
        {
            if (stats == null)
                throw new ArgumentNullException("stats");

            if (obj == null)
                throw new ArgumentNullException("obj");

            StatsModifierCollection statsObject = obj as StatsModifierCollection;

            if (statsObject != null)
            {
                stats += statsObject;
            }
            else
            {
                throw new ArgumentException("Obj is not of a known type.");
            }

            return stats;
        }
Example #3
0
        public StatsModifierCollection InvokeFunctionWithHooks(IEngine engine, string function, IEnumerable<string> hookFunctions,
            SpecificCharacter character, StatsModifierCollection cumulativeStatsObject)
        {
            if (engine == null)
                throw new ArgumentNullException("engine");

            if (string.IsNullOrEmpty(function))
                throw new ArgumentNullException("function");

            if (hookFunctions == null)
                throw new ArgumentNullException("hookFunctions");

            if (character == null)
                throw new ArgumentNullException("character");

            if (engine.Name != "JavascriptEngine")
                throw new ArgumentException("Expected provided engine type to be JavascriptEngine but got " + engine.Name);

            Engine jsEngine = (engine as JSEngine).GetEngine();

            StatsModifierCollection summedMultiplierObject = 1d;

            foreach (string hookFunction in hookFunctions)
            {
                string filename = function.Substring(0, function.IndexOf('_'));
                StatsModifierCollection modifier = (StatsModifierCollection)jsEngine.Invoke(hookFunction, filename, character).ToObject();

                if (modifier == null)
                    continue;

                summedMultiplierObject *= modifier;
            }

            StatsModifierCollection originalStats = (StatsModifierCollection)jsEngine.Invoke(function, character, cumulativeStatsObject).ToObject();

            if (originalStats == null)
                throw new ArgumentException("Script did not return proper result.");

            originalStats *= summedMultiplierObject;

            return originalStats;
        }
Example #4
0
        public StatsModifierCollection InvokeFunction(IEngine engine, string function, SpecificCharacter character, StatsModifierCollection cumulativeStatsObject)
        {
            if (engine == null)
                throw new ArgumentNullException("engine");

            if (string.IsNullOrEmpty(function))
                throw new ArgumentNullException("function");

            if (character == null)
                throw new ArgumentNullException("character");

            if (engine.Name != "JavascriptEngine")
                throw new ArgumentException("Expected provided engine type to be JavascriptEngine but got " + engine.Name);

            Engine jsEngine = (engine as JSEngine).GetEngine();

            StatsModifierCollection originalStats = (StatsModifierCollection)jsEngine.Invoke(function, character, cumulativeStatsObject).ToObject();

            if (originalStats == null)
                throw new ArgumentException("Script did not return proper result.");

            return originalStats;
        }
Example #5
0
        public StatsModifierCollection CalculateStats(SpecificCharacter character)
        {
            StatsModifierCollection summedModifiers = new StatsModifierCollection();
            var engine = InteropPlugin.CreateEngineWithCommonScripts(character);
            List<string> allScripts = new List<string>();
            List<Tuple<string, string>> allStaticFunctions = new List<Tuple<string, string>>();
            List<Tuple<string, string>> allStaticHookFunctions = new List<Tuple<string, string>>();
            List<Tuple<string, string>> allDependentFunctions = new List<Tuple<string, string>>();
            List<Tuple<string, string>> allDependentHookFunctions = new List<Tuple<string, string>>();
            List<Tuple<string, string>> allOverrulingFunctions = new List<Tuple<string, string>>();

            //init
            string lastScript = string.Format("./Classes/{0}.js", character.Class);
            allScripts.Add(lastScript);
            allStaticFunctions.Add(new Tuple<string, string>(lastScript, OnStaticBonusString(character.Class)));
            allStaticHookFunctions.Add(new Tuple<string, string>(lastScript, OnShouldModifyStaticBonusScriptForString(character.Class)));
            allDependentFunctions.Add(new Tuple<string, string>(lastScript, OnDependentBonusString(character.Class)));
            allDependentHookFunctions.Add(new Tuple<string, string>(lastScript, OnShouldModifyDependentBonusScriptForString(character.Class)));
            allOverrulingFunctions.Add(new Tuple<string, string>(lastScript, OnOverrulingBonusString(character.Class)));

            if (!string.IsNullOrEmpty(character.Personalities))
            {
                foreach (string personality in character.Personalities.Split(';'))
                {
                    lastScript = string.Format("./Personalities/{0}.js", personality);
                    allScripts.Add(lastScript);
                    allStaticFunctions.Add(new Tuple<string, string>(lastScript, OnStaticBonusString(personality)));
                    allStaticHookFunctions.Add(new Tuple<string, string>(lastScript, OnShouldModifyStaticBonusScriptForString(personality)));
                    allDependentFunctions.Add(new Tuple<string, string>(lastScript, OnDependentBonusString(personality)));
                    allDependentHookFunctions.Add(new Tuple<string, string>(lastScript, OnShouldModifyDependentBonusScriptForString(personality)));
                    allOverrulingFunctions.Add(new Tuple<string, string>(lastScript, OnOverrulingBonusString(personality)));
                }
            }

            //load all scripts
            foreach (string function in allScripts)
            {
                ScriptHelper.ExecuteScript(engine, function);
            }

            //Execute static functions on scripts
            foreach (var script in allStaticFunctions)
            {
                var modifiers = InteropPlugin.InvokeFunctionWithHooks(engine, script.Item2,
                                    allStaticHookFunctions.Where(x => x.Item1 != script.Item1).Select(x => x.Item2), character, summedModifiers);

                summedModifiers = InteropPlugin.AddObjectToStatsModifierObject(summedModifiers, modifiers);
            }

            //dependent functions
            foreach (var script in allDependentFunctions)
            {
                var modifiers = InteropPlugin.InvokeFunctionWithHooks(engine, script.Item2,
                                    allDependentHookFunctions.Where(x => x.Item1 != script.Item1).Select(x => x.Item2), character, summedModifiers);

                summedModifiers = InteropPlugin.AddObjectToStatsModifierObject(summedModifiers, modifiers);
            }

            //overruling
            foreach (var script in allOverrulingFunctions)
            {
                var modifiers = InteropPlugin.InvokeFunction(engine, script.Item2, character, summedModifiers);

                summedModifiers = InteropPlugin.AddObjectToStatsModifierObject(summedModifiers, modifiers);
            }

            return summedModifiers;
        }