Giter Club home page Giter Club logo

Comments (13)

Lusito avatar Lusito commented on August 26, 2024 1

Ah, I'm sorry. I forgot, that one timer gets created on top-level. Try this instead:

Create a file "fixPerformance.js" (name it whatever you like) with the 2 code lines above, then import that file before you import @box2d/core.

from box2d.ts.

Lusito avatar Lusito commented on August 26, 2024 1

Hi @8Observer8, sorry for the delay, life kept me busy.

What exactly do you mean by adding it to the NPM package?

  1. perf_hooks is a node API and box2d.ts should be usable from the browser, so I can't just add it by default, as it will then fail in the browser.
  2. I guess I could make something like a submodule import. For example: import '@box2d/core/global-performance', is that what you'd want?
  3. Alternatively, I've just read about the browser field in package.json, which might be usable for this, but I'd have to do a little more research, if this is actually supported by all major bundlers: https://github.com/defunctzombie/package-browser-field-spec

Solution 2 will work for everyone, but it still requires a manual import by you. Solution 3 is more convenient, but also might break in some bundling scenarios.

from box2d.ts.

8Observer8 avatar 8Observer8 commented on August 26, 2024 1

I don't understand 3) but 2) is better than now. I think it must be in the documentation here: https://lusito.github.io/box2d.ts/docs/guide/ on the left side panel, for example, the Server section after Particels and Controller sections.

from box2d.ts.

Lusito avatar Lusito commented on August 26, 2024

You can check how the CLI benchmark does it: https://github.com/Lusito/box2d.ts/blob/master/packages/benchmark/src/cli/index.ts

import { performance } from "perf_hooks";

global.performance = performance as any;

from box2d.ts.

8Observer8 avatar 8Observer8 commented on August 26, 2024

Sorry, I don't understand what should I change to fix it. I use JavaScript instead of TypeScript.

from box2d.ts.

Lusito avatar Lusito commented on August 26, 2024

Somewhere in your server-side code, add the import and the global.performance assignment. Just make sure, the assignment happens before you work with box2d.

JavaScript version:

import { performance } from "perf_hooks";

global.performance = performance;

from box2d.ts.

8Observer8 avatar 8Observer8 commented on August 26, 2024
import { performance } from "perf_hooks";
global.performance = performance;
import { b2World } from "@box2d/core";

const world = b2World.Create({ x: 0, y: -9.8 });
console.log("ok");
E:\_Projects\Physics\box2d-core\server-side-box2dcore-webgl-js>node src/server/app.js
E:\_Projects\node_modules\@box2d\core\dist\common\b2_timer.js:27
        this.m_start = performance.now();
                       ^

ReferenceError: performance is not defined
    at new b2Timer (E:\_Projects\node_modules\�[4m@box2d�[24m\core\dist\common\b2_timer.js:27:24)
    at Object.<anonymous> (E:\_Projects\node_modules\�[4m@box2d�[24m\core\dist\collision\b2_time_of_impact.js:230:32)
�[90m    at Module._compile (internal/modules/cjs/loader.js:1072:14)�[39m
�[90m    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1101:10)�[39m
�[90m    at Module.load (internal/modules/cjs/loader.js:937:32)�[39m
�[90m    at Function.Module._load (internal/modules/cjs/loader.js:778:12)�[39m
�[90m    at Module.require (internal/modules/cjs/loader.js:961:19)�[39m
�[90m    at require (internal/modules/cjs/helpers.js:92:18)�[39m
    at Object.<anonymous> (E:\_Projects\node_modules\�[4m@box2d�[24m\core\dist\index.js:46:14)
�[90m    at Module._compile (internal/modules/cjs/loader.js:1072:14)�[39m

from box2d.ts.

8Observer8 avatar 8Observer8 commented on August 26, 2024

Thank you very much!

fix-performance.js

import { performance } from "perf_hooks";
global.performance = performance;

app.js

import "./fix-performance.js";
import { b2World } from "@box2d/core";

const world = b2World.Create({ x: 0, y: -9.8 });
console.log(`gravity = ${world.GetGravity().y}`);

Output: gravity = -9.8

from box2d.ts.

8Observer8 avatar 8Observer8 commented on August 26, 2024

I have reopened this issue because I think the solution above should be added to the NPM package.

from box2d.ts.

8Observer8 avatar 8Observer8 commented on August 26, 2024

I see that it is impossible. I just wanted to make it more user friendly. I mean user installs npm i @box2d/core and just uses it on the server side. I thought I can be solved. Thank you for your time to explain this clearly.

from box2d.ts.

Lusito avatar Lusito commented on August 26, 2024

Maybe I wrote this a bit confusing.. Only the first of the 3 approaches above is impossible. The other two are possible, but each have their downsides. I was hoping you would tell me your opinion on the last 2 approaches.

from box2d.ts.

Lusito avatar Lusito commented on August 26, 2024

I just noticed, that I don't get the error anymore and checked: performance.now is globally available since Node 16, so it's no longer needed to have this fix. I wrote the fix when I was still using Node 12.

Are you sure you still need this fix? I think we can drop support for Node 12 by now.

from box2d.ts.

8Observer8 avatar 8Observer8 commented on August 26, 2024

It works! I have moved my example on the Glitch hosting: https://glitch.com/edit/#!/box2d-core-on-the-server-side-js

import { b2World } from "@box2d/core";

const world = b2World.Create({ x: 0, y: -9.8 });

const gravity = world.GetGravity();
console.log(`gravity = (${gravity.x}, ${gravity.y})`);

You can see an output result of the program if you press "LOGS" at the bottom:

image

I have add the required Node.js (>=16) version to package.json:

{
  "name": "box2d-core-on-the-server-side-js",
  "version": "1.0.0",
  "description": "",
  "type": "module",
  "engines": {
    "node": ">=16.0.0"
  },
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "node server/app.js"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "@box2d/core": "^0.10.0"
  }

from box2d.ts.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.