Code Monkey home page Code Monkey logo

litiengine's People

Contributors

calvinmt avatar danhalv avatar ddreimane avatar deepsourcebot avatar dependabot[bot] avatar eagleoutice avatar ecchilds avatar felixkollin avatar gamebuster19901 avatar hades948 avatar hedfol avatar iamllcoolray avatar jdeblander avatar jluech avatar lucyletour avatar maxime91680 avatar niels89 avatar nightm4re94 avatar nwessman avatar phlosioneer avatar steffen-wilke avatar theomails avatar theramenchef avatar weisj avatar yannikschoeberl avatar

Stargazers

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

Watchers

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

litiengine's Issues

Create distribution .zip in gradle.build

Currently, only the .jar and native library assemblies are created and copied to the build folder. Since the release is provided as .zip file containing all these files, we should auto generate this zip while building.

Extend GuiComponents to work with keyboard / controller input

Currently, it is only possible to properly use most of the GuiComponent features with mouse input. There are several cases, where keyboard or controller input should be supported.

This will require to keep global track of which GuiComponent is currently focused for editing. This is already done for the TextFieldComponent in some way.
The support for these input devices includes:

  • Menu : Select elements via UP/DOWN binding
  • Slider: move slider left to right or top to bottom
  • CheckBox: Trigger
  • ListField: Select Element
  • NumberAdjuster: increase/descrease number

Remove timestamp from config.properties file

When saving the game configuration, the default java implementation automatically adds a timestamp.
We should remove this, because this results in changes to a file that might be under version control in some cases.

current:

#CLIENT_SETTINGS
#Wed Sep 06 00:43:52 CEST 2017
CLIENT_country=US
CLIENT_language=en
...

desired:

#CLIENT_SETTINGS
CLIENT_country=US
CLIENT_language=en
...

Implement callbacks for SoundEngine

  • OnSoundPlaybackFinished

Maybe: pass in sound playback interrupt predicate when playing

Also allow to interrupt sounds.
Might need to return SoundSource wrapped into some interface.

Extend trigger to support an internal cooldown

It is oftentimes necessary that a trigger cannot be triggered endlessly (especially collision triggers). It would be good to have an internal cooldown that ensures that triggers can only be activated at a certain rate.

On Mac the input sometimes seems to have a delay or is blocked entirely

Player Feedback From LDJAM
My biggest problem (which nobody else seems to have reported, so I wonder if it鈥檚 Mac-specific) was that I kept getting stuck in walls and couldn鈥檛 move for a while. Was especially frustrating on the last level where I鈥檇 fought hard for a couple of minutes to get the last person to the spot where I could aim at them and they finally went there but I got stuck on the way there for like 20 seconds and I missed the opportunity.

Extend terrain to support friction

Apply friction to terrain in order to slow down acceleration and speed up deceleration of entities.

The MovementController implementations also need to be adjusted to support this change.

Implement Default Offensive Ability

Right now the Offensive Ability class is implemented per game. Since it seems to be a requirement for almost any game, it should be moved to the engine instead.

Improve force handling by aggregating all forces before applying

When forces are active on a IMovableEntity, they are being applied by its MovementController implementation.

Currently this is implemented such that all forces individually:

for (final Force force : this.activeForces) {
...
final double angle = GeometricUtilities.calcRotationAngleInDegrees(collisionBoxCenter, force.getLocation());
final boolean success = this.getPhysicsEngine().move(this.getEntity(), (float) angle, gameLoop.getDeltaTime() * 0.001f * force.getStrength());

This should be refactored ot only call this.getPhysicsEngine().move(this.getEntity(), ... once and aggregate all the forces before.

Improve serialization of maps

When serializing maps with the litiengine XML model, the JAXB marshaller serializes a lot of unnecessary information which increases the filesize a lot.

Clean up GuiComponents

Currently the implementation of our GuiComponents is not as clean as we want it to be.

  • Constructors with large amounts of parameters
  • Inconsistent behavior
  • Not 100% completed implementations

(There are a lot of codesmells related to these components)

We should streamline all our GUI components and clearly define what they can do and what they can't.
The most important topic is the ease of use of the component interfaces.

  • Introduce a Z-Order (distinguish mouse events -> only top most component)
  • Add documentation about GuiComponents.
  • Test remaining implementations

Improve gamefile/map xml indentation to reduce size and increase compatibility to tiled xml serialization

Currently the litiengine uses the default JAXB format for its XML output, which results in a large indentation that causes the gamefile to be beigger than necessary. Also the xml output of the mapeditor only uses one indentation, so we'd increase the comparability between the tool outputs.

current:

路路路路<map height="64" name="hospital-level1" nextObjectId="0" orientation="orthogonal" renderorder="right-down" tileheight="16" tilewidth="16" version="1.0" width="64">
路路路路路路路路<properties>
路路路路路路路路路路路路<property name="AMBIENTALPHA" value="0"/>

desired:

路<map height="64" name="hospital-level1" nextObjectId="0" orientation="orthogonal" renderorder="right-down" tileheight="16" tilewidth="16" version="1.0" width="64">
路路<properties>
路路路<property name="AMBIENTALPHA" value="0"/>

Implement support for non-embedded tilesets (.tsx)

Currently, the engine only supports tilesets that are embedded in the map.

We need to implement support for external tilesets (.tsx files).
This can be done by using the source XML attribute and deserializing the tileset from the provided file.

Also, the file needs to be included in the environment file and the editor needs to be extended to support importing/updating exporting tilesets.

Implement support for resolution ratios in full screen

Currently the resolution only has influence for the windowed mode of the game because the fullscreen mode just uses the entire screen.

  • Support ratio based scaling (4:3, 16:9, 16:10, ...)
  • Make sure that the selected resolution is used in fullscreen mode
  • Scale game in fullscreen according to resolution
  • Implement selection of screens

Support Steam Controller with steamworks4j

Currently, it's not possible to use all functionality of the steam controller properly.

Steamworks4j provides access to the functionality.
We need to evaluate what we need from this library and how we can integrate it into the engine.

Support for Spawnpoints is not consistent

The Spawnpoints are part of the engine but currently not available on the environment.
They should be retrieved automatically when loading a map and provided as a list on the environment

Keyframes from sprites.info sould be autmatically used when creating an animation

Right now the keyframes from the sprites.info are loaded to the game but need to be manually retrieved when creating an animation with

new Animation(Spritesheet.find("sprite-name"), ... , Spritesheet.getCustomKeyFrameDurations("sprite-name"))

This is really redundant and should be retrieved automatically if any custom keyframe durations are specified.

Please add a tutorial

I would like to ask a sample "Hello World" project using LITIengine or a "Getting started" wiki.
Thanks

The order of image/tile layers cannot be serialized in the original order

In contrast to the original .tmx approach, we use an object model for the XML serialization of the map instead of manually serializing the layers.
We do enhance the tile- and imagelayers by an order property but this is not compatible backwards, which might result in losing the original order of the layers when serializing.
Because we're serializing two collections of layers it is not possible to mix the layer order between those elements. Within the layer types, the order is correct but if the order was originally something like

- TileLayer 1
- ImageLayer 1
- TileLayer 2

our serialization will result in the order

- TileLayer 1
- TileLayer 2
- ImageLayer 1

which would result in a wrong rendering order for the Tiled Editor and maybe other renderers.

Implement an onMessage event for entities

To handle message for entities, it is currently necessary to overwrite the sendMessage method in a child class.
With this extension, it should be possible to just register on an Entity in order to react on certain messages.

Refactor the IKeyboard interface to allow registering for individual key events

Currently the IKeyboard interface is allowing IKeyObservers to be subscribed to all keyboard events. Typically the consumer doesn't require any type of keyboard events.

On the otherhand it is possible to register for individual key events keyPressed, keyReleased, keyTyped but only for specific keys.

Some usecases need to subscribe to these events independet of a spcecific key which is currently only possible when implementing the IKeyObserver interface but then again all methods need to be implemented, even if only particular ones are required.

Target state:

Refactor the IKeyboard interface to provide access to explicit key events without having to implement all others.

Add key independent methods:

  • onKeyPressed
  • onKeyReleased
  • onKeyTyped

GuiComponent should support enable property

The GuiComponents currently don't support enabling/disabling.

  • Mouse events should not fire
  • Provide different disabled color for control and text

Also ImageComponents should support a different backgroundimage for the disabled state.

Looping sound playback does not work

There's an issue with the SoundEngine currently not supporting to loop sounds/music.
The problem is that the following method doesn't forward the loop parameter.

  public void play(final boolean loop, final Point2D location, final float gain) {
    // clip must be disposed
    if (this.dataLine != null) {
      return;
    }

    this.gain = gain;
    final PlayThread thread = new PlayThread();
    thread.start();
    this.played = true;
  }

Merge utiLITI repository with the main LITIengine repository

Currently, the utiLITI editor is separated from the *LITIengine repository. This causes the necessity to create and maintain two parallel versions as well as the build and quality infrastructure.
To circumvent this, the editor should just be migrated to the main repository under a tools folder.

Improve map output for better diff-viewing with mapeditor xml output

Although our exported XML maps can be opened with the mapeditor, the output XML differes in a lot of ways.
Some properties are being serialized in a different order and some have a different type (double instead of int).

It is desired to adjust out output in order to improve intercompatibility between the tools.

Example:

current:

<object gid="0" height="21.0" id="162" type="PROP" width="20.0" x="694.0" y="315.0">

desired:

<object id="162" type="PROP" x="694" y="315" width="20" height="21">

Implement possiblity to fade music

If another track is being played the request of slowly fading out the first and/or fading in the second track arises.

From @TheRamenChef #173 Add functionality for multiple music tracks to play

While playing multiple music tracks at once isn't inherently useful, it would help to be able to have two "versions" of a track playing at once, and switch between them using the gain controls.

Refactor MapObject loading to improve Environment implementation

Currently the loading of MapObjects of all MapObjectTypes is implemented in the Environment class.
If someone wants to change a loading behavior, he needs to overwrite the Environment and provide a custom child implementation for certain methods.

This results in the environment being a very large and hard to maintain class and the API requires to inherit from core litiengine classes, which is not desired.

The new approach would be to implement small IMapObjectLoader units that handle the loading process for exactly one MapObjectType. These will then be registered on the environment, which holds exactly one loader for a certain type.

  public void registerMapObjectLoader(final MapObjectType type, final IMapObjectLoader loader);

  public void registerMapObjectLoader(final String type, final IMapObjectLoader loader);

By providing an overload method that accepts a String as type, it is also possible to reuse this approach for custom map object types that are not part of the engine.

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.