bounding box not updating when window is resized.

Not favoritedFavorited Favorited 0 favourites
From the Asset Store
Step into the legendary boxing ring in Boxing Legends! Master your reflexes, aim for the highest score.
  • R0J0hound i couldn't get my files to work, so i've extended yours, using polyK.js to compute the earclipping.

    Hope you dont mind.

    I just need to add the actions and expressions then i'll release it for the community.

  • Don’t mind at all. It was meant as a public domain template of sorts. Just be sure to change the plugin id.

  • Ashley

    I'm getting an error

    "Failed to load all engine scripts in worker: TypeError: Class extends value undefined is not a constructor or null

    at type.js:3:69"

    Used C3.SDKPluginBase for plugin.js, C3.SDKWorldInstanceBase for instance.js, and C3.SDKObjectTypeBase for type.js.

    All three classes are undefined, causing the same error in each file.

    The plugin works fine in the editor (edit-time scripts use SDK.IPluginBase, etc.).

    The plugin defines a custom collision polygon via getCollisionPoly and uses runtime.testOverlapInstances for the IsOverlapping condition, which should work once the runtime loads.

  • Used C3.SDKPluginBase for plugin.js, C3.SDKWorldInstanceBase for instance.js, and C3.SDKObjectTypeBase for type.js.

    Is this in the runtime or the editor scripts? It's not clear from your post.

    I would guess you mixed up SDK v1 and SDK v2 classes. If you're making an SDK v2 plugin, look at a sample like singleGlobalPlugin and copy whatever it does. For example the base class for the runtime type.js is globalThis.ISDKObjectTypeBase. Note that's a single-global plugin though, you may need to use a different base class for things like instances that appear in the layout, in which case refer to a suitable example, such as drawingPlugin which uses globalThis.ISDKWorldInstanceBase as the base class for the runtime instance.js.

  • Thanks for help and patience.

    I wish the examples were much more expansive.

    Now i have another issue.

    When evaluating my Is overlapping condition i get the runtime error;

    [Polygon] IsOverlapping: Error during testOverlap: TypeError: expected IWorldInstance at C3.Runtime._UnwrapIWorldInstance (runtime.js:1:64349) at self.ICollisionEngine.testOverlap (ICollisionEngine.js:1:264) at DrawingInstance.IsOverlapping (conditions.js:32:40) at C3.Condition._RunObject_FirstFilter (condition.js:1:7732) at C3.Condition._RunObject (condition.js:1:6915) at C3.EventBlock._DebugRunAndBlock (eventBlock.js:1:11113) at _DebugRunAndBlock.next (<anonymous>) at C3.EventBlock.DebugRun (eventBlock.js:1:9888) at DebugRun.next (<anonymous>) at C3.EventSheet.DebugRun (eventSheet.js:1:3736)</anonymous></anonymous>

    My instance.js defines the instance class as follows:

    C3.Plugins.Polygon.Instance = class DrawingInstance extends globalThis.ISDKWorldInstanceBase
    {
     constructor()
     {
     super();
     // ... initialization code ...
     }
    
     _onCreate()
     {
     console.log("[Polygon] _onCreate called. this.GetWorldInfo():", this.GetWorldInfo && this.GetWorldInfo());
     }
    
     // ... other methods ...
    }
    

    My conditions.js implements the IsOverlapping condition like this:

    IsOverlapping(objectClass)
    {
     if (!objectClass || typeof objectClass.getAllInstances !== "function") {
     console.warn("[Polygon] IsOverlapping: Invalid objectClass provided");
     return false;
     }
    
     const runtime = this.runtime || C3.runtime;
     if (!runtime || !runtime.collisions) {
     return false;
     }
    
     const instances = objectClass.getAllInstances();
     if (!instances || instances.length === 0) {
     return false;
     }
    
     const thisWorldInfo = this.GetWorldInfo && this.GetWorldInfo();
     if (!thisWorldInfo) {
     console.warn("[Polygon] IsOverlapping: this.GetWorldInfo() failed:", this);
     return false;
     }
    
     for (const otherInst of instances) {
     const otherWorldInfo = otherInst.GetWorldInfo && otherInst.GetWorldInfo();
     if (!otherWorldInfo) {
     console.warn("[Polygon] IsOverlapping: otherInst.GetWorldInfo() failed for instance:", otherInst);
     continue;
     }
    
     try {
     if (runtime.collisions.testOverlap(this, otherInst)) {
     return true;
     }
     } catch (e) {
     console.error("[Polygon] IsOverlapping: Error during testOverlap:", e);
     return false;
     }
     }
    
     return false;
    }
    

    I used globalThis.ISDKWorldInstanceBase for instance.js, as recommended.

    The plugin.js sets this._info.SetPluginType("world"), and this.runtime is available and set to self.IRuntime.

    I'm using runtime.collisions.testOverlap.

    Added logging to confirm that this.GetWorldInfo() is failing for the DrawingInstance. The Sprite instance (otherInst) has a valid WorldInfo object (C3.WorldInfo), but the Polygon instance (this) doesnt.

    "[Polygon] IsOverlapping: this.GetWorldInfo() failed: DrawingInstance"

    The Sprite instance (otherInst) has a valid WorldInfo object, as no otherInst.GetWorldInfo() failed log appears.

    The DrawingInstance has a property #t: false, while the Sprite instance has #t: C3.WorldInfo.

    Added _onCreate to instance.js to log GetWorldInfo() during the instance creation, but it does not appear to be called (no corresponding log appears).

    Thanks.

  • I'm stuck until this is resolved. Shame i think a lot of people would have liked this plugin.

  • Try Construct 3

    Develop games in your browser. Powerful, performant & highly capable.

    Try Now Construct 3 users don't see these ads
  • Hi,

    If you use the code tags around the pasted JavaScript it will preserve the indents and be easier to read.

    If the error is it expected a world instance what type did it get instead?

    Sometimes I console.log(this) to be able to browse what’s available. Works well when the code is run once otherwise the console will get spammed. Another option is utilizing the browser debugger. You’d preview, open the browser’s debugger, navigate to your code and add a breakpoint in your function. Or something like that. Anyways, that would let you inspect the values of everything at that point.

    The docs are useful but being able to browse the objects directly is useful for seeing what properties and methods are available.

  • Thanks.

    I tried console.log(this)...

    instance.js:127 [Polygon] DrawingInstance: this: DrawingInstance bounds: {minX: -50, maxX: 50, minY: -50, maxY: 50, width: 100, …} collisionMode: "0" moved: (6) [408, 119, 458, 219, 358, 219] points: (6) [0, -50, 50, 50, -50, 50] rotatedBounds: {minX: 0, maxX: 0, minY: 0, maxY: 0, width: 0, …} updateBbox: true #t: C3.WorldInfo _x: 408 _y: 169 _w: 100 _h: 100 _ox: 0.5 _oy: 0.5 _boundingBox: C3.Rect {_left: 358, _top: 119, _right: 458, _bottom: 219} _inst: C3.Instance runtime: self.IRuntime [[Prototype]]: self.ISDKWorldInstanceBase

    The #t: C3.WorldInfo object exists, but the instance isn’t linked to it via GetWorldInfo().

    The plugin executes

    plugin.js:1 [Polygon] plugin.js: Loading plugin.js type.js:1 [Polygon] type.js: Loading type.js instance.js:1 [Polygon] instance.js: Loading instance.js conditions.js:1 [Polygon] conditions.js: Loading conditions.js main.js:1 [Polygon] main.js: Loading main.js main.js:17 [Polygon] main.js: All plugin scripts imported.

    globalThis.SDK is undefined, but globalThis.ISDKPluginBase, globalThis.ISDKObjectTypeBase, and globalThis.ISDKWorldInstanceBase are available.

    main.js:4 [Polygon] main.js: SDK namespace: undefined plugin.js:5 [Polygon] plugin.js: SDK namespace: undefined plugin.js:6 [Polygon] plugin.js: ISDKPluginBase available: true type.js:5 [Polygon] type.js: SDK namespace: undefined type.js:6 [Polygon] type.js: ISDKObjectTypeBase available: true

    DrawingInstance lacks the GetWorldInfo() method required for IWorldInstance.

    instance.js:126 [Polygon] DrawingInstance: Constructor called instance.js:127 [Polygon] DrawingInstance: this: DrawingInstance instance.js:130 [Polygon] DrawingInstance: GetWorldInfo exists: false instance.js:134 [Polygon] DrawingInstance: this properties: ["runtime", "objectType", "plugin", "effects"] instance.js:145 [Polygon] DrawingInstance: Could not assign GetWorldInfo, C3.Instance lacks method instance.js:174 [Polygon] DrawingInstance: WorldInfo after init: undefined instance.js:176 [Polygon] DrawingInstance: GetWorldInfo missing after init, instance may not be fully registered as IWorldInstance

    Overlapping fails

    conditions.js:23 [Polygon] IsOverlapping: this.GetWorldInfo() failed, this: DrawingInstance

    Ashley any guidance?

  • That’s a a bit much to mentally sort through just from reading, sorry.

    The process to fix it should be fairly straightforward once you get used to it.

    The error is you’re not passing an expected type to the function on this line:

    runtime.collisions.testOverlap(this, otherInst)

    From the error it’s expecting a IWorldInstance type but is getting something else. It’s not clear from the error which parameter is incorrect, but the column:line is included in the error message so you could follow that to see.

    So that’s why I asked what type is being passed. Assuming you did that console.log(this) inside the same function that calls the testOverlap then the type of “this” is DrawingInstance which you define in instance.js and is an extension of ISDKWorldInstanceBase. And that apparently is an extension of IWorldInstance, so the first parameter should be good?

    Maybe the second parameter otherInst is the wrong type? But again figuring this all out piecewise and mentally is probably a futile effort.

    You could try posting your wip addon and time permitting someone could resolve the error.

  • Thanks i will take another look.

Jump to:
Active Users
There are 0 visitors browsing this topic (0 users and 0 guests)