GithubHelp home page GithubHelp logo

whirvis / ketill Goto Github PK

View Code? Open in Web Editor NEW
4.0 2.0 1.0 2.05 MB

๐ŸŽฎ An API for dynamic device I/O.

Home Page: https://ketill.io

License: MIT License

Java 100.00%
java-8 api device hid-usb xinput gradle jenkins junit5 glfw3 gamedev

ketill's Introduction

Twitter Reddit YouTube Twitch

๐Ÿ“ฃ Heya, my name's Whirvis!

I'm the creator of JRakNet and Ketill. I'm a self taught software engineer from the age of twelve, and an aspring game developer. I code primarily in Java, Kotlin, and C. Of course, I am also happy to code in other languages as needed.

ketill's People

Contributors

blu3tu3sday avatar whirvis avatar

Stargazers

 avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

Forkers

you0

ketill's Issues

Add Wiimote and its core extensions

Definitions for the Nintendo Wiimote (named Wiimote) should be created in the devices.wii module. Its core extensions should also be created. An accompanying adapter should be implemented in the hid-usb module.

The core extension of the Wiimote are defined as such:

Extension Class
The Nunchuk NunchukExtension
The Classic Controller ClassicExtension
The Classic Pro Controller ClassicProExtension
Wii Motion Plus MotionPlusExtension

The ability for user to add support for their own extensions to Wiimote must be available.

Audit PeripheralSeeker before release

The PeripheralSeeker class has proven to be especially troublesome to engineer. I've had to refactor this three times to get it in a decent state. Furthermore, multiple bugs have appeared when previously thought to be fixed. While I believe to have resolved these issues in its current revision (commit d22cbc9), it's likely there are still some bugs in there. Before releasing Ketill v1.0.0, a final audit must be done on this class and its unit testing to ensure it is adequate for release.

Create formatting settings for IntelliJ

The current formatter being used by IntelliJ produces mostly okay results, but has some issues following line breaks. This has resulted in high usage of @formatter, decreasing code quality. Creating a standard formatting settings document would fix this issue.

Add battery level support

An I/O feature representing the battery level of a device should be added when possible to the controller module. The class of the I/O feature may possibly be named Battery or InternalBattery, and its state class BatteryLevel. The state class shall have a method named getLevel(), which returns a floating point value from 0.0 for an empty battery and 1.0 for a fully charged battery. It shall also have a method called getPercentage(), which calls getLevel() and converts its value to an integer with a range from 0 to 100.

Device classes which may have a battery feature could be, but are not limited to: XboxController, Ps3Controller, Ps4Controller, Ps5Controller, Wiimote, NxLeftJoyCon, NxRightJoyCon, and NxProController.

UPDATE: The xinput module now supports the INTERNAL_BATTERY feature present in XboxController.

Make Jenkins server readable to the public

At the moment, clicking on the build badge in README.md results in the user being redirected to a login page. This is not the desired behavior. The Jenkins server should be accessible by anyone to download recent builds of Ketill.

Add Nintendo Switch JoyCons

Definitions for the Nintendo Switch JoyCons (named NxJoycon) should be created in the devices.nx module. An accompanying adapter should also be implemented in the glfw module.

Generate build JAR for each module

At the moment, build JARs are generated but they are not generated properly. Their names lack a "ketill" prefix, a version indicator, and are not easily acessible for download in Jenkins.

Add sensor support

An I/O feature representing sensors such as accelerometers and gyroscopes should be added when possible to the controller module. The class of the I/O feature may be named Sensor or PhysicalSensor, and its state class SensorValue. The state class shall have a method named getValue(), which returns a Vector3fc containing the current value for the sensor. It shall also have shorthand methods like getX(), getY(), and getZ() which can be found in StickPos.

Device classes which may have an accelerometer and gyroscope feature could be, but are not limited to: Ps3Controller, Ps4Controller, Ps5Controller, Wiimote, NxLeftJoyCon, NxRightJoyCon, and NxProController.

EDIT: Removed XboxController from the list of candidates, as it has no accelerometer or gyroscope.

Fix broken X-input tests on Linux

At the moment, running tests for the xinput module results in a failing build; but only on Linux. They pass without problem on Windows. This is because the library being used to access X-input, JXInput, initializes the native libraries in a static block. This makes it impossible to even load the class on a non-Windows system without crashing the JVM. Currently, the workaround for this is to have Jenkins skip the testing phase for the xinput module. However, this is not satisfactory for the long term.

Before release of v1.0.0, the xinput module must be updated with the following:

  • Methods to check if the module can be used on the current system.
  • Appropriate exceptions for when use is attempted on a system without X-input.
  • Throwing of said exceptions when necessary. For example, throwing a NoXinputException when attempting to construct an instance of XboxAdapter or XboxSeeker when X-input is unavailable.
  • Additional tests for systems on which X-input is unavailable.
  • Skipping tests depending on the availability of X-input.

Add Nintendo Wii U Pro Controller

Definitions for the Nintendo Wii U Pro Controller (named WiiUProController) should be created in the devices.wiiu module (or devices.wii module, see below.) An accompanying adapter should also be implemented in the hid-usb module. Under the hood, the Wii U Pro Controller is just a Wiimote with a special extension plugged in. As such, issue #12 must be closed first.

Setup publishing to Maven central

This will allow users of Gradle, Maven, and other build systems to easily incorporate Ketill and its modules into their projects. This is key to increasing use of the library, as painful setup will likely turn away users.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.