Oh sorry the message is not clear, I made some test and it seems it’s not efficient.
In fact we suppose the CPU can’t made some running optimization due to pointer of function. So conditionnals seem better in this case 😉
Hello, come for some update as we will use NodeCanvas in a new Big project.
Did you come to include this for futur version ?
Hello,
Made test and it’s not efficient ?
Hello,
Yeah maybe I confused with the parallel action task. One of the standard class had a boolean array to check if the action ended and so not calling it.
In all cases I think these node can benefit of a huge performance speed up with a replacement at runtime by their optimized version.
It s small optimization but these nodes are repeated several times in a game. (I insist maybe too much on it :D)
Unfortunately not intensively.
But theorically it s better. I just try to lower CPU but yep, no time to run a real test :/
Hello sorry it is not clear and can’t remember very well (I’m rushing for delivering the next version of the game).
But in case of success of the true branch, if I remember well, the false branch is also executed. Something like that.
Which is not the behaviour of the selector + conditional composition.
Hi.
No problem with this change so far.
Oh yeah the screen shot bugged. This is my solution on screenshot.
In fact if for some reason you call EndAction(true) -> EndAction(null) during the same “frame” the behaviour will not be the same as EndAction(null) -> EndAction(true). In the first case, the latch will be called after, and in my situation the action will be skipped (because of the latch) for the next time I call it.
In my case I was executing action in parallel on a subFSM and stopping them outside of NodeCanvas (in a callback), and the behaviour was all wrong with entering/exiting the subFSM.
Yeah will be perfect manually, So everyone can understand the purpose of this.
Automatic is indeed impossible and can lead to infinity of combination / embedded “map” you don’t use anymore.
However we have to detect the “type of graph”, because subGraph only use intantiate graph. And the setting part will use “asset graph”.
Cool =)
Yes I can 🙂
Simply put a Selector as Dynamic (figure 1) with a subtree and a runForever.
In the subTree, place A dynamic selector which run only if conditionnal met (figure2).
If you change the condition to be true, you will see you will not run the subtree. which is totally counter intuitive.
You can workaround this by placing Reset or the same conditionnal on Top of the subTree Node.
The first work around doesn’t work as intended as Reset also Reset action / condition, and sometime you don’t want.
Second work around break genericity / composition, as sometime SubTree doesn’t have same conditionnal requirement.
Hey !
Ok cool =)
Will wait for the next time I update the project. It s not a problem for the moment. Will wait to pass the content release. Tahnk you 🙂
Haha it s just that I pool my graph and used graph.Clone which lead to OnAfterDeserialization and deserializing all the json again. Now I fixed it by creating a new Graph and giving it the right parameter from the original graph…
Long story short, it s just that cloning a graph seems to lead to another deserialization from json which I think we can cut by copying the instance of the original graph. I don t want to cut scriptable object for graph, but copy of original graph doesn t really need to be scriptable object, it s what I’m saying.
And yes I know for async, I use it a alot for pooling AI during loading screen 🙂
Oh I didn t know only struct were needed. And yes I used Template<T> where T is Enum … so not a class haha. And this one do not generated AOT which lead in non architectured code if you delete the constraint.
I don t know the impact of useless classes in binaries. And We don t have trouble with it. But the less is the better. And I really enjoy your tool (which makes one of th best Apple Arcade Games >,>) that s why I want it to evolve =)
I mean exactly what you said.
Write default value in every case when the graph start if there is no WriteIn selected.
But an option is good too. Just be sure it s clear.
And yeah constinuous readout will empower subgraph by a lot. Was frustrated too to see I can t check with condition my local subgraph variable. If now possible it will be so cooool.
Actually graph pooling is very difficult with sub graph.
I really want to have factory override for Graph. In my case I totally hacked NodeCanvas for subGraph pooling. NestedGraphNode just Load Graph by instancing it which is very not expected if I set graph to be async loaded.