{"id":18248838,"url":"https://github.com/igorski/rts","last_synced_at":"2025-04-04T15:32:35.066Z","repository":{"id":37591093,"uuid":"500372171","full_name":"igorski/rts","owner":"igorski","description":"An isometric real time strategy game that runs in your browser","archived":false,"fork":false,"pushed_at":"2022-10-03T19:05:53.000Z","size":640,"stargazers_count":5,"open_issues_count":1,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-03-20T15:03:02.854Z","etag":null,"topics":["game","rts","rts-game","typescript","vue","vue3","web"],"latest_commit_sha":null,"homepage":"https://www.igorski.nl/application/rts","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/igorski.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2022-06-06T09:35:52.000Z","updated_at":"2024-10-25T10:07:24.000Z","dependencies_parsed_at":"2023-01-19T04:30:57.277Z","dependency_job_id":null,"html_url":"https://github.com/igorski/rts","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/igorski%2Frts","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/igorski%2Frts/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/igorski%2Frts/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/igorski%2Frts/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/igorski","download_url":"https://codeload.github.com/igorski/rts/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247203119,"owners_count":20900919,"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":["game","rts","rts-game","typescript","vue","vue3","web"],"created_at":"2024-11-05T09:38:26.664Z","updated_at":"2025-04-04T15:32:30.056Z","avatar_url":"https://github.com/igorski.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# RTS\n\nA WIP browser based real time strategy game in the vein of 90's classics such as Dune 2 and Command \u0026 Conquer.\n\n## Game model\n\nThe game is written in TypeScript using Vue 3 with Pinia. The game sprite rendering is\ndone using igorski's [zCanvas library](https://www.github.com/igorski/zcanvas) with Vue\nhandling the UI overlays.\n\nAll the game's actors and properties are Object structures inside Pinia store states making\nthese reactive.\n\nIn order to create a new structure, a factory pattern is provided and every\ngame structure has its own factory (see `/src/model/factories/`). You should never\ncreate your own Object structure but use a factory instead.\n\nOperations on structures are done using the action modules (see `/src/model/actions/`) but remember\nwhen changing values of a Pinia state object, that these should be called from a store action.\n\nWhile the game clock could increment at a lower speed than in actual life (e.g. when paused), think of all\ntime related operations (e.g. `Effects`) as if they were actual time (e.g. _\"the effect of this item should last for fifteen minutes during gameplay\"_). The unit used is the _millisecond_ and is automatically\nscaled to the game/real life ratio when creating a new Effect using the `EffectFactory`.\n\nAll of the games behaviour and time bound effects update in the same place: the `update()`-handler\nin the `game`-store. This is bound to the render cycle of the game world (and deferred to AnimationFrame\nso the game is effectively paused when the browser/tab isn't focused).\n\n## Application source outline\n\n * _./assets/_ resources referenced by the application e.g. images, fonts and SASS stylesheets\n * _./components/_ Vue components\n * _./definitions/_ enumerations for game specific actions\n * _./model/_ game actor factories and actions (e.g. game logic)\n * _./renderers/_ visualizers of game actors (these are zCanvas Sprites)\n * _./store/_ Pinia store root and sub modules\n * _./utils/_ common helper methods\n\n## Project setup\n```\nnpm install\n```\n\n### Development\n\nCreate a local development server with hot module reload:\n\n```\nnpm run dev\n```\n\nCreating a production build (build output will reside in `/dist/`-folder):\n\n```\nnpm run build\n```\n\nRunning unit tests:\n\n```\nnpm run test\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Figorski%2Frts","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Figorski%2Frts","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Figorski%2Frts/lists"}