Jump to content
alkanet

Eden Editor: FlowGraph, Inspector and Tools

Recommended Posts

I been trying to give the eden editor better tools so more people can create better content. I like to know what you  think so far and what features you think can be useful.

 

FlowGraph
You create nodes which you connect together. A node is basically a function which can call on other functions when it´s done executing itself.
This gives you a interface to "script" your own mission. Much easier than learning the script language and faster.
When you save it will be stored in the mission file.
nqEcnSL.gif

A start event will always be called on mission start. In this example it has been connected to the position node. The position node has been connected to the log node. They will call on eachother in that order.

 

Hover over a connect button to see which are connected to it. Click on it to edit a connection. You can move around by dragging, scroll to zoom in and out. Drag the top of a node to move it around.

p93LQ8c.gif

 

Inspector & Tools

The inspector(see blue)has replaced the assets position and been moved to the left(see red)

This will include tools that are relevant to and eden object, position, rotation e.t.c..
All selections can be collapsable

 

Inspector

yI8BGdy.png

 

Tools

Some examples: Hide GUI, Rotate marked object by scrolling, show building position. Show objects layer name, measure distance from selected object to mouse position in world.
The design will be changed.
All selections can be collapsable. Click on "Enviroment" and  "Time" and "togglegrass" will be hidden.

3CYO0Gk.png

 

And yes i lost my windows 10 activation when i bought a new computer and refuse to pay for new one. 🙂

  • Like 7
  • Thanks 3

Share this post


Link to post
Share on other sites

I love this idea but I bet it's a lot of work. This reminds me of the old Crytek Sandbox editor with flowgraph nodes. It was very easy to use IMO.

 

Good luck with it.

  • Like 2

Share this post


Link to post
Share on other sites
5 minutes ago, major-stiffy said:

I love this idea but I bet it's a lot of work. This reminds me of the old Crytek Sandbox editor with flowgraph nodes. It was very easy to use IMO.


Yeah, my first thought was Unreal Engine's Blueprint Visual Scripting system. This is very cool!

  • Like 2

Share this post


Link to post
Share on other sites

impressive work
though ... i would recommend not trying to create SQF from within SQF as that is PITA

some external tool (or at least a format, some external tool may use) could do wonders here

  • Like 1

Share this post


Link to post
Share on other sites
5 hours ago, x39 said:

impressive work
though ... i would recommend not trying to create SQF from within SQF as that is PITA

some external tool (or at least a format, some external tool may use) could do wonders here

Ye, i havn figure it out yet what to do. Right now it is stored in an array like this: [_metaData,_allNodes]
_metaData contains an array with the name you choose to save it with, and the position it will have in the flowgraph. Only stuff that will be used by the flowgraph.
_allNodes is where it becomes complicated, an array with all the nodes where every item contains the config path to the node where all information can be gathered. Like the function to call, input (arguments) and outputs (what it will send to another node). All input and outputs connections and values you add with the flowgraph will also be stored in here but in different arrays.
Like this: [_configPath,[_input,_output]]
The input and output is in same format: [  [_configPathConnectTo,_configPathConnectToInput]... ]

So with this format,  every node needs a config entry. So there will be alot of them.

Share this post


Link to post
Share on other sites

Quick Update:

  • All nodes with no input values will run before mission start (preInit)
  • A node is connected to a function that will receive the name of the node, object that it belongs to, all input and output values in the order they are specified in the config.
  • If a node1 is connected to node2 it will show up in the node1´s output values. It´s up to the node1´s function to call it when it´s done executing it´s own code.

Most stuff works. Next thing is to add nodes.

  • Like 1

Share this post


Link to post
Share on other sites

Quick Update:

  • Connection now have colors so you can see where they can be connected to.  Blue is for number, Orange is string, Purple is boolean e.t.c. In the example below The Debug node has a message connection, you can connect anything to it because it will just convert it to a string, green circle is a special for all types. The green arrow is for calling a node. Start node will call on add Action node and so on.
  • You can also give a output/input value multiple types, For example the Create Task node has a input called position. It can use Position3D and object.
  • Node´s output can be connected to an input.  When the add Action node has been called it will store value in it´s output, Object and ID. You can then connect it with remove action so they. Just remember that add action need to been called before remove action or it wont work. In the example below add action is called at mission start while remove action is called 10 seconds later.

Kx5QgeQ.png

Two examples.

 

  • Like 3

Share this post


Link to post
Share on other sites

Quick Update:

  • Added so you can mark multiple nodes and paste them.
  • Added nodes that can return values. In the example below Per second and Add node can return a value when needed. 
    When slide text is called it will first call per second and add node´s functions. Add node will return a value to persecond and per second will return the value to slide text. Then slide text will be called.
    In this example Slide text will be called 10 times with a half a second delay. Every second the Y position will update.
  • A node can only have a value or a connection. If a connection is made, the value will not be stored. For example in Slide text node, the Y value 0.5 will not exist because there is a connection to the per second node.
    To fix this a Number node is created. The number value is a fixed value and add node will just increase it by another value. So instead of 0.5 the Y position will start at 0.1 (0.05 + 0.05) and the per second value will increase that value with itself every second (0.1, 0.2, 0.3 ...).
    Wait for seconds node have no connection so the value 0.5 will be used.

B9jzstP.png

Share this post


Link to post
Share on other sites

Quick Update:

The most important stuff is now done and i will be testing it. If all is ok i will release it. Down below is a list of all features.

 

  • FlowGraph - a visual display where you can create missions with. Animation flow can also be made, for example start saluting, then stop after certain time.
  • Inspector - When ever you select an object or logic, you can use the inspector to quickly change variable name, position or rotation. More can be added on request.
  • Ingame debug console.

  • Alot of functions that i created during my years with arma.

  • Two new usertextures, 10 and 50m.

  • CfgFunctions_Extended - Same structure as regular cfgfunction but now you need to select the functions your addon, mission will use. This is ment to reduce amount of functions being loaded into memory. New naming of functions, Tag_Category_fnc_function. New options like onlyEden (will only load function when eden starts), debug (will show ingame console when function is called and how long time it took) and cfgFunction (use the standard naming of function). Will also detect if two addons are using the same tag and then only give access if the tag and current addon name is the same. Below is an example.
  • //Add to your addon or description.ext
    class CfgFunctions_Extended_Preload
    {
      //Load all functions in Eden.
      class Eden{};
      	
      //Only load Debug functions within AI. Animation functions will not be loaded into memory.
      class AI {
          class Debug{};
      };
    
    };
    
    class CfgFunctions_Extended
    {
    	class Eden
    	{
    		//Can only be called  in eden.
    		class Debug
    		{
    			onlyEden = 1;
    			file="eden\functions\Debug";
    			class add{}; //Eden_Debug_fnc_add
    			class init{postInit  = 1;}; //Eden_Debug_fnc_init
    			class writeTo{}; //Eden_Debug_fnc_writeTo
    		};
    	};
     	class AI
    	{
    		
    		class Debug
    		{
    			file="ai\functions\Debug";
    			class add{}; //AI_Debug_fnc_add
    		};
          
    		class Animation
    		{
    			cfgFunction  = 1; //Use standard naming.
    			file="ai\functions\Animation";
    			class set{}; //AI_fnc_set
    		};
    	};
    };

     

  • Like 1

Share this post


Link to post
Share on other sites

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now

×