{"id":13745215,"url":"https://github.com/dionjwa/Hydrax","last_synced_at":"2025-05-09T05:30:58.127Z","repository":{"id":1085013,"uuid":"933297","full_name":"dionjwa/Hydrax","owner":"dionjwa","description":"The Pushbutton Engine ported to Haxe","archived":false,"fork":false,"pushed_at":"2012-04-05T06:17:16.000Z","size":40119,"stargazers_count":66,"open_issues_count":2,"forks_count":6,"subscribers_count":3,"default_branch":"master","last_synced_at":"2024-11-09T01:36:56.968Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"ActionScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":"sbinet/go-hdf5","license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dionjwa.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"License.html","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2010-09-23T13:01:06.000Z","updated_at":"2022-11-24T15:29:47.000Z","dependencies_parsed_at":"2022-07-06T06:32:11.141Z","dependency_job_id":null,"html_url":"https://github.com/dionjwa/Hydrax","commit_stats":null,"previous_names":[],"tags_count":7,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dionjwa%2FHydrax","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dionjwa%2FHydrax/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dionjwa%2FHydrax/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dionjwa%2FHydrax/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dionjwa","download_url":"https://codeload.github.com/dionjwa/Hydrax/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":224819867,"owners_count":17375349,"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-08-03T05:01:25.071Z","updated_at":"2025-05-09T05:30:58.109Z","avatar_url":"https://github.com/dionjwa.png","language":"ActionScript","funding_links":[],"categories":["Unsorted"],"sub_categories":["Other API"],"readme":"[pushbutton]: http://pushbuttonengine.com/\n[haxe]: http://http://haxe.org\n[nme]: http://haxe.org/doc/start/cpp\n\n\n# PBE-Haxe (Hydrax): a [HaXe][haxe] port of the [PushButton Engine (PBE)][pushbutton]\n\n## What is it?\n\nHydrax/PBE is a game engine.  It helps you write robust, maintainable, flexible games both big and small, having solved many problems that you will encounter if you don't use this or a similar library.\n\n## How does it relate to NME?\n\nNME is a reimplementation of the Flash API for different platforms.  Hydrax is a game engine, so it higher level, and specifically designed to ease the creation of games.  Hydrax is not a direct competitor to NME, rather it sits on top of it, using NME to run on e.g. mobile devices.  Using NME with hydrax is optional.\n\nNB The html5 target for NME is not yet compatible with Hydrax.\n\n## Platforms currently supported\n\n- Flash\n- HTML5 \n- iOS (via NME)\n- Android (via NME)\n\n## Hydrax does this well:\n\n- Components: everything is based on components that you can easily replace with your own.\n- Asset handling\n- Injection via robotlegs (robothaxe).\n- Platform independent 2D display.\n- Platform independent input (currently Flash + Canvas only).\n- Handling transitioning between game screens, or levels.\n- Managing complicated game objects.\n\n## Gettings started\n\n1. Install [HaXe][haxe].\n2. At the terminal/dos prompt, type *haxelib install hydrax*\n3. Download this repository.\n2. Go to the repository folder *demo/02-bitmap-rendering/* in a terminal or dos prompt.\n3. Create a folder there called 'build' if one doesn't already exist.\n4. type *haxe buildflash.hxml*\n5. Open the swf in *demo/02-bitmap-rendering/build/demo.swf*\n6. You should see an image moving around the screen border.\n\nOr, you can type:\n\n\thaxelib run nme test nme.nmml flash\n\tor \n\thaxelib run nme test nme.nmml ios -simulator\n\n\n# Why\n\nHaXe and the PBE are a natural fit.  \n\nPBE is an excellent engine for building games, as the component plug-in architecture eases building of complex game objects with a minimum of code rewriting.  This component architecture also makes it easier to write games for different platforms, as different components can be used for different platforms in a natural way.\n\nHaXe provides an outright performance boost for games running in Flash, compared to games written in AS3.\n\nMany games require server side functionality.  HaXe compiles to several server-side languages/platforms, allowing a single language for the entire game development.  This capability alone is awesome.  I'll say it again: you can write game logic once that runs on the client and the server.\n\nCurrently, Hydrax will (mostly) keep the PBE package structure of the core classes (with permission from Ben Garney, PB Labs).  This may change if Hydrax diverges sufficiently.  Community contributions are encouraged.\n\n# What's done\n\nComplete or functional:\n\n- Core engine.\n- Injection.\n- Rendering (Flash, HTML5, iOS, Android).  Modified the original as3 pbe code to handle different platforms.\n- Xml Template system and PBE serialization.\n- Resources.  Rebuilt to handle multi-platform and haxe-only resources.\n- Tasks/tweens.\n- Profiling.\n- Box2D\n\nExtra features (not available in PBE):\n\n- Multiplatform: flash and HTML5 (js) rendering, c++ for standalone, iOs, and android.  Tested so far: flash, HTML5, node.js (server side platform), c++ (preliminary).\n- SVG support.\n- Flash \u003c - \u003e javascript remoting (including special HTML5 localStorage service).\n- Client/server remoting (from HaXe).\n\nIncomplete or not working:\n\n- Sound.  Cross platform sound is definitely needed.\n- PBE animations.\n- PBE sets.  Hydrax uses a context-specific SetManager (optional).\n- State machine (very low priority).\n- The PBE static class (not needed or useful with Haxe 'using' functionality).\n- Debugging.  \n\n# Differences\n\nDue to the extra features and multi-platform capability of HaXe (or just personal motivation), some components and features underwent more modifications than others.  Also, the package structure outside of the core engine are slightly modified: almost everything outside of the core engine is grouped under com.pblabs.components instead of com.pblabs.\n\n## Major differences:\n\n- Hxhsl signals instead of as3 events.  The SignalBondManager provides listener registration on Entity and Component objects with automatic listener  removal upon object destruction.\n- Rendering has been modified to simplify cross-platform 2D rendering.  The Flash API has *not* been duplicated (as in [NME][nme]), nor do I intend to. \n- Input.  Rewritten to handle cross-platform input (mouse, touch screens, etc).\n- A very simple form of field injection is available, robothaxe is not yet compatible with the cpp target.\n- Screens.  IPBContexts are used in the place of Screens.\n\n## Minor differences\n\nStandardized some method names:\n\n- IEntity.lookupComponentsByType -\u003e IEntity.getComponents\n- IEntity.lookupComponentByType -\u003e IEntity.getComponent\n- IEntity.lookupComponentByName -\u003e IEntity.getComponentByName\n- Hydrax IPBObjects don't have internal lists of game object sets.  That functionality is managed entirely by the SetManager.\n- Signals are used instead of flash specific event dispatchers.  \n- Haxe cannot property deserialize dynamic objects.  Currently, Haxe cannot check if an object implements Dynamic (where you can add arbitrary fields) so cannot decide if assigning such a field is a valid operation.\n- Property getters and setters must be in the form 'get_fieldName', 'set_fieldName' to work with PropertyReferences and ReflectUtil.  ReflectUtil adds duplicate methods from Reflect, checking getters/setters\n\n# License\n\nClasses directly ported from PBE and any new code maintain the original MIT license. Some classes in com.pblabs.util and com.pblabs.components.tasks are derived from LGLP code, and maintain the LGPL license.  The LGPL licensed classes are documented as such in the source headers.\n\nCopyright (c) 2010 Dion Amago\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdionjwa%2FHydrax","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdionjwa%2FHydrax","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdionjwa%2FHydrax/lists"}