diff --git a/game/levels/test_level.tscn b/game/levels/test_level.tscn index 12b4e35..12ec3a6 100644 --- a/game/levels/test_level.tscn +++ b/game/levels/test_level.tscn @@ -23,7 +23,7 @@ [ext_resource type="PackedScene" uid="uid://cb0w6mt8g4mer" path="res://game/characters/enemies/gray_cultist.tscn" id="18_blgb8"] [ext_resource type="PackedScene" uid="uid://cutjutvd8dqqc" path="res://game/characters/enemies/black_cultist.tscn" id="19_ohfy3"] [ext_resource type="PackedScene" uid="uid://bv2gahb4wxgb1" path="res://game/characters/enemies/white_cultist.tscn" id="20_rt0xo"] -[ext_resource type="PackedScene" uid="uid://wpkj48bqyuy2" path="res://game/platform/abstract_colored_platform.tscn" id="24_h1708"] +[ext_resource type="PackedScene" uid="uid://wpkj48bqyuy2" path="res://game/platform/abstract_color_platform.tscn" id="24_h1708"] [node name="TestLevel" unique_id=600627332 instance=ExtResource("1_15okj")] script = ExtResource("2_a2sw7") diff --git a/game/materials/platform_color.tres b/game/materials/platform_color.tres new file mode 100644 index 0000000..1e3067d --- /dev/null +++ b/game/materials/platform_color.tres @@ -0,0 +1,13 @@ +[gd_resource type="ShaderMaterial" format=3 uid="uid://bkmfkjkwnquil"] + +[ext_resource type="Shader" uid="uid://lqq1mg6l1qqe" path="res://game/shaders/black_n_white.gdshader" id="1_p23e2"] + +[resource] +shader = ExtResource("1_p23e2") +shader_parameter/black_color = Color(0, 0, 0, 1) +shader_parameter/white_color = Color(1, 1, 1, 1) +shader_parameter/switch_colors = false +shader_parameter/threshold = 0.5 +shader_parameter/speed = 1.0000000475 +shader_parameter/intensity = 1.0 +shader_parameter/scale = 5.0000002375 diff --git a/game/materials/platform_gray.tres b/game/materials/platform_gray.tres new file mode 100644 index 0000000..f5afc5f --- /dev/null +++ b/game/materials/platform_gray.tres @@ -0,0 +1,13 @@ +[gd_resource type="ShaderMaterial" format=3 uid="uid://2hd2pw5cgn1r"] + +[ext_resource type="Shader" uid="uid://lqq1mg6l1qqe" path="res://game/shaders/black_n_white.gdshader" id="1_rnyyp"] + +[resource] +shader = ExtResource("1_rnyyp") +shader_parameter/black_color = Color(0, 0, 0, 1) +shader_parameter/white_color = Color(1, 1, 1, 1) +shader_parameter/switch_colors = false +shader_parameter/threshold = 0.5 +shader_parameter/speed = 1.0000000475 +shader_parameter/intensity = 0.50000002375 +shader_parameter/scale = 5.0000002375 diff --git a/game/platform/abstract_colored_platform.gd b/game/platform/abstract_color_platform.gd similarity index 85% rename from game/platform/abstract_colored_platform.gd rename to game/platform/abstract_color_platform.gd index 4cdfb00..68275ef 100644 --- a/game/platform/abstract_colored_platform.gd +++ b/game/platform/abstract_color_platform.gd @@ -1,5 +1,5 @@ @tool -class_name AbstractColoredPlatform +class_name AbstractColorPlatform extends AbstractPlatform diff --git a/game/platform/abstract_colored_platform.gd.uid b/game/platform/abstract_color_platform.gd.uid similarity index 100% rename from game/platform/abstract_colored_platform.gd.uid rename to game/platform/abstract_color_platform.gd.uid diff --git a/game/platform/abstract_colored_platform.tscn b/game/platform/abstract_color_platform.tscn similarity index 56% rename from game/platform/abstract_colored_platform.tscn rename to game/platform/abstract_color_platform.tscn index 872d1e1..e857ae4 100644 --- a/game/platform/abstract_colored_platform.tscn +++ b/game/platform/abstract_color_platform.tscn @@ -1,18 +1,18 @@ [gd_scene format=3 uid="uid://wpkj48bqyuy2"] -[ext_resource type="PackedScene" uid="uid://guvijso3k6eq" path="res://game/platform/abstract_platform.tscn" id="1_8ogjv"] -[ext_resource type="Script" uid="uid://6hn6ncbqe6cn" path="res://game/platform/abstract_colored_platform.gd" id="2_3iy2o"] -[ext_resource type="Shader" uid="uid://d4hm3vjx1rhsf" path="res://game/shaders/platform.gdshader" id="2_jpqbs"] -[ext_resource type="Texture2D" uid="uid://cpcuokqv8u2xa" path="res://images/level/platform.png" id="3_3iy2o"] -[ext_resource type="Material" uid="uid://d2o2o1w8kb51g" path="res://game/materials/walls_white.tres" id="3_6pvc3"] -[ext_resource type="PackedScene" uid="uid://5qlocc0yu8ug" path="res://game/collision_switcher.tscn" id="5_3iy2o"] +[ext_resource type="PackedScene" uid="uid://guvijso3k6eq" path="res://game/platform/abstract_platform.tscn" id="1_ovkrd"] +[ext_resource type="Script" uid="uid://6hn6ncbqe6cn" path="res://game/platform/abstract_color_platform.gd" id="2_vbsvi"] +[ext_resource type="Material" uid="uid://bkmfkjkwnquil" path="res://game/materials/platform_color.tres" id="3_pbfpg"] +[ext_resource type="Shader" uid="uid://d4hm3vjx1rhsf" path="res://game/shaders/platform.gdshader" id="4_cdhfe"] +[ext_resource type="Texture2D" uid="uid://cpcuokqv8u2xa" path="res://images/level/platform.png" id="5_uk0x1"] +[ext_resource type="PackedScene" uid="uid://5qlocc0yu8ug" path="res://game/collision_switcher.tscn" id="6_mk014"] -[sub_resource type="ViewportTexture" id="ViewportTexture_majud"] +[sub_resource type="ViewportTexture" id="ViewportTexture_ovkrd"] viewport_path = NodePath("SubViewport") -[sub_resource type="ShaderMaterial" id="ShaderMaterial_gfbtg"] +[sub_resource type="ShaderMaterial" id="ShaderMaterial_vbsvi"] resource_local_to_scene = true -shader = ExtResource("2_jpqbs") +shader = ExtResource("4_cdhfe") shader_parameter/black_color = Color(0, 0, 0, 1) shader_parameter/white_color = Color(1, 1, 1, 1) shader_parameter/switch_colors = false @@ -22,26 +22,26 @@ shader_parameter/intensity = 1.0 shader_parameter/scale = 20.0 shader_parameter/tile_size = 8.0 shader_parameter/platform_width = 24.0 -shader_parameter/atlas = ExtResource("3_3iy2o") -shader_parameter/seed = 0.23701711 +shader_parameter/atlas = ExtResource("5_uk0x1") +shader_parameter/seed = 0.12241629 -[sub_resource type="RectangleShape2D" id="RectangleShape2D_2p7w0"] +[sub_resource type="RectangleShape2D" id="RectangleShape2D_pbfpg"] resource_local_to_scene = true size = Vector2(16, 7) -[node name="AbstractColoredPlatform" unique_id=137546339 instance=ExtResource("1_8ogjv")] +[node name="AbstractColorPlatform" unique_id=137546339 instance=ExtResource("1_ovkrd")] collision_layer = 32 -script = ExtResource("2_3iy2o") +script = ExtResource("2_vbsvi") [node name="Sprite2D" parent="." index="0" unique_id=264863796] -material = ExtResource("3_6pvc3") -texture = SubResource("ViewportTexture_majud") +material = ExtResource("3_pbfpg") +texture = SubResource("ViewportTexture_ovkrd") [node name="PlatformRect" parent="SubViewport" parent_id_path=PackedInt32Array(226200089) index="0" unique_id=794315918] -material = SubResource("ShaderMaterial_gfbtg") +material = SubResource("ShaderMaterial_vbsvi") [node name="CollisionShape2D" parent="." index="2" unique_id=175449124] -shape = SubResource("RectangleShape2D_2p7w0") +shape = SubResource("RectangleShape2D_pbfpg") -[node name="CollisionSwitcher" parent="." index="3" unique_id=542648449 node_paths=PackedStringArray("object") instance=ExtResource("5_3iy2o")] +[node name="CollisionSwitcher" parent="." index="3" unique_id=542648449 node_paths=PackedStringArray("object") instance=ExtResource("6_mk014")] object = NodePath("..") diff --git a/game/platform/abstract_platform.gd b/game/platform/abstract_platform.gd index 7255c84..340e75b 100644 --- a/game/platform/abstract_platform.gd +++ b/game/platform/abstract_platform.gd @@ -30,7 +30,7 @@ func _ready() -> void: func rebuild_platform() -> void: var shape := collision.shape as RectangleShape2D - shape.size = Vector2(platform_width, TILE_SIZE) + shape.size.x = platform_width sub_viewport.size = Vector2(platform_width, TILE_SIZE) platform_rect.size.x = platform_width diff --git a/game/platform/abstract_platform.tscn b/game/platform/abstract_platform.tscn index 178e68e..ae667f6 100644 --- a/game/platform/abstract_platform.tscn +++ b/game/platform/abstract_platform.tscn @@ -1,7 +1,7 @@ [gd_scene format=3 uid="uid://guvijso3k6eq"] [ext_resource type="Script" uid="uid://kjy0t56tgpxs" path="res://game/platform/abstract_platform.gd" id="1_426vp"] -[ext_resource type="Material" uid="uid://dojhoc6ljpt1a" path="res://game/materials/walls_gray.tres" id="2_2ivtb"] +[ext_resource type="Material" uid="uid://2hd2pw5cgn1r" path="res://game/materials/platform_gray.tres" id="2_2ivtb"] [ext_resource type="Texture2D" uid="uid://cpcuokqv8u2xa" path="res://images/level/platform.png" id="2_31xwx"] [ext_resource type="Shader" uid="uid://d4hm3vjx1rhsf" path="res://game/shaders/platform.gdshader" id="2_jsq8n"] @@ -11,17 +11,10 @@ viewport_path = NodePath("SubViewport") [sub_resource type="ShaderMaterial" id="ShaderMaterial_2ivtb"] resource_local_to_scene = true shader = ExtResource("2_jsq8n") -shader_parameter/black_color = Color(0, 0, 0, 1) -shader_parameter/white_color = Color(1, 1, 1, 1) -shader_parameter/switch_colors = false -shader_parameter/threshold = 0.5 -shader_parameter/speed = 0.5 -shader_parameter/intensity = 1.0 -shader_parameter/scale = 20.0 shader_parameter/tile_size = 8.0 shader_parameter/platform_width = 24.0 shader_parameter/atlas = ExtResource("2_31xwx") -shader_parameter/seed = 0.7482483 +shader_parameter/seed = 0.1415489 [sub_resource type="RectangleShape2D" id="RectangleShape2D_jsq8n"] resource_local_to_scene = true diff --git a/game/shaders/black_n_white.gdshader b/game/shaders/black_n_white.gdshader index 3a29246..197be1c 100644 --- a/game/shaders/black_n_white.gdshader +++ b/game/shaders/black_n_white.gdshader @@ -1,7 +1,47 @@ shader_type canvas_item; -#include "get_black_n_white.gdshaderinc" +uniform vec4 black_color : source_color = vec4(0.0, 0.0, 0.0, 1.0); +uniform vec4 white_color : source_color = vec4(1.0, 1.0, 1.0, 1.0); +uniform bool switch_colors = false; +uniform float threshold : hint_range(0.0, 1.0) = 0.5; +uniform float speed : hint_range(0.0, 10.0) = 0.5; +uniform float intensity : hint_range(0.0, 1.0) = 1.0; +uniform float scale : hint_range(0.0, 100.0) = 20.0; + +vec2 random(vec2 uv){ + uv = vec2( dot(uv, vec2(127.1,311.7) ), + dot(uv, vec2(269.5,183.3) ) ); + return -1.0 + 2.0 * fract(sin(uv) * 43758.5453123); +} + +float noise(vec2 uv) { + vec2 uv_index = floor(uv); + vec2 uv_fract = fract(uv); + + vec2 blur = smoothstep(0.0, 1.0, uv_fract); + + return mix( mix( dot( random(uv_index + vec2(0.0,0.0) ), uv_fract - vec2(0.0,0.0) ), + dot( random(uv_index + vec2(1.0,0.0) ), uv_fract - vec2(1.0,0.0) ), blur.x), + mix( dot( random(uv_index + vec2(0.0,1.0) ), uv_fract - vec2(0.0,1.0) ), + dot( random(uv_index + vec2(1.0,1.0) ), uv_fract - vec2(1.0,1.0) ), blur.x), blur.y) + 0.5; +} void fragment() { - COLOR = get_black_and_white(COLOR, UV, TIME); + if (COLOR.a > 0.01) { + vec2 noise_uv = UV * vec2(1.0, TEXTURE_PIXEL_SIZE.x / TEXTURE_PIXEL_SIZE.y); + float l = dot(COLOR.rgb, vec3(0.2126, 0.7152, 0.0722)); + + bool is_black = l < threshold; + if (switch_colors) { + is_black = !is_black; + } + if (intensity < 1.0) { + vec2 coord = noise_uv * scale + TIME * speed; + if (noise(coord) > intensity) { + is_black = !is_black; + } + } + + COLOR = is_black ? black_color : white_color; + } } diff --git a/game/shaders/get_black_n_white.gdshaderinc b/game/shaders/get_black_n_white.gdshaderinc deleted file mode 100644 index e7cbec1..0000000 --- a/game/shaders/get_black_n_white.gdshaderinc +++ /dev/null @@ -1,47 +0,0 @@ -uniform vec4 black_color : source_color = vec4(0.0, 0.0, 0.0, 1.0); -uniform vec4 white_color : source_color = vec4(1.0, 1.0, 1.0, 1.0); -uniform bool switch_colors = false; -uniform float threshold : hint_range(0.0, 1.0) = 0.5; -uniform float speed : hint_range(0.0, 10.0) = 0.5; -uniform float intensity : hint_range(0.0, 1.0) = 1.0; -uniform float scale : hint_range(0.0, 100.0) = 20.0; - -vec2 random(vec2 uv){ - uv = vec2( dot(uv, vec2(127.1,311.7) ), - dot(uv, vec2(269.5,183.3) ) ); - return -1.0 + 2.0 * fract(sin(uv) * 43758.5453123); -} - -float noise(vec2 uv) { - vec2 uv_index = floor(uv); - vec2 uv_fract = fract(uv); - - vec2 blur = smoothstep(0.0, 1.0, uv_fract); - - return mix( mix( dot( random(uv_index + vec2(0.0,0.0) ), uv_fract - vec2(0.0,0.0) ), - dot( random(uv_index + vec2(1.0,0.0) ), uv_fract - vec2(1.0,0.0) ), blur.x), - mix( dot( random(uv_index + vec2(0.0,1.0) ), uv_fract - vec2(0.0,1.0) ), - dot( random(uv_index + vec2(1.0,1.0) ), uv_fract - vec2(1.0,1.0) ), blur.x), blur.y) + 0.5; -} - -vec4 get_black_and_white(vec4 color, vec2 uv, float time) { - if (color.a < 0.01) return color; - - float l = dot(color.rgb, vec3(0.2126, 0.7152, 0.0722)); - - bool is_black = l < threshold; - if (switch_colors) { - is_black = !is_black; - } - if (intensity < 1.0) { - vec2 coord = uv * scale + time * speed; - if (noise(coord) > intensity) { - is_black = !is_black; - } - } - - if (is_black) { - return black_color; - } - return white_color; -} diff --git a/game/shaders/get_black_n_white.gdshaderinc.uid b/game/shaders/get_black_n_white.gdshaderinc.uid deleted file mode 100644 index 86cfa9d..0000000 --- a/game/shaders/get_black_n_white.gdshaderinc.uid +++ /dev/null @@ -1 +0,0 @@ -uid://bvklme5ww0g2f diff --git a/game/shaders/platform.gdshader b/game/shaders/platform.gdshader index c089dff..bbcec0a 100644 --- a/game/shaders/platform.gdshader +++ b/game/shaders/platform.gdshader @@ -1,7 +1,5 @@ shader_type canvas_item; -#include "get_black_n_white.gdshaderinc" - uniform float tile_size = 8.0; uniform float platform_width = 24.0; uniform sampler2D atlas : filter_nearest; @@ -37,5 +35,4 @@ void fragment() { vec2 atlas_size = vec2(textureSize(atlas, 0)); vec2 atlas_uv = atlas_pixel / atlas_size; COLOR = texture(atlas, atlas_uv); - COLOR = get_black_and_white(COLOR, UV, TIME); }