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())); }
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))); }
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)); }
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)); }
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); }
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)); }
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."); } } }
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)); }
public static SkryptObject Length(SkryptEngine engine, SkryptObject self) { return(engine.CreateNumber(Math.Sqrt((NumberInstance)Length2(engine, self)))); }
public static SkryptObject GetAllocatedBytes(SkryptEngine engine, SkryptObject self, Arguments arguments) { var bytes = SkryptEngine.GetAllocatedBytesForCurrentThread() - engine.InitialMemoryUsage; return(engine.CreateNumber(bytes)); }
public static SkryptObject ExecutionTime(SkryptEngine engine, SkryptObject self) { return(engine.CreateNumber(engine.SW.Elapsed.TotalSeconds)); }
public static SkryptObject W(SkryptEngine engine, SkryptObject self) { var vector = self as Vector4Instance; return(engine.CreateNumber(vector.Components[2])); }
public ArrayInstance(SkryptEngine engine) : base(engine) { CreateProperty("iteratorIndex", engine.CreateNumber(0), true); }
public static SkryptObject Length(SkryptEngine engine, SkryptObject self) { return(engine.CreateNumber((self as StringInstance).Value.Length)); }
public static SkryptObject Log2(SkryptEngine engine, SkryptObject self, Arguments arguments) { return(engine.CreateNumber(Math.Log(arguments.GetAs <NumberInstance>(0), 2))); }
public static SkryptObject Truncate(SkryptEngine engine, SkryptObject self, Arguments arguments) { return(engine.CreateNumber(Math.Truncate(arguments.GetAs <NumberInstance>(0)))); }