{"id":14981881,"url":"https://github.com/lightnet/project-phaser3-matterjs","last_synced_at":"2025-10-29T09:30:22.629Z","repository":{"id":142372903,"uuid":"129322491","full_name":"Lightnet/project-phaser3-matterjs","owner":"Lightnet","description":"Simple space game shooter with Phaser 3.x and Matter.js physics with Lance-gg multiplayer client and server build.","archived":false,"fork":false,"pushed_at":"2018-04-25T17:01:53.000Z","size":540,"stargazers_count":10,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-02-02T00:24:41.544Z","etag":null,"topics":["babeljs","lance-gg","matter-js","multiplayer","nodejs","phaser3","phasergame","physics"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Lightnet.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-04-12T23:33:22.000Z","updated_at":"2024-10-27T00:46:50.000Z","dependencies_parsed_at":null,"dependency_job_id":"0a656fc9-361b-4aa2-9495-49730dee27c6","html_url":"https://github.com/Lightnet/project-phaser3-matterjs","commit_stats":{"total_commits":23,"total_committers":1,"mean_commits":23.0,"dds":0.0,"last_synced_commit":"67917d2f9db60a363033d6d6693ebdaab4aaddc7"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Lightnet%2Fproject-phaser3-matterjs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Lightnet%2Fproject-phaser3-matterjs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Lightnet%2Fproject-phaser3-matterjs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Lightnet%2Fproject-phaser3-matterjs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Lightnet","download_url":"https://codeload.github.com/Lightnet/project-phaser3-matterjs/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":238795478,"owners_count":19531753,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["babeljs","lance-gg","matter-js","multiplayer","nodejs","phaser3","phasergame","physics"],"created_at":"2024-09-24T14:04:25.834Z","updated_at":"2025-10-29T09:30:17.183Z","avatar_url":"https://github.com/Lightnet.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Project-Phaser3-Matterjs\n\nCreated by: Lightnet\n\nLicense: MIT\n\nStatus: Work in progress.\n\n# Required:\n * Nodejs\n * Gulp (npm / Auto build scripts)\n * Visual Studio Code ( Optional )\n\n# Information:\n Prototype development build for browser client and server 2D physics nodejs. Phaser 3.x.x 2D render and Matter-js Physics 2D is being used to build this project to run client and server side with nodejs. It used Lance-gg client and server for mutliplayer to sync objects.\n\n Project is base on lance-gg github spaace game mutliplayer.\n\n [Spaaace](https://github.com/lance-gg/spaaace) Pixi.js \u003e Phaser 3.x Frameworks.\n\n# Controls:\n * B = Deploy Object Test.\n * C = Brake or stop ship movement.\n * Space = Shoot\n * Up key = Forward\n * Left and Right Key = Rotate\n\n# Layout:\n```\n Dev folder:\n  - assets (files)\n  - dist (server files)\n  - node_moduels (npm)\n  - public (web host / static)\n  - src (client and server)\n  - main.js (server app)\n  - .babel (compile es6 to javascript)\n  - gulpfile.js (auto build script tasks)\n  - index.html (default page)\n```\n\n# Client and Server Engine:\n\nClient | Common | Server\n-------|--------|-------\nLance-gg Client (socket.io) | Lance-gg Engine (Management / GameObject)  | Lance-gg Server (socket.io)\nPhaser 3.x.x | Phaser 3.x.x | None\nMatter.js | Matter.js | None\n\nThere are three important scripts. Client engine, game engine, and server engine. As well entry point for client and server node. You can read in [lance-gg](http://lance.gg/) site for more explaining. Game Engine script can act between client engine and server engine script to handle common share libraries like gameObject or player position. By using Lancegg node package to sync gameObject to socket.io that share functions on both side is to sync correct data object.\n\nCommon or share libaray folder files is used for serializer gameObject to handle game engine network.\n\n# Example:\n * Babel Javscript.\n * Common/Ship.js (Note: Testing...)\n```\nimport DynamicObject from 'lance/serialize/DynamicObject';\nimport Renderer from '../client/MyRenderer';\n\nexport default class Ship extends DynamicObject {\n  constructor(gameEngine, options, props){\n    super(gameEngine, options, props);\n    this.showThrust = 0;\n    this.isBot = false;\n    this.angle = 0;\n  }\n\n  onAddToWorld(gameEngine) {// this will handle client and server add to gameEngine for sync\n    //setup 2D physics for client and server side.\n    this.physicsObj = gameEngine.physicsEngine.addCircle(this.position.x,this.position.y,{});\n    this.physicsObj.gameObject = this;\n\n    let renderer = Renderer.getInstance();\n    //check if client browser or server node if Phaser 3 has render setup.\n    if (renderer) {//if client renderer then setup.\n      let shipActor = new ShipActor(renderer);\n      let sprite = shipActor.sprite;\n      renderer.sprites[this.id] = sprite;\n      sprite.id = this.id;\n\n      if (gameEngine.isOwnedByPlayer(this)) {\n        renderer.addPlayerShip(sprite);\n      } else {\n        renderer.addOffscreenIndicator(this);\n      }\n    }\n  }\n\n  onRemoveFromWorld(gameEngine) {\n    let renderer = Renderer.getInstance();\n    if (renderer) {//check if render client exist\n      if (gameEngine.isOwnedByPlayer(this)) {\n        renderer.playerShip = null;\n      } else {\n        renderer.removeOffscreenIndicator(this);\n      }\n      let sprite = renderer.sprites[this.id];\n      if (sprite) {\n        if (sprite.actor) {\n          // removal \"takes time\"\n          sprite.actor.destroy().then(()=\u003e{\n            //console.log('deleted sprite actor');\n            delete renderer.sprites[this.id];\n          });\n        } else {\n          //console.log('deleted sprite');\n          sprite.destroy();\n          delete renderer.sprites[this.id];\n        }\n      }\n    }\n    //remove physics object from gameEngine.physicsEngine\n    if(this.physicsObj){\n      this.gameEngine.physicsEngine.removeObject(this.physicsObj);\n    }\n  }\n}\n\n```\n\n# Notes:\n * When matter.js 0.1x.x render is over lay Phaser 3.x.x render the keyboard does not work. Click on again to get the keybaord to work.\n * Matter.js 2D physics handler is under testing.\n\n# Credits:\n * [Spaace](https://github.com/lance-gg/spaaace) Github\n * [Lance-gg](http://lance.gg/) Site\n * [Matter.js](http://brm.io/matter-js/) Site\n * [Phaser 3.x.x](https://phaser.io/) Site\n * [Html 5 Game Devs Phaser 3 Forum](http://www.html5gamedevs.com/forum/33-phaser-3/) Forum\n * [Pixijs](http://www.pixijs.com/) Site","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flightnet%2Fproject-phaser3-matterjs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flightnet%2Fproject-phaser3-matterjs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flightnet%2Fproject-phaser3-matterjs/lists"}