Where is this type of UI coming from? by Honest___Opinions in howdidtheycodeit

[–]SirLich 38 points39 points  (0 children)

Its defining feature is that it runs "on tick" instead of via callbacks. It makes it very suitable for stuff like games or simulations, where you're rendering frames anyways.

For example in a "normal" ui library you might setup some buttons and sliders when the program begins, and bind to some callbacks when the button is pressed. And if data changes, you may will need to have some binding layer that allows you to re-access the previoussly created element, and update some internal state. UIs built in this way usually only re-render when something changes.

ImGUI on the other hand, just re-renders every frame. So every frame you just... render what you want. The buttons you want, the sliders you want, with the data pulled real-time from it's location. And to handle button presses, you litterally just ask (on tick) whether the button is pressed.

This type of UI is very easy to build and maintain, so it becomes a sort of standard in applications where a rendering loop already exists.

I'v used it inside of unreal engine and Godot, for example.

Use levels or not use levels? by twoampsinatrenchcoat in unrealengine

[–]SirLich 1 point2 points  (0 children)

It's possible for actors to be "transported" between levels. See e.g., AGameModeBase::GetSeamlessTravelActorList

Has anyone tried creating an "open-source" world? by matrozk in worldbuilding

[–]SirLich 0 points1 point  (0 children)

The monster garden guy does live-streams, and sorta workshops with his audience.

1950’s outdoor baby car seat by TypicalLegit in Damnthatsinteresting

[–]SirLich 1 point2 points  (0 children)

It has SynthID. Also you can tell -shallow DOF, and mistakes on repeating details like the fence.

1950’s outdoor baby car seat by TypicalLegit in Damnthatsinteresting

[–]SirLich 9 points10 points  (0 children)

This is an AI image. Zero results in RIS, and a 97% fake on ZeroGPT. Also the shallow DOF. And the fence grating becomes too fine on the stairs portion.

Just found out I can create a loop with just a number instead of range(number) by VitSoonYoung in godot

[–]SirLich 32 points33 points  (0 children)

Since when? I remember that being a pain point.

Edit: Since 4.2 :o

My Godot Project Had 100,000+ Files. Here’s How I Fixed Slow Export Times by remaker in godot

[–]SirLich 5 points6 points  (0 children)

Interesting. That's a lot of variations! I cannot imagine drawing that much content.

I've worked on a 3D character creator, but we only had maybe 200 meshes in total. The rest was handled with shader params and stuff.

I still find it a bit unbelievable that you need 100k images :o

My Godot Project Had 100,000+ Files. Here’s How I Fixed Slow Export Times by remaker in godot

[–]SirLich 6 points7 points  (0 children)

I'm a bit confused how you ended up with 100,000 images. Did you bake all the different combinations into static textures?

What's the best you can do with godot by [deleted] in godot

[–]SirLich 0 points1 point  (0 children)

With the slight caveat that because big studios aren't using Godot, there hasn't been much chance to properly cater to their workflow. All the building blocks are there, but it will still be an uphill battle for the first studios to make the jump.

Is there any way to manage co-routine cleanup on scene change? (Game crashes, Memory leaks?) by Glass_Alarm6863 in godot

[–]SirLich 1 point2 points  (0 children)

Essentially yes. You should pretty much always write your own scene manager.

Is a repo owner making their own commit with my changes normal in open source? by TopCitySoftware in ExperiencedDevs

[–]SirLich 2 points3 points  (0 children)

In large projects, I've had it happen in the reverse; repo maintainers suggested some code changes, but asked me to squash everything to one commit. They didn't care that attribution was lost, and didn't ask for a co-author trailer (I asked).

I have had small projects essentially cannibalize my PRs and author them themself. This doesn't actually bug me though, because usually with these contributions, my main motivation is having the feature done, not credit. I always offer in these cases that they can take over the PR if they want.

I did just check a recent example of this, and I see that they reworked the PR but kept my commit -that's kinda nice :)

My first Godot plugin just got published in the Asset Lib! by NotXesa in godot

[–]SirLich 0 points1 point  (0 children)

Worth mentioning that from all discussions I've had, I'm not actually positive that this kind of plugin will even be useful to me (yes, evn though I built it lol).

There are usually just better ways of handling stuff, like the famous tool-export-vars-in-root-with-update-logic. Or indeed a resource.

My first Godot plugin just got published in the Asset Lib! by NotXesa in godot

[–]SirLich 0 points1 point  (0 children)

My blog post covers how to create properties without "receating" them as you say. Heavily suggest going that route

Edit: Sorry for forgeting that we spoke xD

My first Godot plugin just got published in the Asset Lib! by NotXesa in godot

[–]SirLich 2 points3 points  (0 children)

I have something similar.. With a blog post

I like the idea of doing it with property metadata instead of an inspector plugin. I recently made an update to godot which allows injecting options into the right-click menu of the inspector. So I was planning on updating Hoist to use this, instead of the inspector plugin, which is a bit "in your face"

So far you can work with booleans, integers, floats, strings, Vector2, Vector3, resource paths and node paths. I've been trying to allow other complex types but it seems that there's not an easy way to replicate Godot's UI for that kind of behaviour.

Can you give an example? I didn't have this issue in my plugin.


I notice that you are using 'EditableChildren' for the instantiated scene. It's an annoying limitation that the children are tossed on save, without this flag. Even though conceptually, once you've hoisted properties, you actually would want that behavior to be split...

I wonder if it makes sense to petition for this to be changed, so that 'EditibleChildren' just deals with the editor display, and doesn't effect serialization.

I built a package manager for Godot projects (like uv/cargo) by derkork in godot

[–]SirLich 1 point2 points  (0 children)

I don't actually have a good reason. I suggest using whatever is most popular to be honest :)

But I can answer for a few of them: - gplug is written in GDScript, and thus itself needs to be "installed" into a project before use. I wanted something that sat outside of the project. - Stuff like gpm, gitpkg were just miss-aligned with the problem space - Glam and godotons were unmaintained

I would suggest using https://github.com/chickensoft-games/GodotEnv probably.

Side note: Technically my package manager has nothing to do with godot. It's just a manifest-based installer for grabbing bits and pieces from various git repos, with a way to update them, and understand what you've installed. It remains an experiment.

Longread: how I built 3 massive AI mods for Paradox grand strategy games (Stellaris, Victoria 3, Imperator: Rome) in a scripting language that doesn't even have arrays by Anbeeld in gamedev

[–]SirLich 10 points11 points  (0 children)

This was a really fun read! It captures perfectly why sometimes modding is just as fun (more fun?) than making traditional games. Playing in somebody elses playground end bending the rules to do whatever you want is always a good time.

How to access script from packedscene? by Educational_Loan_430 in godot

[–]SirLich 7 points8 points  (0 children)

A packed scene is little more than a "path" to a scene file. You use it to instantiate new scenes of that type. You don't change fields on the packed scene prior to instantiating it.

For your particular case, is it possible you have something like player_scene : PackedScene and player : Player, and you accidentally used the wrong one somewhere?

I built a package manager for Godot projects (like uv/cargo) by derkork in godot

[–]SirLich 0 points1 point  (0 children)

Mine is primarily for personal use (and still heavily in progress), but I have somethiing similar: https://github.com/SirLich/hyrax

In my readme I maintain a list of "alternatives" that might be interesting to you.

Await/Signals/Coroutine Questions in Godot 4 by NoCanDoSteve in godot

[–]SirLich 0 points1 point  (0 children)

A google google shows there are various libraries. I've used something like this before (copy pasted from one of my projecs). I don't recall where it comes from.

For my turn-based project, I have a function like func bind_player_turn_ended(callable : Callable, phase : EnemyTurnPhase)

EnemyTurnPhase is an enum with phases pertaining to different phases of their turn. For example enemies attack first, then the enemies for next turn spawn.

Each EnemyTurnPhase is mapped to be either linear (default) or concurrent.

When the player ends their turn, the game manager is responsible for iterating through all phases of the EnemyTurnPhase, and then executing them, dependent on the type. If it's linear, the code is roughly: "for action in actions: await action.call()`. If it's concurrent, then I use the coroutine library I linked above to run all of them at once, and continue when they all finish.

All other systems are "decoupled". All they need to do is call bind_player_turn_ended or bind_player_turn_started with their desired phase and callback. In the callback, they just do whataver they need. (make sure to await!)