(January 2024) Monthly WIP Screenshot Thread

First of, thanks and thanks for the original code.
Yes you are correct in all aspects mentioned.
When they are not static I just recalculate the projections.
However, I am only doing that when in view of the camera and a certain distance from the camera.

1 Like

thank you :+1:

A very interesting idea, like a small SDK.

Is it possible to export the models or scenes created with it to load them into other JME projects?

Me looking at the charts. :blush:

This week I am playing a bit with fire and specifically the implementation of spreading forest fire.
Here is a quick video showcasing that idea.

15 Likes

Hi people,
I have taken the time to implement SimpleMediaPlayer into my editor. As well as Opencv/Javacv library for converting .mp4 files into the required .mjpeg file format.
Here is a video demonstrating how simple it is to setup in my editor.
I have also added button press function to change the channels on the TV.

14 Likes

The next release of the Minie physics library will add custom collision shapes. This feature enables you to define new collision shapes using JVM logic. Here’s a screenshot of some custom shapes created while testing this feature:

CustomConvex

The screenshot includes hemispheres, half cylinders, and conical frusta. Although these shapes could be approximated using HullCollisionShape, they would either simulate inefficiently or else roll poorly, depending on the number of vertices used.

18 Likes

I would like to share what I am doing this month as I started to layout an architectural diagram for the ECS API that I have started back months ago. This is what I came out with after some design and even re-design modifications following your constructive feedbacks. I followed two books since then, Data-oriented design - Richard Fabian, and Software Engineering Design - Carlos E. Otero, and modeled the API as a simple data-centered architecture; where operational interactions are provided by system controllers, and components are only data-fields. I didn’t actually restrict these facts, in fact, I made every thing an interface (except Entities), even components, I provided data fetching mechanisms based on the Java Reflection API as follows:

@SuppressWarnings("unchecked")
public interface Component extends Validatable {
    default Field[] getData() {
        return getClass().getDeclaredFields();
    }  
    default <T> T getData(String fieldName) throws NoSuchFieldException, 
                                                   IllegalAccessException {
        return (T) getClass().getDeclaredField(fieldName).get(this);
    }
}

5 Likes

Despite my plans to start off the year strong by tackling a bunch of long-overdue jme related tasks, this month has unfortunately ended up being a very unproductive one for me

I’ve had a few minor health issues distracting me, the most disruptive being that I hit my head and was worried I had a light concussion early in the month because I was struggling to focus and had constant headaches.

I think I’m feeling back to normal now, but I did mess up trying to work on certain things, and I broke a bunch of levels for my game that will no longer load, and I now need to go back and figure out what I did to break everything :persevere:

So in the meantime, I decided to stop working on complicated stuff temporarily, and spent most of the month working on making a loading screen for my game, which is another long overdue task I had been procrastinating.

Here’s a short video that shows the animated components on the screen. At the bottom left/right there’s some 3d spinning logos I created with the DeepToken library (DeepTokens: a library to turn 2D images into jMonkey 3d-ish meshes)
And the loading bar is a custom shader I made (that can also be used for health bars), and it uses noise to add some extra depth to the purple-filling area:

And here’s 2 more screenshots showing a different Map’s image, as well as a “missing map” image that it will default to if no image is found for that map:

A friend who has been designing menu art for my game has also been unavailable for quite a long time due to health issues of his own, but I am hoping when he is back and feeling better that he will be able to help polish and clean up some aspects of this loading screen. But for now I am happy with this draft and it is an acceptable placeholder I think.

8 Likes

To me, it’s amazing how even a small health issue can affect productivity… let alone something as serious as a concussion.

Over the weekend, I had a piece of one of my molars break off (lower right tooth, all the way back) and while the tooth itself didn’t hurt (lucky), it was constantly slicing up my tongue until I could get in and get it fixed. Apparently, having to give a little bit of constant attention to how I swallow/eat/etc. was enough to completely ruin productivity for a whole weekend. The day I got a filling, after sleeping off the pain killers, I immediately had a dozen answers for things that felt impossible the day before.

I hope you continue to feel better.

4 Likes

Yeah, it is definitely an unsettling shock when something like that happens, and then you realize how easily you can get thrown off track on everything you’ve been working on.

Thank you, and same to you. :slightly_smiling_face:

1 Like

Some more progress on the mob AI:

  1. added mob avoidance when path following (through simple pushing)
  2. constructed a basic behavior tree (suited for most mobs -
    a) mobs pathfind randomly somewhere close every now and then
    b) try to reach their target in a straight line whenever in their cone of sight
    c) if you were seen but they lost the sight of their target (either through leaving the cone of sight or just hiding behind a wall), they pathfind to their targets last known location

i’ve also optimized it so it runs smoothly for 300 mobs on the main jme thread (though it has its dedicated thread and i dont expect to have more than 100 mobs per level in the most extreme of conditions) by having no new objects created at runtime unless absolutely neccesary.

However, im trying to achieve a more elegant solution for executing behaviors than extending Action class and passing it as a parameter to the BehaviorTree node.

This showcases my issue:

                                new LeafNode(new IsPathfindingNeededAction()),
                                new LeafNode(new PathfindAction())

The issue here is that making even the slightest change to the mob ai requires creating new classes, where the class signature often times has more lines of code than the actual behavior itself lol

Other than that, added placeholder classes for the players to pick in the lobby:


actually now that i read this post i think i can simply pass a lambda to the LeafNode constructor and have the lambda alter the values extracted from the Context (which is basically a blackboard for node communication about the AI state)

6 Likes

Hahah… I was going to ask some questions along the lines of leading to this suggestion.

You saved us a trip! :slight_smile:

2 Likes

So much goodness in one post. :star_struck:

1 Like