(March 2021) Monthly WIP Screenshot Thread

HI how do you do , let me start the thread this time :smile:

The SuperiorExtendedEngine is a main GUI plugin for JmonkeyEngine games , the aim is utilizing android views , android services(vibrators,hardware,sensors,GL) for the benefit of jme games on android , & avoiding the pain of using JmeAndroidHarness activity & fragment .

the main idea of #{@link JmeSurfaceView} class is to start a jMonkeyEngine application in a SystemListener#{@link SystemListener} context in a GL thread ,

  • then the GLSurfaceView holding the GL thread joins the UI thread with a delay of user’s choice using a #{@link Handler} , during the delay , the game runs normally in the GL thread(but without coming up on the UI)
  • and the user has the ability to handle a couple of actions asynchronously as displaying a progress bar #{@link SplashScreen} or
  • an image or even play a preface game music of choice #{@link com.scrappers.superiorExtendedEngine.gamePad.ControlButtonsView.GamePadSoundEffects}.

This is how the general design(UI & GL threads) are interconnected in a single XML layout :

image

the component tree(notice the jmeSurfaceView holding jmeRenderer):

image

preview Video(Gullwing , tachometer , Speedometer , jmeGamepad) :

the library is now fully stable , but not yet updated for the DrivingWheel & Gullwing (NB , the repo was called previously by JmeGamepad but i have extended its features to be a more reliable source):

My wishList is to use jetpack optimized android FramePacing library with jmonkey testcase :

11 Likes

not doing android games, but looks like helpfull :wink: gj

3 Likes

Thanks , i am trying to make it easier to port desktop jme games easily on android , with additional android benefits if needed.

1 Like

well done! But this seems to be the UI thread of Android. I am worried that some errors will occur when the jme3 rendering thread is not synchronized with the Android UI thread. :face_with_monocle:

1 Like

That’s true ,

Jme3 Renderer thread runs on GLES thread which can be manipulated on UI (on a GLSurfaceView)even without app.eneuque(Runnable);
for jme scene graph
or
appCompatActivity.runOnUIThread(Runnable);
,but only after the GlSurfaceView is added to the UI thread(GL thread joins UI thread) , everything runs normally , but I do enueque to be thread safe , & when jme game freezes or has an exception the app donot crash , just the game freezes & the UI is responding , I have used a similar concept of Android FramePacing , which is rendering frame1 ASync , hibernating the game then rendering frame2 Aysnc during the show of frame1 then the show of frame2 & so on .

1 Like

:+1:

1 Like

Hi, I made a video about the PapaSpace flight simulator. Hope you like it!

20 Likes

just wow, looks amazing :slight_smile:

Now you could add some more PBR into cockpit/models so it would be just perfect.

i really like all the tools in the cockpit, this is great work.

SKY / FAR terrain also looks like perfect, only close distance terrain might need some tweak (maybe could hide it with some Filter/shader)

Plane itself looks much realistic :+1:

1 Like

Yep, you’re basically right. The cockpit is PBR already but needs some more details and textures. The walls for example only have a color property.

I am working on implementing 3D buildings, roads and stuff from OpenStreetMap, but this takes time.

5 Likes

Looks so good that my eyes start to pick apart little things like they do for triple-A games (which isn’t really fair but that’s how good it looks).

Just great.

Edit: are the cockpit instruments added dynamically or are they part of the cockpit model?

1 Like

If the day only had more hours, I may be able to reach triple-A quality :wink:

I would describe the instruments as modular, if that makes sense. Of course, they are part of the cockpit because each aircraft behaves differently and so do the instruments. But they can also run stand-alone and receive data over the network. So you could install them in a real flight simulator as well with minimum effort.

If they were all one model, I was going to suggest some baked AO.

Indeed. It already looks really nice.

My eyes like to spot things in triple A games because it makes me feel better. (Ahah! Even they got that wrong!) So when my brain started to notice jaggies, unconnected shadows, etc. in yours because everything else was so beautiful… it’s a good sign.

Edit: and to be clear, there were plenty of things that made me go “oooh… nice.”

1 Like

Ok, now I got your point. Some baked AO would be nice indeed.

Edit: I truly appreciate your feedback @pspeed , thank you very much :blush:

1 Like

Small things. Last week I wanted to start working on path finding. It was not originally on my short term roadmap because the minimum AI (dogs chasing chickens) didn’t really require it… but I’m easily sidetracked when a potential solution occurs to me.

So first I added a barn to the world data so that the doggo would have some places to potentially have to pathfind around. I will probably add some more fences later, too:

This week, off and on, I’ve been working on a simple octree implementation that I can use to cache (and maybe store) passability information. Today I added a visualization of the tree to make sure the splits are working correctly: (green boxes are passable, red are not)

It knows about different size blocks (half blocks, quarter blocks, etc.) but doesn’t yet incorporate the static models like the fence and the doghouse. That’s tomorrow’s work…then we should see nice red boxes around the fences and stuff.

It’s funny, because in over 25 years of dorking around with 3D graphics, this is the first appropriate use-case for an octree that I’ve found. (Of course, it’s rooted in a higher level sparse grid so hell has not frozen over or anything.)

9 Likes

An old test , RocksPlotter using only gravity & a couple of maths functions applied on (x,y) or (x,z) according to your desire of projection :slight_smile:

Quadratic Function :

Reciprocal Function :

Star Function using Linear Directionality :

Absolute Function :

There are more that i have applied during my self calculus revision like Radical , Moduluo , Absolute , Cubic ,RandomFunction , i think its inspiring for students who will try to learn maths for programming tho.

the idea is fairly simple through array of points on x & the function f(x)=y or f(x)=z according to your shape then iterate over the collection of points using a Control.

6 Likes

Let’s recreate the mechanics of zombie army 4!

New additions:

  • Random chance of critical hits that can dismember body parts.
  • Added the 3d model of the weapon.
  • Explosion of the head when special kill is active.
  • The marker follows the body animation.
  • Added the ability to specify a BitMask to ignore the enemy capsule during physical hit raycast.
  • The limb amputation is inspired by the excellent library Minie (An introduction to DynamicAnimControl :: The Minie project) written by @sgold whom I thank for the great help he always gives me.

It would need to add some AI and a fun particle effect for dismemberment :grin:

Unfortunately my daily work is taking a lot of time, but I will write a topic as soon as possible to share and improve with you the ideas contained in the video…

For an interesting discussion on the use of the DynamicAnimControl, this link may be useful:

Have a great weekend everybody :wink:

13 Likes

Finally, my first full collision code. Now I should be able to support collision libraries.

I’m not using any libraries in the image. I wrote all the collision code.

7 Likes

Simple UI-States Stack using UiStateManager , which utilizes android views for a jme Game , it’s similar to nifty-GUI , but in a modern fashion.

    UiStateManager uiStateManager = new UiStateManager(jmESurfaceView);
            uiStateManager.attachUiState(uiStateManager.fromXML(R.layout.main_menu)).setId('a');
            uiStateManager.attachUiState(uiStateManager.fromXML(R.layout.main_menu)).setId('b');
            uiStateManager.attachUiState(uiStateManager.fromXML(R.layout.main_menu)).setId('c');

            uiStateManager.forEachUiState((UiStatesLooper.Modifiable.Looper) (currentView, position) -> currentView.findViewById(R.id.start).setOnClickListener(v -> {
                (findViewById(R.id.gameStickView)).setVisibility(View.VISIBLE);
                (findViewById(R.id.speedometer)).setVisibility(View.VISIBLE);
                (findViewById(R.id.gamePadbtns)).setVisibility(View.VISIBLE);
                findViewById(R.id.steeringWheel).setVisibility(View.VISIBLE);
               uiStateManager.getChildUiStateByIndex(position).animate().scaleY(0).scaleX(0).setDuration(1500).withEndAction(()->uiStateManager.detachUiState(currentView));
            }));

I am trying to find the easiest approach for the famous question :sweat_smile: “How to make game menus for my game?” , but the problem that this approach is a platform specific.

7 Likes

Some time ago I wanted to create an MMORPG game, but some of you explained that is very difficult for one person, so thanks for explaining me this on early-stage :slight_smile:

I’m working on a tower defense game, it is much more suitable for now.
A lot of things need to be done to finish this game, but some basic things are already implemented:

  • Hp system of enemies
  • Enemies movements
  • Weapons creation
  • Weapons attacks (for now only to first enemy and then stops)
  • Level design for one of the levels in future game
  • Basic inventory system
12 Likes

Testing feet to ground placement for a controllable character with my custom little animation system:

14 Likes