Skip to content

Instantly share code, notes, and snippets.

View HungryProton's full-sized avatar

HungryProton HungryProton

View GitHub Profile
@HungryProton
HungryProton / smoke_shader.shader
Last active August 8, 2026 02:10
Godot smoke shader test
shader_type spatial;
uniform sampler2D mask;
uniform float min_scale = 0.0;
uniform float max_scale = 1.0;
varying float scale;
float range_lerp(float value, float istart, float istop, float ostart, float oend) {
@HungryProton
HungryProton / box.gd
Last active August 8, 2026 02:10
Spatial gizmo example - A box you can resize
tool
class_name ConceptBoxInput
extends Spatial
signal input_changed
signal property_changed
export var size := Vector3.ONE setget set_size
@HungryProton
HungryProton / half_tone.gdshader
Last active August 4, 2026 08:42
half_tone_shader
shader_type spatial;
uniform float pattern_scale = 20;
uniform sampler2D pattern_texture : source_color;
uniform float cutoff: hint_range(0.0, 1.0) = 0.5;
uniform float band_width: hint_range(0.0, 2.0) = 1.0;
// Optionel, pour le screen_uv local
varying flat vec4 NODE_POSITION_CLIP;
@HungryProton
HungryProton / depth_override_shader.gdshader
Last active May 12, 2026 13:30
A Godot 4 shader to make things appear on top of other things within a range.
// A Godot 4 shader to make things appear on top of other things within a range.
// Initially, this was made so my characters' facial features would be rendered on top of their hair.
shader_type spatial;
render_mode unshaded;
uniform sampler2D depth_texture : hint_depth_texture, repeat_disable, filter_nearest;
// Maximum depth we can overdraw relative to the object original depth, in ENGINE UNITS.
@HungryProton
HungryProton / ui_focus.gd
Created March 24, 2026 15:00
Hack to force the controls focus to follow the hover
extends Node
## User Interface Manager
## Add as an autoload
##
## Handle switching between gamepad and M+K
## Automatically gives focus to a hovered button
signal gamepad_changed(enabled: bool)
@HungryProton
HungryProton / underwater.gdshader
Created June 7, 2023 17:42
Under water shader with caustics
shader_type spatial;
uniform sampler2D depth_texture : hint_depth_texture, repeat_disable, filter_nearest;
uniform sampler2D screen_texture : hint_screen_texture, repeat_disable, filter_nearest;
uniform float v_depth_offset = 0.0;
uniform float v_depth_fade = 1.0;
uniform sampler2D underwater_color : repeat_disable;
uniform sampler2D caustics_texture : hint_default_black;
@HungryProton
HungryProton / import_script.gd
Last active December 12, 2025 11:13
Import script example
@tool
extends EditorScenePostImport
## Import script example
##
## GENERAL
## + Removes the empty root node (if any)
##
## COLLISIONS:
## + Append '-static' to the node name to mark it as a static body
@HungryProton
HungryProton / color_space_conversion.shader
Created September 16, 2020 10:55
convert from rgb to srgb and the other way around in godot shaders
float lts(float L) {
if (abs(L) < 0.0031308) {
return 12.92 * L;
}
return 1.055 * pow(L, (1.0 / 2.4)) - 0.055;
}
vec3 rgb_to_srgb(vec3 color) {
return vec3(lts(color.r), lts(color.g), lts(color.b));
}
@HungryProton
HungryProton / scene_util.gd
Last active August 18, 2025 11:09
Utility methods to find nodes by class
## Returns the first child node of a given class.
## If deep_search is true, search the whole tree below this node.
static func find_child_with_class(root: Node, type: Variant, deep_search: bool = false) -> Node:
if not is_instance_valid(root):
return null
if is_instance_of(root, type):
return root
var candidates: Array[Node] = root.get_children()
@HungryProton
HungryProton / auto_ui_sounds.gd
Last active August 18, 2025 10:33
Example script for adding sounds to every buttons in the whole project at runtime.
extends Node
## Automatically plays a sound on button click and hover
## Make it an autoload to work.
# Sound files
# Replace the path with your own
const BUTTON_CLICK := preload("res://ui/sfx/click_soft.ogg")
const BUTTON_FOCUS := preload("res://ui/sfx/bong_001.ogg")