using System; using System.Collections.Generic; using System.Reflection.Emit; using System.Text; using Sunweaver.Commands.Attributes; using Sunweaver.DataPrototypes; namespace Sunweaver.Commands.BinaryMath { [BasePair] public class atan : Abstracts.BinaryOperation { public override void Operation(long a, long b) { VM.Stack.Push( (long)Math.Round(Math.Atan2(a,b) / (2 * Math.PI) * 1080)); } public override void CompileOperation(ILGenerator il, Locals locals) { il.Emit(OpCodes.Ldloc, locals[typeof(VirtualMachine)]); il.Emit(OpCodes.Ldfld, typeof(VirtualMachine).GetField("Stack")); il.Emit(OpCodes.Ldloc, locals[typeof(long), 0]); il.Emit(OpCodes.Conv_I8); il.Emit(OpCodes.Ldloc, locals[typeof(long), 1]); il.Emit(OpCodes.Conv_I8); il.Emit(OpCodes.Call, typeof(Math).GetMethod("Atan2")); il.Emit(OpCodes.Ldc_R8, Math.PI); il.Emit(OpCodes.Div); il.Emit(OpCodes.Ldc_R8, 1080.0); il.Emit(OpCodes.Div); il.Emit(OpCodes.Call, typeof(Math).GetMethod("Round")); il.Emit(OpCodes.Conv_I8); il.Emit(OpCodes.Call, typeof(IntStack).GetMethod("Push")); } } }