(March 2016) Monthly WIP screenshot thread

So, I think that it should be changed. Sometimes it is a waste of time for CPU to enter a complex node without any controller. Or developer would have an opportunity to disable whole node without touching the controllers enabled/disabled state, to keep them unchanged.

Ofc everyone can extend a Node with their own code, but I think that it would be a good idea to put it into engine:

@Override
public void updateLogicalState(float tpf)
{
    if (!_doUpdate) return;

    super.updateLogicalState(tpf);
}

Sunrise in this little Pacific atoll…

.jpg with lossy compression:

.png with lossless compression:

video:

(for the full quality of .png and video you must select “Download”)
(the online viewer of Google Drive reduces the quality a lot)

The game will be out soon and I will contribute it to the jME community.

6 Likes

SkyHussars R3
New month, new little release:

Cockpit and outer views.
Cockpit camera can rotated.
Enemy planes.
Flame effect when enemy shot down.
Positional audio update(but still not good)

The code is in quite sorry state right now, so probably strong refactoring and cleanup for next month.

6 Likes

I killed an hour…LOL

5 Likes

Cool, but is there a specific reason you chose 3D physics over 2D? I’m sure there is at least one 2D physics engine that has been integrated into Jme and it should also give you better performance.

1 Like

Nope no real reason just playing around as you can tell performance was not my goal… I don’t think I had a goal…LOL other than coding for fun!

2 Likes

6 Likes

Avarra GUI, still in progress. I lost some time trying to integrate an emulator (based on java boy for example) but there is nothing with a license compatible with jme so i just gave up.

For the record, the artist of the picture used is BoChengChou, licensed CCBY, found on the site (closed since then) en.free-photos.gatag.net, modified by me to add the black&white&red thing.

The hud gui is made with an xml file

<?xml version="1.0" encoding="UTF-8"?>


<area>
  <script>
    var name;
    name = 'Toto';
  </script>
  <tabs>
    <tab title="buttons">
      <script>
        var x;
        x = 'Salut '+name;
        
        var i = 0;
        function number()
        {
          return i++;
        }
        
        function hide(elt)
        {
          tools.topLevelAncestor(elt).style().visible = false;
          tools.setCursorVisible(false);
        }
      </script>
      <button id="button1" text="Hello" x="0" y="10" 
              onClick="if ( self.text() == 'Hello' ) self.setText(x+' '+number()); else self.setText('Hello');" />
      <button id="button2" text="World" x="200" y="30" 
              onClick="hide(self)" />
    </tab>
    <tab title="table">
      <table>
        <th>
          <td>Nom</td> 
          <td>Age</td> 
          <td>Sexe</td>
        </th>

        <tr>
          <td>David KELLER</td> 
          <td>28</td> 
          <td>Masculin</td>
        </tr>

        <tr>
          <td>Méline AVDALIAN</td> 
          <td>?</td> 
          <td>Féminin</td>
        </tr>
      </table>
    </tab>
    <tab title="text">
      Coucou
      Comment ça va ?
    </tab>
  </tabs>
</area>

The script is dumb, i know, but it’s only to show the feature.
I wanted to have an xml file easy to read and keep the possibility to extend it. You can register factories that will say “ok, i take this tag, here is the gui element that goes with it” and add new tag that way.
The script part is done with the rhino engine embeded in java.
The Main looks like this :

package avarra;

import com.jme3.app.SimpleApplication;
import com.jme3.asset.AssetKey;
import com.jme3.material.Material;
import com.jme3.math.ColorRGBA;
import com.jme3.math.Vector3f;
import com.jme3.scene.Geometry;
import com.jme3.scene.shape.Box;
import java.io.IOException;
import java.io.InputStream;
import avarra.gui.AGUI;
import avarra.gui.GuiElement;
import avarra.gui.os.OS;
import avarra.gui.os.OSApplication;
import avarra.gui.widgets.games.Demineur;
import avarra.gui.widgets.games.Tetrix;
import avarra.inputs.DeviceManager;
import avarra.inputs.MouseDevice;
import avarra.inputs.VirtualDevice;
import avarra.scripts.ScriptAppState;
import com.jme3.input.MouseInput;
import ximl.Parser;

/**
 * 
 *
 * @author Bubuche
 */
public class Main extends SimpleApplication
{
  public static void main(String[] args)
  {
    Main app = new Main();
    app.setDisplayStatView(false);
    app.setDisplayFps(false);
    app.start();
  }
  
  @Override
  public void simpleInitApp()
  {
    AGUI.initialize(this);
    cam.setLocation(new Vector3f(0, 0, 4));
    stateManager.getState(ScriptAppState.class).tools().setCursorVisible(true);
    //stateManager.attach(new VideoRecorderAppState(new File("video.avi")));
    
    initMapping();
    initTestAGUI();
    
    Box b = new Box(1, 1, 1);
    Geometry geom = new Geometry("Box", b);
    
    
    Material mat = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
    mat.setColor("Color", ColorRGBA.White);
    mat.setTexture("ColorMap", assetManager.loadTexture("Textures/screen3.png"));
    geom.setMaterial(mat);
    
    OS os = new OS();    
    os.desktop().addApplication(new OSApplication(
            "Démineur", 
            new Demineur(16, 16, 32, 0),
            assetManager.loadTexture("Textures/demineur_icon.png")));
    os.desktop().addApplication(new OSApplication(
            "Tetrix", 
            new Tetrix(9, 10, 16),
            assetManager.loadTexture("Textures/blockscrush.png")));

    geom.addControl(os);
    rootNode.attachChild(geom);
  }
  
  private void initMapping()
  {
    DeviceManager devicesManager = AGUI.instance.deviceManager();
    VirtualDevice vd = devicesManager.virtual();
    MouseDevice md = devicesManager.mouse();
    
    vd.addMapping(md, MouseInput.BUTTON_LEFT, avarra.inputs.Action.Activate);
    vd.addMapping(md, MouseInput.BUTTON_RIGHT, avarra.inputs.Action.AlternateActivate);
    
  }
  
  private void initTestAGUI()
  {
    AGUI.instance.deviceManager().mouse().press(MouseDevice.VISIBLE);
    
    try (InputStream input = assetManager.locateAsset(new AssetKey<>("GUI/test.xml")).openStream())
    {
      GuiElement elt = AGUI.instance.xmlBuilder().attemptCreateElement(Parser.getTree(input));
      AGUI.instance.hud().addElement(elt);
      AGUI.centerInContainer(elt);
    }
    catch(IOException ex) {}
    
  }
  
}

Next is: improve the viewport/scrollarea (with the 1 million dollar question: is it possible to use a subpart of a texture as framebuffer of a viewport), add a layout system, finish the lineedit with mouse handling …

An a lot of other cool stuff which i need to bang my head on to find THE good way to handle them.

10 Likes

I need to get it clear with your project it is about creating 3d desktop or am i getting it wrong

You are a bit wrong. I am creating a GUI library, like tonegod, lemur, nifty. The idea is to implement a Graphics with the same interface (and a bit more) than the Graphics in swing.
Added to this, i had several ideas in the future and i try to put them in that, like the device system.

I also want to be able to use this library both for the hud and for ingame computers. You can do that with tonegod and, i think, lemur, but you can’t with nifty (you can’t do both hud and ingame gui, not without errors and exceptions). I need this feature cause the story of my game take place in a cyberpunk world, with an empire spreading on several planets, leading to translations problems and to the “solution”: XI (then XII) the almighty A.I. that translate everything from everything but also design buildings, weapons, newspaper, DNA (creating hetero sapiens to live on uninhabitable planets, basically slaves not considered as human and extracting minerals for food), society …
So ingame screen will be mandatory and i plan to have a lot of interaction with them.

But it’s not the point of my library, which is only about gui.

7 Likes

I’ll write a decent topic/post about it tomorrow :slight_smile:

7 Likes

Amazing… :grinning:

1 Like

Yes, very very nice. I think I know someone who can’t code but will be eager to make some cinematics between my game’s levels. :chimpanzee_smile:

It’s additions like these that turn a good engine into a great engine. In this case it’s for letting users who can’t code support a project with work hours and artistic skill.

1 Like

Don’t have much of anything to show this month, but I am working on a really big game. So big in fact that I’m getting help from other people in my school. It’s going to have a wonderful story coupled with visually stunning graphics (hopefully, but not first priority). And I’ve noticed that games like this are becoming increasingly rare, and are being replaced by “simulators”. I mean come on, grass simulator??? Are you kidding me? Anyway, back on track. My game is a mix of genres, the main one being horror. It’s called “100 Souls”, and this is the summary:

100 Souls is a first person horror game that takes place in Japan. There are two major characters, the main character Mio, and her older brother Sasahara. Sasahara is in critical condition at the hospital after a fatal car accident, with low chance of survival. Mio isn’t ready to lose her brother, so she makes a deal with a spirit that is if Mio frees 100 souls from the forest of Aokigahara (which is a real forest), then the spirit will save Sasahara. But Mio will soon come to realize that her journey will be more difficult than she thought, and her sanity will be pushed to the limits.

I’m going to have an interesting blend of psychopathic horror and humor, my favorite idea being a troll jumpscare.

But right now I have only bits and pieces of the story, some sounds, and a flat grass world. And the best part: My 8 year old Radeon HD 4800 is capable of rendering a 4K grass texture on that world. Flippin 4K!!! I’m impressed, computer. Good job.

1 Like

Do not rate the textures, just look at the whole idea of our next style. The target is to have at least 4 different styles. This one we call ‘The temple’.

15 Likes

The console/shell/terminal widget. Not finished yet.

Most commands are hard coded and only here for fun. However two comes from the xml file.
The terminal is created like that:

  <terminal lines="25" columns="64">
    <command name="iamascript" script="println('Hello \033[32m'+name+'\033[0m')" />
    <command 
      name="enterTheMatrix" 
      script="loadLevel()" 
      description="Take the &#27;[31mred&#27;[0m pill"/>
    XII terminal v0.01
  </terminal>

Everything is working fine, but i still need to implement the left/right arrow comportment.
This terminal has a history and an autocompletion (and if you press tab several time you iterate over possible autocompletion, i.e. the first completion doesn’t add itself to the current input until you do something else than tab). You can see this comportement at the end of the video when i iterate over smile/say/style with the input “s”.
This widget is especially optimized, i.e. only the strict minimum is repainted (and i got problems when i tried to render a texture on a framebuffer that was actually this texture. I fixed that. I happened when i was implementing the comportment “move everything up” when a new line is needed at the bottom of the terminal). For this reason i don’t support blinking and i don’t support scrolling. I’ll maybe add them later but it’s not on my todo list (it will depend if people need them or not).

The terminal extends richconsole which extends console.
console provide the canvas and let you draw things with colors etc but doesn’t handle codes like \033[31m etc
richconsole add code support but doesn’t handle keyboard.
terminal handle the keyboard and handle codes from there (arrow, tabulation etc). It means that if a command display the code for an arrow it will not be taken into account by the terminal. It also adds the command thing, the history etc, all of this in separate classes.
I’ll likely move the command execution handling in the richconsole and let the command-start-from-keyboard in the terminal.

project for this widget: add a set of command inspired from linux but working on the scenegraph, with / for the rootNode and ls, rm, mv, cd etc. More generally implement a console like in TES games.

P.S.: i don’t know if i can post this, as i already show a WIP this month for this project.

8 Likes

Looks great, nice work! By the by, pretty sure you can post as many updates as you want in this thread. I mean people tend to get a bit peeved when someone posts, you know, ten times in a row or so, but that’s not really a rule so much as it is just how people tend to react towards certain things.

1 Like

Hellow! Been while since a posted anything. I want to soon make an uptades, but here is one picture for the moment!

10 Likes

Cool! :thumbsup:
What is this supposed to be? A forcefield in front of some cars on the bridge?

More like a abandon quarantine area :smiley: When I have some time I also want to break the bridge model a little bit so it felt even more desolated.