Nodesnim
The Nim GUI/2D framework based on OpenGL and SDL2.
[](https://github.com/ellerbrock/open-source-badges/)
[](https://github.com/Ethosa/yukiko/blob/master/nim-lang.svg)
[](https://github.com/Ethosa/nodesnim/blob/master/LICENSE)
[](https://wakatime.com/badge/github/Ethosa/nodesnim)
[](https://github.com/Ethosa/nodesnim/actions)
Latest version - 0.0.3
Stable version - 0.0.2
## Install
1. Install this repo
- `nimble install nodesnim` or `nimble install https://github.com/Ethosa/nodesnim.git`
2. Download OpenGL, SDL2_image, SDL2_mixer and freeglut Runtime binaries for your OS
- [SDL2](https://www.libsdl.org/download-2.0.php)
- [SDL2_image](https://www.libsdl.org/projects/SDL_image/)
- [SDL2_mixer](https://www.libsdl.org/projects/SDL_mixer/)
3. Put Runtime binaries in the `.nimble/bin/` folder
## Features
- Godot-like node system.
- Simple usage
```nim
import nodesnim
Window("Hello, world!")
var
scene_obj: SceneObj
scene = Scene("Main", scene_obj)
label_obj: LabelObj
hello = Label(label_obj)
hello.setText("Hello, world!")
hello.setSizeAnchor(1, 1)
hello.setTextAlign(0.5, 0.5, 0.5, 0.5)
scene.addChild(hello)
addMainScene(scene)
windowLaunch()
```
Now available
- Core
- [Anchor](https://ethosa.github.io/nodesnim/nodesnim/core/anchor.html)
- [Color](https://ethosa.github.io/nodesnim/nodesnim/core/color.html)
- [ColorText](https://ethosa.github.io/nodesnim/nodesnim/core/color_text.html)
- [Enums](https://ethosa.github.io/nodesnim/nodesnim/core/enums.html)
- [Exceptions](https://ethosa.github.io/nodesnim/nodesnim/core/exceptions.html)
- [Image](https://ethosa.github.io/nodesnim/nodesnim/core/image.html)
- [Input](https://ethosa.github.io/nodesnim/nodesnim/core/input.html)
- [Rect2](https://ethosa.github.io/nodesnim/nodesnim/core/rect2.html)
- [Vector2](https://ethosa.github.io/nodesnim/nodesnim/core/vector2.html)
- [Circle2](https://ethosa.github.io/nodesnim/nodesnim/core/circle2.html)
- [Polygon2](https://ethosa.github.io/nodesnim/nodesnim/core/polygon2.html)
- [AudioStream](https://ethosa.github.io/nodesnim/nodesnim/core/audio_stream.html)
- [Animation](https://ethosa.github.io/nodesnim/nodesnim/core/animation.html)
- Default nodes
- [Node](https://ethosa.github.io/nodesnim/nodesnim/nodes/node.html)
- [Canvas](https://ethosa.github.io/nodesnim/nodesnim/nodes/canvas.html)
- [Scene](https://ethosa.github.io/nodesnim/nodesnim/nodes/scene.html)
- [AudioStreamPlayer](https://ethosa.github.io/nodesnim/nodesnim/nodes/audio_stream_player.html)
- Control nodes
- [Control](https://ethosa.github.io/nodesnim/nodesnim/nodescontrol/control.html)
- [ColorRect](https://ethosa.github.io/nodesnim/nodesnim/nodescontrol/color_rect.html)
- [TextureRect](https://ethosa.github.io/nodesnim/nodesnim/nodescontrol/texture_rect.html)
- [Label](https://ethosa.github.io/nodesnim/nodesnim/nodescontrol/label.html)
- [Button](https://ethosa.github.io/nodesnim/nodesnim/nodescontrol/button.html)
- [EditText](https://ethosa.github.io/nodesnim/nodesnim/nodescontrol/edittext.html)
- [RichLabel](https://ethosa.github.io/nodesnim/nodesnim/nodescontrol/rich_label.html)
- [RichEditText](https://ethosa.github.io/nodesnim/nodesnim/nodescontrol/rich_edit_text.html)
- [Box](https://ethosa.github.io/nodesnim/nodesnim/nodescontrol/box.html)
- [HBox](https://ethosa.github.io/nodesnim/nodesnim/nodescontrol/hbox.html)
- [VBox](https://ethosa.github.io/nodesnim/nodesnim/nodescontrol/vbox.html)
- [GridBox](https://ethosa.github.io/nodesnim/nodesnim/nodescontrol/grid_box.html)
- [Scroll](https://ethosa.github.io/nodesnim/nodesnim/nodescontrol/scroll.html)
- [ProgressBar](https://ethosa.github.io/nodesnim/nodesnim/nodescontrol/progress_bar.html)
- [Slider](https://ethosa.github.io/nodesnim/nodesnim/nodescontrol/slider.html)
- [VProgressBar](https://ethosa.github.io/nodesnim/nodesnim/nodescontrol/vprogress_bar.html)
- [VSlider](https://ethosa.github.io/nodesnim/nodesnim/nodescontrol/vslider.html)
- [Popup](https://ethosa.github.io/nodesnim/nodesnim/nodescontrol/popup.html)
- [TextureButton](https://ethosa.github.io/nodesnim/nodesnim/nodescontrol/texture_button.html)
- [TextureProgressBar](https://ethosa.github.io/nodesnim/nodesnim/nodescontrol/texture_progress_bar.html)
- [Counter](https://ethosa.github.io/nodesnim/nodesnim/nodescontrol/counter.html)
- [Switch](https://ethosa.github.io/nodesnim/nodesnim/nodescontrol/switch.html)
- 2D nodes
- [Node2D](https://ethosa.github.io/nodesnim/nodesnim/nodes2d/node2d.html)
- [Sprite](https://ethosa.github.io/nodesnim/nodesnim/nodes2d/sprite.html)
- [AnimatedSprite](https://ethosa.github.io/nodesnim/nodesnim/nodes2d/animated_sprite.html)
- [YSort](https://ethosa.github.io/nodesnim/nodesnim/nodes2d/ysort.html)
- [CollisionShape2D](https://ethosa.github.io/nodesnim/nodesnim/nodes2d/collision_shape2d.html)
- [KinematicBody2D](https://ethosa.github.io/nodesnim/nodesnim/nodes2d/kinematic_body2d.html)
## Debug mode
For use debug mode you should compile with `-d:debug` or `--define:debug`, e.g. `nim c -r -d:debug main.nim`.
## Export
Use the [`Nim compiler user guide`](https://nim-lang.org/docs/nimc.html#dynliboverride) for export to the other OS.
- CrossPlatform export for Windows (tested on Windows 7 x64 and Windows 10 x64)
- `nim c -d:mingw -d:release --opt:speed --noNimblePath file.nim`
- put Runtime binaries in the folder with the program.
## F.A.Q
*Q*: Where can I see examples?
*A*: You can see this in the [`tests`](https://github.com/Ethosa/nodesnim/blob/master/tests) or [`examples`](https://github.com/Ethosa/nodesnim/blob/master/examples) folder.
*Q*: Where can I read the docs?
*A*: You can read docs [here](https://ethosa.github.io/nodesnim/nodesnim.html)