Nova funcionalidade na Plics SW: compra de inscritos para Instagram
▲ 1 r/plicsSW+1 crossposts

Nova funcionalidade na Plics SW: compra de inscritos para Instagram

A Plics SW acaba de ganhar uma nova opção: agora também é possível comprar inscritos para Instagram diretamente pela plataforma.

A ideia é oferecer mais uma ferramenta para quem quer fortalecer a presença do perfil e acelerar sua estratégia de crescimento.

Confira a novidade:

https://plics-sw-webpage.vercel.app/comprar-inscritos-instagram

O que vocês acham desse tipo de funcionalidade em uma plataforma como a Plics SW?

u/eliezerDeveloper — 5 days ago
▲ 30 r/libgdx

Creating UI with Scene2d UI Builder

Yes, creating UI like HUDs and menus for your LibGDX games is simple now.

Modern UI tooling has finally arrived.

If you find the project useful, consider giving it a ⭐ on GitHub!

YouTube Video:

https://youtu.be/jhqoM9oEozc

🔗 Scene2D UI Builder: https://github.com/eliezer-dev-software-enginner/scene2d-ui-builder

Thanks to the feedback from ProGencel on GitHub, I was able to improve the app even further. Although this version is still labeled as beta, it’s already quite stable and usable.

Would love to hear your feedback!

u/eliezerDeveloper — 10 days ago
▲ 67 r/libgdx+1 crossposts

[Tool] scene2d-ui-builder — a free visual editor for libGDX Scene2D UI, no more fighting with Table

Hey r/libgdx,

I've been building a free desktop tool that lets you put together Scene2D UI/HUDs visually instead of hand-calculating x/y or wrestling Table into doing free-form layout it was never really meant for. Figured this community would get the most use out of it, so here it is.

What it does

You load a skin, drag buttons/labels/images from a palette straight onto a canvas that matches your game's actual target resolution, position everything exactly where you want it (WYSIWYG, free positioning — not a grid), and export the layout as a plain JSON file.

A small companion library, scene2d-hud-loader, turns that JSON into a real Scene2D Skin + Group + Actors with one call:

HudView hud = HudLoader.load(Gdx.files.internal("ui/hud.json"));
stage.addActor(hud.root);
Gdx.input.setInputProcessor(stage);

That's it — no Table cells, no manual positioning math, no separate loader code to write yourself.

What you need

Just a skin: skin.json + .atlas + the texture .png. If you don't already have one lying around, Skin Composer is the standard way to build one from scratch or reskin an existing UI pack — the builder loads whatever it produces directly.

Features

  • Free-positioning canvas at your real target resolution — what you see is what you get in-game
  • Drag straight from your skin's palette — buttons, text buttons, labels, and raw atlas regions all show up automatically once a skin is loaded
  • Alignment guides while dragging, plus an optional grid overlay
  • Nickname any widget, then look it up by name in your own game code and wire up a click listener like you normally would — the builder never needs to know anything about your game logic:
    TextButton playButton = hud.get("play", TextButton.class);
    playButton.addListener(new ClickListener() { ... });
    
  • Reference background image while you work (visual only — real game backgrounds are drawn with SpriteBatch, so this is ignored by the loader, it's just there to help you line things up)
  • Light/dark theme
  • Self-contained export — copies the skin's files alongside the exported JSON, so the output folder is ready to drop straight into your assets

Get it

Still early — this is a young project and I'm actively working on it, so bug reports, feature requests, and general feedback are very welcome. Let me know if it's useful for your project!

u/eliezerDeveloper — 14 days ago
▲ 2 r/JavaFX

Learning reactive UI with State: derived state from user input, a string length app

Third post in the series. This one moves from State alone to ComputedState — showing how to derive a value from another reactive value and have it stay in sync automatically as the user types.

The setup: textState holds whatever the user types into the Input. textLenghtComputed is a ComputedState<String> built with ComputedState.of(...), watching textState as a dependency. Every keystroke updates textState, which recomputes textLenghtComputed, which updates the Text on screen — no listeners wired up by hand, no manual recompute calls.

package my_app;

import megalodonte.ListenerManager;
import megalodonte.application.MegalodonteApp;
import megalodonte.base.theme.ThemeManager;
import megalodonte.theme.DefaultTheme;

public class Main {

    static void main() {
        ThemeManager.setTheme(new DefaultTheme());

        MegalodonteApp.run(context -> context.useView(new HomeScreen()), ev->{
            if(ev == MegalodonteApp.Event.CloseRequest){
                System.out.println("Clicked on X - close application");
                ListenerManager.disposeAll();
            }
        });
    }
}


package my_app;

import megalodonte.ComputedState;
import megalodonte.base.components.Component;
import megalodonte.base.components.ScreenComponent;
import megalodonte.base.state.State;
import megalodonte.components.Text;
import megalodonte.components.inputs.Input;
import megalodonte.components.layout_components.Container;
import megalodonte.props.ContainerProps;

public class HomeScreen implements ScreenComponent {
    State<String> textState = new State<>("");
    ComputedState<String> textLenghtComputed = ComputedState.of(
            ()-> "Size is: " + textState.get().length(), textState
    );

    u/Override
    public Component render() {
       return new Container(new ContainerProps().paddingAll(20)).children(
               new Input(textState),
               new Text(textLenghtComputed)
       );
    }
}
  • ComputedState.of(supplier, dependencies...) recomputes automatically whenever any listed dependency changes — no manual subscribe/notify needed.
  • Input(textState) binds the text field directly to a State<String>, so typing writes straight into reactive state.
  • Unlike the counter's counter.map(...), this shows ComputedState built from a lambda with an explicit dependency list — useful once a derived value needs to read from more than one state.

If you're finding this series useful, dropping a star on the repos below genuinely helps the project get visibility — takes two seconds and means a lot for a solo-dev framework like this.

Repos

u/eliezerDeveloper — 19 days ago
▲ 9 r/JavaFX

Learning reactive UI with State: the second example in the series, a counter app

Second post in the series on learning reactive UI patterns in Megalodonte. This one is a classic counter app — the simplest possible way to see State<T> actually drive a UI update without any manual repaint logic.

The core idea: counter is a State&lt;Integer&gt;, and the Text component binds to it via counter.map(Object::toString). When a button click calls counter.set(...), the mapped state recomputes and the Text node updates on its own. No refresh(), no manual re-render call — the component just reacts.

package my_app;

import megalodonte.ListenerManager;
import megalodonte.application.MegalodonteApp;
import megalodonte.base.theme.ThemeManager;
import megalodonte.theme.DefaultTheme;

public class Main {

    static void main() {
        ThemeManager.setTheme(new DefaultTheme());

        MegalodonteApp.run(context -&gt; context.useView(new HomeScreen()), ev-&gt;{
            if(ev == MegalodonteApp.Event.CloseRequest){
                System.out.println("Clicked on X - close application");
                ListenerManager.disposeAll();
            }
        });
    }
}


package my_app;

import megalodonte.base.components.Component;
import megalodonte.base.components.ScreenComponent;
import megalodonte.base.state.State;
import megalodonte.components.Button;
import megalodonte.components.SpacerVertical;
import megalodonte.components.Text;
import megalodonte.components.layout_components.Container;
import megalodonte.props.ButtonProps;
import megalodonte.props.ContainerProps;
import megalodonte.props.TextProps;

public class HomeScreen implements ScreenComponent {
    State&lt;Integer&gt; counter = new State&lt;&gt;(0);

    u/Override
    public Component render() {

        ButtonProps btnProps = new ButtonProps().fontSize(30);

        return new Container(new ContainerProps().paddingAll(20)).children(
                new Text(counter.map(Object::toString), new TextProps().fontSize(90)),
                new Button("Decrement", btnProps).onClick(()-&gt; counter.set(counter.get() - 1)),
                new SpacerVertical(10),
                new Button("Increment", btnProps).onClick(()-&gt; counter.set(counter.get() + 1))
        );
    }
}
  • State&lt;T&gt; holds a value and notifies dependents on change — counter.set(...) is the only trigger needed.
  • counter.map(Object::toString) derives a ReadableState&lt;String&gt; from the Integer state, so Text never touches the raw type.
  • ListenerManager.disposeAll() on CloseRequest tears down any active state subscriptions cleanly when the app closes.

Repos

u/eliezerDeveloper — 22 days ago
▲ 14 r/vuejs+1 crossposts

Megalodonte — a small reactive UI framework on top of JavaFX

I've been building JavaFX desktop apps for a while and got tired of the usual boilerplate (manual listeners, imperative styling, no real component model), so I built Megalodonte: a thin reactive layer on top of JavaFX — React-ish component composition, State&lt;T&gt;/ComputedState&lt;T&gt; for reactivity, and a Props/Theme system so styling isn't scattered setStyle() calls everywhere.

It's still early and I'm the only user so far, but it's real, working code — not a toy. Posting it here mostly for feedback and to see if this is useful to anyone else stuck with JavaFX.

What "Hello World" looks like

Main.java — bootstraps the app and sets a theme once, up front:

package my_app;

import megalodonte.ListenerManager;
import megalodonte.application.MegalodonteApp;
import megalodonte.base.theme.ThemeManager;
import megalodonte.theme.DefaultTheme;

public class Main {

    static void main() {
        ThemeManager.setTheme(new DefaultTheme());

        MegalodonteApp.run(context -&gt; context.useView(new WelcomeScreen()), ev -&gt; {
            if (ev == MegalodonteApp.Event.CloseRequest) {
                System.out.println("Clicked on X - close application");
                ListenerManager.disposeAll();
            }
        });
    }
}

WelcomeScreen.java — the actual UI, as a composable screen component:

package my_app;

import megalodonte.base.components.Component;
import megalodonte.base.components.ScreenComponent;
import megalodonte.components.Text;
import megalodonte.components.layout_components.Container;
import megalodonte.props.TextProps;

public class WelcomeScreen implements ScreenComponent {
    @Override
    public Component render() {
        return new Container().children(
                new Text("Hello world", new TextProps().fontSize(90))
        );
    }
}

What's in it

  • Reactive stateState&lt;T&gt;, ComputedState&lt;T&gt;, ListState&lt;T&gt; — components subscribe and re-render on change, no manual wiring.
  • Component model — screens are ScreenComponents with a render() you compose out of Container/Column/Row/Text/Button/etc., instead of hand-building a Scene graph.
  • Props + Theme system — styling goes through typed Props classes (TextProps, ContainerProps, ...) resolved against a ThemeInterface, instead of ad-hoc inline CSS strings.
  • Router — navigation between screens without manually juggling Scene.setRoot(...).
  • Used it to build a full JavaFX ERP desktop app, so it's exercised well beyond "hello world".

Repos

Happy to answer questions — and honest criticism is welcome, this is very much a work in progress.

u/eliezerDeveloper — 23 days ago
▲ 2 r/plicsSW+1 crossposts

Como cadastrar produtos, controlar estoque e criar categorias no Plics SW

Olá pessoal,

Publiquei um novo tutorial do **Plics SW** mostrando como fazer o cadastro completo de produtos.

No vídeo você aprende:

- Como cadastrar produtos;

- Como controlar o estoque;

- Como adicionar cores aos produtos;

- Como criar categorias;

- Como cadastrar um produto utilizando uma categoria.

A ideia é mostrar um fluxo completo de cadastro para deixar o sistema organizado desde o início.

🎥 **Vídeo completo:**

👉 https://youtu.be/vf496tjUwEE

💬 Se tiver sugestões de novas funcionalidades ou tutoriais, pode comentar. Estou desenvolvendo o Plics SW continuamente com base no feedback dos usuários.

u/eliezerDeveloper — 5 days ago
▲ 6 r/jogosbrasil+1 crossposts

Você aí que não acha jogos traduzidos em pr br e acaba tendo que jogar os games em inglês na marra pode ficar despreocupado agora.

Vc tem que conhecer a prego games mano, tem todo jogo lá totalmente traduzido pt-br.

Tem o site e também tem lá no telegram o canal deles é só pesquisar por: pregogames

u/eliezerDeveloper — 4 months ago