Discord Server:
Come hang out, ask questions, get help, and share your FlowKit creations!
π https://discord.gg/qN6eK8gApe
A Clickteam Fusion 2.5/Construct inspired visual scripting addon for Godot 4, enabling event-driven programming through an intuitive event sheet interface.
FlowKit brings the power of visual event-based programming to Godot, allowing you to create game logic without writing code. Inspired by popular event sheet systems like Clickteam Fusion and Construct, FlowKit provides a familiar workflow for non-programmers and rapid prototyping enthusiasts.
- π― Event Sheet System: Create game logic using intuitive event blocks with conditions and actions
- π Node-Based Architecture: Target specific nodes in your scene tree for granular control
- π¦ Extensible Provider System: Easily add custom events, conditions, and actions
- β‘ Runtime Engine: Efficient event processing during gameplay with automatic scene detection
- π¨ Editor Integration: Seamless integration with Godot's editor interface
- πΎ Resource-Based Storage: Event sheets saved as
.tresresources for version control friendliness
- Download or clone this repository
- Copy the
flowkitfolder into your Godot project'saddons/directory - Enable the plugin in Project β Project Settings β Plugins
- The FlowKit panel will appear at the bottom of the editor
- Open a scene in the Godot editor
- Click the FlowKit tab in the bottom panel
- Click "Create Event Sheet" to initialize an event sheet for the current scene
- Add an event block:
- Click "Add Event" and select an event type (e.g.,
On Process) - Select the target node from your scene tree
- Click "Add Event" and select an event type (e.g.,
- Add conditions (optional):
- Click "Add Condition" on the event block
- Choose condition type and configure parameters
- Add actions:
- Click "Add Action" on the event block
- Select target node and action type
- Configure action parameters using expressions
- Save your event sheet (File β Save)
Event sheets are automatically loaded and executed when their associated scene runs.
FlowKit operates as a dual-mode system:
- Visual Authoring: Bottom panel UI for creating and editing event sheets
- Node Selection: Integration with Godot's scene tree for target selection
- Expression Editor: Configure action/condition parameters with GDScript expressions
- FlowKit Engine: Autoloaded singleton (
FlowKit) that executes event sheets - Scene Detection: Automatically loads event sheets matching the current scene
- Event Loop: Processes events, conditions, and actions every frame
FKEventSheet (Resource)
ββ events: Array[FKEventBlock]
ββ event_id: String (e.g., "on_process")
ββ target_node: NodePath
ββ conditions: Array[FKEventCondition]
β ββ condition_id: String
β ββ target_node: NodePath
β ββ inputs: Dictionary
ββ actions: Array[FKEventAction]
ββ action_id: String
ββ target_node: NodePath
ββ inputs: Dictionary
- On Ready: Triggered once when the node enters the scene tree
- On Process: Triggered every frame
- On Key Pressed: Triggered when a keyboard key is pressed
- Get Key Down: Check if a specific key is currently pressed
Node Actions:
- Print: Output text to the console
CharacterBody2D Actions:
- Move and Collide: Move with collision detection
- Move and Slide: Move with sliding collision response
- Normalize Velocity: Normalize the velocity vector
- Set Position X/Y: Set horizontal/vertical position
- Set Rotation: Set rotation angle
- Set Velocity X/Y: Set horizontal/vertical velocity
Note: More providers will be added in future updates, and this list is not exhaustive.
FlowKit's provider system makes it easy to extend functionality. Providers are automatically discovered through the registry system.
extends FKAction
func get_id() -> String:
return "my_custom_action"
func get_name() -> String:
return "My Custom Action"
func get_supported_types() -> Array:
return ["Node2D"]
func get_inputs() -> Array:
return [
{"name": "amount", "type": "float"},
{"name": "message", "type": "String"}
]
func execute(node: Node, inputs: Dictionary) -> void:
var amount = inputs.get("amount", 0.0)
var message = inputs.get("message", "")
print(message, " - ", amount)extends FKCondition
func get_id() -> String:
return "my_custom_condition"
func get_name() -> String:
return "My Custom Condition"
func get_supported_types() -> Array:
return ["Node"]
func get_inputs() -> Array:
return [{"name": "threshold", "type": "float"}]
func check(node: Node, inputs: Dictionary) -> bool:
var threshold = inputs.get("threshold", 0.0)
return trueextends FKEvent
func get_id() -> String:
return "on_custom_event"
func get_name() -> String:
return "On Custom Event"
func get_supported_types() -> Array:
return ["Node"]
func poll(node: Node) -> bool:
return falseflowkit/
βββ flowkit.gd
βββ registry.gd
βββ actions/
βββ conditions/
βββ events/
βββ resources/
βββ runtime/
βββ ui/
βββ saved/
- Event sheets match scenes by filename
- Node paths are relative to the scene root
- Inputs support GDScript expressions
- Group providers in folders
- Check the console for FlowKit logs
- Godot 4.5+
- Knowledge of GDScript
- Understanding of Godot plugins
MIT License.
- Clickteam Fusion 2.5
- Construct
- Scratch
- Godot Engine
Open an issue on GitHub for questions or bugs, alternatively you can ask in the Discussions or Discord community, but issues are preferred.
Made with β€οΈ for the Godot community by LexianDEV