diff --git a/assets/find_a_couple/back.png b/assets/find_a_couple/back.png new file mode 100644 index 0000000..b223292 Binary files /dev/null and b/assets/find_a_couple/back.png differ diff --git a/assets/find_a_couple/back.png.import b/assets/find_a_couple/back.png.import new file mode 100644 index 0000000..fdb6003 --- /dev/null +++ b/assets/find_a_couple/back.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://yn1hkayub20t" +path="res://.godot/imported/back.png-9c1d1174dcba7f216de8d82a9ffb21e5.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/find_a_couple/back.png" +dest_files=["res://.godot/imported/back.png-9c1d1174dcba7f216de8d82a9ffb21e5.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 diff --git a/assets/find_a_couple/envelope.png b/assets/find_a_couple/envelope.png index 8d69266..27df106 100644 Binary files a/assets/find_a_couple/envelope.png and b/assets/find_a_couple/envelope.png differ diff --git a/scenes/find_a_couple/level.tscn b/scenes/find_a_couple/level.tscn index ef67359..5eaef95 100644 --- a/scenes/find_a_couple/level.tscn +++ b/scenes/find_a_couple/level.tscn @@ -1,34 +1,11 @@ -[gd_scene load_steps=2 format=3 uid="uid://cignc2wdaxuro"] +[gd_scene load_steps=3 format=3 uid="uid://b2u1412b6fugp"] -[ext_resource type="PackedScene" uid="uid://blfx4g52uaopo" path="res://scenes/find_a_couple/tile.tscn" id="1_hr0pl"] +[ext_resource type="PackedScene" uid="uid://cignc2wdaxuro" path="res://scenes/find_a_couple/level_handler.tscn" id="1_hr0pl"] +[ext_resource type="PackedScene" uid="uid://blfx4g52uaopo" path="res://scenes/find_a_couple/tile.tscn" id="2_0am66"] -[node name="Control" type="Control"] -layout_mode = 3 -anchors_preset = 15 -anchor_right = 1.0 -anchor_bottom = 1.0 -grow_horizontal = 2 -grow_vertical = 2 +[node name="Level" type="Node2D"] -[node name="ColorRect" type="ColorRect" parent="."] -layout_mode = 0 -offset_right = 1280.0 -offset_bottom = 720.0 -color = Color(0.787759, 0.787759, 0.787759, 1) +[node name="Control" parent="." instance=ExtResource("1_hr0pl")] -[node name="Label" type="Label" parent="."] -layout_mode = 0 -offset_right = 99.0 -offset_bottom = 69.0 -theme_override_font_sizes/font_size = 50 -text = "1:00" -horizontal_alignment = 1 -vertical_alignment = 1 -justification_flags = 162 - -[node name="Button" parent="." instance=ExtResource("1_hr0pl")] -layout_mode = 0 -offset_left = 519.0 -offset_top = 298.0 -offset_right = 669.0 -offset_bottom = 448.0 +[node name="Tile" parent="." instance=ExtResource("2_0am66")] +position = Vector2(239, 223) diff --git a/scenes/find_a_couple/level_handler.tscn b/scenes/find_a_couple/level_handler.tscn new file mode 100644 index 0000000..2c9d9e0 --- /dev/null +++ b/scenes/find_a_couple/level_handler.tscn @@ -0,0 +1,27 @@ +[gd_scene format=3 uid="uid://cignc2wdaxuro"] + +[node name="Control" type="Control"] +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +mouse_filter = 1 + +[node name="ColorRect" type="ColorRect" parent="."] +layout_mode = 0 +offset_right = 1280.0 +offset_bottom = 720.0 +mouse_filter = 1 +color = Color(0.787759, 0.787759, 0.787759, 1) + +[node name="Label" type="Label" parent="."] +layout_mode = 0 +offset_right = 99.0 +offset_bottom = 69.0 +theme_override_font_sizes/font_size = 50 +text = "1:00" +horizontal_alignment = 1 +vertical_alignment = 1 +justification_flags = 162 diff --git a/scenes/find_a_couple/tile.gd b/scenes/find_a_couple/tile.gd index f4d57bb..b6d9ceb 100644 --- a/scenes/find_a_couple/tile.gd +++ b/scenes/find_a_couple/tile.gd @@ -1,16 +1,52 @@ -extends Button +extends Area2D -@onready var image := $Image +signal tile_clicked(tile) + +@export var front_texture: Texture2D # Изображение на лицевой стороне +@export var back_texture: Texture2D # Изображение на обратной стороне +@export var flip_duration: float = 0.3 # Длительность анимации переворота + +@onready var sprite = $Sprite2D +@onready var timer = $Timer + +var is_flipped: bool = false +var can_click: bool = true -# Called when the node enters the scene tree for the first time. func _ready() -> void: - pass # Replace with function body. + sprite.texture = back_texture + +func _on_input_event(viewport: Node, event: InputEvent, shape_idx: int) -> void: + if not can_click: return + if event is InputEventMouseButton and event.pressed and event.button_index == MOUSE_BUTTON_LEFT: + emit_signal ("tile_clicked", self) + flip_tile() + +func flip_tile(): + is_flipped = true + can_click = false + + # Анимация переворота + var tween = create_tween() + tween.tween_property(self, "scale:x", 0.0, flip_duration/2) + tween.tween_callback(_change_texture) + tween.tween_property(self, "scale:x", 1.0, flip_duration/2) + timer.start() + +func _change_texture(): + sprite.texture = front_texture if is_flipped else back_texture + +func hide_tile(): + is_flipped = false + + var tween = create_tween() + tween.tween_property(self, "scale:x", 0.0, flip_duration/2) + tween.tween_callback(_change_texture) + tween.tween_property(self, "scale:x", 1.0, flip_duration/2) + tween.tween_callback(_enable_click) + +func _enable_click(): + can_click = true -# Called every frame. 'delta' is the elapsed time since the previous frame. -func _process(delta: float) -> void: - pass - - -func _on_pressed() -> void: - image.show() +func _on_timer_timeout() -> void: + hide_tile() diff --git a/scenes/find_a_couple/tile.tscn b/scenes/find_a_couple/tile.tscn index cade03c..892b198 100644 --- a/scenes/find_a_couple/tile.tscn +++ b/scenes/find_a_couple/tile.tscn @@ -1,28 +1,26 @@ -[gd_scene load_steps=4 format=3 uid="uid://blfx4g52uaopo"] +[gd_scene load_steps=5 format=3 uid="uid://blfx4g52uaopo"] [ext_resource type="Texture2D" uid="uid://bsj2xqsrkncfw" path="res://assets/find_a_couple/envelope.png" id="1_dgwjn"] [ext_resource type="Script" uid="uid://c6slf3hspqeef" path="res://scenes/find_a_couple/tile.gd" id="1_kwys0"] +[ext_resource type="Texture2D" uid="uid://yn1hkayub20t" path="res://assets/find_a_couple/back.png" id="2_npifk"] -[sub_resource type="AtlasTexture" id="AtlasTexture_kwys0"] -atlas = ExtResource("1_dgwjn") -region = Rect2(0, 0, 512, 512) +[sub_resource type="RectangleShape2D" id="RectangleShape2D_npifk"] +size = Vector2(102, 102) -[node name="Button" type="Button"] -offset_left = 428.0 -offset_top = 300.0 -offset_right = 578.0 -offset_bottom = 450.0 +[node name="Tile" type="Area2D"] script = ExtResource("1_kwys0") +front_texture = ExtResource("1_dgwjn") +back_texture = ExtResource("2_npifk") -[node name="Image" type="TextureRect" parent="."] -visible = false -layout_mode = 0 -offset_left = 25.0 -offset_top = 25.0 -offset_right = 125.0 -offset_bottom = 125.0 -texture = SubResource("AtlasTexture_kwys0") -expand_mode = 1 -stretch_mode = 5 +[node name="CollisionShape2D" type="CollisionShape2D" parent="."] +shape = SubResource("RectangleShape2D_npifk") -[connection signal="pressed" from="." to="." method="_on_pressed"] +[node name="Sprite2D" type="Sprite2D" parent="."] +scale = Vector2(0.2, 0.2) +texture = ExtResource("1_dgwjn") + +[node name="Timer" type="Timer" parent="."] +one_shot = true + +[connection signal="input_event" from="." to="." method="_on_input_event"] +[connection signal="timeout" from="Timer" to="." method="_on_timer_timeout"]