GithubHelp home page GithubHelp logo

b3dgs / lionengine Goto Github PK

View Code? Open in Web Editor NEW
136.0 12.0 25.0 89.44 MB

Java 2D Game Engine

Home Page: http://lionengine.b3dgs.com

License: GNU General Public License v3.0

Java 100.00%
engine java game-engine awt audio network

lionengine's Introduction

B3DGS Parent

Build Lines of Code Maven Central Dev License

lionengine's People

Contributors

djthunder avatar nunojesus avatar somefire 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

lionengine's Issues

Create lionengine-audio module for each audio type

Create a lionengine-audio module for each supported type:

  • lionengine-audio-wav
  • lionengine-audio-midi
  • lionenigne-audio-sc68

This will avoid code duplication between lionengine-core-awt and lionengine-core-swt.

Mavenize remaining projects

Some project are not using maven (only the core part is using it). Add the remaining pom files for these projects.

Create an integrated tile collision editor for an easy definition of them

Tile collision implementation can only be done from code.
The current way of implementing it is not really complex, but it may be hard to implements more complex collisions (such as link between ground & slope), and also harder to debug it (impossible to show them).

The goal is to allow an easier tile collision definition directly from the collisions.xml file, such as the following examples (tile size = 16, so min=0 & max=15):

  • Simple example
<collision name="GROUND">
    <tiles pattern="4" start="1" end="100"/>
    <function description="ground" y="0">
        <x min="0" max="15"/>
    </function>
</collision>
  • y is the returned collision vertical point
  • min & max are the function range for the horizontal location (where it can be applied)
    Here we defined a ground collision for the complete surface (from 0 to 15), and the return vertical location is at the bottom of the tile (0).

  • More complex example
<collision name="SLOPE_TRANSITION">
    <tiles pattern="4" start="1" end="100"/>
    <function description="ground" y="0">
        <x min="0" max="7"/>
    </function>
    <function description="slope" y="-x/2+8">
        <x min="8" max="15"/>
    </function>
</collision>
  • y is the returned collision vertical point, by considering x as the horizontal location on the tile)
  • Here we defined a complex slope collision:
    • The first half size of the tile is a ground collision at the bottom
    • The last half size of the tile is a slope collision, starting perfectly after the ground one (+8, were the ground ended at 7)

Considering this, it should be easy to display an integrated debug mode for the collisions (by displaying the corresponding function after the map rendering).

It would also be nice to have a visual editor of this function, by using a simple map tile editor, that should be able to import a level rip (already available), define & assign collisions for the desired tiles by clicking on them.

Update projects POM and create a parent project

Add a parent project, and update all other POM.

Instead of including JNA in dist, just mark it as provided by the user in order to be more flexible and reduce distribution size (and also duplication).

Android support

Analyse and try to add a support to android.
New module lionengine-android should be created, as lionengine-java.

Add a project concept

As the editor will support many map implementation (standard, platform, strategy...), their instance have to be dynamic, without having to modify the editor code manually.

So instead of just retrieve the resources folder, it should be better to add a project handler feature, which will also contains the resources folder.

Once a project is opened, it should be possible to select a map implementation (by searching its class from a dialog) and pass it to the editor in order to use it.
A first constraint sounds to be the map constructor, which must be simply the default one.

Do not focus on multi-projects handling.

What should be done:

  • Set the resources explorer view as a projects view
  • Define a project class and its properties
  • Create a new project dialog & wizard (allow to create a project from scratch)
  • Allow to open an existing project (just read the project properties and put it in the projects list)
  • Allow to import an existing project which is not a lionengine project (just add the properties file and tag it as a lionengine project, open it and put it in the projects list)
  • Put a message in the world view if no map implementation is selected
  • Allow to select a map implementation from the project tree

Create the editor project base

Create a new project outside the engine core parts, called lionengine-editor, by using RCP4. Setup the program base with an initial view that will be completed later.

Lionheart Demo

Prepare a Lionheart Demo that will use as much as possible the engine.
Items:

  • Gameplay (movements, attacks, collisions)
  • Collisions (full at least for swamp level)
  • Monsters & Objects
  • Background
  • Level Editor

Integrate XML editors with the associated XSD for the element edition

Create an XSD per category (collision, entity...) and an integrated XML editor in order to edit with ease any parameter manually without forget anything.

It should also be possible to add elements from the project view, as:

  • Entities folder type (for entities folder)
  • Entity data
  • Patterns list (for tilesheets folder)

Dedicated editor for:

  • Entity animations
  • Entity collisions
  • Tile collisions

Move existing unit tests to their dedicated project

Currently there is one single project dedicated to unit test, because an engine implementation was required to make it work.

Since there is more than one engine implementation (AWT, SWT & Android), the best would be to reintegrate the tests inside each of these modules.

As a first step, just move the existing tests to their module owner.

Merge MapTilePlatform with MapTileGame

In order to give access to advanced tile collision to any type of map, merge the MapTilePlatform with MapTileGame.
It should be fully compatible, as there is nothing specific in Platform side.

Review sequence architecture in order to solve the render thread problem

Currently, there is one thread per sequence, plus the loader.
With some libraries such as SWT it will be a problem.
The idea is to change the way on how it is working in order to keep one single thread for the rendering.

It will also be the opportunity to update the input factory (mouse, keyboard...) in order to make it compatible with any system (PC, Android...).

Audio system can also be reviewed in order to allow platform specific (such as midi).

Review general lionengine-core code

Due to the many recent updates and improvement, review all the code, and check, according to the test, if it is possible to improve something.

Update also if necessary the javadoc.

Allow to define tile collision even for non consecutive tiles

Currently the only way to define tile collision is to group them sequentially by collision.
The goal is to remove this constraint by enabling individual assignment or by range.

Example:

  • Before
<?xml version="1.0" encoding="UTF-8"?>
<collisions>
    <collision name="GROUND" pattern="0" start="1" end="1"/>
    <collision name="BLOCK" pattern="0" start="2" end="2"/>
    <collision name="TUBE" pattern="0" start="3" end="4"/>
    <collision name="WALL" pattern="0" start="5" end="6"/>
</collisions>
  • After
<collisions>
    <collision name="GROUND">
        <tile pattern="0" number="1"/>
    </collision>

    <collision name="BLOCK">
        <tile pattern="0" number="2"/>
    </collision>

    <collision name="TUBE">
        <tile pattern="0" number="3"/>
        <tile pattern="0" number="4"/>
    </collision>

    <collision name="WALL">
        <tiles pattern="0" start="5" end="6"/>
    </collision>
</collisions>
  • <tile pattern="0" number="1"/> allows to define a single tile collision
  • <tiles pattern="0" start="5" end="6"/> allows to define a multiple tile collision by range

Allow to control objects on the loaded level

Once the level can be previewed inside the world view, objects can be placed, by selecting them from the resources selection (the XML represents the object).

It should also be possible to remove placed objects, and move them by using the mouse.

About the objects organization, it should be possible to sort them in any way (race, category, theme...).

Documentation

Finalize documentation in many format:

  • Presentation (PDF)
  • Javadoc (HTML)
  • UML Diagram (PNG)

Integrate external doc to javadoc (class level)

Instead of using an external doc system (such as a wiki which is complex to maintain), it would be better to include all that doc into the javadoc itself (class level documentation).
This way it will be easy to generate and navigate trough the javadoc.

Change licence to LGPL for the core part, keep GPL for extra

Use LGPL licence for the standard LionEngine library:

  • lionengine-core
  • lionengine-core-awt
  • lionengine-core-swt
  • lionengine-core-android
  • lionengine-audio-wav
  • lionengine-audio-midi
  • lionengine-audio-sc68
  • lionengine-network
  • lionengine-game
  • lionengine-game-platform
  • lionengine-game-pathfinding
  • lionengine-game-strategy
  • lionengine-examples
  • lionengine-tutorials

Keep GPL for tools and applications:

  • lionengine-editor

Complete lionengine-examples

Add enough examples to make the engine easily understandable.

  • Full lionengine-game module
  • Full lionengine-game-platform module
  • Full lionengine-game-rts module
  • Full lionengine-game-network module

Examples should be simple, by just showing what is necessary.

lionengine-editor : in pom.xml maven error

I encountered a problem, do not know how to do?
lionengine-editor project: in pom.xml node error info:
"Plugin execution not covered by lifecycle configuration: org.eclipse.tycho:tycho-compiler-plugin:0.20.0:compile (execution: default-compile, phase: compile)"

Tutorials

Add a least one progressive tutorial, showing how to make a game prototype.

Create a new module for that: lionengine-tutorials

Warcraft Demo

Prepare and update the Warcraft Demo by using as much as possible the Rts module.
Pathfinding need also to be improved (group movement).

Tyrian Demo

Prepare a Tyrian Demo and complete the shmup examples.

Projectiles usage should be demonstrated.

Create a dedicated geometry package

Instead of mixing geometry component with the code, try to put them in a separated package in order to narrow the core functional field.

Known classes:

  • UtilityMath
  • LineImpl
  • PolygonImpl
  • RectangleImpl

plus their interfaces

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.