From 515cc3e0fbdb6af184a2cb80a1f546514a5cf9be Mon Sep 17 00:00:00 2001 From: astra137 Date: Sun, 5 Oct 2025 20:14:53 -0700 Subject: [PATCH] Add initial painting --- main.tscn | 10 ++- paintings/.clang-format | 21 +++++ paintings/fractal.gd | 67 +++++++++++++++ paintings/fractal.gd.uid | 1 + paintings/fractal.gdshader | 148 +++++++++++++++++++++++++++++++++ paintings/fractal.gdshader.uid | 1 + paintings/fractal.tscn | 41 +++++++++ paintings/frame.png | Bin 0 -> 1529 bytes paintings/frame.png.import | 40 +++++++++ paintings/noise.gd | 80 ++++++++++++++++++ paintings/noise.gd.uid | 1 + paintings/noise.gdshader | 11 +++ paintings/noise.gdshader.uid | 1 + paintings/noise.tscn | 35 ++++++++ paintings/painting.gd | 10 +++ paintings/painting.gd.uid | 1 + paintings/painting.tscn | 49 +++++++++++ 17 files changed, 514 insertions(+), 3 deletions(-) create mode 100644 paintings/.clang-format create mode 100644 paintings/fractal.gd create mode 100644 paintings/fractal.gd.uid create mode 100644 paintings/fractal.gdshader create mode 100644 paintings/fractal.gdshader.uid create mode 100644 paintings/fractal.tscn create mode 100644 paintings/frame.png create mode 100644 paintings/frame.png.import create mode 100644 paintings/noise.gd create mode 100644 paintings/noise.gd.uid create mode 100644 paintings/noise.gdshader create mode 100644 paintings/noise.gdshader.uid create mode 100644 paintings/noise.tscn create mode 100644 paintings/painting.gd create mode 100644 paintings/painting.gd.uid create mode 100644 paintings/painting.tscn diff --git a/main.tscn b/main.tscn index 45f7122..f222e6c 100644 --- a/main.tscn +++ b/main.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=19 format=3 uid="uid://dt4nq0nkmjiit"] +[gd_scene load_steps=20 format=3 uid="uid://dt4nq0nkmjiit"] [ext_resource type="Script" uid="uid://b5tcsve1oo5ht" path="res://game_manager.gd" id="1_ig7tw"] [ext_resource type="Texture2D" uid="uid://cvqsf1nlfqwpr" path="res://assets/background/background.png" id="1_lquwl"] @@ -9,7 +9,8 @@ [ext_resource type="PackedScene" uid="uid://c1acpop6amvcl" path="res://audience_manager.tscn" id="6_272bh"] [ext_resource type="PackedScene" uid="uid://b8key4hjaldui" path="res://turn_manager.tscn" id="7_272bh"] [ext_resource type="Texture2D" uid="uid://d2142cf22t1lv" path="res://assets/buttons/button1.png" id="9_2cqfq"] -[ext_resource type="Script" uid="uid://bg1vk1o2eq3fg" path="res://bark_buttons.gd" id="9_yaehf"] +[ext_resource type="PackedScene" uid="uid://donkfeu1x888o" path="res://paintings/painting.tscn" id="9_kek77"] +[ext_resource type="Script" path="res://bark_buttons.gd" id="9_yaehf"] [ext_resource type="Texture2D" uid="uid://ut655l8y8xmi" path="res://assets/buttons/button1pressed.png" id="10_yaehf"] [ext_resource type="Texture2D" uid="uid://c0iad21xtnjdd" path="res://assets/buttons/button3.png" id="11_074og"] [ext_resource type="Texture2D" uid="uid://dx4dadmb37khl" path="res://assets/buttons/button3pressed.png" id="12_cegan"] @@ -22,7 +23,7 @@ default_font = ExtResource("2_5vw27") default_font_size = 12 -[node name="Node2D" type="Node2D"] +[node name="Main" type="Node"] [node name="Background" type="Sprite2D" parent="."] position = Vector2(640, 360) @@ -38,6 +39,9 @@ texture = ExtResource("2_7mycd") position = Vector2(640, 360) texture = ExtResource("3_272bh") +[node name="Painting" parent="." instance=ExtResource("9_kek77")] +position = Vector2(1075, 130) + [node name="GameManager" type="Node2D" parent="." node_paths=PackedStringArray("audience_manager", "desk", "turn_manager", "current_bid_display")] script = ExtResource("1_ig7tw") audience_manager = NodePath("../AudienceManager") diff --git a/paintings/.clang-format b/paintings/.clang-format new file mode 100644 index 0000000..4506f26 --- /dev/null +++ b/paintings/.clang-format @@ -0,0 +1,21 @@ +BasedOnStyle: LLVM +AlignAfterOpenBracket: DontAlign +AlignOperands: DontAlign +AlignTrailingComments: +# Kind: Never +# OverEmptyLines: 0 +AllowAllParametersOfDeclarationOnNextLine: false +AllowShortFunctionsOnASingleLine: Inline +BreakConstructorInitializers: AfterColon +ColumnLimit: 0 +ContinuationIndentWidth: 8 +IndentCaseLabels: true +IndentWidth: 4 +InsertBraces: true +KeepEmptyLinesAtTheStartOfBlocks: false +RemoveSemicolon: true +SpacesInLineCommentPrefix: +# Minimum: 0 # We want a minimum of 1 for comments, but allow 0 for disabled code. +# Maximum: -1 +TabWidth: 4 +UseTab: Always diff --git a/paintings/fractal.gd b/paintings/fractal.gd new file mode 100644 index 0000000..ac1192b --- /dev/null +++ b/paintings/fractal.gd @@ -0,0 +1,67 @@ +@tool +extends ColorRect + + +@export_tool_button('Randomize', 'RandomNumberGenerator') var randomize_action = randomize + + +@export var smoothing := true: + set(x): material.set_shader_parameter('smoothing', x) + get(): return material.get_shader_parameter('smoothing') + +@export var use_color_gradient := false: + set(x): material.set_shader_parameter('use_color_gradient', x) + get(): return material.get_shader_parameter('use_color_gradient') + +@export var gradient_start := Color(.18, 0, .45): + set(x): material.set_shader_parameter('gradient_start', x) + get(): return material.get_shader_parameter('gradient_start') + +@export var gradient_end := Color.YELLOW: + set(x): material.set_shader_parameter('gradient_end', x) + get(): return material.get_shader_parameter('gradient_end') + +@export var gradient_accent := Color.YELLOW: + set(x): material.set_shader_parameter('gradient_accent', x) + get(): return material.get_shader_parameter('gradient_accent') + +@export var fractal_scale := 0.5: + set(x): material.set_shader_parameter('scale', x) + get(): return material.get_shader_parameter('scale') + +@export var fractal_seed := Vector2(-0.529, 0.136): + set(x): material.set_shader_parameter('seed', x) + get(): return material.get_shader_parameter('seed') + +@export var fractal_power := 3: + set(x): material.set_shader_parameter('power', x) + get(): return material.get_shader_parameter('power') + +@export var fractal_escape := 1.0: + set(x): material.set_shader_parameter('escape', x) + get(): return material.get_shader_parameter('escape') + + +func _on_resized() -> void: + material.set_shader_parameter('aspect_ratio', size.aspect()) + + +func _ready() -> void: + _on_resized() + + +func randomize(rng_seed := randi()) -> void: + var rng := RandomNumberGenerator.new() + rng.seed = rng_seed + fractal_power = rng.randi_range(2, 5) + fractal_escape = rng.randi_range(1, 4) + #fractal_scale = randf_range(0.5, 0.5 * size.aspect()) - 0.1 + match fractal_power: + 5: fractal_seed = Vector2(rng.randf_range(-0.7, -0.6), rng.randf_range(-0.1, 0.1)) + 4: fractal_seed = Vector2(rng.randf_range(-1.2, -1), rng.randf_range(-0.2, 0.2)) + 3: fractal_seed = Vector2(rng.randf_range(0.45, 0.7), rng.randf_range(-0.7, 0.7)) + 2: match fractal_escape: + 1.0: fractal_seed = Vector2(rng.randf_range(-0.9, -0.8), rng.randf_range(0, 0)) + 2.0: fractal_seed = Vector2(rng.randf_range(-1.8, -1.), rng.randf_range(0, 0)) + _: fractal_seed = Vector2.RIGHT.rotated(randf_range(0, TAU)) * Vector2(0.6, 1) + _: fractal_seed = Vector2(rng.randf_range(-1, 1), rng.randf_range(-1, 1)) diff --git a/paintings/fractal.gd.uid b/paintings/fractal.gd.uid new file mode 100644 index 0000000..23e2d5b --- /dev/null +++ b/paintings/fractal.gd.uid @@ -0,0 +1 @@ +uid://bnmc3t0wxeayv diff --git a/paintings/fractal.gdshader b/paintings/fractal.gdshader new file mode 100644 index 0000000..139348c --- /dev/null +++ b/paintings/fractal.gdshader @@ -0,0 +1,148 @@ +// Original code is MIT licensed by Cory Petkovsek +// https://github.com/TokisanGames/godot-fractal-art + +shader_type canvas_item; + +uniform bool smoothing = true; +uniform bool use_color_gradient = false; +uniform vec4 gradient_start : source_color = vec4(0.18, 0., 0.45, 1.); +uniform vec4 gradient_end : source_color = vec4(1., 1., 0., 1.); +uniform vec4 gradient_accent : source_color = vec4(1., 1., 0., 1.); +uniform float accent_position = 0.65; +uniform float accent_width = 0.34; +uniform float red_frequency = 1.6615; +uniform float green_frequency = 1.246; +uniform float blue_frequency = 0.831; +uniform float red_phase = 6.3; +uniform float green_phase = 6.3; +uniform float blue_phase = 6.3; + +uniform highp float scale = 0.5; +uniform highp vec2 position = vec2(0, 0); +uniform float aspect_ratio = 1.33333; + +uniform highp vec2 seed = vec2(-0.794084, 0.136444); +uniform int power = 2; +uniform float iterations = 50.0; +uniform float escape = 4.0; + +// Convert from rectangular to polar +highp vec2 c_pol(highp vec2 c) { + highp float radius = length(c); + highp float theta = atan(c.y, c.x); + return vec2(radius, theta); +} + +// Convert from rectangular to Polar +highp vec2 c_rec(highp vec2 c) { + highp float radius = abs(c.x); + highp float theta = c.y; + highp float a = radius * cos(theta); + highp float b = radius * sin(theta); + return vec2(a, b); +} + +// Calculate base ^ exponent +highp vec2 c_pow(highp vec2 base, highp float ex) { + highp vec2 b = c_pol(base); + return c_rec(vec2(pow(b.x, ex), b.y * ex)); +} + +vec4 alpha_blend(vec4 top, vec4 bot) { + return vec4(top.r * top.a + bot.r * bot.a * (1. - top.a), + top.g * top.a + bot.g * bot.a * (1. - top.a), + top.b * top.a + bot.b * bot.a * (1. - top.a), + 1.0); +} + +vec4 getColor(float i) { + if (use_color_gradient) { + // Create gradient + vec4 ramp = mix(gradient_start, gradient_end, i); + + // gaussian formula ae^( -(x-b)^2 / 2c^2 ) + // a = curve's peak = 1.0 + // b = center of peak position + // c = standard deviation which controls width of bell + + float gaussianx = exp(-((i - accent_position) * (i - accent_position)) / (2. * accent_width * accent_width)); + vec4 accent = vec4(gradient_accent.r * gaussianx, + gradient_accent.g * gaussianx, + gradient_accent.b * gaussianx, + gaussianx); + + return alpha_blend(accent, ramp); + } else { + /* Sin/Cos creates a smooth wave between 1 and -1, offset from each other. + * You can have 4 evenly distributed offsets from sin, cos, -sin, -cos + * (sin(x) +1) / 2 -> changes the wave to go between 0 and 1 with the same frequency, +2../4 will go from 0.5 and 1.0 + * Calculate full cycles with: sin(cycles*6.5*i) or (sin(cycles*5.4*i)+1.0)/2.0 or (cos(cycles*3.8*i)+1.0)/2.0 + */ + return vec4((sin(red_frequency * 6.5 * i + red_phase) + 1.0) / 2.0, + (sin(green_frequency * 6.5 * i + green_phase) + 1.0) / 2.0, + (sin(blue_frequency * 6.5 * i + blue_phase) + 1.0) / 2.0, + 1.); + } +} + +vec2 random(vec2 uv) { + return vec2(fract(sin(dot(uv.xy, + vec2(12.9898,78.233))) * 43758.5453123)); +} + +vec2 voronoi(vec2 uv, float columns, float rows) { + vec2 index_uv = floor(vec2(uv.x * columns, uv.y * rows)); + vec2 fract_uv = fract(vec2(uv.x * columns, uv.y * rows)); + + float minimum_dist = 1.0; + vec2 minimum_point; + + for (int y= -1; y <= 1; y++) { + for (int x= -1; x <= 1; x++) { + vec2 neighbor = vec2(float(x),float(y)); + vec2 point = random(index_uv + neighbor); + + vec2 diff = neighbor + point - fract_uv; + float dist = length(diff); + + if(dist < minimum_dist) { + minimum_dist = dist; + minimum_point = point; + } + } + } + return minimum_point; +} + + +void fragment() { + float i = 0.0; + + highp vec2 c = seed; + + highp vec2 z; + z.x = aspect_ratio * (UV.x - 0.5) / scale - position.x; + z.y = (UV.y - 0.5) / scale + position.y; + + if (power == 2) { + while (i < iterations && length(z) <= escape) { + z = vec2(z.x * z.x - z.y * z.y, 2.0 * z.x * z.y) + c; // 20fps + i++; + } + } else { + while (i < iterations && length(z) <= escape) { + z = c_pow(z, float(power)) + c; // 6-7fps + i++; + } + } + + if (i >= iterations) { + float r = voronoi(UV + seed, 10.0, 5.0).r; + COLOR = getColor(r); + } else { + if (smoothing && power > 1) { + i -= log(log(length(z))) / log(float(power)); + } + COLOR = getColor(i / iterations); + } +} diff --git a/paintings/fractal.gdshader.uid b/paintings/fractal.gdshader.uid new file mode 100644 index 0000000..03118de --- /dev/null +++ b/paintings/fractal.gdshader.uid @@ -0,0 +1 @@ +uid://b8yiyjkjgvful diff --git a/paintings/fractal.tscn b/paintings/fractal.tscn new file mode 100644 index 0000000..9a1347c --- /dev/null +++ b/paintings/fractal.tscn @@ -0,0 +1,41 @@ +[gd_scene load_steps=4 format=3 uid="uid://bx4upo2n66wke"] + +[ext_resource type="Shader" uid="uid://b8yiyjkjgvful" path="res://paintings/fractal.gdshader" id="1_4re67"] +[ext_resource type="Script" uid="uid://bnmc3t0wxeayv" path="res://paintings/fractal.gd" id="2_o3htp"] + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_o3htp"] +resource_local_to_scene = true +shader = ExtResource("1_4re67") +shader_parameter/smoothing = false +shader_parameter/use_color_gradient = false +shader_parameter/gradient_start = Color(0.18, 0, 0.45, 1) +shader_parameter/gradient_end = Color(1, 1, 0, 1) +shader_parameter/gradient_accent = Color(1, 1, 0, 1) +shader_parameter/accent_position = 0.65 +shader_parameter/accent_width = 0.34 +shader_parameter/red_frequency = 1.6615 +shader_parameter/green_frequency = 1.246 +shader_parameter/blue_frequency = 0.831 +shader_parameter/red_phase = 6.3 +shader_parameter/green_phase = 6.3 +shader_parameter/blue_phase = 6.3 +shader_parameter/scale = 0.5 +shader_parameter/position = Vector2(0, 0) +shader_parameter/aspect_ratio = 1.3333334 +shader_parameter/seed = Vector2(0.17868738, -0.9546245) +shader_parameter/power = 2 +shader_parameter/iterations = 10.0 +shader_parameter/escape = 3.0 + +[node name="Fractal" type="ColorRect"] +material = SubResource("ShaderMaterial_o3htp") +custom_minimum_size = Vector2(32, 24) +offset_right = 320.0 +offset_bottom = 240.0 +script = ExtResource("2_o3htp") +smoothing = false +fractal_seed = Vector2(0.17868738, -0.9546245) +fractal_power = 2 +fractal_escape = 3.0 + +[connection signal="resized" from="." to="." method="_on_resized"] diff --git a/paintings/frame.png b/paintings/frame.png new file mode 100644 index 0000000000000000000000000000000000000000..08013b606403d3b9667c3702b0e10791605e8bdb GIT binary patch literal 1529 zcmeAS@N?(olHy`uVBq!ia0y~yU^D}=PjIjS$)w=3B|wU?ILO_JVcj{ImkbQ7n>}3| zLn`LHy=yz|b_hdTVyp4pFAIJBCr*B&5NhUNdv%RMsaIB*gX>wg6*m}VxT>OFtXwFR z(eke}^<`b%Jgt*AK5fXXXW?T{{4QFnNj26>GgFLUyt5wX3%)M z@b~omeSe?snaJ?w!_UjR>;LB*V>=>frqH*6u~2SV-H*rq_4o2r7_@8te5m@8o|fY< z=cHux>*w+H_H`-@+LB0ulT4YbpKuEcV|Ny_C`Oj zKg1>~!4+kmk~T-5Q#$9vk1sWwC4;2buDop=UF~@zVd1+qFRm$Ce)@JSt=jbXrdJ#8 ze%h|~Ji;h?=B{`5{ysi4<7C$J%_B{W%chjoF*WN@#dsHh4m&TWPD}^S_UAez^ z^&9oSzwJeqY^;~w&A&1*JB$Ce?)(Y5`~O~#NzYNgy{UIyRQaucj}67Q*Rf2`+y6g5 zyk^fWLtoeO>?P|e>b+N3<+#6o?@?@B_tH4{?YC=p@(#`1v{nDoLJl+TcmFTVJRA8d zd6xA3Ss$?~K^(T2!vUHbTll>lM+`rm&&6aBW$yzzeUNTPW_U=8t z{JC%U)#S}vqRQ`VHSUjk|9r|`b>3NB^ZyI2;=O%|_374aZvv_pUE9ll_vX!chr6Q6 zUo6c|_I?+?*7({w)ANfZUwdC|d+Sj>@5?*xtQS7l?nvDTw9e2qo-New$C>^+OYXPm z5C0FWrSSpY=kuo3%)fdiH7H)=uk(+V6&vSo5H;F*E$mnCqP06W*Z(!$9dh@0;*060 zX5~&exG;k;IZ(T_s_xx~9IXV?y$RoYwl4d9@?*=|cThAUS^LEEw}(wRq7xUfJr~|~XwCeCKU>x+Y&PA&rq0i0{Yv`Pah;uOr{s6F zFFkXE&*1yi3h${FYv%qEO7~FBVW0Wi=&|C`{SR(LM!lQ5K{mtp&aUa2k~{LQ%(?L( zj^p;hX-C%9?}$ihyBc3@T>W^SMP&i=+gZ2oq()UMUx~Z#$qdvK>(hDoX!QJ9}cPt1yv@N(kE%eiy$MbT1_IgHK@KDcToh!&Q|2NzJ^j<9a2bwiuxr4}DH>!)Y zfRdXQ^WyJq^W*(23j~bK6wW>AdHcBi`gUnf2Sr3-_xz~T?dSgQ&p|{P7{b5v7YhEV VULo!$4J^wUJYD@<);T3K0RX16uloQ1 literal 0 HcmV?d00001 diff --git a/paintings/frame.png.import b/paintings/frame.png.import new file mode 100644 index 0000000..7df155d --- /dev/null +++ b/paintings/frame.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://b142kv367vbw7" +path="res://.godot/imported/frame.png-e1682da613f441ce461363027e19aee4.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://paintings/frame.png" +dest_files=["res://.godot/imported/frame.png-e1682da613f441ce461363027e19aee4.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/paintings/noise.gd b/paintings/noise.gd new file mode 100644 index 0000000..ed8ed7e --- /dev/null +++ b/paintings/noise.gd @@ -0,0 +1,80 @@ +@tool +extends ColorRect + + +@export_tool_button('Randomize', 'RandomNumberGenerator') var randomize_action = randomize + + +@export var noise: FastNoiseLite: + set(x): + if noise: noise.changed.disconnect(_changed_noise) + noise = x + if noise: noise.changed.connect(_changed_noise) + +@export var steps := 12: + set(x): material.set_shader_parameter('steps', x) + get(): return material.get_shader_parameter('steps') + +@export var gradient_start := Color(.18, 0, .45): + set(x): material.set_shader_parameter('gradient_start', x) + get(): return material.get_shader_parameter('gradient_start') + +@export var gradient_end := Color.YELLOW: + set(x): material.set_shader_parameter('gradient_end', x) + get(): return material.get_shader_parameter('gradient_end') + +@export var rng_seed := 0: + set(x): + rng_seed = x + _regenerate() + + +var _noise_texture := NoiseTexture2D.new(): + set(x): + _noise_texture = x + _changed_noise() + + +func _changed_noise() -> void: + _noise_texture.noise = noise + material.set_shader_parameter('noise', _noise_texture) + + +func _resized() -> void: + _noise_texture.width = ceili(size.x) + _noise_texture.height = ceili(size.y) + _changed_noise() + + +func _ready() -> void: + _resized() + resized.connect(_resized) + + +func _regenerate() -> void: + var rng := RandomNumberGenerator.new() + rng.seed = rng_seed + noise.fractal_type = rng.randi_range(0, 3) as FastNoiseLite.FractalType + match noise.fractal_type: + 3: noise.fractal_octaves = 2 + 2: noise.fractal_octaves = 3 + _: noise.fractal_octaves = 5 + noise.frequency = rng.randf_range(0.002, 0.004) + noise.seed = rng.seed + match rng.randi_range(1, 5): + 1: steps = 2 + 2: steps = 5 + 3: steps = 12 + 4: steps = 24 + 5: steps = 128 + var lighter := rng.randf_range(0.4, 0.8) + var darker := rng.randf_range(0.2, 0.6) + var color1 := Color.from_ok_hsl(rng.randf(), rng.randf() * 0.8 + 0.2, lighter) + var color2 := Color.from_ok_hsl(rng.randf(), rng.randf(), lighter - darker) + match rng.randi_range(1, 2): + 1: gradient_start = color1; gradient_end = color2 + _: gradient_start = color2; gradient_end = color1 + + +func randomize() -> void: + rng_seed = randi() diff --git a/paintings/noise.gd.uid b/paintings/noise.gd.uid new file mode 100644 index 0000000..589abeb --- /dev/null +++ b/paintings/noise.gd.uid @@ -0,0 +1 @@ +uid://2jt34o1v7gbo diff --git a/paintings/noise.gdshader b/paintings/noise.gdshader new file mode 100644 index 0000000..b6ee4f1 --- /dev/null +++ b/paintings/noise.gdshader @@ -0,0 +1,11 @@ +shader_type canvas_item; + +uniform sampler2D noise; +uniform float steps = 8.0; +uniform vec4 gradient_start : source_color = vec4(0.18, 0., 0.45, 1.); +uniform vec4 gradient_end : source_color = vec4(1., 1., 0., 1.); + +void fragment() { + float r = round(texture(noise, UV).r * steps) / steps; + COLOR = mix(gradient_start, gradient_end, r); +} diff --git a/paintings/noise.gdshader.uid b/paintings/noise.gdshader.uid new file mode 100644 index 0000000..49d5bce --- /dev/null +++ b/paintings/noise.gdshader.uid @@ -0,0 +1 @@ +uid://b6jkek1qotcnf diff --git a/paintings/noise.tscn b/paintings/noise.tscn new file mode 100644 index 0000000..0af8ed7 --- /dev/null +++ b/paintings/noise.tscn @@ -0,0 +1,35 @@ +[gd_scene load_steps=6 format=3 uid="uid://bjpharjtpysre"] + +[ext_resource type="Shader" uid="uid://b6jkek1qotcnf" path="res://paintings/noise.gdshader" id="1_2lnyf"] +[ext_resource type="Script" uid="uid://2jt34o1v7gbo" path="res://paintings/noise.gd" id="1_o4civ"] + +[sub_resource type="FastNoiseLite" id="FastNoiseLite_o4civ"] +resource_local_to_scene = true +seed = 1 +frequency = 0.0028707401 +offset = Vector3(1460.7504, 943.2602, 0) +fractal_type = 2 +fractal_octaves = 3 + +[sub_resource type="NoiseTexture2D" id="NoiseTexture2D_2lnyf"] +width = 320 +height = 240 +noise = SubResource("FastNoiseLite_o4civ") + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_0uljq"] +shader = ExtResource("1_2lnyf") +shader_parameter/noise = SubResource("NoiseTexture2D_2lnyf") +shader_parameter/steps = 8.0 +shader_parameter/gradient_start = Color(0.56780183, 0.45513594, 0.630845, 1) +shader_parameter/gradient_end = Color(0.5222837, 0.45749915, 0.35617962, 1) + +[node name="Noise" type="ColorRect"] +material = SubResource("ShaderMaterial_0uljq") +custom_minimum_size = Vector2(32, 24) +offset_right = 320.0 +offset_bottom = 240.0 +script = ExtResource("1_o4civ") +noise = SubResource("FastNoiseLite_o4civ") +steps = 8 +gradient_start = Color(0.56780183, 0.45513594, 0.630845, 1) +gradient_end = Color(0.5222837, 0.45749915, 0.35617962, 1) diff --git a/paintings/painting.gd b/paintings/painting.gd new file mode 100644 index 0000000..c0e5e80 --- /dev/null +++ b/paintings/painting.gd @@ -0,0 +1,10 @@ +@tool +extends Node2D +class_name Painting + + +@export_tool_button('Randomize', 'RandomNumberGenerator') var randomize_action = randomize + + +func randomize(rng_seed := randi()) -> void: + %Noise.rng_seed = rng_seed diff --git a/paintings/painting.gd.uid b/paintings/painting.gd.uid new file mode 100644 index 0000000..1d4b737 --- /dev/null +++ b/paintings/painting.gd.uid @@ -0,0 +1 @@ +uid://tqu2ms43fhis diff --git a/paintings/painting.tscn b/paintings/painting.tscn new file mode 100644 index 0000000..8c389ed --- /dev/null +++ b/paintings/painting.tscn @@ -0,0 +1,49 @@ +[gd_scene load_steps=5 format=3 uid="uid://donkfeu1x888o"] + +[ext_resource type="Texture2D" uid="uid://b142kv367vbw7" path="res://paintings/frame.png" id="1_6chac"] +[ext_resource type="Script" uid="uid://tqu2ms43fhis" path="res://paintings/painting.gd" id="1_465no"] +[ext_resource type="PackedScene" uid="uid://bjpharjtpysre" path="res://paintings/noise.tscn" id="2_oqt1c"] + +[sub_resource type="FastNoiseLite" id="FastNoiseLite_465no"] +resource_local_to_scene = true +seed = 1262753571 +frequency = 0.0024024888 +offset = Vector3(1460.7504, 943.2602, 0) +fractal_type = 0 + +[node name="Painting" type="Node2D"] +texture_filter = 1 +script = ExtResource("1_465no") + +[node name="Frame" type="Sprite2D" parent="."] +texture = ExtResource("1_6chac") + +[node name="SubViewportContainer" type="SubViewportContainer" parent="."] +offset_left = -146.0 +offset_top = -91.0 +offset_right = 146.0 +offset_bottom = 91.0 +stretch = true +stretch_shrink = 4 + +[node name="SubViewport" type="SubViewport" parent="SubViewportContainer"] +handle_input_locally = false +size = Vector2i(73, 45) +size_2d_override = Vector2i(480, 360) +size_2d_override_stretch = true +render_target_update_mode = 4 + +[node name="Noise" parent="SubViewportContainer/SubViewport" instance=ExtResource("2_oqt1c")] +unique_name_in_owner = true +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_right = 0.0 +offset_bottom = 0.0 +grow_horizontal = 2 +grow_vertical = 2 +noise = SubResource("FastNoiseLite_465no") +steps = 5 +gradient_start = Color(0.31606108, 0.20250309, 0.17190823, 1) +gradient_end = Color(0.48729545, 0.5426228, 0.2567169, 1) +rng_seed = 1262753571