{"id":19168278,"url":"https://github.com/hilkojj/dibidab-engine","last_synced_at":"2025-09-10T22:42:12.857Z","repository":{"id":44986016,"uuid":"237478068","full_name":"hilkojj/dibidab-engine","owner":"hilkojj","description":"Small ECS-based Game Engine with Lua scripting","archived":false,"fork":false,"pushed_at":"2024-11-08T07:40:11.000Z","size":1304,"stargazers_count":13,"open_issues_count":1,"forks_count":0,"subscribers_count":3,"default_branch":"master","last_synced_at":"2024-11-08T08:31:43.132Z","etag":null,"topics":["browser","cpp","ecs","game-engine","linux","lua","opengl","windows"],"latest_commit_sha":null,"homepage":"","language":"C++","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/hilkojj.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":"2020-01-31T17:11:30.000Z","updated_at":"2024-11-08T07:40:14.000Z","dependencies_parsed_at":"2024-03-23T20:22:46.712Z","dependency_job_id":"e88e3d67-6d2c-4293-a9f8-b6a3300f32f9","html_url":"https://github.com/hilkojj/dibidab-engine","commit_stats":null,"previous_names":["hilkojj/dibidab-engine"],"tags_count":0,"template":false,"template_full_name":"hilkojj/cpp-game-utils-template","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hilkojj%2Fdibidab-engine","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hilkojj%2Fdibidab-engine/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hilkojj%2Fdibidab-engine/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hilkojj%2Fdibidab-engine/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hilkojj","download_url":"https://codeload.github.com/hilkojj/dibidab-engine/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":223811921,"owners_count":17206933,"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":["browser","cpp","ecs","game-engine","linux","lua","opengl","windows"],"created_at":"2024-11-09T09:42:03.562Z","updated_at":"2024-11-09T09:42:04.200Z","avatar_url":"https://github.com/hilkojj.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Dibidab Engine 2\n\nDibidab is a small ECS-based game engine that I use in my game projects.\n\n## Dependencies\n\n- [GU](https://github.com/hilkojj/gu): My C++ OpenGL game library for Desktop \u0026 Web.\n- [Dibidab Header Tool](https://github.com/hilkojj/dibidab-header): My tool that generates reflection code, Lua bindings and JSON-(de)serialization code.\n- [EnTT](https://github.com/skypjack/entt): Core functionality for using the Entity-Component-System pattern.\n- [Lua](https://github.com/lua/lua) and [Sol2](https://github.com/ThePhD/sol2): For scripting and Lua bindings.\n\nDependencies are included using submodules in `external/.`\nRun `git submodule update --init --recursive` before configuring CMake.\n\n## Features\nThis engine is built as a library and exposes the APIs of the other libraries listed above.\nNext to the features that those libraries offer, Dibidab has features including:\n\n### Entity Templates \u0026 Scripting\nEntity templates can be made in Lua scripts.\nBecause each Component automatically has Lua bindings generated for them, they can be added/modified/removed by the Lua script.\nNot only is this possible during the creation of the entity, but also in callbacks of Event listeners or timeouts/intervals. \n\n```lua\n-- Save template, args and transform:\npersistenceMode(TEMPLATE | ARGS, {\n    \"Transform\"\n})\n\n-- Arguments that can be changed in UI, or from other scripts:\ndefaultArgs({\n    modelName = \"TestCar\",\n    maxVelocity = 3.0,\n    maxForce = 2000.0\n})\n\nfunction create(vehicle, args)\n\n    setComponents(vehicle, {\n        Vehicle {\n            maxVelocity = args.maxVelocity,\n            maxForce = args.maxForce\n        },\n        ModelSpriteView {\n            modelName = args.modelName\n        },\n        PathFinding {\n            navData = navData.VEHICLE\n        },\n        Hoverable {\n            category = hoverableMasks.VEHICLE | hoverableMasks.INTERACTABLE\n        },\n        MovingSpatialAudio()\n    })\n\n    setTimeout(vehicle, 0.5, function()\n        print(\"hello!\")\n    end)\nend\n\n\n```\n\n### Entity Inspection\nBecause Components automatically have reflection and serialization code generated for them,\nComponents can be inspected and modified using an in-game GUI.\nThe Inspector/Reflection code is smart enough to allow you to inspect maps, vectors, etc..\n![Entity Inspector](screenshots/inspector.png)\n\n### Behavior Trees\nThe engine comes with a Behavior Tree implementation that can be used for controlling entities with AI.\nBehavior trees and custom Tree Nodes can be made in Lua and/or C++.\nBranches of the trees can be entered based on the presence or absence of Components on the entity,\nand Nodes can add/remove/modify Components any way they like.\n\nThe implementation allows for running hundreds/thousands of entities with a behavior tree.\n\nA running behavior tree can be inspected using an in-game GUI.\n![Entity Behavior Inspector](screenshots/behavior_inspector.png)\n\n### Level saving/loading\nLevels can be saved and loaded. A level can consist out of multiple rooms.\nEach room is a 'ECS-Engine' with a set of Systems and Entities, of which any can be persistent.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhilkojj%2Fdibidab-engine","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhilkojj%2Fdibidab-engine","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhilkojj%2Fdibidab-engine/lists"}