diff --git a/Callbacks.cpp b/Callbacks.cpp deleted file mode 100644 index 6d10a4a..0000000 --- a/Callbacks.cpp +++ /dev/null @@ -1,25 +0,0 @@ -#include "Callbacks.h" -#include - -#include "Game.h" - - -void errorCallback(int error, const char* description) { - fputs(description, stderr); -} - -void keyCallback(GLFWwindow* window, int key, int scancode, int action, int mods) { - Game& game = Game::getInstance(); - game.m_textArea.keyInput(key, scancode, action, mods); -} - -void charCallback(GLFWwindow* window, unsigned int codepoint) { - Game& game = Game::getInstance(); - game.m_textArea.charInput(codepoint); -} - -void windowResizeCallback(GLFWwindow* window, int width, int height) { - if (height == 0) return; - glViewport(0, 0, width, height); -} - diff --git a/Callbacks.h b/Callbacks.h deleted file mode 100644 index 402a524..0000000 --- a/Callbacks.h +++ /dev/null @@ -1,13 +0,0 @@ -#pragma once - -#include -#include - - -void errorCallback(int error, const char* description); - -void keyCallback(GLFWwindow* window, int key, int scancode, int action, int mods); - -void charCallback(GLFWwindow* window, unsigned int codepoint); - -void windowResizeCallback(GLFWwindow* window, int width, int height); \ No newline at end of file diff --git a/Code/.gitattributes b/Code/.gitattributes new file mode 100644 index 0000000..8ad74f7 --- /dev/null +++ b/Code/.gitattributes @@ -0,0 +1,2 @@ +# Normalize EOL for all files that Git considers text files. +* text=auto eol=lf diff --git a/Code/.gitignore b/Code/.gitignore new file mode 100644 index 0000000..4709183 --- /dev/null +++ b/Code/.gitignore @@ -0,0 +1,2 @@ +# Godot 4+ specific ignores +.godot/ diff --git a/Code/End.tscn b/Code/End.tscn new file mode 100644 index 0000000..40cd592 --- /dev/null +++ b/Code/End.tscn @@ -0,0 +1,18 @@ +[gd_scene load_steps=3 format=3 uid="uid://deb7q6h0om8hc"] + +[ext_resource type="Texture2D" uid="uid://cbl4hf0ywmhvl" path="res://art/tiles/tiles.png" id="1_rogvg"] + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_xu2hy"] +size = Vector2(16, 16) + +[node name="Platform" type="Area2D"] +z_index = -1 +collision_mask = 2 + +[node name="Sprite2D" type="Sprite2D" parent="."] +texture = ExtResource("1_rogvg") +hframes = 5 +frame = 4 + +[node name="CollisionShape2D" type="CollisionShape2D" parent="."] +shape = SubResource("RectangleShape2D_xu2hy") diff --git a/Code/GameManager.gd b/Code/GameManager.gd new file mode 100644 index 0000000..1ca70fb --- /dev/null +++ b/Code/GameManager.gd @@ -0,0 +1,61 @@ +extends Node + +@onready var platforms = get_tree().get_nodes_in_group("platforms") +@onready var boxes = get_tree().get_nodes_in_group("boxes") + +var all_platforms = [] + +func _ready(): + # Initialize platforms and boxes + _initialize_platforms() + _initialize_boxes() + +func _initialize_platforms(): + all_platforms.clear() + for platform in platforms: + all_platforms.append({ + "platform": platform, + "occupied": false + }) + +func get_occupied_platforms_count(): + var occupied_count = 0 + for platform_dict in all_platforms: + if platform_dict["occupied"] == true: + occupied_count += 1 + return occupied_count + +func _initialize_boxes(): + # Ensure boxes are initialized after they are added to the scene + for box in boxes: + box.connect("on_platform_sig", Callable(self, "_on_box_moved_in")) + box.connect("out_platform_sig", Callable(self, "_on_box_moved_out")) + +func _on_box_moved_in(platform): + _check_all_platforms_occupied(platform) + +func _on_box_moved_out(platform): + for platform_info in all_platforms: + if platform_info["platform"] == platform: + platform_info["occupied"] = false + print("Updated platform state:", platform) + break + +func _check_all_platforms_occupied(platform): + for platform_info in all_platforms: + if platform_info["platform"] == platform: + platform_info["occupied"] = true + print("Updated platform state:", platform_info) + break + + var all_occupied = true + for platform_info in all_platforms: + if not platform_info["occupied"]: + all_occupied = false + break + +func _load_next_level(): + print("All platforms are occupied! Loading next level...") + var next_level_path = "res://levels/level_1.tscn" + if ResourceLoader.exists(next_level_path): + get_tree().change_scene_to_file(next_level_path) diff --git a/Code/GameManager.tscn b/Code/GameManager.tscn new file mode 100644 index 0000000..1ff919a --- /dev/null +++ b/Code/GameManager.tscn @@ -0,0 +1,6 @@ +[gd_scene load_steps=2 format=3 uid="uid://5q5c8pt7mew2"] + +[ext_resource type="Script" path="res://GameManager.gd" id="1_apusa"] + +[node name="GameManager" type="Node"] +script = ExtResource("1_apusa") diff --git a/Code/TileMap.gd b/Code/TileMap.gd new file mode 100644 index 0000000..474d718 --- /dev/null +++ b/Code/TileMap.gd @@ -0,0 +1,12 @@ +extends TileMap + +var GridSize = 16 +var Dic = {} + +# Called when the node enters the scene tree for the first time. +func _ready(): + pass + +# Called every frame. 'delta' is the elapsed time since the previous frame. +func _process(_delta): + pass diff --git a/Code/art/character_base_16x16.png b/Code/art/character_base_16x16.png new file mode 100644 index 0000000..ae443de Binary files /dev/null and b/Code/art/character_base_16x16.png differ diff --git a/Code/art/character_base_16x16.png.import b/Code/art/character_base_16x16.png.import new file mode 100644 index 0000000..61078be --- /dev/null +++ b/Code/art/character_base_16x16.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dn2kohmjttj4x" +path="res://.godot/imported/character_base_16x16.png-d0ca1337e67dbc2edda1321d0812f200.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://art/character_base_16x16.png" +dest_files=["res://.godot/imported/character_base_16x16.png-d0ca1337e67dbc2edda1321d0812f200.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/Code/art/guard_white_spritesheet.png b/Code/art/guard_white_spritesheet.png new file mode 100644 index 0000000..1223791 Binary files /dev/null and b/Code/art/guard_white_spritesheet.png differ diff --git a/Code/art/guard_white_spritesheet.png.import b/Code/art/guard_white_spritesheet.png.import new file mode 100644 index 0000000..2b6b5c1 --- /dev/null +++ b/Code/art/guard_white_spritesheet.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://baficnup6ijqj" +path="res://.godot/imported/guard_white_spritesheet.png-46984e5542eb456a542bba799d88a295.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://art/guard_white_spritesheet.png" +dest_files=["res://.godot/imported/guard_white_spritesheet.png-46984e5542eb456a542bba799d88a295.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/Code/art/robot_atlas.png.import b/Code/art/robot_atlas.png.import new file mode 100644 index 0000000..d888b2b --- /dev/null +++ b/Code/art/robot_atlas.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://os7624ctmhq3" +path="res://.godot/imported/robot_atlas.png-4ab4b4dbdf78ee7f440d01daa2a63cc1.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://art/robot_atlas.png" +dest_files=["res://.godot/imported/robot_atlas.png-4ab4b4dbdf78ee7f440d01daa2a63cc1.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/Code/art/tiles/boxes.png b/Code/art/tiles/boxes.png new file mode 100644 index 0000000..50e73ec Binary files /dev/null and b/Code/art/tiles/boxes.png differ diff --git a/Code/art/tiles/boxes.png.import b/Code/art/tiles/boxes.png.import new file mode 100644 index 0000000..c3e68d2 --- /dev/null +++ b/Code/art/tiles/boxes.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://qjc32syn3dc3" +path="res://.godot/imported/boxes.png-d6f585b944880e561f53fb5e334888d4.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://art/tiles/boxes.png" +dest_files=["res://.godot/imported/boxes.png-d6f585b944880e561f53fb5e334888d4.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/Code/art/tiles/robot_atlas.png b/Code/art/tiles/robot_atlas.png new file mode 100644 index 0000000..617b916 Binary files /dev/null and b/Code/art/tiles/robot_atlas.png differ diff --git a/Code/art/tiles/robot_atlas.png.import b/Code/art/tiles/robot_atlas.png.import new file mode 100644 index 0000000..74e1122 --- /dev/null +++ b/Code/art/tiles/robot_atlas.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://buebn1dqinyin" +path="res://.godot/imported/robot_atlas.png-aafbcbb2c6659dc8c261af26a5ca09c9.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://art/tiles/robot_atlas.png" +dest_files=["res://.godot/imported/robot_atlas.png-aafbcbb2c6659dc8c261af26a5ca09c9.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/Code/art/tiles/tiles.png b/Code/art/tiles/tiles.png new file mode 100644 index 0000000..1764c93 Binary files /dev/null and b/Code/art/tiles/tiles.png differ diff --git a/Code/art/tiles/tiles.png.import b/Code/art/tiles/tiles.png.import new file mode 100644 index 0000000..0504444 --- /dev/null +++ b/Code/art/tiles/tiles.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cbl4hf0ywmhvl" +path="res://.godot/imported/tiles.png-e6a472d3e230306ae38f0521431a443d.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://art/tiles/tiles.png" +dest_files=["res://.godot/imported/tiles.png-e6a472d3e230306ae38f0521431a443d.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/Code/art/tiles/walls.png b/Code/art/tiles/walls.png new file mode 100644 index 0000000..99bee97 Binary files /dev/null and b/Code/art/tiles/walls.png differ diff --git a/Code/art/tiles/walls.png.import b/Code/art/tiles/walls.png.import new file mode 100644 index 0000000..374e94a --- /dev/null +++ b/Code/art/tiles/walls.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dqryivwwhqd0x" +path="res://.godot/imported/walls.png-c2e70823bc5348921734c4818ddbcb76.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://art/tiles/walls.png" +dest_files=["res://.godot/imported/walls.png-c2e70823bc5348921734c4818ddbcb76.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/Code/art/tiles/water.png b/Code/art/tiles/water.png new file mode 100644 index 0000000..eac8f4c Binary files /dev/null and b/Code/art/tiles/water.png differ diff --git a/Code/art/tiles/water.png.import b/Code/art/tiles/water.png.import new file mode 100644 index 0000000..1e632a8 --- /dev/null +++ b/Code/art/tiles/water.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dwsmec5b5rj0y" +path="res://.godot/imported/water.png-c32fc6ff4421e2fd71ae2d0698068939.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://art/tiles/water.png" +dest_files=["res://.godot/imported/water.png-c32fc6ff4421e2fd71ae2d0698068939.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/Code/box.gd b/Code/box.gd new file mode 100644 index 0000000..0997a9e --- /dev/null +++ b/Code/box.gd @@ -0,0 +1,69 @@ +extends CharacterBody2D + +@onready var interaction_area: InteractionArea = $InteractionArea +@onready var sprite = $Sprite2D +@onready var player = get_tree().get_first_node_in_group("player") +@onready var area2d = $Area2D # Reference to the Area2D node + +var tile_size = Vector2(16, 16) +var on_platform = null +var previous_position = Vector2.ZERO # Initialize with a default value +signal position_changed +signal on_platform_sig +signal out_platform_sig +signal push_result(result: bool) + +func _ready(): + add_to_group("box") + interaction_area.interact = Callable(self, "_on_interact") + interaction_area.can_interact = Callable(self, "_on_can_interact") + previous_position = position + area2d.connect("area_exited", Callable(self, "_on_area_exited")) + area2d.connect("area_entered", Callable(self, "_on_area_entered")) + + +func _process(delta): + # Detect if position has changed + if position != previous_position: + emit_signal("position_changed") + previous_position = position + +func _on_interact(): + if _on_can_interact(): + var direction = (position - player.position).normalized() + direction.x = round(direction.x) + direction.y = round(direction.y) + var new_position = position + direction * tile_size + position = new_position + emit_signal("position_changed") + +func _on_can_interact() -> bool: + var direction_to_box = (position - player.position).normalized() + var player_facing_direction = player.facing.normalized() + var is_next_to_box = abs(player.position.x - position.x) <= (tile_size.x * 1.5) and abs(player.position.y - position.y) <= (tile_size.y * 1.5) + if !is_next_to_box: + print(abs(player.position.x - position.x)) + print(abs(player.position.y - position.y)) + + var is_facing_box = direction_to_box.dot(player_facing_direction) > 0.9 + var can_interact = is_next_to_box and is_facing_box + emit_signal("push_result", can_interact) # Emit result when checking if the box can be pushed + return can_interact + +func _on_area_entered(area): + if area.is_in_group("platforms"): + call_deferred("_handle_area_entered", area) + +func _handle_area_entered(area): + on_platform = area + print("Box is on the platform!") + emit_signal("on_platform_sig", area) + +func _on_area_exited(area): + if area.is_in_group("platforms"): + print("Box has left the platform!") + emit_signal("out_platform_sig", on_platform) + on_platform = null + + + diff --git a/Code/box.tscn b/Code/box.tscn new file mode 100644 index 0000000..895bc38 --- /dev/null +++ b/Code/box.tscn @@ -0,0 +1,43 @@ +[gd_scene load_steps=6 format=3 uid="uid://vb8lfikq5dc7"] + +[ext_resource type="Texture2D" uid="uid://qjc32syn3dc3" path="res://art/tiles/boxes.png" id="1_1ui2s"] +[ext_resource type="Script" path="res://box.gd" id="1_cn5ge"] +[ext_resource type="PackedScene" uid="uid://diywhsmnxkx8p" path="res://interaction/interaction area/interaction_area.tscn" id="2_p31mp"] + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_1ewkg"] +size = Vector2(16, 16) + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_sp45l"] +size = Vector2(1, 24) + +[node name="Box" type="CharacterBody2D" groups=["boxes"]] +z_index = 1 +disable_mode = 2 +collision_layer = 2 +script = ExtResource("1_cn5ge") + +[node name="Sprite2D" type="Sprite2D" parent="."] +texture = ExtResource("1_1ui2s") +hframes = 2 +vframes = 2 + +[node name="Area2D" type="Area2D" parent="."] + +[node name="CollisionShape2D" type="CollisionShape2D" parent="Area2D"] +shape = SubResource("RectangleShape2D_1ewkg") + +[node name="InteractionArea" parent="." instance=ExtResource("2_p31mp")] +collision_mask = 8 +action_name = "pick_up" + +[node name="CollisionShape2D" type="CollisionShape2D" parent="InteractionArea"] +position = Vector2(0, 0.5) +shape = SubResource("RectangleShape2D_sp45l") + +[node name="CollisionShape2D2" type="CollisionShape2D" parent="InteractionArea"] +position = Vector2(0, 0.5) +rotation = 1.5708 +shape = SubResource("RectangleShape2D_sp45l") + +[connection signal="area_entered" from="Area2D" to="." method="_on_area_2d_area_entered"] +[connection signal="area_exited" from="Area2D" to="." method="_on_area_2d_area_exited"] diff --git a/Code/character.tscn b/Code/character.tscn new file mode 100644 index 0000000..e2ed743 --- /dev/null +++ b/Code/character.tscn @@ -0,0 +1,113 @@ +[gd_scene load_steps=9 format=3 uid="uid://dbo36vmj0nqvx"] + +[ext_resource type="Texture2D" uid="uid://baficnup6ijqj" path="res://art/guard_white_spritesheet.png" id="1_dypd0"] + +[sub_resource type="Animation" id="Animation_jkw8f"] +length = 0.001 + +[sub_resource type="Animation" id="Animation_nbbsm"] +resource_name = "hit_down" +length = 0.3 +loop_mode = 1 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.1, 0.2), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 1, +"values": [16, 17, 18] +} + +[sub_resource type="Animation" id="Animation_es8xn"] +resource_name = "walk_down" +length = 0.4 +loop_mode = 1 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.1, 0.2, 0.3), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 1, +"values": [0, 1, 2, 3] +} + +[sub_resource type="Animation" id="Animation_w4iga"] +resource_name = "walk_left" +length = 0.4 +loop_mode = 1 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.1, 0.2, 0.3), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 1, +"values": [8, 9, 10, 11] +} + +[sub_resource type="Animation" id="Animation_trk07"] +resource_name = "walk_right" +length = 0.4 +loop_mode = 1 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.1, 0.2, 0.3), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 1, +"values": [12, 13, 14, 15] +} + +[sub_resource type="Animation" id="Animation_xaqv3"] +resource_name = "walk_up" +length = 0.4 +loop_mode = 1 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.1, 0.2, 0.3), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 1, +"values": [4, 5, 6, 7] +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_el0e8"] +_data = { +"RESET": SubResource("Animation_jkw8f"), +"hit_down": SubResource("Animation_nbbsm"), +"walk_down": SubResource("Animation_es8xn"), +"walk_left": SubResource("Animation_w4iga"), +"walk_right": SubResource("Animation_trk07"), +"walk_up": SubResource("Animation_xaqv3") +} + +[node name="Character" type="Sprite2D"] +texture_filter = 1 +texture = ExtResource("1_dypd0") +hframes = 4 +vframes = 7 +frame = 7 + +[node name="AnimationPlayer" type="AnimationPlayer" parent="."] +libraries = { +"": SubResource("AnimationLibrary_el0e8") +} diff --git a/Code/characters/player_robot.gd b/Code/characters/player_robot.gd new file mode 100644 index 0000000..97c5c53 --- /dev/null +++ b/Code/characters/player_robot.gd @@ -0,0 +1,160 @@ +extends CharacterBody2D + +signal done +signal picked_up +signal push +signal can_push + +var targetPos = Vector2.ZERO +var facing = Vector2(0, 1) # Default direction facing down +var prevPos = Vector2.ZERO +var waiting = true +var abort = false +var commands = [] +var inventory = [] +var removal_distance = 32 +var can_push_result = false +var result_received = false + +@onready var animation_tree = $AnimationTree +@onready var state_machine = animation_tree.get("parameters/playback") +@onready var end = get_tree().get_first_node_in_group("end") +@onready var interaction_manager = get_tree().get_first_node_in_group("interaction_manager") # Ensure to point to the InteractionManager + +func _ready(): + targetPos = self.position + var root_node = get_tree().root + print(root_node.name) + #var file = FileAccess.open("res://commands.txt", FileAccess.READ) + #if file: + #while !file.eof_reached(): + #var line = file.get_line() + #commands.append(line) + #print(line) + #file.close() + + interaction_manager.connect("can_push_result", Callable(self, "_on_can_push_result")) + +func _process(_delta): + if abort: + return + + if waiting: + waiting = false + if commands.size() > 0: + var c = commands.pop_front() + match c: + 'moveSouth()': + _on_node_down() + 'moveNorth()': + _on_node_up() + 'moveWest()': + _on_node_left() + 'moveEast()': + _on_node_right() + 'push()': + _on_pick_up() + 'rotateLeft()': + _on_node_rotate_clockwise() + 'rotateRight()': + _on_node_rotate_c_clockwise() + 'cp': + _on_check_if_can_push() + 'cm': + _on_check_if_can_move() + 'platform_count': + _on_get_platforms_count() + 'bop': + _on_get_boxes_on_platfor_count() + animation_tree.set("parameters/Walk/blend_position", facing) + else: + pass#state_machine.travel("End") # Idle state if no commands are left + else: + self.position = self.position.lerp(targetPos, 4 * _delta) + var collision = move_and_slide() + if collision: + print("collision") + position = prevPos + targetPos = prevPos + state_machine.travel("hit_down") + abort = true + else: + if self.position.distance_to(targetPos) < 1.0: + if commands.is_empty(): + emit_signal("done") + waiting = true + +func _on_node_down(): + facing = Vector2(0, 1) + prevPos = targetPos + targetPos.y += 16 + +func _on_node_left(): + facing = Vector2(-1, 0) + prevPos = targetPos + targetPos.x -= 16 + +func _on_node_right(): + facing = Vector2(1, 0) + prevPos = targetPos + targetPos.x += 16 + +func _on_node_up(): + facing = Vector2(0, -1) + prevPos = targetPos + targetPos.y -= 16 + +func _on_node_rotate_clockwise(): + facing = Vector2(facing.y, -facing.x) + print("Rotated clockwise. New facing:", facing) + animation_tree.set("parameters/Walk/blend_position", facing) + +func _on_node_rotate_c_clockwise(): + facing = Vector2(-facing.y, facing.x) + print("Rotated counter-clockwise. New facing:", facing) + animation_tree.set("parameters/Walk/blend_position", facing) + +func _on_check_if_can_push() -> bool: + var can_push_result = await interaction_manager.call("check_can_push") + print("Final push result: ", can_push_result) + return can_push_result + +func _on_check_if_can_move() -> bool: + var ray_length = 16 + var ray_end = position + (facing.normalized() * ray_length) + + var query = PhysicsRayQueryParameters2D.new() + query.from = position + query.to = ray_end + query.collide_with_areas = false + query.collide_with_bodies = true + + var space_state = get_world_2d().direct_space_state + var result = space_state.intersect_ray(query) + var can_move_result = true + if result: + var collider = result["collider"] + print("Collider detected: ", collider) + if collider.is_in_group("walls"): + can_move_result = false + + if can_move_result: + can_move_result = !await interaction_manager.call("check_can_push") + print("Final move result: ", can_move_result) + return can_move_result + +func _on_pick_up(): + emit_signal("picked_up") + +func _on_get_platforms_count(): + var platforms = get_tree().get_nodes_in_group("platforms") + var platform_count = platforms.size() + print("Number of platforms: ", platform_count) + return platform_count + +func _on_get_boxes_on_platfor_count(): + var gm = get_tree().get_nodes_in_group("game_manager")[0] + var occupied_platforms = gm.get_occupied_platforms_count() + print("Number of boxes on platfroms: ", occupied_platforms) + return occupied_platforms + diff --git a/Code/characters/player_robot.tscn b/Code/characters/player_robot.tscn new file mode 100644 index 0000000..bac8cf9 --- /dev/null +++ b/Code/characters/player_robot.tscn @@ -0,0 +1,192 @@ +[gd_scene load_steps=21 format=3 uid="uid://cchfvbtuste6s"] + +[ext_resource type="Script" path="res://characters/player_robot.gd" id="1_yhcxv"] +[ext_resource type="Texture2D" uid="uid://dn2kohmjttj4x" path="res://art/character_base_16x16.png" id="2_8m62n"] + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_wlo6i"] +size = Vector2(14, 14) + +[sub_resource type="Animation" id="Animation_jkw8f"] +length = 0.001 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [5] +} + +[sub_resource type="Animation" id="Animation_nbbsm"] +resource_name = "hit_down" +length = 0.3 +loop_mode = 1 + +[sub_resource type="Animation" id="Animation_7h3gl"] +resource_name = "idle" +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0.1), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [2] +} + +[sub_resource type="Animation" id="Animation_es8xn"] +resource_name = "walk_down" +length = 0.4 +loop_mode = 1 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.1, 0.2, 0.3), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 1, +"values": [0, 1, 2, 3] +} + +[sub_resource type="Animation" id="Animation_w4iga"] +resource_name = "walk_left" +length = 0.4 +loop_mode = 1 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.1, 0.2, 0.3), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 1, +"values": [12, 13, 14, 15] +} + +[sub_resource type="Animation" id="Animation_trk07"] +resource_name = "walk_right" +length = 0.4 +loop_mode = 1 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.1, 0.2, 0.3), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 1, +"values": [8, 9, 10, 11] +} + +[sub_resource type="Animation" id="Animation_xaqv3"] +resource_name = "walk_up" +length = 0.4 +loop_mode = 1 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.1, 0.2, 0.3), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 1, +"values": [4, 5, 6, 7] +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_el0e8"] +_data = { +"RESET": SubResource("Animation_jkw8f"), +"hit_down": SubResource("Animation_nbbsm"), +"idle": SubResource("Animation_7h3gl"), +"walk_down": SubResource("Animation_es8xn"), +"walk_left": SubResource("Animation_w4iga"), +"walk_right": SubResource("Animation_trk07"), +"walk_up": SubResource("Animation_xaqv3") +} + +[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_e1ti2"] +animation = &"walk_down" + +[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_is7re"] +animation = &"walk_right" + +[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_b4g06"] +animation = &"walk_up" + +[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_c383h"] +animation = &"walk_left" + +[sub_resource type="AnimationNodeBlendSpace2D" id="AnimationNodeBlendSpace2D_4nxwq"] +blend_point_0/node = SubResource("AnimationNodeAnimation_e1ti2") +blend_point_0/pos = Vector2(-0.00384618, 0.999739) +blend_point_1/node = SubResource("AnimationNodeAnimation_is7re") +blend_point_1/pos = Vector2(0.992308, 0.00939596) +blend_point_2/node = SubResource("AnimationNodeAnimation_b4g06") +blend_point_2/pos = Vector2(-0.00192309, -0.999218) +blend_point_3/node = SubResource("AnimationNodeAnimation_c383h") +blend_point_3/pos = Vector2(-0.990385, 0.00893998) +blend_mode = 1 + +[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_aslvr"] +animation = &"hit_down" + +[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_rlldy"] +animation = &"idle" + +[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_xfdoi"] +advance_mode = 2 + +[sub_resource type="AnimationNodeStateMachine" id="AnimationNodeStateMachine_0odwy"] +states/Walk/node = SubResource("AnimationNodeBlendSpace2D_4nxwq") +states/Walk/position = Vector2(387, 100) +states/hit_down/node = SubResource("AnimationNodeAnimation_aslvr") +states/hit_down/position = Vector2(541, 99) +states/idle/node = SubResource("AnimationNodeAnimation_rlldy") +states/idle/position = Vector2(367, 196) +transitions = ["Start", "Walk", SubResource("AnimationNodeStateMachineTransition_xfdoi")] + +[node name="PlayerRobot" type="CharacterBody2D" groups=["player"]] +position = Vector2(72, 72) +collision_layer = 8 +collision_mask = 2 +script = ExtResource("1_yhcxv") + +[node name="Character" type="Sprite2D" parent="."] +texture_filter = 1 +texture = ExtResource("2_8m62n") +hframes = 4 +vframes = 4 +frame = 5 + +[node name="CollisionShape2D" type="CollisionShape2D" parent="."] +light_mask = 8 +visibility_layer = 2 +shape = SubResource("RectangleShape2D_wlo6i") + +[node name="AnimationPlayer" type="AnimationPlayer" parent="."] +root_node = NodePath("../Character") +libraries = { +"": SubResource("AnimationLibrary_el0e8") +} + +[node name="AnimationTree" type="AnimationTree" parent="."] +root_node = NodePath("../Character") +tree_root = SubResource("AnimationNodeStateMachine_0odwy") +anim_player = NodePath("../AnimationPlayer") +parameters/Walk/blend_position = Vector2(-0.00384617, -0.982379) diff --git a/Code/commands.txt.bak b/Code/commands.txt.bak new file mode 100644 index 0000000..855efb9 --- /dev/null +++ b/Code/commands.txt.bak @@ -0,0 +1,6 @@ +l +l +l +p +d +p diff --git a/Code/control.gdshader b/Code/control.gdshader new file mode 100644 index 0000000..311f90f --- /dev/null +++ b/Code/control.gdshader @@ -0,0 +1,60 @@ +shader_type canvas_item; + +uniform sampler2D SCREEN_TEXTURE : hint_screen_texture, filter_linear; + +vec2 warp(vec2 uv) { + vec2 delta = uv - 0.5; + float l = length(delta); + return uv + delta * l * l / 2.0; +} + +vec3 border(vec2 uv, vec3 col) { + uv -= 0.5; + uv *= 2.0; + + vec2 uv2 = uv*uv; + vec2 uv4 = uv2*uv2; + vec2 uv16 = uv4*uv4; + + float border = 1.0 - length(uv16); + + vec3 edge_color = vec3(0.164, 0.152, 0.19); + float blur_size = 0.20; + float edge_size = 0.10; + float edge_blur_width = 0.04; + + float edge_center = blur_size - edge_size / 2.0; + + if (border < blur_size) { + if (border > blur_size - edge_blur_width) { + float change = smoothstep(blur_size - edge_blur_width, blur_size, border); + return (1.0 - change) * edge_color; + } else { + float change = smoothstep(blur_size - 5.0, blur_size - edge_size + edge_blur_width, border); + return change * edge_color; + } + } + + return col * smoothstep(0.0, 0.64, border - blur_size); +} + +void fragment() +{ + vec2 uv = warp(SCREEN_UV); // change to SCREEN_UV if required + vec2 text_uv = uv; + + + vec4 text; + text.rgb = texture(SCREEN_TEXTURE, text_uv).rgb; + text.a = 1.0; + + float apply = abs(sin(uv.y * 400.0)*0.5*0.25); + vec3 col = vec3(mix(texture(SCREEN_TEXTURE,uv).rgb,vec3(0.0),apply)); + text.rgb = col; + + uv = warp(UV); + + text.rgb = border(uv, text.rgb); + + COLOR = text; +} \ No newline at end of file diff --git a/Code/controls.tscn b/Code/controls.tscn new file mode 100644 index 0000000..f7e07ae --- /dev/null +++ b/Code/controls.tscn @@ -0,0 +1,37 @@ +[gd_scene format=3 uid="uid://b4oxoxixvqoqv"] + +[node name="CanvasLayer" type="Control"] +layout_mode = 3 +anchors_preset = 0 + +[node name="Left" type="Button" parent="."] +layout_mode = 0 +offset_left = 304.0 +offset_top = 92.0 +offset_right = 327.0 +offset_bottom = 123.0 +text = "<-" + +[node name="Right" type="Button" parent="."] +layout_mode = 0 +offset_left = 352.0 +offset_top = 92.0 +offset_right = 375.0 +offset_bottom = 123.0 +text = "->" + +[node name="Up" type="Button" parent="."] +layout_mode = 0 +offset_left = 328.0 +offset_top = 60.0 +offset_right = 351.0 +offset_bottom = 91.0 +text = "^" + +[node name="Down" type="Button" parent="."] +layout_mode = 0 +offset_left = 328.0 +offset_top = 92.0 +offset_right = 351.0 +offset_bottom = 123.0 +text = "V" diff --git a/Code/default.tres b/Code/default.tres new file mode 100644 index 0000000..d1e9541 --- /dev/null +++ b/Code/default.tres @@ -0,0 +1,497 @@ +[gd_resource type="Theme" load_steps=28 format=3 uid="uid://b5uuv0ae6k3gt"] + +[ext_resource type="FontFile" uid="uid://crxxdiidbhsib" path="res://monogram.ttf" id="1_18iiw"] +[ext_resource type="StyleBox" uid="uid://c507n1pdgrxbu" path="res://style_box_texture_panel.tres" id="2_d152g"] +[ext_resource type="Texture2D" uid="uid://drkdd0sttb2ws" path="res://ui_retro/Windows_Button_Pressed.png" id="3_8pxow"] + +[sub_resource type="StyleBoxTexture" id="StyleBoxTexture_angib"] +texture = ExtResource("3_8pxow") +texture_margin_left = 2.0 +texture_margin_top = 2.0 +texture_margin_right = 2.0 +texture_margin_bottom = 2.0 +axis_stretch_horizontal = 1 +axis_stretch_vertical = 1 +region_rect = Rect2(0, 0, 15, 15) + +[sub_resource type="Image" id="Image_0i2yr"] +data = { +"data": PackedByteArray(255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 254, 255, 254, 222, 254, 255, 254, 243, 254, 255, 254, 243, 254, 255, 254, 243, 254, 255, 254, 243, 254, 255, 254, 243, 254, 255, 254, 243, 254, 255, 254, 243, 254, 255, 254, 243, 254, 255, 254, 243, 254, 255, 254, 243, 254, 255, 254, 243, 254, 255, 254, 243, 254, 255, 254, 222, 255, 255, 255, 0, 255, 255, 255, 0, 254, 255, 254, 243, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 243, 255, 255, 255, 0, 255, 255, 255, 0, 254, 255, 254, 243, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 243, 255, 255, 255, 0, 255, 255, 255, 0, 254, 255, 254, 243, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 243, 255, 255, 255, 0, 255, 255, 255, 0, 254, 255, 254, 243, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 243, 255, 255, 255, 0, 255, 255, 255, 0, 254, 255, 254, 243, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 243, 255, 255, 255, 0, 255, 255, 255, 0, 254, 255, 254, 243, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 243, 255, 255, 255, 0, 255, 255, 255, 0, 254, 255, 254, 243, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 243, 255, 255, 255, 0, 255, 255, 255, 0, 254, 255, 254, 243, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 251, 254, 255, 254, 243, 254, 255, 254, 243, 254, 255, 254, 251, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 243, 255, 255, 255, 0, 255, 255, 255, 0, 254, 255, 254, 243, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 253, 255, 253, 251, 254, 255, 254, 234, 255, 255, 255, 65, 252, 255, 252, 66, 254, 255, 254, 234, 253, 255, 253, 251, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 243, 255, 255, 255, 0, 255, 255, 255, 0, 254, 255, 254, 243, 254, 255, 254, 250, 254, 255, 254, 250, 255, 255, 255, 249, 254, 255, 254, 214, 255, 255, 255, 34, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 34, 255, 255, 255, 214, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 243, 255, 255, 255, 0, 255, 255, 255, 0, 254, 255, 254, 243, 254, 255, 254, 250, 253, 255, 253, 248, 254, 255, 254, 178, 255, 255, 255, 13, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 13, 254, 255, 254, 178, 254, 255, 254, 247, 254, 255, 254, 250, 254, 255, 254, 243, 255, 255, 255, 0, 255, 255, 255, 0, 254, 255, 254, 243, 254, 255, 254, 244, 255, 255, 255, 127, 255, 255, 255, 2, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 2, 254, 255, 254, 128, 254, 255, 254, 244, 254, 255, 254, 243, 255, 255, 255, 0, 255, 255, 255, 0, 254, 255, 254, 206, 255, 255, 255, 75, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 75, 254, 255, 254, 206, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0), +"format": "RGBA8", +"height": 16, +"mipmaps": false, +"width": 16 +} + +[sub_resource type="ImageTexture" id="ImageTexture_6qvr4"] +image = SubResource("Image_0i2yr") + +[sub_resource type="Image" id="Image_brc2j"] +data = { +"data": PackedByteArray(255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 106, 106, 12, 255, 95, 95, 67, 255, 95, 95, 105, 255, 94, 94, 122, 255, 94, 94, 122, 255, 95, 95, 105, 255, 96, 96, 66, 255, 116, 116, 11, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 44, 255, 94, 94, 122, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 122, 255, 97, 97, 42, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 44, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 97, 97, 42, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 106, 106, 12, 255, 94, 94, 122, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 95, 95, 121, 255, 93, 93, 11, 255, 255, 255, 0, 255, 255, 255, 0, 255, 95, 95, 67, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 65, 255, 255, 255, 0, 255, 255, 255, 0, 255, 95, 95, 105, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 96, 96, 104, 255, 255, 255, 0, 255, 255, 255, 0, 255, 94, 94, 122, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 122, 255, 255, 255, 0, 255, 255, 255, 0, 255, 94, 94, 122, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 95, 95, 121, 255, 255, 255, 0, 255, 255, 255, 0, 255, 95, 95, 105, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 103, 255, 255, 255, 0, 255, 255, 255, 0, 255, 96, 96, 66, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 65, 255, 255, 255, 0, 255, 255, 255, 0, 255, 116, 116, 11, 255, 94, 94, 122, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 95, 95, 121, 255, 102, 102, 10, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 97, 97, 42, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 93, 93, 41, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 97, 97, 42, 255, 95, 95, 121, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 95, 95, 121, 255, 93, 93, 41, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 11, 255, 94, 94, 65, 255, 96, 96, 104, 255, 94, 94, 122, 255, 95, 95, 121, 255, 94, 94, 103, 255, 94, 94, 65, 255, 102, 102, 10, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0), +"format": "RGBA8", +"height": 16, +"mipmaps": false, +"width": 16 +} + +[sub_resource type="ImageTexture" id="ImageTexture_gavo6"] +image = SubResource("Image_brc2j") + +[sub_resource type="Image" id="Image_v8lis"] +data = { +"data": PackedByteArray(255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 180, 180, 180, 81, 177, 177, 177, 88, 179, 179, 179, 10, 255, 255, 255, 0, 255, 255, 255, 0, 179, 179, 179, 10, 177, 177, 177, 88, 179, 179, 179, 80, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 177, 177, 177, 88, 178, 178, 178, 115, 178, 178, 178, 96, 179, 179, 179, 10, 179, 179, 179, 10, 178, 178, 178, 96, 178, 178, 178, 115, 177, 177, 177, 88, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 179, 179, 179, 10, 177, 177, 177, 95, 178, 178, 178, 115, 178, 178, 178, 96, 178, 178, 178, 96, 178, 178, 178, 115, 177, 177, 177, 95, 199, 199, 199, 9, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 179, 179, 179, 10, 177, 177, 177, 95, 178, 178, 178, 115, 178, 178, 178, 115, 177, 177, 177, 95, 199, 199, 199, 9, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 179, 179, 179, 10, 177, 177, 177, 88, 177, 177, 177, 88, 199, 199, 199, 9, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0), +"format": "RGBA8", +"height": 16, +"mipmaps": false, +"width": 16 +} + +[sub_resource type="ImageTexture" id="ImageTexture_fk8u1"] +image = SubResource("Image_v8lis") + +[sub_resource type="Image" id="Image_wyoe1"] +data = { +"data": PackedByteArray(255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 184, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 181, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 232, 255, 255, 255, 43, 255, 255, 255, 120, 255, 255, 255, 255, 255, 255, 255, 254, 255, 255, 255, 117, 255, 255, 255, 43, 255, 255, 255, 235, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 227, 255, 255, 255, 7, 255, 255, 255, 0, 255, 255, 255, 108, 255, 255, 255, 107, 255, 255, 255, 0, 255, 255, 255, 8, 255, 255, 255, 228, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 255, 255, 255, 255, 184, 255, 255, 255, 7, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 8, 255, 255, 255, 185, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 184, 255, 255, 255, 7, 255, 255, 255, 9, 255, 255, 255, 186, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 222, 255, 255, 255, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 181, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 180, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0), +"format": "RGBA8", +"height": 12, +"mipmaps": false, +"width": 12 +} + +[sub_resource type="ImageTexture" id="ImageTexture_xw1o8"] +image = SubResource("Image_wyoe1") + +[sub_resource type="Image" id="Image_0g028"] +data = { +"data": PackedByteArray(255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 180, 180, 180, 81, 177, 177, 177, 88, 179, 179, 179, 10, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 177, 177, 177, 88, 178, 178, 178, 115, 177, 177, 177, 95, 179, 179, 179, 10, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 179, 179, 179, 10, 178, 178, 178, 96, 178, 178, 178, 115, 177, 177, 177, 95, 179, 179, 179, 10, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 179, 179, 179, 10, 178, 178, 178, 96, 178, 178, 178, 115, 177, 177, 177, 88, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 179, 179, 179, 10, 178, 178, 178, 96, 178, 178, 178, 115, 177, 177, 177, 88, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 179, 179, 179, 10, 178, 178, 178, 96, 178, 178, 178, 115, 177, 177, 177, 95, 199, 199, 199, 9, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 177, 177, 177, 88, 178, 178, 178, 115, 177, 177, 177, 95, 199, 199, 199, 9, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 179, 179, 179, 80, 177, 177, 177, 88, 199, 199, 199, 9, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0), +"format": "RGBA8", +"height": 16, +"mipmaps": false, +"width": 16 +} + +[sub_resource type="ImageTexture" id="ImageTexture_1oxox"] +image = SubResource("Image_0g028") + +[sub_resource type="Image" id="Image_hlbn7"] +data = { +"data": PackedByteArray(255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 184, 255, 255, 255, 255, 255, 255, 255, 232, 255, 255, 255, 227, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 181, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 43, 255, 255, 255, 7, 255, 255, 255, 184, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 120, 255, 255, 255, 0, 255, 255, 255, 7, 255, 255, 255, 184, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 108, 255, 255, 255, 0, 255, 255, 255, 7, 255, 255, 255, 222, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 254, 255, 255, 255, 107, 255, 255, 255, 0, 255, 255, 255, 9, 255, 255, 255, 224, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 117, 255, 255, 255, 0, 255, 255, 255, 8, 255, 255, 255, 186, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 43, 255, 255, 255, 8, 255, 255, 255, 185, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 181, 255, 255, 255, 255, 255, 255, 255, 235, 255, 255, 255, 228, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 180, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0), +"format": "RGBA8", +"height": 12, +"mipmaps": false, +"width": 12 +} + +[sub_resource type="ImageTexture" id="ImageTexture_x50dd"] +image = SubResource("Image_hlbn7") + +[sub_resource type="Image" id="Image_bexvo"] +data = { +"data": PackedByteArray(255, 255, 255, 0, 255, 255, 255, 10, 255, 255, 255, 44, 255, 255, 255, 60, 255, 255, 255, 64, 255, 255, 255, 64, 255, 255, 255, 64, 255, 255, 255, 64, 255, 255, 255, 64, 255, 255, 255, 64, 255, 255, 255, 60, 255, 255, 255, 43, 255, 255, 255, 9, 255, 255, 255, 0, 255, 255, 255, 10, 255, 255, 255, 60, 255, 255, 255, 64, 255, 255, 255, 64, 255, 255, 255, 64, 255, 255, 255, 64, 255, 255, 255, 64, 255, 255, 255, 64, 255, 255, 255, 64, 255, 255, 255, 64, 255, 255, 255, 64, 255, 255, 255, 64, 255, 255, 255, 60, 255, 255, 255, 9, 255, 255, 255, 43, 255, 255, 255, 64, 255, 255, 255, 64, 255, 255, 255, 64, 255, 255, 255, 64, 255, 255, 255, 64, 255, 255, 255, 64, 255, 255, 255, 64, 255, 255, 255, 64, 255, 255, 255, 64, 255, 255, 255, 64, 255, 255, 255, 64, 255, 255, 255, 64, 255, 255, 255, 43, 255, 255, 255, 60, 255, 255, 255, 64, 255, 255, 255, 16, 255, 255, 255, 20, 255, 255, 255, 64, 255, 255, 255, 64, 255, 255, 255, 16, 255, 255, 255, 20, 255, 255, 255, 64, 255, 255, 255, 64, 255, 255, 255, 16, 255, 255, 255, 20, 255, 255, 255, 64, 255, 255, 255, 60, 255, 255, 255, 60, 255, 255, 255, 64, 255, 255, 255, 16, 255, 255, 255, 17, 255, 255, 255, 64, 255, 255, 255, 64, 255, 255, 255, 16, 255, 255, 255, 17, 255, 255, 255, 64, 255, 255, 255, 64, 255, 255, 255, 16, 255, 255, 255, 17, 255, 255, 255, 64, 255, 255, 255, 59, 255, 255, 255, 43, 255, 255, 255, 64, 255, 255, 255, 64, 255, 255, 255, 64, 255, 255, 255, 64, 255, 255, 255, 64, 255, 255, 255, 64, 255, 255, 255, 64, 255, 255, 255, 64, 255, 255, 255, 64, 255, 255, 255, 64, 255, 255, 255, 64, 255, 255, 255, 64, 255, 255, 255, 42, 255, 255, 255, 9, 255, 255, 255, 60, 255, 255, 255, 64, 255, 255, 255, 64, 255, 255, 255, 64, 255, 255, 255, 64, 255, 255, 255, 64, 255, 255, 255, 64, 255, 255, 255, 64, 255, 255, 255, 64, 255, 255, 255, 64, 255, 255, 255, 64, 255, 255, 255, 59, 255, 255, 255, 8, 255, 255, 255, 0, 255, 255, 255, 9, 255, 255, 255, 43, 255, 255, 255, 60, 255, 255, 255, 64, 255, 255, 255, 64, 255, 255, 255, 64, 255, 255, 255, 64, 255, 255, 255, 64, 255, 255, 255, 64, 255, 255, 255, 60, 255, 255, 255, 43, 255, 255, 255, 9, 255, 255, 255, 0), +"format": "RGBA8", +"height": 8, +"mipmaps": false, +"width": 14 +} + +[sub_resource type="ImageTexture" id="ImageTexture_6cqlr"] +image = SubResource("Image_bexvo") + +[sub_resource type="Image" id="Image_0dtc4"] +data = { +"data": PackedByteArray(255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 1, 179, 179, 179, 20, 188, 188, 188, 19, 255, 255, 255, 1, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 179, 179, 179, 20, 180, 180, 180, 64, 180, 180, 180, 64, 188, 188, 188, 19, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 188, 188, 188, 19, 180, 180, 180, 64, 180, 180, 180, 64, 188, 188, 188, 19, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 1, 188, 188, 188, 19, 188, 188, 188, 19, 255, 255, 255, 1, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0), +"format": "RGBA8", +"height": 8, +"mipmaps": false, +"width": 8 +} + +[sub_resource type="ImageTexture" id="ImageTexture_lkg32"] +image = SubResource("Image_0dtc4") + +[sub_resource type="Image" id="Image_8caul"] +data = { +"data": PackedByteArray(181, 181, 181, 48, 179, 179, 179, 50, 213, 213, 213, 6, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 180, 180, 180, 64, 180, 180, 180, 64, 179, 179, 179, 50, 180, 180, 180, 64, 180, 180, 180, 54, 213, 213, 213, 6, 255, 255, 255, 0, 255, 255, 255, 0, 180, 180, 180, 64, 180, 180, 180, 64, 204, 204, 204, 5, 178, 178, 178, 53, 180, 180, 180, 64, 180, 180, 180, 54, 213, 213, 213, 6, 255, 255, 255, 0, 180, 180, 180, 64, 180, 180, 180, 64, 255, 255, 255, 0, 204, 204, 204, 5, 182, 182, 182, 52, 180, 180, 180, 64, 180, 180, 180, 51, 255, 255, 255, 0, 180, 180, 180, 64, 180, 180, 180, 64, 255, 255, 255, 0, 213, 213, 213, 6, 180, 180, 180, 54, 180, 180, 180, 64, 179, 179, 179, 50, 255, 255, 255, 0, 180, 180, 180, 64, 180, 180, 180, 64, 213, 213, 213, 6, 180, 180, 180, 54, 180, 180, 180, 64, 183, 183, 183, 53, 170, 170, 170, 6, 255, 255, 255, 0, 180, 180, 180, 64, 180, 180, 180, 64, 182, 182, 182, 49, 180, 180, 180, 64, 183, 183, 183, 53, 170, 170, 170, 6, 255, 255, 255, 0, 255, 255, 255, 0, 180, 180, 180, 64, 180, 180, 180, 64, 181, 181, 181, 41, 182, 182, 182, 49, 170, 170, 170, 6, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 180, 180, 180, 64, 180, 180, 180, 64), +"format": "RGBA8", +"height": 8, +"mipmaps": false, +"width": 8 +} + +[sub_resource type="ImageTexture" id="ImageTexture_575hg"] +image = SubResource("Image_8caul") + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_urlhv"] +content_margin_left = 0.0 +content_margin_top = 0.0 +content_margin_right = 0.0 +content_margin_bottom = 0.0 +bg_color = Color(0.1, 0.1, 0.1, 0.6) +corner_radius_top_left = 3 +corner_radius_top_right = 3 +corner_radius_bottom_right = 3 +corner_radius_bottom_left = 3 +corner_detail = 5 + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_63enx"] +content_margin_left = 4.0 +content_margin_top = 4.0 +content_margin_right = 4.0 +content_margin_bottom = 4.0 +bg_color = Color(1, 1, 1, 0.75) +draw_center = false +border_width_left = 2 +border_width_top = 2 +border_width_right = 2 +border_width_bottom = 2 +corner_radius_top_left = 3 +corner_radius_top_right = 3 +corner_radius_bottom_right = 3 +corner_radius_bottom_left = 3 +corner_detail = 5 +expand_margin_left = 2.0 +expand_margin_top = 2.0 +expand_margin_right = 2.0 +expand_margin_bottom = 2.0 + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_78dli"] +content_margin_left = 4.0 +content_margin_top = 4.0 +content_margin_right = 4.0 +content_margin_bottom = 4.0 +bg_color = Color(0.1, 0.1, 0.1, 0.6) +border_width_bottom = 2 +border_color = Color(0, 0, 0, 0.6) +corner_radius_top_left = 3 +corner_radius_top_right = 3 +corner_radius_bottom_right = 3 +corner_radius_bottom_left = 3 +corner_detail = 5 + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_jn5vw"] +content_margin_left = 4.0 +content_margin_top = 4.0 +content_margin_right = 4.0 +content_margin_bottom = 4.0 +bg_color = Color(0.1, 0.1, 0.1, 0.3) +border_width_bottom = 2 +border_color = Color(0, 0, 0, 0.3) +corner_radius_top_left = 3 +corner_radius_top_right = 3 +corner_radius_bottom_right = 3 +corner_radius_bottom_left = 3 +corner_detail = 5 + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_dro16"] + +[resource] +default_font_size = 32 +AcceptDialog/constants/buttons_separation = 0 +AcceptDialog/styles/panel = null +AssetLib/styles/bg = null +AssetLib/styles/panel = null +Button/colors/font_color = Color(0, 0, 0, 1) +Button/colors/font_disabled_color = Color(0.875, 0.875, 0.875, 0.5) +Button/colors/font_focus_color = Color(0, 0, 0, 1) +Button/colors/font_hover_color = Color(0.32549, 0.32549, 0.32549, 1) +Button/colors/font_hover_pressed_color = Color(0.325439, 0.325441, 0.325442, 1) +Button/colors/font_outline_color = Color(1, 1, 1, 1) +Button/colors/font_pressed_color = Color(0.27022, 0.270222, 0.270223, 1) +Button/colors/icon_disabled_color = Color(1, 1, 1, 0.4) +Button/colors/icon_focus_color = Color(1, 1, 1, 1) +Button/colors/icon_hover_color = Color(1, 1, 1, 1) +Button/colors/icon_hover_pressed_color = Color(1, 1, 1, 1) +Button/colors/icon_normal_color = Color(1, 1, 1, 1) +Button/colors/icon_pressed_color = Color(1, 1, 1, 1) +Button/constants/h_separation = 0 +Button/constants/icon_max_width = 0 +Button/constants/outline_size = 1 +Button/fonts/font = ExtResource("1_18iiw") +Button/styles/disabled = ExtResource("2_d152g") +Button/styles/focus = null +Button/styles/hover = ExtResource("2_d152g") +Button/styles/normal = ExtResource("2_d152g") +Button/styles/pressed = SubResource("StyleBoxTexture_angib") +CheckBox/styles/disabled = null +CheckBox/styles/hover = null +CheckBox/styles/hover_pressed = null +CheckBox/styles/normal = null +CheckBox/styles/pressed = null +CheckButton/styles/disabled = null +CheckButton/styles/hover = null +CheckButton/styles/hover_pressed = null +CheckButton/styles/normal = null +CheckButton/styles/pressed = null +CodeEdit/colors/background_color = Color(0.0823529, 0.0823529, 0.0823529, 1) +CodeEdit/colors/bookmark_color = Color(0.5, 0.64, 1, 0.8) +CodeEdit/colors/brace_mismatch_color = Color(1, 0.2, 0.2, 1) +CodeEdit/colors/breakpoint_color = Color(0.9, 0.29, 0.3, 1) +CodeEdit/colors/caret_background_color = Color(0, 0, 0, 1) +CodeEdit/colors/caret_color = Color(0.875, 0.875, 0.875, 1) +CodeEdit/colors/code_folding_color = Color(0.8, 0.8, 0.8, 0.8) +CodeEdit/colors/completion_background_color = Color(0.17, 0.16, 0.2, 1) +CodeEdit/colors/completion_existing_color = Color(0.87, 0.87, 0.87, 0.13) +CodeEdit/colors/completion_scroll_color = Color(1, 1, 1, 0.29) +CodeEdit/colors/completion_scroll_hovered_color = Color(1, 1, 1, 0.4) +CodeEdit/colors/completion_selected_color = Color(0.26, 0.26, 0.27, 1) +CodeEdit/colors/current_line_color = Color(0.25, 0.25, 0.26, 0.8) +CodeEdit/colors/executing_line_color = Color(0.98, 0.89, 0.27, 1) +CodeEdit/colors/folded_code_region_color = Color(0.68, 0.46, 0.77, 0.2) +CodeEdit/colors/font_color = Color(0.875, 0.875, 0.875, 1) +CodeEdit/colors/font_outline_color = Color(1, 1, 1, 1) +CodeEdit/colors/font_placeholder_color = Color(0.875, 0.875, 0.875, 0.6) +CodeEdit/colors/font_readonly_color = Color(0.875, 0.875, 0.875, 0.5) +CodeEdit/colors/font_selected_color = Color(0, 0, 0, 0) +CodeEdit/colors/line_length_guideline_color = Color(0.3, 0.5, 0.8, 0.1) +CodeEdit/colors/line_number_color = Color(0.67, 0.67, 0.67, 0.4) +CodeEdit/colors/search_result_border_color = Color(0.3, 0.3, 0.3, 0.4) +CodeEdit/colors/search_result_color = Color(0.3, 0.3, 0.3, 1) +CodeEdit/colors/selection_color = Color(0.5, 0.5, 0.5, 1) +CodeEdit/colors/word_highlighted_color = Color(0.8, 0.9, 0.9, 0.15) +CodeEdit/constants/completion_lines = 7 +CodeEdit/constants/completion_max_width = 50 +CodeEdit/constants/completion_scroll_width = 6 +CodeEdit/constants/line_spacing = 4 +CodeEdit/constants/outline_size = 0 +CodeEdit/font_sizes/font_size = 48 +CodeEdit/fonts/font = ExtResource("1_18iiw") +CodeEdit/icons/bookmark = SubResource("ImageTexture_6qvr4") +CodeEdit/icons/breakpoint = SubResource("ImageTexture_gavo6") +CodeEdit/icons/can_fold = SubResource("ImageTexture_fk8u1") +CodeEdit/icons/can_fold_code_region = SubResource("ImageTexture_xw1o8") +CodeEdit/icons/executing_line = SubResource("ImageTexture_1oxox") +CodeEdit/icons/folded = SubResource("ImageTexture_1oxox") +CodeEdit/icons/folded_code_region = SubResource("ImageTexture_x50dd") +CodeEdit/icons/folded_eol_icon = SubResource("ImageTexture_6cqlr") +CodeEdit/icons/space = SubResource("ImageTexture_lkg32") +CodeEdit/icons/tab = SubResource("ImageTexture_575hg") +CodeEdit/styles/completion = SubResource("StyleBoxFlat_urlhv") +CodeEdit/styles/focus = SubResource("StyleBoxFlat_63enx") +CodeEdit/styles/normal = SubResource("StyleBoxFlat_78dli") +CodeEdit/styles/read_only = SubResource("StyleBoxFlat_jn5vw") +ColorPresetButton/styles/preset_fg = null +ControlEditorPopupPanel/styles/panel = null +DarkButton/base_type = &"Button" +Editor/styles/sub_inspector_bg0 = null +Editor/styles/sub_inspector_bg1 = null +Editor/styles/sub_inspector_bg10 = null +Editor/styles/sub_inspector_bg11 = null +Editor/styles/sub_inspector_bg12 = null +Editor/styles/sub_inspector_bg13 = null +Editor/styles/sub_inspector_bg14 = null +Editor/styles/sub_inspector_bg15 = null +Editor/styles/sub_inspector_bg2 = null +Editor/styles/sub_inspector_bg3 = null +Editor/styles/sub_inspector_bg4 = null +Editor/styles/sub_inspector_bg5 = null +Editor/styles/sub_inspector_bg6 = null +Editor/styles/sub_inspector_bg7 = null +Editor/styles/sub_inspector_bg8 = null +Editor/styles/sub_inspector_bg9 = null +Editor/styles/sub_inspector_property_bg0 = null +Editor/styles/sub_inspector_property_bg1 = null +Editor/styles/sub_inspector_property_bg10 = null +Editor/styles/sub_inspector_property_bg11 = null +Editor/styles/sub_inspector_property_bg12 = null +Editor/styles/sub_inspector_property_bg13 = null +Editor/styles/sub_inspector_property_bg14 = null +Editor/styles/sub_inspector_property_bg15 = null +Editor/styles/sub_inspector_property_bg2 = null +Editor/styles/sub_inspector_property_bg3 = null +Editor/styles/sub_inspector_property_bg4 = null +Editor/styles/sub_inspector_property_bg5 = null +Editor/styles/sub_inspector_property_bg6 = null +Editor/styles/sub_inspector_property_bg7 = null +Editor/styles/sub_inspector_property_bg8 = null +Editor/styles/sub_inspector_property_bg9 = null +EditorAbout/styles/panel = null +EditorHelp/styles/background = null +EditorIcons/icons/Control = null +EditorInspectorCategory/styles/bg = null +EditorInspectorSection/styles/indent_box = null +EditorLogFilterButton/styles/pressed = null +EditorProperty/styles/bg = null +EditorProperty/styles/bg_group_note = null +EditorProperty/styles/bg_selected = null +EditorProperty/styles/child_bg = null +EditorSettingsDialog/styles/panel = null +EditorSpinSlider/styles/label_bg = null +EditorStyles/styles/Background = null +EditorStyles/styles/BottomPanel = null +EditorStyles/styles/BottomPanelDebuggerOverride = null +EditorStyles/styles/CanvasItemInfoOverlay = null +EditorStyles/styles/Content = null +EditorStyles/styles/ContextualToolbar = null +EditorStyles/styles/DebuggerPanel = null +EditorStyles/styles/DictionaryAddItem = null +EditorStyles/styles/Focus = null +EditorStyles/styles/FocusViewport = null +EditorStyles/styles/Information3dViewport = null +EditorStyles/styles/LaunchPadMovieMode = null +EditorStyles/styles/LaunchPadNormal = null +EditorStyles/styles/MenuHover = null +EditorStyles/styles/MenuPanel = null +EditorStyles/styles/MovieWriterButtonNormal = null +EditorStyles/styles/MovieWriterButtonPressed = null +EditorStyles/styles/PanelForeground = null +EditorStyles/styles/ScriptEditor = null +EditorStyles/styles/ScriptEditorPanel = null +EditorStyles/styles/ScriptEditorPanelFloating = null +EditorStyles/styles/TextureRegionPreviewBG = null +EditorStyles/styles/TextureRegionPreviewFG = null +EditorStyles/styles/ThemeEditorPreviewBG = null +EditorStyles/styles/ThemeEditorPreviewFG = null +EditorValidationPanel/styles/panel = null +FlatButton/styles/disabled = null +FlatButton/styles/hover = null +FlatButton/styles/normal = null +FlatButton/styles/pressed = null +FlatMenuButton/styles/disabled = null +FlatMenuButton/styles/hover = null +FlatMenuButton/styles/normal = null +FlatMenuButton/styles/pressed = null +GraphEdit/styles/menu_panel = null +GraphEdit/styles/panel = null +GraphEditMinimap/styles/camera = null +GraphEditMinimap/styles/node = null +GraphEditMinimap/styles/panel = null +GraphElement/styles/panel = null +GraphElement/styles/panel_selected = null +GraphElement/styles/titlebar = null +GraphElement/styles/titlebar_selected = null +GraphNode/styles/panel = null +GraphNode/styles/panel_selected = null +GraphNode/styles/slot = null +GraphNode/styles/titlebar = null +GraphNode/styles/titlebar_selected = null +GraphNodeTitleLabel/styles/normal = null +GraphStateMachine/styles/error_panel = null +GraphStateMachine/styles/node_frame = null +GraphStateMachine/styles/node_frame_end = null +GraphStateMachine/styles/node_frame_playing = null +GraphStateMachine/styles/node_frame_selected = null +GraphStateMachine/styles/node_frame_start = null +GraphStateMachine/styles/panel = null +HScrollBar/styles/grabber = null +HScrollBar/styles/grabber_highlight = null +HScrollBar/styles/grabber_pressed = null +HScrollBar/styles/scroll = null +HScrollBar/styles/scroll_focus = null +HSeparator/styles/separator = null +HSlider/styles/grabber_area = null +HSlider/styles/grabber_area_highlight = null +HSlider/styles/slider = null +InspectorActionButton/styles/disabled = null +InspectorActionButton/styles/hover = null +InspectorActionButton/styles/normal = null +InspectorActionButton/styles/pressed = null +ItemList/styles/cursor = null +ItemList/styles/cursor_unfocused = null +ItemList/styles/focus = null +ItemList/styles/hovered = null +ItemList/styles/panel = null +ItemList/styles/selected = null +ItemList/styles/selected_focus = null +Label/styles/normal = null +LineEdit/styles/focus = null +LineEdit/styles/normal = null +LineEdit/styles/read_only = null +LinkButton/styles/focus = null +MarginContainer/constants/margin_bottom = 5 +MarginContainer/constants/margin_left = 5 +MarginContainer/constants/margin_right = 5 +MarginContainer/constants/margin_top = 5 +MenuBar/styles/disabled = null +MenuBar/styles/hover = null +MenuBar/styles/normal = null +MenuBar/styles/pressed = null +MenuButton/styles/disabled = null +MenuButton/styles/focus = null +MenuButton/styles/hover = null +MenuButton/styles/normal = null +MenuButton/styles/pressed = null +OptionButton/styles/disabled = null +OptionButton/styles/disabled_mirrored = null +OptionButton/styles/focus = null +OptionButton/styles/hover = null +OptionButton/styles/hover_mirrored = null +OptionButton/styles/normal = null +OptionButton/styles/normal_mirrored = null +OptionButton/styles/pressed = null +OptionButton/styles/pressed_mirrored = null +Panel/styles/panel = ExtResource("2_d152g") +PanelContainer/colors/gv = Color(0, 0, 0, 1) +PanelContainer/styles/panel = null +PopupDialog/styles/panel = null +PopupMenu/styles/hover = null +PopupMenu/styles/labeled_separator_left = null +PopupMenu/styles/labeled_separator_right = null +PopupMenu/styles/panel = null +PopupMenu/styles/separator = null +PopupPanel/styles/panel = null +PreviewLightButton/styles/focus = null +PreviewLightButton/styles/hover = null +PreviewLightButton/styles/normal = null +PreviewLightButton/styles/pressed = null +ProgressBar/styles/background = null +ProgressBar/styles/fill = null +ProjectManager/styles/search_panel = null +ProjectSettingsEditor/styles/panel = null +ProjectTag/styles/hover = null +ProjectTag/styles/normal = null +ProjectTag/styles/pressed = null +ResizablePanel/styles/panel = null +RichTextLabel/styles/focus = null +RichTextLabel/styles/normal = null +TabBar/styles/button_highlight = null +TabBar/styles/button_pressed = null +TabBar/styles/tab_disabled = null +TabBar/styles/tab_focus = null +TabBar/styles/tab_hovered = null +TabBar/styles/tab_selected = null +TabBar/styles/tab_unselected = null +TabContainer/styles/panel = null +TabContainer/styles/tab_disabled = null +TabContainer/styles/tab_focus = null +TabContainer/styles/tab_hovered = null +TabContainer/styles/tab_selected = null +TabContainer/styles/tab_unselected = null +TabContainer/styles/tabbar_background = null +TabContainerOdd/styles/panel = null +TabContainerOdd/styles/tab_selected = null +TextEdit/colors/background_color = Color(0, 0, 0, 1) +TextEdit/colors/font_color = Color(1, 1, 1, 1) +TextEdit/colors/font_readonly_color = Color(1, 1, 1, 1) +TextEdit/styles/focus = null +TextEdit/styles/normal = null +TextEdit/styles/read_only = null +ThemeEditor/styles/preview_picker_label = null +ThemeEditor/styles/preview_picker_overlay = null +TooltipPanel/styles/panel = null +Tree/styles/button_pressed = null +Tree/styles/cursor = null +Tree/styles/cursor_unfocused = null +Tree/styles/custom_button = null +Tree/styles/custom_button_hover = null +Tree/styles/custom_button_pressed = null +Tree/styles/focus = null +Tree/styles/hover = null +Tree/styles/panel = null +Tree/styles/selected = null +Tree/styles/selected_focus = null +Tree/styles/title_button_hover = null +Tree/styles/title_button_normal = null +Tree/styles/title_button_pressed = null +VScrollBar/styles/grabber = SubResource("StyleBoxFlat_dro16") +VScrollBar/styles/grabber_highlight = null +VScrollBar/styles/grabber_pressed = null +VScrollBar/styles/scroll = null +VScrollBar/styles/scroll_focus = null +VSeparator/styles/separator = null +VShaderEditor/styles/label_style = null +VSlider/styles/grabber_area = null +VSlider/styles/grabber_area_highlight = null +VSlider/styles/slider = null +Window/styles/embedded_border = null +Window/styles/embedded_unfocused_border = null diff --git a/Code/default.tres.bak b/Code/default.tres.bak new file mode 100644 index 0000000..69e51e3 --- /dev/null +++ b/Code/default.tres.bak @@ -0,0 +1,553 @@ +[gd_resource type="Theme" load_steps=28 format=3 uid="uid://b5uuv0ae6k3gt"] + +[ext_resource type="FontFile" uid="uid://crxxdiidbhsib" path="res://monogram.ttf" id="1_18iiw"] +[ext_resource type="StyleBox" uid="uid://c507n1pdgrxbu" path="res://style_box_texture_panel.tres" id="2_d152g"] +[ext_resource type="Texture2D" uid="uid://drkdd0sttb2ws" path="res://ui_retro/Windows_Button_Pressed.png" id="3_8pxow"] + +[sub_resource type="StyleBoxTexture" id="StyleBoxTexture_angib"] +texture = ExtResource("3_8pxow") +texture_margin_left = 2.0 +texture_margin_top = 2.0 +texture_margin_right = 2.0 +texture_margin_bottom = 2.0 +axis_stretch_horizontal = 1 +axis_stretch_vertical = 1 +region_rect = Rect2(0, 0, 15, 15) + +<<<<<<< Updated upstream +[sub_resource type="Image" id="Image_3e4uo"] +======= +[sub_resource type="Image" id="Image_pnm82"] +>>>>>>> Stashed changes +data = { +"data": PackedByteArray(255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 254, 255, 254, 222, 254, 255, 254, 243, 254, 255, 254, 243, 254, 255, 254, 243, 254, 255, 254, 243, 254, 255, 254, 243, 254, 255, 254, 243, 254, 255, 254, 243, 254, 255, 254, 243, 254, 255, 254, 243, 254, 255, 254, 243, 254, 255, 254, 243, 254, 255, 254, 243, 254, 255, 254, 222, 255, 255, 255, 0, 255, 255, 255, 0, 254, 255, 254, 243, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 243, 255, 255, 255, 0, 255, 255, 255, 0, 254, 255, 254, 243, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 243, 255, 255, 255, 0, 255, 255, 255, 0, 254, 255, 254, 243, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 243, 255, 255, 255, 0, 255, 255, 255, 0, 254, 255, 254, 243, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 243, 255, 255, 255, 0, 255, 255, 255, 0, 254, 255, 254, 243, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 243, 255, 255, 255, 0, 255, 255, 255, 0, 254, 255, 254, 243, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 243, 255, 255, 255, 0, 255, 255, 255, 0, 254, 255, 254, 243, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 243, 255, 255, 255, 0, 255, 255, 255, 0, 254, 255, 254, 243, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 251, 254, 255, 254, 243, 254, 255, 254, 243, 254, 255, 254, 251, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 243, 255, 255, 255, 0, 255, 255, 255, 0, 254, 255, 254, 243, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 253, 255, 253, 251, 254, 255, 254, 234, 255, 255, 255, 65, 252, 255, 252, 66, 254, 255, 254, 234, 253, 255, 253, 251, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 243, 255, 255, 255, 0, 255, 255, 255, 0, 254, 255, 254, 243, 254, 255, 254, 250, 254, 255, 254, 250, 255, 255, 255, 249, 254, 255, 254, 214, 255, 255, 255, 34, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 34, 255, 255, 255, 214, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 250, 254, 255, 254, 243, 255, 255, 255, 0, 255, 255, 255, 0, 254, 255, 254, 243, 254, 255, 254, 250, 253, 255, 253, 248, 254, 255, 254, 178, 255, 255, 255, 13, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 13, 254, 255, 254, 178, 254, 255, 254, 247, 254, 255, 254, 250, 254, 255, 254, 243, 255, 255, 255, 0, 255, 255, 255, 0, 254, 255, 254, 243, 254, 255, 254, 244, 255, 255, 255, 127, 255, 255, 255, 2, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 2, 254, 255, 254, 128, 254, 255, 254, 244, 254, 255, 254, 243, 255, 255, 255, 0, 255, 255, 255, 0, 254, 255, 254, 206, 255, 255, 255, 75, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 75, 254, 255, 254, 206, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0), +"format": "RGBA8", +"height": 16, +"mipmaps": false, +"width": 16 +} + +[sub_resource type="ImageTexture" id="ImageTexture_6qvr4"] +<<<<<<< Updated upstream +image = SubResource("Image_3e4uo") + +[sub_resource type="Image" id="Image_a4c5e"] +======= +image = SubResource("Image_pnm82") + +[sub_resource type="Image" id="Image_q3bw1"] +>>>>>>> Stashed changes +data = { +"data": PackedByteArray(255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 106, 106, 12, 255, 95, 95, 67, 255, 95, 95, 105, 255, 94, 94, 122, 255, 94, 94, 122, 255, 95, 95, 105, 255, 96, 96, 66, 255, 116, 116, 11, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 44, 255, 94, 94, 122, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 122, 255, 97, 97, 42, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 44, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 97, 97, 42, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 106, 106, 12, 255, 94, 94, 122, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 95, 95, 121, 255, 93, 93, 11, 255, 255, 255, 0, 255, 255, 255, 0, 255, 95, 95, 67, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 65, 255, 255, 255, 0, 255, 255, 255, 0, 255, 95, 95, 105, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 96, 96, 104, 255, 255, 255, 0, 255, 255, 255, 0, 255, 94, 94, 122, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 122, 255, 255, 255, 0, 255, 255, 255, 0, 255, 94, 94, 122, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 95, 95, 121, 255, 255, 255, 0, 255, 255, 255, 0, 255, 95, 95, 105, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 103, 255, 255, 255, 0, 255, 255, 255, 0, 255, 96, 96, 66, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 65, 255, 255, 255, 0, 255, 255, 255, 0, 255, 116, 116, 11, 255, 94, 94, 122, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 95, 95, 121, 255, 102, 102, 10, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 97, 97, 42, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 93, 93, 41, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 97, 97, 42, 255, 95, 95, 121, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 94, 94, 128, 255, 95, 95, 121, 255, 93, 93, 41, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 11, 255, 94, 94, 65, 255, 96, 96, 104, 255, 94, 94, 122, 255, 95, 95, 121, 255, 94, 94, 103, 255, 94, 94, 65, 255, 102, 102, 10, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0), +"format": "RGBA8", +"height": 16, +"mipmaps": false, +"width": 16 +} + +[sub_resource type="ImageTexture" id="ImageTexture_gavo6"] +<<<<<<< Updated upstream +image = SubResource("Image_a4c5e") + +[sub_resource type="Image" id="Image_w3ytt"] +======= +image = SubResource("Image_q3bw1") + +[sub_resource type="Image" id="Image_splbo"] +>>>>>>> Stashed changes +data = { +"data": PackedByteArray(255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 180, 180, 180, 81, 177, 177, 177, 88, 179, 179, 179, 10, 255, 255, 255, 0, 255, 255, 255, 0, 179, 179, 179, 10, 177, 177, 177, 88, 179, 179, 179, 80, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 177, 177, 177, 88, 178, 178, 178, 115, 178, 178, 178, 96, 179, 179, 179, 10, 179, 179, 179, 10, 178, 178, 178, 96, 178, 178, 178, 115, 177, 177, 177, 88, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 179, 179, 179, 10, 177, 177, 177, 95, 178, 178, 178, 115, 178, 178, 178, 96, 178, 178, 178, 96, 178, 178, 178, 115, 177, 177, 177, 95, 199, 199, 199, 9, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 179, 179, 179, 10, 177, 177, 177, 95, 178, 178, 178, 115, 178, 178, 178, 115, 177, 177, 177, 95, 199, 199, 199, 9, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 179, 179, 179, 10, 177, 177, 177, 88, 177, 177, 177, 88, 199, 199, 199, 9, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0), +"format": "RGBA8", +"height": 16, +"mipmaps": false, +"width": 16 +} + +[sub_resource type="ImageTexture" id="ImageTexture_fk8u1"] +<<<<<<< Updated upstream +image = SubResource("Image_w3ytt") + +[sub_resource type="Image" id="Image_qgekh"] +======= +image = SubResource("Image_splbo") + +[sub_resource type="Image" id="Image_pd27x"] +>>>>>>> Stashed changes +data = { +"data": PackedByteArray(255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 184, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 181, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 232, 255, 255, 255, 43, 255, 255, 255, 120, 255, 255, 255, 255, 255, 255, 255, 254, 255, 255, 255, 117, 255, 255, 255, 43, 255, 255, 255, 235, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 227, 255, 255, 255, 7, 255, 255, 255, 0, 255, 255, 255, 108, 255, 255, 255, 107, 255, 255, 255, 0, 255, 255, 255, 8, 255, 255, 255, 228, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 255, 255, 255, 255, 184, 255, 255, 255, 7, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 8, 255, 255, 255, 185, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 184, 255, 255, 255, 7, 255, 255, 255, 9, 255, 255, 255, 186, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 222, 255, 255, 255, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 181, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 180, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0), +"format": "RGBA8", +"height": 12, +"mipmaps": false, +"width": 12 +} + +[sub_resource type="ImageTexture" id="ImageTexture_xw1o8"] +<<<<<<< Updated upstream +image = SubResource("Image_qgekh") + +[sub_resource type="Image" id="Image_1wvdn"] +======= +image = SubResource("Image_pd27x") + +[sub_resource type="Image" id="Image_3ehqm"] +>>>>>>> Stashed changes +data = { +"data": PackedByteArray(255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 180, 180, 180, 81, 177, 177, 177, 88, 179, 179, 179, 10, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 177, 177, 177, 88, 178, 178, 178, 115, 177, 177, 177, 95, 179, 179, 179, 10, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 179, 179, 179, 10, 178, 178, 178, 96, 178, 178, 178, 115, 177, 177, 177, 95, 179, 179, 179, 10, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 179, 179, 179, 10, 178, 178, 178, 96, 178, 178, 178, 115, 177, 177, 177, 88, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 179, 179, 179, 10, 178, 178, 178, 96, 178, 178, 178, 115, 177, 177, 177, 88, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 179, 179, 179, 10, 178, 178, 178, 96, 178, 178, 178, 115, 177, 177, 177, 95, 199, 199, 199, 9, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 177, 177, 177, 88, 178, 178, 178, 115, 177, 177, 177, 95, 199, 199, 199, 9, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 179, 179, 179, 80, 177, 177, 177, 88, 199, 199, 199, 9, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0), +"format": "RGBA8", +"height": 16, +"mipmaps": false, +"width": 16 +} + +[sub_resource type="ImageTexture" id="ImageTexture_1oxox"] +<<<<<<< Updated upstream +image = SubResource("Image_1wvdn") + +[sub_resource type="Image" id="Image_t5c0f"] +======= +image = SubResource("Image_3ehqm") + +[sub_resource type="Image" id="Image_3cmxm"] +>>>>>>> Stashed changes +data = { +"data": PackedByteArray(255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 184, 255, 255, 255, 255, 255, 255, 255, 232, 255, 255, 255, 227, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 181, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 43, 255, 255, 255, 7, 255, 255, 255, 184, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 120, 255, 255, 255, 0, 255, 255, 255, 7, 255, 255, 255, 184, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 108, 255, 255, 255, 0, 255, 255, 255, 7, 255, 255, 255, 222, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 254, 255, 255, 255, 107, 255, 255, 255, 0, 255, 255, 255, 9, 255, 255, 255, 224, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 117, 255, 255, 255, 0, 255, 255, 255, 8, 255, 255, 255, 186, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 43, 255, 255, 255, 8, 255, 255, 255, 185, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 181, 255, 255, 255, 255, 255, 255, 255, 235, 255, 255, 255, 228, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 180, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0), +"format": "RGBA8", +"height": 12, +"mipmaps": false, +"width": 12 +} + +[sub_resource type="ImageTexture" id="ImageTexture_x50dd"] +<<<<<<< Updated upstream +image = SubResource("Image_t5c0f") + +[sub_resource type="Image" id="Image_ie33q"] +======= +image = SubResource("Image_3cmxm") + +[sub_resource type="Image" id="Image_m5iva"] +>>>>>>> Stashed changes +data = { +"data": PackedByteArray(255, 255, 255, 0, 255, 255, 255, 10, 255, 255, 255, 44, 255, 255, 255, 60, 255, 255, 255, 64, 255, 255, 255, 64, 255, 255, 255, 64, 255, 255, 255, 64, 255, 255, 255, 64, 255, 255, 255, 64, 255, 255, 255, 60, 255, 255, 255, 43, 255, 255, 255, 9, 255, 255, 255, 0, 255, 255, 255, 10, 255, 255, 255, 60, 255, 255, 255, 64, 255, 255, 255, 64, 255, 255, 255, 64, 255, 255, 255, 64, 255, 255, 255, 64, 255, 255, 255, 64, 255, 255, 255, 64, 255, 255, 255, 64, 255, 255, 255, 64, 255, 255, 255, 64, 255, 255, 255, 60, 255, 255, 255, 9, 255, 255, 255, 43, 255, 255, 255, 64, 255, 255, 255, 64, 255, 255, 255, 64, 255, 255, 255, 64, 255, 255, 255, 64, 255, 255, 255, 64, 255, 255, 255, 64, 255, 255, 255, 64, 255, 255, 255, 64, 255, 255, 255, 64, 255, 255, 255, 64, 255, 255, 255, 64, 255, 255, 255, 43, 255, 255, 255, 60, 255, 255, 255, 64, 255, 255, 255, 16, 255, 255, 255, 20, 255, 255, 255, 64, 255, 255, 255, 64, 255, 255, 255, 16, 255, 255, 255, 20, 255, 255, 255, 64, 255, 255, 255, 64, 255, 255, 255, 16, 255, 255, 255, 20, 255, 255, 255, 64, 255, 255, 255, 60, 255, 255, 255, 60, 255, 255, 255, 64, 255, 255, 255, 16, 255, 255, 255, 17, 255, 255, 255, 64, 255, 255, 255, 64, 255, 255, 255, 16, 255, 255, 255, 17, 255, 255, 255, 64, 255, 255, 255, 64, 255, 255, 255, 16, 255, 255, 255, 17, 255, 255, 255, 64, 255, 255, 255, 59, 255, 255, 255, 43, 255, 255, 255, 64, 255, 255, 255, 64, 255, 255, 255, 64, 255, 255, 255, 64, 255, 255, 255, 64, 255, 255, 255, 64, 255, 255, 255, 64, 255, 255, 255, 64, 255, 255, 255, 64, 255, 255, 255, 64, 255, 255, 255, 64, 255, 255, 255, 64, 255, 255, 255, 42, 255, 255, 255, 9, 255, 255, 255, 60, 255, 255, 255, 64, 255, 255, 255, 64, 255, 255, 255, 64, 255, 255, 255, 64, 255, 255, 255, 64, 255, 255, 255, 64, 255, 255, 255, 64, 255, 255, 255, 64, 255, 255, 255, 64, 255, 255, 255, 64, 255, 255, 255, 59, 255, 255, 255, 8, 255, 255, 255, 0, 255, 255, 255, 9, 255, 255, 255, 43, 255, 255, 255, 60, 255, 255, 255, 64, 255, 255, 255, 64, 255, 255, 255, 64, 255, 255, 255, 64, 255, 255, 255, 64, 255, 255, 255, 64, 255, 255, 255, 60, 255, 255, 255, 43, 255, 255, 255, 9, 255, 255, 255, 0), +"format": "RGBA8", +"height": 8, +"mipmaps": false, +"width": 14 +} + +[sub_resource type="ImageTexture" id="ImageTexture_6cqlr"] +<<<<<<< Updated upstream +image = SubResource("Image_ie33q") + +[sub_resource type="Image" id="Image_bwbxo"] +======= +image = SubResource("Image_m5iva") + +[sub_resource type="Image" id="Image_i200k"] +>>>>>>> Stashed changes +data = { +"data": PackedByteArray(255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 1, 179, 179, 179, 20, 188, 188, 188, 19, 255, 255, 255, 1, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 179, 179, 179, 20, 180, 180, 180, 64, 180, 180, 180, 64, 188, 188, 188, 19, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 188, 188, 188, 19, 180, 180, 180, 64, 180, 180, 180, 64, 188, 188, 188, 19, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 1, 188, 188, 188, 19, 188, 188, 188, 19, 255, 255, 255, 1, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0), +"format": "RGBA8", +"height": 8, +"mipmaps": false, +"width": 8 +} + +[sub_resource type="ImageTexture" id="ImageTexture_lkg32"] +<<<<<<< Updated upstream +image = SubResource("Image_bwbxo") + +[sub_resource type="Image" id="Image_8myu3"] +======= +image = SubResource("Image_i200k") + +[sub_resource type="Image" id="Image_mufvt"] +>>>>>>> Stashed changes +data = { +"data": PackedByteArray(181, 181, 181, 48, 179, 179, 179, 50, 213, 213, 213, 6, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 180, 180, 180, 64, 180, 180, 180, 64, 179, 179, 179, 50, 180, 180, 180, 64, 180, 180, 180, 54, 213, 213, 213, 6, 255, 255, 255, 0, 255, 255, 255, 0, 180, 180, 180, 64, 180, 180, 180, 64, 204, 204, 204, 5, 178, 178, 178, 53, 180, 180, 180, 64, 180, 180, 180, 54, 213, 213, 213, 6, 255, 255, 255, 0, 180, 180, 180, 64, 180, 180, 180, 64, 255, 255, 255, 0, 204, 204, 204, 5, 182, 182, 182, 52, 180, 180, 180, 64, 180, 180, 180, 51, 255, 255, 255, 0, 180, 180, 180, 64, 180, 180, 180, 64, 255, 255, 255, 0, 213, 213, 213, 6, 180, 180, 180, 54, 180, 180, 180, 64, 179, 179, 179, 50, 255, 255, 255, 0, 180, 180, 180, 64, 180, 180, 180, 64, 213, 213, 213, 6, 180, 180, 180, 54, 180, 180, 180, 64, 183, 183, 183, 53, 170, 170, 170, 6, 255, 255, 255, 0, 180, 180, 180, 64, 180, 180, 180, 64, 182, 182, 182, 49, 180, 180, 180, 64, 183, 183, 183, 53, 170, 170, 170, 6, 255, 255, 255, 0, 255, 255, 255, 0, 180, 180, 180, 64, 180, 180, 180, 64, 181, 181, 181, 41, 182, 182, 182, 49, 170, 170, 170, 6, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 180, 180, 180, 64, 180, 180, 180, 64), +"format": "RGBA8", +"height": 8, +"mipmaps": false, +"width": 8 +} + +[sub_resource type="ImageTexture" id="ImageTexture_575hg"] +<<<<<<< Updated upstream +image = SubResource("Image_8myu3") +======= +image = SubResource("Image_mufvt") +>>>>>>> Stashed changes + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_urlhv"] +content_margin_left = 0.0 +content_margin_top = 0.0 +content_margin_right = 0.0 +content_margin_bottom = 0.0 +bg_color = Color(0.1, 0.1, 0.1, 0.6) +corner_radius_top_left = 3 +corner_radius_top_right = 3 +corner_radius_bottom_right = 3 +corner_radius_bottom_left = 3 +corner_detail = 5 + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_63enx"] +content_margin_left = 4.0 +content_margin_top = 4.0 +content_margin_right = 4.0 +content_margin_bottom = 4.0 +bg_color = Color(1, 1, 1, 0.75) +draw_center = false +border_width_left = 2 +border_width_top = 2 +border_width_right = 2 +border_width_bottom = 2 +corner_radius_top_left = 3 +corner_radius_top_right = 3 +corner_radius_bottom_right = 3 +corner_radius_bottom_left = 3 +corner_detail = 5 +expand_margin_left = 2.0 +expand_margin_top = 2.0 +expand_margin_right = 2.0 +expand_margin_bottom = 2.0 + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_78dli"] +content_margin_left = 4.0 +content_margin_top = 4.0 +content_margin_right = 4.0 +content_margin_bottom = 4.0 +bg_color = Color(0.1, 0.1, 0.1, 0.6) +border_width_bottom = 2 +border_color = Color(0, 0, 0, 0.6) +corner_radius_top_left = 3 +corner_radius_top_right = 3 +corner_radius_bottom_right = 3 +corner_radius_bottom_left = 3 +corner_detail = 5 + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_jn5vw"] +content_margin_left = 4.0 +content_margin_top = 4.0 +content_margin_right = 4.0 +content_margin_bottom = 4.0 +bg_color = Color(0.1, 0.1, 0.1, 0.3) +border_width_bottom = 2 +border_color = Color(0, 0, 0, 0.3) +corner_radius_top_left = 3 +corner_radius_top_right = 3 +corner_radius_bottom_right = 3 +corner_radius_bottom_left = 3 +corner_detail = 5 + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_dro16"] + +[resource] +default_font_size = 32 +AcceptDialog/constants/buttons_separation = 0 +AcceptDialog/styles/panel = null +AssetLib/styles/bg = null +AssetLib/styles/panel = null +Button/colors/font_color = Color(0, 0, 0, 1) +Button/colors/font_disabled_color = Color(0.875, 0.875, 0.875, 0.5) +Button/colors/font_focus_color = Color(0, 0, 0, 1) +Button/colors/font_hover_color = Color(0.32549, 0.32549, 0.32549, 1) +Button/colors/font_hover_pressed_color = Color(0.325439, 0.325441, 0.325442, 1) +Button/colors/font_outline_color = Color(1, 1, 1, 1) +Button/colors/font_pressed_color = Color(0.27022, 0.270222, 0.270223, 1) +Button/colors/icon_disabled_color = Color(1, 1, 1, 0.4) +Button/colors/icon_focus_color = Color(1, 1, 1, 1) +Button/colors/icon_hover_color = Color(1, 1, 1, 1) +Button/colors/icon_hover_pressed_color = Color(1, 1, 1, 1) +Button/colors/icon_normal_color = Color(1, 1, 1, 1) +Button/colors/icon_pressed_color = Color(1, 1, 1, 1) +Button/constants/h_separation = 0 +Button/constants/icon_max_width = 0 +Button/constants/outline_size = 1 +Button/fonts/font = ExtResource("1_18iiw") +Button/styles/disabled = ExtResource("2_d152g") +Button/styles/focus = null +Button/styles/hover = ExtResource("2_d152g") +Button/styles/normal = ExtResource("2_d152g") +Button/styles/pressed = SubResource("StyleBoxTexture_angib") +CheckBox/styles/disabled = null +CheckBox/styles/hover = null +CheckBox/styles/hover_pressed = null +CheckBox/styles/normal = null +CheckBox/styles/pressed = null +CheckButton/styles/disabled = null +CheckButton/styles/hover = null +CheckButton/styles/hover_pressed = null +CheckButton/styles/normal = null +CheckButton/styles/pressed = null +CodeEdit/colors/background_color = Color(0.0823529, 0.0823529, 0.0823529, 1) +CodeEdit/colors/bookmark_color = Color(0.5, 0.64, 1, 0.8) +CodeEdit/colors/brace_mismatch_color = Color(1, 0.2, 0.2, 1) +CodeEdit/colors/breakpoint_color = Color(0.9, 0.29, 0.3, 1) +CodeEdit/colors/caret_background_color = Color(0, 0, 0, 1) +CodeEdit/colors/caret_color = Color(0.875, 0.875, 0.875, 1) +CodeEdit/colors/code_folding_color = Color(0.8, 0.8, 0.8, 0.8) +CodeEdit/colors/completion_background_color = Color(0.17, 0.16, 0.2, 1) +CodeEdit/colors/completion_existing_color = Color(0.87, 0.87, 0.87, 0.13) +CodeEdit/colors/completion_scroll_color = Color(1, 1, 1, 0.29) +CodeEdit/colors/completion_scroll_hovered_color = Color(1, 1, 1, 0.4) +CodeEdit/colors/completion_selected_color = Color(0.26, 0.26, 0.27, 1) +CodeEdit/colors/current_line_color = Color(0.25, 0.25, 0.26, 0.8) +CodeEdit/colors/executing_line_color = Color(0.98, 0.89, 0.27, 1) +CodeEdit/colors/folded_code_region_color = Color(0.68, 0.46, 0.77, 0.2) +CodeEdit/colors/font_color = Color(0.875, 0.875, 0.875, 1) +CodeEdit/colors/font_outline_color = Color(1, 1, 1, 1) +CodeEdit/colors/font_placeholder_color = Color(0.875, 0.875, 0.875, 0.6) +CodeEdit/colors/font_readonly_color = Color(0.875, 0.875, 0.875, 0.5) +CodeEdit/colors/font_selected_color = Color(0, 0, 0, 0) +CodeEdit/colors/line_length_guideline_color = Color(0.3, 0.5, 0.8, 0.1) +CodeEdit/colors/line_number_color = Color(0.67, 0.67, 0.67, 0.4) +CodeEdit/colors/search_result_border_color = Color(0.3, 0.3, 0.3, 0.4) +CodeEdit/colors/search_result_color = Color(0.3, 0.3, 0.3, 1) +CodeEdit/colors/selection_color = Color(0.5, 0.5, 0.5, 1) +CodeEdit/colors/word_highlighted_color = Color(0.8, 0.9, 0.9, 0.15) +CodeEdit/constants/completion_lines = 7 +CodeEdit/constants/completion_max_width = 50 +CodeEdit/constants/completion_scroll_width = 6 +CodeEdit/constants/line_spacing = 4 +CodeEdit/constants/outline_size = 0 +CodeEdit/font_sizes/font_size = 48 +CodeEdit/fonts/font = ExtResource("1_18iiw") +CodeEdit/icons/bookmark = SubResource("ImageTexture_6qvr4") +CodeEdit/icons/breakpoint = SubResource("ImageTexture_gavo6") +CodeEdit/icons/can_fold = SubResource("ImageTexture_fk8u1") +CodeEdit/icons/can_fold_code_region = SubResource("ImageTexture_xw1o8") +CodeEdit/icons/executing_line = SubResource("ImageTexture_1oxox") +CodeEdit/icons/folded = SubResource("ImageTexture_1oxox") +CodeEdit/icons/folded_code_region = SubResource("ImageTexture_x50dd") +CodeEdit/icons/folded_eol_icon = SubResource("ImageTexture_6cqlr") +CodeEdit/icons/space = SubResource("ImageTexture_lkg32") +CodeEdit/icons/tab = SubResource("ImageTexture_575hg") +CodeEdit/styles/completion = SubResource("StyleBoxFlat_urlhv") +CodeEdit/styles/focus = SubResource("StyleBoxFlat_63enx") +CodeEdit/styles/normal = SubResource("StyleBoxFlat_78dli") +CodeEdit/styles/read_only = SubResource("StyleBoxFlat_jn5vw") +ColorPresetButton/styles/preset_fg = null +ControlEditorPopupPanel/styles/panel = null +DarkButton/base_type = &"Button" +Editor/styles/sub_inspector_bg0 = null +Editor/styles/sub_inspector_bg1 = null +Editor/styles/sub_inspector_bg10 = null +Editor/styles/sub_inspector_bg11 = null +Editor/styles/sub_inspector_bg12 = null +Editor/styles/sub_inspector_bg13 = null +Editor/styles/sub_inspector_bg14 = null +Editor/styles/sub_inspector_bg15 = null +Editor/styles/sub_inspector_bg2 = null +Editor/styles/sub_inspector_bg3 = null +Editor/styles/sub_inspector_bg4 = null +Editor/styles/sub_inspector_bg5 = null +Editor/styles/sub_inspector_bg6 = null +Editor/styles/sub_inspector_bg7 = null +Editor/styles/sub_inspector_bg8 = null +Editor/styles/sub_inspector_bg9 = null +Editor/styles/sub_inspector_property_bg0 = null +Editor/styles/sub_inspector_property_bg1 = null +Editor/styles/sub_inspector_property_bg10 = null +Editor/styles/sub_inspector_property_bg11 = null +Editor/styles/sub_inspector_property_bg12 = null +Editor/styles/sub_inspector_property_bg13 = null +Editor/styles/sub_inspector_property_bg14 = null +Editor/styles/sub_inspector_property_bg15 = null +Editor/styles/sub_inspector_property_bg2 = null +Editor/styles/sub_inspector_property_bg3 = null +Editor/styles/sub_inspector_property_bg4 = null +Editor/styles/sub_inspector_property_bg5 = null +Editor/styles/sub_inspector_property_bg6 = null +Editor/styles/sub_inspector_property_bg7 = null +Editor/styles/sub_inspector_property_bg8 = null +Editor/styles/sub_inspector_property_bg9 = null +EditorAbout/styles/panel = null +EditorHelp/styles/background = null +EditorIcons/icons/Control = null +EditorInspectorCategory/styles/bg = null +EditorInspectorSection/styles/indent_box = null +EditorLogFilterButton/styles/pressed = null +EditorProperty/styles/bg = null +EditorProperty/styles/bg_group_note = null +EditorProperty/styles/bg_selected = null +EditorProperty/styles/child_bg = null +EditorSettingsDialog/styles/panel = null +EditorSpinSlider/styles/label_bg = null +EditorStyles/styles/Background = null +EditorStyles/styles/BottomPanel = null +EditorStyles/styles/BottomPanelDebuggerOverride = null +EditorStyles/styles/CanvasItemInfoOverlay = null +EditorStyles/styles/Content = null +EditorStyles/styles/ContextualToolbar = null +EditorStyles/styles/DebuggerPanel = null +EditorStyles/styles/DictionaryAddItem = null +EditorStyles/styles/Focus = null +EditorStyles/styles/FocusViewport = null +EditorStyles/styles/Information3dViewport = null +EditorStyles/styles/LaunchPadMovieMode = null +EditorStyles/styles/LaunchPadNormal = null +EditorStyles/styles/MenuHover = null +EditorStyles/styles/MenuPanel = null +EditorStyles/styles/MovieWriterButtonNormal = null +EditorStyles/styles/MovieWriterButtonPressed = null +EditorStyles/styles/PanelForeground = null +EditorStyles/styles/ScriptEditor = null +EditorStyles/styles/ScriptEditorPanel = null +EditorStyles/styles/ScriptEditorPanelFloating = null +EditorStyles/styles/TextureRegionPreviewBG = null +EditorStyles/styles/TextureRegionPreviewFG = null +EditorStyles/styles/ThemeEditorPreviewBG = null +EditorStyles/styles/ThemeEditorPreviewFG = null +EditorValidationPanel/styles/panel = null +FlatButton/styles/disabled = null +FlatButton/styles/hover = null +FlatButton/styles/normal = null +FlatButton/styles/pressed = null +FlatMenuButton/styles/disabled = null +FlatMenuButton/styles/hover = null +FlatMenuButton/styles/normal = null +FlatMenuButton/styles/pressed = null +GraphEdit/styles/menu_panel = null +GraphEdit/styles/panel = null +GraphEditMinimap/styles/camera = null +GraphEditMinimap/styles/node = null +GraphEditMinimap/styles/panel = null +GraphElement/styles/panel = null +GraphElement/styles/panel_selected = null +GraphElement/styles/titlebar = null +GraphElement/styles/titlebar_selected = null +GraphNode/styles/panel = null +GraphNode/styles/panel_selected = null +GraphNode/styles/slot = null +GraphNode/styles/titlebar = null +GraphNode/styles/titlebar_selected = null +GraphNodeTitleLabel/styles/normal = null +GraphStateMachine/styles/error_panel = null +GraphStateMachine/styles/node_frame = null +GraphStateMachine/styles/node_frame_end = null +GraphStateMachine/styles/node_frame_playing = null +GraphStateMachine/styles/node_frame_selected = null +GraphStateMachine/styles/node_frame_start = null +GraphStateMachine/styles/panel = null +HScrollBar/styles/grabber = null +HScrollBar/styles/grabber_highlight = null +HScrollBar/styles/grabber_pressed = null +HScrollBar/styles/scroll = null +HScrollBar/styles/scroll_focus = null +HSeparator/styles/separator = null +HSlider/styles/grabber_area = null +HSlider/styles/grabber_area_highlight = null +HSlider/styles/slider = null +InspectorActionButton/styles/disabled = null +InspectorActionButton/styles/hover = null +InspectorActionButton/styles/normal = null +InspectorActionButton/styles/pressed = null +ItemList/styles/cursor = null +ItemList/styles/cursor_unfocused = null +ItemList/styles/focus = null +ItemList/styles/hovered = null +ItemList/styles/panel = null +ItemList/styles/selected = null +ItemList/styles/selected_focus = null +Label/styles/normal = null +LineEdit/styles/focus = null +LineEdit/styles/normal = null +LineEdit/styles/read_only = null +LinkButton/styles/focus = null +MarginContainer/constants/margin_bottom = 5 +MarginContainer/constants/margin_left = 5 +MarginContainer/constants/margin_right = 5 +MarginContainer/constants/margin_top = 5 +MenuBar/styles/disabled = null +MenuBar/styles/hover = null +MenuBar/styles/normal = null +MenuBar/styles/pressed = null +MenuButton/styles/disabled = null +MenuButton/styles/focus = null +MenuButton/styles/hover = null +MenuButton/styles/normal = null +MenuButton/styles/pressed = null +OptionButton/styles/disabled = null +OptionButton/styles/disabled_mirrored = null +OptionButton/styles/focus = null +OptionButton/styles/hover = null +OptionButton/styles/hover_mirrored = null +OptionButton/styles/normal = null +OptionButton/styles/normal_mirrored = null +OptionButton/styles/pressed = null +OptionButton/styles/pressed_mirrored = null +Panel/styles/panel = ExtResource("2_d152g") +PanelContainer/colors/gv = Color(0, 0, 0, 1) +PanelContainer/styles/panel = null +PopupDialog/styles/panel = null +PopupMenu/styles/hover = null +PopupMenu/styles/labeled_separator_left = null +PopupMenu/styles/labeled_separator_right = null +PopupMenu/styles/panel = null +PopupMenu/styles/separator = null +PopupPanel/styles/panel = null +PreviewLightButton/styles/focus = null +PreviewLightButton/styles/hover = null +PreviewLightButton/styles/normal = null +PreviewLightButton/styles/pressed = null +ProgressBar/styles/background = null +ProgressBar/styles/fill = null +ProjectManager/styles/search_panel = null +ProjectSettingsEditor/styles/panel = null +ProjectTag/styles/hover = null +ProjectTag/styles/normal = null +ProjectTag/styles/pressed = null +ResizablePanel/styles/panel = null +RichTextLabel/styles/focus = null +RichTextLabel/styles/normal = null +TabBar/styles/button_highlight = null +TabBar/styles/button_pressed = null +TabBar/styles/tab_disabled = null +TabBar/styles/tab_focus = null +TabBar/styles/tab_hovered = null +TabBar/styles/tab_selected = null +TabBar/styles/tab_unselected = null +TabContainer/styles/panel = null +TabContainer/styles/tab_disabled = null +TabContainer/styles/tab_focus = null +TabContainer/styles/tab_hovered = null +TabContainer/styles/tab_selected = null +TabContainer/styles/tab_unselected = null +TabContainer/styles/tabbar_background = null +TabContainerOdd/styles/panel = null +TabContainerOdd/styles/tab_selected = null +TextEdit/colors/background_color = Color(0, 0, 0, 1) +TextEdit/colors/font_color = Color(1, 1, 1, 1) +TextEdit/colors/font_readonly_color = Color(1, 1, 1, 1) +TextEdit/styles/focus = null +TextEdit/styles/normal = null +TextEdit/styles/read_only = null +ThemeEditor/styles/preview_picker_label = null +ThemeEditor/styles/preview_picker_overlay = null +TooltipPanel/styles/panel = null +Tree/styles/button_pressed = null +Tree/styles/cursor = null +Tree/styles/cursor_unfocused = null +Tree/styles/custom_button = null +Tree/styles/custom_button_hover = null +Tree/styles/custom_button_pressed = null +Tree/styles/focus = null +Tree/styles/hover = null +Tree/styles/panel = null +Tree/styles/selected = null +Tree/styles/selected_focus = null +Tree/styles/title_button_hover = null +Tree/styles/title_button_normal = null +Tree/styles/title_button_pressed = null +VScrollBar/styles/grabber = SubResource("StyleBoxFlat_dro16") +VScrollBar/styles/grabber_highlight = null +VScrollBar/styles/grabber_pressed = null +VScrollBar/styles/scroll = null +VScrollBar/styles/scroll_focus = null +VSeparator/styles/separator = null +VShaderEditor/styles/label_style = null +VSlider/styles/grabber_area = null +VSlider/styles/grabber_area_highlight = null +VSlider/styles/slider = null +Window/styles/embedded_border = null +Window/styles/embedded_unfocused_border = null diff --git a/Code/icon.svg b/Code/icon.svg new file mode 100644 index 0000000..b370ceb --- /dev/null +++ b/Code/icon.svg @@ -0,0 +1 @@ + diff --git a/Code/icon.svg.import b/Code/icon.svg.import new file mode 100644 index 0000000..b626342 --- /dev/null +++ b/Code/icon.svg.import @@ -0,0 +1,37 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bgvaug42elsy4" +path="res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://icon.svg" +dest_files=["res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.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 +svg/scale=1.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/Code/interaction/InteractionManager.gd b/Code/interaction/InteractionManager.gd new file mode 100644 index 0000000..26a950a --- /dev/null +++ b/Code/interaction/InteractionManager.gd @@ -0,0 +1,50 @@ +extends Node2D + +@onready var player = get_tree().get_first_node_in_group("player") +@onready var box = get_tree().get_first_node_in_group("player") + +var active_areas = [] +var can_interact = true + +func _ready(): + player.connect("picked_up", Callable(self, "_on_push")) + player.connect("can_push", Callable(self, "_on_can_push")) + + box.connect("push_result", Callable(self, "_on_push_result")) + +func register_area(area: InteractionArea): + active_areas.push_back(area) + +func unregister_area(area: InteractionArea): + var index = active_areas.find(area) + if index != -1: + active_areas.remove_at(index) + +func _on_push(): + if can_interact: + if active_areas.size() > 0: + can_interact = false + for area in active_areas: + await area.interact.call() + can_interact = true + +func _on_can_push(): + if can_interact: + if active_areas.size() > 0: + can_interact = false + var can_push = await active_areas[0].can_interact.call() + can_interact = true + emit_signal("can_push_result", can_push) # Emit the result to the player + return can_push + +func _on_push_result(result: bool): + if result: + print("The box can be pushed!") + else: + print("The box cannot be pushed!") + +func check_can_push() -> bool: + if active_areas.size() > 0: + var can_push = await active_areas[0].can_interact.call() + return can_push + return false diff --git a/Code/interaction/InteractionManager.tscn b/Code/interaction/InteractionManager.tscn new file mode 100644 index 0000000..2842ba6 --- /dev/null +++ b/Code/interaction/InteractionManager.tscn @@ -0,0 +1,6 @@ +[gd_scene load_steps=2 format=3 uid="uid://c7m1f03wf08sa"] + +[ext_resource type="Script" path="res://interaction/InteractionManager.gd" id="1_kl5e0"] + +[node name="InteractionManager" type="Node2D"] +script = ExtResource("1_kl5e0") diff --git a/Code/interaction/interaction area/interaction_area.gd b/Code/interaction/interaction area/interaction_area.gd new file mode 100644 index 0000000..7d2a65e --- /dev/null +++ b/Code/interaction/interaction area/interaction_area.gd @@ -0,0 +1,22 @@ +extends Area2D +class_name InteractionArea + +@export var action_name: String = "interact" + +@onready var interaction_manager = get_tree().get_first_node_in_group("interaction_manager") # Ensure to point to the InteractionManager + + +var interact: Callable = func(): + pass + +var can_interact: Callable = func(): + pass + +func _on_body_entered(body): + if body.is_in_group("player"): + interaction_manager.register_area(self) + + +func _on_body_exited(body): + if body.is_in_group("player"): + interaction_manager.unregister_area(self) diff --git a/Code/interaction/interaction area/interaction_area.tscn b/Code/interaction/interaction area/interaction_area.tscn new file mode 100644 index 0000000..fb84aee --- /dev/null +++ b/Code/interaction/interaction area/interaction_area.tscn @@ -0,0 +1,10 @@ +[gd_scene load_steps=2 format=3 uid="uid://diywhsmnxkx8p"] + +[ext_resource type="Script" path="res://interaction/interaction area/interaction_area.gd" id="1_ffku4"] + +[node name="InteractionArea" type="Area2D"] +collision_layer = 0 +script = ExtResource("1_ffku4") + +[connection signal="body_entered" from="." to="." method="_on_body_entered"] +[connection signal="body_exited" from="." to="." method="_on_body_exited"] diff --git a/Code/levels/Node.gd b/Code/levels/Node.gd new file mode 100644 index 0000000..3ff7fc1 --- /dev/null +++ b/Code/levels/Node.gd @@ -0,0 +1,31 @@ +signal up +signal down +signal left +signal right + +var next_command = true + +func _ready(): + var file = FileAccess.open("res://commands.txt", FileAccess.READ) + if file: + var line = file.get_line() + while line != "": + process_command(line) + await execute_next_command() + line = file.get_line() + file.close() + +func process_command(command): + # Parse the command and execute corresponding actions + command = command.strip_edges() # Remove leading and trailing whitespaces + match command: + "u": + emit_signal("up") + "d": + emit_signal("down") + "l": + emit_signal("left") + "r": + emit_signal("right") + _: + print("Invalid command:", command) diff --git a/Code/levels/level_0.tscn b/Code/levels/level_0.tscn new file mode 100644 index 0000000..d4297bb --- /dev/null +++ b/Code/levels/level_0.tscn @@ -0,0 +1,368 @@ +[gd_scene load_steps=14 format=3 uid="uid://dgm4e3dj1l320"] + +[ext_resource type="Texture2D" uid="uid://buebn1dqinyin" path="res://art/tiles/robot_atlas.png" id="1_qi4vs"] +[ext_resource type="Texture2D" uid="uid://dwsmec5b5rj0y" path="res://art/tiles/water.png" id="2_1g22o"] +[ext_resource type="Texture2D" uid="uid://dqryivwwhqd0x" path="res://art/tiles/walls.png" id="3_3h02h"] +[ext_resource type="Script" path="res://TileMap.gd" id="3_lxvoo"] +[ext_resource type="PackedScene" uid="uid://vb8lfikq5dc7" path="res://box.tscn" id="6_crsa5"] +[ext_resource type="PackedScene" uid="uid://cchfvbtuste6s" path="res://characters/player_robot.tscn" id="6_hjdgv"] +[ext_resource type="PackedScene" uid="uid://deb7q6h0om8hc" path="res://End.tscn" id="7_xxre3"] +[ext_resource type="PackedScene" uid="uid://5q5c8pt7mew2" path="res://GameManager.tscn" id="8_nfk0q"] +[ext_resource type="PackedScene" uid="uid://c7m1f03wf08sa" path="res://interaction/InteractionManager.tscn" id="9_h8w3f"] + +[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_0ydj6"] +texture = ExtResource("1_qi4vs") +margins = Vector2i(0, 8) +0:0/0 = 0 +0:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +0:0/0/physics_layer_0/angular_velocity = 0.0 +1:0/0 = 0 +1:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +1:0/0/physics_layer_0/angular_velocity = 0.0 +2:0/0 = 0 +2:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +2:0/0/physics_layer_0/angular_velocity = 0.0 +4:0/0 = 0 +4:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:0/0/physics_layer_0/angular_velocity = 0.0 +5:0/0 = 0 +5:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +5:0/0/physics_layer_0/angular_velocity = 0.0 +6:0/0 = 0 +6:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +6:0/0/physics_layer_0/angular_velocity = 0.0 +7:0/0 = 0 +7:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:0/0/physics_layer_0/angular_velocity = 0.0 +8:0/0 = 0 +8:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:0/0/physics_layer_0/angular_velocity = 0.0 +9:0/0 = 0 +9:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:0/0/physics_layer_0/angular_velocity = 0.0 +10:0/0 = 0 +10:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:0/0/physics_layer_0/angular_velocity = 0.0 +10:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +0:1/0 = 0 +0:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +0:1/0/physics_layer_0/angular_velocity = 0.0 +1:1/0 = 0 +1:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +1:1/0/physics_layer_0/angular_velocity = 0.0 +2:1/0 = 0 +2:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +2:1/0/physics_layer_0/angular_velocity = 0.0 +3:1/0 = 0 +3:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:1/0/physics_layer_0/angular_velocity = 0.0 +4:1/0 = 0 +4:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:1/0/physics_layer_0/angular_velocity = 0.0 +5:1/0 = 0 +5:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +5:1/0/physics_layer_0/angular_velocity = 0.0 +6:1/0 = 0 +6:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +6:1/0/physics_layer_0/angular_velocity = 0.0 +7:1/0 = 0 +7:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:1/0/physics_layer_0/angular_velocity = 0.0 +8:1/0 = 0 +8:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:1/0/physics_layer_0/angular_velocity = 0.0 +9:1/0 = 0 +9:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:1/0/physics_layer_0/angular_velocity = 0.0 +10:1/0 = 0 +10:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:1/0/physics_layer_0/angular_velocity = 0.0 +10:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +0:2/0 = 0 +0:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +0:2/0/physics_layer_0/angular_velocity = 0.0 +1:2/0 = 0 +1:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +1:2/0/physics_layer_0/angular_velocity = 0.0 +2:2/0 = 0 +2:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +2:2/0/physics_layer_0/angular_velocity = 0.0 +3:2/0 = 0 +3:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:2/0/physics_layer_0/angular_velocity = 0.0 +4:2/0 = 0 +4:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:2/0/physics_layer_0/angular_velocity = 0.0 +5:2/0 = 0 +5:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +5:2/0/physics_layer_0/angular_velocity = 0.0 +6:2/0 = 0 +6:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +6:2/0/physics_layer_0/angular_velocity = 0.0 +7:2/0 = 0 +7:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:2/0/physics_layer_0/angular_velocity = 0.0 +8:2/0 = 0 +8:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:2/0/physics_layer_0/angular_velocity = 0.0 +9:2/0 = 0 +9:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:2/0/physics_layer_0/angular_velocity = 0.0 +10:2/0 = 0 +10:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:2/0/physics_layer_0/angular_velocity = 0.0 +10:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +0:3/0 = 0 +0:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +0:3/0/physics_layer_0/angular_velocity = 0.0 +1:3/0 = 0 +1:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +1:3/0/physics_layer_0/angular_velocity = 0.0 +2:3/0 = 0 +2:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +2:3/0/physics_layer_0/angular_velocity = 0.0 +3:3/0 = 0 +3:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:3/0/physics_layer_0/angular_velocity = 0.0 +4:3/0 = 0 +4:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:3/0/physics_layer_0/angular_velocity = 0.0 +5:3/0 = 0 +5:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +5:3/0/physics_layer_0/angular_velocity = 0.0 +6:3/0 = 0 +6:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +6:3/0/physics_layer_0/angular_velocity = 0.0 +8:3/0 = 0 +8:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:3/0/physics_layer_0/angular_velocity = 0.0 +9:3/0 = 0 +9:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:3/0/physics_layer_0/angular_velocity = 0.0 +10:3/0 = 0 +10:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:3/0/physics_layer_0/angular_velocity = 0.0 +10:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +0:4/0 = 0 +0:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +0:4/0/physics_layer_0/angular_velocity = 0.0 +2:4/0 = 0 +2:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +2:4/0/physics_layer_0/angular_velocity = 0.0 +3:4/0 = 0 +3:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:4/0/physics_layer_0/angular_velocity = 0.0 +4:4/0 = 0 +4:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:4/0/physics_layer_0/angular_velocity = 0.0 +5:4/0 = 0 +5:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +5:4/0/physics_layer_0/angular_velocity = 0.0 +7:4/0 = 0 +7:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:4/0/physics_layer_0/angular_velocity = 0.0 +8:4/0 = 0 +8:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:4/0/physics_layer_0/angular_velocity = 0.0 +9:4/0 = 0 +9:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:4/0/physics_layer_0/angular_velocity = 0.0 +10:4/0 = 0 +10:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:4/0/physics_layer_0/angular_velocity = 0.0 +10:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +0:5/0 = 0 +0:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +0:5/0/physics_layer_0/angular_velocity = 0.0 +1:5/0 = 0 +1:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +1:5/0/physics_layer_0/angular_velocity = 0.0 +2:5/0 = 0 +2:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +2:5/0/physics_layer_0/angular_velocity = 0.0 +3:5/0 = 0 +3:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:5/0/physics_layer_0/angular_velocity = 0.0 +4:5/0 = 0 +4:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:5/0/physics_layer_0/angular_velocity = 0.0 +5:5/0 = 0 +5:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +5:5/0/physics_layer_0/angular_velocity = 0.0 +6:5/0 = 0 +6:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +6:5/0/physics_layer_0/angular_velocity = 0.0 +7:5/0 = 0 +7:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:5/0/physics_layer_0/angular_velocity = 0.0 +8:5/0 = 0 +8:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:5/0/physics_layer_0/angular_velocity = 0.0 +9:5/0 = 0 +9:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:5/0/physics_layer_0/angular_velocity = 0.0 +10:5/0 = 0 +10:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:5/0/physics_layer_0/angular_velocity = 0.0 +10:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +0:6/0 = 0 +0:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +0:6/0/physics_layer_0/angular_velocity = 0.0 +1:6/0 = 0 +1:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +1:6/0/physics_layer_0/angular_velocity = 0.0 +2:6/0 = 0 +2:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +2:6/0/physics_layer_0/angular_velocity = 0.0 +3:6/0 = 0 +3:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:6/0/physics_layer_0/angular_velocity = 0.0 +4:6/0 = 0 +4:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:6/0/physics_layer_0/angular_velocity = 0.0 +5:6/0 = 0 +5:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +5:6/0/physics_layer_0/angular_velocity = 0.0 +6:6/0 = 0 +6:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +6:6/0/physics_layer_0/angular_velocity = 0.0 +7:6/0 = 0 +7:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:6/0/physics_layer_0/angular_velocity = 0.0 +8:6/0 = 0 +8:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:6/0/physics_layer_0/angular_velocity = 0.0 +9:6/0 = 0 +9:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:6/0/physics_layer_0/angular_velocity = 0.0 +10:6/0 = 0 +10:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:6/0/physics_layer_0/angular_velocity = 0.0 +10:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +0:7/0 = 0 +0:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) +0:7/0/physics_layer_0/angular_velocity = 0.0 +1:7/0 = 0 +1:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) +1:7/0/physics_layer_0/angular_velocity = 0.0 +2:7/0 = 0 +2:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) +2:7/0/physics_layer_0/angular_velocity = 0.0 +3:7/0 = 0 +3:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:7/0/physics_layer_0/angular_velocity = 0.0 +4:7/0 = 0 +4:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:7/0/physics_layer_0/angular_velocity = 0.0 +5:7/0 = 0 +5:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) +5:7/0/physics_layer_0/angular_velocity = 0.0 +6:7/0 = 0 +6:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) +6:7/0/physics_layer_0/angular_velocity = 0.0 +7:7/0 = 0 +7:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:7/0/physics_layer_0/angular_velocity = 0.0 +8:7/0 = 0 +8:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:7/0/physics_layer_0/angular_velocity = 0.0 +9:7/0 = 0 +9:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:7/0/physics_layer_0/angular_velocity = 0.0 +10:7/0 = 0 +10:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:7/0/physics_layer_0/angular_velocity = 0.0 +7:3/0 = 0 +7:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:3/0/physics_layer_0/angular_velocity = 0.0 + +[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_y6uth"] +texture = ExtResource("2_1g22o") +0:0/0 = 0 +0:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +0:0/0/physics_layer_0/angular_velocity = 0.0 +0:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +1:0/0 = 0 +1:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +1:0/0/physics_layer_0/angular_velocity = 0.0 +1:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) + +[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_p6k03"] +texture = ExtResource("3_3h02h") +0:0/0 = 0 +0:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +0:0/0/physics_layer_0/angular_velocity = 0.0 +0:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +1:0/0 = 0 +1:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +1:0/0/physics_layer_0/angular_velocity = 0.0 +1:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +2:0/0 = 0 +2:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +2:0/0/physics_layer_0/angular_velocity = 0.0 +2:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +0:1/0 = 0 +0:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +0:1/0/physics_layer_0/angular_velocity = 0.0 +0:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +1:1/0 = 0 +1:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +1:1/0/physics_layer_0/angular_velocity = 0.0 +2:1/0 = 0 +2:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +2:1/0/physics_layer_0/angular_velocity = 0.0 +2:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +0:2/0 = 0 +0:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +0:2/0/physics_layer_0/angular_velocity = 0.0 +0:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +1:2/0 = 0 +1:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +1:2/0/physics_layer_0/angular_velocity = 0.0 +1:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +2:2/0 = 0 +2:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +2:2/0/physics_layer_0/angular_velocity = 0.0 +2:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) + +[sub_resource type="TileSet" id="TileSet_leduy"] +physics_layer_0/collision_layer = 15 +physics_layer_0/collision_mask = 15 +sources/0 = SubResource("TileSetAtlasSource_0ydj6") +sources/2 = SubResource("TileSetAtlasSource_y6uth") +sources/5 = SubResource("TileSetAtlasSource_p6k03") + +[node name="level_0" type="Node2D"] +position = Vector2(-112, -232) +scale = Vector2(3, 3) + +[node name="TileMap" type="TileMap" parent="." groups=["walls"]] +tile_set = SubResource("TileSet_leduy") +format = 2 +layer_0/name = "BaseGround" +layer_0/tile_data = PackedInt32Array(327685, 65536, 1, 327684, 65536, 1, 196612, 0, 1, 196613, 0, 1, 196614, 0, 1, 393220, 65536, 1, 131074, 0, 1, 131076, 0, 1, 131077, 65536, 1, 131078, 65536, 1, 131079, 65536, 1, 196615, 0, 1, 262151, 65536, 1, 327687, 0, 1, 393223, 65536, 1, 458759, 0, 1, 458758, 65536, 1, 458755, 0, 1, 458753, 65536, 1, 393217, 0, 1, 327681, 0, 1, 262145, 65536, 1, 65540, 65536, 1, 65541, 0, 1, 65542, 65536, 1, 65543, 65536, 1, 65544, 0, 1, 131080, 0, 1, 196616, 65536, 1, 262152, 0, 1, 327688, 0, 1, 393224, 65536, 1, 458760, 65536, 1, 524296, 65536, 1, 524295, 0, 1, 524294, 0, 1, 524293, 65536, 1, 524290, 65536, 1, 524289, 65536, 1, 65537, 0, 1, 65538, 0, 1, 65539, 0, 1, 131075, 0, 1, 196611, 0, 1, 196610, 0, 1, 196609, 0, 1, 131073, 0, 1, 262146, 0, 1, 327682, 65536, 1, 327686, 0, 1, 393222, 65536, 1, 393221, 0, 1, 458757, 65536, 1, 458756, 65536, 1, 524292, 0, 1, 524291, 65536, 1, 458754, 0, 1, 393218, 0, 1, 327683, 0, 1, 262147, 0, 1, 262148, 65536, 1, 393219, 65536, 1, 262150, 0, 1, 262149, 0, 1) +layer_1/name = "TopGround" +layer_1/tile_data = PackedInt32Array(262146, 5, 1, 327682, 5, 1, 196610, 5, 1, 327684, 5, 1, 262148, 5, 0, 131077, 65541, 0, 131076, 65541, 0, 131075, 65541, 0, 131074, 5, 0, 262149, 65541, 0, 393219, 65541, 0, 393218, 5, 2, 393220, 131077, 2, 262150, 131077, 2, 131078, 131077, 0, 196614, 5, 1) +layer_2/name = "Water" +layer_2/tile_data = PackedInt32Array(262153, 2, 0, 196617, 2, 0, 131081, 2, 0, 65545, 2, 0, 9, 2, 0, 8, 2, 0, 7, 2, 0, 6, 2, 0, 5, 2, 0, 4, 2, 0, 3, 2, 0, 2, 2, 0, 1, 2, 0, 0, 2, 0, 65536, 2, 0, 131072, 2, 0, 196608, 2, 0, 262144, 2, 0, 327680, 2, 0, 393216, 2, 0, 458752, 2, 0, 524288, 2, 0, 589824, 2, 0, 589825, 2, 0, 589826, 2, 0, 589827, 2, 0, 589828, 2, 0, 589829, 2, 0, 589830, 2, 0, 589831, 2, 0, 589832, 2, 0, 589833, 2, 0, 524297, 2, 0, 458761, 2, 0, 393225, 2, 0, 327689, 2, 0) +script = ExtResource("3_lxvoo") + +[node name="PlayerRobot" parent="." instance=ExtResource("6_hjdgv")] +z_index = 2 +position = Vector2(88, 56) + +[node name="Box" parent="." instance=ExtResource("6_crsa5")] +position = Vector2(56, 72) +collision_layer = 15 +collision_mask = 15 + +[node name="EndZone" parent="." groups=["platforms"] instance=ExtResource("7_xxre3")] +z_index = 0 +position = Vector2(55.3333, 87.6667) +scale = Vector2(0.9, 0.9) + +[node name="GameManager" parent="." groups=["game_manager"] instance=ExtResource("8_nfk0q")] +unique_name_in_owner = true + +[node name="InteractionManager" parent="." groups=["interaction_manager"] instance=ExtResource("9_h8w3f")] +position = Vector2(60, 63) diff --git a/Code/levels/level_1.tscn b/Code/levels/level_1.tscn new file mode 100644 index 0000000..3c32705 --- /dev/null +++ b/Code/levels/level_1.tscn @@ -0,0 +1,372 @@ +[gd_scene load_steps=14 format=3 uid="uid://ds60hc12tavm3"] + +[ext_resource type="Texture2D" uid="uid://buebn1dqinyin" path="res://art/tiles/robot_atlas.png" id="1_mkdx5"] +[ext_resource type="Texture2D" uid="uid://dwsmec5b5rj0y" path="res://art/tiles/water.png" id="2_vwt3w"] +[ext_resource type="Texture2D" uid="uid://dqryivwwhqd0x" path="res://art/tiles/walls.png" id="3_umpkh"] +[ext_resource type="Script" path="res://TileMap.gd" id="4_y45qn"] +[ext_resource type="PackedScene" uid="uid://cchfvbtuste6s" path="res://characters/player_robot.tscn" id="5_45nlo"] +[ext_resource type="PackedScene" uid="uid://vb8lfikq5dc7" path="res://box.tscn" id="6_jjywg"] +[ext_resource type="PackedScene" uid="uid://deb7q6h0om8hc" path="res://End.tscn" id="7_you6s"] +[ext_resource type="PackedScene" uid="uid://c7m1f03wf08sa" path="res://interaction/InteractionManager.tscn" id="8_5uy7b"] +[ext_resource type="PackedScene" uid="uid://5q5c8pt7mew2" path="res://GameManager.tscn" id="9_0kenn"] + +[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_0ydj6"] +texture = ExtResource("1_mkdx5") +margins = Vector2i(0, 8) +0:0/0 = 0 +0:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +0:0/0/physics_layer_0/angular_velocity = 0.0 +1:0/0 = 0 +1:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +1:0/0/physics_layer_0/angular_velocity = 0.0 +2:0/0 = 0 +2:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +2:0/0/physics_layer_0/angular_velocity = 0.0 +4:0/0 = 0 +4:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:0/0/physics_layer_0/angular_velocity = 0.0 +5:0/0 = 0 +5:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +5:0/0/physics_layer_0/angular_velocity = 0.0 +6:0/0 = 0 +6:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +6:0/0/physics_layer_0/angular_velocity = 0.0 +7:0/0 = 0 +7:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:0/0/physics_layer_0/angular_velocity = 0.0 +8:0/0 = 0 +8:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:0/0/physics_layer_0/angular_velocity = 0.0 +9:0/0 = 0 +9:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:0/0/physics_layer_0/angular_velocity = 0.0 +10:0/0 = 0 +10:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:0/0/physics_layer_0/angular_velocity = 0.0 +10:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +0:1/0 = 0 +0:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +0:1/0/physics_layer_0/angular_velocity = 0.0 +1:1/0 = 0 +1:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +1:1/0/physics_layer_0/angular_velocity = 0.0 +2:1/0 = 0 +2:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +2:1/0/physics_layer_0/angular_velocity = 0.0 +3:1/0 = 0 +3:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:1/0/physics_layer_0/angular_velocity = 0.0 +4:1/0 = 0 +4:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:1/0/physics_layer_0/angular_velocity = 0.0 +5:1/0 = 0 +5:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +5:1/0/physics_layer_0/angular_velocity = 0.0 +6:1/0 = 0 +6:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +6:1/0/physics_layer_0/angular_velocity = 0.0 +7:1/0 = 0 +7:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:1/0/physics_layer_0/angular_velocity = 0.0 +8:1/0 = 0 +8:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:1/0/physics_layer_0/angular_velocity = 0.0 +9:1/0 = 0 +9:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:1/0/physics_layer_0/angular_velocity = 0.0 +10:1/0 = 0 +10:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:1/0/physics_layer_0/angular_velocity = 0.0 +10:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +0:2/0 = 0 +0:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +0:2/0/physics_layer_0/angular_velocity = 0.0 +1:2/0 = 0 +1:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +1:2/0/physics_layer_0/angular_velocity = 0.0 +2:2/0 = 0 +2:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +2:2/0/physics_layer_0/angular_velocity = 0.0 +3:2/0 = 0 +3:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:2/0/physics_layer_0/angular_velocity = 0.0 +4:2/0 = 0 +4:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:2/0/physics_layer_0/angular_velocity = 0.0 +5:2/0 = 0 +5:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +5:2/0/physics_layer_0/angular_velocity = 0.0 +6:2/0 = 0 +6:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +6:2/0/physics_layer_0/angular_velocity = 0.0 +7:2/0 = 0 +7:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:2/0/physics_layer_0/angular_velocity = 0.0 +8:2/0 = 0 +8:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:2/0/physics_layer_0/angular_velocity = 0.0 +9:2/0 = 0 +9:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:2/0/physics_layer_0/angular_velocity = 0.0 +10:2/0 = 0 +10:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:2/0/physics_layer_0/angular_velocity = 0.0 +10:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +0:3/0 = 0 +0:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +0:3/0/physics_layer_0/angular_velocity = 0.0 +1:3/0 = 0 +1:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +1:3/0/physics_layer_0/angular_velocity = 0.0 +2:3/0 = 0 +2:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +2:3/0/physics_layer_0/angular_velocity = 0.0 +3:3/0 = 0 +3:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:3/0/physics_layer_0/angular_velocity = 0.0 +4:3/0 = 0 +4:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:3/0/physics_layer_0/angular_velocity = 0.0 +5:3/0 = 0 +5:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +5:3/0/physics_layer_0/angular_velocity = 0.0 +6:3/0 = 0 +6:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +6:3/0/physics_layer_0/angular_velocity = 0.0 +8:3/0 = 0 +8:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:3/0/physics_layer_0/angular_velocity = 0.0 +9:3/0 = 0 +9:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:3/0/physics_layer_0/angular_velocity = 0.0 +10:3/0 = 0 +10:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:3/0/physics_layer_0/angular_velocity = 0.0 +10:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +0:4/0 = 0 +0:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +0:4/0/physics_layer_0/angular_velocity = 0.0 +2:4/0 = 0 +2:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +2:4/0/physics_layer_0/angular_velocity = 0.0 +3:4/0 = 0 +3:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:4/0/physics_layer_0/angular_velocity = 0.0 +4:4/0 = 0 +4:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:4/0/physics_layer_0/angular_velocity = 0.0 +5:4/0 = 0 +5:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +5:4/0/physics_layer_0/angular_velocity = 0.0 +7:4/0 = 0 +7:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:4/0/physics_layer_0/angular_velocity = 0.0 +8:4/0 = 0 +8:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:4/0/physics_layer_0/angular_velocity = 0.0 +9:4/0 = 0 +9:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:4/0/physics_layer_0/angular_velocity = 0.0 +10:4/0 = 0 +10:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:4/0/physics_layer_0/angular_velocity = 0.0 +10:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +0:5/0 = 0 +0:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +0:5/0/physics_layer_0/angular_velocity = 0.0 +1:5/0 = 0 +1:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +1:5/0/physics_layer_0/angular_velocity = 0.0 +2:5/0 = 0 +2:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +2:5/0/physics_layer_0/angular_velocity = 0.0 +3:5/0 = 0 +3:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:5/0/physics_layer_0/angular_velocity = 0.0 +4:5/0 = 0 +4:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:5/0/physics_layer_0/angular_velocity = 0.0 +5:5/0 = 0 +5:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +5:5/0/physics_layer_0/angular_velocity = 0.0 +6:5/0 = 0 +6:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +6:5/0/physics_layer_0/angular_velocity = 0.0 +7:5/0 = 0 +7:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:5/0/physics_layer_0/angular_velocity = 0.0 +8:5/0 = 0 +8:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:5/0/physics_layer_0/angular_velocity = 0.0 +9:5/0 = 0 +9:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:5/0/physics_layer_0/angular_velocity = 0.0 +10:5/0 = 0 +10:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:5/0/physics_layer_0/angular_velocity = 0.0 +10:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +0:6/0 = 0 +0:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +0:6/0/physics_layer_0/angular_velocity = 0.0 +1:6/0 = 0 +1:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +1:6/0/physics_layer_0/angular_velocity = 0.0 +2:6/0 = 0 +2:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +2:6/0/physics_layer_0/angular_velocity = 0.0 +3:6/0 = 0 +3:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:6/0/physics_layer_0/angular_velocity = 0.0 +4:6/0 = 0 +4:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:6/0/physics_layer_0/angular_velocity = 0.0 +5:6/0 = 0 +5:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +5:6/0/physics_layer_0/angular_velocity = 0.0 +6:6/0 = 0 +6:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +6:6/0/physics_layer_0/angular_velocity = 0.0 +7:6/0 = 0 +7:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:6/0/physics_layer_0/angular_velocity = 0.0 +8:6/0 = 0 +8:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:6/0/physics_layer_0/angular_velocity = 0.0 +9:6/0 = 0 +9:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:6/0/physics_layer_0/angular_velocity = 0.0 +10:6/0 = 0 +10:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:6/0/physics_layer_0/angular_velocity = 0.0 +10:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +0:7/0 = 0 +0:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) +0:7/0/physics_layer_0/angular_velocity = 0.0 +1:7/0 = 0 +1:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) +1:7/0/physics_layer_0/angular_velocity = 0.0 +2:7/0 = 0 +2:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) +2:7/0/physics_layer_0/angular_velocity = 0.0 +3:7/0 = 0 +3:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:7/0/physics_layer_0/angular_velocity = 0.0 +4:7/0 = 0 +4:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:7/0/physics_layer_0/angular_velocity = 0.0 +5:7/0 = 0 +5:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) +5:7/0/physics_layer_0/angular_velocity = 0.0 +6:7/0 = 0 +6:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) +6:7/0/physics_layer_0/angular_velocity = 0.0 +7:7/0 = 0 +7:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:7/0/physics_layer_0/angular_velocity = 0.0 +8:7/0 = 0 +8:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:7/0/physics_layer_0/angular_velocity = 0.0 +9:7/0 = 0 +9:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:7/0/physics_layer_0/angular_velocity = 0.0 +10:7/0 = 0 +10:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:7/0/physics_layer_0/angular_velocity = 0.0 +7:3/0 = 0 +7:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:3/0/physics_layer_0/angular_velocity = 0.0 + +[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_y6uth"] +texture = ExtResource("2_vwt3w") +0:0/0 = 0 +0:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +0:0/0/physics_layer_0/angular_velocity = 0.0 +0:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +1:0/0 = 0 +1:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +1:0/0/physics_layer_0/angular_velocity = 0.0 +1:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) + +[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_p6k03"] +texture = ExtResource("3_umpkh") +0:0/0 = 0 +0:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +0:0/0/physics_layer_0/angular_velocity = 0.0 +0:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +1:0/0 = 0 +1:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +1:0/0/physics_layer_0/angular_velocity = 0.0 +1:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +2:0/0 = 0 +2:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +2:0/0/physics_layer_0/angular_velocity = 0.0 +2:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +0:1/0 = 0 +0:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +0:1/0/physics_layer_0/angular_velocity = 0.0 +0:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +1:1/0 = 0 +1:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +1:1/0/physics_layer_0/angular_velocity = 0.0 +2:1/0 = 0 +2:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +2:1/0/physics_layer_0/angular_velocity = 0.0 +2:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +0:2/0 = 0 +0:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +0:2/0/physics_layer_0/angular_velocity = 0.0 +0:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +1:2/0 = 0 +1:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +1:2/0/physics_layer_0/angular_velocity = 0.0 +1:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +2:2/0 = 0 +2:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +2:2/0/physics_layer_0/angular_velocity = 0.0 +2:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) + +[sub_resource type="TileSet" id="TileSet_leduy"] +physics_layer_0/collision_layer = 15 +physics_layer_0/collision_mask = 15 +sources/0 = SubResource("TileSetAtlasSource_0ydj6") +sources/2 = SubResource("TileSetAtlasSource_y6uth") +sources/5 = SubResource("TileSetAtlasSource_p6k03") + +[node name="level_1" type="Node2D" groups=["level"]] +position = Vector2(-112, -232) +scale = Vector2(3, 3) + +[node name="TileMap" type="TileMap" parent="."] +tile_set = SubResource("TileSet_leduy") +format = 2 +layer_0/name = "BaseGround" +layer_0/tile_data = PackedInt32Array(262148, 65536, 1, 262149, 0, 1, 327685, 65536, 1, 327684, 65536, 1, 327683, 0, 1, 262147, 0, 1, 196612, 0, 1, 196613, 0, 1, 196614, 0, 1, 262150, 0, 1, 327686, 0, 1, 393222, 65536, 1, 393221, 0, 1, 393220, 65536, 1, 393219, 65536, 1, 393218, 0, 1, 327682, 65536, 1, 131074, 0, 1, 131076, 0, 1, 131077, 65536, 1, 131078, 65536, 1, 131079, 65536, 1, 196615, 0, 1, 262151, 65536, 1, 327687, 0, 1, 393223, 65536, 1, 458759, 0, 1, 458758, 65536, 1, 458757, 65536, 1, 458756, 65536, 1, 458755, 0, 1, 458754, 0, 1, 458753, 65536, 1, 393217, 0, 1, 327681, 0, 1, 262145, 65536, 1, 65540, 65536, 1, 65541, 0, 1, 65542, 65536, 1, 65543, 65536, 1, 65544, 0, 1, 131080, 0, 1, 196616, 65536, 1, 262152, 0, 1, 327688, 0, 1, 393224, 65536, 1, 458760, 65536, 1, 524296, 65536, 1, 524295, 0, 1, 524294, 0, 1, 524293, 65536, 1, 524292, 0, 1, 524291, 65536, 1, 524290, 65536, 1, 524289, 65536, 1, 65537, 0, 1, 65538, 0, 1, 65539, 0, 1, 131075, 0, 1, 196611, 0, 1, 196610, 0, 1, 196609, 0, 1, 131073, 0, 1, 262146, 0, 1) +layer_1/name = "TopGround" +layer_1/tile_data = PackedInt32Array(196610, 5, 1, 131074, 5, 0, 131075, 65541, 0, 131076, 65541, 0, 131077, 65541, 0, 262146, 5, 2, 262147, 131077, 0, 327683, 5, 1, 393219, 5, 2, 393220, 65541, 0, 393221, 65541, 0, 393222, 131077, 2, 327686, 5, 1, 262150, 5, 1, 196614, 5, 1, 131078, 131077, 0) +layer_2/name = "Water" +layer_2/tile_data = PackedInt32Array(262153, 2, 0, 196617, 2, 0, 131081, 2, 0, 65545, 2, 0, 9, 2, 0, 8, 2, 0, 7, 2, 0, 6, 2, 0, 5, 2, 0, 4, 2, 0, 3, 2, 0, 2, 2, 0, 1, 2, 0, 0, 2, 0, 65536, 2, 0, 131072, 2, 0, 196608, 2, 0, 262144, 2, 0, 327680, 2, 0, 393216, 2, 0, 458752, 2, 0, 524288, 2, 0, 589824, 2, 0, 589825, 2, 0, 589826, 2, 0, 589827, 2, 0, 589828, 2, 0, 589829, 2, 0, 589830, 2, 0, 589831, 2, 0, 589832, 2, 0, 589833, 2, 0, 524297, 2, 0, 458761, 2, 0, 393225, 2, 0, 327689, 2, 0) +script = ExtResource("4_y45qn") + +[node name="PlayerRobot" parent="." instance=ExtResource("5_45nlo")] +z_index = 2 +position = Vector2(56, 56) + +[node name="EndZone" parent="." groups=["platforms"] instance=ExtResource("7_you6s")] +z_index = 1 +position = Vector2(87.6667, 87.6667) +scale = Vector2(0.9, 0.9) + +[node name="EndZone2" parent="." groups=["platforms"] instance=ExtResource("7_you6s")] +z_index = 1 +position = Vector2(71.3333, 87.6667) +scale = Vector2(0.9, 0.9) + +[node name="Box" parent="." instance=ExtResource("6_jjywg")] +position = Vector2(87, 71) + +[node name="Box2" parent="." instance=ExtResource("6_jjywg")] +position = Vector2(71, 71) + +[node name="InteractionManager" parent="." groups=["interaction_manager"] instance=ExtResource("8_5uy7b")] + +[node name="GameManager" parent="." groups=["game_manager"] instance=ExtResource("9_0kenn")] diff --git a/Code/levels/level_3.tscn b/Code/levels/level_3.tscn new file mode 100644 index 0000000..ea7e6d9 --- /dev/null +++ b/Code/levels/level_3.tscn @@ -0,0 +1,373 @@ +[gd_scene load_steps=14 format=3 uid="uid://k8ij67u5ydmx"] + +[ext_resource type="Texture2D" uid="uid://buebn1dqinyin" path="res://art/tiles/robot_atlas.png" id="1_nrimb"] +[ext_resource type="Texture2D" uid="uid://dwsmec5b5rj0y" path="res://art/tiles/water.png" id="2_tbkiq"] +[ext_resource type="Texture2D" uid="uid://dqryivwwhqd0x" path="res://art/tiles/walls.png" id="3_m02jw"] +[ext_resource type="Script" path="res://TileMap.gd" id="4_cdt2c"] +[ext_resource type="PackedScene" uid="uid://cchfvbtuste6s" path="res://characters/player_robot.tscn" id="5_v21du"] +[ext_resource type="PackedScene" uid="uid://vb8lfikq5dc7" path="res://box.tscn" id="6_xq0uy"] +[ext_resource type="PackedScene" uid="uid://deb7q6h0om8hc" path="res://End.tscn" id="7_p85sb"] +[ext_resource type="PackedScene" uid="uid://c7m1f03wf08sa" path="res://interaction/InteractionManager.tscn" id="8_t7y54"] +[ext_resource type="PackedScene" uid="uid://5q5c8pt7mew2" path="res://GameManager.tscn" id="9_1yro8"] + +[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_0ydj6"] +texture = ExtResource("1_nrimb") +margins = Vector2i(0, 8) +0:0/0 = 0 +0:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +0:0/0/physics_layer_0/angular_velocity = 0.0 +1:0/0 = 0 +1:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +1:0/0/physics_layer_0/angular_velocity = 0.0 +2:0/0 = 0 +2:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +2:0/0/physics_layer_0/angular_velocity = 0.0 +4:0/0 = 0 +4:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:0/0/physics_layer_0/angular_velocity = 0.0 +5:0/0 = 0 +5:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +5:0/0/physics_layer_0/angular_velocity = 0.0 +6:0/0 = 0 +6:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +6:0/0/physics_layer_0/angular_velocity = 0.0 +7:0/0 = 0 +7:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:0/0/physics_layer_0/angular_velocity = 0.0 +8:0/0 = 0 +8:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:0/0/physics_layer_0/angular_velocity = 0.0 +9:0/0 = 0 +9:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:0/0/physics_layer_0/angular_velocity = 0.0 +10:0/0 = 0 +10:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:0/0/physics_layer_0/angular_velocity = 0.0 +10:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +0:1/0 = 0 +0:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +0:1/0/physics_layer_0/angular_velocity = 0.0 +1:1/0 = 0 +1:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +1:1/0/physics_layer_0/angular_velocity = 0.0 +2:1/0 = 0 +2:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +2:1/0/physics_layer_0/angular_velocity = 0.0 +3:1/0 = 0 +3:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:1/0/physics_layer_0/angular_velocity = 0.0 +4:1/0 = 0 +4:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:1/0/physics_layer_0/angular_velocity = 0.0 +5:1/0 = 0 +5:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +5:1/0/physics_layer_0/angular_velocity = 0.0 +6:1/0 = 0 +6:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +6:1/0/physics_layer_0/angular_velocity = 0.0 +7:1/0 = 0 +7:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:1/0/physics_layer_0/angular_velocity = 0.0 +8:1/0 = 0 +8:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:1/0/physics_layer_0/angular_velocity = 0.0 +9:1/0 = 0 +9:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:1/0/physics_layer_0/angular_velocity = 0.0 +10:1/0 = 0 +10:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:1/0/physics_layer_0/angular_velocity = 0.0 +10:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +0:2/0 = 0 +0:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +0:2/0/physics_layer_0/angular_velocity = 0.0 +1:2/0 = 0 +1:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +1:2/0/physics_layer_0/angular_velocity = 0.0 +2:2/0 = 0 +2:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +2:2/0/physics_layer_0/angular_velocity = 0.0 +3:2/0 = 0 +3:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:2/0/physics_layer_0/angular_velocity = 0.0 +4:2/0 = 0 +4:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:2/0/physics_layer_0/angular_velocity = 0.0 +5:2/0 = 0 +5:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +5:2/0/physics_layer_0/angular_velocity = 0.0 +6:2/0 = 0 +6:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +6:2/0/physics_layer_0/angular_velocity = 0.0 +7:2/0 = 0 +7:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:2/0/physics_layer_0/angular_velocity = 0.0 +8:2/0 = 0 +8:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:2/0/physics_layer_0/angular_velocity = 0.0 +9:2/0 = 0 +9:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:2/0/physics_layer_0/angular_velocity = 0.0 +10:2/0 = 0 +10:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:2/0/physics_layer_0/angular_velocity = 0.0 +10:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +0:3/0 = 0 +0:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +0:3/0/physics_layer_0/angular_velocity = 0.0 +1:3/0 = 0 +1:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +1:3/0/physics_layer_0/angular_velocity = 0.0 +2:3/0 = 0 +2:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +2:3/0/physics_layer_0/angular_velocity = 0.0 +3:3/0 = 0 +3:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:3/0/physics_layer_0/angular_velocity = 0.0 +4:3/0 = 0 +4:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:3/0/physics_layer_0/angular_velocity = 0.0 +5:3/0 = 0 +5:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +5:3/0/physics_layer_0/angular_velocity = 0.0 +6:3/0 = 0 +6:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +6:3/0/physics_layer_0/angular_velocity = 0.0 +8:3/0 = 0 +8:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:3/0/physics_layer_0/angular_velocity = 0.0 +9:3/0 = 0 +9:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:3/0/physics_layer_0/angular_velocity = 0.0 +10:3/0 = 0 +10:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:3/0/physics_layer_0/angular_velocity = 0.0 +10:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +0:4/0 = 0 +0:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +0:4/0/physics_layer_0/angular_velocity = 0.0 +2:4/0 = 0 +2:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +2:4/0/physics_layer_0/angular_velocity = 0.0 +3:4/0 = 0 +3:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:4/0/physics_layer_0/angular_velocity = 0.0 +4:4/0 = 0 +4:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:4/0/physics_layer_0/angular_velocity = 0.0 +5:4/0 = 0 +5:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +5:4/0/physics_layer_0/angular_velocity = 0.0 +7:4/0 = 0 +7:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:4/0/physics_layer_0/angular_velocity = 0.0 +8:4/0 = 0 +8:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:4/0/physics_layer_0/angular_velocity = 0.0 +9:4/0 = 0 +9:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:4/0/physics_layer_0/angular_velocity = 0.0 +10:4/0 = 0 +10:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:4/0/physics_layer_0/angular_velocity = 0.0 +10:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +0:5/0 = 0 +0:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +0:5/0/physics_layer_0/angular_velocity = 0.0 +1:5/0 = 0 +1:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +1:5/0/physics_layer_0/angular_velocity = 0.0 +2:5/0 = 0 +2:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +2:5/0/physics_layer_0/angular_velocity = 0.0 +3:5/0 = 0 +3:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:5/0/physics_layer_0/angular_velocity = 0.0 +4:5/0 = 0 +4:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:5/0/physics_layer_0/angular_velocity = 0.0 +5:5/0 = 0 +5:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +5:5/0/physics_layer_0/angular_velocity = 0.0 +6:5/0 = 0 +6:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +6:5/0/physics_layer_0/angular_velocity = 0.0 +7:5/0 = 0 +7:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:5/0/physics_layer_0/angular_velocity = 0.0 +8:5/0 = 0 +8:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:5/0/physics_layer_0/angular_velocity = 0.0 +9:5/0 = 0 +9:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:5/0/physics_layer_0/angular_velocity = 0.0 +10:5/0 = 0 +10:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:5/0/physics_layer_0/angular_velocity = 0.0 +10:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +0:6/0 = 0 +0:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +0:6/0/physics_layer_0/angular_velocity = 0.0 +1:6/0 = 0 +1:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +1:6/0/physics_layer_0/angular_velocity = 0.0 +2:6/0 = 0 +2:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +2:6/0/physics_layer_0/angular_velocity = 0.0 +3:6/0 = 0 +3:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:6/0/physics_layer_0/angular_velocity = 0.0 +4:6/0 = 0 +4:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:6/0/physics_layer_0/angular_velocity = 0.0 +5:6/0 = 0 +5:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +5:6/0/physics_layer_0/angular_velocity = 0.0 +6:6/0 = 0 +6:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +6:6/0/physics_layer_0/angular_velocity = 0.0 +7:6/0 = 0 +7:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:6/0/physics_layer_0/angular_velocity = 0.0 +8:6/0 = 0 +8:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:6/0/physics_layer_0/angular_velocity = 0.0 +9:6/0 = 0 +9:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:6/0/physics_layer_0/angular_velocity = 0.0 +10:6/0 = 0 +10:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:6/0/physics_layer_0/angular_velocity = 0.0 +10:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +0:7/0 = 0 +0:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) +0:7/0/physics_layer_0/angular_velocity = 0.0 +1:7/0 = 0 +1:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) +1:7/0/physics_layer_0/angular_velocity = 0.0 +2:7/0 = 0 +2:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) +2:7/0/physics_layer_0/angular_velocity = 0.0 +3:7/0 = 0 +3:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:7/0/physics_layer_0/angular_velocity = 0.0 +4:7/0 = 0 +4:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:7/0/physics_layer_0/angular_velocity = 0.0 +5:7/0 = 0 +5:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) +5:7/0/physics_layer_0/angular_velocity = 0.0 +6:7/0 = 0 +6:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) +6:7/0/physics_layer_0/angular_velocity = 0.0 +7:7/0 = 0 +7:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:7/0/physics_layer_0/angular_velocity = 0.0 +8:7/0 = 0 +8:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:7/0/physics_layer_0/angular_velocity = 0.0 +9:7/0 = 0 +9:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:7/0/physics_layer_0/angular_velocity = 0.0 +10:7/0 = 0 +10:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:7/0/physics_layer_0/angular_velocity = 0.0 +7:3/0 = 0 +7:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:3/0/physics_layer_0/angular_velocity = 0.0 + +[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_y6uth"] +texture = ExtResource("2_tbkiq") +0:0/0 = 0 +0:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +0:0/0/physics_layer_0/angular_velocity = 0.0 +0:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +1:0/0 = 0 +1:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +1:0/0/physics_layer_0/angular_velocity = 0.0 +1:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) + +[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_p6k03"] +texture = ExtResource("3_m02jw") +0:0/0 = 0 +0:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +0:0/0/physics_layer_0/angular_velocity = 0.0 +0:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +1:0/0 = 0 +1:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +1:0/0/physics_layer_0/angular_velocity = 0.0 +1:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +2:0/0 = 0 +2:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +2:0/0/physics_layer_0/angular_velocity = 0.0 +2:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +0:1/0 = 0 +0:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +0:1/0/physics_layer_0/angular_velocity = 0.0 +0:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +1:1/0 = 0 +1:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +1:1/0/physics_layer_0/angular_velocity = 0.0 +2:1/0 = 0 +2:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +2:1/0/physics_layer_0/angular_velocity = 0.0 +2:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +0:2/0 = 0 +0:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +0:2/0/physics_layer_0/angular_velocity = 0.0 +0:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +1:2/0 = 0 +1:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +1:2/0/physics_layer_0/angular_velocity = 0.0 +1:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +2:2/0 = 0 +2:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +2:2/0/physics_layer_0/angular_velocity = 0.0 +2:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) + +[sub_resource type="TileSet" id="TileSet_leduy"] +physics_layer_0/collision_layer = 15 +physics_layer_0/collision_mask = 15 +sources/0 = SubResource("TileSetAtlasSource_0ydj6") +sources/2 = SubResource("TileSetAtlasSource_y6uth") +sources/5 = SubResource("TileSetAtlasSource_p6k03") + +[node name="level_5" type="Node2D" groups=["level"]] +position = Vector2(-112, -232) +scale = Vector2(3, 3) + +[node name="TileMap" type="TileMap" parent="."] +position = Vector2(-0.333332, 0) +tile_set = SubResource("TileSet_leduy") +format = 2 +layer_0/name = "BaseGround" +layer_0/tile_data = PackedInt32Array(262148, 65536, 1, 262149, 0, 1, 327685, 65536, 1, 327684, 65536, 1, 327683, 0, 1, 262147, 0, 1, 196612, 0, 1, 196613, 0, 1, 196614, 0, 1, 262150, 0, 1, 327686, 0, 1, 393222, 65536, 1, 393221, 0, 1, 393220, 65536, 1, 393219, 65536, 1, 327682, 65536, 1, 131074, 0, 1, 131076, 0, 1, 131077, 65536, 1, 131078, 65536, 1, 131079, 65536, 1, 196615, 0, 1, 262151, 65536, 1, 327687, 0, 1, 393223, 65536, 1, 458759, 0, 1, 458758, 65536, 1, 458757, 65536, 1, 458756, 65536, 1, 458755, 0, 1, 458754, 0, 1, 458753, 65536, 1, 393217, 0, 1, 327681, 0, 1, 262145, 65536, 1, 65540, 65536, 1, 65541, 0, 1, 65542, 65536, 1, 65543, 65536, 1, 65544, 0, 1, 131080, 0, 1, 196616, 65536, 1, 262152, 0, 1, 327688, 0, 1, 393224, 65536, 1, 458760, 65536, 1, 524296, 65536, 1, 524295, 0, 1, 524294, 0, 1, 524293, 65536, 1, 524292, 0, 1, 524291, 65536, 1, 524290, 65536, 1, 524289, 65536, 1, 65538, 0, 1, 65539, 0, 1, 131075, 0, 1, 196611, 0, 1, 196610, 0, 1, 196609, 0, 1, 131073, 0, 1, 262146, 0, 1, 393218, 0, 1, 65537, 0, 1) +layer_1/name = "TopGround" +layer_1/tile_data = PackedInt32Array(327682, 65541, 0, 327683, 65541, 0, 327684, 65541, 0, 327685, 65541, 0, 327686, 65541, 0, 327687, 65541, 0, 458754, 65541, 0, 458755, 65541, 0, 458756, 65541, 0, 458757, 65541, 0, 458758, 65541, 0, 458759, 65541, 0, 327688, 131077, 0, 458760, 131077, 2, 327681, 5, 0, 458753, 5, 2, 393217, 5, 1, 393224, 5, 1) +layer_2/name = "Water" +layer_2/tile_data = PackedInt32Array(262153, 2, 0, 196617, 2, 0, 131081, 2, 0, 65545, 2, 0, 9, 2, 0, 8, 2, 0, 7, 2, 0, 6, 2, 0, 5, 2, 0, 4, 2, 0, 3, 2, 0, 2, 2, 0, 1, 2, 0, 0, 2, 0, 65536, 2, 0, 131072, 2, 0, 196608, 2, 0, 262144, 2, 0, 327680, 2, 0, 393216, 2, 0, 458752, 2, 0, 524288, 2, 0, 589824, 2, 0, 589825, 2, 0, 589826, 2, 0, 589827, 2, 0, 589828, 2, 0, 589829, 2, 0, 589830, 2, 0, 589831, 2, 0, 589832, 2, 0, 589833, 2, 0, 524297, 2, 0, 458761, 2, 0, 393225, 2, 0, 327689, 2, 0) +script = ExtResource("4_cdt2c") + +[node name="PlayerRobot" parent="." instance=ExtResource("5_v21du")] +z_index = 3 +position = Vector2(87.3333, 103.667) + +[node name="Box" parent="." instance=ExtResource("6_xq0uy")] +position = Vector2(103.333, 103) + +[node name="Box2" parent="." instance=ExtResource("6_xq0uy")] +position = Vector2(71.3333, 103.667) + +[node name="EndZone" parent="." groups=["platforms"] instance=ExtResource("7_p85sb")] +z_index = 0 +position = Vector2(119, 103.667) +scale = Vector2(0.9, 0.9) + +[node name="EndZone2" parent="." groups=["platforms"] instance=ExtResource("7_p85sb")] +z_index = 0 +position = Vector2(39, 103.667) +scale = Vector2(0.9, 0.9) + +[node name="InteractionManager" parent="." groups=["interaction_manager"] instance=ExtResource("8_t7y54")] + +[node name="GameManager" parent="." groups=["game_manager"] instance=ExtResource("9_1yro8")] diff --git a/Code/levels/level_4.tscn b/Code/levels/level_4.tscn new file mode 100644 index 0000000..0153961 --- /dev/null +++ b/Code/levels/level_4.tscn @@ -0,0 +1,372 @@ +[gd_scene load_steps=14 format=3 uid="uid://byirvjqb6vke6"] + +[ext_resource type="Texture2D" uid="uid://buebn1dqinyin" path="res://art/tiles/robot_atlas.png" id="1_jfp78"] +[ext_resource type="Texture2D" uid="uid://dwsmec5b5rj0y" path="res://art/tiles/water.png" id="2_7nrs7"] +[ext_resource type="Texture2D" uid="uid://dqryivwwhqd0x" path="res://art/tiles/walls.png" id="3_hnuqf"] +[ext_resource type="Script" path="res://TileMap.gd" id="4_frsdp"] +[ext_resource type="PackedScene" uid="uid://cchfvbtuste6s" path="res://characters/player_robot.tscn" id="5_pmg6m"] +[ext_resource type="PackedScene" uid="uid://vb8lfikq5dc7" path="res://box.tscn" id="6_rfvb2"] +[ext_resource type="PackedScene" uid="uid://deb7q6h0om8hc" path="res://End.tscn" id="7_8an80"] +[ext_resource type="PackedScene" uid="uid://c7m1f03wf08sa" path="res://interaction/InteractionManager.tscn" id="8_riyqa"] +[ext_resource type="PackedScene" uid="uid://5q5c8pt7mew2" path="res://GameManager.tscn" id="9_b7374"] + +[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_0ydj6"] +texture = ExtResource("1_jfp78") +margins = Vector2i(0, 8) +0:0/0 = 0 +0:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +0:0/0/physics_layer_0/angular_velocity = 0.0 +1:0/0 = 0 +1:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +1:0/0/physics_layer_0/angular_velocity = 0.0 +2:0/0 = 0 +2:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +2:0/0/physics_layer_0/angular_velocity = 0.0 +4:0/0 = 0 +4:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:0/0/physics_layer_0/angular_velocity = 0.0 +5:0/0 = 0 +5:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +5:0/0/physics_layer_0/angular_velocity = 0.0 +6:0/0 = 0 +6:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +6:0/0/physics_layer_0/angular_velocity = 0.0 +7:0/0 = 0 +7:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:0/0/physics_layer_0/angular_velocity = 0.0 +8:0/0 = 0 +8:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:0/0/physics_layer_0/angular_velocity = 0.0 +9:0/0 = 0 +9:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:0/0/physics_layer_0/angular_velocity = 0.0 +10:0/0 = 0 +10:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:0/0/physics_layer_0/angular_velocity = 0.0 +10:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +0:1/0 = 0 +0:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +0:1/0/physics_layer_0/angular_velocity = 0.0 +1:1/0 = 0 +1:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +1:1/0/physics_layer_0/angular_velocity = 0.0 +2:1/0 = 0 +2:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +2:1/0/physics_layer_0/angular_velocity = 0.0 +3:1/0 = 0 +3:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:1/0/physics_layer_0/angular_velocity = 0.0 +4:1/0 = 0 +4:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:1/0/physics_layer_0/angular_velocity = 0.0 +5:1/0 = 0 +5:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +5:1/0/physics_layer_0/angular_velocity = 0.0 +6:1/0 = 0 +6:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +6:1/0/physics_layer_0/angular_velocity = 0.0 +7:1/0 = 0 +7:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:1/0/physics_layer_0/angular_velocity = 0.0 +8:1/0 = 0 +8:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:1/0/physics_layer_0/angular_velocity = 0.0 +9:1/0 = 0 +9:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:1/0/physics_layer_0/angular_velocity = 0.0 +10:1/0 = 0 +10:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:1/0/physics_layer_0/angular_velocity = 0.0 +10:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +0:2/0 = 0 +0:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +0:2/0/physics_layer_0/angular_velocity = 0.0 +1:2/0 = 0 +1:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +1:2/0/physics_layer_0/angular_velocity = 0.0 +2:2/0 = 0 +2:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +2:2/0/physics_layer_0/angular_velocity = 0.0 +3:2/0 = 0 +3:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:2/0/physics_layer_0/angular_velocity = 0.0 +4:2/0 = 0 +4:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:2/0/physics_layer_0/angular_velocity = 0.0 +5:2/0 = 0 +5:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +5:2/0/physics_layer_0/angular_velocity = 0.0 +6:2/0 = 0 +6:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +6:2/0/physics_layer_0/angular_velocity = 0.0 +7:2/0 = 0 +7:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:2/0/physics_layer_0/angular_velocity = 0.0 +8:2/0 = 0 +8:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:2/0/physics_layer_0/angular_velocity = 0.0 +9:2/0 = 0 +9:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:2/0/physics_layer_0/angular_velocity = 0.0 +10:2/0 = 0 +10:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:2/0/physics_layer_0/angular_velocity = 0.0 +10:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +0:3/0 = 0 +0:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +0:3/0/physics_layer_0/angular_velocity = 0.0 +1:3/0 = 0 +1:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +1:3/0/physics_layer_0/angular_velocity = 0.0 +2:3/0 = 0 +2:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +2:3/0/physics_layer_0/angular_velocity = 0.0 +3:3/0 = 0 +3:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:3/0/physics_layer_0/angular_velocity = 0.0 +4:3/0 = 0 +4:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:3/0/physics_layer_0/angular_velocity = 0.0 +5:3/0 = 0 +5:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +5:3/0/physics_layer_0/angular_velocity = 0.0 +6:3/0 = 0 +6:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +6:3/0/physics_layer_0/angular_velocity = 0.0 +8:3/0 = 0 +8:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:3/0/physics_layer_0/angular_velocity = 0.0 +9:3/0 = 0 +9:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:3/0/physics_layer_0/angular_velocity = 0.0 +10:3/0 = 0 +10:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:3/0/physics_layer_0/angular_velocity = 0.0 +10:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +0:4/0 = 0 +0:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +0:4/0/physics_layer_0/angular_velocity = 0.0 +2:4/0 = 0 +2:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +2:4/0/physics_layer_0/angular_velocity = 0.0 +3:4/0 = 0 +3:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:4/0/physics_layer_0/angular_velocity = 0.0 +4:4/0 = 0 +4:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:4/0/physics_layer_0/angular_velocity = 0.0 +5:4/0 = 0 +5:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +5:4/0/physics_layer_0/angular_velocity = 0.0 +7:4/0 = 0 +7:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:4/0/physics_layer_0/angular_velocity = 0.0 +8:4/0 = 0 +8:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:4/0/physics_layer_0/angular_velocity = 0.0 +9:4/0 = 0 +9:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:4/0/physics_layer_0/angular_velocity = 0.0 +10:4/0 = 0 +10:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:4/0/physics_layer_0/angular_velocity = 0.0 +10:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +0:5/0 = 0 +0:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +0:5/0/physics_layer_0/angular_velocity = 0.0 +1:5/0 = 0 +1:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +1:5/0/physics_layer_0/angular_velocity = 0.0 +2:5/0 = 0 +2:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +2:5/0/physics_layer_0/angular_velocity = 0.0 +3:5/0 = 0 +3:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:5/0/physics_layer_0/angular_velocity = 0.0 +4:5/0 = 0 +4:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:5/0/physics_layer_0/angular_velocity = 0.0 +5:5/0 = 0 +5:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +5:5/0/physics_layer_0/angular_velocity = 0.0 +6:5/0 = 0 +6:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +6:5/0/physics_layer_0/angular_velocity = 0.0 +7:5/0 = 0 +7:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:5/0/physics_layer_0/angular_velocity = 0.0 +8:5/0 = 0 +8:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:5/0/physics_layer_0/angular_velocity = 0.0 +9:5/0 = 0 +9:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:5/0/physics_layer_0/angular_velocity = 0.0 +10:5/0 = 0 +10:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:5/0/physics_layer_0/angular_velocity = 0.0 +10:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +0:6/0 = 0 +0:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +0:6/0/physics_layer_0/angular_velocity = 0.0 +1:6/0 = 0 +1:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +1:6/0/physics_layer_0/angular_velocity = 0.0 +2:6/0 = 0 +2:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +2:6/0/physics_layer_0/angular_velocity = 0.0 +3:6/0 = 0 +3:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:6/0/physics_layer_0/angular_velocity = 0.0 +4:6/0 = 0 +4:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:6/0/physics_layer_0/angular_velocity = 0.0 +5:6/0 = 0 +5:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +5:6/0/physics_layer_0/angular_velocity = 0.0 +6:6/0 = 0 +6:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +6:6/0/physics_layer_0/angular_velocity = 0.0 +7:6/0 = 0 +7:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:6/0/physics_layer_0/angular_velocity = 0.0 +8:6/0 = 0 +8:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:6/0/physics_layer_0/angular_velocity = 0.0 +9:6/0 = 0 +9:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:6/0/physics_layer_0/angular_velocity = 0.0 +10:6/0 = 0 +10:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:6/0/physics_layer_0/angular_velocity = 0.0 +10:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +0:7/0 = 0 +0:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) +0:7/0/physics_layer_0/angular_velocity = 0.0 +1:7/0 = 0 +1:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) +1:7/0/physics_layer_0/angular_velocity = 0.0 +2:7/0 = 0 +2:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) +2:7/0/physics_layer_0/angular_velocity = 0.0 +3:7/0 = 0 +3:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:7/0/physics_layer_0/angular_velocity = 0.0 +4:7/0 = 0 +4:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:7/0/physics_layer_0/angular_velocity = 0.0 +5:7/0 = 0 +5:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) +5:7/0/physics_layer_0/angular_velocity = 0.0 +6:7/0 = 0 +6:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) +6:7/0/physics_layer_0/angular_velocity = 0.0 +7:7/0 = 0 +7:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:7/0/physics_layer_0/angular_velocity = 0.0 +8:7/0 = 0 +8:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:7/0/physics_layer_0/angular_velocity = 0.0 +9:7/0 = 0 +9:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:7/0/physics_layer_0/angular_velocity = 0.0 +10:7/0 = 0 +10:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:7/0/physics_layer_0/angular_velocity = 0.0 +7:3/0 = 0 +7:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:3/0/physics_layer_0/angular_velocity = 0.0 + +[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_y6uth"] +texture = ExtResource("2_7nrs7") +0:0/0 = 0 +0:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +0:0/0/physics_layer_0/angular_velocity = 0.0 +0:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +1:0/0 = 0 +1:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +1:0/0/physics_layer_0/angular_velocity = 0.0 +1:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) + +[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_p6k03"] +texture = ExtResource("3_hnuqf") +0:0/0 = 0 +0:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +0:0/0/physics_layer_0/angular_velocity = 0.0 +0:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +1:0/0 = 0 +1:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +1:0/0/physics_layer_0/angular_velocity = 0.0 +1:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +2:0/0 = 0 +2:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +2:0/0/physics_layer_0/angular_velocity = 0.0 +2:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +0:1/0 = 0 +0:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +0:1/0/physics_layer_0/angular_velocity = 0.0 +0:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +1:1/0 = 0 +1:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +1:1/0/physics_layer_0/angular_velocity = 0.0 +2:1/0 = 0 +2:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +2:1/0/physics_layer_0/angular_velocity = 0.0 +2:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +0:2/0 = 0 +0:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +0:2/0/physics_layer_0/angular_velocity = 0.0 +0:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +1:2/0 = 0 +1:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +1:2/0/physics_layer_0/angular_velocity = 0.0 +1:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +2:2/0 = 0 +2:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +2:2/0/physics_layer_0/angular_velocity = 0.0 +2:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) + +[sub_resource type="TileSet" id="TileSet_leduy"] +physics_layer_0/collision_layer = 15 +physics_layer_0/collision_mask = 15 +sources/0 = SubResource("TileSetAtlasSource_0ydj6") +sources/2 = SubResource("TileSetAtlasSource_y6uth") +sources/5 = SubResource("TileSetAtlasSource_p6k03") + +[node name="level_3" type="Node2D" groups=["level"]] +position = Vector2(-112, -232) +scale = Vector2(3, 3) + +[node name="TileMap" type="TileMap" parent="."] +tile_set = SubResource("TileSet_leduy") +format = 2 +layer_0/name = "BaseGround" +layer_0/tile_data = PackedInt32Array(262148, 65536, 1, 262149, 0, 1, 327685, 65536, 1, 327684, 65536, 1, 327683, 0, 1, 262147, 0, 1, 196612, 0, 1, 196613, 0, 1, 196614, 0, 1, 262150, 0, 1, 327686, 0, 1, 393222, 65536, 1, 393221, 0, 1, 393220, 65536, 1, 393219, 65536, 1, 327682, 65536, 1, 131074, 0, 1, 131076, 0, 1, 131077, 65536, 1, 131078, 65536, 1, 131079, 65536, 1, 196615, 0, 1, 262151, 65536, 1, 327687, 0, 1, 393223, 65536, 1, 458759, 0, 1, 458758, 65536, 1, 458757, 65536, 1, 458756, 65536, 1, 458755, 0, 1, 458754, 0, 1, 458753, 65536, 1, 393217, 0, 1, 327681, 0, 1, 262145, 65536, 1, 65540, 65536, 1, 65541, 0, 1, 65542, 65536, 1, 65543, 65536, 1, 65544, 0, 1, 131080, 0, 1, 196616, 65536, 1, 262152, 0, 1, 327688, 0, 1, 393224, 65536, 1, 458760, 65536, 1, 524296, 65536, 1, 524295, 0, 1, 524294, 0, 1, 524293, 65536, 1, 524292, 0, 1, 524291, 65536, 1, 524290, 65536, 1, 524289, 65536, 1, 65538, 0, 1, 65539, 0, 1, 131075, 0, 1, 196611, 0, 1, 196610, 0, 1, 196609, 0, 1, 131073, 0, 1, 262146, 0, 1, 393218, 0, 1, 65537, 0, 1) +layer_1/name = "TopGround" +layer_1/tile_data = PackedInt32Array(65540, 65541, 0, 458756, 65541, 0, 458757, 131077, 2, 458755, 5, 2, 393219, 5, 1, 327683, 5, 1, 393221, 5, 1, 327685, 5, 1, 262149, 5, 0, 262147, 131077, 0, 262146, 65541, 0, 262150, 65541, 0, 262151, 131077, 2, 262145, 5, 2, 65537, 5, 0, 65543, 131077, 0, 65541, 65541, 0, 65542, 65541, 0, 65538, 65541, 0, 65539, 65541, 0, 131073, 5, 1, 196609, 5, 1, 131079, 5, 1, 196615, 5, 1) +layer_2/name = "Water" +layer_2/tile_data = PackedInt32Array(262153, 2, 0, 196617, 2, 0, 131081, 2, 0, 65545, 2, 0, 9, 2, 0, 8, 2, 0, 7, 2, 0, 6, 2, 0, 5, 2, 0, 4, 2, 0, 3, 2, 0, 2, 2, 0, 1, 2, 0, 0, 2, 0, 65536, 2, 0, 131072, 2, 0, 196608, 2, 0, 262144, 2, 0, 327680, 2, 0, 393216, 2, 0, 458752, 2, 0, 524288, 2, 0, 589824, 2, 0, 589825, 2, 0, 589826, 2, 0, 589827, 2, 0, 589828, 2, 0, 589829, 2, 0, 589830, 2, 0, 589831, 2, 0, 589832, 2, 0, 589833, 2, 0, 524297, 2, 0, 458761, 2, 0, 393225, 2, 0, 327689, 2, 0) +script = ExtResource("4_frsdp") + +[node name="PlayerRobot" parent="." instance=ExtResource("5_pmg6m")] +z_index = 2 +position = Vector2(72, 40) + +[node name="Box" parent="." instance=ExtResource("6_rfvb2")] +position = Vector2(71, 55) + +[node name="Box2" parent="." instance=ExtResource("6_rfvb2")] +position = Vector2(71, 71) + +[node name="EndZone" parent="." groups=["platforms"] instance=ExtResource("7_8an80")] +z_index = 0 +position = Vector2(71.3333, 87.6667) +scale = Vector2(0.9, 0.9) + +[node name="EndZone2" parent="." groups=["platforms"] instance=ExtResource("7_8an80")] +z_index = 0 +position = Vector2(71.3333, 103.667) +scale = Vector2(0.9, 0.9) + +[node name="InteractionManager" parent="." groups=["interaction_manager"] instance=ExtResource("8_riyqa")] + +[node name="GameManager" parent="." groups=["game_manager"] instance=ExtResource("9_b7374")] diff --git a/Code/levels/level_5.tscn b/Code/levels/level_5.tscn new file mode 100644 index 0000000..3235372 --- /dev/null +++ b/Code/levels/level_5.tscn @@ -0,0 +1,373 @@ +[gd_scene load_steps=14 format=3 uid="uid://bxnb5ya63vj7c"] + +[ext_resource type="Texture2D" uid="uid://buebn1dqinyin" path="res://art/tiles/robot_atlas.png" id="1_yd28c"] +[ext_resource type="Texture2D" uid="uid://dwsmec5b5rj0y" path="res://art/tiles/water.png" id="2_3idox"] +[ext_resource type="Texture2D" uid="uid://dqryivwwhqd0x" path="res://art/tiles/walls.png" id="3_wv35j"] +[ext_resource type="Script" path="res://TileMap.gd" id="4_f85qq"] +[ext_resource type="PackedScene" uid="uid://cchfvbtuste6s" path="res://characters/player_robot.tscn" id="5_n3kaq"] +[ext_resource type="PackedScene" uid="uid://vb8lfikq5dc7" path="res://box.tscn" id="6_q1up7"] +[ext_resource type="PackedScene" uid="uid://deb7q6h0om8hc" path="res://End.tscn" id="7_g4owx"] +[ext_resource type="PackedScene" uid="uid://c7m1f03wf08sa" path="res://interaction/InteractionManager.tscn" id="8_rcjvk"] +[ext_resource type="PackedScene" uid="uid://5q5c8pt7mew2" path="res://GameManager.tscn" id="9_4hfqb"] + +[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_0ydj6"] +texture = ExtResource("1_yd28c") +margins = Vector2i(0, 8) +0:0/0 = 0 +0:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +0:0/0/physics_layer_0/angular_velocity = 0.0 +1:0/0 = 0 +1:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +1:0/0/physics_layer_0/angular_velocity = 0.0 +2:0/0 = 0 +2:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +2:0/0/physics_layer_0/angular_velocity = 0.0 +4:0/0 = 0 +4:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:0/0/physics_layer_0/angular_velocity = 0.0 +5:0/0 = 0 +5:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +5:0/0/physics_layer_0/angular_velocity = 0.0 +6:0/0 = 0 +6:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +6:0/0/physics_layer_0/angular_velocity = 0.0 +7:0/0 = 0 +7:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:0/0/physics_layer_0/angular_velocity = 0.0 +8:0/0 = 0 +8:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:0/0/physics_layer_0/angular_velocity = 0.0 +9:0/0 = 0 +9:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:0/0/physics_layer_0/angular_velocity = 0.0 +10:0/0 = 0 +10:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:0/0/physics_layer_0/angular_velocity = 0.0 +10:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +0:1/0 = 0 +0:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +0:1/0/physics_layer_0/angular_velocity = 0.0 +1:1/0 = 0 +1:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +1:1/0/physics_layer_0/angular_velocity = 0.0 +2:1/0 = 0 +2:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +2:1/0/physics_layer_0/angular_velocity = 0.0 +3:1/0 = 0 +3:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:1/0/physics_layer_0/angular_velocity = 0.0 +4:1/0 = 0 +4:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:1/0/physics_layer_0/angular_velocity = 0.0 +5:1/0 = 0 +5:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +5:1/0/physics_layer_0/angular_velocity = 0.0 +6:1/0 = 0 +6:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +6:1/0/physics_layer_0/angular_velocity = 0.0 +7:1/0 = 0 +7:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:1/0/physics_layer_0/angular_velocity = 0.0 +8:1/0 = 0 +8:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:1/0/physics_layer_0/angular_velocity = 0.0 +9:1/0 = 0 +9:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:1/0/physics_layer_0/angular_velocity = 0.0 +10:1/0 = 0 +10:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:1/0/physics_layer_0/angular_velocity = 0.0 +10:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +0:2/0 = 0 +0:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +0:2/0/physics_layer_0/angular_velocity = 0.0 +1:2/0 = 0 +1:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +1:2/0/physics_layer_0/angular_velocity = 0.0 +2:2/0 = 0 +2:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +2:2/0/physics_layer_0/angular_velocity = 0.0 +3:2/0 = 0 +3:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:2/0/physics_layer_0/angular_velocity = 0.0 +4:2/0 = 0 +4:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:2/0/physics_layer_0/angular_velocity = 0.0 +5:2/0 = 0 +5:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +5:2/0/physics_layer_0/angular_velocity = 0.0 +6:2/0 = 0 +6:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +6:2/0/physics_layer_0/angular_velocity = 0.0 +7:2/0 = 0 +7:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:2/0/physics_layer_0/angular_velocity = 0.0 +8:2/0 = 0 +8:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:2/0/physics_layer_0/angular_velocity = 0.0 +9:2/0 = 0 +9:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:2/0/physics_layer_0/angular_velocity = 0.0 +10:2/0 = 0 +10:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:2/0/physics_layer_0/angular_velocity = 0.0 +10:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +0:3/0 = 0 +0:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +0:3/0/physics_layer_0/angular_velocity = 0.0 +1:3/0 = 0 +1:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +1:3/0/physics_layer_0/angular_velocity = 0.0 +2:3/0 = 0 +2:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +2:3/0/physics_layer_0/angular_velocity = 0.0 +3:3/0 = 0 +3:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:3/0/physics_layer_0/angular_velocity = 0.0 +4:3/0 = 0 +4:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:3/0/physics_layer_0/angular_velocity = 0.0 +5:3/0 = 0 +5:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +5:3/0/physics_layer_0/angular_velocity = 0.0 +6:3/0 = 0 +6:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +6:3/0/physics_layer_0/angular_velocity = 0.0 +8:3/0 = 0 +8:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:3/0/physics_layer_0/angular_velocity = 0.0 +9:3/0 = 0 +9:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:3/0/physics_layer_0/angular_velocity = 0.0 +10:3/0 = 0 +10:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:3/0/physics_layer_0/angular_velocity = 0.0 +10:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +0:4/0 = 0 +0:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +0:4/0/physics_layer_0/angular_velocity = 0.0 +2:4/0 = 0 +2:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +2:4/0/physics_layer_0/angular_velocity = 0.0 +3:4/0 = 0 +3:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:4/0/physics_layer_0/angular_velocity = 0.0 +4:4/0 = 0 +4:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:4/0/physics_layer_0/angular_velocity = 0.0 +5:4/0 = 0 +5:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +5:4/0/physics_layer_0/angular_velocity = 0.0 +7:4/0 = 0 +7:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:4/0/physics_layer_0/angular_velocity = 0.0 +8:4/0 = 0 +8:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:4/0/physics_layer_0/angular_velocity = 0.0 +9:4/0 = 0 +9:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:4/0/physics_layer_0/angular_velocity = 0.0 +10:4/0 = 0 +10:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:4/0/physics_layer_0/angular_velocity = 0.0 +10:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +0:5/0 = 0 +0:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +0:5/0/physics_layer_0/angular_velocity = 0.0 +1:5/0 = 0 +1:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +1:5/0/physics_layer_0/angular_velocity = 0.0 +2:5/0 = 0 +2:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +2:5/0/physics_layer_0/angular_velocity = 0.0 +3:5/0 = 0 +3:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:5/0/physics_layer_0/angular_velocity = 0.0 +4:5/0 = 0 +4:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:5/0/physics_layer_0/angular_velocity = 0.0 +5:5/0 = 0 +5:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +5:5/0/physics_layer_0/angular_velocity = 0.0 +6:5/0 = 0 +6:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +6:5/0/physics_layer_0/angular_velocity = 0.0 +7:5/0 = 0 +7:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:5/0/physics_layer_0/angular_velocity = 0.0 +8:5/0 = 0 +8:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:5/0/physics_layer_0/angular_velocity = 0.0 +9:5/0 = 0 +9:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:5/0/physics_layer_0/angular_velocity = 0.0 +10:5/0 = 0 +10:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:5/0/physics_layer_0/angular_velocity = 0.0 +10:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +0:6/0 = 0 +0:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +0:6/0/physics_layer_0/angular_velocity = 0.0 +1:6/0 = 0 +1:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +1:6/0/physics_layer_0/angular_velocity = 0.0 +2:6/0 = 0 +2:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +2:6/0/physics_layer_0/angular_velocity = 0.0 +3:6/0 = 0 +3:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:6/0/physics_layer_0/angular_velocity = 0.0 +4:6/0 = 0 +4:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:6/0/physics_layer_0/angular_velocity = 0.0 +5:6/0 = 0 +5:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +5:6/0/physics_layer_0/angular_velocity = 0.0 +6:6/0 = 0 +6:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +6:6/0/physics_layer_0/angular_velocity = 0.0 +7:6/0 = 0 +7:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:6/0/physics_layer_0/angular_velocity = 0.0 +8:6/0 = 0 +8:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:6/0/physics_layer_0/angular_velocity = 0.0 +9:6/0 = 0 +9:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:6/0/physics_layer_0/angular_velocity = 0.0 +10:6/0 = 0 +10:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:6/0/physics_layer_0/angular_velocity = 0.0 +10:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +0:7/0 = 0 +0:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) +0:7/0/physics_layer_0/angular_velocity = 0.0 +1:7/0 = 0 +1:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) +1:7/0/physics_layer_0/angular_velocity = 0.0 +2:7/0 = 0 +2:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) +2:7/0/physics_layer_0/angular_velocity = 0.0 +3:7/0 = 0 +3:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:7/0/physics_layer_0/angular_velocity = 0.0 +4:7/0 = 0 +4:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:7/0/physics_layer_0/angular_velocity = 0.0 +5:7/0 = 0 +5:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) +5:7/0/physics_layer_0/angular_velocity = 0.0 +6:7/0 = 0 +6:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) +6:7/0/physics_layer_0/angular_velocity = 0.0 +7:7/0 = 0 +7:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:7/0/physics_layer_0/angular_velocity = 0.0 +8:7/0 = 0 +8:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:7/0/physics_layer_0/angular_velocity = 0.0 +9:7/0 = 0 +9:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:7/0/physics_layer_0/angular_velocity = 0.0 +10:7/0 = 0 +10:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:7/0/physics_layer_0/angular_velocity = 0.0 +7:3/0 = 0 +7:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:3/0/physics_layer_0/angular_velocity = 0.0 + +[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_y6uth"] +texture = ExtResource("2_3idox") +0:0/0 = 0 +0:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +0:0/0/physics_layer_0/angular_velocity = 0.0 +0:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +1:0/0 = 0 +1:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +1:0/0/physics_layer_0/angular_velocity = 0.0 +1:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) + +[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_p6k03"] +texture = ExtResource("3_wv35j") +0:0/0 = 0 +0:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +0:0/0/physics_layer_0/angular_velocity = 0.0 +0:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +1:0/0 = 0 +1:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +1:0/0/physics_layer_0/angular_velocity = 0.0 +1:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +2:0/0 = 0 +2:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +2:0/0/physics_layer_0/angular_velocity = 0.0 +2:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +0:1/0 = 0 +0:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +0:1/0/physics_layer_0/angular_velocity = 0.0 +0:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +1:1/0 = 0 +1:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +1:1/0/physics_layer_0/angular_velocity = 0.0 +2:1/0 = 0 +2:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +2:1/0/physics_layer_0/angular_velocity = 0.0 +2:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +0:2/0 = 0 +0:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +0:2/0/physics_layer_0/angular_velocity = 0.0 +0:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +1:2/0 = 0 +1:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +1:2/0/physics_layer_0/angular_velocity = 0.0 +1:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +2:2/0 = 0 +2:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +2:2/0/physics_layer_0/angular_velocity = 0.0 +2:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) + +[sub_resource type="TileSet" id="TileSet_leduy"] +physics_layer_0/collision_layer = 15 +physics_layer_0/collision_mask = 15 +sources/0 = SubResource("TileSetAtlasSource_0ydj6") +sources/2 = SubResource("TileSetAtlasSource_y6uth") +sources/5 = SubResource("TileSetAtlasSource_p6k03") + +[node name="level_3" type="Node2D" groups=["level"]] +position = Vector2(-112, -232) +scale = Vector2(3, 3) + +[node name="TileMap" type="TileMap" parent="."] +tile_set = SubResource("TileSet_leduy") +format = 2 +layer_0/name = "BaseGround" +layer_0/tile_data = PackedInt32Array(262148, 65536, 1, 262149, 0, 1, 327685, 65536, 1, 327684, 65536, 1, 327683, 0, 1, 262147, 0, 1, 196612, 0, 1, 196613, 0, 1, 196614, 0, 1, 262150, 0, 1, 327686, 0, 1, 393222, 65536, 1, 393221, 0, 1, 393220, 65536, 1, 393219, 65536, 1, 327682, 65536, 1, 131074, 0, 1, 131076, 0, 1, 131077, 65536, 1, 131078, 65536, 1, 131079, 65536, 1, 196615, 0, 1, 262151, 65536, 1, 327687, 0, 1, 393223, 65536, 1, 458759, 0, 1, 458758, 65536, 1, 458757, 65536, 1, 458756, 65536, 1, 458755, 0, 1, 458754, 0, 1, 458753, 65536, 1, 393217, 0, 1, 327681, 0, 1, 262145, 65536, 1, 65540, 65536, 1, 65541, 0, 1, 65542, 65536, 1, 65543, 65536, 1, 65544, 0, 1, 131080, 0, 1, 196616, 65536, 1, 262152, 0, 1, 327688, 0, 1, 393224, 65536, 1, 458760, 65536, 1, 524296, 65536, 1, 524295, 0, 1, 524294, 0, 1, 524293, 65536, 1, 524292, 0, 1, 524291, 65536, 1, 524290, 65536, 1, 524289, 65536, 1, 65538, 0, 1, 65539, 0, 1, 131075, 0, 1, 196611, 0, 1, 196610, 0, 1, 196609, 0, 1, 131073, 0, 1, 262146, 0, 1, 393218, 0, 1, 65537, 0, 1) +layer_1/name = "TopGround" +layer_1/tile_data = PackedInt32Array(65540, 65541, 0, 65539, 65541, 0, 65538, 65541, 0, 65537, 5, 0, 131073, 5, 1, 196609, 5, 1, 262145, 5, 1, 327681, 5, 2, 327682, 65541, 0, 327683, 131077, 0, 393219, 5, 2, 393220, 65541, 0, 393221, 65541, 0, 393222, 131077, 2, 327686, 5, 1, 262150, 5, 1, 196614, 5, 1, 131078, 5, 1, 65542, 131077, 0, 65541, 65541, 0) +layer_2/name = "Water" +layer_2/tile_data = PackedInt32Array(262153, 2, 0, 196617, 2, 0, 131081, 2, 0, 65545, 2, 0, 9, 2, 0, 8, 2, 0, 7, 2, 0, 6, 2, 0, 5, 2, 0, 4, 2, 0, 3, 2, 0, 2, 2, 0, 1, 2, 0, 0, 2, 0, 65536, 2, 0, 131072, 2, 0, 196608, 2, 0, 262144, 2, 0, 327680, 2, 0, 393216, 2, 0, 458752, 2, 0, 524288, 2, 0, 589824, 2, 0, 589825, 2, 0, 589826, 2, 0, 589827, 2, 0, 589828, 2, 0, 589829, 2, 0, 589830, 2, 0, 589831, 2, 0, 589832, 2, 0, 589833, 2, 0, 524297, 2, 0, 458761, 2, 0, 393225, 2, 0, 327689, 2, 0) +script = ExtResource("4_f85qq") + +[node name="PlayerRobot" parent="." instance=ExtResource("5_n3kaq")] +z_index = 2 +position = Vector2(40, 40) + +[node name="Box" parent="." instance=ExtResource("6_q1up7")] +z_index = 2 +position = Vector2(55, 55) + +[node name="Box2" parent="." instance=ExtResource("6_q1up7")] +position = Vector2(72, 55) + +[node name="EndZone" parent="." groups=["platforms"] instance=ExtResource("7_g4owx")] +z_index = 0 +position = Vector2(71.3333, 39.3333) +scale = Vector2(0.9, 0.9) + +[node name="EndZone2" parent="." groups=["platforms"] instance=ExtResource("7_g4owx")] +z_index = 0 +position = Vector2(87.6667, 55.3333) +scale = Vector2(0.9, 0.9) + +[node name="InteractionManager" parent="." groups=["interaction_manager"] instance=ExtResource("8_rcjvk")] + +[node name="GameManager" parent="." groups=["game_manager"] instance=ExtResource("9_4hfqb")] diff --git a/Code/levels/level_null.tscn b/Code/levels/level_null.tscn new file mode 100644 index 0000000..7951750 --- /dev/null +++ b/Code/levels/level_null.tscn @@ -0,0 +1,355 @@ +[gd_scene load_steps=12 format=3 uid="uid://cgfd0av8u0qo3"] + +[ext_resource type="Texture2D" uid="uid://buebn1dqinyin" path="res://art/tiles/robot_atlas.png" id="1_wq7mn"] +[ext_resource type="Texture2D" uid="uid://dwsmec5b5rj0y" path="res://art/tiles/water.png" id="2_04gky"] +[ext_resource type="Texture2D" uid="uid://dqryivwwhqd0x" path="res://art/tiles/walls.png" id="3_q10ov"] +[ext_resource type="Script" path="res://TileMap.gd" id="4_srnhm"] +[ext_resource type="PackedScene" uid="uid://cchfvbtuste6s" path="res://characters/player_robot.tscn" id="5_v55fi"] +[ext_resource type="PackedScene" uid="uid://5q5c8pt7mew2" path="res://GameManager.tscn" id="8_lpr03"] +[ext_resource type="PackedScene" uid="uid://c7m1f03wf08sa" path="res://interaction/InteractionManager.tscn" id="9_42rsj"] + +[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_0ydj6"] +texture = ExtResource("1_wq7mn") +margins = Vector2i(0, 8) +0:0/0 = 0 +0:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +0:0/0/physics_layer_0/angular_velocity = 0.0 +1:0/0 = 0 +1:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +1:0/0/physics_layer_0/angular_velocity = 0.0 +2:0/0 = 0 +2:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +2:0/0/physics_layer_0/angular_velocity = 0.0 +4:0/0 = 0 +4:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:0/0/physics_layer_0/angular_velocity = 0.0 +5:0/0 = 0 +5:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +5:0/0/physics_layer_0/angular_velocity = 0.0 +6:0/0 = 0 +6:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +6:0/0/physics_layer_0/angular_velocity = 0.0 +7:0/0 = 0 +7:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:0/0/physics_layer_0/angular_velocity = 0.0 +8:0/0 = 0 +8:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:0/0/physics_layer_0/angular_velocity = 0.0 +9:0/0 = 0 +9:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:0/0/physics_layer_0/angular_velocity = 0.0 +10:0/0 = 0 +10:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:0/0/physics_layer_0/angular_velocity = 0.0 +10:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +0:1/0 = 0 +0:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +0:1/0/physics_layer_0/angular_velocity = 0.0 +1:1/0 = 0 +1:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +1:1/0/physics_layer_0/angular_velocity = 0.0 +2:1/0 = 0 +2:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +2:1/0/physics_layer_0/angular_velocity = 0.0 +3:1/0 = 0 +3:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:1/0/physics_layer_0/angular_velocity = 0.0 +4:1/0 = 0 +4:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:1/0/physics_layer_0/angular_velocity = 0.0 +5:1/0 = 0 +5:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +5:1/0/physics_layer_0/angular_velocity = 0.0 +6:1/0 = 0 +6:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +6:1/0/physics_layer_0/angular_velocity = 0.0 +7:1/0 = 0 +7:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:1/0/physics_layer_0/angular_velocity = 0.0 +8:1/0 = 0 +8:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:1/0/physics_layer_0/angular_velocity = 0.0 +9:1/0 = 0 +9:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:1/0/physics_layer_0/angular_velocity = 0.0 +10:1/0 = 0 +10:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:1/0/physics_layer_0/angular_velocity = 0.0 +10:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +0:2/0 = 0 +0:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +0:2/0/physics_layer_0/angular_velocity = 0.0 +1:2/0 = 0 +1:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +1:2/0/physics_layer_0/angular_velocity = 0.0 +2:2/0 = 0 +2:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +2:2/0/physics_layer_0/angular_velocity = 0.0 +3:2/0 = 0 +3:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:2/0/physics_layer_0/angular_velocity = 0.0 +4:2/0 = 0 +4:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:2/0/physics_layer_0/angular_velocity = 0.0 +5:2/0 = 0 +5:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +5:2/0/physics_layer_0/angular_velocity = 0.0 +6:2/0 = 0 +6:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +6:2/0/physics_layer_0/angular_velocity = 0.0 +7:2/0 = 0 +7:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:2/0/physics_layer_0/angular_velocity = 0.0 +8:2/0 = 0 +8:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:2/0/physics_layer_0/angular_velocity = 0.0 +9:2/0 = 0 +9:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:2/0/physics_layer_0/angular_velocity = 0.0 +10:2/0 = 0 +10:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:2/0/physics_layer_0/angular_velocity = 0.0 +10:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +0:3/0 = 0 +0:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +0:3/0/physics_layer_0/angular_velocity = 0.0 +1:3/0 = 0 +1:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +1:3/0/physics_layer_0/angular_velocity = 0.0 +2:3/0 = 0 +2:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +2:3/0/physics_layer_0/angular_velocity = 0.0 +3:3/0 = 0 +3:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:3/0/physics_layer_0/angular_velocity = 0.0 +4:3/0 = 0 +4:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:3/0/physics_layer_0/angular_velocity = 0.0 +5:3/0 = 0 +5:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +5:3/0/physics_layer_0/angular_velocity = 0.0 +6:3/0 = 0 +6:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +6:3/0/physics_layer_0/angular_velocity = 0.0 +8:3/0 = 0 +8:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:3/0/physics_layer_0/angular_velocity = 0.0 +9:3/0 = 0 +9:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:3/0/physics_layer_0/angular_velocity = 0.0 +10:3/0 = 0 +10:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:3/0/physics_layer_0/angular_velocity = 0.0 +10:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +0:4/0 = 0 +0:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +0:4/0/physics_layer_0/angular_velocity = 0.0 +2:4/0 = 0 +2:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +2:4/0/physics_layer_0/angular_velocity = 0.0 +3:4/0 = 0 +3:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:4/0/physics_layer_0/angular_velocity = 0.0 +4:4/0 = 0 +4:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:4/0/physics_layer_0/angular_velocity = 0.0 +5:4/0 = 0 +5:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +5:4/0/physics_layer_0/angular_velocity = 0.0 +7:4/0 = 0 +7:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:4/0/physics_layer_0/angular_velocity = 0.0 +8:4/0 = 0 +8:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:4/0/physics_layer_0/angular_velocity = 0.0 +9:4/0 = 0 +9:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:4/0/physics_layer_0/angular_velocity = 0.0 +10:4/0 = 0 +10:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:4/0/physics_layer_0/angular_velocity = 0.0 +10:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +0:5/0 = 0 +0:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +0:5/0/physics_layer_0/angular_velocity = 0.0 +1:5/0 = 0 +1:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +1:5/0/physics_layer_0/angular_velocity = 0.0 +2:5/0 = 0 +2:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +2:5/0/physics_layer_0/angular_velocity = 0.0 +3:5/0 = 0 +3:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:5/0/physics_layer_0/angular_velocity = 0.0 +4:5/0 = 0 +4:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:5/0/physics_layer_0/angular_velocity = 0.0 +5:5/0 = 0 +5:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +5:5/0/physics_layer_0/angular_velocity = 0.0 +6:5/0 = 0 +6:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +6:5/0/physics_layer_0/angular_velocity = 0.0 +7:5/0 = 0 +7:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:5/0/physics_layer_0/angular_velocity = 0.0 +8:5/0 = 0 +8:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:5/0/physics_layer_0/angular_velocity = 0.0 +9:5/0 = 0 +9:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:5/0/physics_layer_0/angular_velocity = 0.0 +10:5/0 = 0 +10:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:5/0/physics_layer_0/angular_velocity = 0.0 +10:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +0:6/0 = 0 +0:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +0:6/0/physics_layer_0/angular_velocity = 0.0 +1:6/0 = 0 +1:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +1:6/0/physics_layer_0/angular_velocity = 0.0 +2:6/0 = 0 +2:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +2:6/0/physics_layer_0/angular_velocity = 0.0 +3:6/0 = 0 +3:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:6/0/physics_layer_0/angular_velocity = 0.0 +4:6/0 = 0 +4:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:6/0/physics_layer_0/angular_velocity = 0.0 +5:6/0 = 0 +5:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +5:6/0/physics_layer_0/angular_velocity = 0.0 +6:6/0 = 0 +6:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +6:6/0/physics_layer_0/angular_velocity = 0.0 +7:6/0 = 0 +7:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:6/0/physics_layer_0/angular_velocity = 0.0 +8:6/0 = 0 +8:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:6/0/physics_layer_0/angular_velocity = 0.0 +9:6/0 = 0 +9:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:6/0/physics_layer_0/angular_velocity = 0.0 +10:6/0 = 0 +10:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:6/0/physics_layer_0/angular_velocity = 0.0 +10:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +0:7/0 = 0 +0:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) +0:7/0/physics_layer_0/angular_velocity = 0.0 +1:7/0 = 0 +1:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) +1:7/0/physics_layer_0/angular_velocity = 0.0 +2:7/0 = 0 +2:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) +2:7/0/physics_layer_0/angular_velocity = 0.0 +3:7/0 = 0 +3:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:7/0/physics_layer_0/angular_velocity = 0.0 +4:7/0 = 0 +4:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:7/0/physics_layer_0/angular_velocity = 0.0 +5:7/0 = 0 +5:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) +5:7/0/physics_layer_0/angular_velocity = 0.0 +6:7/0 = 0 +6:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) +6:7/0/physics_layer_0/angular_velocity = 0.0 +7:7/0 = 0 +7:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:7/0/physics_layer_0/angular_velocity = 0.0 +8:7/0 = 0 +8:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:7/0/physics_layer_0/angular_velocity = 0.0 +9:7/0 = 0 +9:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:7/0/physics_layer_0/angular_velocity = 0.0 +10:7/0 = 0 +10:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:7/0/physics_layer_0/angular_velocity = 0.0 +7:3/0 = 0 +7:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:3/0/physics_layer_0/angular_velocity = 0.0 + +[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_y6uth"] +texture = ExtResource("2_04gky") +0:0/0 = 0 +0:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +0:0/0/physics_layer_0/angular_velocity = 0.0 +0:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +1:0/0 = 0 +1:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +1:0/0/physics_layer_0/angular_velocity = 0.0 +1:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) + +[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_p6k03"] +texture = ExtResource("3_q10ov") +0:0/0 = 0 +0:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +0:0/0/physics_layer_0/angular_velocity = 0.0 +0:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +1:0/0 = 0 +1:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +1:0/0/physics_layer_0/angular_velocity = 0.0 +1:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +2:0/0 = 0 +2:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +2:0/0/physics_layer_0/angular_velocity = 0.0 +2:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +0:1/0 = 0 +0:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +0:1/0/physics_layer_0/angular_velocity = 0.0 +0:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +1:1/0 = 0 +1:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +1:1/0/physics_layer_0/angular_velocity = 0.0 +2:1/0 = 0 +2:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +2:1/0/physics_layer_0/angular_velocity = 0.0 +2:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +0:2/0 = 0 +0:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +0:2/0/physics_layer_0/angular_velocity = 0.0 +0:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +1:2/0 = 0 +1:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +1:2/0/physics_layer_0/angular_velocity = 0.0 +1:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +2:2/0 = 0 +2:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +2:2/0/physics_layer_0/angular_velocity = 0.0 +2:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) + +[sub_resource type="TileSet" id="TileSet_leduy"] +physics_layer_0/collision_layer = 15 +physics_layer_0/collision_mask = 15 +sources/0 = SubResource("TileSetAtlasSource_0ydj6") +sources/2 = SubResource("TileSetAtlasSource_y6uth") +sources/5 = SubResource("TileSetAtlasSource_p6k03") + +[node name="level_0" type="Node2D"] +position = Vector2(-112, -232) +scale = Vector2(3, 3) + +[node name="TileMap" type="TileMap" parent="." groups=["walls"]] +tile_set = SubResource("TileSet_leduy") +format = 2 +layer_0/name = "BaseGround" +layer_0/tile_data = PackedInt32Array(327685, 65536, 1, 196612, 0, 1, 196613, 0, 1, 196614, 0, 1, 262150, 0, 1, 393220, 65536, 1, 131074, 0, 1, 131076, 0, 1, 131077, 65536, 1, 131078, 65536, 1, 131079, 65536, 1, 196615, 0, 1, 262151, 65536, 1, 327687, 0, 1, 393223, 65536, 1, 458759, 0, 1, 458758, 65536, 1, 458755, 0, 1, 458753, 65536, 1, 393217, 0, 1, 327681, 0, 1, 262145, 65536, 1, 65540, 65536, 1, 65541, 0, 1, 65542, 65536, 1, 65543, 65536, 1, 65544, 0, 1, 131080, 0, 1, 196616, 65536, 1, 262152, 0, 1, 327688, 0, 1, 393224, 65536, 1, 458760, 65536, 1, 524296, 65536, 1, 524295, 0, 1, 524294, 0, 1, 524293, 65536, 1, 524290, 65536, 1, 524289, 65536, 1, 65537, 0, 1, 65538, 0, 1, 65539, 0, 1, 131075, 0, 1, 196611, 0, 1, 196610, 0, 1, 196609, 0, 1, 131073, 0, 1, 262146, 0, 1, 327682, 65536, 1, 327686, 0, 1, 393222, 65536, 1, 524292, 0, 1, 524291, 65536, 1, 458754, 0, 1, 393218, 0, 1, 327683, 0, 1, 262147, 0, 1, 262149, 0, 1, 393219, 65536, 1, 262148, 65536, 1, 327684, 65536, 1, 393221, 0, 1, 458757, 65536, 1, 458756, 65536, 1) +layer_1/name = "TopGround" +layer_1/tile_data = PackedInt32Array() +layer_2/name = "Water" +layer_2/tile_data = PackedInt32Array(262153, 2, 0, 196617, 2, 0, 131081, 2, 0, 65545, 2, 0, 9, 2, 0, 8, 2, 0, 7, 2, 0, 6, 2, 0, 5, 2, 0, 4, 2, 0, 3, 2, 0, 2, 2, 0, 1, 2, 0, 0, 2, 0, 65536, 2, 0, 131072, 2, 0, 196608, 2, 0, 262144, 2, 0, 327680, 2, 0, 393216, 2, 0, 458752, 2, 0, 524288, 2, 0, 589824, 2, 0, 589825, 2, 0, 589826, 2, 0, 589827, 2, 0, 589828, 2, 0, 589829, 2, 0, 589830, 2, 0, 589831, 2, 0, 589832, 2, 0, 589833, 2, 0, 524297, 2, 0, 458761, 2, 0, 393225, 2, 0, 327689, 2, 0) +script = ExtResource("4_srnhm") + +[node name="PlayerRobot" parent="." instance=ExtResource("5_v55fi")] +z_index = 2 + +[node name="GameManager" parent="." groups=["game_manager"] instance=ExtResource("8_lpr03")] +unique_name_in_owner = true + +[node name="InteractionManager" parent="." groups=["interaction_manager"] instance=ExtResource("9_42rsj")] +position = Vector2(60, 63) diff --git a/Code/links/used_assets.txt b/Code/links/used_assets.txt new file mode 100644 index 0000000..6d00a1b --- /dev/null +++ b/Code/links/used_assets.txt @@ -0,0 +1,2 @@ +https://kicked-in-teeth.itch.io/button-ui +https://comp3interactive.itch.io/retro-windows-gui diff --git a/Code/menu_theme.tres b/Code/menu_theme.tres new file mode 100644 index 0000000..7ac61a4 --- /dev/null +++ b/Code/menu_theme.tres @@ -0,0 +1,102 @@ +[gd_resource type="Theme" load_steps=8 format=3 uid="uid://nj7vctd77uat"] + +[ext_resource type="FontFile" uid="uid://crxxdiidbhsib" path="res://monogram.ttf" id="1_sdu1m"] + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_3ky8g"] +content_margin_left = 4.0 +content_margin_top = 4.0 +content_margin_right = 4.0 +content_margin_bottom = 4.0 +bg_color = Color(0.1, 0.1, 0.1, 0.3) +corner_radius_top_left = 3 +corner_radius_top_right = 3 +corner_radius_bottom_right = 3 +corner_radius_bottom_left = 3 +corner_detail = 5 + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_v8jfc"] +content_margin_left = 4.0 +content_margin_top = 4.0 +content_margin_right = 4.0 +content_margin_bottom = 4.0 +bg_color = Color(1, 1, 1, 0.75) +draw_center = false +border_width_left = 2 +border_width_top = 2 +border_width_right = 2 +border_width_bottom = 2 +corner_radius_top_left = 3 +corner_radius_top_right = 3 +corner_radius_bottom_right = 3 +corner_radius_bottom_left = 3 +corner_detail = 5 +expand_margin_left = 2.0 +expand_margin_top = 2.0 +expand_margin_right = 2.0 +expand_margin_bottom = 2.0 + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_ed3p6"] +content_margin_left = 4.0 +content_margin_top = 4.0 +content_margin_right = 4.0 +content_margin_bottom = 4.0 +bg_color = Color(0.225, 0.225, 0.225, 0.6) +corner_radius_top_left = 3 +corner_radius_top_right = 3 +corner_radius_bottom_right = 3 +corner_radius_bottom_left = 3 +corner_detail = 5 + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_b2cco"] +content_margin_left = 4.0 +content_margin_top = 4.0 +content_margin_right = 4.0 +content_margin_bottom = 4.0 +bg_color = Color(0.101961, 0.101961, 0.101961, 0.6) +corner_radius_top_left = 3 +corner_radius_top_right = 3 +corner_radius_bottom_right = 3 +corner_radius_bottom_left = 3 +corner_detail = 5 + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_wkhdv"] +content_margin_left = 4.0 +content_margin_top = 4.0 +content_margin_right = 4.0 +content_margin_bottom = 4.0 +bg_color = Color(0, 0, 0, 0.6) +corner_radius_top_left = 3 +corner_radius_top_right = 3 +corner_radius_bottom_right = 3 +corner_radius_bottom_left = 3 +corner_detail = 5 + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_a4mnv"] +bg_color = Color(0.180392, 0.180392, 0.180392, 1) + +[resource] +Button/colors/font_color = Color(0.875, 0.875, 0.875, 1) +Button/colors/font_disabled_color = Color(0.875, 0.875, 0.875, 0.5) +Button/colors/font_focus_color = Color(0.95, 0.95, 0.95, 1) +Button/colors/font_hover_color = Color(0.95, 0.95, 0.95, 1) +Button/colors/font_hover_pressed_color = Color(1, 1, 1, 1) +Button/colors/font_outline_color = Color(1, 1, 1, 1) +Button/colors/font_pressed_color = Color(1, 1, 1, 1) +Button/colors/icon_disabled_color = Color(1, 1, 1, 0.4) +Button/colors/icon_focus_color = Color(1, 1, 1, 1) +Button/colors/icon_hover_color = Color(1, 1, 1, 1) +Button/colors/icon_hover_pressed_color = Color(1, 1, 1, 1) +Button/colors/icon_normal_color = Color(1, 1, 1, 1) +Button/colors/icon_pressed_color = Color(1, 1, 1, 1) +Button/constants/h_separation = 4 +Button/constants/icon_max_width = 0 +Button/constants/outline_size = 0 +Button/font_sizes/font_size = 16 +Button/fonts/font = ExtResource("1_sdu1m") +Button/styles/disabled = SubResource("StyleBoxFlat_3ky8g") +Button/styles/focus = SubResource("StyleBoxFlat_v8jfc") +Button/styles/hover = SubResource("StyleBoxFlat_ed3p6") +Button/styles/normal = SubResource("StyleBoxFlat_b2cco") +Button/styles/pressed = SubResource("StyleBoxFlat_wkhdv") +SolidPanel/base_type = &"Panel" +SolidPanel/styles/panel = SubResource("StyleBoxFlat_a4mnv") diff --git a/Code/monogram.ttf b/Code/monogram.ttf new file mode 100644 index 0000000..aceaeba Binary files /dev/null and b/Code/monogram.ttf differ diff --git a/Code/monogram.ttf.import b/Code/monogram.ttf.import new file mode 100644 index 0000000..025a5fe --- /dev/null +++ b/Code/monogram.ttf.import @@ -0,0 +1,33 @@ +[remap] + +importer="font_data_dynamic" +type="FontFile" +uid="uid://crxxdiidbhsib" +path="res://.godot/imported/monogram.ttf-251ba65795ff272578544793442aad20.fontdata" + +[deps] + +source_file="res://monogram.ttf" +dest_files=["res://.godot/imported/monogram.ttf-251ba65795ff272578544793442aad20.fontdata"] + +[params] + +Rendering=null +antialiasing=1 +generate_mipmaps=false +multichannel_signed_distance_field=false +msdf_pixel_range=8 +msdf_size=48 +allow_system_fallback=true +force_autohinter=false +hinting=1 +subpixel_positioning=1 +oversampling=0.0 +Fallbacks=null +fallbacks=[] +Compress=null +compress=true +preload=[] +language_support={} +script_support={} +opentype_features={} diff --git a/Code/project.godot b/Code/project.godot new file mode 100644 index 0000000..fc1db4c --- /dev/null +++ b/Code/project.godot @@ -0,0 +1,58 @@ +; Engine configuration file. +; It's best edited using the editor UI and not directly, +; since the parameters that go here are not all obvious. +; +; Format: +; [section] ; section goes between [] +; param=value ; assign values to parameters + +config_version=5 + +[application] + +config/name="ProgrammingGame" +run/main_scene="res://ui_scenes/NewStart.tscn" +config/features=PackedStringArray("4.2", "Forward Plus") +config/icon="res://icon.svg" + +[autoload] + +GlobalScript="*res://ui_scripts/GlobalScript.gd" + +[display] + +window/size/viewport_width=1440 +window/size/viewport_height=900 +window/stretch/mode="viewport" +window/stretch/aspect="expand" +mouse_cursor/custom_image_hotspot=Vector2(16, 16) + +[editor] + +movie_writer/mjpeg_quality=1.0 +movie_writer/movie_file="C:/Users/DELL/Documents/GodotProjects/TestGame/recording.avi" + +[gui] + +theme/custom="res://menu_theme.tres" +theme/custom_font="res://monogram.ttf" + +[input] + +code_run={ +"deadzone": 0.5, +"events": [] +} +code_stop={ +"deadzone": 0.5, +"events": [] +} +code_step={ +"deadzone": 0.5, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194333,"key_label":0,"unicode":0,"echo":false,"script":null) +] +} + +[rendering] + +textures/canvas_textures/default_texture_filter=0 diff --git a/Code/style_box_texture_panel.tres b/Code/style_box_texture_panel.tres new file mode 100644 index 0000000..51ac2dd --- /dev/null +++ b/Code/style_box_texture_panel.tres @@ -0,0 +1,13 @@ +[gd_resource type="StyleBoxTexture" load_steps=2 format=3 uid="uid://c507n1pdgrxbu"] + +[ext_resource type="Texture2D" uid="uid://benov8ybcp86p" path="res://ui_retro/Window_Base.png" id="1_8adop"] + +[resource] +texture = ExtResource("1_8adop") +texture_margin_left = 3.0 +texture_margin_top = 3.0 +texture_margin_right = 3.0 +texture_margin_bottom = 3.0 +axis_stretch_horizontal = 1 +axis_stretch_vertical = 1 +region_rect = Rect2(0, 0, 15, 15) diff --git a/Code/tile_1.tres b/Code/tile_1.tres new file mode 100644 index 0000000..cc4407d --- /dev/null +++ b/Code/tile_1.tres @@ -0,0 +1,7 @@ +[gd_resource type="AtlasTexture" load_steps=2 format=3 uid="uid://gjijdcmfbxj8"] + +[ext_resource type="Texture2D" uid="uid://os7624ctmhq3" path="res://art/robot_atlas.png" id="1_4tnf2"] + +[resource] +atlas = ExtResource("1_4tnf2") +region = Rect2(0, 24, 16, 16) diff --git a/Code/tile_2.tres b/Code/tile_2.tres new file mode 100644 index 0000000..4a746cc --- /dev/null +++ b/Code/tile_2.tres @@ -0,0 +1,7 @@ +[gd_resource type="AtlasTexture" load_steps=2 format=3 uid="uid://f10p5ta4s45s"] + +[ext_resource type="Texture2D" uid="uid://os7624ctmhq3" path="res://art/robot_atlas.png" id="1_vtf8m"] + +[resource] +atlas = ExtResource("1_vtf8m") +region = Rect2(16, 24, 16, 16) diff --git a/assets/ascii.png b/Code/ui_assets/ascii.png similarity index 100% rename from assets/ascii.png rename to Code/ui_assets/ascii.png diff --git a/Code/ui_assets/ascii.png.import b/Code/ui_assets/ascii.png.import new file mode 100644 index 0000000..c86dec6 --- /dev/null +++ b/Code/ui_assets/ascii.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://b2v2bsgplmbwi" +path="res://.godot/imported/ascii.png-16a84df29da1848f019014791d122893.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://ui_assets/ascii.png" +dest_files=["res://.godot/imported/ascii.png-16a84df29da1848f019014791d122893.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/Code/ui_assets/cursor.png b/Code/ui_assets/cursor.png new file mode 100644 index 0000000..b5c1ea8 Binary files /dev/null and b/Code/ui_assets/cursor.png differ diff --git a/Code/ui_assets/cursor.png.import b/Code/ui_assets/cursor.png.import new file mode 100644 index 0000000..f68cfec --- /dev/null +++ b/Code/ui_assets/cursor.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dvxiugaqmtwo0" +path="res://.godot/imported/cursor.png-1a07189b8408a35fe62053dd79f88487.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://ui_assets/cursor.png" +dest_files=["res://.godot/imported/cursor.png-1a07189b8408a35fe62053dd79f88487.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/Code/ui_assets/ui_buttons.png b/Code/ui_assets/ui_buttons.png new file mode 100644 index 0000000..0f3f7eb Binary files /dev/null and b/Code/ui_assets/ui_buttons.png differ diff --git a/Code/ui_assets/ui_buttons.png.import b/Code/ui_assets/ui_buttons.png.import new file mode 100644 index 0000000..073eaab --- /dev/null +++ b/Code/ui_assets/ui_buttons.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cvucowitrxo2j" +path="res://.godot/imported/ui_buttons.png-9716d9766fd5f0338c7bb66226bdd1a9.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://ui_assets/ui_buttons.png" +dest_files=["res://.godot/imported/ui_buttons.png-9716d9766fd5f0338c7bb66226bdd1a9.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/Code/ui_assets/ui_buttons_settings.tres b/Code/ui_assets/ui_buttons_settings.tres new file mode 100644 index 0000000..ceae1cf --- /dev/null +++ b/Code/ui_assets/ui_buttons_settings.tres @@ -0,0 +1,7 @@ +[gd_resource type="AtlasTexture" load_steps=2 format=3 uid="uid://cgje3lmsmwll0"] + +[ext_resource type="Texture2D" uid="uid://cvucowitrxo2j" path="res://ui_assets/ui_buttons.png" id="1_jnuk0"] + +[resource] +atlas = ExtResource("1_jnuk0") +region = Rect2(130, 146, 12, 12) diff --git a/Code/ui_assets/ui_buttons_tileset.tres b/Code/ui_assets/ui_buttons_tileset.tres new file mode 100644 index 0000000..fd30dd4 --- /dev/null +++ b/Code/ui_assets/ui_buttons_tileset.tres @@ -0,0 +1,152 @@ +[gd_resource type="TileSet" load_steps=3 format=3 uid="uid://m2vlh8yan0en"] + +[ext_resource type="Texture2D" uid="uid://cvucowitrxo2j" path="res://ui_assets/ui_buttons.png" id="1_r7i2w"] + +[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_ia30e"] +texture = ExtResource("1_r7i2w") +0:0/0 = 0 +1:0/0 = 0 +2:0/0 = 0 +3:0/0 = 0 +4:0/0 = 0 +5:0/0 = 0 +6:0/0 = 0 +7:0/0 = 0 +8:0/0 = 0 +9:0/0 = 0 +10:0/0 = 0 +11:0/0 = 0 +0:1/0 = 0 +1:1/0 = 0 +2:1/0 = 0 +3:1/0 = 0 +4:1/0 = 0 +5:1/0 = 0 +6:1/0 = 0 +7:1/0 = 0 +8:1/0 = 0 +9:1/0 = 0 +10:1/0 = 0 +11:1/0 = 0 +0:2/0 = 0 +1:2/0 = 0 +2:2/0 = 0 +3:2/0 = 0 +4:2/0 = 0 +5:2/0 = 0 +6:2/0 = 0 +7:2/0 = 0 +8:2/0 = 0 +9:2/0 = 0 +10:2/0 = 0 +11:2/0 = 0 +0:3/0 = 0 +1:3/0 = 0 +2:3/0 = 0 +3:3/0 = 0 +4:3/0 = 0 +5:3/0 = 0 +6:3/0 = 0 +7:3/0 = 0 +8:3/0 = 0 +9:3/0 = 0 +10:3/0 = 0 +11:3/0 = 0 +0:4/0 = 0 +1:4/0 = 0 +2:4/0 = 0 +3:4/0 = 0 +4:4/0 = 0 +5:4/0 = 0 +6:4/0 = 0 +7:4/0 = 0 +8:4/0 = 0 +9:4/0 = 0 +10:4/0 = 0 +11:4/0 = 0 +0:5/0 = 0 +1:5/0 = 0 +2:5/0 = 0 +3:5/0 = 0 +4:5/0 = 0 +5:5/0 = 0 +6:5/0 = 0 +7:5/0 = 0 +8:5/0 = 0 +9:5/0 = 0 +10:5/0 = 0 +11:5/0 = 0 +0:6/0 = 0 +1:6/0 = 0 +2:6/0 = 0 +3:6/0 = 0 +4:6/0 = 0 +5:6/0 = 0 +6:6/0 = 0 +7:6/0 = 0 +8:6/0 = 0 +9:6/0 = 0 +10:6/0 = 0 +11:6/0 = 0 +0:7/0 = 0 +1:7/0 = 0 +2:7/0 = 0 +3:7/0 = 0 +4:7/0 = 0 +5:7/0 = 0 +6:7/0 = 0 +7:7/0 = 0 +8:7/0 = 0 +9:7/0 = 0 +10:7/0 = 0 +11:7/0 = 0 +0:8/0 = 0 +1:8/0 = 0 +2:8/0 = 0 +3:8/0 = 0 +4:8/0 = 0 +5:8/0 = 0 +6:8/0 = 0 +7:8/0 = 0 +8:8/0 = 0 +9:8/0 = 0 +10:8/0 = 0 +11:8/0 = 0 +0:9/0 = 0 +1:9/0 = 0 +2:9/0 = 0 +3:9/0 = 0 +4:9/0 = 0 +5:9/0 = 0 +7:9/0 = 0 +8:9/0 = 0 +9:9/0 = 0 +10:9/0 = 0 +11:9/0 = 0 +0:10/0 = 0 +1:10/0 = 0 +2:10/0 = 0 +3:10/0 = 0 +4:10/0 = 0 +5:10/0 = 0 +6:10/0 = 0 +7:10/0 = 0 +8:10/0 = 0 +9:10/0 = 0 +10:10/0 = 0 +11:10/0 = 0 +0:11/0 = 0 +1:11/0 = 0 +2:11/0 = 0 +3:11/0 = 0 +4:11/0 = 0 +5:11/0 = 0 +6:11/0 = 0 +7:11/0 = 0 +8:11/0 = 0 +9:11/0 = 0 +10:11/0 = 0 +11:11/0 = 0 + +[resource] +sources/0 = SubResource("TileSetAtlasSource_ia30e") diff --git a/Code/ui_audio/type1.wav b/Code/ui_audio/type1.wav new file mode 100644 index 0000000..4f9f12b Binary files /dev/null and b/Code/ui_audio/type1.wav differ diff --git a/Code/ui_audio/type1.wav.import b/Code/ui_audio/type1.wav.import new file mode 100644 index 0000000..0168849 --- /dev/null +++ b/Code/ui_audio/type1.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://ce0cwas8utfp6" +path="res://.godot/imported/type1.wav-a6e3a33778497887f6b6be4fb83d88f0.sample" + +[deps] + +source_file="res://ui_audio/type1.wav" +dest_files=["res://.godot/imported/type1.wav-a6e3a33778497887f6b6be4fb83d88f0.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=0 diff --git a/Code/ui_audio/type2.wav b/Code/ui_audio/type2.wav new file mode 100644 index 0000000..e5a1bbb Binary files /dev/null and b/Code/ui_audio/type2.wav differ diff --git a/Code/ui_audio/type2.wav.import b/Code/ui_audio/type2.wav.import new file mode 100644 index 0000000..75f7436 --- /dev/null +++ b/Code/ui_audio/type2.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://jmyg3h2r1y6m" +path="res://.godot/imported/type2.wav-ef3296893509896b0438ba0d9031ae97.sample" + +[deps] + +source_file="res://ui_audio/type2.wav" +dest_files=["res://.godot/imported/type2.wav-ef3296893509896b0438ba0d9031ae97.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=0 diff --git a/Code/ui_audio/type3.wav b/Code/ui_audio/type3.wav new file mode 100644 index 0000000..9c78d07 Binary files /dev/null and b/Code/ui_audio/type3.wav differ diff --git a/Code/ui_audio/type3.wav.import b/Code/ui_audio/type3.wav.import new file mode 100644 index 0000000..8963aa5 --- /dev/null +++ b/Code/ui_audio/type3.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://2t5i5dkqkmof" +path="res://.godot/imported/type3.wav-c942d7a6ae9fd2e47ad2549830d7046a.sample" + +[deps] + +source_file="res://ui_audio/type3.wav" +dest_files=["res://.godot/imported/type3.wav-c942d7a6ae9fd2e47ad2549830d7046a.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=0 diff --git a/Code/ui_retro/ExampleProject.unitypackage b/Code/ui_retro/ExampleProject.unitypackage new file mode 100644 index 0000000..fc79ecf Binary files /dev/null and b/Code/ui_retro/ExampleProject.unitypackage differ diff --git a/Code/ui_retro/Resizable_Corner.png b/Code/ui_retro/Resizable_Corner.png new file mode 100644 index 0000000..e0c7b5c Binary files /dev/null and b/Code/ui_retro/Resizable_Corner.png differ diff --git a/Code/ui_retro/Resizable_Corner.png.import b/Code/ui_retro/Resizable_Corner.png.import new file mode 100644 index 0000000..e8ca200 --- /dev/null +++ b/Code/ui_retro/Resizable_Corner.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bqig8ce2q56te" +path="res://.godot/imported/Resizable_Corner.png-580d3715ab949ac1bac681bfd07f28fe.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://ui_retro/Resizable_Corner.png" +dest_files=["res://.godot/imported/Resizable_Corner.png-580d3715ab949ac1bac681bfd07f28fe.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/Code/ui_retro/Window_Base.png b/Code/ui_retro/Window_Base.png new file mode 100644 index 0000000..861b9c9 Binary files /dev/null and b/Code/ui_retro/Window_Base.png differ diff --git a/Code/ui_retro/Window_Base.png.import b/Code/ui_retro/Window_Base.png.import new file mode 100644 index 0000000..54e285b --- /dev/null +++ b/Code/ui_retro/Window_Base.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://benov8ybcp86p" +path="res://.godot/imported/Window_Base.png-c095f0fa5376ebe5bc4e900af9af4b20.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://ui_retro/Window_Base.png" +dest_files=["res://.godot/imported/Window_Base.png-c095f0fa5376ebe5bc4e900af9af4b20.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/Code/ui_retro/Window_Header.png b/Code/ui_retro/Window_Header.png new file mode 100644 index 0000000..dc11394 Binary files /dev/null and b/Code/ui_retro/Window_Header.png differ diff --git a/Code/ui_retro/Window_Header.png.import b/Code/ui_retro/Window_Header.png.import new file mode 100644 index 0000000..28e8ff9 --- /dev/null +++ b/Code/ui_retro/Window_Header.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://6cducfe6vmiw" +path="res://.godot/imported/Window_Header.png-653d55457f2906b6e02fc46efa657293.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://ui_retro/Window_Header.png" +dest_files=["res://.godot/imported/Window_Header.png-653d55457f2906b6e02fc46efa657293.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/Code/ui_retro/Window_Header_Inactive.png b/Code/ui_retro/Window_Header_Inactive.png new file mode 100644 index 0000000..a1c2543 Binary files /dev/null and b/Code/ui_retro/Window_Header_Inactive.png differ diff --git a/Code/ui_retro/Window_Header_Inactive.png.import b/Code/ui_retro/Window_Header_Inactive.png.import new file mode 100644 index 0000000..830aeca --- /dev/null +++ b/Code/ui_retro/Window_Header_Inactive.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://uevtpputr6dy" +path="res://.godot/imported/Window_Header_Inactive.png-a84370cd32f27e955a64499d9f0184bb.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://ui_retro/Window_Header_Inactive.png" +dest_files=["res://.godot/imported/Window_Header_Inactive.png-a84370cd32f27e955a64499d9f0184bb.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/Code/ui_retro/Window_Header_Resizable.png b/Code/ui_retro/Window_Header_Resizable.png new file mode 100644 index 0000000..0558213 Binary files /dev/null and b/Code/ui_retro/Window_Header_Resizable.png differ diff --git a/Code/ui_retro/Window_Header_Resizable.png.import b/Code/ui_retro/Window_Header_Resizable.png.import new file mode 100644 index 0000000..5392052 --- /dev/null +++ b/Code/ui_retro/Window_Header_Resizable.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://b1m2rfrxagmj7" +path="res://.godot/imported/Window_Header_Resizable.png-730db9ed6e87f885cf8be8ff59742d1b.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://ui_retro/Window_Header_Resizable.png" +dest_files=["res://.godot/imported/Window_Header_Resizable.png-730db9ed6e87f885cf8be8ff59742d1b.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/Code/ui_retro/Window_Header_Resizable_Inactive.png b/Code/ui_retro/Window_Header_Resizable_Inactive.png new file mode 100644 index 0000000..6a49cd9 Binary files /dev/null and b/Code/ui_retro/Window_Header_Resizable_Inactive.png differ diff --git a/Code/ui_retro/Window_Header_Resizable_Inactive.png.import b/Code/ui_retro/Window_Header_Resizable_Inactive.png.import new file mode 100644 index 0000000..9f60f9f --- /dev/null +++ b/Code/ui_retro/Window_Header_Resizable_Inactive.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cc81gs0qaohr6" +path="res://.godot/imported/Window_Header_Resizable_Inactive.png-94f759b0ca5b11b9b7636858f2d3c6e7.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://ui_retro/Window_Header_Resizable_Inactive.png" +dest_files=["res://.godot/imported/Window_Header_Resizable_Inactive.png-94f759b0ca5b11b9b7636858f2d3c6e7.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/Code/ui_retro/Windows_Button.png b/Code/ui_retro/Windows_Button.png new file mode 100644 index 0000000..861b9c9 Binary files /dev/null and b/Code/ui_retro/Windows_Button.png differ diff --git a/Code/ui_retro/Windows_Button.png.import b/Code/ui_retro/Windows_Button.png.import new file mode 100644 index 0000000..31c7760 --- /dev/null +++ b/Code/ui_retro/Windows_Button.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dtg4jdqvj7kew" +path="res://.godot/imported/Windows_Button.png-0379056b2cd4d82a48567baf96d2ac99.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://ui_retro/Windows_Button.png" +dest_files=["res://.godot/imported/Windows_Button.png-0379056b2cd4d82a48567baf96d2ac99.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/Code/ui_retro/Windows_Button_Focus.png b/Code/ui_retro/Windows_Button_Focus.png new file mode 100644 index 0000000..c7f4585 Binary files /dev/null and b/Code/ui_retro/Windows_Button_Focus.png differ diff --git a/Code/ui_retro/Windows_Button_Focus.png.import b/Code/ui_retro/Windows_Button_Focus.png.import new file mode 100644 index 0000000..6af610b --- /dev/null +++ b/Code/ui_retro/Windows_Button_Focus.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dgule6oxdxagh" +path="res://.godot/imported/Windows_Button_Focus.png-8dc1c646a07ff1fe69d310fbc5157788.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://ui_retro/Windows_Button_Focus.png" +dest_files=["res://.godot/imported/Windows_Button_Focus.png-8dc1c646a07ff1fe69d310fbc5157788.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/Code/ui_retro/Windows_Button_Focus_Outlined.png b/Code/ui_retro/Windows_Button_Focus_Outlined.png new file mode 100644 index 0000000..09268ff Binary files /dev/null and b/Code/ui_retro/Windows_Button_Focus_Outlined.png differ diff --git a/Code/ui_retro/Windows_Button_Focus_Outlined.png.import b/Code/ui_retro/Windows_Button_Focus_Outlined.png.import new file mode 100644 index 0000000..40d122e --- /dev/null +++ b/Code/ui_retro/Windows_Button_Focus_Outlined.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dwxkedrce74k8" +path="res://.godot/imported/Windows_Button_Focus_Outlined.png-63bed05b14cb249cbf8da8803845bcae.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://ui_retro/Windows_Button_Focus_Outlined.png" +dest_files=["res://.godot/imported/Windows_Button_Focus_Outlined.png-63bed05b14cb249cbf8da8803845bcae.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/Code/ui_retro/Windows_Button_Inactive.png b/Code/ui_retro/Windows_Button_Inactive.png new file mode 100644 index 0000000..98b5900 Binary files /dev/null and b/Code/ui_retro/Windows_Button_Inactive.png differ diff --git a/Code/ui_retro/Windows_Button_Inactive.png.import b/Code/ui_retro/Windows_Button_Inactive.png.import new file mode 100644 index 0000000..2ccc58a --- /dev/null +++ b/Code/ui_retro/Windows_Button_Inactive.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cj7imn1h53cyq" +path="res://.godot/imported/Windows_Button_Inactive.png-bd22ef70de3d14625b2a80f5febcc0be.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://ui_retro/Windows_Button_Inactive.png" +dest_files=["res://.godot/imported/Windows_Button_Inactive.png-bd22ef70de3d14625b2a80f5febcc0be.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/Code/ui_retro/Windows_Button_Pressed.png b/Code/ui_retro/Windows_Button_Pressed.png new file mode 100644 index 0000000..f7755bc Binary files /dev/null and b/Code/ui_retro/Windows_Button_Pressed.png differ diff --git a/Code/ui_retro/Windows_Button_Pressed.png.import b/Code/ui_retro/Windows_Button_Pressed.png.import new file mode 100644 index 0000000..1d5dc5d --- /dev/null +++ b/Code/ui_retro/Windows_Button_Pressed.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://drkdd0sttb2ws" +path="res://.godot/imported/Windows_Button_Pressed.png-84fdd7107928532e0828d658df93daac.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://ui_retro/Windows_Button_Pressed.png" +dest_files=["res://.godot/imported/Windows_Button_Pressed.png-84fdd7107928532e0828d658df93daac.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/Code/ui_retro/Windows_Button_Pressed_Outlined.png b/Code/ui_retro/Windows_Button_Pressed_Outlined.png new file mode 100644 index 0000000..8be8fec Binary files /dev/null and b/Code/ui_retro/Windows_Button_Pressed_Outlined.png differ diff --git a/Code/ui_retro/Windows_Button_Pressed_Outlined.png.import b/Code/ui_retro/Windows_Button_Pressed_Outlined.png.import new file mode 100644 index 0000000..9716177 --- /dev/null +++ b/Code/ui_retro/Windows_Button_Pressed_Outlined.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://ck0ikielpdc8r" +path="res://.godot/imported/Windows_Button_Pressed_Outlined.png-c5763ed428756cd42f88d23abc39e73c.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://ui_retro/Windows_Button_Pressed_Outlined.png" +dest_files=["res://.godot/imported/Windows_Button_Pressed_Outlined.png-c5763ed428756cd42f88d23abc39e73c.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/Code/ui_retro/Windows_Divider_Line.png b/Code/ui_retro/Windows_Divider_Line.png new file mode 100644 index 0000000..6c3f06e Binary files /dev/null and b/Code/ui_retro/Windows_Divider_Line.png differ diff --git a/Code/ui_retro/Windows_Divider_Line.png.import b/Code/ui_retro/Windows_Divider_Line.png.import new file mode 100644 index 0000000..060efd5 --- /dev/null +++ b/Code/ui_retro/Windows_Divider_Line.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://0pyj2aam78pk" +path="res://.godot/imported/Windows_Divider_Line.png-6e610b39ee29146aed260b2de8afb26b.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://ui_retro/Windows_Divider_Line.png" +dest_files=["res://.godot/imported/Windows_Divider_Line.png-6e610b39ee29146aed260b2de8afb26b.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/Code/ui_retro/Windows_Example_ItchPic.png b/Code/ui_retro/Windows_Example_ItchPic.png new file mode 100644 index 0000000..a19f0c9 Binary files /dev/null and b/Code/ui_retro/Windows_Example_ItchPic.png differ diff --git a/Code/ui_retro/Windows_Example_ItchPic.png.import b/Code/ui_retro/Windows_Example_ItchPic.png.import new file mode 100644 index 0000000..5c9f306 --- /dev/null +++ b/Code/ui_retro/Windows_Example_ItchPic.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cwc5ook1bowsc" +path="res://.godot/imported/Windows_Example_ItchPic.png-79133a625f5ccf3c8f650c55468edc8e.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://ui_retro/Windows_Example_ItchPic.png" +dest_files=["res://.godot/imported/Windows_Example_ItchPic.png-79133a625f5ccf3c8f650c55468edc8e.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/Code/ui_retro/Windows_Example_Main.png b/Code/ui_retro/Windows_Example_Main.png new file mode 100644 index 0000000..3063f39 Binary files /dev/null and b/Code/ui_retro/Windows_Example_Main.png differ diff --git a/Code/ui_retro/Windows_Example_Main.png.import b/Code/ui_retro/Windows_Example_Main.png.import new file mode 100644 index 0000000..2af688b --- /dev/null +++ b/Code/ui_retro/Windows_Example_Main.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://d0f4ewweqm05w" +path="res://.godot/imported/Windows_Example_Main.png-55972547254e76c92ef6c16e35054012.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://ui_retro/Windows_Example_Main.png" +dest_files=["res://.godot/imported/Windows_Example_Main.png-55972547254e76c92ef6c16e35054012.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/Code/ui_retro/Windows_Example_Popup.png b/Code/ui_retro/Windows_Example_Popup.png new file mode 100644 index 0000000..9356994 Binary files /dev/null and b/Code/ui_retro/Windows_Example_Popup.png differ diff --git a/Code/ui_retro/Windows_Example_Popup.png.import b/Code/ui_retro/Windows_Example_Popup.png.import new file mode 100644 index 0000000..b1d2df4 --- /dev/null +++ b/Code/ui_retro/Windows_Example_Popup.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://hb7rplcqp073" +path="res://.godot/imported/Windows_Example_Popup.png-2f1cd422027f8982e7adc204951d45e5.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://ui_retro/Windows_Example_Popup.png" +dest_files=["res://.godot/imported/Windows_Example_Popup.png-2f1cd422027f8982e7adc204951d45e5.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/Code/ui_retro/Windows_Icons.png b/Code/ui_retro/Windows_Icons.png new file mode 100644 index 0000000..567ff44 Binary files /dev/null and b/Code/ui_retro/Windows_Icons.png differ diff --git a/Code/ui_retro/Windows_Icons.png.import b/Code/ui_retro/Windows_Icons.png.import new file mode 100644 index 0000000..3069649 --- /dev/null +++ b/Code/ui_retro/Windows_Icons.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dxqnna31eb3g8" +path="res://.godot/imported/Windows_Icons.png-f642ac3a3ab126b892ef02ea4835cb26.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://ui_retro/Windows_Icons.png" +dest_files=["res://.godot/imported/Windows_Icons.png-f642ac3a3ab126b892ef02ea4835cb26.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/Code/ui_retro/Windows_Inner_Frame.png b/Code/ui_retro/Windows_Inner_Frame.png new file mode 100644 index 0000000..0214401 Binary files /dev/null and b/Code/ui_retro/Windows_Inner_Frame.png differ diff --git a/Code/ui_retro/Windows_Inner_Frame.png.import b/Code/ui_retro/Windows_Inner_Frame.png.import new file mode 100644 index 0000000..f105e55 --- /dev/null +++ b/Code/ui_retro/Windows_Inner_Frame.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://1fmva65njpsv" +path="res://.godot/imported/Windows_Inner_Frame.png-6e2b9cbd55f085078489e19ac85a7ce4.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://ui_retro/Windows_Inner_Frame.png" +dest_files=["res://.godot/imported/Windows_Inner_Frame.png-6e2b9cbd55f085078489e19ac85a7ce4.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/Code/ui_retro/Windows_Inner_Frame_Inverted.png b/Code/ui_retro/Windows_Inner_Frame_Inverted.png new file mode 100644 index 0000000..841c316 Binary files /dev/null and b/Code/ui_retro/Windows_Inner_Frame_Inverted.png differ diff --git a/Code/ui_retro/Windows_Inner_Frame_Inverted.png.import b/Code/ui_retro/Windows_Inner_Frame_Inverted.png.import new file mode 100644 index 0000000..9968781 --- /dev/null +++ b/Code/ui_retro/Windows_Inner_Frame_Inverted.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://33gt5kjpy7dt" +path="res://.godot/imported/Windows_Inner_Frame_Inverted.png-12891e8ffc30f5624a63375d1688b2c9.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://ui_retro/Windows_Inner_Frame_Inverted.png" +dest_files=["res://.godot/imported/Windows_Inner_Frame_Inverted.png-12891e8ffc30f5624a63375d1688b2c9.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/Code/ui_retro/Windows_Progress_Fill.png b/Code/ui_retro/Windows_Progress_Fill.png new file mode 100644 index 0000000..87aaf63 Binary files /dev/null and b/Code/ui_retro/Windows_Progress_Fill.png differ diff --git a/Code/ui_retro/Windows_Progress_Fill.png.import b/Code/ui_retro/Windows_Progress_Fill.png.import new file mode 100644 index 0000000..96357fd --- /dev/null +++ b/Code/ui_retro/Windows_Progress_Fill.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bkr54xeveigb0" +path="res://.godot/imported/Windows_Progress_Fill.png-fad3d257a7ce760c32df4feb08a7001b.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://ui_retro/Windows_Progress_Fill.png" +dest_files=["res://.godot/imported/Windows_Progress_Fill.png-fad3d257a7ce760c32df4feb08a7001b.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/Code/ui_retro/Windows_Ratio.png b/Code/ui_retro/Windows_Ratio.png new file mode 100644 index 0000000..dc5a49a Binary files /dev/null and b/Code/ui_retro/Windows_Ratio.png differ diff --git a/Code/ui_retro/Windows_Ratio.png.import b/Code/ui_retro/Windows_Ratio.png.import new file mode 100644 index 0000000..1381526 --- /dev/null +++ b/Code/ui_retro/Windows_Ratio.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cb1ub6n2mu6iq" +path="res://.godot/imported/Windows_Ratio.png-a0237363a4fb9c0c5085e0947c0b7c4e.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://ui_retro/Windows_Ratio.png" +dest_files=["res://.godot/imported/Windows_Ratio.png-a0237363a4fb9c0c5085e0947c0b7c4e.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/Code/ui_retro/Windows_Ratio_Inactive.png b/Code/ui_retro/Windows_Ratio_Inactive.png new file mode 100644 index 0000000..c71a73a Binary files /dev/null and b/Code/ui_retro/Windows_Ratio_Inactive.png differ diff --git a/Code/ui_retro/Windows_Ratio_Inactive.png.import b/Code/ui_retro/Windows_Ratio_Inactive.png.import new file mode 100644 index 0000000..a77cadf --- /dev/null +++ b/Code/ui_retro/Windows_Ratio_Inactive.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cu3m12mvwj24w" +path="res://.godot/imported/Windows_Ratio_Inactive.png-9ccb685391f6f3d5828d699f8b596ce3.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://ui_retro/Windows_Ratio_Inactive.png" +dest_files=["res://.godot/imported/Windows_Ratio_Inactive.png-9ccb685391f6f3d5828d699f8b596ce3.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/Code/ui_retro/Windows_Ratio_Selected.png b/Code/ui_retro/Windows_Ratio_Selected.png new file mode 100644 index 0000000..d6681e5 Binary files /dev/null and b/Code/ui_retro/Windows_Ratio_Selected.png differ diff --git a/Code/ui_retro/Windows_Ratio_Selected.png.import b/Code/ui_retro/Windows_Ratio_Selected.png.import new file mode 100644 index 0000000..5ddd226 --- /dev/null +++ b/Code/ui_retro/Windows_Ratio_Selected.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://c2ba0vjdxn4ls" +path="res://.godot/imported/Windows_Ratio_Selected.png-7bb356316501b799540c2abefa94867e.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://ui_retro/Windows_Ratio_Selected.png" +dest_files=["res://.godot/imported/Windows_Ratio_Selected.png-7bb356316501b799540c2abefa94867e.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/Code/ui_retro/Windows_SideBar_Underside.png b/Code/ui_retro/Windows_SideBar_Underside.png new file mode 100644 index 0000000..aa54fd6 Binary files /dev/null and b/Code/ui_retro/Windows_SideBar_Underside.png differ diff --git a/Code/ui_retro/Windows_SideBar_Underside.png.import b/Code/ui_retro/Windows_SideBar_Underside.png.import new file mode 100644 index 0000000..67d52b8 --- /dev/null +++ b/Code/ui_retro/Windows_SideBar_Underside.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bjfjksnny1gmf" +path="res://.godot/imported/Windows_SideBar_Underside.png-6e38620987c082f087883b82a59942b0.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://ui_retro/Windows_SideBar_Underside.png" +dest_files=["res://.godot/imported/Windows_SideBar_Underside.png-6e38620987c082f087883b82a59942b0.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/Code/ui_retro/Windows_Slider_Background.png b/Code/ui_retro/Windows_Slider_Background.png new file mode 100644 index 0000000..2183e7b Binary files /dev/null and b/Code/ui_retro/Windows_Slider_Background.png differ diff --git a/Code/ui_retro/Windows_Slider_Background.png.import b/Code/ui_retro/Windows_Slider_Background.png.import new file mode 100644 index 0000000..e865f5d --- /dev/null +++ b/Code/ui_retro/Windows_Slider_Background.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dkh58vjn7nxut" +path="res://.godot/imported/Windows_Slider_Background.png-6bc9e4f4fe4b226179a51d7bad58e008.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://ui_retro/Windows_Slider_Background.png" +dest_files=["res://.godot/imported/Windows_Slider_Background.png-6bc9e4f4fe4b226179a51d7bad58e008.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/Code/ui_retro/Windows_Slider_Handle.png b/Code/ui_retro/Windows_Slider_Handle.png new file mode 100644 index 0000000..b8294ce Binary files /dev/null and b/Code/ui_retro/Windows_Slider_Handle.png differ diff --git a/Code/ui_retro/Windows_Slider_Handle.png.import b/Code/ui_retro/Windows_Slider_Handle.png.import new file mode 100644 index 0000000..bd6e486 --- /dev/null +++ b/Code/ui_retro/Windows_Slider_Handle.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dsbc6erw2voqw" +path="res://.godot/imported/Windows_Slider_Handle.png-5282935b162c67bdd36a2d5ae6d345df.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://ui_retro/Windows_Slider_Handle.png" +dest_files=["res://.godot/imported/Windows_Slider_Handle.png-5282935b162c67bdd36a2d5ae6d345df.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/Code/ui_retro/Windows_Toggle_Active.png b/Code/ui_retro/Windows_Toggle_Active.png new file mode 100644 index 0000000..6e79f2c Binary files /dev/null and b/Code/ui_retro/Windows_Toggle_Active.png differ diff --git a/Code/ui_retro/Windows_Toggle_Active.png.import b/Code/ui_retro/Windows_Toggle_Active.png.import new file mode 100644 index 0000000..80dcf3f --- /dev/null +++ b/Code/ui_retro/Windows_Toggle_Active.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bsj7sxcl3mua0" +path="res://.godot/imported/Windows_Toggle_Active.png-b063795a5142014f192c3a1c58af1d67.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://ui_retro/Windows_Toggle_Active.png" +dest_files=["res://.godot/imported/Windows_Toggle_Active.png-b063795a5142014f192c3a1c58af1d67.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/Code/ui_retro/Windows_Toggle_Inactive.png b/Code/ui_retro/Windows_Toggle_Inactive.png new file mode 100644 index 0000000..30f149d Binary files /dev/null and b/Code/ui_retro/Windows_Toggle_Inactive.png differ diff --git a/Code/ui_retro/Windows_Toggle_Inactive.png.import b/Code/ui_retro/Windows_Toggle_Inactive.png.import new file mode 100644 index 0000000..40d2ee1 --- /dev/null +++ b/Code/ui_retro/Windows_Toggle_Inactive.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://pbnkqyema3n8" +path="res://.godot/imported/Windows_Toggle_Inactive.png-c740ec91f9f4314b4b8cba3f02acf774.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://ui_retro/Windows_Toggle_Inactive.png" +dest_files=["res://.godot/imported/Windows_Toggle_Inactive.png-c740ec91f9f4314b4b8cba3f02acf774.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/Code/ui_retro/Windows_Toggle_Selected.png b/Code/ui_retro/Windows_Toggle_Selected.png new file mode 100644 index 0000000..7ec93f3 Binary files /dev/null and b/Code/ui_retro/Windows_Toggle_Selected.png differ diff --git a/Code/ui_retro/Windows_Toggle_Selected.png.import b/Code/ui_retro/Windows_Toggle_Selected.png.import new file mode 100644 index 0000000..8e493f9 --- /dev/null +++ b/Code/ui_retro/Windows_Toggle_Selected.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cecllhbciihyp" +path="res://.godot/imported/Windows_Toggle_Selected.png-4d6a7baaab9c6650f16a5a7c57aadea0.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://ui_retro/Windows_Toggle_Selected.png" +dest_files=["res://.godot/imported/Windows_Toggle_Selected.png-4d6a7baaab9c6650f16a5a7c57aadea0.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/Code/ui_retro/asset_source.url b/Code/ui_retro/asset_source.url new file mode 100644 index 0000000..da33dc3 --- /dev/null +++ b/Code/ui_retro/asset_source.url @@ -0,0 +1,5 @@ +[{000214A0-0000-0000-C000-000000000046}] +Prop3=19,11 +[InternetShortcut] +IDList= +URL=https://comp3interactive.itch.io/retro-windows-gui diff --git a/Code/ui_scenes/CRTFilter.tscn b/Code/ui_scenes/CRTFilter.tscn new file mode 100644 index 0000000..ccc8f23 --- /dev/null +++ b/Code/ui_scenes/CRTFilter.tscn @@ -0,0 +1,31 @@ +[gd_scene load_steps=6 format=3 uid="uid://by03ax1tx0l0j"] + +[ext_resource type="Script" path="res://ui_scripts/CanvasLayer.gd" id="1_i5rqd"] +[ext_resource type="Shader" path="res://control.gdshader" id="2_4fhqf"] +[ext_resource type="Texture2D" uid="uid://dvxiugaqmtwo0" path="res://ui_assets/cursor.png" id="2_u1tvd"] +[ext_resource type="Script" path="res://ui_scripts/Cursor.gd" id="3_vi2qm"] + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_eaicp"] +shader = ExtResource("2_4fhqf") + +[node name="CRTFilter" type="CanvasLayer"] +script = ExtResource("1_i5rqd") + +[node name="Cursor" type="Sprite2D" parent="."] +scale = Vector2(1.5, 1.5) +texture = ExtResource("2_u1tvd") +centered = false +script = ExtResource("3_vi2qm") + +[node name="ColorRect" type="ColorRect" parent="."] +z_as_relative = false +texture_filter = 1 +material = SubResource("ShaderMaterial_eaicp") +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +size_flags_horizontal = 4 +size_flags_vertical = 3 +mouse_filter = 2 diff --git a/Code/ui_scenes/Credits.tscn b/Code/ui_scenes/Credits.tscn new file mode 100644 index 0000000..5bf4ea0 --- /dev/null +++ b/Code/ui_scenes/Credits.tscn @@ -0,0 +1,74 @@ +[gd_scene load_steps=2 format=3 uid="uid://cwffcpk8rde5d"] + +[ext_resource type="Script" path="res://ui_scripts/RemoveSceneButton.gd" id="1_123ay"] + +[node name="CreditsPanel" type="Panel"] +z_index = 50 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="MarginContainer" type="MarginContainer" parent="."] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +theme_override_constants/margin_left = 80 +theme_override_constants/margin_top = 120 +theme_override_constants/margin_right = 80 +theme_override_constants/margin_bottom = 120 + +[node name="ScrollContainer" type="ScrollContainer" parent="MarginContainer"] +layout_mode = 2 +horizontal_scroll_mode = 0 + +[node name="Label" type="Label" parent="MarginContainer/ScrollContainer"] +custom_minimum_size = Vector2(800, 600) +layout_mode = 2 +size_flags_horizontal = 3 +theme_override_font_sizes/font_size = 36 +text = "CREDITS + +Interpreter Development +Wiktor Kubski + +Interpreter Integration & UI Design +Tomasz Wrobel + +Game & Level Design +Mikolaj Lebioda + +Used Assets + + Top Sci-Fi CGA Tileset by Jerom + Simple Character Base by zaphgames + UI Buttons by Kicked-inTeeth - https://kicked-in-teeth.itch.io/button-ui + Retro gui by comp3interactive - https://comp3interactive.itch.io/retro-windows-gui + +Special Thanks +To the visionary works of Isaac Asimov, whose exploration of robotics and the future continues to inspire. + +Thanks for playing!" +horizontal_alignment = 1 +vertical_alignment = 1 +autowrap_mode = 2 + +[node name="CreditsHideButton" type="Button" parent="."] +layout_mode = 1 +anchors_preset = 5 +anchor_left = 0.5 +anchor_right = 0.5 +offset_left = -36.0 +offset_top = 60.0 +offset_right = 36.0 +offset_bottom = 97.03 +grow_horizontal = 2 +size_flags_horizontal = 8 +size_flags_vertical = 0 +theme_override_font_sizes/font_size = 36 +text = "Hide" +script = ExtResource("1_123ay") diff --git a/Code/ui_scenes/DragableCodeEditor.tscn b/Code/ui_scenes/DragableCodeEditor.tscn new file mode 100644 index 0000000..044c8d4 --- /dev/null +++ b/Code/ui_scenes/DragableCodeEditor.tscn @@ -0,0 +1,199 @@ +[gd_scene load_steps=18 format=3 uid="uid://3tvr6ayegv2x"] + +[ext_resource type="Script" path="res://ui_scripts/DragableCharacter.gd" id="1_exsob"] +[ext_resource type="Theme" uid="uid://b5uuv0ae6k3gt" path="res://default.tres" id="2_cdpth"] +[ext_resource type="Texture2D" uid="uid://dxqnna31eb3g8" path="res://ui_retro/Windows_Icons.png" id="3_ntfuj"] +[ext_resource type="Script" path="res://ui_scripts/RemoveSceneButton.gd" id="4_d7wum"] +[ext_resource type="FontFile" uid="uid://crxxdiidbhsib" path="res://monogram.ttf" id="5_cjyos"] +[ext_resource type="Texture2D" uid="uid://bgvaug42elsy4" path="res://icon.svg" id="6_6ri5e"] +[ext_resource type="Script" path="res://ui_scripts/CodeEdit.gd" id="7_oqwrj"] +[ext_resource type="AudioStream" uid="uid://ce0cwas8utfp6" path="res://ui_audio/type1.wav" id="8_r2e88"] +[ext_resource type="AudioStream" uid="uid://jmyg3h2r1y6m" path="res://ui_audio/type2.wav" id="9_j2r47"] +[ext_resource type="Texture2D" uid="uid://bqig8ce2q56te" path="res://ui_retro/Resizable_Corner.png" id="10_2qn5e"] +[ext_resource type="Script" path="res://ui_scripts/RunGame.gd" id="10_jquk4"] +[ext_resource type="Script" path="res://ui_scripts/ResizeCorner.gd" id="11_lkgb3"] + +[sub_resource type="AtlasTexture" id="AtlasTexture_n7gyf"] +atlas = ExtResource("3_ntfuj") +region = Rect2(96, 0, 16, 16) + +[sub_resource type="AtlasTexture" id="AtlasTexture_i8gex"] +atlas = ExtResource("3_ntfuj") +region = Rect2(48, 0, 16, 16) + +[sub_resource type="AudioStreamRandomizer" id="AudioStreamRandomizer_38c1w"] +random_volume_offset_db = 1.3 +streams_count = 2 +stream_0/stream = ExtResource("8_r2e88") +stream_0/weight = 1.0 +stream_1/stream = ExtResource("9_j2r47") +stream_1/weight = 1.0 + +[sub_resource type="InputEventAction" id="InputEventAction_u48p0"] +action = &"code_step" + +[sub_resource type="Shortcut" id="Shortcut_g6ykv"] +events = [SubResource("InputEventAction_u48p0")] + +[node name="DraggableCodeEditor" type="Node2D"] +z_index = 2 +script = ExtResource("1_exsob") +control_component_path = NodePath("ControlRoot") + +[node name="ControlRoot" type="Control" parent="."] +custom_minimum_size = Vector2(270, 270) +layout_mode = 3 +anchors_preset = 0 +offset_right = 270.0 +offset_bottom = 270.0 + +[node name="DraggablePanel" type="Panel" parent="ControlRoot"] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +theme = ExtResource("2_cdpth") + +[node name="MarginContainer" type="MarginContainer" parent="ControlRoot/DraggablePanel"] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +theme = ExtResource("2_cdpth") +metadata/_edit_lock_ = true + +[node name="VBoxContainer" type="VBoxContainer" parent="ControlRoot/DraggablePanel/MarginContainer"] +layout_mode = 2 +metadata/_edit_lock_ = true + +[node name="ToolBar" type="HBoxContainer" parent="ControlRoot/DraggablePanel/MarginContainer/VBoxContainer"] +layout_direction = 2 +layout_mode = 2 +size_flags_vertical = 4 + +[node name="TitleEdit" type="LineEdit" parent="ControlRoot/DraggablePanel/MarginContainer/VBoxContainer/ToolBar"] +custom_minimum_size = Vector2(200, 0) +layout_mode = 2 +size_flags_horizontal = 2 +size_flags_vertical = 4 +theme = ExtResource("2_cdpth") +theme_override_colors/font_color = Color(0, 0, 0, 1) +theme_override_colors/font_selected_color = Color(0, 0, 0, 1) +theme_override_colors/font_uneditable_color = Color(0, 0, 0, 1) +theme_override_colors/font_placeholder_color = Color(0, 0, 0, 1) +theme_override_colors/font_outline_color = Color(0, 0, 0, 1) +theme_override_colors/caret_color = Color(0, 0, 0, 1) +theme_override_colors/selection_color = Color(0, 0, 0, 1) +theme_override_colors/clear_button_color = Color(0, 0, 0, 1) +theme_override_colors/clear_button_color_pressed = Color(0, 0, 0, 1) +theme_override_font_sizes/font_size = 34 +text = "Title" +max_length = 14 +expand_to_text_length = true + +[node name="HideButton" type="Button" parent="ControlRoot/DraggablePanel/MarginContainer/VBoxContainer/ToolBar"] +visible = false +layout_mode = 2 +size_flags_horizontal = 4 +size_flags_vertical = 0 +icon = SubResource("AtlasTexture_n7gyf") + +[node name="CloseButton" type="Button" parent="ControlRoot/DraggablePanel/MarginContainer/VBoxContainer/ToolBar"] +layout_mode = 2 +size_flags_horizontal = 8 +size_flags_vertical = 0 +disabled = true +icon = SubResource("AtlasTexture_i8gex") +script = ExtResource("4_d7wum") + +[node name="MainCodeEditor" type="CodeEdit" parent="ControlRoot/DraggablePanel/MarginContainer/VBoxContainer"] +unique_name_in_owner = true +layout_mode = 2 +size_flags_vertical = 3 +theme = ExtResource("2_cdpth") +theme_override_colors/executing_line_color = Color(1, 1, 1, 1) +theme_override_constants/line_spacing = 0 +theme_override_fonts/font = ExtResource("5_cjyos") +theme_override_font_sizes/font_size = 32 +theme_override_icons/bookmark = ExtResource("6_6ri5e") +text = "START + moveWest(); +END." +context_menu_enabled = false +minimap_width = 40 +caret_draw_when_editable_disabled = true +gutters_draw_executing_lines = true +gutters_draw_line_numbers = true +gutters_zero_pad_line_numbers = true +script = ExtResource("7_oqwrj") +metadata/_edit_lock_ = true + +[node name="typing" type="AudioStreamPlayer" parent="ControlRoot/DraggablePanel/MarginContainer/VBoxContainer/MainCodeEditor"] +stream = SubResource("AudioStreamRandomizer_38c1w") +volume_db = -20.0 +max_polyphony = 2 + +[node name="Footer" type="HBoxContainer" parent="ControlRoot/DraggablePanel/MarginContainer/VBoxContainer"] +layout_mode = 2 +metadata/_edit_lock_ = true + +[node name="ButtonRun" type="Button" parent="ControlRoot/DraggablePanel/MarginContainer/VBoxContainer/Footer"] +custom_minimum_size = Vector2(40, 0) +layout_mode = 2 +theme = ExtResource("2_cdpth") +text = " Run >> " +script = ExtResource("10_jquk4") +metadata/_edit_lock_ = true + +[node name="ButtonReset" type="Button" parent="ControlRoot/DraggablePanel/MarginContainer/VBoxContainer/Footer"] +custom_minimum_size = Vector2(40, 0) +layout_mode = 2 +theme = ExtResource("2_cdpth") +shortcut = SubResource("Shortcut_g6ykv") +text = " Reset <- " + +[node name="ButtonStop" type="Button" parent="ControlRoot/DraggablePanel/MarginContainer/VBoxContainer/Footer"] +visible = false +custom_minimum_size = Vector2(40, 0) +layout_mode = 2 +theme = ExtResource("2_cdpth") +disabled = true +text = "#" +icon_alignment = 1 +expand_icon = true +metadata/_edit_lock_ = true + +[node name="ResizeCorner" type="TextureRect" parent="ControlRoot/DraggablePanel"] +custom_minimum_size = Vector2(35, 35) +layout_mode = 1 +anchors_preset = 3 +anchor_left = 1.0 +anchor_top = 1.0 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_left = -25.0 +offset_top = -25.0 +grow_horizontal = 0 +grow_vertical = 0 +size_flags_horizontal = 10 +size_flags_vertical = 8 +mouse_filter = 0 +mouse_default_cursor_shape = 12 +texture = ExtResource("10_2qn5e") +expand_mode = 1 +script = ExtResource("11_lkgb3") +resized_component_path = NodePath("../..") + +[connection signal="mouse_entered" from="ControlRoot/DraggablePanel" to="." method="mouse_entered"] +[connection signal="mouse_exited" from="ControlRoot/DraggablePanel" to="." method="mouse_exited"] +[connection signal="caret_changed" from="ControlRoot/DraggablePanel/MarginContainer/VBoxContainer/MainCodeEditor" to="ControlRoot/DraggablePanel/MarginContainer/VBoxContainer/MainCodeEditor" method="_on_caret_changed"] +[connection signal="gui_input" from="ControlRoot/DraggablePanel/MarginContainer/VBoxContainer/MainCodeEditor" to="ControlRoot/DraggablePanel/MarginContainer/VBoxContainer/MainCodeEditor" method="_on_gui_input"] +[connection signal="text_changed" from="ControlRoot/DraggablePanel/MarginContainer/VBoxContainer/MainCodeEditor" to="ControlRoot/DraggablePanel/MarginContainer/VBoxContainer/MainCodeEditor" method="_on_text_changed"] +[connection signal="pressed" from="ControlRoot/DraggablePanel/MarginContainer/VBoxContainer/Footer/ButtonRun" to="ControlRoot/DraggablePanel/MarginContainer/VBoxContainer/Footer/ButtonRun" method="_on_pressed"] +[connection signal="pressed" from="ControlRoot/DraggablePanel/MarginContainer/VBoxContainer/Footer/ButtonReset" to="ControlRoot/DraggablePanel/MarginContainer/VBoxContainer/Footer/ButtonRun" method="_on_button_reset_pressed"] +[connection signal="mouse_entered" from="ControlRoot/DraggablePanel/ResizeCorner" to="ControlRoot/DraggablePanel/ResizeCorner" method="mouse_entered"] +[connection signal="mouse_exited" from="ControlRoot/DraggablePanel/ResizeCorner" to="ControlRoot/DraggablePanel/ResizeCorner" method="mouse_exited"] diff --git a/Code/ui_scenes/Game.tscn b/Code/ui_scenes/Game.tscn new file mode 100644 index 0000000..b08e9fd --- /dev/null +++ b/Code/ui_scenes/Game.tscn @@ -0,0 +1,15 @@ +[gd_scene load_steps=2 format=3 uid="uid://c880k2ej0wqfh"] + +[ext_resource type="PackedScene" uid="uid://dgm4e3dj1l320" path="res://levels/level_0.tscn" id="1_fy4r7"] + +[node name="Game" type="Node2D"] +scale = Vector2(2, 2) + +[node name="Level" type="Control" parent="."] +layout_mode = 3 +anchors_preset = 0 +offset_right = 40.0 +offset_bottom = 40.0 + +[node name="level_0" parent="Level" instance=ExtResource("1_fy4r7")] +position = Vector2(20, -80) diff --git a/Code/ui_scenes/Interfejs.tscn b/Code/ui_scenes/Interfejs.tscn new file mode 100644 index 0000000..b82a5a2 --- /dev/null +++ b/Code/ui_scenes/Interfejs.tscn @@ -0,0 +1,9 @@ +[gd_scene format=3 uid="uid://b0b8g3pr6tnpo"] + +[node name="Interfejs" type="Control"] +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 diff --git a/Code/ui_scenes/Main.tscn b/Code/ui_scenes/Main.tscn new file mode 100644 index 0000000..b7bcc67 --- /dev/null +++ b/Code/ui_scenes/Main.tscn @@ -0,0 +1,121 @@ +[gd_scene load_steps=11 format=3 uid="uid://cj2sexcpt1q4q"] + +[ext_resource type="PackedScene" uid="uid://dgm4e3dj1l320" path="res://levels/level_0.tscn" id="1_4kjc0"] +[ext_resource type="PackedScene" uid="uid://3tvr6ayegv2x" path="res://ui_scenes/DragableCodeEditor.tscn" id="2_muupc"] +[ext_resource type="PackedScene" uid="uid://byk6y86f2duot" path="res://ui_scenes/Popup.tscn" id="3_4n7vu"] +[ext_resource type="Theme" uid="uid://b5uuv0ae6k3gt" path="res://default.tres" id="3_piwo1"] +[ext_resource type="Texture2D" uid="uid://cgje3lmsmwll0" path="res://ui_assets/ui_buttons_settings.tres" id="4_b1mge"] +[ext_resource type="PackedScene" uid="uid://ccsq3p8k80rn0" path="res://ui_scenes/PopupLevel.tscn" id="4_gast1"] +[ext_resource type="PackedScene" uid="uid://bys5clq31myhl" path="res://ui_scenes/PopupWin.tscn" id="5_4jscu"] +[ext_resource type="Script" path="res://ui_scripts/SettingsOverlayButton.gd" id="5_a14h4"] +[ext_resource type="PackedScene" uid="uid://c5bldtksu82ii" path="res://ui_scenes/PopupText.tscn" id="5_ut4c2"] +[ext_resource type="PackedScene" uid="uid://by03ax1tx0l0j" path="res://ui_scenes/CRTFilter.tscn" id="6_8clgr"] + +[node name="Root" type="Node"] + +[node name="CanvasLayer" type="CanvasLayer" parent="."] +layer = -2 + +[node name="Levels" type="CenterContainer" parent="CanvasLayer" groups=["levels"]] +unique_name_in_owner = true +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +grow_horizontal = 2 +grow_vertical = 2 +size_flags_horizontal = 6 +size_flags_vertical = 4 + +[node name="level_0" parent="CanvasLayer/Levels" instance=ExtResource("1_4kjc0")] +position = Vector2(-122, -234) + +[node name="Windows" type="Node" parent="CanvasLayer"] + +[node name="Control" parent="CanvasLayer/Windows" instance=ExtResource("2_muupc")] +position = Vector2(280, 178) + +[node name="Popup" parent="CanvasLayer" instance=ExtResource("3_4n7vu")] +visible = false +z_index = 8 +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="PopupLevel" parent="CanvasLayer" instance=ExtResource("4_gast1")] +visible = false +z_index = 9 +anchors_preset = -1 +anchor_left = 0.5 +anchor_right = 0.5 +anchor_bottom = 1.0 +offset_top = 150.0 +offset_bottom = -550.0 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="IntroPopup" parent="CanvasLayer" instance=ExtResource("5_ut4c2")] +visible = false +z_index = 15 +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="WinPopup" parent="CanvasLayer" groups=["win_popup"] instance=ExtResource("5_4jscu")] +visible = false +z_index = 30 +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +offset_top = -329.0 +offset_bottom = 299.0 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="ControlUI" type="Control" parent="CanvasLayer"] +z_index = 12 +z_as_relative = false +y_sort_enabled = true +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +mouse_filter = 2 + +[node name="SettingsOverlayButton" type="Button" parent="CanvasLayer/ControlUI"] +layout_mode = 1 +anchors_preset = 1 +anchor_left = 1.0 +anchor_right = 1.0 +offset_left = -152.0 +offset_top = 96.0 +offset_right = -96.0 +offset_bottom = 152.0 +grow_horizontal = 0 +theme = ExtResource("3_piwo1") +icon = ExtResource("4_b1mge") +icon_alignment = 1 +expand_icon = true +script = ExtResource("5_a14h4") + +[node name="crt_filter" parent="." instance=ExtResource("6_8clgr")] +layer = -1 + +[connection signal="pressed" from="CanvasLayer/PopupLevel/DraggablePanel/MarginContainer/VBoxContainer/Footer/OkButton" to="CanvasLayer/Windows/Control/ControlRoot/DraggablePanel/MarginContainer/VBoxContainer/Footer/ButtonRun" method="_on_level_ok_button_pressed"] + +[editable path="CanvasLayer/Levels/level_0"] +[editable path="CanvasLayer/Windows/Control"] +[editable path="CanvasLayer/PopupLevel"] diff --git a/Code/ui_scenes/NewStart.tscn b/Code/ui_scenes/NewStart.tscn new file mode 100644 index 0000000..0b815e2 --- /dev/null +++ b/Code/ui_scenes/NewStart.tscn @@ -0,0 +1,63 @@ +[gd_scene load_steps=7 format=3 uid="uid://ce6fhym3oywlq"] + +[ext_resource type="PackedScene" uid="uid://by03ax1tx0l0j" path="res://ui_scenes/CRTFilter.tscn" id="1_0c2nm"] +[ext_resource type="Script" path="res://ui_scripts/SpawnCredits.gd" id="1_fd4m5"] +[ext_resource type="Script" path="res://ui_scripts/ChangeToMain.gd" id="2_p7bwq"] +[ext_resource type="Script" path="res://ui_scripts/ExitButton.gd" id="3_8jq5o"] +[ext_resource type="PackedScene" path="res://levels/level_null.tscn" id="4_y5jkn"] +[ext_resource type="Script" path="res://ui_scripts/StartAnimation.gd" id="6_ufy21"] + +[node name="NewStart" type="Control"] +layout_mode = 3 +anchors_preset = 0 + +[node name="CanvasLayer" type="CanvasLayer" parent="."] +script = ExtResource("1_fd4m5") + +[node name="VBoxContainer" type="VBoxContainer" parent="CanvasLayer"] +offset_left = 243.0 +offset_top = 259.0 +offset_right = 299.0 +offset_bottom = 355.0 +scale = Vector2(3, 3) +size_flags_horizontal = 3 +size_flags_vertical = 3 + +[node name="StartButton" type="Button" parent="CanvasLayer/VBoxContainer"] +layout_mode = 2 +size_flags_horizontal = 0 +size_flags_vertical = 3 +text = "Start" +script = ExtResource("2_p7bwq") + +[node name="ContinueButton" type="Button" parent="CanvasLayer/VBoxContainer"] +layout_mode = 2 +size_flags_horizontal = 0 +size_flags_vertical = 3 +disabled = true +text = "Continue" + +[node name="CreditsButton" type="Button" parent="CanvasLayer/VBoxContainer"] +layout_mode = 2 +size_flags_horizontal = 0 +size_flags_vertical = 3 +text = "Credits" + +[node name="ExitButton" type="Button" parent="CanvasLayer/VBoxContainer"] +layout_mode = 2 +size_flags_horizontal = 0 +size_flags_vertical = 3 +text = "Exit" +script = ExtResource("3_8jq5o") + +[node name="level_0" parent="CanvasLayer" instance=ExtResource("4_y5jkn")] +position = Vector2(662, 206) + +[node name="CRTFilter" parent="." instance=ExtResource("1_0c2nm")] + +[node name="Node" type="Node" parent="."] +script = ExtResource("6_ufy21") + +[connection signal="pressed" from="CanvasLayer/VBoxContainer/StartButton" to="CanvasLayer/VBoxContainer/StartButton" method="_on_pressed"] +[connection signal="pressed" from="CanvasLayer/VBoxContainer/CreditsButton" to="CanvasLayer" method="_pressed"] +[connection signal="pressed" from="CanvasLayer/VBoxContainer/ExitButton" to="CanvasLayer/VBoxContainer/ExitButton" method="_pressed"] diff --git a/Code/ui_scenes/Popup.tscn b/Code/ui_scenes/Popup.tscn new file mode 100644 index 0000000..49cf427 --- /dev/null +++ b/Code/ui_scenes/Popup.tscn @@ -0,0 +1,130 @@ +[gd_scene load_steps=6 format=3 uid="uid://byk6y86f2duot"] + +[ext_resource type="Theme" uid="uid://b5uuv0ae6k3gt" path="res://default.tres" id="1_0hf3u"] +[ext_resource type="FontFile" uid="uid://crxxdiidbhsib" path="res://monogram.ttf" id="2_hhmjj"] +[ext_resource type="Script" path="res://ui_scripts/HideSceneButton.gd" id="3_e32me"] +[ext_resource type="Texture2D" uid="uid://bqig8ce2q56te" path="res://ui_retro/Resizable_Corner.png" id="5_hnfex"] +[ext_resource type="Script" path="res://ui_scripts/ResizeCorner.gd" id="6_6kalx"] + +[node name="Popup" type="Control" groups=["error_popup"]] +layout_mode = 3 +anchors_preset = 0 +offset_left = -200.0 +offset_top = -100.0 +offset_right = 200.0 +offset_bottom = 100.0 +size_flags_horizontal = 6 +size_flags_vertical = 4 + +[node name="DraggablePanel" type="Panel" parent="."] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +theme = ExtResource("1_0hf3u") + +[node name="MarginContainer" type="MarginContainer" parent="DraggablePanel"] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +theme = ExtResource("1_0hf3u") +metadata/_edit_lock_ = true + +[node name="VBoxContainer" type="VBoxContainer" parent="DraggablePanel/MarginContainer"] +layout_mode = 2 +metadata/_edit_lock_ = true + +[node name="ToolBar" type="HBoxContainer" parent="DraggablePanel/MarginContainer/VBoxContainer"] +layout_direction = 2 +layout_mode = 2 +size_flags_horizontal = 4 +size_flags_vertical = 4 + +[node name="TitleEdit" type="LineEdit" parent="DraggablePanel/MarginContainer/VBoxContainer/ToolBar"] +custom_minimum_size = Vector2(200, 0) +layout_mode = 2 +size_flags_horizontal = 2 +size_flags_vertical = 4 +theme = ExtResource("1_0hf3u") +theme_override_colors/font_color = Color(0, 0, 0, 1) +theme_override_colors/font_selected_color = Color(0, 0, 0, 1) +theme_override_colors/font_uneditable_color = Color(0, 0, 0, 1) +theme_override_colors/font_placeholder_color = Color(0, 0, 0, 1) +theme_override_colors/font_outline_color = Color(0, 0, 0, 1) +theme_override_colors/caret_color = Color(0, 0, 0, 1) +theme_override_colors/selection_color = Color(0, 0, 0, 1) +theme_override_colors/clear_button_color = Color(0, 0, 0, 1) +theme_override_colors/clear_button_color_pressed = Color(0, 0, 0, 1) +theme_override_font_sizes/font_size = 34 +text = "Error" +alignment = 1 +max_length = 14 +editable = false +expand_to_text_length = true + +[node name="PopupTextBox" type="TextEdit" parent="DraggablePanel/MarginContainer/VBoxContainer" groups=["error_popup_text"]] +unique_name_in_owner = true +layout_mode = 2 +size_flags_vertical = 3 +theme = ExtResource("1_0hf3u") +theme_override_constants/line_spacing = 0 +theme_override_fonts/font = ExtResource("2_hhmjj") +theme_override_font_sizes/font_size = 32 +text = "Lorem ipsum +dolor sit amet, +consectetur +adipiscing elit" +editable = false +context_menu_enabled = false +wrap_mode = 1 +minimap_width = 40 +caret_draw_when_editable_disabled = true +metadata/_edit_lock_ = true + +[node name="Footer" type="HBoxContainer" parent="DraggablePanel/MarginContainer/VBoxContainer"] +layout_mode = 2 +size_flags_horizontal = 4 +size_flags_vertical = 4 +metadata/_edit_lock_ = true + +[node name="OkButton" type="Button" parent="DraggablePanel/MarginContainer/VBoxContainer/Footer"] +custom_minimum_size = Vector2(60, 0) +layout_mode = 2 +theme = ExtResource("1_0hf3u") +text = "Ok" +script = ExtResource("3_e32me") +metadata/_edit_lock_ = true + +[node name="ResizeCorner" type="TextureRect" parent="DraggablePanel"] +visible = false +custom_minimum_size = Vector2(35, 35) +layout_mode = 1 +anchors_preset = 3 +anchor_left = 1.0 +anchor_top = 1.0 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_left = -25.0 +offset_top = -25.0 +grow_horizontal = 0 +grow_vertical = 0 +size_flags_horizontal = 10 +size_flags_vertical = 8 +mouse_filter = 0 +mouse_default_cursor_shape = 12 +texture = ExtResource("5_hnfex") +expand_mode = 1 +script = ExtResource("6_6kalx") +resized_component_path = NodePath("../..") + +[connection signal="caret_changed" from="DraggablePanel/MarginContainer/VBoxContainer/PopupTextBox" to="DraggablePanel/MarginContainer/VBoxContainer/PopupTextBox" method="_on_caret_changed"] +[connection signal="gui_input" from="DraggablePanel/MarginContainer/VBoxContainer/PopupTextBox" to="DraggablePanel/MarginContainer/VBoxContainer/PopupTextBox" method="_on_gui_input"] +[connection signal="text_changed" from="DraggablePanel/MarginContainer/VBoxContainer/PopupTextBox" to="DraggablePanel/MarginContainer/VBoxContainer/PopupTextBox" method="_on_text_changed"] +[connection signal="pressed" from="DraggablePanel/MarginContainer/VBoxContainer/Footer/OkButton" to="DraggablePanel/MarginContainer/VBoxContainer/Footer/OkButton" method="_on_pressed"] +[connection signal="mouse_entered" from="DraggablePanel/ResizeCorner" to="DraggablePanel/ResizeCorner" method="mouse_entered"] +[connection signal="mouse_exited" from="DraggablePanel/ResizeCorner" to="DraggablePanel/ResizeCorner" method="mouse_exited"] diff --git a/Code/ui_scenes/PopupLevel.tscn b/Code/ui_scenes/PopupLevel.tscn new file mode 100644 index 0000000..0d3d2e0 --- /dev/null +++ b/Code/ui_scenes/PopupLevel.tscn @@ -0,0 +1,119 @@ +[gd_scene load_steps=5 format=3 uid="uid://ccsq3p8k80rn0"] + +[ext_resource type="Theme" uid="uid://b5uuv0ae6k3gt" path="res://default.tres" id="1_ot0od"] +[ext_resource type="Script" path="res://ui_scripts/HideSceneButton.gd" id="3_3xas7"] +[ext_resource type="Texture2D" uid="uid://bqig8ce2q56te" path="res://ui_retro/Resizable_Corner.png" id="4_e2xtq"] +[ext_resource type="Script" path="res://ui_scripts/ResizeCorner.gd" id="5_3ild2"] + +[node name="Popup" type="Control" groups=["level_popup"]] +layout_mode = 3 +anchors_preset = 0 +offset_left = -200.0 +offset_top = -100.0 +offset_right = 200.0 +offset_bottom = 100.0 +size_flags_horizontal = 6 +size_flags_vertical = 4 + +[node name="DraggablePanel" type="Panel" parent="."] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_bottom = -50.0 +grow_horizontal = 2 +grow_vertical = 2 +theme = ExtResource("1_ot0od") + +[node name="MarginContainer" type="MarginContainer" parent="DraggablePanel"] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +theme = ExtResource("1_ot0od") +metadata/_edit_lock_ = true + +[node name="VBoxContainer" type="VBoxContainer" parent="DraggablePanel/MarginContainer"] +layout_mode = 2 +metadata/_edit_lock_ = true + +[node name="ToolBar" type="HBoxContainer" parent="DraggablePanel/MarginContainer/VBoxContainer"] +layout_direction = 2 +layout_mode = 2 +size_flags_horizontal = 4 +size_flags_vertical = 4 + +[node name="TitleEdit" type="LineEdit" parent="DraggablePanel/MarginContainer/VBoxContainer/ToolBar"] +custom_minimum_size = Vector2(200, 0) +layout_mode = 2 +size_flags_horizontal = 2 +size_flags_vertical = 4 +theme = ExtResource("1_ot0od") +theme_override_colors/font_color = Color(0, 0, 0, 1) +theme_override_colors/font_selected_color = Color(0, 0, 0, 1) +theme_override_colors/font_uneditable_color = Color(0, 0, 0, 1) +theme_override_colors/font_placeholder_color = Color(0, 0, 0, 1) +theme_override_colors/font_outline_color = Color(0, 0, 0, 1) +theme_override_colors/caret_color = Color(0, 0, 0, 1) +theme_override_colors/selection_color = Color(0, 0, 0, 1) +theme_override_colors/clear_button_color = Color(0, 0, 0, 1) +theme_override_colors/clear_button_color_pressed = Color(0, 0, 0, 1) +theme_override_font_sizes/font_size = 34 +text = "Success!" +alignment = 1 +max_length = 14 +editable = false +expand_to_text_length = true + +[node name="PopupTextBox" type="Label" parent="DraggablePanel/MarginContainer/VBoxContainer" groups=["level_popup_text"]] +unique_name_in_owner = true +layout_mode = 2 +size_flags_vertical = 3 +theme = ExtResource("1_ot0od") +theme_override_colors/font_color = Color(0, 0, 0, 1) +text = "You can proceed +to another level!" +horizontal_alignment = 1 +metadata/_edit_lock_ = true + +[node name="Footer" type="HBoxContainer" parent="DraggablePanel/MarginContainer/VBoxContainer"] +layout_mode = 2 +size_flags_horizontal = 4 +size_flags_vertical = 4 +metadata/_edit_lock_ = true + +[node name="OkButton" type="Button" parent="DraggablePanel/MarginContainer/VBoxContainer/Footer"] +custom_minimum_size = Vector2(60, 0) +layout_mode = 2 +theme = ExtResource("1_ot0od") +text = "Ok" +script = ExtResource("3_3xas7") +metadata/_edit_lock_ = true + +[node name="ResizeCorner" type="TextureRect" parent="DraggablePanel"] +visible = false +custom_minimum_size = Vector2(35, 35) +layout_mode = 1 +anchors_preset = 3 +anchor_left = 1.0 +anchor_top = 1.0 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_left = -25.0 +offset_top = -25.0 +grow_horizontal = 0 +grow_vertical = 0 +size_flags_horizontal = 10 +size_flags_vertical = 8 +mouse_filter = 0 +mouse_default_cursor_shape = 12 +texture = ExtResource("4_e2xtq") +expand_mode = 1 +script = ExtResource("5_3ild2") +resized_component_path = NodePath("../..") + +[connection signal="pressed" from="DraggablePanel/MarginContainer/VBoxContainer/Footer/OkButton" to="DraggablePanel/MarginContainer/VBoxContainer/Footer/OkButton" method="_on_pressed"] +[connection signal="mouse_entered" from="DraggablePanel/ResizeCorner" to="DraggablePanel/ResizeCorner" method="mouse_entered"] +[connection signal="mouse_exited" from="DraggablePanel/ResizeCorner" to="DraggablePanel/ResizeCorner" method="mouse_exited"] diff --git a/Code/ui_scenes/PopupText.tscn b/Code/ui_scenes/PopupText.tscn new file mode 100644 index 0000000..088fea6 --- /dev/null +++ b/Code/ui_scenes/PopupText.tscn @@ -0,0 +1,119 @@ +[gd_scene load_steps=5 format=3 uid="uid://c5bldtksu82ii"] + +[ext_resource type="Theme" uid="uid://b5uuv0ae6k3gt" path="res://default.tres" id="1_we0e1"] +[ext_resource type="Script" path="res://ui_scripts/HideSceneButton.gd" id="2_8head"] +[ext_resource type="Texture2D" uid="uid://bqig8ce2q56te" path="res://ui_retro/Resizable_Corner.png" id="3_7se11"] +[ext_resource type="Script" path="res://ui_scripts/ResizeCorner.gd" id="4_7rptj"] + +[node name="Popup" type="Control" groups=["text_popup"]] +layout_mode = 3 +anchors_preset = 0 +offset_left = -400.0 +offset_top = -250.0 +offset_right = 400.0 +offset_bottom = 250.0 +size_flags_horizontal = 6 +size_flags_vertical = 4 + +[node name="DraggablePanel" type="Panel" parent="."] +layout_mode = 1 +anchors_preset = -1 +anchor_right = 1.0 +anchor_bottom = 0.9 +offset_bottom = -3.05176e-05 +grow_horizontal = 2 +grow_vertical = 2 +theme = ExtResource("1_we0e1") + +[node name="MarginContainer" type="MarginContainer" parent="DraggablePanel"] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +theme = ExtResource("1_we0e1") +metadata/_edit_lock_ = true + +[node name="VBoxContainer" type="VBoxContainer" parent="DraggablePanel/MarginContainer"] +layout_mode = 2 +metadata/_edit_lock_ = true + +[node name="ToolBar" type="HBoxContainer" parent="DraggablePanel/MarginContainer/VBoxContainer"] +layout_direction = 2 +layout_mode = 2 +size_flags_horizontal = 4 +size_flags_vertical = 4 + +[node name="TitleEdit" type="LineEdit" parent="DraggablePanel/MarginContainer/VBoxContainer/ToolBar"] +custom_minimum_size = Vector2(200, 0) +layout_mode = 2 +size_flags_horizontal = 2 +size_flags_vertical = 4 +theme = ExtResource("1_we0e1") +theme_override_colors/font_color = Color(0, 0, 0, 1) +theme_override_colors/font_selected_color = Color(0, 0, 0, 1) +theme_override_colors/font_uneditable_color = Color(0, 0, 0, 1) +theme_override_colors/font_placeholder_color = Color(0, 0, 0, 1) +theme_override_colors/font_outline_color = Color(0, 0, 0, 1) +theme_override_colors/caret_color = Color(0, 0, 0, 1) +theme_override_colors/selection_color = Color(0, 0, 0, 1) +theme_override_colors/clear_button_color = Color(0, 0, 0, 1) +theme_override_colors/clear_button_color_pressed = Color(0, 0, 0, 1) +theme_override_font_sizes/font_size = 34 +text = "Welcome!" +alignment = 1 +max_length = 14 +editable = false +expand_to_text_length = true + +[node name="PopupTextBox" type="Label" parent="DraggablePanel/MarginContainer/VBoxContainer" groups=["text_popup_text"]] +unique_name_in_owner = true +layout_mode = 2 +size_flags_vertical = 3 +theme = ExtResource("1_we0e1") +theme_override_colors/font_color = Color(0, 0, 0, 1) +text = "At the invitation of the AstroTek corporation, you embark on a mission to the planet Mercury – a place bathed in a harsh, scorching desert. Your task? To program specialized robots for transporting minerals from deep within the planet to the surface, where they await further processing. As the lead programmer, the success of the complex mining operation rests on your shoulders – one error in the code, and the entire operation could grind to a halt. Mercury is unforgiving, and the complexity of the tasks ahead of you is only increasing..." +horizontal_alignment = 1 +autowrap_mode = 3 +metadata/_edit_lock_ = true + +[node name="Footer" type="HBoxContainer" parent="DraggablePanel/MarginContainer/VBoxContainer"] +layout_mode = 2 +size_flags_horizontal = 4 +size_flags_vertical = 4 +metadata/_edit_lock_ = true + +[node name="OkButton" type="Button" parent="DraggablePanel/MarginContainer/VBoxContainer/Footer"] +custom_minimum_size = Vector2(60, 0) +layout_mode = 2 +theme = ExtResource("1_we0e1") +text = "Ok" +script = ExtResource("2_8head") +metadata/_edit_lock_ = true + +[node name="ResizeCorner" type="TextureRect" parent="DraggablePanel"] +visible = false +custom_minimum_size = Vector2(35, 35) +layout_mode = 1 +anchors_preset = 3 +anchor_left = 1.0 +anchor_top = 1.0 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_left = -25.0 +offset_top = -25.0 +grow_horizontal = 0 +grow_vertical = 0 +size_flags_horizontal = 10 +size_flags_vertical = 8 +mouse_filter = 0 +mouse_default_cursor_shape = 12 +texture = ExtResource("3_7se11") +expand_mode = 1 +script = ExtResource("4_7rptj") +resized_component_path = NodePath("../..") + +[connection signal="pressed" from="DraggablePanel/MarginContainer/VBoxContainer/Footer/OkButton" to="DraggablePanel/MarginContainer/VBoxContainer/Footer/OkButton" method="_on_pressed"] +[connection signal="mouse_entered" from="DraggablePanel/ResizeCorner" to="DraggablePanel/ResizeCorner" method="mouse_entered"] +[connection signal="mouse_exited" from="DraggablePanel/ResizeCorner" to="DraggablePanel/ResizeCorner" method="mouse_exited"] diff --git a/Code/ui_scenes/PopupWin.tscn b/Code/ui_scenes/PopupWin.tscn new file mode 100644 index 0000000..00c823d --- /dev/null +++ b/Code/ui_scenes/PopupWin.tscn @@ -0,0 +1,120 @@ +[gd_scene load_steps=5 format=3 uid="uid://bys5clq31myhl"] + +[ext_resource type="Theme" uid="uid://b5uuv0ae6k3gt" path="res://default.tres" id="1_r7mpy"] +[ext_resource type="Script" path="res://ui_scripts/MoveToStart.gd" id="2_p5cp5"] +[ext_resource type="Texture2D" uid="uid://bqig8ce2q56te" path="res://ui_retro/Resizable_Corner.png" id="3_oltiq"] +[ext_resource type="Script" path="res://ui_scripts/ResizeCorner.gd" id="4_xwsu4"] + +[node name="Popup" type="Control" groups=["text_popup"]] +layout_mode = 3 +anchors_preset = 0 +offset_left = -400.0 +offset_top = -250.0 +offset_right = 400.0 +offset_bottom = 250.0 +size_flags_horizontal = 6 +size_flags_vertical = 4 + +[node name="DraggablePanel" type="Panel" parent="."] +layout_mode = 1 +anchors_preset = -1 +anchor_right = 1.0 +anchor_bottom = 0.9 +offset_bottom = -3.05176e-05 +grow_horizontal = 2 +grow_vertical = 2 +theme = ExtResource("1_r7mpy") + +[node name="MarginContainer" type="MarginContainer" parent="DraggablePanel"] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +theme = ExtResource("1_r7mpy") +theme_override_constants/margin_left = 20 +theme_override_constants/margin_right = 20 +metadata/_edit_lock_ = true + +[node name="VBoxContainer" type="VBoxContainer" parent="DraggablePanel/MarginContainer"] +layout_mode = 2 +metadata/_edit_lock_ = true + +[node name="ToolBar" type="HBoxContainer" parent="DraggablePanel/MarginContainer/VBoxContainer"] +layout_direction = 2 +layout_mode = 2 +size_flags_horizontal = 4 +size_flags_vertical = 4 + +[node name="TitleEdit" type="LineEdit" parent="DraggablePanel/MarginContainer/VBoxContainer/ToolBar"] +custom_minimum_size = Vector2(200, 0) +layout_mode = 2 +size_flags_horizontal = 2 +size_flags_vertical = 4 +theme = ExtResource("1_r7mpy") +theme_override_colors/font_color = Color(0, 0, 0, 1) +theme_override_colors/font_selected_color = Color(0, 0, 0, 1) +theme_override_colors/font_uneditable_color = Color(0, 0, 0, 1) +theme_override_colors/font_placeholder_color = Color(0, 0, 0, 1) +theme_override_colors/font_outline_color = Color(0, 0, 0, 1) +theme_override_colors/caret_color = Color(0, 0, 0, 1) +theme_override_colors/selection_color = Color(0, 0, 0, 1) +theme_override_colors/clear_button_color = Color(0, 0, 0, 1) +theme_override_colors/clear_button_color_pressed = Color(0, 0, 0, 1) +theme_override_font_sizes/font_size = 34 +text = " Congratulations! " +alignment = 1 +max_length = 19 +editable = false +expand_to_text_length = true + +[node name="PopupTextBox" type="Label" parent="DraggablePanel/MarginContainer/VBoxContainer" groups=["text_popup_text"]] +unique_name_in_owner = true +layout_mode = 2 +size_flags_vertical = 3 +theme = ExtResource("1_r7mpy") +theme_override_colors/font_color = Color(0, 0, 0, 1) +text = "After months spent in Mercury's harsh environment, the final crate is placed on the target platform. The robots’ operating systems shut down, and the entire mining operation concludes successfully. Scanners indicate that every route, every movement, and every action were optimized to perfection. Thanks to you, the planet has revealed its secrets – and as you return to Earth, you are immortalized in history as a pioneer of space exploration who turned robotics into an art form." +horizontal_alignment = 1 +vertical_alignment = 1 +autowrap_mode = 3 +metadata/_edit_lock_ = true + +[node name="Footer" type="HBoxContainer" parent="DraggablePanel/MarginContainer/VBoxContainer"] +layout_mode = 2 +size_flags_horizontal = 4 +size_flags_vertical = 4 +metadata/_edit_lock_ = true + +[node name="OkButton" type="Button" parent="DraggablePanel/MarginContainer/VBoxContainer/Footer"] +custom_minimum_size = Vector2(60, 0) +layout_mode = 2 +theme = ExtResource("1_r7mpy") +text = " Go Back To Menu " +script = ExtResource("2_p5cp5") + +[node name="ResizeCorner" type="TextureRect" parent="DraggablePanel"] +visible = false +custom_minimum_size = Vector2(35, 35) +layout_mode = 1 +anchors_preset = 3 +anchor_left = 1.0 +anchor_top = 1.0 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_left = -25.0 +offset_top = -25.0 +grow_horizontal = 0 +grow_vertical = 0 +size_flags_horizontal = 10 +size_flags_vertical = 8 +mouse_filter = 0 +mouse_default_cursor_shape = 12 +texture = ExtResource("3_oltiq") +expand_mode = 1 +script = ExtResource("4_xwsu4") +resized_component_path = NodePath("../..") + +[connection signal="mouse_entered" from="DraggablePanel/ResizeCorner" to="DraggablePanel/ResizeCorner" method="mouse_entered"] +[connection signal="mouse_exited" from="DraggablePanel/ResizeCorner" to="DraggablePanel/ResizeCorner" method="mouse_exited"] diff --git a/Code/ui_scenes/SettingsOverlay.tscn b/Code/ui_scenes/SettingsOverlay.tscn new file mode 100644 index 0000000..4be20c7 --- /dev/null +++ b/Code/ui_scenes/SettingsOverlay.tscn @@ -0,0 +1,84 @@ +[gd_scene load_steps=6 format=3 uid="uid://bsc3kbc75mbb1"] + +[ext_resource type="Script" path="res://ui_scripts/RemoveSceneButton.gd" id="1_t177n"] +[ext_resource type="Script" path="res://ui_scripts/SwitchSceneButton.gd" id="2_vclp1"] +[ext_resource type="PackedScene" uid="uid://ce6fhym3oywlq" path="res://ui_scenes/NewStart.tscn" id="3_nevta"] +[ext_resource type="Script" path="res://ui_scripts/ExitButton.gd" id="4_w72lh"] + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_of1ec"] +bg_color = Color(0.239216, 0.239216, 0.239216, 1) + +[node name="SettingsOverlay" type="Control"] +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="Panel2" 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="Panel" type="Panel" 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 = -111.0 +offset_top = -138.0 +offset_right = 111.0 +offset_bottom = 138.0 +grow_horizontal = 2 +grow_vertical = 2 +theme_type_variation = &"SolidPanel" +theme_override_styles/panel = SubResource("StyleBoxFlat_of1ec") + +[node name="MarginContainer" type="MarginContainer" parent="Panel"] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +theme_override_constants/margin_left = 20 +theme_override_constants/margin_top = 20 +theme_override_constants/margin_right = 20 +theme_override_constants/margin_bottom = 20 + +[node name="VBoxContainer" type="VBoxContainer" parent="Panel/MarginContainer"] +layout_mode = 2 + +[node name="Label" type="Label" parent="Panel/MarginContainer/VBoxContainer"] +layout_mode = 2 +theme_override_font_sizes/font_size = 36 +text = "Settings" +horizontal_alignment = 1 + +[node name="HSeparator" type="HSeparator" parent="Panel/MarginContainer/VBoxContainer"] +layout_mode = 2 + +[node name="ContinueButton" type="Button" parent="Panel/MarginContainer/VBoxContainer"] +layout_mode = 2 +theme_override_font_sizes/font_size = 36 +text = "Continue" +script = ExtResource("1_t177n") + +[node name="BackToMenuButton" type="Button" parent="Panel/MarginContainer/VBoxContainer"] +layout_mode = 2 +theme_override_font_sizes/font_size = 36 +text = "Back to menu" +script = ExtResource("2_vclp1") +new_scene = ExtResource("3_nevta") + +[node name="ExitButton" type="Button" parent="Panel/MarginContainer/VBoxContainer"] +layout_mode = 2 +theme_override_font_sizes/font_size = 36 +text = "Exit" +script = ExtResource("4_w72lh") diff --git a/Code/ui_scripts/ButtonReset.gd b/Code/ui_scripts/ButtonReset.gd new file mode 100644 index 0000000..1c14217 --- /dev/null +++ b/Code/ui_scripts/ButtonReset.gd @@ -0,0 +1,10 @@ +extends Button + + +# Called when the node enters the scene tree for the first time. +func _ready(): + var button_run_node = get_parent().get_node("ButtonRun") + button_run_node.reset_level() + + + diff --git a/Code/ui_scripts/CanvasLayer.gd b/Code/ui_scripts/CanvasLayer.gd new file mode 100644 index 0000000..3e5c8e3 --- /dev/null +++ b/Code/ui_scripts/CanvasLayer.gd @@ -0,0 +1,11 @@ +extends CanvasLayer + + +# Called when the node enters the scene tree for the first time. +func _ready(): + pass # Replace with function body. + + +# Called every frame. 'delta' is the elapsed time since the previous frame. +func _process(delta): + pass diff --git a/Code/ui_scripts/ChangeToMain.gd b/Code/ui_scripts/ChangeToMain.gd new file mode 100644 index 0000000..4503c0b --- /dev/null +++ b/Code/ui_scripts/ChangeToMain.gd @@ -0,0 +1,4 @@ +extends Node + +func _on_pressed(): + get_tree().change_scene_to_packed(load("res://ui_scenes/Main.tscn")) diff --git a/Code/ui_scripts/CodeEdit.gd b/Code/ui_scripts/CodeEdit.gd new file mode 100644 index 0000000..0de6d27 --- /dev/null +++ b/Code/ui_scripts/CodeEdit.gd @@ -0,0 +1,91 @@ +extends CodeEdit + + +var supported_chars = "abcdefghijklmnopqrstuvwxyzABC 1234567890_(){}[];.-+=<>!&|/\\\n" +var supported_unicodes = [] + +var supported_chars_regex = r"[\w\s\n\[\]{}()<>.,;:?!@#$%^&*-+=|\\\/]" + +var _current_executing_line = 0 + +func _ready() -> void: + for i in supported_chars.length(): + supported_unicodes.push_back(supported_chars.unicode_at(i)) + + +func change_executing_line(line: int) -> void: + clear_executing_lines() + set_line_as_executing(line, true) + for i in range(get_line_count()): + set_line_background_color(i, get_theme_color("background_color")) + set_line_background_color(line, Color(0.2, 0.2, 0.2)) + _current_executing_line = line + +func advance_executing_line() -> void: + if _current_executing_line < get_line_count() - 1: + change_executing_line(_current_executing_line + 1) + +func is_char_valid(c): + var regex = RegEx.new() + regex.compile(r"[\w\s\n\[\]{}()<>.,;:?!@#$%^&*-+=|\\\/]") + return regex.search(c) != null + +func count_supported_chars(val: String) -> int: + var count = 0 + for c in val: + if is_char_valid(c): + count += 1 + return count + +func strip_unsuporrted_chars(): + var carret_col = get_caret_column() + var carret_row = get_caret_line() + + + var filtered_text = "" + + for char in text: + if is_char_valid(char): + filtered_text += char + + + var current_line = get_line(carret_row) + var valid_chars_before_cursor = count_supported_chars(current_line.left(carret_col)) + + #text = "" + print(filtered_text) + clear() + insert_text_at_caret(filtered_text) + + set_caret_line(carret_row) + set_caret_column(valid_chars_before_cursor) + + +func play_typing_sound(): + var audio = get_node("typing") + if not audio.is_playing() or true: + audio.play() + +func _on_text_changed(): + strip_unsuporrted_chars() + print("Hello!") + + +func _on_caret_changed(): + #change_executing_line(get_caret_line()) + pass + + + +func _on_gui_input(event): + if event is InputEventKey: + if event.pressed == true and event.echo == false: + play_typing_sound() + + +func _on_button_step_pressed(): + advance_executing_line() + + +func mouse_entered(): + pass # Replace with function body. diff --git a/Code/ui_scripts/Credits.gd b/Code/ui_scripts/Credits.gd new file mode 100644 index 0000000..d34cd88 --- /dev/null +++ b/Code/ui_scripts/Credits.gd @@ -0,0 +1,10 @@ +extends Panel + + +func _on_credits_button_pressed(): + visible = true + + +func _on_credits_hide_button_pressed(): + visible = false + diff --git a/Code/ui_scripts/Cursor.gd b/Code/ui_scripts/Cursor.gd new file mode 100644 index 0000000..9ae397c --- /dev/null +++ b/Code/ui_scripts/Cursor.gd @@ -0,0 +1,13 @@ +extends Sprite2D + + +func _ready(): + #pass + Input.set_mouse_mode(Input.MOUSE_MODE_HIDDEN) + +func _input(event): + if event is InputEventMouseMotion: + position = get_viewport().get_mouse_position() + +func _exit_tree(): + Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE) diff --git a/Code/ui_scripts/DragableCharacter.gd b/Code/ui_scripts/DragableCharacter.gd new file mode 100644 index 0000000..95c3773 --- /dev/null +++ b/Code/ui_scripts/DragableCharacter.gd @@ -0,0 +1,46 @@ +extends Node2D + +var dragging_offset = Vector2() +var new_mouse_position = Vector2() + +var is_dragging = false +var mouse_on_component = false + +@export var control_component_path: NodePath +@onready var control_component = get_node(control_component_path) + +func _ready(): + pass + + +func _input(event): + if event is InputEventMouseButton: + if event.button_index != MOUSE_BUTTON_LEFT: + return + + if event.is_pressed() && mouse_on_component: + move_in_front() + + dragging_offset = get_viewport().get_mouse_position() - position + new_mouse_position = get_viewport().get_mouse_position() - dragging_offset + is_dragging = true + else: + is_dragging = false + + elif event is InputEventMouseMotion: + if is_dragging: + new_mouse_position = get_viewport().get_mouse_position() - dragging_offset + +func _physics_process(delta): + if is_dragging: + position = new_mouse_position.clamp(Vector2.ZERO, Vector2(get_viewport().size) - control_component.size) + + +func mouse_entered(): + mouse_on_component = true + +func mouse_exited(): + mouse_on_component = false + +func move_in_front(): + get_parent().move_child(self, -1) diff --git a/Code/ui_scripts/ExitButton.gd b/Code/ui_scripts/ExitButton.gd new file mode 100644 index 0000000..3781bde --- /dev/null +++ b/Code/ui_scripts/ExitButton.gd @@ -0,0 +1,5 @@ +extends Button + + +func _pressed(): + get_tree().quit() diff --git a/Code/ui_scripts/GlobalScript.gd b/Code/ui_scripts/GlobalScript.gd new file mode 100644 index 0000000..59bbcfd --- /dev/null +++ b/Code/ui_scripts/GlobalScript.gd @@ -0,0 +1,13 @@ +extends Node + + + + +# Called when the node enters the scene tree for the first time. +func _ready(): + DisplayServer.window_set_min_size(Vector2i(800, 600)) + + +# Called every frame. 'delta' is the elapsed time since the previous frame. +func _process(delta): + pass diff --git a/Code/ui_scripts/HideSceneButton.gd b/Code/ui_scripts/HideSceneButton.gd new file mode 100644 index 0000000..c47f689 --- /dev/null +++ b/Code/ui_scripts/HideSceneButton.gd @@ -0,0 +1,5 @@ +extends Button + + +func _pressed(): + owner.visible = false diff --git a/Code/ui_scripts/MoveToStart.gd b/Code/ui_scripts/MoveToStart.gd new file mode 100644 index 0000000..7996df1 --- /dev/null +++ b/Code/ui_scripts/MoveToStart.gd @@ -0,0 +1,6 @@ +extends Button + +var start_scene = preload("res://ui_scenes/NewStart.tscn") + +func _pressed(): + get_tree().change_scene_to_packed(start_scene) diff --git a/Code/ui_scripts/Popup.gd b/Code/ui_scripts/Popup.gd new file mode 100644 index 0000000..6a67872 --- /dev/null +++ b/Code/ui_scripts/Popup.gd @@ -0,0 +1,11 @@ +extends Popup + + +# Called when the node enters the scene tree for the first time. +func _ready(): + popup() + + +# Called every frame. 'delta' is the elapsed time since the previous frame. +func _process(delta): + pass diff --git a/Code/ui_scripts/RemoveSceneButton.gd b/Code/ui_scripts/RemoveSceneButton.gd new file mode 100644 index 0000000..27ff89a --- /dev/null +++ b/Code/ui_scripts/RemoveSceneButton.gd @@ -0,0 +1,5 @@ +extends Button + + +func _pressed(): + owner.queue_free() diff --git a/Code/ui_scripts/ResizeCorner.gd b/Code/ui_scripts/ResizeCorner.gd new file mode 100644 index 0000000..b307456 --- /dev/null +++ b/Code/ui_scripts/ResizeCorner.gd @@ -0,0 +1,42 @@ +extends TextureRect + + +var dragging_offset + +var is_dragging = false +var mouse_on_component = false + +var resize_offset: Vector2 +var distance_moved: Vector2 + +@export var resized_component_path: NodePath +@onready var resized_component = get_node(resized_component_path) + + +func _input(event): + if event is InputEventMouseButton: + if event.button_index != MOUSE_BUTTON_LEFT: + return + + if event.is_pressed() && mouse_on_component: + resize_offset = get_viewport().get_mouse_position() - resized_component.size + distance_moved = get_viewport().get_mouse_position() - resize_offset + is_dragging = true + else: + is_dragging = false + + elif event is InputEventMouseMotion: + if is_dragging: + distance_moved = get_viewport().get_mouse_position() - resize_offset + +func _physics_process(delta): + if is_dragging: + resized_component.size = distance_moved + + + +func mouse_entered(): + mouse_on_component = true + +func mouse_exited(): + mouse_on_component = false diff --git a/Code/ui_scripts/RunGame.gd b/Code/ui_scripts/RunGame.gd new file mode 100644 index 0000000..248990e --- /dev/null +++ b/Code/ui_scripts/RunGame.gd @@ -0,0 +1,77 @@ +extends Button + +var frame = 0 + +var level_sceenes = [ + "res://levels/level_0.tscn", + "res://levels/level_1.tscn", + "res://levels/level_3.tscn", + "res://levels/level_4.tscn", + "res://levels/level_5.tscn" +] + +func _process(delta): + frame += 1 + if frame % 30 == 0: + var player_node = get_tree().get_first_node_in_group("player") + var platform_count = player_node._on_get_platforms_count() + var valid_box_count = player_node._on_get_boxes_on_platfor_count() + + if platform_count == valid_box_count: + var level_popup = get_tree().get_first_node_in_group("level_popup") + level_popup.visible = true + + + +func _on_pressed(): + var text = owner.get_node("%MainCodeEditor").text + var popup_node = get_tree().get_first_node_in_group("error_popup") + var popup_text_node = get_tree().get_first_node_in_group("error_popup_text") + + + var interpreter = CodeInterpreter.new() + var res = interpreter.interpret(text) + + if len(res) > 0: + popup_text_node.text = res + popup_node.visible = true + return + + popup_node.visible = false + + var seq = interpreter.getSequence() + + var player_node = get_tree().get_first_node_in_group("player") + player_node.commands += seq + + #change_level() + + +func change_level(): + var levels = get_tree().get_first_node_in_group("levels") + if level_sceenes.size() > 1: + for level in levels.get_children(): + remove_child(level) + level.free() + + level_sceenes.pop_front() + levels.add_child(load(level_sceenes[0]).instantiate()) + else: + var win_popup = get_tree().get_first_node_in_group("win_popup") + win_popup.visible = true + +func reset_level(): + var levels = get_tree().get_first_node_in_group("levels") + for level in levels.get_children(): + remove_child(level) + level.free() + if level_sceenes.size() > 0: + levels.add_child(load(level_sceenes[0]).instantiate()) + + +func _on_button_reset_pressed(): + reset_level() + + +func _on_level_ok_button_pressed(): + change_level() diff --git a/Code/ui_scripts/SettingsOverlayButton.gd b/Code/ui_scripts/SettingsOverlayButton.gd new file mode 100644 index 0000000..e8d2554 --- /dev/null +++ b/Code/ui_scripts/SettingsOverlayButton.gd @@ -0,0 +1,4 @@ +extends Button + +func _pressed(): + get_parent().add_child(load("res://ui_scenes/SettingsOverlay.tscn").instantiate()) diff --git a/Code/ui_scripts/SpawnCredits.gd b/Code/ui_scripts/SpawnCredits.gd new file mode 100644 index 0000000..76e3237 --- /dev/null +++ b/Code/ui_scripts/SpawnCredits.gd @@ -0,0 +1,4 @@ +extends Node + +func _pressed(): + self.add_child(load("res://ui_scenes/Credits.tscn").instantiate()) diff --git a/Code/ui_scripts/SpawnSceneButton.gd b/Code/ui_scripts/SpawnSceneButton.gd new file mode 100644 index 0000000..0716405 --- /dev/null +++ b/Code/ui_scripts/SpawnSceneButton.gd @@ -0,0 +1,6 @@ +extends Button + +@export var scene_to_spawn: PackedScene + +func _pressed(): + owner.add_child(scene_to_spawn.instantiate()) diff --git a/Code/ui_scripts/Start.gd b/Code/ui_scripts/Start.gd new file mode 100644 index 0000000..a1bbfe7 --- /dev/null +++ b/Code/ui_scripts/Start.gd @@ -0,0 +1,11 @@ +extends Control + + +# Called when the node enters the scene tree for the first time. +func _ready(): + pass # Replace with function body. + + +# Called every frame. 'delta' is the elapsed time since the previous frame. +func _process(delta): + pass diff --git a/Code/ui_scripts/StartAnimation.gd b/Code/ui_scripts/StartAnimation.gd new file mode 100644 index 0000000..0c91cf8 --- /dev/null +++ b/Code/ui_scripts/StartAnimation.gd @@ -0,0 +1,38 @@ +extends Node + +var x = 0 +var y = 0 + + +var start_pos = null +var frame = 0 +# Called when the node enters the scene tree for the first time. +func _ready(): + var player_node = get_tree().get_first_node_in_group("player") + start_pos = player_node.targetPos; + + +# Called every frame. 'delta' is the elapsed time since the previous frame. +func _process(delta): + frame = frame + 1 + + if frame % 14 == 0: + var player_node = get_tree().get_first_node_in_group("player") + var offset = player_node.targetPos- start_pos; + + var rng = RandomNumberGenerator.new() + rng.randomize() + var num = rng.randi_range(0, 4) + + if num == 0 and x < 2: + player_node.commands.append("moveEast()") + x += 1 + if num == 1 and x > -2: + player_node.commands.append("moveWest()") + x -= 1 + if num == 2 and y < 2: + player_node.commands.append("moveSouth()") + y += 1 + if num == 3 and y > -2: + player_node.commands.append("moveNorth()") + y -= 1 diff --git a/Code/ui_scripts/StartButton.gd b/Code/ui_scripts/StartButton.gd new file mode 100644 index 0000000..9598eab --- /dev/null +++ b/Code/ui_scripts/StartButton.gd @@ -0,0 +1,5 @@ +extends Button + + +func _pressed(): + get_tree().change_scene_to_file("res://Main.tscn") diff --git a/Code/ui_scripts/SwitchSceneButton.gd b/Code/ui_scripts/SwitchSceneButton.gd new file mode 100644 index 0000000..c351db0 --- /dev/null +++ b/Code/ui_scripts/SwitchSceneButton.gd @@ -0,0 +1,6 @@ +extends Button + +@export var new_scene: PackedScene + +func _pressed(): + get_tree().change_scene_to_packed(new_scene) diff --git a/Code/wall.tres b/Code/wall.tres new file mode 100644 index 0000000..bfce70d --- /dev/null +++ b/Code/wall.tres @@ -0,0 +1,7 @@ +[gd_resource type="AtlasTexture" load_steps=2 format=3 uid="uid://2irxnruutj1k"] + +[ext_resource type="Texture2D" uid="uid://os7624ctmhq3" path="res://art/robot_atlas.png" id="1_20dms"] + +[resource] +atlas = ExtResource("1_20dms") +region = Rect2(112, 80, 16, 16) diff --git a/Game.cpp b/Game.cpp deleted file mode 100644 index c41c489..0000000 --- a/Game.cpp +++ /dev/null @@ -1,115 +0,0 @@ -#include "Game.h" -#include "Callbacks.h" -#include "Utils.h" - -void Game::initOpenGL() { - - glfwSetErrorCallback(errorCallback); - - if (!glfwInit()) { - fprintf(stderr, "Failed to initialize GLFW.\n"); - exit(EXIT_FAILURE); - } - - glfwWindowHint(GLFW_TRANSPARENT_FRAMEBUFFER, GLFW_TRUE); - glfwWindowHint(GLFW_DECORATED, GLFW_FALSE); - - int width = 800; - int height = 800; - - m_window = glfwCreateWindow(width, height, "OpenGL", NULL, NULL); - - if (!m_window) - { - fprintf(stderr, "Failed to create window.\n"); - glfwTerminate(); - exit(EXIT_FAILURE); - } - - glfwMakeContextCurrent(m_window); - glfwSwapInterval(1); - - if (glewInit() != GLEW_OK) { - fprintf(stderr, "Failed to initialize GLEW.\n"); - glfwTerminate(); - exit(EXIT_FAILURE); - } -} - -void Game::init() { - - glClearColor(0.8f, 0.8f, 0.8f, 1); - glEnable(GL_DEPTH_TEST); - - glEnable(GL_BLEND); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - - - glfwSetWindowSizeCallback(m_window, windowResizeCallback); - glfwSetKeyCallback(m_window, keyCallback); - glfwSetCharCallback(m_window, charCallback); - - m_sp2d = new ShaderProgram("shaders/2d_vec.glsl", "shaders/2d_geom.glsl", "shaders/2d_frag.glsl"); - m_sp2dPost = new ShaderProgram("shaders/post_vec.glsl", nullptr, "shaders/post_frag.glsl"); - - m_asciiTexture = loadTexture("assets/ascii.png"); - - m_frameColorBuffer = createColorBuffer(m_window); - m_frameDepthBuffer = createDepthBuffer(m_window); - m_frameBuffer = createFrameBuffer(m_frameColorBuffer, m_frameDepthBuffer); - -} - -void Game::update(double delta) { - m_textArea.update(delta); - -} - -void Game::draw() { - glBindFramebuffer(GL_FRAMEBUFFER, m_frameBuffer); - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - glClearColor(0.0f, 0.0f, 0.0f, 0.0f); - - m_sp2d->use(); - glEnableVertexAttribArray(m_sp2d->a("pos")); - glEnableVertexAttribArray(m_sp2d->a("dim")); - glEnableVertexAttribArray(m_sp2d->a("tex")); - glEnableVertexAttribArray(m_sp2d->a("inv")); - - bindTilemap(m_sp2d, m_asciiTexture, 2, glm::ivec2(16, 16)); - - int width, height; - glfwGetWindowSize(m_window, &width, &height); - glUniform2f(m_sp2d->u("window"), width, height); - glUniform1f(m_sp2d->u("layer"), 0.0f); - - m_textArea.draw(m_sp2d); - - // The value zero is reserved to represent the default framebuffer provided by the windowing system - glBindFramebuffer(GL_FRAMEBUFFER, 0); - glDisable(GL_DEPTH_TEST); - glClear(GL_COLOR_BUFFER_BIT); - - m_sp2dPost->use(); - glActiveTexture(GL_TEXTURE0 + 3); - glBindTexture(GL_TEXTURE_2D, m_frameColorBuffer); - glDrawArrays(GL_TRIANGLES, 0, 6); - glUniform1i(m_sp2dPost->u("colorBuffer"), 3); - glfwSwapBuffers(m_window); -} - -void Game::clean() { - delete m_sp2d; - delete m_sp2dPost; - - glDeleteFramebuffers(1, &m_frameBuffer); - glDeleteTextures(1, &m_frameColorBuffer); - glDeleteRenderbuffers(1, &m_frameDepthBuffer); -} - -void Game::cleanOpenGL() { - glfwDestroyWindow(m_window); - glfwTerminate(); -} - - diff --git a/Game.h b/Game.h deleted file mode 100644 index a13c943..0000000 --- a/Game.h +++ /dev/null @@ -1,64 +0,0 @@ -#pragma once - -#include "Callbacks.h" -#include "ShaderProgram.h" -#include "GraphicalTextArea.h" - - -class Game{ - -private: - void initOpenGL(); - void init(); - void update(double delta); - void draw(); - void clean(); - void cleanOpenGL(); - -public: - static Game& getInstance() { - static Game instance; - return instance; - } - - void run() { - initOpenGL(); - init(); - - double lastFrameTime = glfwGetTime(); - - while (!glfwWindowShouldClose(m_window)) - { - double newFrameTime = glfwGetTime(); - double delta = newFrameTime - lastFrameTime; - - update(delta); - draw(); - - lastFrameTime = newFrameTime; - glfwPollEvents(); - } - - clean(); - cleanOpenGL(); - } - -private: - GLFWwindow* m_window; - GraphicalTextArea m_textArea{ }; - - ShaderProgram* m_sp2d{ nullptr }; - ShaderProgram* m_sp2dPost{ nullptr }; - - GLuint m_frameColorBuffer; - GLuint m_frameDepthBuffer; - GLuint m_frameBuffer; - - GLuint m_asciiTexture; - - friend void errorCallback(int error, const char* description); - friend void keyCallback(GLFWwindow* window, int key, int scancode, int action, int mods); - friend void charCallback(GLFWwindow* window, unsigned int codepoint); - friend void windowResizeCallback(GLFWwindow* window, int width, int height); -}; - diff --git a/GraphicalTextArea.cpp b/GraphicalTextArea.cpp deleted file mode 100644 index e9bdecc..0000000 --- a/GraphicalTextArea.cpp +++ /dev/null @@ -1,143 +0,0 @@ -#include -#include - -#include "GraphicalTextArea.h" - - - -bool GraphicalTextArea::keyInput(int key, int scancode, int action, int mods) { - if (action == GLFW_RELEASE) return false; - - bool shift_mod = mods & GLFW_MOD_SHIFT; - bool controlMod = mods & GLFW_MOD_CONTROL; - - switch (key) { - case GLFW_KEY_ENTER: - type('\n'); - return true; - case GLFW_KEY_BACKSPACE: - backspace(); - return true; - case GLFW_KEY_DELETE: - del(); - return true; - case GLFW_KEY_UP: - moveCursorUp(shift_mod); - return true; - case GLFW_KEY_DOWN: - moveCursorDown(shift_mod); - return true; - case GLFW_KEY_LEFT: - moveCursorLeft(shift_mod); - return true; - case GLFW_KEY_RIGHT: - moveCursorRight(shift_mod); - return true; - case GLFW_KEY_END: - end(shift_mod); - return true; - case GLFW_KEY_HOME: - home(shift_mod); - return true; - case GLFW_KEY_TAB: - type('\t'); - return true; - case GLFW_KEY_V: - if (controlMod) { - const char* clipboardString = glfwGetClipboardString(NULL); - if (clipboardString) { - paste(clipboardString); - return true; - } - } - break; - case GLFW_KEY_C: - if (controlMod) { - std::string selectedText = getSelected(); - if (!selectedText.empty()) { - glfwSetClipboardString(NULL, selectedText.c_str()); - return true; - }; - } - break; - case GLFW_KEY_X: - if (mods & GLFW_MOD_CONTROL) { - std::string selectedText = getSelected(); - if (!selectedText.empty()) { - glfwSetClipboardString(NULL, selectedText.c_str()); - del(); - return true; - } - } - break; - case GLFW_KEY_A: - if (controlMod) { - selectAll(); - return true; - } - break; - default: - return false; - } -} - -bool GraphicalTextArea::charInput(unsigned int codepoint) { - if (codepoint < 0 || codepoint > 255) return false; - type(static_cast(codepoint)); - return true; -} - -void GraphicalTextArea::update(double delta) { - // update cursor blink - cursorBlinkTimer.update(delta); - if (cursorBlinkTimer.done()) { - cursorBlinkState = !cursorBlinkState; - cursorBlinkTimer.restart(); - } -} - -void GraphicalTextArea::draw(ShaderProgram* shader) { - - data.clear(); - - // draw margin - for (size_t line = 0; line < areaSize.y; ++line) { - std::string numberStr = line < lineCount() ? std::to_string(line + 1) : ""; - for (size_t margin = 0; margin < marginSize; ++margin) { - size_t index = numberStr.length() - marginSize + margin + 1; - char c = (index < numberStr.length()) ? numberStr[index] : 0; - - data.push_back({ origin + glm::vec2(margin, line) * charSize, charSize, 2 + 32 * c, 1 }); - } - } - - - // draw text area - CharPos char_pos{ 0, 0 }; - CharPos cursor_pos = getRealCursor(); - for (char_pos.y = 0; char_pos.y < areaSize.y; ++char_pos.y) { - for (char_pos.x = 0; char_pos.x < areaSize.x; ++char_pos.x) { - - char c = getChar(char_pos); - - bool inverse; - if (char_pos == cursor_pos) { - inverse = cursorBlinkState; - } else { - inverse = isCharSelected(char_pos); - } - - data.push_back({ origin + (char_pos.convert() + glm::vec2(marginSize, 0)) * charSize, charSize, texture_index + 32 * c, inverse ? 1 : 0 }); - } - } - - if (data.size() == 0) return; - - shader->use(); - glVertexAttribPointer(shader->a("pos"), 2, GL_FLOAT, false, sizeof(DrawData), &data[0].pos); - glVertexAttribPointer(shader->a("dim"), 2, GL_FLOAT, false, sizeof(DrawData), &data[0].dim); - glVertexAttribIPointer(shader->a("tex"), 1, GL_INT, sizeof(DrawData), &data[0].tex); - glVertexAttribIPointer(shader->a("inv"), 1, GL_INT, sizeof(DrawData), &data[0].invert); - - glDrawArrays(GL_POINTS, 0, data.size()); -} diff --git a/GraphicalTextArea.h b/GraphicalTextArea.h deleted file mode 100644 index 4fbe87e..0000000 --- a/GraphicalTextArea.h +++ /dev/null @@ -1,39 +0,0 @@ -#pragma once -#include - -#include "ShaderProgram.h" -#include "TextArea.h" -#include "Timer.h" - - -struct DrawData { - glm::vec2 pos; - glm::vec2 dim; - int tex; - int invert; // treated as bool -}; - -class GraphicalTextArea : public TextArea { -public: - using TextArea::TextArea; - - bool keyInput(int key, int scancode, int action, int mods); - bool charInput(unsigned int codepoint); - - void update(double delta); - void draw(ShaderProgram* shader); - -private: - std::vector data; - - glm::vec2 origin{ 48, 80 }; - glm::ivec2 areaSize{ 40, 20 }; - glm::vec2 charSize{ 16, 32 }; - - size_t marginSize = 4; - - int texture_index = 2; - - Timer cursorBlinkTimer{ 0.5 }; - bool cursorBlinkState = false; -}; \ No newline at end of file diff --git a/LoadOBJ.cpp b/LoadOBJ.cpp deleted file mode 100644 index d059bd4..0000000 --- a/LoadOBJ.cpp +++ /dev/null @@ -1,73 +0,0 @@ -#include -#include -#include -#include -#include -#include - -#include "LoadOBJ.h" - -bool loadOBJ(const std::string path, std::vector& outVertices, std::vector& outUVs, std::vector& outNormals) { - - std::vector vertexIndices, uvIndices, normalIndices; - std::vector tempVertices; - std::vector tempUvs; - std::vector tempNormals; - - std::ifstream file(path); - if (!file.is_open()) { - std::cerr << "Unable to load .obj file" << std::endl; - return false; - } - - std::string line; - - while (std::getline(file, line)) { - if (line.substr(0, 2) == "v ") { - std::istringstream iss(line.substr(2)); - glm::vec3 vertex; - iss >> vertex[0] >> vertex[1] >> vertex[2]; - tempVertices.push_back(vertex); - } else if (line.substr(0, 3) == "vt ") { - std::istringstream iss(line.substr(3)); - glm::vec2 uv; - iss >> uv[0] >> uv[1]; - tempUvs.push_back(uv); - } else if (line.substr(0, 3) == "vn ") { - std::istringstream iss(line.substr(3)); - glm::vec3 normal; - iss >> normal[0] >> normal[1] >> normal[2]; - tempNormals.push_back(normal); - } else if (line.substr(0, 2) == "f ") { - unsigned int v[3], vt[3], vn[3]; - sscanf_s(line.c_str(), "f %i/%i/%i %i/%i/%i %i/%i/%i", &v[0], &vt[0], &vn[0], &v[1], &vt[1], &vn[1], &v[2], &vt[2], &vn[2]); - vertexIndices.push_back(v[0]); - vertexIndices.push_back(v[1]); - vertexIndices.push_back(v[2]); - - uvIndices.push_back(vt[0]); - uvIndices.push_back(vt[1]); - uvIndices.push_back(vt[2]); - - normalIndices.push_back(vn[0]); - normalIndices.push_back(vn[1]); - normalIndices.push_back(vn[2]); - } - } - - file.close(); - - for (unsigned int i = 0; i < vertexIndices.size(); i++) { - outVertices.push_back(tempVertices[vertexIndices[i] - 1]); - } - - for (unsigned int i = 0; i < uvIndices.size(); i++) { - outUVs.push_back(tempUvs[uvIndices[i] - 1]); - } - - for (unsigned int i = 0; i < normalIndices.size(); i++) { - outNormals.push_back(tempNormals[normalIndices[i] - 1]); - } - - return true; -} \ No newline at end of file diff --git a/LoadOBJ.h b/LoadOBJ.h deleted file mode 100644 index 7b4aeb8..0000000 --- a/LoadOBJ.h +++ /dev/null @@ -1,7 +0,0 @@ -#pragma once - -#include -#include -#include - -bool loadOBJ(const std::string path, std::vector& out_vertices, std::vector& out_uvs, std::vector& out_normals); // \ No newline at end of file diff --git a/Main.cpp b/Main.cpp deleted file mode 100644 index 24aa668..0000000 --- a/Main.cpp +++ /dev/null @@ -1,18 +0,0 @@ -#define GLM_FORCE_RADIANS -#define GLM_FORCE_SWIZZLE - -#include -#include -#include -#include -#include -#include "Game.h" - - -int main(void) -{ - Game& game = Game::getInstance(); - game.run(); - - return EXIT_SUCCESS; -} \ No newline at end of file diff --git a/ProgrammingGame.filters b/ProgrammingGame.filters deleted file mode 100644 index 5eb84e2..0000000 --- a/ProgrammingGame.filters +++ /dev/null @@ -1,53 +0,0 @@ - - - - - {4FC737F1-C7A5-4376-A066-2A32D752A2FF} - cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {93995380-89BD-4b04-88EB-625FBE52EBFB} - h;hh;hpp;hxx;hm;inl;inc;ipp;xsd - - - {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} - rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms - - - - - Pliki nagłówkowe - - - Pliki nagłówkowe - - - Pliki nagłówkowe - - - Pliki nagłówkowe - - - Pliki nagłówkowe - - - - - Pliki źródłowe - - - Pliki źródłowe - - - Pliki źródłowe - - - - - Pliki zasobów - - - Pliki zasobów - - - \ No newline at end of file diff --git a/ProgrammingGame.sln b/ProgrammingGame.sln deleted file mode 100644 index 8aa124b..0000000 --- a/ProgrammingGame.sln +++ /dev/null @@ -1,31 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 16 -VisualStudioVersion = 16.0.29728.190 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ProgrammingGame", "ProgrammingGame.vcxproj", "{7288C82C-3F3E-4501-8878-A310FCA284FE}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|x64 = Debug|x64 - Debug|x86 = Debug|x86 - Release|x64 = Release|x64 - Release|x86 = Release|x86 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {7288C82C-3F3E-4501-8878-A310FCA284FE}.Debug|x64.ActiveCfg = Debug|x64 - {7288C82C-3F3E-4501-8878-A310FCA284FE}.Debug|x64.Build.0 = Debug|x64 - {7288C82C-3F3E-4501-8878-A310FCA284FE}.Debug|x86.ActiveCfg = Debug|Win32 - {7288C82C-3F3E-4501-8878-A310FCA284FE}.Debug|x86.Build.0 = Debug|Win32 - {7288C82C-3F3E-4501-8878-A310FCA284FE}.Release|x64.ActiveCfg = Release|x64 - {7288C82C-3F3E-4501-8878-A310FCA284FE}.Release|x64.Build.0 = Release|x64 - {7288C82C-3F3E-4501-8878-A310FCA284FE}.Release|x86.ActiveCfg = Release|Win32 - {7288C82C-3F3E-4501-8878-A310FCA284FE}.Release|x86.Build.0 = Release|Win32 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {B1F1DB69-65FD-4B28-A71D-12DE03393EB1} - EndGlobalSection -EndGlobal diff --git a/ProgrammingGame.vcxproj b/ProgrammingGame.vcxproj deleted file mode 100644 index 5155fe4..0000000 --- a/ProgrammingGame.vcxproj +++ /dev/null @@ -1,196 +0,0 @@ - - - - - Debug - Win32 - - - Release - Win32 - - - Debug - x64 - - - Release - x64 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 16.0 - {7288C82C-3F3E-4501-8878-A310FCA284FE} - Win32Proj - plszkielet08win - 10.0 - ProgrammingGame - - - - Application - true - v143 - Unicode - - - Application - false - v143 - true - Unicode - - - Application - true - v143 - Unicode - - - Application - false - v143 - true - Unicode - - - - - - - - - - - - - - - - - - - - - true - - - true - - - false - - - false - - - - - - Level3 - true - WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - glew\include;glfw\include;$(SolutionDir);%(AdditionalIncludeDirectories) - stdcpp20 - - - Console - true - glew\lib;glfw\lib;%(AdditionalLibraryDirectories) - glew32.lib;glfw3.lib;opengl32.lib;%(AdditionalDependencies) - MSVCRT;LIBCMT;%(IgnoreSpecificDefaultLibraries) - - - - - - - Level3 - true - _DEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - stdcpplatest - - - Console - true - - - - - - - Level3 - true - true - true - WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - .;glew\include;glfw\include;%(AdditionalIncludeDirectories) - - - Console - true - true - true - glew32.lib;glfw3.lib;opengl32.lib;%(AdditionalDependencies) - %(IgnoreSpecificDefaultLibraries) - glew\lib;glfw\lib;%(AdditionalLibraryDirectories) - - - - - - - Level3 - true - true - true - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - - - Console - true - true - true - - - - - - \ No newline at end of file diff --git a/README.md b/README.md deleted file mode 100644 index 5ae9d59..0000000 --- a/README.md +++ /dev/null @@ -1,7 +0,0 @@ -## Dependencies -- GLEW (OpenGL Extension Wrangler Library) - Version 2.1.0 -- GLFW (OpenGL Framework) - Version 3.3 -- GLM (OpenGL Mathematics) - Version 0.9.9.7 -- lodepng - Version 20160124 - -*to be upgraded* diff --git a/ShaderProgram.cpp b/ShaderProgram.cpp deleted file mode 100644 index 7eb1586..0000000 --- a/ShaderProgram.cpp +++ /dev/null @@ -1,153 +0,0 @@ -/* -Niniejszy program jest wolnym oprogramowaniem; możesz go -rozprowadzać dalej i / lub modyfikować na warunkach Powszechnej -Licencji Publicznej GNU, wydanej przez Fundację Wolnego -Oprogramowania - według wersji 2 tej Licencji lub(według twojego -wyboru) którejś z późniejszych wersji. - -Niniejszy program rozpowszechniany jest z nadzieją, iż będzie on -użyteczny - jednak BEZ JAKIEJKOLWIEK GWARANCJI, nawet domyślnej -gwarancji PRZYDATNOŚCI HANDLOWEJ albo PRZYDATNOŚCI DO OKREŚLONYCH -ZASTOSOWAŃ.W celu uzyskania bliższych informacji sięgnij do -Powszechnej Licencji Publicznej GNU. - -Z pewnością wraz z niniejszym programem otrzymałeś też egzemplarz -Powszechnej Licencji Publicznej GNU(GNU General Public License); -jeśli nie - napisz do Free Software Foundation, Inc., 59 Temple -Place, Fifth Floor, Boston, MA 02110 - 1301 USA -*/ - -#include "ShaderProgram.h" - - - -//Procedura wczytuje plik do tablicy znaków. -char* ShaderProgram::readFile(const char* fileName) { - int filesize; - FILE *plik; - char* result; - - #pragma warning(suppress : 4996) //Wyłączenie błędu w Visual Studio wynikające z nietrzymania się standardów przez Microsoft. - plik=fopen(fileName,"rb"); - if (plik != NULL) { - fseek(plik, 0, SEEK_END); - filesize = ftell(plik); - fseek(plik, 0, SEEK_SET); - result = new char[filesize + 1]; - #pragma warning(suppress : 6386) //Wyłączenie błędu w Visual Studio wynikającego z błędnej analizy statycznej kodu. - int readsize=fread(result, 1, filesize, plik); - result[filesize] = 0; - fclose(plik); - - return result; - } - - return NULL; - -} - -//Metoda wczytuje i kompiluje shader, a następnie zwraca jego uchwyt -GLuint ShaderProgram::loadShader(GLenum shaderType,const char* fileName) { - //Wygeneruj uchwyt na shader - GLuint shader=glCreateShader(shaderType);//shaderType to GL_VERTEX_SHADER, GL_GEOMETRY_SHADER lub GL_FRAGMENT_SHADER - //Wczytaj plik ze źródłem shadera do tablicy znaków - const GLchar* shaderSource=readFile(fileName); - //Powiąż źródło z uchwytem shadera - glShaderSource(shader,1,&shaderSource,NULL); - //Skompiluj źródło - glCompileShader(shader); - //Usuń źródło shadera z pamięci (nie będzie już potrzebne) - delete []shaderSource; - - //Pobierz log błędów kompilacji i wyświetl - int infologLength = 0; - int charsWritten = 0; - char *infoLog; - - glGetShaderiv(shader, GL_INFO_LOG_LENGTH,&infologLength); - - if (infologLength > 1) { - infoLog = new char[infologLength]; - glGetShaderInfoLog(shader, infologLength, &charsWritten, infoLog); - printf("%s\n",infoLog); - delete []infoLog; - } - - //Zwróć uchwyt wygenerowanego shadera - return shader; -} - -ShaderProgram::ShaderProgram(const char* vertexShaderFile,const char* geometryShaderFile,const char* fragmentShaderFile) { - //Wczytaj vertex shader - printf("Loading vertex shader...\n"); - vertexShader=loadShader(GL_VERTEX_SHADER,vertexShaderFile); - - //Wczytaj geometry shader - if (geometryShaderFile!=NULL) { - printf("Loading geometry shader...\n"); - geometryShader=loadShader(GL_GEOMETRY_SHADER,geometryShaderFile); - } else { - geometryShader=0; - } - - //Wczytaj fragment shader - printf("Loading fragment shader...\n"); - fragmentShader=loadShader(GL_FRAGMENT_SHADER,fragmentShaderFile); - - //Wygeneruj uchwyt programu cieniującego - shaderProgram=glCreateProgram(); - - //Podłącz do niego shadery i zlinkuj program - glAttachShader(shaderProgram,vertexShader); - glAttachShader(shaderProgram,fragmentShader); - if (geometryShaderFile!=NULL) glAttachShader(shaderProgram,geometryShader); - glLinkProgram(shaderProgram); - - //Pobierz log błędów linkowania i wyświetl - int infologLength = 0; - int charsWritten = 0; - char *infoLog; - - glGetProgramiv(shaderProgram, GL_INFO_LOG_LENGTH,&infologLength); - - if (infologLength > 1) - { - infoLog = new char[infologLength]; - glGetProgramInfoLog(shaderProgram, infologLength, &charsWritten, infoLog); - printf("%s\n",infoLog); - delete []infoLog; - } - - printf("Shader program created \n"); -} - -ShaderProgram::~ShaderProgram() { - //Odłącz shadery od programu - glDetachShader(shaderProgram, vertexShader); - if (geometryShader!=0) glDetachShader(shaderProgram, geometryShader); - glDetachShader(shaderProgram, fragmentShader); - - //Wykasuj shadery - glDeleteShader(vertexShader); - if (geometryShader!=0) glDeleteShader(geometryShader); - glDeleteShader(fragmentShader); - - //Wykasuj program - glDeleteProgram(shaderProgram); -} - - -//Włącz używanie programu cieniującego reprezentowanego przez aktualny obiekt -void ShaderProgram::use() { - glUseProgram(shaderProgram); -} - -//Pobierz numer slotu odpowiadającego zmiennej jednorodnej o nazwie variableName -GLuint ShaderProgram::u(const char* variableName) { - return glGetUniformLocation(shaderProgram,variableName); -} - -//Pobierz numer slotu odpowiadającego atrybutowi o nazwie variableName -GLuint ShaderProgram::a(const char* variableName) { - return glGetAttribLocation(shaderProgram,variableName); -} diff --git a/ShaderProgram.h b/ShaderProgram.h deleted file mode 100644 index 6663bfa..0000000 --- a/ShaderProgram.h +++ /dev/null @@ -1,49 +0,0 @@ -/* -Niniejszy program jest wolnym oprogramowaniem; możesz go -rozprowadzać dalej i / lub modyfikować na warunkach Powszechnej -Licencji Publicznej GNU, wydanej przez Fundację Wolnego -Oprogramowania - według wersji 2 tej Licencji lub(według twojego -wyboru) którejś z późniejszych wersji. - -Niniejszy program rozpowszechniany jest z nadzieją, iż będzie on -użyteczny - jednak BEZ JAKIEJKOLWIEK GWARANCJI, nawet domyślnej -gwarancji PRZYDATNOśCI HANDLOWEJ albo PRZYDATNOśCI DO OKREśLONYCH -ZASTOSOWAń.W celu uzyskania bliższych informacji sięgnij do -Powszechnej Licencji Publicznej GNU. - -Z pewnością wraz z niniejszym programem otrzymałeś też egzemplarz -Powszechnej Licencji Publicznej GNU(GNU General Public License); -jeśli nie - napisz do Free Software Foundation, Inc., 59 Temple -Place, Fifth Floor, Boston, MA 02110 - 1301 USA -*/ - - -#ifndef SHADERPROGRAM_H -#define SHADERPROGRAM_H - - -#include -#include "stdio.h" - - - -class ShaderProgram { -private: - GLuint shaderProgram; //Uchwyt reprezentujący program cieniujacy - GLuint vertexShader; //Uchwyt reprezentujący vertex shader - GLuint geometryShader; //Uchwyt reprezentujący geometry shader - GLuint fragmentShader; //Uchwyt reprezentujący fragment shader - char* readFile(const char* fileName); //metoda wczytująca plik tekstowy do tablicy znaków - GLuint loadShader(GLenum shaderType,const char* fileName); //Metoda wczytuje i kompiluje shader, a następnie zwraca jego uchwyt -public: - ShaderProgram(const char* vertexShaderFile,const char* geometryShaderFile,const char* fragmentShaderFile); - ~ShaderProgram(); - void use(); //Włącza wykorzystywanie programu cieniującego - GLuint u(const char* variableName); //Pobiera numer slotu związanego z daną zmienną jednorodną - GLuint a(const char* variableName); //Pobiera numer slotu związanego z danym atrybutem -}; - - - - -#endif diff --git a/TextArea.cpp b/TextArea.cpp deleted file mode 100644 index 144a1a3..0000000 --- a/TextArea.cpp +++ /dev/null @@ -1,270 +0,0 @@ -#include -#include -#include - -#include -#include "TextArea.h" - -TextArea::TextArea(std::string initialText) { - paste(initialText); -} - -void TextArea::moveCursorUp(bool select) { - updateSelection(select); - - if (cursor.row > 0) { - --cursor.row; - } else { - cursor.col = 0; - } -} - -void TextArea::moveCursorDown(bool select) { - updateSelection(select); - - if (cursor.row + 1 < lines.size()) { - ++cursor.row; - } else { - cursor.col = lines[cursor.row].length(); - } -} - -void TextArea::moveCursorLeft(bool select) { - updateSelection(select); - - clampCursorToLine(); - if (cursor.col > 0) { - --cursor.col; - } else if (cursor.row > 0) { - --cursor.row; - cursor.col = lines[cursor.row].length(); - } -} - -void TextArea::moveCursorRight(bool select) { - if (isSelectionMode && !select) { - cursor = std::max(cursor, selectionStartCharPos); - isSelectionMode = false; - return; - } - - updateSelection(select); - - if (cursor.col < lines[cursor.row].length()) { - ++cursor.col; - } else if (cursor.row + 1 < lines.size()) { - ++cursor.row; - cursor.col = 0; - } -} - -void TextArea::moveCursorTo(CharPos to, bool select) { - updateSelection(select); - - if (to.row >= lines.size()) { - cursor.row = lines.size() - 1; - cursor.col = lines[cursor.row].length(); - } else { - cursor = to; - clampCursorToLine(); - } -} - - -void TextArea::end(bool select) { - updateSelection(select); - - cursor.col = lines[cursor.row].length(); -} - -void TextArea::home(bool select) { - updateSelection(select); - - cursor.col = 0; -} - -void TextArea::type(char c) { - if (isSelectionMode) { - deleteSelection(); - } - - insertChar(c); -} - -void TextArea::paste(std::string text) { - if (isSelectionMode) { - deleteSelection(); - } - - for (const char& c : text) { - insertChar(c); - } -} - -void TextArea::backspace() { - if (isSelectionMode) { - deleteSelection(); - return; - } - - clampCursorToLine(); - if (cursor.col > 0) { - lines[cursor.row].erase(cursor.col - 1, 1); - --cursor.col; - } else if (cursor.row > 0) { - --cursor.row; - cursor.col = lines[cursor.row].length(); - lines[cursor.row] += lines[cursor.row + 1]; - lines.erase(lines.begin() + cursor.row + 1); - } -} - -void TextArea::del() { - if (isSelectionMode) { - deleteSelection(); - return; - } - - clampCursorToLine(); - if (cursor.col < lines[cursor.row].length()) { - lines[cursor.row].erase(cursor.col, 1); - } else if (cursor.row + 1 < lines.size()) { - lines[cursor.row] += lines[cursor.row + 1]; - lines.erase(lines.begin() + cursor.row + 1); - } -} - -void TextArea::selectAll() { - cursor = { 0, 0 }; - selectionStartCharPos = { lines[lines.size() - 1].length(), lines.size() - 1 }; - isSelectionMode = true; -} - -char TextArea::getChar(CharPos at) const { - if (at.row < lines.size() && at.col < lines[at.row].length() ) { - return lines[at.row][at.col]; - } - return 0; -} - -bool TextArea::isCharSelected(CharPos at) const { - if (!isSelectionMode) return false; - - bool between = selectionStartCharPos <= at && at <= cursor || cursor <= at && at < selectionStartCharPos; - bool filled = at.col <= getLine(at.row).length(); - - return between && filled; -} - -std::string TextArea::getLine(size_t n) const { - if (n < lines.size()) { - return lines[n]; - } - return ""; -} - -std::string TextArea::getFull() const { - std::string rv = ""; - for (const std::string& line : lines) { - rv += line + '\n'; - } - - if (!rv.empty()) { - rv.pop_back(); - } - - return rv; -} - -std::string TextArea::getSelected() const { - if (!isSelectionMode) return ""; - - CharPos start = std::min(cursor, selectionStartCharPos); - CharPos end = std::max(cursor, selectionStartCharPos); - - if (start.row == end.row) { - return lines[start.row].substr(start.col, end.col - start.col); - } else { - std::string rv = ""; - rv += lines[start.row].substr(start.col) + '\n'; - for (size_t i = start.row + 1; i < end.row; ++i) { - rv += lines[i] + '\n'; - } - rv += lines[end.row].substr(0, end.col); - return rv; - } -} - -size_t TextArea::lineCount() const { - return lines.size(); -} - -CharPos TextArea::getRealCursor() const { - return getCharPosClamped(cursor); -} - -CharPos TextArea::getVirtualCursor() const { - return cursor; -} - -void TextArea::insertChar(char c) { - if (c == '\r') return; - if (c == '\0') return; - - clampCursorToLine(); - - if (c == '\n') { - std::string new_line = lines[cursor.row].substr(cursor.col); - lines[cursor.row].erase(cursor.col); - lines.insert(lines.begin() + cursor.row + 1, new_line); - ++cursor.row; - cursor.col = 0; - } else if (c == '\t') { - int spaces = tabSize - (cursor.col % tabSize); - for (int i = 0; i < spaces; ++i) { - insertChar(' '); - } - } else { - lines[cursor.row].insert(lines[cursor.row].begin() + cursor.col, c); - ++cursor.col; - } -} - -void TextArea::clampCursorToLine() { - cursor = getCharPosClamped(cursor); -} - -CharPos TextArea::getCharPosClamped(CharPos pos) const { - pos.col = std::min(pos.col, lines[pos.row].length()); // TODO: handle invalid pos - return pos; -} - -void TextArea::updateSelection(bool select) { - if (select) { - if (!isSelectionMode) { - isSelectionMode = true; - selectionStartCharPos = getCharPosClamped(cursor); - } - } else { - isSelectionMode = false; - } -} - -void TextArea::deleteSelection() { - clampCursorToLine(); - - CharPos start = std::min(cursor, selectionStartCharPos); - CharPos end = std::max(cursor, selectionStartCharPos); - - if (start.row == end.row) { - lines[start.row].erase(start.col, end.col - start.col); - } else { - lines[start.row].erase(start.col); - lines[start.row] += lines[end.row].substr(end.col); - lines[end.row].erase(0, end.col); - lines.erase(lines.begin() + start.row + 1, lines.begin() + end.row + 1); - } - - cursor = start; - isSelectionMode = false; -} diff --git a/TextArea.h b/TextArea.h deleted file mode 100644 index f0576d1..0000000 --- a/TextArea.h +++ /dev/null @@ -1,74 +0,0 @@ -#pragma once - -#include -#include - -union CharPos { - struct { size_t col, row; }; - struct { size_t x, y; }; - - bool operator==(const CharPos& other) const { return col == other.col && row == other.row; } - bool operator!=(const CharPos& other) const { return !(*this == other); } - bool operator< (const CharPos& other) const { return (row < other.row) || (row == other.row && col < other.col); } - bool operator> (const CharPos& other) const { return other < *this; } - bool operator<=(const CharPos& other) const { return !(*this > other); } - bool operator>=(const CharPos& other) const { return !(*this < other); } - - template - T convert() const { - return T(x, y); - } -}; - - -class TextArea { -public: - TextArea() = default; - TextArea(std::string initial_text); - - void moveCursorUp(bool select = false); - void moveCursorDown(bool select = false); - void moveCursorLeft(bool select = false); - void moveCursorRight(bool select = false); - void moveCursorTo(CharPos to, bool select = false); - - void end(bool select = false); - void home(bool select = false); - - void type(char c); - void paste(std::string text); - - void backspace(); - void del(); - - void selectAll(); - - char getChar(CharPos at) const; - bool isCharSelected(CharPos at) const; - - std::string getLine(size_t n) const; - std::string getFull() const; - std::string getSelected() const; - - size_t lineCount() const; - - CharPos getRealCursor() const; - CharPos getVirtualCursor() const; - -private: - void insertChar(char c); - - void clampCursorToLine(); - CharPos getCharPosClamped(CharPos pos) const; - - void updateSelection(bool select); - void deleteSelection(); - - std::vector lines{ "" }; - CharPos cursor{ 0, 0 }; - - bool isSelectionMode = false; - CharPos selectionStartCharPos = cursor; - - const int tabSize = 4; -}; diff --git a/Timer.cpp b/Timer.cpp deleted file mode 100644 index 2b0dc77..0000000 --- a/Timer.cpp +++ /dev/null @@ -1,21 +0,0 @@ -#include ; -#include "Timer.h" - - -Timer::Timer(double time) : duration(time), time(time) {} - -void Timer::update(double delta) { - time -= delta; -} - -double Timer::remaining() { - return std::max(0.0, time); -} - -bool Timer::done() { - return time <= 0; -} - -void Timer::restart() { - time = duration; -} diff --git a/Timer.h b/Timer.h deleted file mode 100644 index 85f56eb..0000000 --- a/Timer.h +++ /dev/null @@ -1,15 +0,0 @@ -#pragma once - -class Timer { -public: - Timer(double time); - - void update(double delta); - double remaining(); - bool done(); - void restart(); - -private: - double duration; - double time; -}; diff --git a/Utils.cpp b/Utils.cpp deleted file mode 100644 index 3c93d74..0000000 --- a/Utils.cpp +++ /dev/null @@ -1,85 +0,0 @@ -#include "Utils.h" -#include - -#include "ShaderProgram.h" - - -GLuint loadTexture(const char* filename) { - GLuint tex; - glActiveTexture(GL_TEXTURE0); - - std::vector image; - unsigned width, height; - - unsigned error = lodepng::decode(image, width, height, filename); // TODO: handle error - - glGenTextures(1, &tex); - glBindTexture(GL_TEXTURE_2D, tex); - glTexImage2D(GL_TEXTURE_2D, 0, 4, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, (unsigned char*)image.data()); - - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); - - return tex; -} - -GLuint createColorBuffer(GLFWwindow* window) { - - int width, height; - glfwGetFramebufferSize(window, &width, &height); - - unsigned int colorBuffer; - glGenTextures(1, &colorBuffer); - glBindTexture(GL_TEXTURE_2D, colorBuffer); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - glTexStorage2D(GL_TEXTURE_2D, 1, GL_RGBA8, width, height); - - return colorBuffer; -} - -GLuint createDepthBuffer(GLFWwindow* window) { - - int width, height; - glfwGetFramebufferSize(window, &width, &height); - - unsigned int depthBuffer; - glGenRenderbuffers(1, &depthBuffer); - glBindRenderbuffer(GL_RENDERBUFFER, depthBuffer); - glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH24_STENCIL8, width, height); - - return depthBuffer; -} - -GLuint createFrameBuffer(GLuint color_buffer, GLuint depth_buffer) { - GLuint frameBuffer; - - glGenFramebuffers(1, &frameBuffer); - glBindFramebuffer(GL_FRAMEBUFFER, frameBuffer); - - glFramebufferTexture2D( - GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, - GL_TEXTURE_2D, color_buffer, 0); - - glFramebufferRenderbuffer( - GL_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, - GL_RENDERBUFFER, depth_buffer); - - return frameBuffer; -} - -void bindTexture(ShaderProgram* shader, GLuint textureId, unsigned textureIndex) { - glActiveTexture(GL_TEXTURE0 + textureIndex); - glBindTexture(GL_TEXTURE_2D, textureId); - std::string address = "textures[" + std::to_string(textureIndex) + "]"; - glUniform1i(shader->u(address.c_str()), textureIndex); - -} - -void bindTilemap(ShaderProgram* shader, GLuint textureId, unsigned textureIndex, glm::ivec2 tilemapSize) { - bindTexture(shader, textureId, textureIndex); - std::string tilemapSizeAddress = "tilemapSize[" + std::to_string(textureIndex) + "]"; - glUniform2i(shader->u(tilemapSizeAddress.c_str()), tilemapSize.x, tilemapSize.y); -} \ No newline at end of file diff --git a/Utils.h b/Utils.h deleted file mode 100644 index 4dbeb0e..0000000 --- a/Utils.h +++ /dev/null @@ -1,24 +0,0 @@ -#pragma once - - -#include -#include -#include - -#include "ShaderProgram.h" - -#include -#include - - -GLuint loadTexture(const char* filename); - -GLuint createColorBuffer(GLFWwindow* window); - -GLuint createDepthBuffer(GLFWwindow* window); - -GLuint createFrameBuffer(GLuint color_buffer, GLuint depth_buffer); - -void bindTexture(ShaderProgram* shader, GLuint textureId, unsigned textureIndex); - -void bindTilemap(ShaderProgram* shader, GLuint textureId, unsigned textureIndex, glm::ivec2 tilemapSize); \ No newline at end of file diff --git a/interpreter/CMakeLists.txt b/interpreter/CMakeLists.txt deleted file mode 100644 index eb646b4..0000000 --- a/interpreter/CMakeLists.txt +++ /dev/null @@ -1,28 +0,0 @@ -cmake_minimum_required(VERSION 3.0.0) -project(Interpreter VERSION 0.1.0) - -find_package(spdlog REQUIRED) -find_package(GTest CONFIG REQUIRED) - -set(CPACK_PROJECT_NAME ${PROJECT_NAME}) -set(CPACK_PROJECT_VERSION ${PROJECT_VERSION}) -include(CPack) - -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -std=c++17") - -set(SOURCES main.cpp - src/Ast.cpp - src/Interpreter.cpp - src/Lexer.cpp - src/Parser.cpp - src/Token.cpp -) - -add_executable(Interpreter ${SOURCES}) - -target_include_directories(Interpreter PUBLIC ./src) - -target_link_libraries(Interpreter - spdlog::spdlog - spdlog -) diff --git a/interpreter/CodeInterpreter.cpp b/interpreter/CodeInterpreter.cpp deleted file mode 100644 index 1e7f143..0000000 --- a/interpreter/CodeInterpreter.cpp +++ /dev/null @@ -1,94 +0,0 @@ -#include "CodeInterpreter.h" - -#include -#include - -void CodeInterpreter::_bind_methods() -{ - ClassDB::bind_method(D_METHOD("registerBuiltInMethod"), &CodeInterpreter::registerBuiltInMethod); - ClassDB::bind_method(D_METHOD("interpret"), &CodeInterpreter::interpret); - ClassDB::bind_method(D_METHOD("getVariable"), &CodeInterpreter::getVariable); - ClassDB::bind_method(D_METHOD("getSequence"), &CodeInterpreter::getSequence); -} - -void CodeInterpreter::registerBuiltInMethod(const String& str) -{ - const std::string text{str.utf8().get_data()}; - - interpreter.registerBuiltInMethod(text); -} - -String CodeInterpreter::interpret(const String& str) -{ - try { - const std::string text{str.utf8().get_data()}; - - interpreter.symbolTable().init(); - interpreter.initParser(text); - - interpreter.registerBuiltInMethod("moveNorth()"); - interpreter.registerBuiltInMethod("moveSouth()"); - interpreter.registerBuiltInMethod("moveEast()"); - interpreter.registerBuiltInMethod("moveWest()"); - interpreter.registerBuiltInMethod("rotateLeft()"); - interpreter.registerBuiltInMethod("rotateRight()"); - interpreter.registerBuiltInMethod("push()"); - - std::shared_ptr tree = interpreter.buildTree(text); - - st::SymbolTable& stRef = interpreter.symbolTable(); - SymbolTableBuilder stb; - stb.build(tree, stRef); - - std::shared_ptr result = interpreter.interpret(tree); - - return String(); - } catch (const std::exception& e) { - return String(e.what()); - } -} - -String CodeInterpreter::getVariable(const String& str) -{ - const std::string variableName{str.utf8().get_data()}; - std::stringstream ssOut; - - try { - std::variant value = interpreter.getVariableVariant(variableName); - - if (std::holds_alternative(value)) { - int intValue = std::get(value); - std::cout << "Int value" << intValue << std::endl; - ssOut << intValue; - } else if (std::holds_alternative(value)) { - float floatValue = std::get(value); - std::cout << "Float value" << floatValue << std::endl; - ssOut << floatValue; - } else if (std::holds_alternative(value)) { - bool boolValue = std::get(value); - std::cout << "Bool value" << boolValue << std::endl; - ssOut << boolValue; - } else { - std::cout << "Unknown variant" << std::endl; - ssOut << "Unknown variant"; - } - - std::string sOut = ssOut.str(); - return String(sOut.c_str()); - - } catch (const std::exception& e) { - std::cout << e.what() << std::endl; - return String("Error"); - } -} - -Array CodeInterpreter::getSequence() -{ - Array array; - std::vector seq = interpreter.getSequence(); - for (const auto& instruction : seq) { - array.append(String(instruction.c_str())); - } - - return array; -} diff --git a/interpreter/CodeInterpreter.h b/interpreter/CodeInterpreter.h deleted file mode 100644 index ed9becb..0000000 --- a/interpreter/CodeInterpreter.h +++ /dev/null @@ -1,22 +0,0 @@ -#pragma once - -#include "core/object/ref_counted.h" -#include "core/variant/dictionary.h" -#include "src/Interpreter.h" - -class CodeInterpreter : public RefCounted, public Interpreter -{ - GDCLASS(CodeInterpreter, RefCounted); - -protected: - static void _bind_methods(); - -public: - void registerBuiltInMethod(const String& str); - String interpret(const String& str); - String getVariable(const String& str); - Array getSequence(); - -private: - Interpreter interpreter; -}; diff --git a/interpreter/SCsub b/interpreter/SCsub deleted file mode 100644 index 71d9ef8..0000000 --- a/interpreter/SCsub +++ /dev/null @@ -1,10 +0,0 @@ -# SCsub - -Import('env') - -env.add_source_files(env.modules_sources, "*.cpp") # Add all cpp files to the build -env.add_source_files(env.modules_sources, "src/*.cpp") -env.add_source_files(env.modules_sources, "tests/*.cpp") -# env.Append(CPPPATH=["./internal:include"]) - -env.Append( CCFLAGS=["/EHsc"] ) \ No newline at end of file diff --git a/interpreter/config.py b/interpreter/config.py deleted file mode 100644 index 827e2c4..0000000 --- a/interpreter/config.py +++ /dev/null @@ -1,5 +0,0 @@ -def can_build(env, platform): - return True - -def configure(env): - pass \ No newline at end of file diff --git a/interpreter/grammar.cfg b/interpreter/grammar.cfg deleted file mode 100644 index 6bf5683..0000000 --- a/interpreter/grammar.cfg +++ /dev/null @@ -1,40 +0,0 @@ - - - factor : PLUS factor | MINUS factor | INTEGER | FLOATING_NUMBER - | LPAREN expression RPAREN | variable - - term : factor ((MUL | DIV) factor)* - - expression : term ((PLUS | MINUS) term)* - - section : START statementList END - - statement : section | assignmentStatement | ifStatement - | variableDeclaration | functionDeclaration | builtInFunction - | functionCall | whileLoop | forLoop | empty - - statementList : statement | statement SEMI statementList - - assignmentStatement : variable ASSIGN expression - - variableDeclaration : (TYPE | auto) ID (ASSIGN expression)? - - variable : ID - - builtInFunction : builtInFunction - - functionDeclaration : FUN ID LPAREN RPAREN COLON section - - functionCall : ID LPAREN RPAREN - - ifStatement : IF expression COLON SECTION (ELSE COLON section)? - - whileLoop : WHILE expression COLON START SECTION - - forLoop : FOR LPAREN assignmentStatement SEMICOLON - expression SEMICOLON assignmentStatement RPAREN COLON section - - program : section DOT - - - diff --git a/interpreter/main.cpp b/interpreter/main.cpp deleted file mode 100644 index eaabb75..0000000 --- a/interpreter/main.cpp +++ /dev/null @@ -1,79 +0,0 @@ -#include "./src/Ast.h" -#include "./src/Interpreter.h" -#include "./src/Lexer.h" -#include "./src/Parser.h" -#include "./src/Token.h" - -#include -#include -#include - -int main(int argc, char* argv[]) -{ - - if (argc > 1) { - std::string input; - - std::string file_path; - std::string other_arg; - - std::string arg = argv[1]; - - if (arg.find("--file=") == 0) { - file_path = arg.substr(7); - } else { - other_arg = arg; - } - - if (!file_path.empty()) { - std::cout << "File path: " << file_path << std::endl; - - std::ifstream file(file_path); - - if (file.is_open()) { - std::stringstream buffer; - buffer << file.rdbuf(); - input = buffer.str(); - - std::cout << "File content:\n" << input << std::endl; - } else { - std::cerr << "Error: Could not open file " << file_path << std::endl; - } - - } else { - std::cout << "No file path provided. Use --file=path_to_file" << std::endl; - if (!arg.empty()) { - std::cout << "Argument:" << std::endl; - std::cout << arg << std::endl; - input = arg; - } - } - - Interpreter interpreter; - - interpreter.symbolTable().init(); - interpreter.initParser(input); - - interpreter.registerBuiltInMethod("moveNorth()"); - interpreter.registerBuiltInMethod("moveSouth()"); - interpreter.registerBuiltInMethod("moveEast()"); - interpreter.registerBuiltInMethod("moveWest()"); - interpreter.registerBuiltInMethod("rotateLeft()"); - interpreter.registerBuiltInMethod("rotateRight()"); - interpreter.registerBuiltInMethod("push()"); - - std::shared_ptr tree = interpreter.buildTree(input); - - st::SymbolTable& stRef = interpreter.symbolTable(); - SymbolTableBuilder stb; - stb.build(tree, stRef); - - std::shared_ptr result = interpreter.interpret(tree); - - stRef.debugPrint(); - - return 0; - } - - return 1; -} diff --git a/interpreter/register_types.cpp b/interpreter/register_types.cpp deleted file mode 100644 index dcd6743..0000000 --- a/interpreter/register_types.cpp +++ /dev/null @@ -1,17 +0,0 @@ -#include "register_types.h" - -#include "core/object/class_db.h" -#include "CodeInterpreter.h" - -void initialize_interpreter_module(ModuleInitializationLevel p_level) { - if (p_level != MODULE_INITIALIZATION_LEVEL_SCENE) { - return; - } - GDREGISTER_CLASS(CodeInterpreter); -} - -void uninitialize_interpreter_module(ModuleInitializationLevel p_level) { - if (p_level != MODULE_INITIALIZATION_LEVEL_SCENE) { - return; - } -} \ No newline at end of file diff --git a/interpreter/register_types.h b/interpreter/register_types.h deleted file mode 100644 index 632503a..0000000 --- a/interpreter/register_types.h +++ /dev/null @@ -1,5 +0,0 @@ -#include "modules/register_module_types.h" - -void initialize_interpreter_module(ModuleInitializationLevel p_level); -void uninitialize_interpreter_module(ModuleInitializationLevel p_level); -/* the word in the middle must be the same as the module folder name */ \ No newline at end of file diff --git a/interpreter/src/Ast.cpp b/interpreter/src/Ast.cpp deleted file mode 100644 index 625fd38..0000000 --- a/interpreter/src/Ast.cpp +++ /dev/null @@ -1,177 +0,0 @@ -#include "Ast.h" - -NodeVariant getVariant(const std::shared_ptr& node) -{ - switch (node->nodeType()) { - case NodeType::NUMBER: { - auto number = std::dynamic_pointer_cast(node); - if (!number) { - throw std::runtime_error("Casting to Number failed"); - } - - return NodeVariant(Number(*number)); - } - case NodeType::BINARY_OPERATION: { - auto binOp = std::dynamic_pointer_cast(node); - if (!binOp) { - throw std::runtime_error("Casting to BinaryOperation failed"); - } - - return NodeVariant(BinaryOperation(*binOp)); - } - case NodeType::UNARY_OPERATOR: { - auto unOp = std::dynamic_pointer_cast(node); - if (!unOp) { - throw std::runtime_error("Casting to UnaryOp failed"); - } - - return NodeVariant(UnaryOp(*unOp)); - } - case NodeType::SECTION: { - auto section = std::dynamic_pointer_cast
(node); - if (!section) { - throw std::runtime_error("Casting to Section failed"); - } - - return NodeVariant(Section(*section)); - } - case NodeType::ASSIGN: { - auto assign = std::dynamic_pointer_cast(node); - if (!assign) { - throw std::runtime_error("Casting to Assign failed"); - } - - return NodeVariant(Assign(*assign)); - } - case NodeType::VARIABLE_DECLARATION: { - auto variableDeclaration = std::dynamic_pointer_cast(node); - if (!variableDeclaration) { - throw std::runtime_error("Casting to VariableDeclaration failed"); - } - - return NodeVariant(VariableDeclaration(*variableDeclaration)); - } - case NodeType::VARIABLE: { - auto variable = std::dynamic_pointer_cast(node); - if (!variable) { - throw std::runtime_error("Casting to Variable failed"); - } - - return NodeVariant(Variable(*variable)); - } - case NodeType::EMPTY: { - auto empty = std::dynamic_pointer_cast(node); - if (!empty) { - throw std::runtime_error("Casting failed"); - } - - return NodeVariant(EmptyNode(*empty)); - } - case NodeType::FUN_DECLARATION: { - auto funDeclaration = std::dynamic_pointer_cast(node); - if (!funDeclaration) { - throw std::runtime_error("Casting to FunDeclaration failed"); - } - - return NodeVariant(FunDeclaration(*funDeclaration)); - } - case NodeType::FUN_CALL: { - auto funCall = std::dynamic_pointer_cast(node); - if (!funCall) { - throw std::runtime_error("Casting to FunCall failed"); - } - - return NodeVariant(FunCall(*funCall)); - } - case NodeType::IF: { - auto ifAst = std::dynamic_pointer_cast(node); - if (!ifAst) { - throw std::runtime_error("Casting to IfStatement failed"); - } - - return NodeVariant(IfStatement(*ifAst)); - } - case NodeType::WHILE: { - auto whileAst = std::dynamic_pointer_cast(node); - if (!whileAst) { - throw std::runtime_error("Casting to WhileLoop failed"); - } - - return NodeVariant(WhileLoop(*whileAst)); - } - case NodeType::FOR: { - auto forAst = std::dynamic_pointer_cast(node); - if (!forAst) { - throw std::runtime_error("Casting to ForLoop failed"); - } - - return NodeVariant(ForLoop(*forAst)); - } - case NodeType::BUILT_IN_FUNCTION: { - auto builtInFunction = std::dynamic_pointer_cast(node); - if (!builtInFunction) { - throw std::runtime_error("Casting to BuiltInFunction failed"); - } - - return NodeVariant(BuiltInFunction(*builtInFunction)); - } - } - - throw std::runtime_error("Unknown NodeType"); -} - -std::string getTypeString(NodeType nt) -{ - switch (nt) { - case NodeType::ASSIGN: - return "ASSIGN"; - case NodeType::BINARY_OPERATION: - return "BINARY_OPERATION"; - case NodeType::EMPTY: - return "EMPTY"; - case NodeType::NUMBER: - return "NUMBER"; - case NodeType::SECTION: - return "SECTION"; - case NodeType::UNARY_OPERATOR: - return "UNARY_OPERATOR"; - case NodeType::VARIABLE: - return "VARIABLE"; - case NodeType::VARIABLE_DECLARATION: - return "VARIABLE_DECLARATION"; - case NodeType::FUN_DECLARATION: - return "FUN_DECLARATION"; - case NodeType::FUN_CALL: - return "FUN_CALL"; - case NodeType::IF: - return "IF"; - case NodeType::WHILE: - return "WHILE"; - case NodeType::FOR: - return "FOR"; - case NodeType::BUILT_IN_FUNCTION: - return "BUILT_IN_FUNCTION"; - } - - throw std::runtime_error("Unknown NodeType"); -} - -FlexNumber operator+(const FlexNumber& lhs, const FlexNumber& rhs) -{ - return std::visit(FlexNumberAdder{}, lhs, rhs); -} - -FlexNumber operator-(const FlexNumber& lhs, const FlexNumber& rhs) -{ - return std::visit(FlexNumberSubtractor{}, lhs, rhs); -} - -FlexNumber operator*(const FlexNumber& lhs, const FlexNumber& rhs) -{ - return std::visit(FlexNumberMultiplier{}, lhs, rhs); -} - -FlexNumber operator/(const FlexNumber& lhs, const FlexNumber& rhs) -{ - return std::visit(FlexNumberDivider{}, lhs, rhs); -} \ No newline at end of file diff --git a/interpreter/src/Ast.h b/interpreter/src/Ast.h deleted file mode 100644 index 798eb8f..0000000 --- a/interpreter/src/Ast.h +++ /dev/null @@ -1,396 +0,0 @@ -#pragma once - -#include "Token.h" - -#include -#include -#include - -class AstNode; -class Number; -class BinaryOperation; -class UnaryOp; -class Section; -class Assign; -class VariableDeclaration; -class Variable; -class EmptyNode; -class FunDeclaration; -class BuiltInFunction; -class FunCall; -class IfStatement; -class WhileLoop; -class ForLoop; - -using NodeVariant = std::variant; - -using FlexNumber = std::variant; - -enum class NodeType : uint8_t -{ - NUMBER = 0, - BINARY_OPERATION = 1, - UNARY_OPERATOR = 2, - SECTION = 3, - ASSIGN = 4, - VARIABLE_DECLARATION = 5, - VARIABLE = 6, - EMPTY = 7, - FUN_DECLARATION = 8, - FUN_CALL = 9, - IF = 10, - WHILE = 11, - FOR = 12, - BUILT_IN_FUNCTION = 13 -}; - -class Token; - -class AstNode -{ -public: - AstNode() = default; - AstNode(const AstNode&) = default; - AstNode(AstNode&&) = default; - AstNode& operator=(const AstNode&) = default; - AstNode& operator=(AstNode&&) = default; - virtual ~AstNode() = default; - - virtual NodeType nodeType() const = 0; -}; - -class Number : public AstNode -{ -public: - Number(const Token& token) : - _token(token) - { - } - - Token token() const { return _token; } - FlexNumber value() const { return _token.getFlexNumber(); } - - NodeType nodeType() const override { return NodeType::NUMBER; } - -private: - Token _token; -}; - -class BinaryOperation : public AstNode -{ -public: - BinaryOperation(const std::shared_ptr& left, const Token& op, const std::shared_ptr& right) : - _left(left), - _operator(op), - _right(right) - { - } - - std::shared_ptr left() const { return _left; } - Token binaryOperator() const { return _operator; } - std::shared_ptr right() const { return _right; } - - NodeType nodeType() const override { return NodeType::BINARY_OPERATION; } - -private: - std::shared_ptr _left; - Token _operator; - std::shared_ptr _right; -}; - -class UnaryOp : public AstNode -{ -public: - UnaryOp(const Token& op, const std::shared_ptr& expr) : - _op(op), - _expr(expr) - { - } - - Token token() const { return _op; } - - std::shared_ptr expr() const { return _expr; } - - NodeType nodeType() const override { return NodeType::UNARY_OPERATOR; } - -private: - Token _op; - std::shared_ptr _expr; -}; - -class Section : public AstNode -{ -public: - Section(const std::vector>& children) : - _children(children) - { - } - - std::vector> children() const { return _children; } - - NodeType nodeType() const override { return NodeType::SECTION; } - -private: - std::vector> _children; -}; - -class Assign : public AstNode -{ -public: - Assign(std::shared_ptr left, const Token& op, std::shared_ptr right) : - _left(left), - _op(op), - _right(right) - { - } - - Token token() const { return _op; } - - std::shared_ptr left() const { return _left; } - std::shared_ptr right() const { return _right; } - - NodeType nodeType() const override { return NodeType::ASSIGN; } - -private: - std::shared_ptr _left; - Token _op; - std::shared_ptr _right; -}; - -class VariableDeclaration : public AstNode -{ -public: - VariableDeclaration(std::optional> variable) : - _variable(variable), - _assignment(std::nullopt), - _withAssignment(false) - { - } - - VariableDeclaration(std::optional> assignment, bool withAssignment) : - _variable(std::nullopt), - _assignment(assignment), - _withAssignment(withAssignment) - { - } - - std::optional> variable() const { return _variable; } - std::optional> assignment() const { return _assignment; } - - NodeType nodeType() const override { return NodeType::VARIABLE_DECLARATION; } - -private: - std::optional> _variable; - std::optional> _assignment; - const bool _withAssignment; -}; - -class Variable : public AstNode -{ -public: - Variable(const Token& token) : - _token(token), - _name(token.getStringValue()) - { - } - - Token token() const { return _token; } - - std::string name() const { return _name; } - - NodeType nodeType() const override { return NodeType::VARIABLE; } - -private: - Token _token; - std::string _name; -}; - -class EmptyNode : public AstNode -{ -public: - NodeType nodeType() const override { return NodeType::EMPTY; } -}; - -class FunDeclaration : public AstNode -{ -public: - FunDeclaration(const std::string& name, const std::vector>& body) : - _name(name), - _body(body) - { - } - - const std::string& name() const { return _name; } - const std::vector>& body() const { return _body; } - - NodeType nodeType() const override { return NodeType::FUN_DECLARATION; } - -private: - std::string _name; - std::vector> _body; -}; - -class FunCall : public AstNode -{ -public: - FunCall(const std::string& name) : - _name(name) - { - } - - const std::string& name() const { return _name; } - - NodeType nodeType() const override { return NodeType::FUN_CALL; } - -private: - std::string _name; -}; - -class IfStatement : public AstNode -{ -public: - IfStatement(std::shared_ptr condition, std::shared_ptr thenBranch, std::shared_ptr elseBranch) : - _condition(condition), - _thenBranch(thenBranch), - _elseBranch(elseBranch) - { - } - - NodeType nodeType() const override { return NodeType::IF; } - - std::shared_ptr condition() const { return _condition; } - std::shared_ptr thenBranch() const { return _thenBranch; } - std::shared_ptr elseBranch() const { return _elseBranch; } - -private: - std::shared_ptr _condition; - std::shared_ptr _thenBranch; - std::shared_ptr _elseBranch; -}; - -class WhileLoop : public AstNode -{ -public: - WhileLoop(std::shared_ptr condition, std::shared_ptr body) : - _condition(condition), - _body(body) - { - } - - NodeType nodeType() const override { return NodeType::WHILE; } - - std::shared_ptr condition() const { return _condition; } - std::shared_ptr body() const { return _body; } - -private: - std::shared_ptr _condition; - std::shared_ptr _body; -}; - -class ForLoop : public AstNode -{ -public: - ForLoop(std::shared_ptr initialization, - std::shared_ptr condition, - std::shared_ptr increment, - std::shared_ptr body) : - _initialization(initialization), - _condition(condition), - _increment(increment), - _body(body) - { - } - - NodeType nodeType() const override { return NodeType::FOR; } - - std::shared_ptr initialization() const { return _initialization; } - std::shared_ptr condition() const { return _condition; } - std::shared_ptr increment() const { return _increment; } - std::shared_ptr body() const { return _body; } - -private: - std::shared_ptr _initialization; - std::shared_ptr _condition; - std::shared_ptr _increment; - std::shared_ptr _body; -}; - -class BuiltInFunction : public AstNode -{ -public: - BuiltInFunction(const std::string& name) : - _name(name) - { - } - - NodeType nodeType() const override { return NodeType::BUILT_IN_FUNCTION; } - - const std::string& name() const { return _name; } - -private: - std::string _name; -}; - -NodeVariant getVariant(const std::shared_ptr& node); - -std::string getTypeString(NodeType nt); - -struct FlexNumberAdder -{ - template - auto operator()(T lhs, U rhs) const - { - return FlexNumber(lhs + rhs); - } -}; - -struct FlexNumberSubtractor -{ - template - auto operator()(T lhs, U rhs) const - { - return FlexNumber(lhs - rhs); - } -}; - -struct FlexNumberMultiplier -{ - template - auto operator()(T lhs, U rhs) const - { - return FlexNumber(lhs * rhs); - } -}; - -struct FlexNumberDivider -{ - template - auto operator()(T lhs, U rhs) const - { - if (rhs == 0) { - throw std::runtime_error("Division by zero"); - } - return FlexNumber(lhs / rhs); - } -}; - -FlexNumber operator+(const FlexNumber& lhs, const FlexNumber& rhs); - -FlexNumber operator-(const FlexNumber& lhs, const FlexNumber& rhs); - -FlexNumber operator*(const FlexNumber& lhs, const FlexNumber& rhs); - -FlexNumber operator/(const FlexNumber& lhs, const FlexNumber& rhs); diff --git a/interpreter/src/Interpreter.cpp b/interpreter/src/Interpreter.cpp deleted file mode 100644 index 440c5b0..0000000 --- a/interpreter/src/Interpreter.cpp +++ /dev/null @@ -1,735 +0,0 @@ -#include "Interpreter.h" - -#include - -using NodeVisitor = Interpreter::VisitNode; -using stNodeVisitor = SymbolTableVisitNode; - -void SymbolTableBuilder::build(std::shared_ptr tree, st::SymbolTable& st) -{ - SymbolTableVisitNode stvn(st); - stvn.visit(getVariant(tree)); -} - -void st::SymbolTable::create(const std::shared_ptr& symbol) -{ - _symbols[symbol->name()] = symbol; -} - -std::shared_ptr st::SymbolTable::find(const std::string& symbolName) -{ - if (auto search = _symbols.find(symbolName); search != _symbols.end()) { - return search->second; - } else { - return nullptr; - } -} - -std::shared_ptr st::SymbolTable::findWithType(const std::string& symbolName, st::SymbolType st) -{ - if (auto search = _symbols.find(symbolName); search != _symbols.end()) { - if (search->second->symbolType() != st) { - const std::string errorMessage = "Symbol with name '" + symbolName + "' - type mismatch"; - throw std::runtime_error(errorMessage); - } - return search->second; - } else { - return nullptr; - } -} - -void st::SymbolTable::init() -{ - create(std::make_shared("INTEGER", SymbolVariableType::INTEGER)); - create(std::make_shared("FLOATING_NUMBER", SymbolVariableType::FLOATING_NUMBER)); - create(std::make_shared("BOOL_VALUE", SymbolVariableType::BOOL_VALUE)); -} - -void st::SymbolTable::registerBuiltInMethod(const std::string& functionName) -{ - create(std::make_shared(functionName)); -} - -void st::SymbolTable::addToSequence(const std::string& functionName) -{ - _sequence.push_back(functionName); -} - -std::vector st::SymbolTable::sequence() -{ - return _sequence; -} - -void st::SymbolTable::debugPrint() -{ - std::cout << "Sequence:" << std::endl; - for (size_t i = 0; i < _sequence.size(); ++i) { - std::cout << i << ": " << _sequence[i] << std::endl; - } - std::cout << "End of sequence" << std::endl; - - for (const auto& [symbolName, symbolPtr] : _symbols) { - if (!symbolPtr) - continue; - - std::cout << "Symbol Name: " << symbolName << "\n"; - std::cout << "Symbol Type: "; - - switch (symbolPtr->symbolType()) { - case SymbolType::SYMBOL: - std::cout << "General Symbol\n"; - break; - - case SymbolType::BUILT_IN_TYPE_SYMBOL: { - std::cout << "Built-in Type Symbol\n"; - auto builtInTypeSymbol = std::dynamic_pointer_cast(symbolPtr); - if (builtInTypeSymbol) { - std::cout << "Type: " << static_cast(builtInTypeSymbol->_type) << "\n"; - } - break; - } - - case SymbolType::VARIABLE_SYMBOL: { - std::cout << "Variable Symbol\n"; - auto variableSymbol = std::dynamic_pointer_cast(symbolPtr); - if (variableSymbol) { - std::cout << "Type: " << variableSymbol->variableType->name() << "\n"; - std::cout << "Value: "; - std::visit([](const auto& val) { std::cout << val; }, variableSymbol->variableValue); - std::cout << "\n"; - } - break; - } - - case SymbolType::FUNCTION_SYMBOL: { - std::cout << "Function Symbol\n"; - auto functionSymbol = std::dynamic_pointer_cast(symbolPtr); - if (functionSymbol) { - std::cout << "Function Body Nodes: " << functionSymbol->body().size() << "\n"; - } - break; - } - - default: - std::cout << "Unknown Type\n"; - break; - } - - std::cout << "--------------------------\n"; - } -} - -void stNodeVisitor::operator()(BinaryOperation& node) -{ - visit(getVariant(node.left())); - visit(getVariant(node.right())); -} - -void stNodeVisitor::operator()(Number&) {} - -void stNodeVisitor::operator()(UnaryOp& node) -{ - visit(getVariant(node.expr())); -} - -void stNodeVisitor::operator()(Section& node) -{ - for (const auto& singleNode : node.children()) { - visit(getVariant(singleNode)); - } -} - -void stNodeVisitor::operator()(Assign& node) -{ - std::shared_ptr variable = std::dynamic_pointer_cast(node.left()); - - const std::string variableName = variable->name(); - - if (st.find(variableName) == nullptr) { - const std::string errorMessage = "Variable '" + variableName + "' has not been exists"; - throw std::runtime_error(errorMessage); - } - - visit(getVariant(node.right())); -} - -void stNodeVisitor::operator()(VariableDeclaration& node) -{ - if (node.variable().has_value()) { - std::shared_ptr variable = std::dynamic_pointer_cast(node.variable().value()); - - const std::string variableName = variable->name(); - - if (st.find(variableName)) { - const std::string errorMessage = "Variable '" + variableName + "' already exists"; - throw std::runtime_error(errorMessage); - } - - const std::variant variableValue = variable->token().getFlexNumber(); - std::shared_ptr variableType = st.find(Token::typeToString(variable->token().getType())); - - st.create(std::make_shared(variableName, variableValue, variableType)); - } else { - std::shared_ptr assignment = std::dynamic_pointer_cast(node.assignment().value()); - std::shared_ptr variable = std::dynamic_pointer_cast(assignment->left()); - - const std::string variableName = variable->name(); - - if (st.find(variableName)) { - const std::string errorMessage = "Variable '" + variableName + "' already exists"; - throw std::runtime_error(errorMessage); - } - - const std::variant variableValue = evaluateExpression(assignment->right()); - const std::string tokenType = getTokenTypeFromVariant(variableValue); - std::shared_ptr variableType = st.find(tokenType); - - st.create(std::make_shared(variableName, variableValue, variableType)); - } -} - -void stNodeVisitor::operator()(Variable& variable) -{ - const std::string variableName = variable.name(); - - const auto symbol = st.find(variableName); - if (symbol == nullptr) { - const std::string errorMessage = "Variable '" + variableName + "' has not been declared"; - throw std::runtime_error(errorMessage); - } - - if (std::dynamic_pointer_cast(symbol) == nullptr) { - const std::string errorMessage = "'" + variableName + "' is not a name of a variable"; - throw std::runtime_error(errorMessage); - } -} - -void stNodeVisitor::operator()(EmptyNode&) {} - -void stNodeVisitor::operator()(FunDeclaration& node) -{ - const std::string functionName = node.name(); - - if (st.find(functionName)) { - const std::string errorMessage = "Function '" + functionName + "' already exists"; - throw std::runtime_error(errorMessage); - } - - st.create(std::make_shared(functionName, node.body())); -} - -void stNodeVisitor::operator()(BuiltInFunction& node) -{ - const std::string functionName = node.name(); - - if (!st.find(functionName)) { - const std::string errorMessage = "Function '" + functionName + "' does not exists"; - throw std::runtime_error(errorMessage); - } -} - -void stNodeVisitor::operator()(FunCall& node) -{ - const std::string functionName = node.name(); - - auto symbol = st.find(functionName); - - if (symbol == nullptr) { - const std::string errorMessage = "Function '" + functionName + "' has not been declared"; - throw std::runtime_error(errorMessage); - } - - if (std::dynamic_pointer_cast(symbol) == nullptr) { - const std::string errorMessage = "'" + functionName + "' is not a name of a function"; - throw std::runtime_error(errorMessage); - } -} - -void stNodeVisitor::operator()(IfStatement& node) -{ - visit(getVariant(node.condition())); - visit(getVariant(node.thenBranch())); - visit(getVariant(node.elseBranch())); -} - -void stNodeVisitor::operator()(WhileLoop& node) -{ - visit(getVariant(node.condition())); - visit(getVariant(node.body())); -} - -void stNodeVisitor::operator()(ForLoop& node) -{ - visit(getVariant(node.initialization())); - visit(getVariant(node.condition())); - visit(getVariant(node.increment())); - visit(getVariant(node.body())); -} - -void SymbolTableVisitNode::visit(NodeVariant astNode) -{ - return std::visit(SymbolTableVisitNode(st), astNode); -} - -std::variant stNodeVisitor::evaluateExpression(const std::shared_ptr node) -{ - switch (node->nodeType()) { - case NodeType::BINARY_OPERATION: { - auto binaryOpNode = std::dynamic_pointer_cast(node); - - NodeVariant left = getVariant(binaryOpNode->left()); - NodeVariant right = getVariant(binaryOpNode->right()); - - TokenType tokenType = binaryOpNode->binaryOperator().getType(); - - return Interpreter::calculateBinaryResult(st, Interpreter::visitInterpret(left, st), Interpreter::visitInterpret(right, st), tokenType); - } - case NodeType::UNARY_OPERATOR: { - auto unaryOpNode = std::dynamic_pointer_cast(node); - - if (unaryOpNode->token().getType() == TokenType::PLUS) { - return evaluateExpression(unaryOpNode->expr()); - } else if (unaryOpNode->token().getType() == TokenType::MINUS) { - const std::variant variant = evaluateExpression(unaryOpNode->expr()); - if (std::holds_alternative(variant)) { - const int value = std::get(variant); - return -value; - } else if (std::holds_alternative(variant)) { - const float value = std::get(variant); - return -value; - } else if (std::holds_alternative(variant)) { - throw std::runtime_error("Cannot add '-' sign to bool value"); - } else { - throw std::runtime_error("Variant does not hold integer, float or bool inside, cannot return value of it"); - } - } else { - throw std::runtime_error("Token type in UnaryOp is netiher PLUS or MINUS"); - } - } - case NodeType::NUMBER: { - auto numberNode = std::dynamic_pointer_cast(node); - return numberNode->value(); - } - case NodeType::VARIABLE: { - auto variableNode = std::dynamic_pointer_cast(node); - return variableNode->token().getFlexNumber(); - } - default: { - const std::string msg = "Evaluating expression for type '" + std::to_string(static_cast(node->nodeType())) + "' is not implemented"; - throw std::runtime_error(msg); - } - } -} - -std::string stNodeVisitor::getTokenTypeFromVariant(std::variant variant) -{ - if (std::holds_alternative(variant)) { - return "INTEGER"; - } else if (std::holds_alternative(variant)) { - return "FLOATING_NUMBER"; - } else if (std::holds_alternative(variant)) { - return "BOOL_VALUE"; - } else { - throw std::runtime_error("Unknown variant in getTokenTypeFromVariant"); - } -} - -std::shared_ptr NodeVisitor::operator()(BinaryOperation& node) -{ - - NodeVariant left = getVariant(node.left()); - NodeVariant right = getVariant(node.right()); - - TokenType tokenType = node.binaryOperator().getType(); - auto arithmeticIt = std::find(Token::arithmeticTokenTypes.begin(), Token::arithmeticTokenTypes.end(), tokenType); - if (arithmeticIt != Token::arithmeticTokenTypes.end()) { - FlexNumber value = calculateBinaryResult(symbolTable(), visitInterpret(left, symbolTable()), visitInterpret(right, symbolTable()), tokenType); - if (std::holds_alternative(value)) { - return std::make_shared(Token(std::get(value), TokenType::INTEGER)); - } else if (std::holds_alternative(value)) { - return std::make_shared(Token(std::get(value), TokenType::FLOATING_NUMBER)); - } else { - throw std::runtime_error("Boolean value not supported as result of calculateBinaryResult in arithmetic operation"); - } - } - - auto comparisonIt = std::find(Token::comparisonTokenTypes.begin(), Token::comparisonTokenTypes.end(), tokenType); - if (comparisonIt != Token::comparisonTokenTypes.end()) { - FlexNumber value = calculateBinaryResult(symbolTable(), visitInterpret(left, symbolTable()), visitInterpret(right, symbolTable()), tokenType); - if (std::holds_alternative(value)) { - throw std::runtime_error("Int value not supported as result of calculateBinaryResult in comparison"); - } else if (std::holds_alternative(value)) { - throw std::runtime_error("Float value not supported as result of calculateBinaryResult in comparison"); - } else { - return std::make_shared(Token(std::get(value), TokenType::BOOL_VALUE)); - } - } - - throw std::runtime_error("Unknown type of binary operator in visitor for BinaryOperation '" + Token::typeToString(tokenType) + "'"); -} - -std::shared_ptr NodeVisitor::operator()(Number& node) -{ - auto value = node.value(); - if (std::holds_alternative(value)) { - return std::make_shared(Token(std::get(value), TokenType::INTEGER)); - } else if (std::holds_alternative(value)) { - return std::make_shared(Token(std::get(value), TokenType::FLOATING_NUMBER)); - } else if (std::holds_alternative(value)) { - return std::make_shared(Token(std::get(value), TokenType::BOOL_VALUE)); - } else { - throw std::runtime_error("Unknown variant value in Number visitor"); - } -} - -std::shared_ptr NodeVisitor::operator()(UnaryOp& node) -{ - NodeVariant exprVariant = getVariant(node.expr()); - auto res = visitInterpret(exprVariant, symbolTable()); - - auto number = std::dynamic_pointer_cast(res); - if (!number) { - throw std::runtime_error("Casting failed in UnaryOp visitInterpret"); - } - - auto value = number->value(); - - TokenType type = node.token().getType(); - if (std::holds_alternative(value)) { - int intValue = std::get(value); - if (type == TokenType::PLUS) { - return std::make_shared(Token(intValue, TokenType::INTEGER)); - } else if (type == TokenType::MINUS) { - return std::make_shared(Token(-intValue, TokenType::INTEGER)); - } else { - throw std::runtime_error("Unknown operator type for int value in UnaryOp visitInterpret"); - } - } else { - float floatValue = std::get(value); - if (type == TokenType::PLUS) { - return std::make_shared(Token(floatValue, TokenType::FLOATING_NUMBER)); - } else if (type == TokenType::MINUS) { - return std::make_shared(Token(-floatValue, TokenType::FLOATING_NUMBER)); - } else { - throw std::runtime_error("Unknown operator type for float value in UnaryOp visitInterpret"); - } - } -} - -std::shared_ptr NodeVisitor::operator()(Section& node) -{ - for (const auto& child : node.children()) { - Interpreter::visitInterpret(getVariant(child), symbolTable()); - } - - return std::make_shared(); -} - -std::shared_ptr NodeVisitor::operator()(Assign& node) -{ - auto variable = std::dynamic_pointer_cast(node.left()); - if (!variable) { - throw std::runtime_error("Casting to Variable in VisitAssign failed!"); - } - - auto value = std::dynamic_pointer_cast(visitInterpret(getVariant(node.right()), symbolTable())); - if (!value) { - throw std::runtime_error("Casting to Number in VisitAssign failed!"); - } - - std::shared_ptr symbol = st.find(variable->name()); - if (symbol == nullptr) { - throw std::runtime_error("Cannot find value in Assign visit!"); - } - - auto variableSymbol = std::dynamic_pointer_cast(symbol); - if (!variableSymbol) { - throw std::runtime_error("Casting to VariableSymbol in VisitAssign failed!"); - } - - auto variableSymbolType = std::dynamic_pointer_cast(variableSymbol->variableType); - if (!variableSymbolType) { - throw std::runtime_error("Casting to variableSymbolType in VisitAssign failed!"); - } - - std::string valueTypeName; - auto flexValue = value->value(); - - if (std::holds_alternative(flexValue)) { - valueTypeName = "INTEGER"; - } else if (std::holds_alternative(flexValue)) { - valueTypeName = "FLOATING_NUMBER"; - } else { - valueTypeName = "BOOL_VALUE"; - } - - if (variableSymbolType->name() != valueTypeName) { - throw std::runtime_error("Type mismatch"); - } - - variableSymbol->getValue() = value->value(); - - return std::make_shared(); -} - -std::shared_ptr NodeVisitor::operator()(VariableDeclaration&) -{ - return std::make_shared(); -} - -std::shared_ptr NodeVisitor::operator()(Variable& node) -{ - const std::string& variableName = node.name(); - auto symbol = symbolTable().findWithType(variableName, st::SymbolType::VARIABLE_SYMBOL); - auto variableSymbol = std::dynamic_pointer_cast(symbol); - - std::variant& value = variableSymbol->getValue(); - - if (std::holds_alternative(value)) { - return std::make_shared(Token(std::get(value), TokenType::INTEGER)); - } else if (std::holds_alternative(value)) { - return std::make_shared(Token(std::get(value), TokenType::FLOATING_NUMBER)); - } else if (std::holds_alternative(value)) { - return std::make_shared(Token(std::get(value), TokenType::BOOL_VALUE)); - } else { - throw std::runtime_error("In Visit::Variable, variant does not hold int, float or bool"); - } -} - -std::shared_ptr NodeVisitor::operator()(EmptyNode&) -{ - return std::make_shared(); -} - -std::shared_ptr NodeVisitor::operator()(IfStatement& node) -{ - auto conditionResult = visitInterpret(getVariant(node.condition()), symbolTable()); - auto conditionValue = std::dynamic_pointer_cast(conditionResult); - - if (!conditionValue) { - throw std::runtime_error("Condition expression in if-statement did not return a Number."); - } - - FlexNumber condition = conditionValue->value(); - bool conditionIsTrue = (std::holds_alternative(condition) && std::get(condition)) // It is usual flow for comparisons - || (std::holds_alternative(condition) && std::get(condition) != 0) - || (std::holds_alternative(condition) && std::get(condition) != 0.0f); - - if (conditionIsTrue) { - return visitInterpret(getVariant(node.thenBranch()), symbolTable()); - } else if (node.elseBranch()) { - return visitInterpret(getVariant(node.elseBranch()), symbolTable()); - } else { - return std::make_shared(); - } -} - -std::shared_ptr NodeVisitor::operator()(FunDeclaration&) -{ - return std::make_shared(); -} - -std::shared_ptr NodeVisitor::operator()(BuiltInFunction& node) -{ - symbolTable().addToSequence(node.name()); - - return std::make_shared(); -} - -std::shared_ptr NodeVisitor::operator()(FunCall& node) -{ - const std::string& functionName = node.name(); - auto symbol = symbolTable().findWithType(functionName, st::SymbolType::FUNCTION_SYMBOL); - auto functionSymbol = std::dynamic_pointer_cast(symbol); - - const auto& functionBody = functionSymbol->body(); - for (const auto& statement : functionBody) { - visitInterpret(getVariant(statement), symbolTable()); - } - - return std::make_shared(); -} - -std::shared_ptr NodeVisitor::operator()(WhileLoop& node) -{ - while (true) { - auto conditionResult = visitInterpret(getVariant(node.condition()), symbolTable()); - auto conditionValue = std::dynamic_pointer_cast(conditionResult); - - if (!conditionValue) { - throw std::runtime_error("Condition expression in while-loop did not return a Number."); - } - - bool conditionIsTrue = (std::holds_alternative(conditionValue->value()) && std::get(conditionValue->value()) != 0) - || (std::holds_alternative(conditionValue->value()) && std::get(conditionValue->value()) != 0.0f); - - if (!conditionIsTrue) { - break; - } - - visitInterpret(getVariant(node.body()), symbolTable()); - } - - return std::make_shared(); -} - -std::shared_ptr NodeVisitor::operator()(ForLoop& node) -{ - visitInterpret(getVariant(node.initialization()), symbolTable()); - - while (true) { - auto conditionResult = visitInterpret(getVariant(node.condition()), symbolTable()); - auto conditionValue = std::dynamic_pointer_cast(conditionResult); - - if (!conditionValue) { - throw std::runtime_error("Condition expression in for-loop did not return a Number."); - } - - bool conditionIsTrue = (std::holds_alternative(conditionValue->value()) && std::get(conditionValue->value()) != 0) - || (std::holds_alternative(conditionValue->value()) && std::get(conditionValue->value()) != 0.0f) - || (std::holds_alternative(conditionValue->value()) && std::get(conditionValue->value()) == true); - - if (!conditionIsTrue) { - break; - } - - visitInterpret(getVariant(node.body()), symbolTable()); - - visitInterpret(getVariant(node.increment()), symbolTable()); - } - - return std::make_shared(); -} - -// static -std::shared_ptr Interpreter::visitInterpret(NodeVariant astNode, st::SymbolTable& st) -{ - return std::visit(VisitNode(st), astNode); -} - -void Interpreter::registerBuiltInMethod(const std::string& functionName) -{ - symbolTable().registerBuiltInMethod(functionName); - _parser.registerBuiltInMethod(functionName); -} - -std::vector Interpreter::getSequence() -{ - return symbolTable().sequence(); -} - -std::shared_ptr Interpreter::buildTree(const std::string& text) -{ - return _parser.parse(); -} - -std::shared_ptr Interpreter::interpret(std::shared_ptr tree) -{ - return Interpreter::visitInterpret(getVariant(tree), symbolTable()); -} - -void Interpreter::initParser(const std::string& input) -{ - _parser = Parser(Lexer(input)); -} - -void Interpreter::reset() -{ - _executionLine = -1; - _executionPosition = -1; - - _parser = Parser(); -} - -std::variant Interpreter::getVariableVariant(const std::string& variableName) -{ - auto variable = this->symbolTable().findWithType(variableName, st::SymbolType::VARIABLE_SYMBOL); // TODO: Handle exception - auto variableSymbol = std::dynamic_pointer_cast(variable); - - return variableSymbol->getValue(); -} - -// static -FlexNumber Interpreter::calculateBinaryResult(st::SymbolTable& st, - const std::shared_ptr& left, - const std::shared_ptr& right, - TokenType type) -{ - // TODO(wkubski): Currently we only support comparisons, where variable is on the left side of operator - if (left->nodeType() == NodeType::NUMBER) { - auto leftNumber = std::dynamic_pointer_cast(left); - auto rightNumber = std::dynamic_pointer_cast(right); - - if ((!leftNumber) || (!rightNumber)) { - throw std::runtime_error("Casting failed in calculateBinaryResult with leftNode == Number"); - } - - FlexNumber leftValue = leftNumber->value(); - FlexNumber rightValue = rightNumber->value(); - - if (type == TokenType::PLUS) { - return leftValue + rightValue; - } else if (type == TokenType::MINUS) { - return leftValue - rightValue; - } else if (type == TokenType::MULTIPLICATION) { - return leftValue * rightValue; - } else if (type == TokenType::DIVISION) { - return leftValue / rightValue; - } else if (type == TokenType::COMPARISON) { - return leftValue == rightValue; - } else if (type == TokenType::NOT_EQUAL) { - return leftValue != rightValue; - } else if (type == TokenType::GREATER) { - return leftValue > rightValue; - } else if (type == TokenType::LESS) { - return leftValue < rightValue; - } else if (type == TokenType::GREATER_EQUAL) { - return leftValue >= rightValue; - } else if (type == TokenType::LESS_EQUAL) { - return leftValue <= rightValue; - } else { - throw std::runtime_error("Unknown token type in calculateBinaryResult"); - } - } else if (left->nodeType() == NodeType::VARIABLE) { - auto leftVariable = std::dynamic_pointer_cast(left); - auto rightNumber = std::dynamic_pointer_cast(right); - - if ((!leftVariable) || (!rightNumber)) { - throw std::runtime_error("Casting failed in calculateBinaryResult with leftNode == Variable"); - } - - auto symbol = st.findWithType(leftVariable->name(), st::SymbolType::VARIABLE_SYMBOL); - auto variableSymbol = std::dynamic_pointer_cast(symbol); - - FlexNumber leftValue = variableSymbol->getValue(); - - FlexNumber rightValue = rightNumber->value(); - - if (type == TokenType::PLUS) { - return leftValue + rightValue; - } else if (type == TokenType::MINUS) { - return leftValue - rightValue; - } else if (type == TokenType::MULTIPLICATION) { - return leftValue * rightValue; - } else if (type == TokenType::DIVISION) { - return leftValue / rightValue; - } else if (type == TokenType::COMPARISON) { // This and all below should be only choice here, according to logic - return leftValue == rightValue; - } else if (type == TokenType::NOT_EQUAL) { - return leftValue != rightValue; - } else if (type == TokenType::GREATER) { - return leftValue > rightValue; - } else if (type == TokenType::LESS) { - return leftValue < rightValue; - } else if (type == TokenType::GREATER_EQUAL) { - return leftValue >= rightValue; - } else if (type == TokenType::LESS_EQUAL) { - return leftValue <= rightValue; - } else { - throw std::runtime_error("Unknown token type in calculateBinaryResult"); - } - - } else { - throw std::runtime_error("Left node of BinaryOperator is neither Number nor Variable, execution not possible"); - } -} diff --git a/interpreter/src/Interpreter.h b/interpreter/src/Interpreter.h deleted file mode 100644 index e80df93..0000000 --- a/interpreter/src/Interpreter.h +++ /dev/null @@ -1,230 +0,0 @@ -#pragma once - -#include "Ast.h" -#include "Lexer.h" -#include "Parser.h" - -#include -#include -#include - -namespace st { -enum class SymbolVariableType : uint8_t -{ - INTEGER = 0, - FLOATING_NUMBER = 1, - BOOL_VALUE = 2 -}; - -enum class SymbolType : uint8_t -{ - SYMBOL = 0, - BUILT_IN_TYPE_SYMBOL = 1, - BUILT_IN_FUNCTION_SYMBOL = 2, - VARIABLE_SYMBOL = 3, - FUNCTION_SYMBOL = 4 -}; - -class Symbol -{ -public: - Symbol(const std::string& name) : - _name(name) - { - } - - std::string name() const { return _name; } - - virtual SymbolType symbolType() { return SymbolType::SYMBOL; } - - std::string _name; -}; - -class BuiltInTypeSymbol : public Symbol -{ -public: - BuiltInTypeSymbol(const std::string& symbolName, SymbolVariableType type) : - Symbol(symbolName), - _type(type) - { - } - - SymbolType symbolType() override { return SymbolType::BUILT_IN_TYPE_SYMBOL; } - - SymbolVariableType _type; -}; - -class BuiltInFunctionSymbol : public Symbol -{ -public: - BuiltInFunctionSymbol(const std::string& symbolName) : - Symbol(symbolName) - { - } - - SymbolType symbolType() override { return SymbolType::BUILT_IN_TYPE_SYMBOL; } -}; - -class VariableSymbol : public Symbol -{ -public: - VariableSymbol(const std::string& name, const std::variant& value, std::shared_ptr type) : - Symbol(name), - variableValue(value), - variableType(type) - { - } - - SymbolType symbolType() override { return SymbolType::VARIABLE_SYMBOL; } - - std::variant& getValue() { return variableValue; } - - std::variant variableValue; - std::shared_ptr variableType; -}; - -class FunctionSymbol : public Symbol -{ -public: - FunctionSymbol(const std::string& fName, std::vector> function) : - Symbol(fName), - _function(function) - { - } - - SymbolType symbolType() override { return SymbolType::FUNCTION_SYMBOL; } - - std::vector>& body() { return _function; } - - std::vector> _function; -}; - -class SymbolTable -{ -public: - void create(const std::shared_ptr& symbol); - - std::shared_ptr find(const std::string& symbolName); - - std::shared_ptr findWithType(const std::string& symbolName, SymbolType type); - - void init(); - - void registerBuiltInMethod(const std::string& functionName); - - void addToSequence(const std::string& functionName); - - std::vector sequence(); - - void debugPrint(); - -private: - std::map> _symbols; - std::vector _sequence; -}; - -} // namespace st - -class Interpreter -{ -public: - void registerBuiltInMethod(const std::string& functionName); - - std::vector getSequence(); - - std::shared_ptr buildTree(const std::string& text); - - std::shared_ptr interpret(std::shared_ptr tree); - - void initParser(const std::string& input); - - void reset(); - - std::variant getVariableVariant(const std::string& varialeName); - - void raiseExecutionError(uint16_t currentLine, int16_t currentPositon = -1) const; - - st::SymbolTable& symbolTable() { return _symbolTable; } - - struct VisitNode - { - VisitNode(st::SymbolTable& st) : - st(st) - { - } - ~VisitNode() = default; - - std::shared_ptr operator()(BinaryOperation& node); - std::shared_ptr operator()(Number& node); - std::shared_ptr operator()(UnaryOp& node); - std::shared_ptr operator()(Section& node); - std::shared_ptr operator()(Assign& node); - std::shared_ptr operator()(VariableDeclaration& node); - std::shared_ptr operator()(Variable& node); - std::shared_ptr operator()(EmptyNode& node); - std::shared_ptr operator()(FunDeclaration& node); - std::shared_ptr operator()(BuiltInFunction& node); - std::shared_ptr operator()(FunCall& node); - std::shared_ptr operator()(IfStatement& node); - std::shared_ptr operator()(WhileLoop& node); - std::shared_ptr operator()(ForLoop& node); - - st::SymbolTable& symbolTable() { return st; } - - st::SymbolTable& st; - }; - - static std::shared_ptr visitInterpret(NodeVariant astNode, st::SymbolTable& st); - - static int calculateUnaryResult(const std::shared_ptr& node, TokenType op); - static FlexNumber calculateBinaryResult(st::SymbolTable& st, - const std::shared_ptr& left, - const std::shared_ptr& right, - TokenType type); - -private: - st::SymbolTable _symbolTable; - - uint16_t _executionPosition; - uint16_t _executionLine; - - Parser _parser; -}; - -class SymbolTableBuilder -{ -public: - void build(std::shared_ptr tree, st::SymbolTable& st); -}; - -class SymbolTableVisitNode -{ -public: - SymbolTableVisitNode(st::SymbolTable& st) : - st(st) - { - } - ~SymbolTableVisitNode() = default; - - void operator()(BinaryOperation& node); - void operator()(Number& node); - void operator()(UnaryOp& node); - void operator()(Section& node); - void operator()(Assign& node); - void operator()(VariableDeclaration& node); - void operator()(Variable& node); - void operator()(EmptyNode& node); - void operator()(FunDeclaration& node); - void operator()(BuiltInFunction& node); - void operator()(FunCall& node); - void operator()(IfStatement& node); - void operator()(WhileLoop& node); - void operator()(ForLoop& node); - - void visit(NodeVariant astNode); - - std::variant evaluateExpression(const std::shared_ptr node); - std::string getTokenTypeFromVariant(std::variant variant); - - st::SymbolTable& st; -}; diff --git a/interpreter/src/Lexer.cpp b/interpreter/src/Lexer.cpp deleted file mode 100644 index 50d2005..0000000 --- a/interpreter/src/Lexer.cpp +++ /dev/null @@ -1,211 +0,0 @@ -#include "Lexer.h" - -#include - -void Lexer::registerBuiltInMethod(const std::string& functionName) -{ - auto [it, res] = _builtInMethods.insert(functionName); - if (res) { - std::cout << "success" << std::endl; - } else { - std::cout << "lypton" << std::endl; - } -} - -void Lexer::advance() -{ - ++_pos; - if (_pos > static_cast(_text.length()) - 1) { - _currentChar = '\0'; - } else { - _currentChar = _text[_pos]; - } - ++_parsingPosition; -} - -void Lexer::skipWhitespace() -{ - while (_currentChar != '\0' && _currentChar == ' ') { - advance(); - } -} - -void Lexer::skipNewLine() -{ - ++_pos; - if (_pos > static_cast(_text.length()) - 1) { - _currentChar = '\0'; - } else { - _currentChar = _text[_pos]; - } - - ++_parsingLine; - _parsingPosition = 0; -} - -std::variant Lexer::number() -{ - std::string result; - while (_currentChar != '\0' && isdigit(_currentChar)) { - result += _currentChar; - advance(); - } - - if (_currentChar == '.') { - result += _currentChar; - advance(); - - while (_currentChar != '\0' && isdigit(_currentChar)) { - result += _currentChar; - advance(); - } - - return std::stof(result); - } else { - return std::stoi(result); - } -} - -Token Lexer::getNextToken() -{ - while (_currentChar != '\0') { - if (_currentChar == ' ') { - skipWhitespace(); - continue; - } else if (_currentChar == '\n') { - skipNewLine(); - continue; - } else if (_currentChar == '+') { - advance(); - return Token('+', TokenType::PLUS); - } else if (_currentChar == '-') { - advance(); - return Token('-', TokenType::MINUS); - } else if (_currentChar == '*') { - advance(); - return Token('*', TokenType::MULTIPLICATION); - } else if (_currentChar == '/') { - advance(); - return Token('/', TokenType::DIVISION); - } else if (_currentChar == '=' && peekNextChar() == '=') { - advance(); - advance(); - return Token("==", TokenType::COMPARISON); - } else if (_currentChar == '!' && peekNextChar() == '=') { - advance(); - advance(); - return Token("!=", TokenType::NOT_EQUAL); - } else if (_currentChar == '>' && peekNextChar() == '=') { - advance(); - advance(); - return Token(">=", TokenType::GREATER_EQUAL); - } else if (_currentChar == '<' && peekNextChar() == '=') { - advance(); - advance(); - return Token("<=", TokenType::LESS_EQUAL); - } else if (_currentChar == '>') { - advance(); - advance(); - return Token(">", TokenType::GREATER); - } else if (_currentChar == '<') { - advance(); - advance(); - return Token("<", TokenType::LESS); - } else if (_currentChar == '(') { - advance(); - return Token('(', TokenType::LPAREN); - } else if (_currentChar == ')') { - advance(); - return Token(')', TokenType::RPAREN); - } else if (_currentChar == '=') { - advance(); - return Token('=', TokenType::ASSIGN); - } else if (_currentChar == ':') { - advance(); - return Token(':', TokenType::COLON); - } else if (_currentChar == ';') { - advance(); - return Token(';', TokenType::SEMICOLON); - } else if (_currentChar == '.') { - advance(); - return Token('.', TokenType::DOT); - } else if (_currentChar == ',') { - advance(); - return Token(',', TokenType::COMMA); - } else if (isdigit(_currentChar)) { - std::variant num = number(); - if (std::holds_alternative(num)) { - return Token(std::get(num), TokenType::INTEGER); - } else { - return Token(std::get(num), TokenType::FLOATING_NUMBER); - } - } else if (isalpha(_currentChar)) { - return id(); - } else { - - raiseInvalidCharacterError(); - } - } - - return Token(std::nullptr_t(), TokenType::END_OF_FILE); -} - -Token Lexer::peekNextToken() -{ - return Lexer(*this).getNextToken(); -} - -char Lexer::peekNextChar() -{ - return this->_text[this->_pos + 1]; -} - -std::map Lexer::getReservedKeywords() -{ - if (_builtInMethods.empty()) { - std::cout << "chuj bombki szczelyl" << std::endl; - } - for (const auto& fun : _builtInMethods) { - std::cout << fun << std::endl; - } - - std::map RESERVED_KEYWORDS{ - {"START", Token("START", TokenType::START) }, - {"END", Token("END", TokenType::END) }, - {"auto", Token("auto", TokenType::VARIABLE_DECLARATION)}, - {"fun", Token("fun", TokenType::FUN_DECLARATION) }, - {"if", Token("if", TokenType::IF) }, - {"else", Token("else", TokenType::ELSE) }, - {"for", Token("for", TokenType::FOR) }, - {"while", Token("while", TokenType::WHILE) } - }; - - for (const auto& fun : _builtInMethods) { - RESERVED_KEYWORDS[fun] = Token(fun, TokenType::BUILT_IN_FUNCTION); - } - - return RESERVED_KEYWORDS; -} - -Token Lexer::id() -{ - std::string result; - std::map RESERVED_KEYWORDS = getReservedKeywords(); - - while (_currentChar != '\0' && isalnum(_currentChar)) { - result += _currentChar; - advance(); - } - - if (_currentChar == '(' && peekNextChar() == ')') { - result += "()"; - advance(); - advance(); - } - - if (RESERVED_KEYWORDS.count(result)) { - return RESERVED_KEYWORDS.at(result); - } else { - return Token(result, TokenType::ID); - } -} diff --git a/interpreter/src/Lexer.h b/interpreter/src/Lexer.h deleted file mode 100644 index fba033f..0000000 --- a/interpreter/src/Lexer.h +++ /dev/null @@ -1,65 +0,0 @@ -#pragma once - -#include "Token.h" - -#include -#include - -class Lexer -{ -public: - constexpr static size_t VAR_DECLARATION_LENGTH = 5; - constexpr static size_t IF_DECLARATION_LENGTH = 3; - - Lexer() : - _text(std::string()), - _pos(-1), - _currentChar('\0'), - _parsingLine(-1), - _parsingPosition(-1) - { - } - - Lexer(const std::string& text) : - _text(text), - _pos(0), - _currentChar(_text.at(_pos)), - _parsingLine(0), - _parsingPosition(0) - { - } - - void registerBuiltInMethod(const std::string& functionName); - - void raiseInvalidCharacterError() const { throw std::runtime_error("Invalid character"); } - - void advance(); - - void skipWhitespace(); - - void skipNewLine(); - - std::variant number(); - - Token getNextToken(); - Token peekNextToken(); - - char peekNextChar(); - - Token id(); - - int16_t getParsingLine() { return _parsingLine; } - int16_t getParsingPosition() { return _parsingPosition; } - - std::map getReservedKeywords(); - -private: - std::string _text; - int _pos; - char _currentChar; - - std::set _builtInMethods; - - int16_t _parsingLine; - int16_t _parsingPosition; -}; diff --git a/interpreter/src/Parser.cpp b/interpreter/src/Parser.cpp deleted file mode 100644 index 5b4d2ee..0000000 --- a/interpreter/src/Parser.cpp +++ /dev/null @@ -1,379 +0,0 @@ -#include "Parser.h" - -#include - -void Parser::registerBuiltInMethod(const std::string& functionName) -{ - _lexer.registerBuiltInMethod(functionName); -} - -void Parser::raiseParsingError(const std::vector& expectedTokenType) -{ - if (expectedTokenType.empty()) { - throw std::runtime_error("Cannot expect nothing!"); // Should never happen - } - - std::string tokenTypeString = "("; - - for (auto type : expectedTokenType) { - tokenTypeString += Token::typeToString(type) + "|"; - } - tokenTypeString.pop_back(); - tokenTypeString += ")"; - - const std::string message = "Parsing error at line " + std::to_string(lexer().getParsingLine()) + ", position " - + std::to_string(lexer().getParsingPosition()) + ", expected " + tokenTypeString + ", got " - + _currentToken.getParsingInformation(); - - throw std::runtime_error(message); -} - -void Parser::eat(TokenType tokenType) -{ - if (_currentToken.getType() == tokenType) { - _currentToken = _lexer.getNextToken(); - } else { - raiseParsingError({tokenType}); - } -} - -/* -factor : PLUS factor - | MINUS factor - | INTEGER - | FLOATING_NUMBER - | LPAREN expr RPAREN - | variable -*/ -std::shared_ptr Parser::factor() -{ - Token token = _currentToken; - - if (token.getType() == TokenType::PLUS) { - eat(TokenType::PLUS); - - return std::make_shared(token, factor()); - } else if (token.getType() == TokenType::MINUS) { - eat(TokenType::MINUS); - - return std::make_shared(token, factor()); - } else if (token.getType() == TokenType::INTEGER) { - eat(TokenType::INTEGER); - - return std::make_shared(token); - } else if (token.getType() == TokenType::FLOATING_NUMBER) { - eat(TokenType::FLOATING_NUMBER); - - return std::make_shared(token); - } else if (token.getType() == TokenType::LPAREN) { - eat(TokenType::LPAREN); - std::shared_ptr result = expr(); - eat(TokenType::RPAREN); - - auto binOp = std::dynamic_pointer_cast(result); - if (!binOp) { - throw std::runtime_error("Casting to BinaryOperation failed in LPAREN"); - } - - return std::make_shared(*binOp); - } else if (token.getType() == TokenType::ID) { - return variable(); - } else { - raiseParsingError({TokenType::PLUS, TokenType::MINUS, TokenType::INTEGER, TokenType::FLOATING_NUMBER, TokenType::LPAREN, TokenType::ID}); - } - - return std::make_shared(); -} -/* -term : factor ((MUL | DIV) factor)* -*/ -std::shared_ptr Parser::term() -{ - std::shared_ptr node = factor(); - while ((_currentToken.getType() == TokenType::MULTIPLICATION) || (_currentToken.getType() == TokenType::DIVISION)) { - const Token token = _currentToken; - - if (token.getType() == TokenType::MULTIPLICATION) { - eat(TokenType::MULTIPLICATION); - } else if (token.getType() == TokenType::DIVISION) { - eat(TokenType::DIVISION); - } - - const auto left = node; - const auto right = factor(); - node = std::make_shared(left, token, right); - } - - return node; -} - -/* -expr : term ((PLUS | MINUS) term)* -*/ -std::shared_ptr Parser::expr() -{ - std::shared_ptr node = term(); - while ((_currentToken.getType() == TokenType::PLUS) || (_currentToken.getType() == TokenType::MINUS) - || (_currentToken.getType() == TokenType::COMPARISON) || (_currentToken.getType() == TokenType::GREATER) - || (_currentToken.getType() == TokenType::LESS) || (_currentToken.getType() == TokenType::GREATER_EQUAL) - || (_currentToken.getType() == TokenType::LESS_EQUAL)) { - const Token token = _currentToken; - - if (token.getType() == TokenType::PLUS) { - eat(TokenType::PLUS); - } else if (token.getType() == TokenType::MINUS) { - eat(TokenType::MINUS); - } else if (token.getType() == TokenType::COMPARISON) { - eat(TokenType::COMPARISON); - } else if (token.getType() == TokenType::GREATER) { - eat(TokenType::GREATER); - } else if (token.getType() == TokenType::LESS) { - eat(TokenType::LESS); - } else if (token.getType() == TokenType::GREATER_EQUAL) { - eat(TokenType::GREATER_EQUAL); - } else if (token.getType() == TokenType::LESS_EQUAL) { - eat(TokenType::LESS_EQUAL); - } - - const auto left = node; - const auto right = term(); - node = std::make_shared(left, token, right); - } - - return node; -} - -/* -program : section DOT -*/ -std::shared_ptr Parser::program() -{ - std::shared_ptr node = section(); - eat(TokenType::DOT); - return node; -} - -/* -section: START statementList END -*/ -std::shared_ptr Parser::section() -{ - eat(TokenType::START); - std::vector> nodes = statementList(); - eat(TokenType::END); - - return std::make_shared
(nodes); -} - -/* -statement : section - | assignmentStatement - | ifStatement - | variableDeclaration - | functionDeclaration - | builtInFunction - | functionCall - | whileLoop - | forLoop - | empty -*/ -std::shared_ptr Parser::statement() -{ - if (_currentToken.getType() == TokenType::START) { - return section(); - } else if (_currentToken.getType() == TokenType::IF) { - return ifStatement(); - } else if (_currentToken.getType() == TokenType::WHILE) { - return whileStatement(); - } else if (_currentToken.getType() == TokenType::FOR) { - return forStatement(); - } else if (_currentToken.getType() == TokenType::VARIABLE_DECLARATION) { - return variableDeclaration(); - } else if (_currentToken.getType() == TokenType::ID) { - if (_lexer.peekNextToken().getType() == TokenType::LPAREN) { - return functionCall(); - } else { - return assignmentStatement(); - } - } else if (_currentToken.getType() == TokenType::FUN_DECLARATION) { - return functionDeclaration(); - } else if (_currentToken.getType() == TokenType::BUILT_IN_FUNCTION) { - return builtInFunction(); - } else { - return empty(); - } -} - -/* -statementList : statement - | statement SEMI statementList -*/ -std::vector> Parser::statementList() -{ - std::vector> nodes; - - nodes.push_back(statement()); - - while (_currentToken.getType() == TokenType::SEMICOLON) { - eat(TokenType::SEMICOLON); - nodes.push_back(statement()); - } - - if (_currentToken.getType() == TokenType::ID) { - throw std::runtime_error("Variable after semicolon in statement list"); - } - - return nodes; -} - -/* -assignmentStatement : variable ASSIGN expr -*/ -std::shared_ptr Parser::assignmentStatement() -{ - auto left = variable(); - auto token = _currentToken; - eat(TokenType::ASSIGN); - auto right = expr(); - - return std::make_shared(left, token, right); -} - -/* -variableDeclaration : auto ID | auto assignmentStatement -*/ -std::shared_ptr Parser::variableDeclaration() -{ - eat(TokenType::VARIABLE_DECLARATION); - if (_currentToken.getType() == TokenType::ID) { - auto assign = assignmentStatement(); - return std::make_shared(assign, true); - } else { - auto variableNode = variable(); - return std::make_shared(variableNode); - } -} - -/* -variable : ID -*/ -std::shared_ptr Parser::variable() -{ - std::shared_ptr node = std::make_shared(_currentToken); - eat(TokenType::ID); - - return node; -} - -/* -An empty production -*/ -std::shared_ptr Parser::empty() -{ - return std::make_shared(); -} - -/* -ifStatement : IF EXPR COLON SECTION (ELSE COLON) -*/ -std::shared_ptr Parser::ifStatement() -{ - eat(TokenType::IF); - auto condition = expr(); - eat(TokenType::COLON); - auto thenBranch = section(); - std::shared_ptr elseBranch = std::make_shared(); - - if (_currentToken.getType() == TokenType::ELSE) { - eat(TokenType::ELSE); - eat(TokenType::COLON); - elseBranch = section(); - } - - return std::make_shared(condition, thenBranch, elseBranch); -} - -/* -functionDeclaration : FUN ID LPAREN RPAREN COLON START statementList END SEMI -*/ -std::shared_ptr Parser::functionDeclaration() -{ - eat(TokenType::FUN_DECLARATION); - std::string functionName = _currentToken.getStringValue(); - eat(TokenType::ID); - eat(TokenType::LPAREN); - eat(TokenType::RPAREN); - eat(TokenType::COLON); - eat(TokenType::START); - - std::vector> body = statementList(); - - eat(TokenType::END); - - return std::make_shared(functionName, body); -} - -/* -functionCall : ID LPAREN RPAREN -*/ -std::shared_ptr Parser::functionCall() -{ - const std::string functionName = _currentToken.getStringValue(); - eat(TokenType::ID); - eat(TokenType::LPAREN); - eat(TokenType::RPAREN); - - return std::make_shared(functionName); -} - -/* -whileStatement : WHILE EXPR START SECTION -*/ -std::shared_ptr Parser::whileStatement() -{ - eat(TokenType::WHILE); - auto condition = expr(); - eat(TokenType::START); - auto body = section(); - - return std::make_shared(condition, body); -} - -/* -builtInFunction : builtInFunction -*/ -std::shared_ptr Parser::builtInFunction() -{ - auto ct = _currentToken; - eat(TokenType::BUILT_IN_FUNCTION); - - return std::make_shared(ct.getStringValue()); -} - -/* -forStatement : FOR LPAREN variableDeclaration SEMICOLON expr SEMICOLON assignmentStatement RPAREN section -*/ -std::shared_ptr Parser::forStatement() -{ - eat(TokenType::FOR); - eat(TokenType::LPAREN); - auto initialization = variableDeclaration(); - eat(TokenType::SEMICOLON); - auto condition = expr(); - eat(TokenType::SEMICOLON); - auto increment = assignmentStatement(); - eat(TokenType::RPAREN); - auto body = section(); - - return std::make_shared(initialization, condition, increment, body); -} - -std::shared_ptr Parser::parse() -{ - auto node = program(); - if (_currentToken.getType() != TokenType::END_OF_FILE) { - raiseParsingError({TokenType::END_OF_FILE}); - } - - return node; -} \ No newline at end of file diff --git a/interpreter/src/Parser.h b/interpreter/src/Parser.h deleted file mode 100644 index 3c6801e..0000000 --- a/interpreter/src/Parser.h +++ /dev/null @@ -1,71 +0,0 @@ -#pragma once - -#include "Ast.h" -#include "Lexer.h" - -#include -#include - -class Parser -{ -public: - explicit Parser() : - _lexer(Lexer()), - _currentToken(Token(std::nullptr_t(), TokenType::END_OF_FILE)) - { - } - - explicit Parser(const Lexer& lexer) : - _lexer(lexer), - _currentToken(_lexer.getNextToken()) - { - } - - void registerBuiltInMethod(const std::string& functionName); - - void raiseParsingError(const std::vector& expectedTokenType); - - void eat(TokenType tokenType); - - std::shared_ptr factor(); - - std::shared_ptr term(); - - std::shared_ptr expr(); - - std::shared_ptr program(); - - std::shared_ptr section(); - - std::shared_ptr statement(); - - std::vector> statementList(); - - std::shared_ptr assignmentStatement(); - - std::shared_ptr variableDeclaration(); - - std::shared_ptr variable(); - - std::shared_ptr empty(); - - std::shared_ptr parse(); - - std::shared_ptr ifStatement(); - - std::shared_ptr functionDeclaration(); - - std::shared_ptr functionCall(); - - std::shared_ptr builtInFunction(); - - std::shared_ptr whileStatement(); - - std::shared_ptr forStatement(); - - Lexer lexer() { return _lexer; } - -private: - Lexer _lexer; - Token _currentToken; -}; diff --git a/interpreter/src/Token.cpp b/interpreter/src/Token.cpp deleted file mode 100644 index 5b62cfb..0000000 --- a/interpreter/src/Token.cpp +++ /dev/null @@ -1,132 +0,0 @@ -#include "Token.h" - -// static -std::string Token::typeToString(TokenType type) -{ - switch (type) { - case TokenType::INTEGER: - return "INTEGER"; - case TokenType::FLOATING_NUMBER: - return "FLOATING_NUMBER"; - case TokenType::BOOL_VALUE: - return "BOOL_VALUE"; - case TokenType::COLON: - return "COLON"; - case TokenType::SEMICOLON: - return "SEMICOLON"; - case TokenType::PLUS: - return "PLUS"; - case TokenType::MINUS: - return "MINUS"; - case TokenType::MULTIPLICATION: - return "MULTIPLICATION"; - case TokenType::DIVISION: - return "DIVISION"; - case TokenType::LPAREN: - return "LEFT_PARENTHESIS"; - case TokenType::RPAREN: - return "RIGHT_PARENTHESIS"; - case TokenType::END_OF_FILE: - return "END_OF_FILE"; - case TokenType::NONE: - return "NONE"; - case TokenType::ID: - return "ID"; - case TokenType::DOT: - return "DOT"; - case TokenType::COMMA: - return "COMMA"; - case TokenType::ASSIGN: - return "ASSIGN"; - case TokenType::START: - return "START"; - case TokenType::END: - return "END"; - case TokenType::IF: - return "IF"; - case TokenType::ELSE: - return "ELSE"; - case TokenType::FOR: - return "FOR"; - case TokenType::WHILE: - return "WHILE"; - case TokenType::COMPARISON: - return "COMPARISON"; - case TokenType::NOT_EQUAL: - return "NOT_EQUAL"; - case TokenType::GREATER: - return "GREATER"; - case TokenType::LESS: - return "LESS"; - case TokenType::GREATER_EQUAL: - return "GREATER_EQUAL"; - case TokenType::LESS_EQUAL: - return "LESS_EQUAL"; - case TokenType::NEWLINE: - return "NEWLINE"; - case TokenType::VARIABLE_DECLARATION: - return "VARIABLE_DECLARATION"; - case TokenType::FUN_DECLARATION: - return "FUN_DECLARATION"; - case TokenType::BUILT_IN_FUNCTION: - return "BUILT_IN_FUNCTION"; - } - - throw std::runtime_error("TokenType not implemented, string conversion is not possible"); -} - -std::string Token::toDebugString() const -{ - std::stringstream ss; - - if (std::holds_alternative(_value)) { - ss << "TOKEN(" << typeToString(_type) << "," << std::to_string(std::get(_value)) << ")"; - } else if (std::holds_alternative(_value)) { - ss << "TOKEN(" << typeToString(_type) << "," << std::get(_value) << ")"; - } else if (std::holds_alternative(_value)) { - ss << "TOKEN(" << typeToString(_type) << ",NONE)"; - } else if (std::holds_alternative(_value)) { - ss << "TOKEN(" << typeToString(_type) << "," << std::get(_value) << ")"; - } else { - throw std::runtime_error("Variant holds unsupported type '" + std::to_string(_value.index()) + "'"); - } - - return ss.str(); -} - -std::string Token::getParsingInformation() const -{ - if (std::holds_alternative(_value)) { - return std::to_string(std::get(_value)); - } else if (std::holds_alternative(_value)) { - return std::string(1, std::get(_value)); - } else if (std::holds_alternative(_value)) { - return "empty token"; - } else if (std::holds_alternative(_value)) { - return std::get(_value); - } else { - throw std::runtime_error("Variant holds unsupported type '" + std::to_string(_value.index()) + "'"); - } -} - -std::variant Token::getFlexNumber() const -{ - if (std::holds_alternative(_value)) { - return std::get(_value); - } else if (std::holds_alternative(_value)) { - return std::get(_value); - } else if (std::holds_alternative(_value)) { - return std::get(_value); - } else { - throw std::runtime_error("Variant does not hold integer, float or bool inside, cannot return value of it"); - } -} - -std::string Token::getStringValue() const -{ - if (std::holds_alternative(_value)) { - return std::get(_value); - } - - throw std::runtime_error("Variant does not hold std::string inside, cannot return value of it"); -} \ No newline at end of file diff --git a/interpreter/src/Token.h b/interpreter/src/Token.h deleted file mode 100644 index 6c15817..0000000 --- a/interpreter/src/Token.h +++ /dev/null @@ -1,77 +0,0 @@ -#pragma once - -#include -#include -#include -#include -#include - -enum class TokenType : uint8_t -{ - INTEGER = 1, - FLOATING_NUMBER = 2, - PLUS = 3, - MINUS = 4, - MULTIPLICATION = 5, - DIVISION = 6, - LPAREN = 7, - RPAREN = 8, - END_OF_FILE = 9, - NONE = 10, - ID = 11, - START = 12, - END = 13, - ASSIGN = 14, - COLON = 15, - SEMICOLON = 16, - DOT = 17, - COMMA = 18, - IF = 21, - ELSE = 22, - FOR = 23, - WHILE = 24, - COMPARISON = 25, - BOOL_VALUE = 26, - NOT_EQUAL = 27, - GREATER = 28, - LESS = 29, - GREATER_EQUAL = 30, - LESS_EQUAL = 31, - NEWLINE = 32, - VARIABLE_DECLARATION = 33, - FUN_DECLARATION = 34, - BUILT_IN_FUNCTION = 35 -}; - -class Token -{ -public: - static constexpr std::array arithmeticTokenTypes{TokenType::PLUS, TokenType::MINUS, TokenType::MULTIPLICATION, TokenType::DIVISION}; - static constexpr std::array comparisonTokenTypes{ - TokenType::COMPARISON, TokenType::NOT_EQUAL, TokenType::GREATER, TokenType::LESS, TokenType::GREATER_EQUAL, TokenType::LESS_EQUAL}; - - Token() : - _value(std::nullptr_t()), - _type(TokenType::NONE) - { - } - - Token(std::variant value, TokenType type) : - _value(value), - _type(type){}; - - static std::string typeToString(TokenType type); - - std::string toDebugString() const; - - std::string getParsingInformation() const; - - std::variant getFlexNumber() const; - std::string getStringValue() const; - - TokenType getType() const { return _type; } - -private: - std::variant _value; - TokenType _type; -}; diff --git a/interpreter/tests/test_interpreter.h b/interpreter/tests/test_interpreter.h deleted file mode 100644 index 53845cf..0000000 --- a/interpreter/tests/test_interpreter.h +++ /dev/null @@ -1,18 +0,0 @@ -#pragma once - - -#include "tests/test_macros.h" -#include "../CodeInterpreter.h" - -namespace TestInterpreter { - - -TEST_CASE("[Interpreter] 2+2") { - CodeInterpreter interpreter{}; - interpreter.interpret("START auto val1 = 2 + 2 END."); - - CHECK(interpreter.getVariable("val1") == "4"); -} - - -} diff --git a/shaders/2d_frag.glsl b/shaders/2d_frag.glsl deleted file mode 100644 index c9a7c6f..0000000 --- a/shaders/2d_frag.glsl +++ /dev/null @@ -1,46 +0,0 @@ -#version 420 - -#define TEX_NUM 32 // this is the max number of guaranteed textures - -uniform sampler2D textures[TEX_NUM]; -uniform ivec2 tilemapSize[TEX_NUM]; - -in vec2 f_texPos; -flat in int f_tex; -flat in int f_inv; // treated as bool - -out vec4 pixelColor; - - -void main(void) { - - vec3 color; - - // g_tex contains index of texture and index of tile within the texture - // TODO: change to two separate input arguments - int textureIndex = f_tex % TEX_NUM; - int tileIndex = f_tex / TEX_NUM; - - // get (x, y) tile position in tilemap - vec2 tilePos = vec2(tileIndex % tilemapSize[textureIndex].x, tileIndex / tilemapSize[textureIndex].x); - - // get (x, y) position in tilemap - vec2 texPos = (f_texPos + tilePos) / tilemapSize[textureIndex]; - - color = texture(textures[textureIndex], texPos).xyz; - - // invert color - if (f_inv > 0) { - color = 1 - color; - } - - // change colors - // TODO: make customizable - if (color.r == 0) { - color = vec3(0.13f); - } else { - color = vec3(0.67f); - } - - pixelColor = vec4(color, 1.0); -} diff --git a/shaders/2d_geom.glsl b/shaders/2d_geom.glsl deleted file mode 100644 index f67d3b6..0000000 --- a/shaders/2d_geom.glsl +++ /dev/null @@ -1,43 +0,0 @@ -#version 420 - -layout (points) in; -layout (triangle_strip, max_vertices = 4) out; - -in vec2 g_dim[]; -in int g_tex[]; -in int g_inv[]; - -out vec2 f_texPos; -flat out int f_tex; -flat out int f_inv; // treated as bool - - -void main(void) { - - vec4 pos = gl_in[0].gl_Position; - vec2 dim = g_dim[0]; - - f_tex = g_tex[0]; - f_inv = g_inv[0]; - - // draw 4 corners of 2d tile - - gl_Position = pos + vec4(0, 0, 0, 0); - f_texPos = vec2(0, 0); - EmitVertex(); - - gl_Position = pos + vec4(dim.x, 0, 0, 0); - f_texPos = vec2(1, 0); - EmitVertex(); - - gl_Position = pos + vec4(0, -dim.y, 0, 0); - f_texPos = vec2(0, 1); - EmitVertex(); - - gl_Position = pos + vec4(dim.x, -dim.y, 0, 0); - f_texPos = vec2(1, 1); - EmitVertex(); - - EndPrimitive(); - -} \ No newline at end of file diff --git a/shaders/2d_vec.glsl b/shaders/2d_vec.glsl deleted file mode 100644 index 0e9871c..0000000 --- a/shaders/2d_vec.glsl +++ /dev/null @@ -1,49 +0,0 @@ -#version 420 - -layout (location = 0) in vec2 pos; -layout (location = 1) in vec2 dim; -layout (location = 2) in int tex; -layout (location = 3) in int inv; // treated as bool - -uniform vec2 window; -uniform float layer; - -out vec2 g_dim; -out int g_tex; -out int g_inv; // treated as bool - -vec2 map(vec2 value, vec2 min1, vec2 max1, vec2 min2, vec2 max2) { - return min2 + (value - min1) * (max2 - min2) / (max1 - min1); -} - -vec2 map_from_pixel_to_screen(vec2 value) { - - //////////////////////////////////////// - // (0, 0) (window.x, 0) // - // // - // Pixel Space // - // // - // (0, window.y) (window.x, window.y) // - //////////////////////////////////////// - - //////////////////////////////////////// - // (-1, 1) (1, 1) // - // // - // Screen Space // - // // - // (-1, -1) (1, -1) // - //////////////////////////////////////// - - return map(value, vec2(0, 0), window, vec2(-1, 1), vec2(1, -1)); -} - -void main(void) { - - vec2 screenPos = map_from_pixel_to_screen(pos); - - gl_Position = vec4(screenPos, layer, 1); - - g_dim = dim / window * 2; - g_tex = tex; - g_inv = inv; -} diff --git a/shaders/post_frag.glsl b/shaders/post_frag.glsl deleted file mode 100644 index 78f126d..0000000 --- a/shaders/post_frag.glsl +++ /dev/null @@ -1,58 +0,0 @@ -#version 330 core - -in vec2 f_texPos; - -uniform sampler2D colorBuffer; - -out vec4 pixelColor; - -// TODO: rewrite/change -vec2 curveRemapUV(vec2 uv) { - - vec2 curvature = vec2(4.0); - - uv = uv * 2.0-1.0; - vec2 offset = abs(uv.yx) / vec2(curvature.x, curvature.y); - uv = uv + uv * offset * offset; - uv = uv * 0.5 + 0.5; - return uv; -} - -// TODO: rewrite/change -float vignetteMod(inout vec3 color, vec2 uv) { - - float vignette = uv.x * uv.y * (1.0 - uv.x) * (1.0 - uv.y); - vignette = clamp(pow(32.0 * vignette, 0.3), 0.0, 1.0); - return vignette; -} - -// TODO: rewrite/change -float scanlineMod(inout vec3 color, vec2 uv) { - - float scanline = clamp(0.95 + 0.05 * cos(3.14 * 240.0), 0.0, 1.0); - float grille = 0.75 + 0.25 * clamp(1.5 * cos(3.14 * uv.x * 800 * 0.8), 0.0, 1.0); - return scanline * grille * 1.5; -} - -bool isTextureInBounds(vec2 pos) { - return pos.x >= 0.0 && pos.x <= 1.0 && pos.y >= 0.0 && pos.y <= 1.0; -} - -void main() { - - vec2 remappedUV = curveRemapUV(f_texPos); - vec4 pixel = texture(colorBuffer, remappedUV); - - pixel.xyz *= vignetteMod(pixel.xyz, remappedUV); - pixel.xyz *= scanlineMod(pixel.xyz, remappedUV); - - if (!isTextureInBounds(remappedUV)) { - pixel = vec4(0.0); - } - - if (pixel.a == 0) { - discard; - } - - pixelColor = vec4(pixel.xyz, 1.0); -} \ No newline at end of file diff --git a/shaders/post_vec.glsl b/shaders/post_vec.glsl deleted file mode 100644 index e173362..0000000 --- a/shaders/post_vec.glsl +++ /dev/null @@ -1,20 +0,0 @@ -#version 330 core - -out vec2 f_texPos; - -vec2 trianglePoints[6] = vec2[6]( - vec2(1.0, 1.0), - vec2(-1.0, 1.0), - vec2(-1.0, -1.0), - - vec2(-1.0, -1.0), - vec2(1.0, -1.0), - vec2(1.0, 1.0) -); - -void main() { - vec2 vertexPos = trianglePoints[gl_VertexID]; - - gl_Position = vec4(vertexPos, 0.0, 1.0); - f_texPos = 0.5 * (vertexPos + vec2(1.0, 1.0)); -} \ No newline at end of file diff --git a/shaders/tex_quad_frag.glsl b/shaders/tex_quad_frag.glsl deleted file mode 100644 index e69de29..0000000 diff --git a/shaders/tex_quad_vec.glsl b/shaders/tex_quad_vec.glsl deleted file mode 100644 index e69de29..0000000