Mighty Library v.1

Project 10

Caracteristics

Description

Updates will be written to describe the advancement of the project :

--2019 Update--

Following the creation of the Coop Dungeon Adventure game demo, I wanted to improve the semblance of 3D testing I'd done in Java using the LWJGL and OpenGl libraries. I implemented the new features I'd coded to make CDA. I merged the functionalities of the two projects into a much more advanced Java project that could display 2D and basic 3D. I continued to work on the library to get more functionality with 3D. All my references come from the learnopengl .

In particular, I was able to load 3D models by retrieving information about the model's vertices from a file. In other words, their position in space, the position of the texture or associated color and the normal vector. I also added a "shader" management system, a class representing a shape and a render target system used to display the image produced on the screen at all resolutions. I also tested a shader using a "displacement map" to create a "water" effect on the boxes. To further test the library, I added 3D camera displacement and mouse tracking. I stopped along the way to implement the text display by copying the CDA centering system; I was short of time due to the transport time to go to my school.

Another reason prompted me to stop, a more technical one. I realized when I met someone Antoine Guilbaud at IUT (and I noticed it while programming) that creating a game library in Java isn't the best choice. The language isn't very well suited to this particular purpose. Although some games have been created using the language, Java suffers from a lack of features such as pointers, function pointers and much more. This makes Java less practical, less optimized and slower than others (( 2023 Note : over time, I've noticed that understanding how your library works down to the smallest detail means you can quickly get down to work on your projects).

That's why, for my next projects, I'll be working with IronPowerTGA. With whom I'll be teaming up for game projects. It's not impossible that I'll be working on this library again one day.

--2021 Update--

At the end my studies at the 2-year technicol school in IT, during the summer hollidays, I dug up my old project to update some of its aspect. I previously had ideas on a system that was supposed to load and manage resources used on a project. In a first place, I wanted to separate the library folder that would containes my whole java library and the project folder for developeur ( 2022 Note : I take some times to me to make the both folders independent).

In the library folder, there are all the classes of shapes, textures, scènes and resrouces. The project folder should contains scenes used by any project. To support this point, general-purpose systems of my library must accept additions from a developer. To give a more concrete example, let's talk about the resource system. Each type of file should be loaded by a specific loader. Using an interface, the developer can create its own loaders and add it to the system before the lauch of the screen during the process of application start. The commonly used loader like textures or shaders loader are already present in the system.

To speed up some processes, I created my own type of animation file. A animation file contains a liste of frame, their position in the texture and the related hot point. Each animation is centered on the hot point which is useful when animation use frames with different size. Linked to the type of data, I naturally, I made the related loader and an animation renderer. In top of that, I created an inclusive system, an animator which lets the user choose the current animation.

Next, I made the same collision system I coded in the cpp project, BecomeAnAdvanturer. This is a system of collision detection that includes simple element like rectangles, bounding boxes... ( 2022 Note , not really relevant to Box2D implementation). One advantage of the system I made, is the optimization of the collision grid. It arranges the collision box of the world and made optimized collision tests, as only the nearest, collision are tested.

In a diffenrent register. I unite both physicals entries manager, so the keyboard manager and mouse manager. To do that, I created an action manager. To register actions to the manager, the developer should create a list of identifier. "down menu", "move right" or "escape" are possible actions. Next, the developer needs to associate each identifier with a logical class, built like a tree, which can be used to specify the physical keys and the logical relationships between these inputs. For example, key 1 or key 2 must be pressed for the action to be considered active. It is therefore in the same phase of adding modifications to the engine that the developer sends this information to the action manager.

--2022 Update--

Between my end of first year and beginning of my second year at the ENSEIRB-MATMECA engeneering school, I added many new functionalities to my library. These updates are linked to my little try to recreate CDA in java and the project Dualz of this year. For the 2D part of my library I did usage tests on the Box2D library. We can see an example down below.

To continu, I created a Tileset and Tilemap object. Shortly, a Tileset is an atlas, an aggregate of textures. This is an object which groups all tiles used in a Tilemap, which supplies information on the tiles Theses information can be collision zone, or animations. A Tilemap is an object composed of several layers, which are usually display one in front of the others. Each layer is in a way a grid containing all used tiles Those objects are commun concepts in the video game world. I coded a custom loader and that loader reads files from the tiled software .

Then, I created a Json file loader. Json are type of file very commonly used and very useful. To create Dualz, I used one of the library contained in the LWJGL package, OpenAl. This library supports spacialized audio source. I coded all the classes that are necessary to use the library. Audio file, audio manager , audio source, etc. After that, I implemented a very interesting concept that used the Json loader, a gain tree. The tree is a concept which leads to the modification of the volume of many and many audio source at the same times. Each source is labeled to a node in the tree, a leaf node or a node inside the tree.

For the 3D part of my library, I did make normal light computation working, in order to finaly use the previously useless normal information of the vertex in my different shapes. I did it for a cube to begin with, then I did it with a sphere. I constructed the sphere with using an algorithm I found by searching specialized web sites.

--October 2023 Update--

Currently working on it ...

Partie 3D -> cube 3d, framebuffer, normal map, Partie op -> client /server tcp -> poisson scene threadé, csv, partie 2D -> sliders -> parme, fix menu de boutons

Visuals (Click on one pick to enlarge it)

2023 - 3D scene for tests. 2023 - Main menu to access tests. 2023 - Use of a framebuffer as a texture. 2023 - Test of Box2D library. 2022 - Tileset, Tilemap, text and animated sprite. 2021 - Test of collision boxes. 2019 - Display of cubes with a water effect. 2019 - Display of 3D katana.

Hey test test