Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
48 changes: 32 additions & 16 deletions level_designer/viewport/grid.gdshader
Original file line number Diff line number Diff line change
Expand Up @@ -2,31 +2,47 @@ shader_type canvas_item;

global uniform vec2 VIEWPORT_SIZE;

uniform sampler2D grid_bg_texture : repeat_enable, filter_nearest;
uniform sampler2D grid_origin_texture : repeat_enable, filter_nearest;
uniform vec4 grid_bg_modulate : source_color = vec4(1.0);
uniform vec4 grid_origin_modulate : source_color = vec4(1.0);
uniform vec2 cell_size = vec2(32.0);
uniform vec2 line_thickness = vec2(2.0);

uniform vec2 grid_offset = vec2(0.0);
uniform vec4 line_color : source_color = vec4(0.5);
uniform vec4 bg_color : source_color = vec4(0);
uniform float grid_fade_threshold : hint_range(0.0, 4.0) = 2.0;

uniform vec2 grid_offset = vec2(0.0);
uniform vec2 camera_position = vec2(0.0);
uniform vec2 camera_zoom = vec2(1.0);

// Function to get the color of grid at a given UV. Grid repeats every 1, 1 UV
vec4 grid(vec2 uv) {
// We will be working within a tile, since they repeat
vec2 uv_within_tile = mod(uv, 1);

// Measure distance of tile_uv from 0.5 (center of the tile)
vec2 uv_distance_from_center = abs(vec2(0.5) - uv_within_tile);

// This distance must be less than this to lie on the line.
vec2 line_uv_thickness = line_thickness/(2.0*cell_size);

bool is_on_horizontal_line = uv_distance_from_center.y < line_uv_thickness.y;
bool is_on_vertical_line = uv_distance_from_center.x < line_uv_thickness.x;

if (is_on_horizontal_line || is_on_vertical_line) {
return line_color;
} else {
return bg_color;
}
}

void fragment() {
vec2 tex_size = vec2(textureSize(grid_bg_texture, 0));

// Find the tiled UV at this world position.
vec2 world_pos = (UV * VIEWPORT_SIZE) / camera_zoom + camera_position - (VIEWPORT_SIZE * 0.5) / camera_zoom;
vec2 offset_pos = world_pos - grid_offset + tex_size;
vec2 tiled_uv = offset_pos / tex_size;

vec2 cell = floor(offset_pos / tex_size);
bool near_origin = (cell == vec2(0.0));
vec2 offset_pos = world_pos - grid_offset + cell_size;
vec2 tiled_uv = offset_pos / cell_size;

// BG is made more transparent when zoomed out
float bg_alpha = smoothstep(0.0, grid_fade_threshold, camera_zoom.x);
vec4 bg = texture(grid_bg_texture, tiled_uv) * grid_bg_modulate * vec4(1.0, 1.0, 1.0, bg_alpha);
vec4 origin = texture(grid_origin_texture, tiled_uv) * grid_origin_modulate;

COLOR = mix(bg, origin, float(near_origin) * origin.a);
// The grid function gets the color at this UV.
// This is multiplied with the alpha value above.
COLOR = grid(tiled_uv) * vec4(1.0, 1.0, 1.0, bg_alpha);
}
11 changes: 5 additions & 6 deletions level_designer/viewport/viewport.tscn
Original file line number Diff line number Diff line change
@@ -1,18 +1,17 @@
[gd_scene format=3 uid="uid://ob44gpnyj5ja"]

[ext_resource type="Shader" uid="uid://sxvlfpblfmai" path="res://level_designer/viewport/grid.gdshader" id="1_2bfex"]
[ext_resource type="Texture2D" uid="uid://5d1xg84rwu1k" path="res://level_designer/viewport/grid.png" id="1_3d3a7"]
[ext_resource type="Script" uid="uid://bhcjxobw61v12" path="res://level_designer/viewport/ld_camera.gd" id="2_3d3a7"]
[ext_resource type="Script" uid="uid://dnq5lwh60selk" path="res://level_designer/viewport/grid.gd" id="3_2bfex"]

[sub_resource type="ShaderMaterial" id="ShaderMaterial_bu805"]
shader = ExtResource("1_2bfex")
shader_parameter/grid_bg_texture = ExtResource("1_3d3a7")
shader_parameter/grid_origin_texture = ExtResource("1_3d3a7")
shader_parameter/grid_bg_modulate = Color(0, 0, 0, 0.2)
shader_parameter/grid_origin_modulate = Color(0, 0, 0, 1)
shader_parameter/grid_offset = Vector2(0, 0)
shader_parameter/cell_size = Vector2(32, 32)
shader_parameter/line_thickness = Vector2(2, 2)
shader_parameter/line_color = Color(0.5, 0.5, 0.5, 0.5)
shader_parameter/bg_color = Color(0, 0, 0, 0)
shader_parameter/grid_fade_threshold = 1.0000000475
shader_parameter/grid_offset = Vector2(0, 0)
shader_parameter/camera_position = Vector2(0, 0)
shader_parameter/camera_zoom = Vector2(1, 1)

Expand Down