{"id":37459053,"url":"https://github.com/dividat/playdev","last_synced_at":"2026-01-16T07:01:43.413Z","repository":{"id":56290448,"uuid":"97253125","full_name":"dividat/playdev","owner":"dividat","description":"Ressources for developing games for Dividat Play and Senso","archived":false,"fork":false,"pushed_at":"2025-03-25T14:28:29.000Z","size":350,"stargazers_count":0,"open_issues_count":1,"forks_count":2,"subscribers_count":0,"default_branch":"develop","last_synced_at":"2025-03-25T15:36:39.715Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"TypeScript","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/dividat.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}},"created_at":"2017-07-14T16:26:32.000Z","updated_at":"2021-05-06T08:35:05.000Z","dependencies_parsed_at":"2022-08-15T16:10:12.278Z","dependency_job_id":null,"html_url":"https://github.com/dividat/playdev","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/dividat/playdev","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dividat%2Fplaydev","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dividat%2Fplaydev/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dividat%2Fplaydev/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dividat%2Fplaydev/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dividat","download_url":"https://codeload.github.com/dividat/playdev/tar.gz/refs/heads/develop","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dividat%2Fplaydev/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28477996,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-16T06:30:42.265Z","status":"ssl_error","status_checked_at":"2026-01-16T06:30:16.248Z","response_time":107,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":"2026-01-16T07:01:42.378Z","updated_at":"2026-01-16T07:01:43.297Z","avatar_url":"https://github.com/dividat.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ![Play\\[dev\\]](images/logo-play-dev.png)\n\n[Dividat Play](https://dividat.com/en/senso) is a web-based environment for playing games with the [Dividat Senso](https://dividat.com/en/senso) hardware. It is capable of loading and running \"external\" games (that is games that are not developed in the same codebase). This repository contains documentations and examples on how to develop games for usage with Dividat Play and Senso.\n\n## Overview\n\n![architecture](images/architecture.png)\n\n-   **Play**: Dividat Play is a web application that loads games according to personal training plans and manages hardware connectiviy.\n-   **Game**: The game you are developing can be developed in any language or framework that can target the Web platform (e.g. [Unity](https://unity3d.com/), [Phaser](https://phaser.io/), [ClojureScript](https://clojurescript.org/)). The game connects to Play via a protocol called the _External Game Interface_ (EGI).\n-   **Senso**: Used as controller for the games. Play connects to the Dividat Senso and acts as a proxy between the hardware and your game.\n\n## EGI\n\n![EGI protocol sequence chart](images/egi.png)\n\nThe Game communicates to Play via a message based protocol. Play sends messages to your game and your game sends messages to Play.\n\nTo use the EGI a small JavaScript library must be loaded which is available at \u003chttps://play.dividat.com/PlayEGI.js\u003e. A [description of the library](types/) is available as a TypeScript declaration.\n\n### Under the hood\n\nThe game is loaded by Play in an [`iframe`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe). EGI messages are sent with the [`Window.postMessage()`](https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage) method.\n\n## Senso signal\n\nThe Senso signal consists of a series of `x`, `y` and `f` measurements for each of the plates. The `x` and `y` values describe a position on the Senso's surface with `(0, 0)` in the upper left and `(3, 3)` in the lower right corner. The `f` value describes the \"force\" as a number between 0 and 1, where 1 is the maximum force the sensors can theoretically measure.\n\n## Development tool\n\nA development tool that implements the EGI is available at \u003chttps://play.dividat.com/playDev.html\u003e.\n\n### Use without Senso\n\nThe PlayDev environment, like the actual Play application, does not forward arbitrary keyboard events when running games. Specific keys are translated and forwarded as Senso inputs:\n\n- The arrow keys for the outer plates\n- The space key for the center plate\n\nKeydown and keyup events are sent as `Step` and `Release` events, respectively.\n\n## [Examples](examples)\n\nExamples are provided to illustrate developement of Games for Play:\n\n- [`hello-clojure`](examples/hello-clojure): A simple ClojureScript app illustrating usage of EGI.\n\nTODO: More examples.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdividat%2Fplaydev","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdividat%2Fplaydev","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdividat%2Fplaydev/lists"}