Beispiel #1
0
        static void Main(string[] args)
        {
            try
            {
                if (args.Length == 0)
                {
                    Console.WriteLine("Please provide input file.");
                    Console.WriteLine("   ssharp a.cs b.cs c.cs");
                    return;
                }

                var srcs = new List <string>();
                foreach (var arg in args)
                {
                    srcs.Add(File.ReadAllText(arg));
                }

                var cs = CScript.CreateRunner(srcs.ToArray());
                cs.RunMain();
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }
        }
Beispiel #2
0
    /*
     * public GameObject LoadPrefab(string path)
     * {
     *  return Resources.Load<GameObject>(path);
     * }
     */

    public void Bind(string src)
    {
        this.src = src;

        var scriptConfig = ScriptConfig.Default;

        scriptConfig.PrewarmTypes = new Type[] {
            typeof(Collider), typeof(Transform), typeof(Vector3),
            typeof(Vector2), typeof(Vector4), typeof(GameObject)
        };

        runner = CScript.CreateRunner(src, scriptConfig);
        RuntimeScript.runner = runner;
        instance             = runner.Override(
            GetBindableClass(), this);

        BuildFlags();

        if (overrideFields != null)
        {
            foreach (var f in overrideFields)
            {
                instance.SetPropertyOrField(f.Key, HybInstance.Object(f.Value));
            }
            overrideFields = null;
        }

        if (flags.hasOnBind)
        {
            instance.Invoke("OnBind");
        }
    }
    private void Start()
    {
        m_runner = CScript.CreateRunner
                   (
            @"
public class Foo
{ 
    public int Sum( int x, int y ) => x + y; 
}
"
                   );
    }
Beispiel #4
0
    public static void Run(string script)
    {
        script = Preprocess(script);

        Debug.Log(script);

        Debug.Log(D.GetSingle <Player>().hp);

        var r   = CScript.CreateRunner();
        var ret = r.Eval(script);

        Debug.Log(ret.ToString());
    }
    // Start is called before the first frame update
    void Start()
    {
        // C# のコードの定義(Foo クラスの定義)
        var runner = CScript.CreateRunner(script.text);

        // Foo クラスのインスタンスを作成
        var foo = runner.Instantiate("Foo");

        // Foo クラスの Sum 関数を呼び出して値を受け取る
        var num = foo.Invoke("Sum", 1, 2);

        Debug.Log(num.As <int>());
    }
Beispiel #6
0
        public void BasicOverwriteMethod()
        {
            var r   = CScript.CreateRunner(@"
class Foo { public int GiveMeNumber() => 10; }
");
            var foo = r.Instantiate("Foo");

            Assert.AreEqual(10, foo.Invoke("GiveMeNumber").Unwrap());

            r.UpdateMethodsOnly(@"
class Foo { public int GiveMeNumber() => 20; }
");
            Assert.AreEqual(20, foo.Invoke("GiveMeNumber").Unwrap());
        }
Beispiel #7
0
        public void Multifile()
        {
            var r = CScript.CreateRunner(new string[] {
                @"
class Bar { public int GiveMeNumber() => 10; }
",
                @"
class Foo { public int GiveMeNumber() => (new Bar()).GiveMeNumber() * 2; }
"
            });
            var foo = r.Instantiate("Foo");

            Assert.AreEqual(20, foo.Invoke("GiveMeNumber").Unwrap());
        }
Beispiel #8
0
        public void CastToCompiledType()
        {
            var runner = CScript.CreateRunner(@"
using System.Collections.Generic;
class MyList : List<int> { }
");
            var myList = runner.Instantiate("MyList");

            // virtual casting
            Assert.IsInstanceOfType(myList.Cast <List <int> >().Unwrap(), typeof(List <int>));

            // `(int)MyList` should be failed
            Assert.ThrowsException <InvalidCastException>(() => {
                myList.Cast <int>().Unwrap();
            });
        }
Beispiel #9
0
        public void Is2()
        {
            var runner = CScript.CreateRunner(@"
using System.Collections.Generic;
class MyList : List<int> { }
class MyStringList : List<string> { }
class MyFakeList { }
");
            var myList = runner.Instantiate("MyList");

            Assert.AreEqual(true, myList.Is <List <int> >());

            var myStringList = runner.Instantiate("MyStringList");

            Assert.AreEqual(false, myStringList.Is <List <int> >());

            var myFakeList = runner.Instantiate("MyFakeList");

            Assert.AreEqual(false, myStringList.Is <List <int> >());
        }
Beispiel #10
0
        public void MemberShouldBeSafe()
        {
            var r   = CScript.CreateRunner(@"
class Foo {
    public int Number = 10;
    public int GiveMeNumber() => Number;
}
");
            var foo = r.Instantiate("Foo");

            Assert.AreEqual(10, foo.Invoke("GiveMeNumber").Unwrap());

            foo.SetPropertyOrField("Number", HybInstance.Int(20));
            Assert.AreEqual(20, foo.Invoke("GiveMeNumber").Unwrap());

            r.UpdateMethodsOnly(@"
class Foo { public int GiveMeNumber() => Number * 2; }
");
            Assert.AreEqual(40, foo.Invoke("GiveMeNumber").Unwrap());
        }