Merge commit '6180c51f7c642b6f858c8f15912a00cada007968' into state_mangement

This commit is contained in:
betalars 2023-05-28 22:39:23 +02:00
commit 0a9fa3ef6d
38 changed files with 3693 additions and 359 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 100 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 103 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 102 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 102 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 102 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 105 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 102 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 102 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 100 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 103 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 104 KiB

Binary file not shown.

142
design/void_overlay.svg Normal file
View File

@ -0,0 +1,142 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="1024"
height="1024"
viewBox="0 0 270.93333 270.93333"
version="1.1"
id="svg5"
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
sodipodi:docname="void_overlay.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview7"
pagecolor="#505050"
bordercolor="#eeeeee"
borderopacity="1"
inkscape:showpageshadow="0"
inkscape:pageopacity="0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#505050"
inkscape:document-units="px"
showgrid="false"
inkscape:zoom="0.64693624"
inkscape:cx="-183.17106"
inkscape:cy="428.17203"
inkscape:window-width="3840"
inkscape:window-height="2095"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="layer1" />
<defs
id="defs2">
<linearGradient
inkscape:collect="always"
id="linearGradient925">
<stop
style="stop-color:#000000;stop-opacity:0;"
offset="0.83069605"
id="stop923" />
<stop
style="stop-color:#000000;stop-opacity:1;"
offset="1"
id="stop921" />
</linearGradient>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient925"
id="radialGradient927"
cx="61.507626"
cy="103.71676"
fx="61.507626"
fy="103.71676"
r="37.458996"
gradientTransform="matrix(1.0848971,-0.01406165,0.0138466,1.0683051,-22.35128,-66.298143)"
gradientUnits="userSpaceOnUse" />
<filter
inkscape:collect="always"
style="color-interpolation-filters:sRGB"
id="filter978"
x="-0.01480182"
y="-0.01480182"
width="1.0296036"
height="1.0296036">
<feGaussianBlur
inkscape:collect="always"
stdDeviation="0.45032961"
id="feGaussianBlur980" />
</filter>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient925"
id="radialGradient988"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.0848971,-0.01406165,0.0138466,1.0683051,-170.87366,-73.433246)"
cx="61.507626"
cy="103.71676"
fx="61.507626"
fy="103.71676"
r="37.458996" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient925"
id="radialGradient992"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.0848971,-0.01406165,0.0138466,1.0683051,-170.87366,-73.433246)"
cx="61.507626"
cy="103.71676"
fx="61.507626"
fy="103.71676"
r="37.458996" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient925"
id="radialGradient996"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.0848971,-0.01406165,0.0138466,1.0683051,-170.87366,-73.433246)"
cx="61.507626"
cy="103.71676"
fx="61.507626"
fy="103.71676"
r="37.458996" />
</defs>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1">
<circle
style="mix-blend-mode:normal;fill:url(#radialGradient927);fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:4, 7.99999;paint-order:stroke fill markers;filter:url(#filter978)"
id="path234"
cx="46.295574"
cy="40.149464"
r="36.50872"
transform="matrix(3.1115622,0,0,3.1115622,5.288915,8.187228)" />
<circle
style="mix-blend-mode:normal;fill:url(#radialGradient988);fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:4, 7.99999;paint-order:stroke fill markers;filter:url(#filter978)"
id="circle986"
cx="-102.22681"
cy="33.014359"
r="36.50872"
transform="matrix(-0.80533158,3.0055383,-3.0055383,-0.80533158,163.1273,460.36095)" />
<circle
style="mix-blend-mode:normal;fill:url(#radialGradient992);fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:4, 7.99999;paint-order:stroke fill markers;filter:url(#filter978)"
id="circle990"
cx="-102.22681"
cy="33.014359"
r="36.50872"
transform="matrix(-2.4562477,-1.9101484,1.9101484,-2.4562477,-189.30339,20.919674)" />
<circle
style="mix-blend-mode:normal;fill:url(#radialGradient996);fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:4, 7.99999;paint-order:stroke fill markers;filter:url(#filter978)"
id="circle994"
cx="-102.22681"
cy="33.014359"
r="36.50872"
transform="matrix(-2.6962828,1.5530224,-1.5530224,-2.6962828,-89.765778,394.04656)" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 5.0 KiB

View File

@ -0,0 +1,282 @@
[gd_scene load_steps=4 format=3 uid="uid://bvowj4l8dtceu"]
[ext_resource type="PackedScene" uid="uid://dy5rd437h5hsw" path="res://logic-scenes/board/card.tscn" id="1_xrckx"]
[ext_resource type="PackedScene" uid="uid://vkcdj8c3ytbq" path="res://logic-scenes/board/post-it.tscn" id="2_ucudl"]
[node name="board of devs" type="Control"]
layout_mode = 3
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
[node name="childhood" type="Control" parent="."]
anchors_preset = 0
offset_right = 40.0
offset_bottom = 40.0
[node name="c_homework" parent="childhood" instance=ExtResource("1_xrckx")]
offset_left = 34.0
offset_top = 31.0
offset_right = 334.0
offset_bottom = 251.0
text = "I never put in much effort for homework "
[node name="p_good_grades" parent="childhood/c_homework" groups=["c_body", "c_boy_stuff", "c_teachers"] instance=ExtResource("2_ucudl")]
offset_left = 324.0
offset_top = 16.0
offset_right = 624.0
offset_bottom = 116.0
text = "but at least I get good grades."
[node name="p_upset_peers" parent="childhood/c_homework" groups=["c_Joy", "c_backlash", "c_boy_stuff", "c_comic_heroes", "c_teachers"] instance=ExtResource("2_ucudl")]
offset_left = 327.0
offset_top = 118.0
offset_right = 627.0
offset_bottom = 218.0
text = "and my peers were upset about that."
[node name="c_teachers" parent="childhood" instance=ExtResource("1_xrckx")]
offset_left = 35.0
offset_top = 261.0
offset_right = 335.0
offset_bottom = 481.0
text = "I like my teachers more than my classmates "
[node name="p_volunteering" parent="childhood/c_teachers" groups=["c_Joy", "c_backlash", "c_boy_stuff"] instance=ExtResource("2_ucudl")]
offset_left = 318.0
offset_top = 13.0
offset_right = 618.0
offset_bottom = 113.0
text = "doing voluntary social service at my school would be great."
[node name="p_becoming_teacher" parent="childhood/c_teachers" groups=["c_Joy", "c_backlash", "c_homework"] instance=ExtResource("2_ucudl")]
offset_left = 321.0
offset_top = 115.0
offset_right = 621.0
offset_bottom = 215.0
text = "maybe I want to become a teacher."
[node name="c_Joy" parent="childhood" instance=ExtResource("1_xrckx")]
offset_left = 40.0
offset_top = 489.0
offset_right = 340.0
offset_bottom = 709.0
text = "I can put ages into things I enjoy "
[node name="p_worried_mother" parent="childhood/c_Joy" groups=["c_body", "c_boy_stuff", "c_comic_heroes", "c_homework", "c_teachers"] instance=ExtResource("2_ucudl")]
offset_left = 320.0
offset_top = 7.0
offset_right = 620.0
offset_bottom = 107.0
text = "my mother would be worried about that"
[node name="p_thomas" parent="childhood/c_Joy" groups=["c_backlash", "c_comic_heroes", "c_homework", "c_teachers"] instance=ExtResource("2_ucudl")]
offset_left = 323.0
offset_top = 109.0
offset_right = 623.0
offset_bottom = 209.0
text = "Mr Thomas thinks that makes me gifted."
[node name="voice_training" type="Control" parent="."]
anchors_preset = 0
offset_right = 40.0
offset_bottom = 40.0
[node name="c_comic_heroes" parent="voice_training" instance=ExtResource("1_xrckx")]
offset_left = 685.0
offset_top = 26.0
offset_right = 985.0
offset_bottom = 246.0
text = "Comic heroes are my role models "
[node name="p_effort" parent="voice_training/c_comic_heroes" groups=["c_Joy", "c_hit", "c_teachers"] instance=ExtResource("2_ucudl")]
offset_left = 324.0
offset_top = 16.0
offset_right = 624.0
offset_bottom = 116.0
text = "when I put in the effort, I can make the world a better place"
[node name="p_upset_peers" parent="voice_training/c_comic_heroes" groups=["c_Joy", "c_body", "c_boy_stuff", "c_hit"] instance=ExtResource("2_ucudl")]
offset_left = 327.0
offset_top = 118.0
offset_right = 627.0
offset_bottom = 218.0
text = "and I want to be like agent q!"
[node name="c_boy_stuff" parent="voice_training" instance=ExtResource("1_xrckx")]
offset_left = 691.0
offset_top = 270.0
offset_right = 991.0
offset_bottom = 490.0
text = "I like boy stuff "
[node name="p_slut" parent="voice_training/c_boy_stuff" groups=["c_Joy", "c_body", "c_hit", "c_homework", "c_teachers"] instance=ExtResource("2_ucudl")]
offset_left = 318.0
offset_top = 13.0
offset_right = 618.0
offset_bottom = 113.0
text = "others think I only pretend to."
[node name="p_girls" parent="voice_training/c_boy_stuff" groups=["c_Joy", "c_body", "c_comic_heroes", "c_hit", "c_homework", "c_teachers"] instance=ExtResource("2_ucudl")]
offset_left = 321.0
offset_top = 115.0
offset_right = 621.0
offset_bottom = 215.0
text = "and girls don't get that."
[node name="c_backlash" parent="voice_training" instance=ExtResource("1_xrckx")]
offset_left = 691.0
offset_top = 493.0
offset_right = 991.0
offset_bottom = 713.0
text = "Despite the backlash, I protected Joyo in front of class "
[node name="p_cross_friend" parent="voice_training/c_backlash" groups=["c_Joy", "c_boy_stuff", "c_comic_heroes", "c_hit"] instance=ExtResource("2_ucudl")]
offset_left = 320.0
offset_top = 7.0
offset_right = 620.0
offset_bottom = 107.0
text = "I would never cross a friend, even if it was for my own good."
[node name="p_reward" parent="voice_training/c_backlash" groups=["c_Joy"] instance=ExtResource("2_ucudl")]
offset_left = 323.0
offset_top = 109.0
offset_right = 623.0
offset_bottom = 209.0
text = "those who put in the effort should be rewarded."
[node name="juijutsu" type="Control" parent="."]
anchors_preset = 0
offset_right = 40.0
offset_bottom = 40.0
[node name="c_body" parent="juijutsu" instance=ExtResource("1_xrckx")]
offset_left = 1332.0
offset_top = 34.0
offset_right = 1632.0
offset_bottom = 254.0
text = "my body makes me uncomfortable "
[node name="p_boobs" parent="juijutsu/c_body" groups=["c_boy_stuff"] instance=ExtResource("2_ucudl")]
offset_left = 324.0
offset_top = 16.0
offset_right = 624.0
offset_bottom = 116.0
text = "boobs are just not made for fighting."
[node name="p_fat" parent="juijutsu/c_body" instance=ExtResource("2_ucudl")]
offset_left = 327.0
offset_top = 118.0
offset_right = 627.0
offset_bottom = 218.0
text = "I despise all the fat on my hips."
[node name="c_hit" parent="juijutsu" instance=ExtResource("1_xrckx")]
offset_left = 1338.0
offset_top = 278.0
offset_right = 1638.0
offset_bottom = 498.0
text = "I know how to properly hit people "
[node name="p_confidence" parent="juijutsu/c_hit" groups=["c_Joy", "c_backlash", "c_boy_stuff", "c_comic_heroes", "c_homework"] instance=ExtResource("2_ucudl")]
offset_left = 318.0
offset_top = 13.0
offset_right = 618.0
offset_bottom = 113.0
text = "..., that gives me a lot of confidence."
[node name="p_vent" parent="juijutsu/c_hit" groups=["c_Joy", "c_backlash", "c_boy_stuff", "c_comic_heroes", "c_homework", "c_teachers"] instance=ExtResource("2_ucudl")]
offset_left = 321.0
offset_top = 115.0
offset_right = 621.0
offset_bottom = 215.0
text = "and thats a great vent."
[node name="c_void" parent="juijutsu" instance=ExtResource("1_xrckx")]
offset_left = 1338.0
offset_top = 501.0
offset_right = 1638.0
offset_bottom = 721.0
[node name="p_wet" parent="juijutsu/c_void" groups=["c_void"] instance=ExtResource("2_ucudl")]
offset_left = 320.0
offset_top = 7.0
offset_right = 620.0
offset_bottom = 107.0
text = "… I was wet, so I must have been into it."
[node name="p_stop" parent="juijutsu/c_void" groups=["c_void"] instance=ExtResource("2_ucudl")]
offset_left = 323.0
offset_top = 109.0
offset_right = 623.0
offset_bottom = 209.0
text = "… I didnt say stop."
[node name="test" type="Control" parent="."]
anchors_preset = 0
offset_left = 730.0
offset_top = -3.0
offset_right = 770.0
offset_bottom = 37.0
[node name="c_random1" parent="test" instance=ExtResource("1_xrckx")]
offset_left = 1332.0
offset_top = 34.0
offset_right = 1632.0
offset_bottom = 254.0
[node name="p_random11" parent="test/c_random1" groups=["c_boy_stuff"] instance=ExtResource("2_ucudl")]
offset_left = 324.0
offset_top = 16.0
offset_right = 624.0
offset_bottom = 116.0
text = "random 1"
[node name="p_random12" parent="test/c_random1" instance=ExtResource("2_ucudl")]
offset_left = 327.0
offset_top = 118.0
offset_right = 627.0
offset_bottom = 218.0
text = "random 1"
[node name="c_pick" parent="test" instance=ExtResource("1_xrckx")]
offset_left = 1338.0
offset_top = 278.0
offset_right = 1638.0
offset_bottom = 498.0
[node name="p_pick" parent="test/c_pick" groups=["c_Joy", "c_backlash", "c_boy_stuff", "c_comic_heroes", "c_homework"] instance=ExtResource("2_ucudl")]
offset_left = 318.0
offset_top = 13.0
offset_right = 618.0
offset_bottom = 113.0
text = "pick me 2"
[node name="p_goof" parent="test/c_pick" groups=["c_Joy", "c_backlash", "c_boy_stuff", "c_comic_heroes", "c_homework", "c_teachers"] instance=ExtResource("2_ucudl")]
offset_left = 321.0
offset_top = 115.0
offset_right = 621.0
offset_bottom = 215.0
text = "you done goofed"
[node name="c_random2" parent="test" instance=ExtResource("1_xrckx")]
offset_left = 1338.0
offset_top = 501.0
offset_right = 1638.0
offset_bottom = 721.0
[node name="p_random21" parent="test/c_random2" groups=["c_void"] instance=ExtResource("2_ucudl")]
offset_left = 320.0
offset_top = 7.0
offset_right = 620.0
offset_bottom = 107.0
text = "random 2"
[node name="p_random22" parent="test/c_random2" groups=["c_void"] instance=ExtResource("2_ucudl")]
offset_left = 323.0
offset_top = 109.0
offset_right = 623.0
offset_bottom = 209.0
text = "random 2"

View File

@ -0,0 +1,109 @@
extends CenterContainer
# Called when the node enters the scene tree for the first time.
func _ready():
$cards/card_1/AnimationPlayer.play("select")
await $cards/card_1/AnimationPlayer.animation_finished
$cards/card_1/AnimationPlayer.play("deselect")
$cards/card_2/AnimationPlayer.play("select")
await $cards/card_1/AnimationPlayer.animation_finished
$cards/card_2/AnimationPlayer.play("deselect")
$cards/card_3/AnimationPlayer.play("select")
await $cards/card_2/AnimationPlayer.animation_finished
$cards/card_3/AnimationPlayer.play("deselect")
await $cards/card_3/AnimationPlayer.animation_finished
$cards/card_1/AnimationPlayer.play("select")
await $cards/card_1/AnimationPlayer.animation_finished
$cards/card_1/AnimationPlayer.play("take")
$cards/card_2/AnimationPlayer.play("unshuffle")
$cards/card_3/AnimationPlayer.play("shuffle")
await $cards/card_3/AnimationPlayer.animation_finished
for card in $cards.get_children():
card.get_child(1).play("RESET")
$cards/card_2/AnimationPlayer.queue("select")
await $cards/card_2/AnimationPlayer.animation_finished
$cards/card_2/AnimationPlayer.play("take")
$cards/card_3/AnimationPlayer.play("unshuffle")
$cards/card_1/AnimationPlayer.play("shuffle")
await $cards/card_1/AnimationPlayer.animation_finished
for card in $cards.get_children():
card.get_child(1).play("RESET")
$cards/card_3/AnimationPlayer.queue("select")
await $cards/card_3/AnimationPlayer.animation_finished
$cards/card_3/AnimationPlayer.play("take")
$cards/card_1/AnimationPlayer.play("unshuffle")
$cards/card_2/AnimationPlayer.play("shuffle")
await $cards/card_2/AnimationPlayer.animation_finished
$postIts.show()
for card in $postIts.get_children():
card.get_child(1).play("post")
await $postIts/postIt_1/AnimationPlayer.animation_finished
$postIts/postIt_1/AnimationPlayer.play("select")
await $postIts/postIt_1/AnimationPlayer.animation_finished
$postIts/postIt_1/AnimationPlayer.play("deselect")
$postIts/postIt_2/AnimationPlayer.play("select")
await $postIts/postIt_2/AnimationPlayer.animation_finished
$postIts/postIt_2/AnimationPlayer.play("deselect")
$postIts/postIt_3/AnimationPlayer.play("select")
await $postIts/postIt_3/AnimationPlayer.animation_finished
$postIts/postIt_3/AnimationPlayer.play("deselect")
$postIts/postIt_4/AnimationPlayer.play("select")
await $postIts/postIt_4/AnimationPlayer.animation_finished
$postIts/postIt_4/AnimationPlayer.play("deselect")
$postIts/postIt_1/AnimationPlayer.play("select")
await get_tree().create_timer(1).timeout
$postIts/postIt_1/AnimationPlayer.play("pick")
$postIts/postIt_2/AnimationPlayer.play("shuffle")
$postIts/postIt_3/AnimationPlayer.play("unshuffle")
$postIts/postIt_4/AnimationPlayer.play("unshuffle")
await $postIts/postIt_2/AnimationPlayer.animation_finished
for card in $postIts.get_children():
card.get_child(1).play("post")
await $postIts/postIt_1/AnimationPlayer.animation_finished
$postIts/postIt_2/AnimationPlayer.play("select")
await get_tree().create_timer(1).timeout
$postIts/postIt_2/AnimationPlayer.play("pick")
$postIts/postIt_3/AnimationPlayer.play("shuffle")
$postIts/postIt_4/AnimationPlayer.play("unshuffle")
$postIts/postIt_1/AnimationPlayer.play("unshuffle")
await $postIts/postIt_3/AnimationPlayer.animation_finished
for card in $postIts.get_children():
card.get_child(1).play("post")
await $postIts/postIt_1/AnimationPlayer.animation_finished
$postIts/postIt_3/AnimationPlayer.play("select")
await get_tree().create_timer(1).timeout
$postIts/postIt_3/AnimationPlayer.play("pick")
$postIts/postIt_4/AnimationPlayer.play("shuffle")
$postIts/postIt_1/AnimationPlayer.play("unshuffle")
$postIts/postIt_2/AnimationPlayer.play("unshuffle")
await $postIts/postIt_4/AnimationPlayer.animation_finished
for card in $postIts.get_children():
card.get_child(1).play("post")
await $postIts/postIt_1/AnimationPlayer.animation_finished
$postIts/postIt_4/AnimationPlayer.play("select")
await get_tree().create_timer(1).timeout
$postIts/postIt_4/AnimationPlayer.play("pick")
$postIts/postIt_1/AnimationPlayer.play("shuffle")
$postIts/postIt_2/AnimationPlayer.play("unshuffle")
$postIts/postIt_3/AnimationPlayer.play("unshuffle")

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,72 @@
extends Control
const dev_board_pre = preload("res://dev-util/board of devs.tscn")
var dev_board: Control
func _ready():
dev_board = dev_board_pre.instantiate()
if $cards.get_child_count(false) > 0:
$cards.get_children(false)[0].grab_focus()
# Testing code
for item in dev_board.find_children("*"):
if item is Card:
spawn_card((item as Card).duplicate())
elif item is PostIt:
spawn_postit((item as PostIt).duplicate())
func _process(delta: float):
pass
func spawn_card(card: Card):
$cards.add_child(card)
if $cards.get_child_count(false) == 1:
$cards.get_children(false)[0].grab_focus()
populate_focus_neighbors()
func spawn_postit(postit: PostIt):
$postits.add_child(postit)
populate_focus_neighbors()
func populate_focus_neighbors():
# TODO reorder cards based on position
if $cards.get_child_count(false) <= 0:
return
var first_card = $cards.get_children(false)[0]
var first_postit = $postits.get_children(false)[0] if $postits.get_child_count(false) > 0 else first_card
var first_board_card = $mindmap.get_children(false)[0] if $mindmap.get_child_count(false) > 0 else first_card
var cards = $cards.get_children(false) as Array[Card]
for i in cards.size():
var card = cards[i]
if card == first_card or not (card is Card):
continue
card.focus_neighbor_right = first_board_card # FIXME should be a valid focusable object, but it refuses
card.focus_neighbor_left = first_postit
card.focus_neighbor_up = cards[(i - 1) % cards.size()]
card.focus_neighbor_down = cards[(i + 1) % cards.size()]
var postits = $postits.get_children(false) as Array[PostIt]
for i in postits.size():
var postit = postits[i]
if not (postit is PostIt):
continue
postit.focus_neighbor_right = first_card
postit.focus_neighbor_left = first_board_card
postit.focus_neighbor_up = postits[(i - 1) % postits.size()]
postit.focus_neighbor_down = postits[(i + 1) % postits.size()]
var board_items = $mindmap.get_children(false) as Array
for i in board_items.size():
var board_item = board_items[i]
board_item.focus_neighbor_right = first_postit
board_item.focus_neighbor_left = first_card
board_item.focus_neighbor_up = board_items[(i - 1) % board_items.size()]
board_item.focus_neighbor_down = board_items[(i + 1) % board_items.size()]

View File

@ -0,0 +1,38 @@
[gd_scene load_steps=2 format=3 uid="uid://bpk4hhck7xb8a"]
[ext_resource type="Script" path="res://logic-scenes/board/board.gd" id="1_0rxlw"]
[node name="board" type="Control"]
layout_mode = 3
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
script = ExtResource("1_0rxlw")
[node name="mindmap" type="Panel" parent="."]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
[node name="cards" type="Panel" parent="."]
custom_minimum_size = Vector2(100, 0)
layout_mode = 1
anchors_preset = 9
anchor_bottom = 1.0
offset_right = 30.0
grow_vertical = 2
[node name="postits" type="Panel" parent="."]
custom_minimum_size = Vector2(100, 0)
layout_mode = 1
anchors_preset = 11
anchor_left = 1.0
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 0
grow_vertical = 2

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 MiB

View File

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://sv0nhkkur1tt"
path="res://.godot/imported/cardsheet.png-aa9a1276947e1ea9c07388cd560d5919.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://logic-scenes/board/card-textures/cardsheet.png"
dest_files=["res://.godot/imported/cardsheet.png-aa9a1276947e1ea9c07388cd560d5919.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
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/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

Binary file not shown.

After

Width:  |  Height:  |  Size: 731 KiB

View File

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://c8ckkjmdegyis"
path="res://.godot/imported/postitsheet.png-a6afe1969b145c3d0f8e274a0a6fb36e.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://logic-scenes/board/card-textures/postitsheet.png"
dest_files=["res://.godot/imported/postitsheet.png-a6afe1969b145c3d0f8e274a0a6fb36e.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
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/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

View File

@ -0,0 +1,48 @@
@tool
extends Control
class_name Card
var compatible_postits: Array[PostIt] = []
var own_postits: Array[PostIt] = []
@export var text: String = "" :
set (value):
text = value
if is_inside_tree() or Engine.is_editor_hint():
$Label.text = value
$BackgroundSprite.frame = text.hash() % $BackgroundSprite.sprite_frames.get_frame_count($BackgroundSprite.animation)
if is_inside_tree():
$BackgroundSprite.void_active = value == ""
@export var voice_line: AudioStream = null
func _ready():
if not Engine.is_editor_hint() and is_inside_tree():
for postit in self.get_children():
if postit is PostIt: self.own_postits.append(postit as PostIt)
for postit in get_tree().get_nodes_in_group(name):
if postit is PostIt: self.compatible_postits.append(postit as PostIt)
compatible_postits.append_array(own_postits)
if own_postits.size() == 2:
own_postits[0].sibling = own_postits[1]
own_postits[1].sibling = own_postits[0]
$BackgroundSprite.frame = randi() % $BackgroundSprite.sprite_frames.get_frame_count($BackgroundSprite.animation)
$Label.text = self.text
func _process(delta: float) -> void:
pass
func replace_with(card: Card):
self.text = card.text
self.compatible_postits = card.compatible_postits
self.own_postits = card.own_postits
self.voice_line = card.voice_line
func _on_focus_entered():
print(self, "is focused")
func _on_focus_exited():
print(self, "is not focused")

View File

@ -0,0 +1,206 @@
[gd_scene load_steps=20 format=3 uid="uid://dy5rd437h5hsw"]
[ext_resource type="Script" path="res://logic-scenes/board/card.gd" id="1_emip0"]
[ext_resource type="Texture2D" uid="uid://sv0nhkkur1tt" path="res://logic-scenes/board/card-textures/cardsheet.png" id="2_ioijn"]
[ext_resource type="Texture2D" uid="uid://kpmk21d8rlso" path="res://logic-scenes/board/particle_textures/star.png" id="3_bwtbh"]
[ext_resource type="Theme" uid="uid://b056fn288p8ha" path="res://logic-scenes/themes/messy.theme" id="3_rktsa"]
[ext_resource type="Texture2D" uid="uid://bqilajx05t0eb" path="res://logic-scenes/board/particle_textures/void_nomotion.png" id="4_fwm1k"]
[sub_resource type="AtlasTexture" id="AtlasTexture_ykk13"]
atlas = ExtResource("2_ioijn")
region = Rect2(0, 0, 600, 440)
[sub_resource type="AtlasTexture" id="AtlasTexture_l43eo"]
atlas = ExtResource("2_ioijn")
region = Rect2(600, 0, 600, 440)
[sub_resource type="AtlasTexture" id="AtlasTexture_x2vcn"]
atlas = ExtResource("2_ioijn")
region = Rect2(0, 440, 600, 440)
[sub_resource type="AtlasTexture" id="AtlasTexture_e7401"]
atlas = ExtResource("2_ioijn")
region = Rect2(600, 440, 600, 440)
[sub_resource type="AtlasTexture" id="AtlasTexture_j7wh6"]
atlas = ExtResource("2_ioijn")
region = Rect2(0, 880, 600, 440)
[sub_resource type="SpriteFrames" id="SpriteFrames_ckivt"]
animations = [{
"frames": [{
"duration": 1.0,
"texture": SubResource("AtlasTexture_ykk13")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_l43eo")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_x2vcn")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_e7401")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_j7wh6")
}],
"loop": true,
"name": &"default",
"speed": 5.0
}]
[sub_resource type="GDScript" id="GDScript_8bs16"]
script/source = "extends AnimatedSprite2D
@onready var particles = $GPUParticles2D
@onready var initial_position = position
var noise_position = randf()
var noise: Noise = FastNoiseLite.new()
var void_active:
set(become_void):
if not (void_active == become_void):
if is_inside_tree():
$GPUParticles2D.is_void = become_void
$GPUParticles2D.emitting = become_void
$Sprite2D.is_void = become_void
void_active = become_void
func _process(delta):
if void_active and not State.reduce_motion:
noise_position += delta * 10
var random_position = Vector2(noise.get_noise_1d(noise_position*2), noise.get_noise_1d(-noise_position))
random_position = random_position.normalized() * pow(random_position.length()*2, 3) * 5
position = initial_position - random_position
rotation = noise.get_noise_1d(noise_position*10) * random_position.length() * 0.01
particles.position = random_position
else: position = initial_position
"
[sub_resource type="Gradient" id="Gradient_v70nd"]
interpolation_mode = 2
offsets = PackedFloat32Array(0, 0.0529197, 0.191606, 1)
colors = PackedColorArray(1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0.491329, 1, 1, 1, 0)
[sub_resource type="GradientTexture1D" id="GradientTexture1D_xxq8p"]
gradient = SubResource("Gradient_v70nd")
[sub_resource type="Curve" id="Curve_q6cmf"]
_data = [Vector2(0, 0), 0.0, 3.16529, 0, 0, Vector2(0.241056, 0.191336), 0.132446, 0.132446, 0, 0, Vector2(1, 1), 3.94797, 0.0, 0, 0]
point_count = 3
[sub_resource type="CurveTexture" id="CurveTexture_cg0w1"]
curve = SubResource("Curve_q6cmf")
[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_by44l"]
emission_shape = 6
emission_ring_axis = Vector3(0, 0, 1)
emission_ring_height = 0.0
emission_ring_radius = 180.0
emission_ring_inner_radius = 185.0
particle_flag_disable_z = true
spread = 180.0
gravity = Vector3(0, 0, 0)
initial_velocity_min = -10.0
initial_velocity_max = 10.0
angular_velocity_min = -150.0
angular_velocity_max = -150.0
orbit_velocity_min = 0.0
orbit_velocity_max = 0.0
radial_accel_min = -20.0
radial_accel_max = -5.0
tangential_accel_min = 20.0
tangential_accel_max = 30.0
scale_min = 3.0
scale_max = 5.0
scale_curve = SubResource("CurveTexture_cg0w1")
color_ramp = SubResource("GradientTexture1D_xxq8p")
turbulence_noise_strength = 0.1
attractor_interaction_enabled = false
[sub_resource type="GDScript" id="GDScript_vjwk7"]
script/source = "extends GPUParticles2D
var is_void:bool = false
func _process(_delta):
self.visible = !State.reduce_motion and is_void
"
[sub_resource type="GDScript" id="GDScript_tgc0b"]
script/source = "extends Sprite2D
var is_void:bool = false
func _process(_delta):
self.visible = State.reduce_motion and is_void
"
[node name="card" type="Control"]
layout_mode = 3
anchors_preset = 0
offset_left = -150.0
offset_top = -110.0
offset_right = 150.0
offset_bottom = 110.0
focus_mode = 2
script = ExtResource("1_emip0")
[node name="BackgroundSprite" type="AnimatedSprite2D" parent="."]
clip_children = 2
position = Vector2(150, 110)
scale = Vector2(0.6, 0.6)
sprite_frames = SubResource("SpriteFrames_ckivt")
frame = 3
script = SubResource("GDScript_8bs16")
[node name="GPUParticles2D" type="GPUParticles2D" parent="BackgroundSprite"]
visible = false
amount = 500
process_material = SubResource("ParticleProcessMaterial_by44l")
texture = ExtResource("3_bwtbh")
lifetime = 2.5
speed_scale = 1.3
explosiveness = 0.2
randomness = 0.14
local_coords = true
script = SubResource("GDScript_vjwk7")
[node name="Sprite2D" type="Sprite2D" parent="BackgroundSprite"]
visible = false
scale = Vector2(0.4, 0.4)
texture = ExtResource("4_fwm1k")
script = SubResource("GDScript_tgc0b")
[node name="Label" type="Label" parent="."]
layout_mode = 1
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -127.0
offset_top = -82.5
offset_right = 127.0
offset_bottom = 82.5
grow_horizontal = 2
grow_vertical = 2
theme = ExtResource("3_rktsa")
theme_type_variation = &"card_text"
autowrap_mode = 3
[node name="postit anchor" type="Control" parent="."]
anchors_preset = 0
offset_left = 100.0
offset_top = 148.0
offset_right = 140.0
offset_bottom = 188.0
[connection signal="focus_entered" from="." to="." method="_on_focus_entered"]
[connection signal="focus_exited" from="." to="." method="_on_focus_exited"]
[connection signal="focus_entered" from="postit anchor" to="." method="_on_postit_anchor_focus_entered"]

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://kpmk21d8rlso"
path="res://.godot/imported/star.png-cb025d5aa45574fdb1b3cdd678fdbecd.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://logic-scenes/board/particle_textures/star.png"
dest_files=["res://.godot/imported/star.png-cb025d5aa45574fdb1b3cdd678fdbecd.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
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/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

Binary file not shown.

After

Width:  |  Height:  |  Size: 151 KiB

View File

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bqilajx05t0eb"
path="res://.godot/imported/void_nomotion.png-feea4a00de7607ab1e264c944eff6917.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://logic-scenes/board/particle_textures/void_nomotion.png"
dest_files=["res://.godot/imported/void_nomotion.png-feea4a00de7607ab1e264c944eff6917.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
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/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

View File

@ -0,0 +1,31 @@
@tool
extends Control
class_name PostIt
var sibling
@export var text: String = "" :
set (value):
if is_inside_tree() or Engine.is_editor_hint():
$Label.text = value
$BackgroundSprite.frame = text.hash() % $BackgroundSprite.sprite_frames.get_frame_count($BackgroundSprite.animation)
text = value
@export var voice_line: AudioStream = null
func _ready() -> void:
$Label.text = self.text
$BackgroundSprite.frame = text.hash() % $BackgroundSprite.sprite_frames.get_frame_count($BackgroundSprite.animation)
func replace_with(postit: PostIt):
self.text = postit.text
self.voice_line = postit.voice_line
self.sibling = postit.sibling
func _process(delta: float) -> void:
pass
func _on_focus_entered():
print(self, "is focused")
func _on_focus_exited():
print(self, "is not focused")

View File

@ -0,0 +1,134 @@
[gd_scene load_steps=17 format=3 uid="uid://vkcdj8c3ytbq"]
[ext_resource type="Script" path="res://logic-scenes/board/post-it.gd" id="1_yvh5n"]
[ext_resource type="Texture2D" uid="uid://c8ckkjmdegyis" path="res://logic-scenes/board/card-textures/postitsheet.png" id="2_j17jn"]
[ext_resource type="Theme" uid="uid://b056fn288p8ha" path="res://logic-scenes/themes/messy.theme" id="3_hu2as"]
[sub_resource type="AtlasTexture" id="AtlasTexture_nj16s"]
atlas = ExtResource("2_j17jn")
region = Rect2(0, 0, 500, 220)
[sub_resource type="AtlasTexture" id="AtlasTexture_23tiq"]
atlas = ExtResource("2_j17jn")
region = Rect2(500, 0, 500, 220)
[sub_resource type="AtlasTexture" id="AtlasTexture_aomh0"]
atlas = ExtResource("2_j17jn")
region = Rect2(1000, 0, 500, 220)
[sub_resource type="AtlasTexture" id="AtlasTexture_n3svg"]
atlas = ExtResource("2_j17jn")
region = Rect2(1500, 0, 500, 220)
[sub_resource type="AtlasTexture" id="AtlasTexture_tfg7a"]
atlas = ExtResource("2_j17jn")
region = Rect2(0, 220, 500, 220)
[sub_resource type="AtlasTexture" id="AtlasTexture_dtics"]
atlas = ExtResource("2_j17jn")
region = Rect2(500, 220, 500, 220)
[sub_resource type="AtlasTexture" id="AtlasTexture_e0ocs"]
atlas = ExtResource("2_j17jn")
region = Rect2(1000, 220, 500, 220)
[sub_resource type="AtlasTexture" id="AtlasTexture_bpwg2"]
atlas = ExtResource("2_j17jn")
region = Rect2(1500, 220, 500, 220)
[sub_resource type="AtlasTexture" id="AtlasTexture_xaxol"]
atlas = ExtResource("2_j17jn")
region = Rect2(0, 440, 500, 220)
[sub_resource type="AtlasTexture" id="AtlasTexture_ifitb"]
atlas = ExtResource("2_j17jn")
region = Rect2(500, 440, 500, 220)
[sub_resource type="AtlasTexture" id="AtlasTexture_6slhe"]
atlas = ExtResource("2_j17jn")
region = Rect2(1000, 440, 500, 220)
[sub_resource type="AtlasTexture" id="AtlasTexture_4tk5m"]
atlas = ExtResource("2_j17jn")
region = Rect2(1500, 440, 500, 220)
[sub_resource type="SpriteFrames" id="SpriteFrames_2amsi"]
animations = [{
"frames": [{
"duration": 1.0,
"texture": SubResource("AtlasTexture_nj16s")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_23tiq")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_aomh0")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_n3svg")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_tfg7a")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_dtics")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_e0ocs")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_bpwg2")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_xaxol")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_ifitb")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_6slhe")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_4tk5m")
}],
"loop": true,
"name": &"default",
"speed": 5.0
}]
[node name="post-it" type="Control"]
layout_mode = 3
anchors_preset = 0
offset_left = -150.0
offset_top = -50.0
offset_right = 150.0
offset_bottom = 50.0
focus_mode = 2
script = ExtResource("1_yvh5n")
[node name="BackgroundSprite" type="AnimatedSprite2D" parent="."]
position = Vector2(150, 50)
scale = Vector2(0.65, 0.65)
sprite_frames = SubResource("SpriteFrames_2amsi")
frame = 5
[node name="Label" type="Label" parent="."]
layout_mode = 1
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -139.5
offset_top = -50.0
offset_right = 137.5
offset_bottom = 47.0
grow_horizontal = 2
grow_vertical = 2
theme = ExtResource("3_hu2as")
theme_type_variation = &"card_text"
vertical_alignment = 1
autowrap_mode = 3
[connection signal="focus_entered" from="." to="." method="_on_focus_entered"]
[connection signal="focus_exited" from="." to="." method="_on_focus_exited"]

View File

@ -0,0 +1,28 @@
[gd_resource type="VisualShader" load_steps=2 format=3 uid="uid://bwjioe14xggin"]
[sub_resource type="VisualShaderNodeInput" id="VisualShaderNodeInput_i5j4e"]
output_port_for_preview = 0
input_name = "color"
[resource]
code = "shader_type canvas_item;
void fragment() {
// Input:2
vec4 n_out2p0 = COLOR;
// Output:0
COLOR.rgb = vec3(n_out2p0.xyz);
}
"
graph_offset = Vector2(-496.091, 53.946)
mode = 1
flags/light_only = false
nodes/fragment/2/node = SubResource("VisualShaderNodeInput_i5j4e")
nodes/fragment/2/position = Vector2(-60, 180)
nodes/fragment/connections = PackedInt32Array(2, 0, 0, 0)

View File

@ -0,0 +1,203 @@
[gd_scene load_steps=20 format=3 uid="uid://dp4eps03igd3w"]
[ext_resource type="Script" path="res://logic-scenes/board/card.gd" id="1_6ceun"]
[ext_resource type="Texture2D" uid="uid://sv0nhkkur1tt" path="res://logic-scenes/board/card-textures/cardsheet.png" id="2_buevv"]
[ext_resource type="Texture2D" uid="uid://kpmk21d8rlso" path="res://logic-scenes/board/particle_textures/star.png" id="3_8wu8j"]
[ext_resource type="Theme" uid="uid://b056fn288p8ha" path="res://logic-scenes/themes/messy.theme" id="3_mi4ah"]
[ext_resource type="Texture2D" uid="uid://bqilajx05t0eb" path="res://logic-scenes/board/particle_textures/void_nomotion.png" id="4_jam8u"]
[sub_resource type="AtlasTexture" id="AtlasTexture_ykk13"]
atlas = ExtResource("2_buevv")
region = Rect2(0, 0, 600, 440)
[sub_resource type="AtlasTexture" id="AtlasTexture_l43eo"]
atlas = ExtResource("2_buevv")
region = Rect2(600, 0, 600, 440)
[sub_resource type="AtlasTexture" id="AtlasTexture_x2vcn"]
atlas = ExtResource("2_buevv")
region = Rect2(0, 440, 600, 440)
[sub_resource type="AtlasTexture" id="AtlasTexture_e7401"]
atlas = ExtResource("2_buevv")
region = Rect2(600, 440, 600, 440)
[sub_resource type="AtlasTexture" id="AtlasTexture_j7wh6"]
atlas = ExtResource("2_buevv")
region = Rect2(0, 880, 600, 440)
[sub_resource type="SpriteFrames" id="SpriteFrames_ckivt"]
animations = [{
"frames": [{
"duration": 1.0,
"texture": SubResource("AtlasTexture_ykk13")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_l43eo")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_x2vcn")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_e7401")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_j7wh6")
}],
"loop": true,
"name": &"default",
"speed": 5.0
}]
[sub_resource type="GDScript" id="GDScript_8bs16"]
script/source = "extends AnimatedSprite2D
@onready var particles = $GPUParticles2D
@onready var initial_position = position
var noise_position = randf()
var noise: Noise = FastNoiseLite.new()
var void_active:
set(become_void):
if not (void_active == become_void):
if is_inside_tree():
$GPUParticles2D.is_void = become_void
$GPUParticles2D.emitting = become_void
$Sprite2D.is_void = become_void
void_active = become_void
func _process(delta):
if void_active and not State.reduce_motion:
noise_position += delta * 10
var random_position = Vector2(noise.get_noise_1d(noise_position*2), noise.get_noise_1d(-noise_position))
random_position = random_position.normalized() * pow(random_position.length()*2, 3) * 5
position = initial_position - random_position
rotation = noise.get_noise_1d(noise_position*10) * random_position.length() * 0.01
particles.position = random_position
else: position = initial_position
"
[sub_resource type="Gradient" id="Gradient_v70nd"]
interpolation_mode = 2
offsets = PackedFloat32Array(0, 0.0529197, 0.191606, 1)
colors = PackedColorArray(1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0.491329, 1, 1, 1, 0)
[sub_resource type="GradientTexture1D" id="GradientTexture1D_xxq8p"]
gradient = SubResource("Gradient_v70nd")
[sub_resource type="Curve" id="Curve_q6cmf"]
_data = [Vector2(0, 0), 0.0, 3.16529, 0, 0, Vector2(0.241056, 0.191336), 0.132446, 0.132446, 0, 0, Vector2(1, 1), 3.94797, 0.0, 0, 0]
point_count = 3
[sub_resource type="CurveTexture" id="CurveTexture_cg0w1"]
curve = SubResource("Curve_q6cmf")
[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_by44l"]
emission_shape = 6
emission_ring_axis = Vector3(0, 0, 1)
emission_ring_height = 0.0
emission_ring_radius = 180.0
emission_ring_inner_radius = 185.0
particle_flag_disable_z = true
spread = 180.0
gravity = Vector3(0, 0, 0)
initial_velocity_min = -10.0
initial_velocity_max = 10.0
angular_velocity_min = -150.0
angular_velocity_max = -150.0
orbit_velocity_min = 0.0
orbit_velocity_max = 0.0
radial_accel_min = -20.0
radial_accel_max = -5.0
tangential_accel_min = 20.0
tangential_accel_max = 30.0
scale_min = 1.5
scale_max = 3.0
scale_curve = SubResource("CurveTexture_cg0w1")
color_ramp = SubResource("GradientTexture1D_xxq8p")
turbulence_noise_strength = 0.1
attractor_interaction_enabled = false
[sub_resource type="GDScript" id="GDScript_vjwk7"]
script/source = "extends GPUParticles2D
var is_void:bool = false
func _process(_delta):
self.visible = !State.reduce_motion and is_void
"
[sub_resource type="GDScript" id="GDScript_tgc0b"]
script/source = "extends Sprite2D
var is_void:bool = false
func _process(_delta):
self.visible = State.reduce_motion and is_void
"
[node name="card" type="Control"]
layout_mode = 3
anchors_preset = 0
offset_left = -150.0
offset_top = -110.0
offset_right = 150.0
offset_bottom = 110.0
focus_mode = 2
script = ExtResource("1_6ceun")
[node name="BackgroundSprite" type="AnimatedSprite2D" parent="."]
clip_children = 2
position = Vector2(150, 110)
scale = Vector2(0.6, 0.6)
sprite_frames = SubResource("SpriteFrames_ckivt")
script = SubResource("GDScript_8bs16")
[node name="GPUParticles2D" type="GPUParticles2D" parent="BackgroundSprite"]
amount = 500
process_material = SubResource("ParticleProcessMaterial_by44l")
texture = ExtResource("3_8wu8j")
lifetime = 2.5
speed_scale = 1.3
explosiveness = 0.2
randomness = 0.14
script = SubResource("GDScript_vjwk7")
[node name="Sprite2D" type="Sprite2D" parent="BackgroundSprite"]
visible = false
scale = Vector2(0.4, 0.4)
texture = ExtResource("4_jam8u")
script = SubResource("GDScript_tgc0b")
[node name="Label" type="Label" parent="."]
layout_mode = 1
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -127.0
offset_top = -82.5
offset_right = 127.0
offset_bottom = 82.5
grow_horizontal = 2
grow_vertical = 2
theme = ExtResource("3_mi4ah")
theme_type_variation = &"card_text"
autowrap_mode = 3
[node name="postit anchor" type="Control" parent="."]
anchors_preset = 0
offset_left = 100.0
offset_top = 148.0
offset_right = 140.0
offset_bottom = 188.0
[connection signal="focus_entered" from="." to="." method="_on_focus_entered"]
[connection signal="focus_exited" from="." to="." method="_on_focus_exited"]
[connection signal="focus_entered" from="postit anchor" to="." method="_on_postit_anchor_focus_entered"]

View File

@ -0,0 +1,118 @@
extends CenterContainer
enum {
INI,
CARDS,
TRANSITION,
POSTS,
DONE
}
@onready var debug_board:Control = $"board of devs"
var selection_state
var anim_players:Array
var curr_selection_id: int = -1:
set(new_id):
if selection_state == CARDS or selection_state == POSTS:
if not curr_selection_id == -1: anim_players[curr_selection_id].play("deselect")
if new_id > options.size() -1: curr_selection_id = 0
elif new_id < 0: curr_selection_id = options.size() - 1
else: curr_selection_id = new_id
anim_players[curr_selection_id].play("select")
else:
curr_selection_id = new_id
print(curr_selection_id)
var output:Array
var options:Array
# Called when the node enters the scene tree for the first time.
func _ready():
var card_controls = $cards.get_children()
for control in card_controls:
options.append(control.get_child(1))
anim_players.append(control.get_child(0))
selection_state = CARDS
fill_card_slots()
func fill_card_slots():
for i in range($cards.get_child_count()):
var card:Card = $cards.get_child(i).get_child(1)
card.replace_with(debug_board.get_child(2).get_child(i) as Card)
func fill_post_slots():
var post_its: Array[PostIt] = []
for card in output:
post_its.append_array(card.own_postits)
print(card.own_postits)
for i in range(post_its.size()):
options[i].replace_with(post_its[i])
func _unhandled_input(event):
if event.is_action_pressed("ui_up") or event.is_action_pressed("ui_left") or event.is_action_pressed("ui_focus_next"):
curr_selection_id -= 1
elif event.is_action_pressed("ui_down") or event.is_action_pressed("ui_right") or event.is_action_pressed("ui_focus_prev"):
curr_selection_id += 1
if event.is_action_pressed("ui_accept"):
pick(curr_selection_id)
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta):
pass
func pick(id: int):
print("meep")
if id == -1:
curr_selection_id = 0
return
anim_players[id].play("pick")
var yield_to = anim_players[id].animation_finished
output.append(options[id])
var sibling_id = -1
if selection_state == POSTS:
sibling_id = options.find(options[id].sibling)
print("yeet sibling ", sibling_id)
options.remove_at(id)
anim_players.remove_at(id)
randomize()
var winning_id = randi() % options.size()
print("Winning ID ", id)
if winning_id == sibling_id:
winning_id = (winning_id + 1) % options.size()
output.append(options.pop_at(winning_id))
anim_players.pop_at(winning_id).play("shuffle")
for anim in anim_players:
anim.play("unshuffle")
await yield_to
if selection_state == CARDS:
selection_state = TRANSITION
options = []
anim_players = []
for control in $postIts.get_children():
options.append(control.get_child(1))
anim_players.append(control.get_child(0))
control.get_child(0).play("post")
curr_selection_id = -1
fill_post_slots()
await anim_players[0].animation_finished
selection_state = POSTS

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

Binary file not shown.

View File

@ -32,6 +32,10 @@ window/stretch/mode="canvas_items"
window/stretch/aspect="expand"
mouse_cursor/custom_image="res://import/interface-elements/cursor.png"
[gui]
theme/custom="res://logic-scenes/themes/messy.theme"
[input]
player_right={