Skip to content

Calling object prototype functions does not work. #25

@JernejL

Description

@JernejL

I'm really determined to use besen in my project, and am still working on my game with it and writing a tutorial for others to do so, but i have a odd issue which i cannot figure out how to do properly, but it's most likely a bug:

I have registered native object:

BesenInst.RegisterNativeObject('Actor', TActorInterface);
The object has a property for OnCreate:

property OnCreate : TBESENObjectFunction read FOnCreate write FOnCreate;
In Javascript i've created an additional function on class:

Actor.prototype.OnCreate = function(OtherPlayer, AIClass) {
	
	console.log('actor_stack pushing - Actor.OnCreate')
	actor_stack.push(self);
	
}

Inside the constructor, i am attempting to call this function:

procedure TActorInterface.ConstructObject(const ThisArgument: TBESENValue; Arguments: PPBESENValues; CountArguments: integer);

...

	if Assigned(FOnCreate) then begin

		TBESEN(BesenInst).GarbageCollector.Protect(OnCreate);

	    try

	        AResult.ValueType := bvtBOOLEAN;
		    OnCreate.Call(BESENObjectValue(OnCreate), @CallParams, 3, AResult);

	    except

	       on e: exception do HandleBesenException(e);

	    end;

		TBESEN(BesenInst).GarbageCollector.Unprotect(OnCreate);

	end; 

This however does not work as planned, it does seem to work if a function is added on an instance of class itself - but how do i call a prototype method added in javascript - Assigned(FOnCreate) check fails and nothing is called.

Omiting assigned check does not work either.

I've also tried to check prototype - Prototype.HasProperty('OnCreate') to no avail.

I'm not totally sure how i should be handling this, any help will be appreciated.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions