EventHorizon.Blazor.TypeScript.Interop.Generator icon indicating copy to clipboard operation
EventHorizon.Blazor.TypeScript.Interop.Generator copied to clipboard

Setting an array of class type?

Open limefrogyank opened this issue 4 years ago • 3 comments

I'm at a loss as to how to add an array of a class type. For example, in RenderTargetTexture, you need to add any meshes that you want rendered into a property on the RenderTargetTexture object called renderList. This is a plain array of type AbstractMesh[]. The generator picks this up just fine. I try to use it like this:

_shadowRenderTarget.renderList = new AbstractMesh[] { _moleculeMesh };

However, when I later call render() on the RenderTargetTexture, BabylonJS spits out an error. The actual JS AbstractMesh object is the Cached version that has the ___guid. There doesn't seem to be a way to translate those C# objects to the javascript objects. I can't seem to find a way to manipulate arrays, so I'm not sure what to do next.

limefrogyank avatar Jan 30 '21 01:01 limefrogyank

Looks like I might have to write a custom CachedEntityConverter

limefrogyank avatar Jan 30 '21 01:01 limefrogyank

Wasn't sure how to do the CachedEntityConverter. Instead this javascript hack seems to work:

function pushClassToArray(root, identifier, ...args) {
    try {
        var arrayEntity = blazorInterop.cacheEntity(root, identifier);
        for (var i = 0; i < args.length; i++) {
            blazorInterop.call(arrayEntity, "push", args[i]);            
        }
    } catch (ex) {
        console.log("error", ex);
    }
}

used like this with a synchronous JSRuntime:

            Runtime.InvokeVoid("pushClassToArray", _shadowRenderTarget.___guid, "renderList", _moleculeMesh);

limefrogyank avatar Jan 30 '21 17:01 limefrogyank

This looks like a deficiency in the generator, I will look at getting this in.

canhorn avatar Feb 03 '21 13:02 canhorn