Skip to content

Instantly share code, notes, and snippets.

Avatar

HungryProton HungryProton

View GitHub Profile
@HungryProton
HungryProton / depth_override_shader.gdshader
Last active April 21, 2023 17:37
A Godot 4 shader to make things appear on top of other things within a range.
View depth_override_shader.gdshader
// 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 / box_gizmo_plugin.gd
Last active February 1, 2023 10:14
Box gizmo example
View box_gizmo_plugin.gd
extends EditorSpatialGizmoPlugin
var editor_plugin: EditorPlugin
var _previous_size
func _init():
create_material("lines", Color(1, 1, 1))
create_material("box", Color(1.0, 1.0, 1.0, 0.1))
@HungryProton
HungryProton / shader_cache.gd
Last active February 2, 2023 03:46
Shader Cache v2
View shader_cache.gd
class_name ShaderCache
extends Spatial
signal stage_completed
signal all_shaders_compiled
export var shaders_folder := "res://material/shaders/"
export var particles_folder := "res://vfx/"
@HungryProton
HungryProton / grid_shape.gd
Created July 21, 2021 12:04
Editor Inspector plugin example
View grid_shape.gd
tool
extends Resource
class_name GridShape
export var size := Vector2.ONE
export var grid := []
func _init() -> void:
@HungryProton
HungryProton / box.gd
Last active April 20, 2022 05:29
Spatial gizmo example - A box you can resize
View box.gd
tool
class_name ConceptBoxInput
extends Spatial
signal input_changed
signal property_changed
export var size := Vector3.ONE setget set_size
@HungryProton
HungryProton / smoke_shader.shader
Last active August 4, 2022 17:19
Godot smoke shader test
View smoke_shader.shader
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 / color_space_conversion.shader
Created September 16, 2020 10:55
convert from rgb to srgb and the other way around in godot shaders
View color_space_conversion.shader
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 / ui_scaling.gd
Last active July 21, 2020 21:55
UI scaling to make the interface appear larger on high dpi monitors
View ui_scaling.gd
static func get_scaled_theme(theme: Theme) -> Theme:
var scale = get_editor_scale()
var res: Theme = theme.duplicate(true)
res.default_font.size *= scale
for font_name in res.get_font_list("EditorFonts"):
var font = res.get_font(font_name, "EditorFonts")
font.size *= scale
@HungryProton
HungryProton / component.gd
Last active September 14, 2020 09:04
ECS protoype
View component.gd
"""
This is the base Component class. Every component should inherit from this.
It only stores data. Its only responsibility is to notify the parent Entity when its
created. (Or we could setup something in the Entity to monitor new components
but I just find it easier this way)
"""
extends Node
class_name Component
@HungryProton
HungryProton / node_pool.gd
Last active May 5, 2020 11:58
A simple node pool that works with an arbitrary amount of different node types.
View node_pool.gd
tool
extends Node
class_name NodePool
var _pools := {}
func _exit_tree() -> void:
clear()