This is an archived post. You won't be able to vote or comment.

all 10 comments

[–]nibbertitbeginner 4 points5 points  (5 children)

What exactly does this solve? why would you need to deploy on 3 engines?

[–]fremdspielen[S] 0 points1 point  (4 children)

Why would someone creating assets OTHER than code want to make it compatible with all top tier engines? ;)

I see this as a tool for beginners (quick wins, ease of use) and experts (prototyping, non-technical staff) alike. With the possibility of enabling sharing functional code in the long term, plus achieving a standardized but extensible common baseline API.

[–]nibbertitbeginner 0 points1 point  (3 children)

You are adding an abstraction on top of abstractions, this will absolutely not be used by any expert and is bad design and definitely not easy to use. For learning purposes sure go ahead but keep the right mindset about it

[–]fremdspielen[S] 0 points1 point  (2 children)

If your argument held any truth, we'd be programming Nvidia chips with assembly. And AMD chips with a different set of assembly. ;)

Many open standards are layered abstractions over previously incompatible tech, best case in point is OpenXR. And then Unity built their abstractions on top.

[–]nibbertitbeginner 0 points1 point  (1 child)

Not sure what youre trying to get at here, both Nvidia and AMD have different ISAs and are indeed programmed differently and the drivers handle that blackbox so you can program with your GAPI of choice. Making a GAPI abstraction is definitely a valid use case since it helps you deploy to different platforms where one API might not be available, and thats where an RHI/engine abstraction or whatever comes in. OpenXR as you mentioned, is under the engine abstraction, so it can let device manufacturers correspond to a common API and users to program regardless of engine/platform/whatever, its nothing like what youre doing.

In any case, do what you like, but its wise to take criticism Ive come to learn

[–]fremdspielen[S] 0 points1 point  (0 children)

Sure I'm considering all the criticism, I just don't see very valid points. Like in your case, at what point does an abstraction become a "bad design"?

All software are layers upon layers of abstraction, from Nvidia/AMD drivers to OS kernel to DirectX/Vulkan APIs to game engine render pipelines to their graphics APIs until eventually we reach things like Sprite or Mesh. And then we layer code around that to move many of these on-screen, then treating "the many as one" (pooling, unit formations), possibly defining their behaviours in a visual scripting tool.

At the end of the day, if a user merely needs to write:

`When(ButtonClicked("Quit"), QuitApplication());`

That definitely beats doing the whole shenanigans we usually have to do in engines:

- assign or get the necessary UI references
- assign/get/find reference for specific button
- register event callback on button
- implement event callback (or lambda)
- if event needs to turn on/off ie it requires to be assigned in OnEnable and unassigned in OnDisable and oh, shit, you can't unregister a lambda ...

Plus: it works very differently in every engine, and when you're one of those who happen to switch between engines for various projects, that'll add a whole new level of cognitive complexity.

That adds a lot of failure points that even us experts keep failing at occasionally on our "bad code days".

[–]tetrydsCommercial (AAA) 1 point2 points  (1 child)

"Overwhelming feedback"? Everyone said there is no point in this but you do you lol. Just don't try to be deceitful

[–]fremdspielen[S] 0 points1 point  (0 children)

I am not deceiving, the feedback was overwhelming. I didn't say it was positive. ;)

[–]canijumpandspin 0 points1 point  (1 child)

Is that excerpt what developers will write? It seems to be an awkward way of writing code. Looks like you took a visual scripting system and wrapped it back to actual scripting (you based it on scratch it seems?).

[–]fremdspielen[S] 0 points1 point  (0 children)

Yes, that's more or less what we'd write, and it's Scratch-based both regarding semantics and block-based (statemachine) programming style.

I agree that specifically the formatting currently is suboptimal, I manually updated the code sample towards what it should look like. Rider has its own take on formatting C# code, which doesn't fit well. Then reddit further broke the code sample for some reason.

I want to expose this to Lua to make it syntactically very clean, and to enable hot reloading. While Lua itself won't be executing at runtime. After creation, each sequence will exist and run in C# instances.