curiosity-ai / h5

πŸš€ The next generation C# to JavaScript compiler

Home Page:https://h5.rocks

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Box2D support

thomz12 opened this issue Β· comments

In my project I'd like to use Box2D. Is it possible to port that over from Retyped.box2d?

Is that something I can look into? Are you decompiling the Retyped packages for that?

Thanks for the info! I had I look just now and was able to decompile and get it to compile with my project.
Had a quick test that still didn't quite work, but I'll figure that out tomorrow. :)

So unfortunatly the original package used for Retpyed.box2d is used just for node applications. (I failed to notice that before)
I can convert it so it can be loaded in a browser, but I can't get the retyped package to work with that. (in the browser)

Do you have any ideas?

To be honest my personal experience with Retyped isn't very good - for all the libraries we use, we just ended up writing our own wrapper classes - much easy to get a consistency experience than the autogenerated one from the typescript definition files used by Retyped. I'm not familiar with Box2D, but if their API is not too crazy might be worth giving it a try.

It's usually as simple as writing a C# method and directly call the javascript code with something like this:

public class MyLib
{ 
    public int DoSomething(string par1, int par2)
    {
        return Script.Write<int>("myLib.doSomething({0}, {1}", par1, par2);
    }
}

The trick is that the compiler will emit directly the parameter variables in the final javascript, so that becomes:

return myLib.doSomething(par1, par2);

If you need more complex data types, you can create lightweight classes using the [ObjectLiteral] attribute. These classes are compiled to plain javascript objects without any of the C# extra code.

Obviously, use static methods if it's a static library, or create an instance of the library and store it locally in the wrapper class if needed

Thanks again for the tips!
I ended up using p2.js instead, and decompiled the retyped package for that. That seems to work now!

Would you like to make a nuget package for it? (p2) If you do, I'll open a PR tomorrow.

Cool! I wanted to push a new branch, but it it looks like I'm not allowed to.

remote: Permission to theolivenbaum/h5.git denied to thomz12.

Oh duh!
I've opened a PR now.

did that mistake in the past too πŸ˜„

Just merged the code, thanks for contributing!

For future reference, I'm leaving these two regexs that I used for cleaning the decompiled code:

  • Replace \s+{[\n\r]\s+get[\n\r]\s+{(.|[\s\n\r])*?}[\n\r]\s+set[\n\r]\s+{(.|[\s\n\r])*?}\s+} with { get; set; }
  • Replace \s+private .*?__BackingField;\r\n with

The final package should be published on nuget soon!