Git Product home page Git Product logo

yaeger's Introduction

Yaeger

Java CI codebeat badge CodeFactor Quality Gate Status Maven Central License: GPL v3

Yaeger is Another Education Game Engine Runtime, and a fully functional 2D game-engine that requires only a traditional Object-Oriented style of programming. It is based on JavaFX and requires Java 21 or above to work.

Documentation

Usage

Yaeger requires JDK21, and is available through the Maven Central Repository.

<dependency>
  <groupId>com.github.han-yaeger</groupId>
  <artifactId>yaeger</artifactId>
  <version>2023.2024</version>
</dependency>

Modern Java, but an API with only traditional Object Orientation?

Yaeger is to be used in a course that is part of the first year at the HAN University of applied sciences. Students just learned to master Object Orientation in the traditional sense and therefore the API of Yaeger is only targeted towards that use case. Fancy functional aspects (such as Streams and Lambda's) are used within Yaeger itself, but are not exposed through its API.

Versioning

Because Yaeger will be used in an educational context, versioning will be based on school years. Thus version 2020.2021 will be used during the school year that start in September 2020 and ends in July 2021.

Breaking changes

It is likely that the API will break between different versions. This is partially intended, since it is to be used in an educational context and there is no shame in preventing students from using previous iterations.

Contributions

Contributing to Yaeger is encouraged, and we would love to review your Pull Requests. Either pick up one of the Issues or implement a feature you've been missing. Ensure that your feature does not require modern Java features to be exposed through the API.

License

The code and documentation in this project are released under the GNU General Public License v3.0

yaeger's People

Contributors

abdelhajou avatar cassiboy1203 avatar fritzvd avatar jaapapa avatar meronbrouwer avatar mstrshine avatar ryanaelen avatar sanmai-nl avatar simonvreman avatar stefthijssen avatar stephanwithph avatar wiebevanaken avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

yaeger's Issues

Using setSpeedTo and setDirectionTo instead of SetMotionTo does not work.

Using the setSpeedTo and setDirectionTo separately (instead of setMotionTo) does not work, when speed is 0 when setDirectionTo is called.
This comes from the fact that both methods are implemented as transformations on a movement vector. If speed=0, the magnitude of the vector is still 0 and after transformation it remains 0 (see DefaultMotionApplier).

This could be solved by storing the speed and direction as instance variables and using those to ensure the correct vector is created.

  • Add Unit tests to force out the bug.
  • Resolve the bug

A YaegerScene should provide a getWidth() and getHeight() method

Because a (JavaFX) Scene only gets it height and width set when it is added to the Stage, getScene().getWidth() will return 0 while a YaegerScene is constructed. (for instance during the addEntity())

It should be possible to acquire the width and height before it is added to the Stage

Fix Javadoc Generation

The plugin for generating the javadoc throws an error. This should be fixed and deployed on GH-Pages

Add A Yaeger startup screen

Each Game should be preceded by a Yaeger startup screen.

It should show both a Yaeger logo, and all key combinations that are available: (e.g. show the debugger, show Bounds of all nodes, etc)

Move Collisionside detection to Tiles

The current collisionside detection will not be applicable to a rotated GameObject. It will be applicable to a tile, so when that is implemented, it should be moved to tilecollision.

Add a manual on using Yaeger

Maybe an approach such as "The Tour of Heroes" from Angular is the way to go. Create a game called "The Game of Heroes", that contains all features from Yaeger.

Add Tilemaps

A tilemap should consist of enities, either static or dynamic. It's main focus must be an easy way to define its layout.

Replace Google Guice with a compile-time DI framework

The use of Google Guice requires an jvm argument when running a Yaeger game. Therefore Guice should be replaced with a DI framework such as Dagger2, which will not pose this problem.

According to guice/1133 a fix is coming to no longer need the JVM arguments. In that case, this issue can be closed

Add required mouse listeners.

We currently only handle mousebutton events. We should add the required code the also handle mousemovement events.

This one probably needs some good usecases to know what to implement.

Improve fitting of a boundingbox

It should be possible to create a bounding box that has a close fit than only the trivial rectangular one.

At initialization time we should analyse the sprite image and create a bounding box that only covers the non-transparent parts.

Attach Mouse Listeners, using an annotation and reflection

Currently a method called attachMouseListeners() in EntityCollection is responsible for calling the various attach() methods. If these methods were annotated we could use reflection to identify and invoke them (just like the @UpdateProvider).

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.