schveiguy / raylib-d

Resurrected copy of onroundit's raylib-d
zlib License
55 stars 14 forks source link

unneserry imports hurt wasm compatibility #44

Open crazymonkyyy opened 9 months ago

crazymonkyyy commented 9 months ago

for whatever reason wasm doesn't have c_long, so ive been hunting down those imports

reasing line 87; narrow to import core.stdc.math:sinf,cosf,sqrtf,powf;

raymathext line 4 import core.stdc.math:cos,sin,atan2,sqrt;

raygui line 17

alias c_long=long
alias c_ulong=ulong

theres probably others and my other modification may have moved the lines around

schveiguy commented 9 months ago

Is there a version I can use to only do this for WASM?

crazymonkyyy commented 9 months ago

I'm using this command in a lazily reargended folder ldc2 -I./raylib -c -betterC -mtriple=wasm32-unknown-unknown-wasm app.d to get the errors Im not going to be using dub since I have no reason to think it will be remotely easy to convince it to run enscription; but like some of my edits of "official style guide" approved; ill probably publish my raylib "fork" when I get a hello world running both locally and on wasm

crazymonkyyy commented 9 months ago

version

my hello world that works on both passed to a c compiler and dmd ... its hell honestly, wasmstd is going to be an ugly hack on ugly hack

version(D_BetterC){
    import wasmstd; 
    enum betterc=true;
    extern(C) void main()=>main_;
} else {
    import std;
    enum betterc=false;
    void main()=>main_;
}
void main_(){
    betterc.writeln;
    "hello".writeln;
}
schveiguy commented 9 months ago

Note that all the files are generated by dstep, so probably these "changes" would have to go in as manual steps (see the generating.md document)

crazymonkyyy commented 3 months ago

https://github.com/schveiguy/raylib-d/blob/07f79053b471efa674b20f1bee9e81edfb92eb58/source/raylib/raymathext.d#L5

template FieldNameTuple(T)
{
    static if (is(T == struct) || is(T == union))
        alias FieldNameTuple = staticMap!(NameOf, T.tupleof[0 .. $ - isNested!T]);
    else static if (is(T == class) || is(T == interface))
        alias FieldNameTuple = staticMap!(NameOf, T.tupleof);
    else
        alias FieldNameTuple = AliasSeq!"";
}
template staticMap(alias fun, args...)
{
    alias staticMap = AliasSeq!();
    static foreach (arg; args)
        staticMap = AliasSeq!(staticMap, fun!arg);
}

I think this is the only place phoboes is used, and this is very easy to replace code