{"id":18013740,"url":"https://github.com/ide/bubblebounce","last_synced_at":"2025-03-26T16:33:07.504Z","repository":{"id":66103920,"uuid":"73988067","full_name":"ide/bubblebounce","owner":"ide","description":null,"archived":false,"fork":false,"pushed_at":"2016-11-27T22:32:42.000Z","size":3302,"stargazers_count":5,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-03-22T03:31:50.721Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"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/ide.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":"2016-11-17T03:49:53.000Z","updated_at":"2018-04-13T19:07:24.000Z","dependencies_parsed_at":null,"dependency_job_id":"ea0a6c47-c2e6-482e-a62f-646c638b9dd5","html_url":"https://github.com/ide/bubblebounce","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ide%2Fbubblebounce","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ide%2Fbubblebounce/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ide%2Fbubblebounce/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ide%2Fbubblebounce/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ide","download_url":"https://codeload.github.com/ide/bubblebounce/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245692951,"owners_count":20657037,"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":[],"created_at":"2024-10-30T03:22:54.084Z","updated_at":"2025-03-26T16:33:07.455Z","avatar_url":"https://github.com/ide.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Bubble Bounce!\n\nThis is a game I made during the first Exponent game jam. Play it here: https://exp.host/@ide/bubblebounce\n\n\u003cimg src=\"http://i.imgur.com/9n098ML.png\" alt=\"Bubble Bounce\" width=\"187.5\" height=\"333.5\" /\u003e\n\n## How it's made\n\nBubble Bounce is an Exponent experience that's written in pure JavaScript.\n\nI used [WhitestormJS](https://whsjs.io), a 3D engine that's built on top of [three.js](https://threejs.org), [Physijs](https://chandlerprall.github.io/Physijs/), and [AmmoNext](https://github.com/WhitestormJS/AmmoNext). AmmoNext is the C++ Bullet physics engine compiled to JavaScript using emscripten.\n\nParts of Whitestorm are written for the DOM, but fortunately it is rather customizable so I got Whitestorm working on Exponent by writing a custom rendering plugin and virtual mouse. The rendering plugin creates its three.js renderer with an Exponent EXGL context. It also calls `gl.endFrameEXP()` each time it renders. Basically, the rendering plugin is responsible for using EXGL to render what Whitestorm tells it to.\n\nThe virtual mouse listens to React Native touch responder events and uses raycasters to determine which objects have been touched. The virtual mouse also supports multitouch, allowing the user to simultanously touch several objects on the screen at once.\n\nThere is also a small fake browser library to implement parts of the DOM that Whitestorm always tries to access.\n\n## Configuration\n\nI had to configure React Native and XDE to be able to load the game and publish it. In particular, AmmoNext has a large JS file from emscripten that causes the transformer and minifier to run out of memory. I use the `rn-cli.config.js` file to specify a custom transformer that skips over AmmoNext. For publishing, I patched XDE so that it wouldn't minify the JS bundle. This caused the JS bundle to exceed the file limit for uploads to the Exponent publishing server so I published through a patched version of the server.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fide%2Fbubblebounce","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fide%2Fbubblebounce","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fide%2Fbubblebounce/lists"}