コード例 #1
0
        public static SkryptObject RandomInt(SkryptEngine engine, SkryptObject self, Arguments arguments)
        {
            if (arguments.Values.Length == 1)
            {
                return(engine.CreateNumber((int)(_random.NextDouble() * arguments.GetAs <NumberInstance>(0).Value)));
            }
            else if (arguments.Values.Length == 2)
            {
                var val = _random.NextDouble();
                var min = arguments.GetAs <NumberInstance>(0).Value;
                var max = arguments.GetAs <NumberInstance>(1).Value;

                return(engine.CreateNumber((int)(max * val + min * (1 - val))));
            }

            return(engine.CreateNumber((int)_random.NextDouble()));
        }
コード例 #2
0
 public MathModule(SkryptEngine engine) : base(engine)
 {
     CreateProperty("PI", engine.CreateNumber(Math.PI));
     CreateProperty("E", engine.CreateNumber(Math.E));
     CreateProperty("LN10", engine.CreateNumber(Math.Log(10)));
     CreateProperty("LN2", engine.CreateNumber(Math.Log(2)));
     CreateProperty("LOG2E", engine.CreateNumber(Math.Log(Math.E, 2)));
     CreateProperty("LOG10E", engine.CreateNumber(Math.Log(Math.E, 10)));
     CreateProperty("SQRT1_2", engine.CreateNumber(Math.Sqrt(0.5)));
     CreateProperty("SQRT2", engine.CreateNumber(Math.Sqrt(2)));
 }
コード例 #3
0
        public static SkryptObject Length2(SkryptEngine engine, SkryptObject self)
        {
            double val    = 0;
            var    vector = self as VectorInstance;

            for (var i = 0; i < vector.Components.Length; i++)
            {
                val += Math.Pow(vector.Components[i], 2);
            }

            return(engine.CreateNumber(val));
        }
コード例 #4
0
        public static SkryptObject GetSizeOfAction(SkryptEngine engine, SkryptObject self, Arguments arguments)
        {
            var target = arguments.GetAs <FunctionInstance>(0);

            var before = SkryptEngine.GetAllocatedBytesForCurrentThread();

            target.Run();

            var after = SkryptEngine.GetAllocatedBytesForCurrentThread();

            return(engine.CreateNumber(after - before));
        }
コード例 #5
0
        public static SkryptObject ToByteArray(SkryptEngine engine, SkryptObject self, Arguments arguments)
        {
            var str = self as StringInstance;

            var bytes = Encoding.ASCII.GetBytes(str.Value);
            var array = engine.CreateArray(new SkryptObject[0]);

            for (var i = 0; i < bytes.Length; i++)
            {
                ArrayInstance.Push(engine, array, new Arguments(engine.CreateNumber(bytes[i])));
            }

            return(array);
        }
コード例 #6
0
        public static SkryptObject GetSizeOfObject(SkryptEngine engine, SkryptObject self, Arguments arguments)
        {
            var target = arguments.GetAs <SkryptObject>(0);
            var clone  = default(SkryptObject);

            var before = SkryptEngine.GetAllocatedBytesForCurrentThread();

            clone = target != null?target.Clone() : null;

            var after = SkryptEngine.GetAllocatedBytesForCurrentThread();

            clone = null;

            return(engine.CreateNumber(after - before));
        }
コード例 #7
0
        public static SkryptObject IndexOf(SkryptEngine engine, SkryptObject self, Arguments arguments)
        {
            var str    = self as StringInstance;
            var search = arguments.GetAs <StringInstance>(0);
            var start  = arguments[1];

            if (start == null)
            {
                return(engine.CreateNumber(str.Value.IndexOf(search)));
            }
            else
            {
                if (start is NumberInstance num)
                {
                    var startIndex = Math.Max(Math.Min((int)num, str.Value.Length - 1), 0);

                    return(engine.CreateNumber(str.Value.IndexOf(search, startIndex)));
                }
                else
                {
                    throw new InvalidArgumentTypeException($"Expected argument of type Number.");
                }
            }
        }
コード例 #8
0
        public static SkryptObject ParseInt(SkryptEngine engine, SkryptObject self, Arguments input)
        {
            var value = int.Parse(input[0].ToString(), System.Globalization.CultureInfo.InvariantCulture);

            return(engine.CreateNumber(value));
        }
コード例 #9
0
 public static SkryptObject Length(SkryptEngine engine, SkryptObject self)
 {
     return(engine.CreateNumber(Math.Sqrt((NumberInstance)Length2(engine, self))));
 }
コード例 #10
0
        public static SkryptObject GetAllocatedBytes(SkryptEngine engine, SkryptObject self, Arguments arguments)
        {
            var bytes = SkryptEngine.GetAllocatedBytesForCurrentThread() - engine.InitialMemoryUsage;

            return(engine.CreateNumber(bytes));
        }
コード例 #11
0
 public static SkryptObject ExecutionTime(SkryptEngine engine, SkryptObject self)
 {
     return(engine.CreateNumber(engine.SW.Elapsed.TotalSeconds));
 }
コード例 #12
0
        public static SkryptObject W(SkryptEngine engine, SkryptObject self)
        {
            var vector = self as Vector4Instance;

            return(engine.CreateNumber(vector.Components[2]));
        }
コード例 #13
0
 public ArrayInstance(SkryptEngine engine) : base(engine)
 {
     CreateProperty("iteratorIndex", engine.CreateNumber(0), true);
 }
コード例 #14
0
 public static SkryptObject Length(SkryptEngine engine, SkryptObject self)
 {
     return(engine.CreateNumber((self as StringInstance).Value.Length));
 }
コード例 #15
0
 public static SkryptObject Log2(SkryptEngine engine, SkryptObject self, Arguments arguments)
 {
     return(engine.CreateNumber(Math.Log(arguments.GetAs <NumberInstance>(0), 2)));
 }
コード例 #16
0
 public static SkryptObject Truncate(SkryptEngine engine, SkryptObject self, Arguments arguments)
 {
     return(engine.CreateNumber(Math.Truncate(arguments.GetAs <NumberInstance>(0))));
 }