I like most things I see about Godot, and I’m going to try making some games with it.

Whenever I imagine programming a game though, I imagine the game logic and simulation being separate from the display. For instance, if I was to make a game like FTL, I would plan to simulate all the ship interactions and the movement of the characters purely in code, and then write a separate module to render that simulation. The simulation could be rendered with graphics, or with text, or whatever (of course, a text render wouldn’t be human friendly, but could act as a dedicated server for some games, or I could use it for machine learning, etc).

I’m not an expert at Godot, but it seems this mindset is not going to fit well into Godot. Is this correct? It seems like the same object that is responsible for tracking the players health is going to also be responsible for drawing that player on the screen and tracking their location on the screen, etc. Will my player class have to end up being a subclass of some complicated Godot class? (Also, I’m a fan of functional programming and don’t always use a lot of classes if given the choice.)

What are your thoughts about this. Would you recommend another engine? No other engine seem to be in the same sweet spot that Godot is currently in.

  • Suppoze@beehaw.org
    link
    fedilink
    English
    arrow-up
    5
    ·
    1 year ago

    I think it is entirely possible in Godot. You don’t have to extend any Godot specific class when you create new objects and scripts, just define a new class, and put your game logic there. Then, you can use an instance of that class in your rendering specific logic.

    If you want, you can take a look at my pet project, a match three “game”, I made it to learn Godot. I had the same concerns as you, so I tried to separate game logic and animation. What I did was to create separate queue for the animations based on game logic steps.

    https://github.com/zsoki/godot-4-match-three/blob/master/Events/Game/game_event.gd

    The code is not terribly optimized or readable, so sorry. But might give you some ideas.