From: Eduardo Date: Sun, 7 Jul 2024 12:56:33 +0000 (+0200) Subject: first commit X-Git-Url: http://git.edufdez.es/?a=commitdiff_plain;h=b3c0a44c011b3ec8911b6d1484224251637c719b;p=rpg-template.git first commit --- diff --git a/addons/label_font_auto_sizer/LICENSE b/addons/label_font_auto_sizer/LICENSE new file mode 100644 index 0000000..485105b --- /dev/null +++ b/addons/label_font_auto_sizer/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2024 Lescandez + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/addons/label_font_auto_sizer/icon.svg b/addons/label_font_auto_sizer/icon.svg new file mode 100644 index 0000000..5022cea --- /dev/null +++ b/addons/label_font_auto_sizer/icon.svg @@ -0,0 +1,46 @@ + + + + + + + + diff --git a/addons/label_font_auto_sizer/icon.svg.import b/addons/label_font_auto_sizer/icon.svg.import new file mode 100644 index 0000000..06dda9c --- /dev/null +++ b/addons/label_font_auto_sizer/icon.svg.import @@ -0,0 +1,37 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://l40lr56f22vs" +path="res://.godot/imported/icon.svg-678c72dc12642c8e5f0b56a46fd750a5.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://addons/label_font_auto_sizer/icon.svg" +dest_files=["res://.godot/imported/icon.svg-678c72dc12642c8e5f0b56a46fd750a5.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/addons/label_font_auto_sizer/label_auto_sizer.gd b/addons/label_font_auto_sizer/label_auto_sizer.gd new file mode 100644 index 0000000..a4c3f59 --- /dev/null +++ b/addons/label_font_auto_sizer/label_auto_sizer.gd @@ -0,0 +1,236 @@ +@tool +@icon ("res://addons/label_font_auto_sizer/icon.svg") +extends Label +class_name LabelAutoSizer + +#region External variables +@export_group("Size values") +## The number of times the auto sizer will shrink the font to try to fit the text into the control rect. +@export_range(1,100) var _max_steps: int = 4: + set(value): + _max_steps = value + if is_node_ready(): ## This setter gets called when the label enters the tree in the editor, before it's ready, which might not be desirable when using auto translate. + call_deferred("_check_line_count") +## The size value in pixels that the auto sizer will shrink the font during each step. +@export_range(1,100) var _size_per_step: int = 2: + set(value): + _size_per_step = value + if is_node_ready(): ## This setter gets called when the label enters the tree in the editor, before it's ready, which might not be desirable when using auto translate. + call_deferred("_check_line_count") +@export_group("") +@export_group("Debug settings") +## Set this to true if you want to debug the steps happening in the class. The calls are commented so you need to decomment them. +@export var _print_debug_enabled: bool = false +@export_group("") +#endregion + +#region --Internal variables-- +var _base_font_size: int +var _current_font_size: int +var _last_size_state: LABEL_SIZE_STATE = LABEL_SIZE_STATE.IDLE +var _size_just_modified_by_autosizer: bool = false +var _label_settings_just_duplicated: bool = false +var _set_defaults: bool = false + +enum LABEL_SIZE_STATE {JUST_SHRUNK, IDLE, JUST_ENLARGED} +#endregion + + +#region --Signal funcs-- +## Gets called in-editor and in-game. Sets some default values if necessary. +func _ready() -> void: + if !_set_defaults: + set_editor_defaults() + #else: + #_print_debug_message(str(name) + " Base font size: " + str(_base_font_size) + "px.") + if Engine.is_editor_hint(): + call_deferred("_connect_signals") + else: + _check_line_count() + LabelFontAutoSizeManager.register_label(self) + + +## Gets called when there are changes in either the Theme or Label Settings resources. +## Checks if the change was made by the script of by the user and if not, sets the base font size value. +func _on_font_resource_changed() -> void: + #_print_debug_message(str(name) + "' Font resource changed.") + if _size_just_modified_by_autosizer: + _size_just_modified_by_autosizer = false ## Early return because the change wasn't made by the user. + else: + call_deferred("_set_base_font_size") + + +## Gets called whenever the size of the control rect is modified (in editor). Calls the line count check. +func _on_label_rect_resized() -> void: + if !_set_defaults: + return + call_deferred("_check_line_count") + + +## Called by autosize manager whenever the locale_chaged() method is called, as the tr() object changes don't trigger +## the set_text() method of the label, thus the size and line_amount doesn't get checked. +func _on_locale_changed() -> void: + call_deferred("_check_line_count") + + +## Gets called on scene changes and when the label is freed and erases itself from the autosize manager. +func _exit_tree() -> void: + LabelFontAutoSizeManager.erase_label(self) +#endregion + +#region --Private funcs-- +##Only in-editor, keeps stuff in check while manually changing font resources and resizing the label. +func _connect_signals() -> void: + if label_settings != null: + if !label_settings.changed.is_connected(_on_font_resource_changed): + label_settings.changed.connect(_on_font_resource_changed) + if !theme_changed.is_connected(_on_font_resource_changed): + theme_changed.connect(_on_font_resource_changed) + if !resized.is_connected(_on_label_rect_resized): + resized.connect(_on_label_rect_resized) + + +## Text can be changed via either: set_text(value), or _my_label.text = value. Both will trigger a line check. +## This func also checks whenever a new LabelSettings resource is un/loaded. +##**If you're doing some testing/developing, if you are changing the text from withit one of the label classes themselves, do it like self.set_text(value) or self.text = value, othersise it doesn't trigger a size check. +##In a real scenario you wouldn't be changing the text from within the class itself though.** +func _set(property: StringName, value: Variant) -> bool: + match property: + "text": + text = value + call_deferred("_check_line_count") + return true + "label_settings": + if _label_settings_just_duplicated: ## Need to check because this gets called whenever we duplicate the resource as well. + _label_settings_just_duplicated = false + return true + else: + if value != null: + label_settings = value + _label_settings_just_duplicated = true + label_settings = label_settings.duplicate() ## Label Settings are not unique by default, so we it gets duplicated to not override every instance. + if !label_settings.changed.is_connected(_on_font_resource_changed): + label_settings.changed.connect(_on_font_resource_changed) + else: + label_settings = null + call_deferred("_set_base_font_size") + return true + _: + return false + + +## Goes through the resources in the label and sets the base font size value. +## Priority: Label Settings > Override Theme Font Size > Theme Font Size. +func _set_base_font_size() -> void: + if label_settings != null: + _base_font_size = label_settings.font_size + elif get("theme_override_font_sizes/font_size") != null: + _base_font_size = get("theme_override_font_sizes/font_size") + elif get_theme_font_size("font_size") != null: + _base_font_size = get_theme_font_size("font_size") + _current_font_size = _base_font_size + #_print_debug_message(str(name) + " Base font size: " + str(_base_font_size) + "px.") + + +## Makes variables persistent without exposing them in the editor. +## Will get removed in Godot 4.3 with the upcoming @export_storage annotation. +func _get_property_list(): + var properties: Array = [] + var bool_properties: Array[String] = ["_size_just_modified_by_autosizer","_set_defaults"] + for name in bool_properties: + properties.append({ + "name": name, + "type": TYPE_BOOL, + "usage": PROPERTY_USAGE_STORAGE, + }) + var int_properties: Array[String] = ["_base_font_size", "_current_font_size", "_last_size_state"] + for name in int_properties: + properties.append({ + "name": name, + "type": TYPE_INT, + "usage": PROPERTY_USAGE_STORAGE, + }) + return properties + + +## Checks the current font size and amount of lines in the text against the visible lines inside the rect. +## Calls for the shrink or enlarge methods accordingly. +func _check_line_count() -> void: + #_print_debug_message("Checking lines of " + str(name)) + if get_line_count() > get_visible_line_count() and _current_font_size > max(_base_font_size - (_size_per_step * _max_steps), 1): + _shrink_font() + return + elif get_line_count() == get_visible_line_count() and _current_font_size < _base_font_size: + _enlarge_font() + return + _last_size_state = LABEL_SIZE_STATE.IDLE + + +## Makes the font size smaller. Rechecks or stops the cycle depending on the conditions. +func _shrink_font(): + #_print_debug_message(str(name) + "' shrink method called") + _override_font_size(_current_font_size - _size_per_step) + #_print_debug_message(str(name) + " shrunk " + str(_size_per_step) + "px.") + if _last_size_state == LABEL_SIZE_STATE.JUST_ENLARGED: ## To stop infinite cycles. + _last_size_state = LABEL_SIZE_STATE.IDLE + #_print_debug_message(str(name) + " finished shrinking. Was just enlarged.") + else: + _last_size_state = LABEL_SIZE_STATE.JUST_SHRUNK + _check_line_count() + + +## Makes the font size larger. Rechecks/Shrinks/stops the cycle depending on the conditions. +func _enlarge_font(): + #_print_debug_message(str(name) + "' enlarge method called") + _override_font_size(_current_font_size + _size_per_step) + if _last_size_state == LABEL_SIZE_STATE.JUST_SHRUNK: + if get_line_count() > get_visible_line_count(): + _last_size_state = LABEL_SIZE_STATE.JUST_ENLARGED + _shrink_font() + else: ## To stop infinite cycles. + #_print_debug_message(str(name) + " finished enlarging. Was just shrunk.") + _last_size_state = LABEL_SIZE_STATE.IDLE + else: + _last_size_state = LABEL_SIZE_STATE.JUST_ENLARGED + _check_line_count() + + +## Applies the new font size. +func _override_font_size(new_size: int) -> void: + _size_just_modified_by_autosizer = true + if label_settings != null: + label_settings.font_size = new_size + else: + set("theme_override_font_sizes/font_size", new_size) + _current_font_size = new_size + + +## Prints message on console, for debugging was used while developing. You can decomment all the calls to debug. +func _print_debug_message(message: String) -> void: + if _print_debug_enabled: + print(message) +#endregion + + +#region --Public funcs-- +## Gets called in-editor and sets the default values. +func set_editor_defaults() -> void: + _set_defaults = true + clip_text = true + autowrap_mode = TextServer.AUTOWRAP_WORD_SMART + if label_settings != null: + label_settings = label_settings.duplicate() ## These are not unique by default, so we it gets duplicated to not override every instance. + label_settings.changed.connect(_on_font_resource_changed) + call_deferred("_set_base_font_size") + set_deferred("_current_font_size", _base_font_size) + call_deferred("_connect_signals") + + +## Text can be changed via either: set_text(value), or _my_label.text = value. Both will trigger a line check. +##**If you're doing some testing/developing, if you are changing the text from withit one of the label classes themselves, do it like self.set_text(value) or self.text = value, othersise it doesn't trigger a size check. +##In a real scenario you wouldn't be changing the text from within the class itself though.** +func set_text(new_text: String) -> void: + text = new_text + call_deferred("_check_line_count") +#endregion + diff --git a/addons/label_font_auto_sizer/label_font_auto_size_manager.gd b/addons/label_font_auto_sizer/label_font_auto_size_manager.gd new file mode 100644 index 0000000..7c905b9 --- /dev/null +++ b/addons/label_font_auto_sizer/label_font_auto_size_manager.gd @@ -0,0 +1,21 @@ +@tool +extends Node +class_name LabelFontAutoSizeManager + +static var _active_labels : Array[Control] + + +static func register_label(label: Control) -> void: + _active_labels.append(label) + + +static func erase_label(label: Control) -> void: + _active_labels.erase(label) + + +## This function is to be called by the user after manually changing the locale of the game. +## Will cause to check the size of all the active labels, useful after changing the language of text pieces. +## Call it with: LabelFotAutoSizeManager.locale_changed() +static func locale_chaged() -> void: + for label: Control in _active_labels: + label._on_locale_changed() diff --git a/addons/label_font_auto_sizer/plugin.cfg b/addons/label_font_auto_sizer/plugin.cfg new file mode 100644 index 0000000..cc12e56 --- /dev/null +++ b/addons/label_font_auto_sizer/plugin.cfg @@ -0,0 +1,7 @@ +[plugin] + +name="LabelFontAutoSizer - Godot4" +description="Tool that makes labels text fit into the rect." +author="Lescandez" +version="1.0.2" +script="plugin.gd" diff --git a/addons/label_font_auto_sizer/plugin.gd b/addons/label_font_auto_sizer/plugin.gd new file mode 100644 index 0000000..2d65d83 --- /dev/null +++ b/addons/label_font_auto_sizer/plugin.gd @@ -0,0 +1,101 @@ +@tool +extends EditorPlugin + +var _current_root: Node + + +## Class setup. +func _ready() -> void: + await _set_root(EditorInterface.get_edited_scene_root()) + scene_changed.connect(_on_scene_changed.bind()) + call_deferred("_check_nodes_in_scene") + + +## Called whenever a new node is added to the scene. Calls for a label check. +func _on_child_entered_tree(node: Node) -> void: + if !node.child_entered_tree.is_connected(_on_child_entered_tree.bind()): ##Keeps checking for nested children, looking for labels. + node.child_entered_tree.connect(_on_child_entered_tree.bind()) + if !node.child_exiting_tree.is_connected(_on_child_exiting_tree.bind()): + node.child_exiting_tree.connect(_on_child_exiting_tree.bind()) + _check_label(node) + + +## Called when changing scene. Gets the new root and calls for a node scan in the tree. +func _on_scene_changed(root: Node) -> void: + if _current_root != null and is_instance_valid(_current_root): + if _current_root.child_entered_tree.is_connected(_on_child_entered_tree.bind()): + _current_root.child_entered_tree.disconnect(_on_child_entered_tree.bind()) + _current_root = root + await _set_root(root) + call_deferred("_check_nodes_in_scene") + + +## Gets called whenever any node is deleted, and when user changes scene. +func _on_child_exiting_tree(node: Node) -> void: + if node.child_exiting_tree.is_connected(_on_child_exiting_tree): + node.child_exiting_tree.disconnect(_on_child_exiting_tree) + if node.child_entered_tree.is_connected(_on_child_entered_tree): + node.child_entered_tree.disconnect(_on_child_entered_tree) + + +## Gets called whenever a label is deleted, and whenever user changes scene. +func _on_label_exiting_tree(label: Node) -> void: + if label.tree_exiting.is_connected(_on_label_exiting_tree.bind(label)): + label.tree_exiting.disconnect(_on_label_exiting_tree.bind(label)) + if label.script_changed.is_connected(_on_label_script_changed.bind(label)): + label.script_changed.disconnect(_on_label_script_changed.bind(label)) + + +## Gets called whenever any label on the scene gets a (new) script or is removed from it. +## If it finds an autosizer added to the label, it sets the default values automatically (basically the reason of this class). +func _on_label_script_changed(label: Node): + var script: Script = label.get_script() + if script == null: + return + elif script.resource_path.ends_with("label_auto_sizer.gd"): + label.set_editor_defaults() + + +## Sets the current scene root and listens for nodes entering in the tree. +func _set_root(root: Node) -> void: + _current_root = root + if _current_root == null: + await _check_root() + if !_current_root.child_entered_tree.is_connected(_on_child_entered_tree.bind()): + _current_root.child_entered_tree.connect(_on_child_entered_tree.bind()) + + +## If no root is found (all scenes are closed) it keeps checking until one is opened. +func _check_root() -> void: + while _current_root == null: + await get_tree().process_frame + _current_root = EditorInterface.get_edited_scene_root() + + +## Goes through every node in the scene, children included. Calls for a label check. +## get_children(true) is not returning nested children so it needs to be done manually. +func _check_nodes_in_scene() -> void: + var nodes_to_check: Array[Node] = [] + nodes_to_check.append(_current_root) + while nodes_to_check.size() > 0: + var current_node: Node = nodes_to_check.pop_front() + if !current_node.child_entered_tree.is_connected(_on_child_entered_tree.bind()): + current_node.child_entered_tree.connect(_on_child_entered_tree.bind()) + if !current_node.child_exiting_tree.is_connected(_on_child_exiting_tree.bind()): + current_node.child_exiting_tree.connect(_on_child_exiting_tree.bind()) + _check_label(current_node) + if current_node.get_child_count() > 0: + for child_node in current_node.get_children(): + nodes_to_check.append(child_node) + + +## Checks if the node is a label, starts listening for its attatched script. +## If the node has the script already attached, it sets the defaults directly. +func _check_label(node: Node) -> void: + if node is Label or node is RichTextLabel: + if !node.tree_exiting.is_connected(_on_label_exiting_tree.bind(node)): + node.tree_exiting.connect(_on_label_exiting_tree.bind(node)) + if !node.script_changed.is_connected(_on_label_script_changed.bind(node)): + node.script_changed.connect(_on_label_script_changed.bind(node)) + if node is LabelAutoSizer or node is RichLabelAutoSizer: + node.set_editor_defaults() diff --git a/addons/label_font_auto_sizer/rich_label_auto_sizer.gd b/addons/label_font_auto_sizer/rich_label_auto_sizer.gd new file mode 100644 index 0000000..cb482a6 --- /dev/null +++ b/addons/label_font_auto_sizer/rich_label_auto_sizer.gd @@ -0,0 +1,218 @@ +@tool +@icon ("res://addons/label_font_auto_sizer/icon.svg") +extends RichTextLabel +class_name RichLabelAutoSizer + +#region External variables +@export_group("Size values") +## The number of times the auto sizer will shrink the font to try to fit the text into the control rect. +@export_range(1,100) var _max_steps: int = 4: + set(value): + _max_steps = value + if is_node_ready(): ## This setter gets called when the label enters the tree in the editor, before it's ready, which might not be desirable when using auto translate. + call_deferred("_check_line_count") +## The size value in pixels that the auto sizer will shrink the font during each step. +@export_range(1,100) var _size_per_step: int = 2: + set(value): + _size_per_step = value + if is_node_ready(): ## This setter gets called when the label enters the tree in the editor, before it's ready, which might not be desirable when using auto translate. + call_deferred("_check_line_count") +@export_group("") +@export_group("Debug settings") +## Set this to true if you want to debug the steps happening in the class. The calls are commented so you need to decomment them. +@export var _print_debug_enabled: bool = false +@export_group("") +#endregion + +#region --Internal variables-- +var _base_font_size: int +var _current_font_size: int +var _last_size_state: LABEL_SIZE_STATE = LABEL_SIZE_STATE.IDLE +var _size_just_modified_by_autosizer: bool = false +var _label_settings_just_duplicated: bool = false +var _set_defaults: bool = false + +enum LABEL_SIZE_STATE {JUST_SHRUNK, IDLE, JUST_ENLARGED} +#endregion + + + +#region --Signal funcs-- +## Gets called in-editor and in-game. Sets some default values if necessary. +func _ready() -> void: + if !_set_defaults: + set_editor_defaults() + #else: + #_print_debug_message(str(name) + " Base font size: " + str(_base_font_size) + "px.") + if Engine.is_editor_hint(): + call_deferred("_connect_signals") + else: + _check_line_count() + LabelFontAutoSizeManager.register_label(self) + + +## Gets called when there are changes in either the Theme or Label Settings resources. +## Checks if the change was made by the script of by the user and if not, sets the base font size value. +func _on_font_resource_changed() -> void: + #_print_debug_message(str(name) + "' Font resource changed.") + if _size_just_modified_by_autosizer: + _size_just_modified_by_autosizer = false ## Early return because the change wasn't made by the user. + else: + call_deferred("_set_base_font_size") + + +## Gets called whenever the size of the control rect is modified (in editor). Calls the line count check. +func _on_label_rect_resized() -> void: + if !_set_defaults: + return + call_deferred("_check_line_count") + + +## Called by autosize manager whenever the locale_chaged() method is called, as the tr() object changes don't trigger +## the set_text() method of the label, thus the size and line_amount doesn't get checked. +func _on_locale_changed() -> void: + call_deferred("_check_line_count") + + +## Gets called on scene changes and when the label is freed and erases itself from the autosize manager. +func _exit_tree() -> void: + LabelFontAutoSizeManager.erase_label(self) +#endregion + +#region --Private funcs-- +##Only in-editor, keeps stuff in check while manually changing font resources and resizing the label. +func _connect_signals() -> void: + if !theme_changed.is_connected(_on_font_resource_changed): + theme_changed.connect(_on_font_resource_changed) + if !resized.is_connected(_on_label_rect_resized): + resized.connect(_on_label_rect_resized) + + +## Text can be changed via either: set_text(value), or _my_label.text = value. Both will trigger a line check. +##**If you're doing some testing/developing, if you are changing the text from withit one of the label classes themselves, do it like self.set_text(value) or self.text = value, othersise it doesn't trigger a size check. +##In a real scenario you wouldn't be changing the text from within the class itself though.** +func _set(property: StringName, value: Variant) -> bool: + match property: + "text": + text = value + call_deferred("_check_line_count") + return true + _: + return false + + +## Goes through the resources in the label and sets the base font size value. +## Priority: Override Theme Font Size > Theme Font Size. (RichTextLabels don't allow Label Settings) +func _set_base_font_size() -> void: + if get("theme_override_font_sizes/normal_font_size") != null: + _base_font_size = get("theme_override_font_sizes/normal_font_size") + elif get_theme_font_size("normal_font_size") != null: + _base_font_size = get_theme_font_size("normal_font_size") + _current_font_size = _base_font_size + #_print_debug_message(str(name) + " Base font size: " + str(_base_font_size) + "px.") + + +## Makes variables persistent without exposing them in the editor. +## Will get removed in Godot 4.3 with the upcoming @export_storage annotation. +func _get_property_list(): + var properties: Array = [] + var bool_properties: Array[String] = ["_size_just_modified_by_autosizer","_set_defaults"] + for name in bool_properties: + properties.append({ + "name": name, + "type": TYPE_BOOL, + "usage": PROPERTY_USAGE_STORAGE, + }) + var int_properties: Array[String] = ["_base_font_size", "_current_font_size", "_last_size_state"] + for name in int_properties: + properties.append({ + "name": name, + "type": TYPE_INT, + "usage": PROPERTY_USAGE_STORAGE, + }) + return properties + + +## Checks the current font size and amount of lines in the text against the visible lines inside the rect. +## Calls for the shrink or enlarge methods accordingly. +func _check_line_count() -> void: + #_print_debug_message("Checking lines of " + str(name)) + if get_content_height() > size.y or get_content_width() > size.x: + if _current_font_size > max(_base_font_size - (_size_per_step * _max_steps), 1): + _shrink_font() + return + elif get_content_height() <= size.y or get_content_width() <= size.x: + if _current_font_size < _base_font_size: + _enlarge_font() + return + _last_size_state = LABEL_SIZE_STATE.IDLE + + +## Makes the font size smaller. Rechecks or stops the cycle depending on the conditions. +func _shrink_font(): + #_print_debug_message(str(name) + "' shrink method called") + _override_font_size(_current_font_size - _size_per_step) + #_print_debug_message(str(name) + " shrunk " + str(_size_per_step) + "px.") + if _last_size_state == LABEL_SIZE_STATE.JUST_ENLARGED: ## To stop infinite cycles. + _last_size_state = LABEL_SIZE_STATE.IDLE + #_print_debug_message(str(name) + " finished shrinking. Was just enlarged.") + else: + _last_size_state = LABEL_SIZE_STATE.JUST_SHRUNK + _check_line_count() + + +## Makes the font size larger. Rechecks/Shrinks/stops the cycle depending on the conditions. +func _enlarge_font(): + #_print_debug_message(str(name) + "' enlarge method called") + _override_font_size(_current_font_size + _size_per_step) + if _last_size_state == LABEL_SIZE_STATE.JUST_SHRUNK: + if get_content_height() > size.y: + _last_size_state = LABEL_SIZE_STATE.JUST_ENLARGED + _shrink_font() + else: ## To stop infinite cycles. + #_print_debug_message(str(name) + " finished enlarging. Was just shrunk.") + _last_size_state = LABEL_SIZE_STATE.IDLE + else: + _last_size_state = LABEL_SIZE_STATE.JUST_ENLARGED + _check_line_count() + + +## Applies the new font size. +func _override_font_size(new_size: int) -> void: + _size_just_modified_by_autosizer = true + set("theme_override_font_sizes/normal_font_size", new_size) + _current_font_size = new_size + + +## Prints message on console, for debugging was used while developing. You can decomment all the calls to debug. +func _print_debug_message(message: String) -> void: + if _print_debug_enabled: + print(message) +#endregion + + +#region --Public funcs-- +## Gets called in-editor and sets the default values. +func set_editor_defaults() -> void: + _set_defaults = true + clip_contents = true + fit_content = false + scroll_active = false + autowrap_mode = TextServer.AUTOWRAP_WORD_SMART + call_deferred("_set_base_font_size") + call_deferred("_set_current_font_size_to_base") + call_deferred("_connect_signals") + +## For some reason using set_deferred() wasn't doing it after setting the base size, so this gets called deferred. +func _set_current_font_size_to_base() -> void: + _current_font_size = _base_font_size + + +## Text can be changed via either: set_text(value), or _my_label.text = value. Both will trigger a line check. +##**If you're doing some testing/developing, if you are changing the text from withit one of the label classes themselves, do it like self.set_text(value) or self.text = value, othersise it doesn't trigger a size check. +##In a real scenario you wouldn't be changing the text from within the class itself though.** +func set_text(new_text: String) -> void: + text = new_text + call_deferred("_check_line_count") +#endregion + diff --git a/addons/phantom_camera/assets/PhantomCameraBtnPrimaryDefault.png b/addons/phantom_camera/assets/PhantomCameraBtnPrimaryDefault.png new file mode 100644 index 0000000..3082789 Binary files /dev/null and b/addons/phantom_camera/assets/PhantomCameraBtnPrimaryDefault.png differ diff --git a/addons/phantom_camera/assets/PhantomCameraBtnPrimaryDefault.png.import b/addons/phantom_camera/assets/PhantomCameraBtnPrimaryDefault.png.import new file mode 100644 index 0000000..ad3a214 --- /dev/null +++ b/addons/phantom_camera/assets/PhantomCameraBtnPrimaryDefault.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://censw3w53gldn" +path="res://.godot/imported/PhantomCameraBtnPrimaryDefault.png-fcf3696b583a82b1078609a5bfd648f5.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://addons/phantom_camera/assets/PhantomCameraBtnPrimaryDefault.png" +dest_files=["res://.godot/imported/PhantomCameraBtnPrimaryDefault.png-fcf3696b583a82b1078609a5bfd648f5.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/addons/phantom_camera/assets/PhantomCameraBtnPrimaryHover.png b/addons/phantom_camera/assets/PhantomCameraBtnPrimaryHover.png new file mode 100644 index 0000000..1e0c31a Binary files /dev/null and b/addons/phantom_camera/assets/PhantomCameraBtnPrimaryHover.png differ diff --git a/addons/phantom_camera/assets/PhantomCameraBtnPrimaryHover.png.import b/addons/phantom_camera/assets/PhantomCameraBtnPrimaryHover.png.import new file mode 100644 index 0000000..dd6f1a4 --- /dev/null +++ b/addons/phantom_camera/assets/PhantomCameraBtnPrimaryHover.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://pvr8mbvl1onm" +path="res://.godot/imported/PhantomCameraBtnPrimaryHover.png-3d2e4d225f6a86ce8a9c981ee7926a16.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://addons/phantom_camera/assets/PhantomCameraBtnPrimaryHover.png" +dest_files=["res://.godot/imported/PhantomCameraBtnPrimaryHover.png-3d2e4d225f6a86ce8a9c981ee7926a16.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/addons/phantom_camera/examples/credits.txt b/addons/phantom_camera/examples/credits.txt new file mode 100644 index 0000000..d5e949a --- /dev/null +++ b/addons/phantom_camera/examples/credits.txt @@ -0,0 +1,7 @@ +##################### +EXAMPLE ASSET CREDITS +##################### + +# level_spritesheet +https://opengameart.org/content/a-platformer-in-the-forest +https://opengameart.org/users/buch diff --git a/addons/phantom_camera/examples/example_scenes/2D-4.3/2d_example_scene.tscn b/addons/phantom_camera/examples/example_scenes/2D-4.3/2d_example_scene.tscn new file mode 100644 index 0000000..5234e31 --- /dev/null +++ b/addons/phantom_camera/examples/example_scenes/2D-4.3/2d_example_scene.tscn @@ -0,0 +1,641 @@ +[gd_scene load_steps=12 format=3 uid="uid://ohwjxojqcj63"] + +[ext_resource type="Texture2D" uid="uid://c77npili4pel4" path="res://addons/phantom_camera/examples/textures/2D/level_spritesheet.png" id="1_foq54"] +[ext_resource type="PackedScene" uid="uid://dg7rhrymsrrrm" path="res://addons/phantom_camera/examples/ui/ui_inventory.tscn" id="2_kmt5y"] +[ext_resource type="PackedScene" uid="uid://iq5xd1ob1res" path="res://addons/phantom_camera/examples/ui/ui_sign.tscn" id="3_1cmgi"] +[ext_resource type="FontFile" uid="uid://c4mm3of2mc8o5" path="res://addons/phantom_camera/fonts/Nunito-Black.ttf" id="4_4dx73"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/phantom_camera_host/phantom_camera_host.gd" id="5_w68mw"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/phantom_camera/phantom_camera_2d.gd" id="6_i3g4f"] +[ext_resource type="Resource" uid="uid://euybd2w0bax" path="res://addons/phantom_camera/examples/resources/tween/player_phantom_camera_2d_tween.tres" id="7_j2i8l"] +[ext_resource type="PackedScene" uid="uid://7kh0xydx0b1o" path="res://addons/phantom_camera/examples/example_scenes/2D/sub_scenes/playable_character_2d.tscn" id="8_ytjsp"] +[ext_resource type="Script" path="res://addons/phantom_camera/examples/scripts/2D/player_character_body_2d_4.3.gd" id="9_o4c4h"] + +[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_easgx"] +texture = ExtResource("1_foq54") +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_1/linear_velocity = Vector2(0, 0) +0:0/0/physics_layer_1/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 +1:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +1:0/0/physics_layer_1/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 +2:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +2:0/0/physics_layer_1/angular_velocity = 0.0 +3:0/0 = 0 +3:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:0/0/physics_layer_0/angular_velocity = 0.0 +3:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:0/0/physics_layer_1/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 +4:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:0/0/physics_layer_1/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 +5:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +5:0/0/physics_layer_1/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 +6:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +6:0/0/physics_layer_1/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 +7:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +7:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:0/0/physics_layer_1/angular_velocity = 0.0 +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_1/linear_velocity = Vector2(0, 0) +0:1/0/physics_layer_1/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 +1:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +1:1/0/physics_layer_1/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_1/linear_velocity = Vector2(0, 0) +2:1/0/physics_layer_1/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 +3:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:1/0/physics_layer_1/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 +4:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:1/0/physics_layer_1/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 +5:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +5:1/0/physics_layer_1/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 +7:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +7:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:1/0/physics_layer_1/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 +2:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +2:2/0/physics_layer_1/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 +3:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:2/0/physics_layer_1/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 +4:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:2/0/physics_layer_1/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 +7:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +7:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:2/0/physics_layer_1/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 +3:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:3/0/physics_layer_1/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 +4:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:3/0/physics_layer_1/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 +5:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +5:3/0/physics_layer_1/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 +7:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +7:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:3/0/physics_layer_1/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 +3:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:4/0/physics_layer_1/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 +4:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:4/0/physics_layer_1/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 +5:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +5:4/0/physics_layer_1/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 +7:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:4/0/physics_layer_1/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 +3:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:5/0/physics_layer_1/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 +4:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:5/0/physics_layer_1/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 +7:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:5/0/physics_layer_1/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 +3:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:6/0/physics_layer_1/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 +4:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:6/0/physics_layer_1/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 +7:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:6/0/physics_layer_1/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 +2:7/0/physics_layer_1/linear_velocity = Vector2(0, 0) +2:7/0/physics_layer_1/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 +3:7/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:7/0/physics_layer_1/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 +4:7/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:7/0/physics_layer_1/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 +5:7/0/physics_layer_1/linear_velocity = Vector2(0, 0) +5:7/0/physics_layer_1/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 +8:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +8:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:0/0/physics_layer_1/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 +9:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +9:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:0/0/physics_layer_1/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) +10:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:0/0/physics_layer_1/angular_velocity = 0.0 +11:0/0 = 0 +11:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:0/0/physics_layer_0/angular_velocity = 0.0 +11:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +11:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:0/0/physics_layer_1/angular_velocity = 0.0 +12:0/0 = 0 +12:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:0/0/physics_layer_0/angular_velocity = 0.0 +12:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:0/0/physics_layer_1/angular_velocity = 0.0 +13:0/0 = 0 +13:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:0/0/physics_layer_0/angular_velocity = 0.0 +13:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +13:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:0/0/physics_layer_1/angular_velocity = 0.0 +14:0/0 = 0 +14:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:0/0/physics_layer_0/angular_velocity = 0.0 +14:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:0/0/physics_layer_1/angular_velocity = 0.0 +14:0/0/physics_layer_1/polygon_0/points = PackedVector2Array(8, -8, 8, 8, -8, 8) +14:0/0/custom_data_0 = &"Sign" +15:0/0 = 0 +15:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:0/0/physics_layer_0/angular_velocity = 0.0 +15:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:0/0/physics_layer_1/angular_velocity = 0.0 +16:0/0 = 0 +16:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:0/0/physics_layer_0/angular_velocity = 0.0 +16:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:0/0/physics_layer_1/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 +8:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +8:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:1/0/physics_layer_1/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 +9:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +9:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:1/0/physics_layer_1/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) +10:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:1/0/physics_layer_1/angular_velocity = 0.0 +11:1/0 = 0 +11:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:1/0/physics_layer_0/angular_velocity = 0.0 +11:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +11:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:1/0/physics_layer_1/angular_velocity = 0.0 +12:1/0 = 0 +12:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:1/0/physics_layer_0/angular_velocity = 0.0 +12:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:1/0/physics_layer_1/angular_velocity = 0.0 +13:1/0 = 0 +13:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:1/0/physics_layer_0/angular_velocity = 0.0 +13:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +13:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:1/0/physics_layer_1/angular_velocity = 0.0 +14:1/0 = 0 +14:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:1/0/physics_layer_0/angular_velocity = 0.0 +14:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:1/0/physics_layer_1/angular_velocity = 0.0 +15:1/0 = 0 +15:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:1/0/physics_layer_0/angular_velocity = 0.0 +15:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:1/0/physics_layer_1/angular_velocity = 0.0 +16:1/0 = 0 +16:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:1/0/physics_layer_0/angular_velocity = 0.0 +16:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:1/0/physics_layer_1/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 +8:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +8:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:2/0/physics_layer_1/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 +9:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +9:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:2/0/physics_layer_1/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) +10:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:2/0/physics_layer_1/angular_velocity = 0.0 +11:2/0 = 0 +11:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:2/0/physics_layer_0/angular_velocity = 0.0 +11:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +11:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:2/0/physics_layer_1/angular_velocity = 0.0 +12:2/0 = 0 +12:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:2/0/physics_layer_0/angular_velocity = 0.0 +12:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:2/0/physics_layer_1/angular_velocity = 0.0 +13:2/0 = 0 +13:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:2/0/physics_layer_0/angular_velocity = 0.0 +13:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +13:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:2/0/physics_layer_1/angular_velocity = 0.0 +14:2/0 = 0 +14:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:2/0/physics_layer_0/angular_velocity = 0.0 +14:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:2/0/physics_layer_1/angular_velocity = 0.0 +15:2/0 = 0 +15:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:2/0/physics_layer_0/angular_velocity = 0.0 +15:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:2/0/physics_layer_1/angular_velocity = 0.0 +16:2/0 = 0 +16:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:2/0/physics_layer_0/angular_velocity = 0.0 +16:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:2/0/physics_layer_1/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 +8:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +8:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:3/0/physics_layer_1/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 +9:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +9:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:3/0/physics_layer_1/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) +10:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:3/0/physics_layer_1/angular_velocity = 0.0 +11:3/0 = 0 +11:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:3/0/physics_layer_0/angular_velocity = 0.0 +11:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:3/0/physics_layer_1/angular_velocity = 0.0 +12:3/0 = 0 +12:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:3/0/physics_layer_0/angular_velocity = 0.0 +12:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:3/0/physics_layer_1/angular_velocity = 0.0 +13:3/0 = 0 +13:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:3/0/physics_layer_0/angular_velocity = 0.0 +13:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +13:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:3/0/physics_layer_1/angular_velocity = 0.0 +14:3/0 = 0 +14:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:3/0/physics_layer_0/angular_velocity = 0.0 +14:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:3/0/physics_layer_1/angular_velocity = 0.0 +15:3/0 = 0 +15:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:3/0/physics_layer_0/angular_velocity = 0.0 +15:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:3/0/physics_layer_1/angular_velocity = 0.0 +16:3/0 = 0 +16:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:3/0/physics_layer_0/angular_velocity = 0.0 +16:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:3/0/physics_layer_1/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 +8:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:4/0/physics_layer_1/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 +9:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:4/0/physics_layer_1/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_1/linear_velocity = Vector2(0, 0) +10:4/0/physics_layer_1/angular_velocity = 0.0 +11:4/0 = 0 +11:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:4/0/physics_layer_0/angular_velocity = 0.0 +11:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-7, 2.5, -5, -2, -2.5, -5, 2, -7, 8, -8, 8, 8, -8, 8) +11:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:4/0/physics_layer_1/angular_velocity = 0.0 +12:4/0 = 0 +12:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:4/0/physics_layer_0/angular_velocity = 0.0 +12:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:4/0/physics_layer_1/angular_velocity = 0.0 +13:4/0 = 0 +13:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:4/0/physics_layer_0/angular_velocity = 0.0 +13:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 0, -6, 4, -1.5, 6.5, 1.5, 8, 8, -8, 8) +13:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:4/0/physics_layer_1/angular_velocity = 0.0 +14:4/0 = 0 +14:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:4/0/physics_layer_0/angular_velocity = 0.0 +14:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:4/0/physics_layer_1/angular_velocity = 0.0 +14:4/0/physics_layer_1/polygon_0/points = PackedVector2Array(-8, -8, -8, 8, 8, 8, 8, -8) +14:4/0/custom_data_0 = &"Inventory" +15:4/0 = 0 +15:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:4/0/physics_layer_0/angular_velocity = 0.0 +15:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:4/0/physics_layer_1/angular_velocity = 0.0 +16:4/0 = 0 +16:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:4/0/physics_layer_0/angular_velocity = 0.0 +16:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:4/0/physics_layer_1/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 +8:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:5/0/physics_layer_1/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 +9:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:5/0/physics_layer_1/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_1/linear_velocity = Vector2(0, 0) +10:5/0/physics_layer_1/angular_velocity = 0.0 +11:5/0 = 0 +11:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:5/0/physics_layer_0/angular_velocity = 0.0 +11:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +11:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:5/0/physics_layer_1/angular_velocity = 0.0 +12:5/0 = 0 +12:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:5/0/physics_layer_0/angular_velocity = 0.0 +12:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:5/0/physics_layer_1/angular_velocity = 0.0 +13:5/0 = 0 +13:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:5/0/physics_layer_0/angular_velocity = 0.0 +13:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +13:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:5/0/physics_layer_1/angular_velocity = 0.0 +14:5/0 = 0 +14:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:5/0/physics_layer_0/angular_velocity = 0.0 +14:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:5/0/physics_layer_1/angular_velocity = 0.0 +15:5/0 = 0 +15:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:5/0/physics_layer_0/angular_velocity = 0.0 +15:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:5/0/physics_layer_1/angular_velocity = 0.0 +16:5/0 = 0 +16:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:5/0/physics_layer_0/angular_velocity = 0.0 +16:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:5/0/physics_layer_1/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 +8:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:6/0/physics_layer_1/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 +9:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:6/0/physics_layer_1/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_1/linear_velocity = Vector2(0, 0) +10:6/0/physics_layer_1/angular_velocity = 0.0 +11:6/0 = 0 +11:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:6/0/physics_layer_0/angular_velocity = 0.0 +11:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, 1, 6.5, -3, 3, -6.5, -1.5) +11:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:6/0/physics_layer_1/angular_velocity = 0.0 +12:6/0 = 0 +12:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:6/0/physics_layer_0/angular_velocity = 0.0 +12:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:6/0/physics_layer_1/angular_velocity = 0.0 +13:6/0 = 0 +13:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:6/0/physics_layer_0/angular_velocity = 0.0 +13:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 6, -0.5, 3, 3.5, -1.5, 6.5, -8, 8) +13:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:6/0/physics_layer_1/angular_velocity = 0.0 +14:6/0 = 0 +14:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:6/0/physics_layer_0/angular_velocity = 0.0 +14:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:6/0/physics_layer_1/angular_velocity = 0.0 +15:6/0 = 0 +15:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:6/0/physics_layer_0/angular_velocity = 0.0 +15:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:6/0/physics_layer_1/angular_velocity = 0.0 +16:6/0 = 0 +16:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:6/0/physics_layer_0/angular_velocity = 0.0 +16:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:6/0/physics_layer_1/angular_velocity = 0.0 + +[sub_resource type="TileSet" id="TileSet_kf7eg"] +physics_layer_0/collision_layer = 1 +physics_layer_1/collision_layer = 2 +physics_layer_1/collision_mask = 2 +custom_data_layer_0/name = "Type" +custom_data_layer_0/type = 21 +sources/0 = SubResource("TileSetAtlasSource_easgx") + +[node name="ExampleScene2D2" type="Node2D"] + +[node name="Background" type="CanvasLayer" parent="."] +layer = -3 + +[node name="ColorRect" type="ColorRect" parent="Background"] +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_left = -311.0 +offset_top = -173.0 +offset_right = 981.0 +offset_bottom = 548.0 +grow_horizontal = 2 +grow_vertical = 2 +auto_translate = false +localize_numeral_system = false +color = Color(0.137255, 0.14902, 0.196078, 1) + +[node name="TileMap" type="TileMap" parent="."] +z_index = -1 +scale = Vector2(3, 3) +tile_set = SubResource("TileSet_kf7eg") +format = 2 +layer_0/name = "Background" +layer_0/tile_data = PackedInt32Array(-393216, 655360, 2, -327680, 655360, 3, -262144, 655360, 3, -196608, 655360, 3, -131072, 655360, 3, -65536, 655360, 3, -393215, 720896, 2, -327679, 720896, 1, -262143, 720896, 1, -196607, 720896, 1, -131071, 720896, 1, -65535, 720896, 1, -393214, 786432, 2, -327678, 786432, 3, -262142, 786432, 3, -196606, 786432, 3, -131070, 786432, 3, -65534, 786432, 3) +layer_1/name = "Terrain" +layer_1/z_index = 1 +layer_1/tile_data = PackedInt32Array(1, 720896, 0, 2, 720896, 0, 3, 720896, 0, 4, 720896, 0, 5, 720896, 0, 6, 720896, 0, 7, 720896, 0, 8, 720896, 0, 9, 786432, 0, 65545, 786432, 1, 131081, 786432, 1, 196617, 786432, 1, 262153, 786432, 1, 327689, 786432, 1, 393225, 786432, 1, 65537, 720896, 1, 131073, 720896, 1, 196609, 720896, 1, 262145, 458752, 1, 327681, 720896, 1, 393217, 720896, 1, 65538, 720896, 1, 131074, 720896, 1, 196610, 720896, 1, 262146, 720896, 1, 327682, 720896, 1, 393218, 720896, 1, 65539, 720896, 1, 131075, 720896, 1, 196611, 720896, 1, 262147, 720896, 1, 327683, 720896, 1, 393219, 720896, 1, 65540, 458752, 1, 131076, 720896, 1, 196612, 720896, 1, 262148, 720896, 1, 327684, 720896, 1, 393220, 720896, 1, 65541, 720896, 1, 131077, 720896, 1, 196613, 720896, 1, 262149, 458752, 1, 327685, 720896, 1, 393221, 720896, 1, 65542, 720896, 1, 131078, 720896, 1, 196614, 720896, 1, 262150, 720896, 1, 327686, 720896, 1, 393222, 720896, 1, 65543, 720896, 1, 131079, 720896, 1, 196615, 720896, 1, 262151, 720896, 1, 327687, 720896, 1, 393223, 458752, 1, 65544, 720896, 1, 131080, 720896, 1, 196616, 458752, 1, 262152, 720896, 1, 327688, 720896, 1, 393224, 720896, 1, 65546, 524288, 5, 65547, 524288, 5, 65548, 524288, 5, 65549, 524288, 5, 131082, 524288, 6, 131083, 524288, 6, 131084, 524288, 6, 131085, 524288, 6, 196618, 720896, 1, 262154, 720896, 1, 196619, 720896, 1, 262155, 720896, 1, 196620, 720896, 1, 262156, 720896, 1, 196621, 720896, 1, 262157, 720896, 1, 65550, 524288, 5, 65551, 524288, 5, 65552, 524288, 5, 131086, 524288, 6, 131087, 524288, 6, 131088, 524288, 6, 196622, 720896, 1, 196623, 720896, 1, 262159, 720896, 1, 262160, 720896, 1, 196624, 720896, 1, 262158, 720896, 1, 17, 720896, 4, 65553, 720896, 5, 131089, 720896, 5, 196625, 720896, 5, 262161, 720896, 5, 18, 786432, 4, 19, 786432, 4, 20, 786432, 4, 21, 786432, 4, 22, 786432, 4, 23, 786432, 4, 65554, 786432, 5, 131090, 786432, 5, 196626, 786432, 5, 262162, 786432, 5, 65555, 786432, 5, 131091, 589824, 6, 196627, 786432, 5, 262163, 786432, 5, 65556, 786432, 5, 131092, 786432, 5, 196628, 786432, 5, 262164, 786432, 5, 65557, 786432, 5, 131093, 786432, 5, 196629, 786432, 5, 262165, 786432, 5, 65558, 786432, 5, 131094, 786432, 5, 196630, 786432, 5, 262166, 655360, 6, 65559, 786432, 5, 131095, 786432, 5, 196631, 786432, 5, 262167, 786432, 5, 327697, 720896, 5, 393233, 720896, 5, 327698, 589824, 6, 393234, 786432, 5, 327699, 786432, 5, 393235, 786432, 5, 327700, 786432, 5, 393236, 786432, 5, 327701, 786432, 5, 393237, 786432, 5, 327702, 786432, 5, 393238, 786432, 5, 327703, 786432, 5, 393239, 786432, 5, -131062, 720896, 4, -131061, 786432, 4, -131060, 786432, 4, -65526, 720896, 6, -65525, 786432, 6, -65524, 786432, 6, -131056, 851968, 4, -65520, 851968, 6, -131059, 786432, 4, -131058, 786432, 4, -131057, 786432, 4, -65523, 786432, 6, -65522, 786432, 6, -65521, 786432, 6, -196596, 917504, 0, -65536, 917504, 2, -65535, 983040, 2, -65534, 1048576, 2, -65533, 917504, 2, -65532, 983040, 2, -65531, 1048576, 2, -65530, 917504, 2, -65529, 983040, 2, -65528, 1048576, 2, 65535, 655360, 0, 131071, 655360, 1, 196607, 655360, 1, 262143, 655360, 1, 327679, 655360, 1, 393215, 655360, 1, 458751, 655360, 1, 524287, 655360, 1, 589823, 655360, 1, 0, 720896, 0, 65536, 720896, 1, 131072, 720896, 1, 196608, 720896, 1, 262144, 720896, 1, 327680, 720896, 1, 393216, 720896, 1, 458752, 720896, 1, 524288, 720896, 1, 524289, 720896, 1, 524290, 720896, 1, 524291, 720896, 1, 524292, 720896, 1, 524293, 720896, 1, 524294, 720896, 1, 524295, 720896, 1, 524296, 720896, 1, 524297, 786432, 1, 458761, 786432, 1, 458760, 720896, 1, 458759, 720896, 1, 458758, 458752, 1, 458757, 720896, 1, 458756, 720896, 1, 458755, 720896, 1, 458754, 720896, 1, 458753, 720896, 1, -262145, 851968, 4, -196609, 851968, 5, -131073, 851968, 5, -65537, 851968, 5, -1, 851968, 6, -262146, 786432, 4, -262147, 786432, 4, -196610, 589824, 6, -196611, 786432, 5, -6, 786432, 5, -5, 786432, 5, -4, 786432, 5, -3, 786432, 5, -2, 786432, 5, -65538, 786432, 5, -131074, 786432, 5, -131075, 786432, 5, -65539, 655360, 6, 65534, 851968, 5, 131070, 851968, 5, 196606, 851968, 5, 262142, 851968, 5, 327678, 851968, 5, 393214, 851968, 5, 458750, 851968, 5, 65533, 786432, 5, 65532, 786432, 5, 65531, 786432, 5, 65530, 786432, 5, 65529, 720896, 5, 131066, 786432, 5, 196602, 786432, 5, 262138, 786432, 5, 262139, 786432, 5, 327675, 786432, 5, 131068, 786432, 5, 131069, 786432, 5, 196605, 786432, 5, 262141, 786432, 5, 327677, 786432, 5, 393213, 786432, 5, 458749, 786432, 5, 393212, 786432, 5, 393211, 786432, 5, 458748, 786432, 5, 327676, 655360, 6, 262140, 786432, 5, 196604, 786432, 5, 131067, 786432, 5, 196603, 589824, 6, 458747, 786432, 5, 458746, 786432, 5, 393210, 786432, 5, 327674, 786432, 5, -7, 720896, 5, 131065, 720896, 5, 196601, 720896, 5, 262137, 720896, 5, 327673, 720896, 5, 393209, 720896, 5, 458745, 720896, 5, -327684, 720896, 3, -196594, 720896, 3, -196597, 720896, 3, -65518, 720896, 3, -65516, 720896, 3, -327686, 1048576, 5, -327685, 720896, 3, -196595, 917504, 6, -65514, 983040, 6, -327683, 983040, 5, -65513, 1048576, 5, -262151, 720896, 4, -196615, 720896, 5, -131079, 720896, 5, -65543, 720896, 5, -262150, 786432, 4, -196614, 655360, 6, -131078, 786432, 5, -65542, 786432, 5, -262149, 786432, 4, -196613, 786432, 5, -131077, 786432, 5, -65541, 786432, 5, -262148, 786432, 4, -196612, 786432, 5, -131076, 786432, 5, -65540, 786432, 5, 458769, 720896, 5, 524305, 720896, 6, 458775, 786432, 5, 458774, 786432, 5, 458773, 786432, 5, 458772, 786432, 5, 458771, 786432, 5, 458770, 786432, 5, 524306, 786432, 6, 524307, 786432, 6, 524308, 786432, 6, 524309, 786432, 6, 524310, 786432, 6, 524311, 786432, 6, 327690, 720896, 1, 393226, 720896, 1, 458762, 720896, 1, 524298, 720896, 1, 327691, 720896, 1, 393227, 720896, 1, 458763, 720896, 1, 524299, 720896, 1, 327692, 720896, 1, 393228, 720896, 1, 458764, 720896, 1, 524300, 720896, 1, 327693, 720896, 1, 393229, 720896, 1, 458765, 720896, 1, 524301, 720896, 1, 327694, 720896, 1, 393230, 720896, 1, 458766, 720896, 1, 524302, 720896, 1, 327695, 720896, 1, 393231, 720896, 1, 458767, 720896, 1, 524303, 720896, 1, 327696, 720896, 1, 393232, 720896, 1, 458768, 720896, 1, 524304, 720896, 1, 29, 851968, 4, 65565, 851968, 5, 131101, 851968, 5, 196637, 851968, 5, 262173, 851968, 5, 327709, 851968, 5, 393245, 851968, 5, 458781, 851968, 5, 524317, 851968, 6, -65511, 917504, 4, 24, 786432, 4, 25, 786432, 4, 26, 786432, 4, 27, 786432, 4, 28, 786432, 4, 65560, 786432, 5, 65561, 786432, 5, 65562, 786432, 5, 65563, 786432, 5, 65564, 786432, 5, 131100, 786432, 5, 196636, 589824, 6, 131099, 786432, 5, 131098, 786432, 5, 131097, 786432, 5, 131096, 786432, 5, 196632, 786432, 5, 262168, 786432, 5, 327704, 786432, 5, 393240, 786432, 5, 458776, 786432, 5, 524312, 786432, 6, 196633, 786432, 5, 262169, 786432, 5, 327705, 786432, 5, 393241, 786432, 5, 458777, 786432, 5, 524313, 786432, 6, 196634, 786432, 5, 262170, 786432, 5, 327706, 786432, 5, 393242, 655360, 6, 458778, 786432, 5, 524314, 786432, 6, 196635, 786432, 5, 262171, 786432, 5, 327707, 786432, 5, 393243, 786432, 5, 458779, 786432, 5, 524315, 786432, 6, 262172, 786432, 5, 327708, 786432, 5, 393244, 786432, 5, 458780, 786432, 5, 524316, 786432, 6, -196593, 1048576, 6, -393182, 1048576, 6, -393185, 917504, 6, -393180, 983040, 6, -393184, 983040, 5, -65509, 720896, 3, -65510, 720896, 3, -393181, 720896, 3, -393183, 720896, 3, -65517, 720896, 3, -65515, 720896, 3, -327650, 720896, 4, -262114, 720896, 5, -196578, 720896, 5, -131042, 720896, 5, -65506, 720896, 5, -65498, 851968, 5, -131034, 851968, 5, -196570, 851968, 5, -327642, 851968, 4, -327649, 786432, 4, -327648, 786432, 4, -327647, 786432, 4, -327646, 786432, 4, -327645, 786432, 4, -327644, 786432, 4, -327643, 786432, 4, -262106, 851968, 5, -65499, 786432, 5, -131035, 786432, 5, -196571, 786432, 5, -262107, 786432, 5, -262108, 786432, 5, -262109, 786432, 5, -262110, 786432, 5, -262111, 786432, 5, -262112, 786432, 5, -262113, 786432, 5, -196577, 655360, 6, -131041, 786432, 5, -65505, 786432, 5, -65500, 655360, 6, -131036, 589824, 6, -196572, 786432, 5, -196573, 786432, 5, -196574, 786432, 5, -196575, 786432, 5, -196576, 786432, 5, -131040, 589824, 6, -65504, 786432, 5, -65501, 786432, 5, -131037, 786432, 5, -131038, 786432, 5, -131039, 786432, 5, -65503, 786432, 5, -65502, 786432, 5, 524318, 720896, 6, 458782, 720896, 5, 393246, 720896, 5, 327710, 720896, 5, 262174, 720896, 5, 196638, 720896, 5, 131102, 720896, 5, 65566, 720896, 5, 30, 720896, 5, 524319, 786432, 6, 524320, 786432, 6, 524321, 786432, 6, 524322, 786432, 6, 524323, 786432, 6, 524324, 786432, 6, 524325, 786432, 6, 524326, 851968, 6, 38, 851968, 5, 65574, 851968, 5, 131110, 851968, 5, 196646, 851968, 5, 262182, 851968, 5, 327718, 851968, 5, 393254, 851968, 5, 458790, 851968, 5, 31, 786432, 5, 65567, 786432, 5, 131103, 786432, 5, 196639, 786432, 5, 262175, 786432, 5, 327711, 786432, 5, 393247, 655360, 6, 458783, 786432, 5, 32, 786432, 5, 65568, 786432, 5, 131104, 786432, 5, 196640, 786432, 5, 262176, 786432, 5, 327712, 786432, 5, 393248, 786432, 5, 458784, 786432, 5, 33, 786432, 5, 65569, 786432, 5, 131105, 655360, 6, 196641, 786432, 5, 262177, 786432, 5, 327713, 786432, 5, 393249, 786432, 5, 458785, 786432, 5, 34, 786432, 5, 65570, 786432, 5, 131106, 786432, 5, 196642, 786432, 5, 262178, 655360, 6, 327714, 655360, 6, 393250, 786432, 5, 458786, 786432, 5, 35, 786432, 5, 65571, 786432, 5, 131107, 786432, 5, 196643, 786432, 5, 262179, 786432, 5, 327715, 786432, 5, 393251, 786432, 5, 458787, 786432, 5, 36, 655360, 6, 65572, 786432, 5, 131108, 786432, 5, 196644, 786432, 5, 262180, 786432, 5, 327716, 786432, 5, 393252, 786432, 5, 458788, 655360, 6, 37, 786432, 5, 65573, 786432, 5, 131109, 786432, 5, 196645, 786432, 5, 262181, 786432, 5, 327717, 786432, 5, 393253, 786432, 5, 458789, 786432, 5, 524282, 786432, 5, 524283, 786432, 5, 524284, 786432, 5, 524285, 786432, 5, 524281, 720896, 5, 524286, 851968, 5, 589817, 720896, 6, 589818, 786432, 6, 589819, 786432, 6, 589820, 786432, 6, 589821, 786432, 6, 589822, 851968, 6) + +[node name="UI" type="CanvasLayer" parent="."] + +[node name="UIInventory" parent="UI" instance=ExtResource("2_kmt5y")] +unique_name_in_owner = true +visible = false + +[node name="UISign" parent="UI" instance=ExtResource("3_1cmgi")] +unique_name_in_owner = true +visible = false + +[node name="Controls" type="Label" parent="."] +offset_left = 167.0 +offset_top = -145.0 +offset_right = 332.0 +offset_bottom = -81.0 +theme_override_colors/font_color = Color(0.294118, 1, 0.631373, 1) +theme_override_fonts/font = ExtResource("4_4dx73") +text = "[WASD] to move +[Space] to jump" + +[node name="Camera2D" type="Camera2D" parent="."] +position = Vector2(227, -28) +zoom = Vector2(1.5, 1.5) +editor_draw_limits = true + +[node name="PhantomCameraHost" type="Node" parent="Camera2D"] +script = ExtResource("5_w68mw") + +[node name="Player" type="Node" parent="."] + +[node name="PlayerPhantomCamera2D" type="Node2D" parent="Player" node_paths=PackedStringArray("follow_target")] +unique_name_in_owner = true +process_priority = -1 +position = Vector2(227, -28) +script = ExtResource("6_i3g4f") +priority = 10 +follow_mode = 2 +follow_target = NodePath("../CharacterBody2D") +zoom = Vector2(1.5, 1.5) +frame_preview = false +tween_resource = ExtResource("7_j2i8l") +tween_on_load = false +follow_damping = true +draw_limits = true + +[node name="CharacterBody2D" parent="Player" instance=ExtResource("8_ytjsp")] +position = Vector2(227, -28) +script = ExtResource("9_o4c4h") diff --git a/addons/phantom_camera/examples/example_scenes/2D-4.3/2d_follow_framed_example_scene.tscn b/addons/phantom_camera/examples/example_scenes/2D-4.3/2d_follow_framed_example_scene.tscn new file mode 100644 index 0000000..df284df --- /dev/null +++ b/addons/phantom_camera/examples/example_scenes/2D-4.3/2d_follow_framed_example_scene.tscn @@ -0,0 +1,641 @@ +[gd_scene load_steps=12 format=3 uid="uid://dg1tuoxd3b4tw"] + +[ext_resource type="Texture2D" uid="uid://c77npili4pel4" path="res://addons/phantom_camera/examples/textures/2D/level_spritesheet.png" id="1_nf5bo"] +[ext_resource type="PackedScene" uid="uid://dg7rhrymsrrrm" path="res://addons/phantom_camera/examples/ui/ui_inventory.tscn" id="2_5oggv"] +[ext_resource type="PackedScene" uid="uid://iq5xd1ob1res" path="res://addons/phantom_camera/examples/ui/ui_sign.tscn" id="3_aku7q"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/phantom_camera_host/phantom_camera_host.gd" id="4_j3ux0"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/phantom_camera/phantom_camera_2d.gd" id="5_uwr6r"] +[ext_resource type="Resource" uid="uid://euybd2w0bax" path="res://addons/phantom_camera/examples/resources/tween/player_phantom_camera_2d_tween.tres" id="6_4l0c3"] +[ext_resource type="FontFile" uid="uid://c4mm3of2mc8o5" path="res://addons/phantom_camera/fonts/Nunito-Black.ttf" id="7_briql"] +[ext_resource type="PackedScene" uid="uid://7kh0xydx0b1o" path="res://addons/phantom_camera/examples/example_scenes/2D/sub_scenes/playable_character_2d.tscn" id="8_i4m1d"] +[ext_resource type="Script" path="res://addons/phantom_camera/examples/scripts/2D/player_character_body_2d_4.3.gd" id="9_m3lnd"] + +[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_easgx"] +texture = ExtResource("1_nf5bo") +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_1/linear_velocity = Vector2(0, 0) +0:0/0/physics_layer_1/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 +1:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +1:0/0/physics_layer_1/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 +2:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +2:0/0/physics_layer_1/angular_velocity = 0.0 +3:0/0 = 0 +3:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:0/0/physics_layer_0/angular_velocity = 0.0 +3:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:0/0/physics_layer_1/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 +4:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:0/0/physics_layer_1/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 +5:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +5:0/0/physics_layer_1/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 +6:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +6:0/0/physics_layer_1/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 +7:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +7:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:0/0/physics_layer_1/angular_velocity = 0.0 +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_1/linear_velocity = Vector2(0, 0) +0:1/0/physics_layer_1/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 +1:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +1:1/0/physics_layer_1/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_1/linear_velocity = Vector2(0, 0) +2:1/0/physics_layer_1/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 +3:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:1/0/physics_layer_1/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 +4:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:1/0/physics_layer_1/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 +5:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +5:1/0/physics_layer_1/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 +7:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +7:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:1/0/physics_layer_1/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 +2:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +2:2/0/physics_layer_1/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 +3:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:2/0/physics_layer_1/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 +4:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:2/0/physics_layer_1/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 +7:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +7:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:2/0/physics_layer_1/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 +3:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:3/0/physics_layer_1/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 +4:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:3/0/physics_layer_1/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 +5:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +5:3/0/physics_layer_1/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 +7:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +7:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:3/0/physics_layer_1/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 +3:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:4/0/physics_layer_1/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 +4:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:4/0/physics_layer_1/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 +5:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +5:4/0/physics_layer_1/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 +7:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:4/0/physics_layer_1/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 +3:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:5/0/physics_layer_1/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 +4:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:5/0/physics_layer_1/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 +7:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:5/0/physics_layer_1/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 +3:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:6/0/physics_layer_1/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 +4:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:6/0/physics_layer_1/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 +7:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:6/0/physics_layer_1/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 +2:7/0/physics_layer_1/linear_velocity = Vector2(0, 0) +2:7/0/physics_layer_1/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 +3:7/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:7/0/physics_layer_1/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 +4:7/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:7/0/physics_layer_1/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 +5:7/0/physics_layer_1/linear_velocity = Vector2(0, 0) +5:7/0/physics_layer_1/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 +8:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +8:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:0/0/physics_layer_1/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 +9:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +9:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:0/0/physics_layer_1/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) +10:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:0/0/physics_layer_1/angular_velocity = 0.0 +11:0/0 = 0 +11:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:0/0/physics_layer_0/angular_velocity = 0.0 +11:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +11:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:0/0/physics_layer_1/angular_velocity = 0.0 +12:0/0 = 0 +12:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:0/0/physics_layer_0/angular_velocity = 0.0 +12:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:0/0/physics_layer_1/angular_velocity = 0.0 +13:0/0 = 0 +13:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:0/0/physics_layer_0/angular_velocity = 0.0 +13:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +13:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:0/0/physics_layer_1/angular_velocity = 0.0 +14:0/0 = 0 +14:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:0/0/physics_layer_0/angular_velocity = 0.0 +14:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:0/0/physics_layer_1/angular_velocity = 0.0 +14:0/0/physics_layer_1/polygon_0/points = PackedVector2Array(8, -8, 8, 8, -8, 8) +14:0/0/custom_data_0 = &"Sign" +15:0/0 = 0 +15:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:0/0/physics_layer_0/angular_velocity = 0.0 +15:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:0/0/physics_layer_1/angular_velocity = 0.0 +16:0/0 = 0 +16:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:0/0/physics_layer_0/angular_velocity = 0.0 +16:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:0/0/physics_layer_1/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 +8:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +8:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:1/0/physics_layer_1/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 +9:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +9:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:1/0/physics_layer_1/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) +10:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:1/0/physics_layer_1/angular_velocity = 0.0 +11:1/0 = 0 +11:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:1/0/physics_layer_0/angular_velocity = 0.0 +11:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +11:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:1/0/physics_layer_1/angular_velocity = 0.0 +12:1/0 = 0 +12:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:1/0/physics_layer_0/angular_velocity = 0.0 +12:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:1/0/physics_layer_1/angular_velocity = 0.0 +13:1/0 = 0 +13:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:1/0/physics_layer_0/angular_velocity = 0.0 +13:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +13:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:1/0/physics_layer_1/angular_velocity = 0.0 +14:1/0 = 0 +14:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:1/0/physics_layer_0/angular_velocity = 0.0 +14:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:1/0/physics_layer_1/angular_velocity = 0.0 +15:1/0 = 0 +15:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:1/0/physics_layer_0/angular_velocity = 0.0 +15:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:1/0/physics_layer_1/angular_velocity = 0.0 +16:1/0 = 0 +16:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:1/0/physics_layer_0/angular_velocity = 0.0 +16:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:1/0/physics_layer_1/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 +8:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +8:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:2/0/physics_layer_1/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 +9:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +9:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:2/0/physics_layer_1/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) +10:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:2/0/physics_layer_1/angular_velocity = 0.0 +11:2/0 = 0 +11:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:2/0/physics_layer_0/angular_velocity = 0.0 +11:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +11:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:2/0/physics_layer_1/angular_velocity = 0.0 +12:2/0 = 0 +12:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:2/0/physics_layer_0/angular_velocity = 0.0 +12:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:2/0/physics_layer_1/angular_velocity = 0.0 +13:2/0 = 0 +13:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:2/0/physics_layer_0/angular_velocity = 0.0 +13:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +13:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:2/0/physics_layer_1/angular_velocity = 0.0 +14:2/0 = 0 +14:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:2/0/physics_layer_0/angular_velocity = 0.0 +14:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:2/0/physics_layer_1/angular_velocity = 0.0 +15:2/0 = 0 +15:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:2/0/physics_layer_0/angular_velocity = 0.0 +15:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:2/0/physics_layer_1/angular_velocity = 0.0 +16:2/0 = 0 +16:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:2/0/physics_layer_0/angular_velocity = 0.0 +16:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:2/0/physics_layer_1/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 +8:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +8:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:3/0/physics_layer_1/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 +9:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +9:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:3/0/physics_layer_1/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) +10:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:3/0/physics_layer_1/angular_velocity = 0.0 +11:3/0 = 0 +11:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:3/0/physics_layer_0/angular_velocity = 0.0 +11:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:3/0/physics_layer_1/angular_velocity = 0.0 +12:3/0 = 0 +12:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:3/0/physics_layer_0/angular_velocity = 0.0 +12:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:3/0/physics_layer_1/angular_velocity = 0.0 +13:3/0 = 0 +13:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:3/0/physics_layer_0/angular_velocity = 0.0 +13:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +13:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:3/0/physics_layer_1/angular_velocity = 0.0 +14:3/0 = 0 +14:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:3/0/physics_layer_0/angular_velocity = 0.0 +14:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:3/0/physics_layer_1/angular_velocity = 0.0 +15:3/0 = 0 +15:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:3/0/physics_layer_0/angular_velocity = 0.0 +15:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:3/0/physics_layer_1/angular_velocity = 0.0 +16:3/0 = 0 +16:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:3/0/physics_layer_0/angular_velocity = 0.0 +16:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:3/0/physics_layer_1/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 +8:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:4/0/physics_layer_1/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 +9:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:4/0/physics_layer_1/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_1/linear_velocity = Vector2(0, 0) +10:4/0/physics_layer_1/angular_velocity = 0.0 +11:4/0 = 0 +11:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:4/0/physics_layer_0/angular_velocity = 0.0 +11:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-7, 2.5, -5, -2, -2.5, -5, 2, -7, 8, -8, 8, 8, -8, 8) +11:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:4/0/physics_layer_1/angular_velocity = 0.0 +12:4/0 = 0 +12:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:4/0/physics_layer_0/angular_velocity = 0.0 +12:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:4/0/physics_layer_1/angular_velocity = 0.0 +13:4/0 = 0 +13:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:4/0/physics_layer_0/angular_velocity = 0.0 +13:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 0, -6, 4, -1.5, 6.5, 1.5, 8, 8, -8, 8) +13:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:4/0/physics_layer_1/angular_velocity = 0.0 +14:4/0 = 0 +14:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:4/0/physics_layer_0/angular_velocity = 0.0 +14:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:4/0/physics_layer_1/angular_velocity = 0.0 +14:4/0/physics_layer_1/polygon_0/points = PackedVector2Array(-8, -8, -8, 8, 8, 8, 8, -8) +14:4/0/custom_data_0 = &"Inventory" +15:4/0 = 0 +15:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:4/0/physics_layer_0/angular_velocity = 0.0 +15:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:4/0/physics_layer_1/angular_velocity = 0.0 +16:4/0 = 0 +16:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:4/0/physics_layer_0/angular_velocity = 0.0 +16:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:4/0/physics_layer_1/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 +8:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:5/0/physics_layer_1/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 +9:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:5/0/physics_layer_1/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_1/linear_velocity = Vector2(0, 0) +10:5/0/physics_layer_1/angular_velocity = 0.0 +11:5/0 = 0 +11:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:5/0/physics_layer_0/angular_velocity = 0.0 +11:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +11:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:5/0/physics_layer_1/angular_velocity = 0.0 +12:5/0 = 0 +12:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:5/0/physics_layer_0/angular_velocity = 0.0 +12:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:5/0/physics_layer_1/angular_velocity = 0.0 +13:5/0 = 0 +13:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:5/0/physics_layer_0/angular_velocity = 0.0 +13:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +13:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:5/0/physics_layer_1/angular_velocity = 0.0 +14:5/0 = 0 +14:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:5/0/physics_layer_0/angular_velocity = 0.0 +14:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:5/0/physics_layer_1/angular_velocity = 0.0 +15:5/0 = 0 +15:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:5/0/physics_layer_0/angular_velocity = 0.0 +15:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:5/0/physics_layer_1/angular_velocity = 0.0 +16:5/0 = 0 +16:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:5/0/physics_layer_0/angular_velocity = 0.0 +16:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:5/0/physics_layer_1/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 +8:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:6/0/physics_layer_1/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 +9:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:6/0/physics_layer_1/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_1/linear_velocity = Vector2(0, 0) +10:6/0/physics_layer_1/angular_velocity = 0.0 +11:6/0 = 0 +11:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:6/0/physics_layer_0/angular_velocity = 0.0 +11:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, 1, 6.5, -3, 3, -6.5, -1.5) +11:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:6/0/physics_layer_1/angular_velocity = 0.0 +12:6/0 = 0 +12:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:6/0/physics_layer_0/angular_velocity = 0.0 +12:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:6/0/physics_layer_1/angular_velocity = 0.0 +13:6/0 = 0 +13:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:6/0/physics_layer_0/angular_velocity = 0.0 +13:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 6, -0.5, 3, 3.5, -1.5, 6.5, -8, 8) +13:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:6/0/physics_layer_1/angular_velocity = 0.0 +14:6/0 = 0 +14:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:6/0/physics_layer_0/angular_velocity = 0.0 +14:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:6/0/physics_layer_1/angular_velocity = 0.0 +15:6/0 = 0 +15:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:6/0/physics_layer_0/angular_velocity = 0.0 +15:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:6/0/physics_layer_1/angular_velocity = 0.0 +16:6/0 = 0 +16:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:6/0/physics_layer_0/angular_velocity = 0.0 +16:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:6/0/physics_layer_1/angular_velocity = 0.0 + +[sub_resource type="TileSet" id="TileSet_kf7eg"] +physics_layer_0/collision_layer = 1 +physics_layer_1/collision_layer = 2 +physics_layer_1/collision_mask = 2 +custom_data_layer_0/name = "Type" +custom_data_layer_0/type = 21 +sources/0 = SubResource("TileSetAtlasSource_easgx") + +[node name="ExampleScene2D" type="Node2D"] + +[node name="Background" type="CanvasLayer" parent="."] +layer = -3 + +[node name="ColorRect" type="ColorRect" parent="Background"] +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_left = -345.0 +offset_top = -143.0 +offset_right = 947.0 +offset_bottom = 578.0 +grow_horizontal = 2 +grow_vertical = 2 +auto_translate = false +localize_numeral_system = false +color = Color(0.137255, 0.14902, 0.196078, 1) + +[node name="TileMap" type="TileMap" parent="."] +z_index = -1 +scale = Vector2(3, 3) +tile_set = SubResource("TileSet_kf7eg") +format = 2 +layer_0/name = "Background" +layer_0/tile_data = PackedInt32Array(-393216, 655360, 2, -327680, 655360, 3, -262144, 655360, 3, -196608, 655360, 3, -131072, 655360, 3, -65536, 655360, 3, -393215, 720896, 2, -327679, 720896, 1, -262143, 720896, 1, -196607, 720896, 1, -131071, 720896, 1, -65535, 720896, 1, -393214, 786432, 2, -327678, 786432, 3, -262142, 786432, 3, -196606, 786432, 3, -131070, 786432, 3, -65534, 786432, 3) +layer_1/name = "Terrain" +layer_1/z_index = 1 +layer_1/tile_data = PackedInt32Array(1, 720896, 0, 2, 720896, 0, 3, 720896, 0, 4, 720896, 0, 5, 720896, 0, 6, 720896, 0, 7, 720896, 0, 8, 720896, 0, 9, 786432, 0, 65545, 786432, 1, 131081, 786432, 1, 196617, 786432, 1, 262153, 786432, 1, 327689, 786432, 1, 393225, 786432, 1, 65537, 720896, 1, 131073, 720896, 1, 196609, 720896, 1, 262145, 458752, 1, 327681, 720896, 1, 393217, 720896, 1, 65538, 720896, 1, 131074, 720896, 1, 196610, 720896, 1, 262146, 720896, 1, 327682, 720896, 1, 393218, 720896, 1, 65539, 720896, 1, 131075, 720896, 1, 196611, 720896, 1, 262147, 720896, 1, 327683, 720896, 1, 393219, 720896, 1, 65540, 458752, 1, 131076, 720896, 1, 196612, 720896, 1, 262148, 720896, 1, 327684, 720896, 1, 393220, 720896, 1, 65541, 720896, 1, 131077, 720896, 1, 196613, 720896, 1, 262149, 458752, 1, 327685, 720896, 1, 393221, 720896, 1, 65542, 720896, 1, 131078, 720896, 1, 196614, 720896, 1, 262150, 720896, 1, 327686, 720896, 1, 393222, 720896, 1, 65543, 720896, 1, 131079, 720896, 1, 196615, 720896, 1, 262151, 720896, 1, 327687, 720896, 1, 393223, 458752, 1, 65544, 720896, 1, 131080, 720896, 1, 196616, 458752, 1, 262152, 720896, 1, 327688, 720896, 1, 393224, 720896, 1, 65546, 524288, 5, 65547, 524288, 5, 65548, 524288, 5, 65549, 524288, 5, 131082, 524288, 6, 131083, 524288, 6, 131084, 524288, 6, 131085, 524288, 6, 196618, 720896, 1, 262154, 720896, 1, 196619, 720896, 1, 262155, 720896, 1, 196620, 720896, 1, 262156, 720896, 1, 196621, 720896, 1, 262157, 720896, 1, 65550, 524288, 5, 65551, 524288, 5, 65552, 524288, 5, 131086, 524288, 6, 131087, 524288, 6, 131088, 524288, 6, 196622, 720896, 1, 196623, 720896, 1, 262159, 720896, 1, 262160, 720896, 1, 196624, 720896, 1, 262158, 720896, 1, 17, 720896, 4, 65553, 720896, 5, 131089, 720896, 5, 196625, 720896, 5, 262161, 720896, 5, 18, 786432, 4, 19, 786432, 4, 20, 786432, 4, 21, 786432, 4, 22, 786432, 4, 23, 786432, 4, 65554, 786432, 5, 131090, 786432, 5, 196626, 786432, 5, 262162, 786432, 5, 65555, 786432, 5, 131091, 589824, 6, 196627, 786432, 5, 262163, 786432, 5, 65556, 786432, 5, 131092, 786432, 5, 196628, 786432, 5, 262164, 786432, 5, 65557, 786432, 5, 131093, 786432, 5, 196629, 786432, 5, 262165, 786432, 5, 65558, 786432, 5, 131094, 786432, 5, 196630, 786432, 5, 262166, 655360, 6, 65559, 786432, 5, 131095, 786432, 5, 196631, 786432, 5, 262167, 786432, 5, 327697, 720896, 5, 393233, 720896, 5, 327698, 589824, 6, 393234, 786432, 5, 327699, 786432, 5, 393235, 786432, 5, 327700, 786432, 5, 393236, 786432, 5, 327701, 786432, 5, 393237, 786432, 5, 327702, 786432, 5, 393238, 786432, 5, 327703, 786432, 5, 393239, 786432, 5, -131062, 720896, 4, -131061, 786432, 4, -131060, 786432, 4, -65526, 720896, 6, -65525, 786432, 6, -65524, 786432, 6, -131056, 851968, 4, -65520, 851968, 6, -131059, 786432, 4, -131058, 786432, 4, -131057, 786432, 4, -65523, 786432, 6, -65522, 786432, 6, -65521, 786432, 6, -196596, 917504, 0, -65536, 917504, 2, -65535, 983040, 2, -65534, 1048576, 2, -65533, 917504, 2, -65532, 983040, 2, -65531, 1048576, 2, -65530, 917504, 2, -65529, 983040, 2, -65528, 1048576, 2, 65535, 655360, 0, 131071, 655360, 1, 196607, 655360, 1, 262143, 655360, 1, 327679, 655360, 1, 393215, 655360, 1, 458751, 655360, 1, 524287, 655360, 1, 589823, 655360, 1, 0, 720896, 0, 65536, 720896, 1, 131072, 720896, 1, 196608, 720896, 1, 262144, 720896, 1, 327680, 720896, 1, 393216, 720896, 1, 458752, 720896, 1, 524288, 720896, 1, 524289, 720896, 1, 524290, 720896, 1, 524291, 720896, 1, 524292, 720896, 1, 524293, 720896, 1, 524294, 720896, 1, 524295, 720896, 1, 524296, 720896, 1, 524297, 786432, 1, 458761, 786432, 1, 458760, 720896, 1, 458759, 720896, 1, 458758, 458752, 1, 458757, 720896, 1, 458756, 720896, 1, 458755, 720896, 1, 458754, 720896, 1, 458753, 720896, 1, -262145, 851968, 4, -196609, 851968, 5, -131073, 851968, 5, -65537, 851968, 5, -1, 851968, 6, -262146, 786432, 4, -262147, 786432, 4, -196610, 589824, 6, -196611, 786432, 5, -6, 786432, 5, -5, 786432, 5, -4, 786432, 5, -3, 786432, 5, -2, 786432, 5, -65538, 786432, 5, -131074, 786432, 5, -131075, 786432, 5, -65539, 655360, 6, 65534, 851968, 5, 131070, 851968, 5, 196606, 851968, 5, 262142, 851968, 5, 327678, 851968, 5, 393214, 851968, 5, 458750, 851968, 5, 65533, 786432, 5, 65532, 786432, 5, 65531, 786432, 5, 65530, 786432, 5, 65529, 720896, 5, 131066, 786432, 5, 196602, 786432, 5, 262138, 786432, 5, 262139, 786432, 5, 327675, 786432, 5, 131068, 786432, 5, 131069, 786432, 5, 196605, 786432, 5, 262141, 786432, 5, 327677, 786432, 5, 393213, 786432, 5, 458749, 786432, 5, 393212, 786432, 5, 393211, 786432, 5, 458748, 786432, 5, 327676, 655360, 6, 262140, 786432, 5, 196604, 786432, 5, 131067, 786432, 5, 196603, 589824, 6, 458747, 786432, 5, 458746, 786432, 5, 393210, 786432, 5, 327674, 786432, 5, -7, 720896, 5, 131065, 720896, 5, 196601, 720896, 5, 262137, 720896, 5, 327673, 720896, 5, 393209, 720896, 5, 458745, 720896, 5, -327684, 720896, 3, -196594, 720896, 3, -196597, 720896, 3, -65518, 720896, 3, -65516, 720896, 3, -327686, 1048576, 5, -327685, 720896, 3, -196595, 917504, 6, -65514, 983040, 6, -327683, 983040, 5, -65513, 1048576, 5, -262151, 720896, 4, -196615, 720896, 5, -131079, 720896, 5, -65543, 720896, 5, -262150, 786432, 4, -196614, 655360, 6, -131078, 786432, 5, -65542, 786432, 5, -262149, 786432, 4, -196613, 786432, 5, -131077, 786432, 5, -65541, 786432, 5, -262148, 786432, 4, -196612, 786432, 5, -131076, 786432, 5, -65540, 786432, 5, 458769, 720896, 5, 524305, 720896, 6, 458775, 786432, 5, 458774, 786432, 5, 458773, 786432, 5, 458772, 786432, 5, 458771, 786432, 5, 458770, 786432, 5, 524306, 786432, 6, 524307, 786432, 6, 524308, 786432, 6, 524309, 786432, 6, 524310, 786432, 6, 524311, 786432, 6, 327690, 720896, 1, 393226, 720896, 1, 458762, 720896, 1, 524298, 720896, 1, 327691, 720896, 1, 393227, 720896, 1, 458763, 720896, 1, 524299, 720896, 1, 327692, 720896, 1, 393228, 720896, 1, 458764, 720896, 1, 524300, 720896, 1, 327693, 720896, 1, 393229, 720896, 1, 458765, 720896, 1, 524301, 720896, 1, 327694, 720896, 1, 393230, 720896, 1, 458766, 720896, 1, 524302, 720896, 1, 327695, 720896, 1, 393231, 720896, 1, 458767, 720896, 1, 524303, 720896, 1, 327696, 720896, 1, 393232, 720896, 1, 458768, 720896, 1, 524304, 720896, 1, 29, 851968, 4, 65565, 851968, 5, 131101, 851968, 5, 196637, 851968, 5, 262173, 851968, 5, 327709, 851968, 5, 393245, 851968, 5, 458781, 851968, 5, 524317, 851968, 6, -65511, 917504, 4, 24, 786432, 4, 25, 786432, 4, 26, 786432, 4, 27, 786432, 4, 28, 786432, 4, 65560, 786432, 5, 65561, 786432, 5, 65562, 786432, 5, 65563, 786432, 5, 65564, 786432, 5, 131100, 786432, 5, 196636, 589824, 6, 131099, 786432, 5, 131098, 786432, 5, 131097, 786432, 5, 131096, 786432, 5, 196632, 786432, 5, 262168, 786432, 5, 327704, 786432, 5, 393240, 786432, 5, 458776, 786432, 5, 524312, 786432, 6, 196633, 786432, 5, 262169, 786432, 5, 327705, 786432, 5, 393241, 786432, 5, 458777, 786432, 5, 524313, 786432, 6, 196634, 786432, 5, 262170, 786432, 5, 327706, 786432, 5, 393242, 655360, 6, 458778, 786432, 5, 524314, 786432, 6, 196635, 786432, 5, 262171, 786432, 5, 327707, 786432, 5, 393243, 786432, 5, 458779, 786432, 5, 524315, 786432, 6, 262172, 786432, 5, 327708, 786432, 5, 393244, 786432, 5, 458780, 786432, 5, 524316, 786432, 6, -196593, 1048576, 6, -393182, 1048576, 6, -393185, 917504, 6, -393180, 983040, 6, -393184, 983040, 5, -65509, 720896, 3, -65510, 720896, 3, -393181, 720896, 3, -393183, 720896, 3, -65517, 720896, 3, -65515, 720896, 3, -327650, 720896, 4, -262114, 720896, 5, -196578, 720896, 5, -131042, 720896, 5, -65506, 720896, 5, -65498, 851968, 5, -131034, 851968, 5, -196570, 851968, 5, -327642, 851968, 4, -327649, 786432, 4, -327648, 786432, 4, -327647, 786432, 4, -327646, 786432, 4, -327645, 786432, 4, -327644, 786432, 4, -327643, 786432, 4, -262106, 851968, 5, -65499, 786432, 5, -131035, 786432, 5, -196571, 786432, 5, -262107, 786432, 5, -262108, 786432, 5, -262109, 786432, 5, -262110, 786432, 5, -262111, 786432, 5, -262112, 786432, 5, -262113, 786432, 5, -196577, 655360, 6, -131041, 786432, 5, -65505, 786432, 5, -65500, 655360, 6, -131036, 589824, 6, -196572, 786432, 5, -196573, 786432, 5, -196574, 786432, 5, -196575, 786432, 5, -196576, 786432, 5, -131040, 589824, 6, -65504, 786432, 5, -65501, 786432, 5, -131037, 786432, 5, -131038, 786432, 5, -131039, 786432, 5, -65503, 786432, 5, -65502, 786432, 5, 524318, 720896, 6, 458782, 720896, 5, 393246, 720896, 5, 327710, 720896, 5, 262174, 720896, 5, 196638, 720896, 5, 131102, 720896, 5, 65566, 720896, 5, 30, 720896, 5, 524319, 786432, 6, 524320, 786432, 6, 524321, 786432, 6, 524322, 786432, 6, 524323, 786432, 6, 524324, 786432, 6, 524325, 786432, 6, 524326, 851968, 6, 38, 851968, 5, 65574, 851968, 5, 131110, 851968, 5, 196646, 851968, 5, 262182, 851968, 5, 327718, 851968, 5, 393254, 851968, 5, 458790, 851968, 5, 31, 786432, 5, 65567, 786432, 5, 131103, 786432, 5, 196639, 786432, 5, 262175, 786432, 5, 327711, 786432, 5, 393247, 655360, 6, 458783, 786432, 5, 32, 786432, 5, 65568, 786432, 5, 131104, 786432, 5, 196640, 786432, 5, 262176, 786432, 5, 327712, 786432, 5, 393248, 786432, 5, 458784, 786432, 5, 33, 786432, 5, 65569, 786432, 5, 131105, 655360, 6, 196641, 786432, 5, 262177, 786432, 5, 327713, 786432, 5, 393249, 786432, 5, 458785, 786432, 5, 34, 786432, 5, 65570, 786432, 5, 131106, 786432, 5, 196642, 786432, 5, 262178, 655360, 6, 327714, 655360, 6, 393250, 786432, 5, 458786, 786432, 5, 35, 786432, 5, 65571, 786432, 5, 131107, 786432, 5, 196643, 786432, 5, 262179, 786432, 5, 327715, 786432, 5, 393251, 786432, 5, 458787, 786432, 5, 36, 655360, 6, 65572, 786432, 5, 131108, 786432, 5, 196644, 786432, 5, 262180, 786432, 5, 327716, 786432, 5, 393252, 786432, 5, 458788, 655360, 6, 37, 786432, 5, 65573, 786432, 5, 131109, 786432, 5, 196645, 786432, 5, 262181, 786432, 5, 327717, 786432, 5, 393253, 786432, 5, 458789, 786432, 5, 524282, 786432, 5, 524283, 786432, 5, 524284, 786432, 5, 524285, 786432, 5, 524281, 720896, 5, 524286, 851968, 5, 589817, 720896, 6, 589818, 786432, 6, 589819, 786432, 6, 589820, 786432, 6, 589821, 786432, 6, 589822, 851968, 6) + +[node name="UI" type="CanvasLayer" parent="."] + +[node name="UIInventory" parent="UI" instance=ExtResource("2_5oggv")] +unique_name_in_owner = true +visible = false + +[node name="UISign" parent="UI" instance=ExtResource("3_aku7q")] +unique_name_in_owner = true +visible = false + +[node name="Camera2D" type="Camera2D" parent="."] +position = Vector2(282, -29) +zoom = Vector2(2, 2) + +[node name="PhantomCameraHost" type="Node" parent="Camera2D"] +script = ExtResource("4_j3ux0") + +[node name="Player" type="Node" parent="."] + +[node name="PlayerPhantomCamera2D" type="Node2D" parent="Player" node_paths=PackedStringArray("follow_target")] +unique_name_in_owner = true +position = Vector2(282, -29) +script = ExtResource("5_uwr6r") +priority = 5 +follow_mode = 5 +follow_target = NodePath("../CharacterBody2D") +zoom = Vector2(2, 2) +tween_resource = ExtResource("6_4l0c3") +tween_on_load = false +follow_damping = true +dead_zone_width = 0.416 +dead_zone_height = 0.63 +show_viewfinder_in_play = true +draw_limits = true + +[node name="Label" type="Label" parent="Player"] +offset_left = 167.0 +offset_top = -145.0 +offset_right = 332.0 +offset_bottom = -81.0 +theme_override_colors/font_color = Color(0.294118, 1, 0.631373, 1) +theme_override_fonts/font = ExtResource("7_briql") +text = "[WASD] to move +[Space] to jump" + +[node name="CharacterBody2D" parent="Player" instance=ExtResource("8_i4m1d")] +position = Vector2(282, -29) +script = ExtResource("9_m3lnd") diff --git a/addons/phantom_camera/examples/example_scenes/2D-4.3/2d_follow_group_example_scene.tscn b/addons/phantom_camera/examples/example_scenes/2D-4.3/2d_follow_group_example_scene.tscn new file mode 100644 index 0000000..143e8d6 --- /dev/null +++ b/addons/phantom_camera/examples/example_scenes/2D-4.3/2d_follow_group_example_scene.tscn @@ -0,0 +1,648 @@ +[gd_scene load_steps=14 format=3 uid="uid://bio6mao7gtru2"] + +[ext_resource type="Texture2D" uid="uid://c77npili4pel4" path="res://addons/phantom_camera/examples/textures/2D/level_spritesheet.png" id="1_8rflf"] +[ext_resource type="PackedScene" uid="uid://dg7rhrymsrrrm" path="res://addons/phantom_camera/examples/ui/ui_inventory.tscn" id="2_tafwr"] +[ext_resource type="PackedScene" uid="uid://iq5xd1ob1res" path="res://addons/phantom_camera/examples/ui/ui_sign.tscn" id="3_37c7w"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/phantom_camera_host/phantom_camera_host.gd" id="4_dxiro"] +[ext_resource type="FontFile" uid="uid://c4mm3of2mc8o5" path="res://addons/phantom_camera/fonts/Nunito-Black.ttf" id="5_gaaip"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/phantom_camera/phantom_camera_2d.gd" id="6_ojk83"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/resources/tween_resource.gd" id="7_awenl"] +[ext_resource type="Texture2D" uid="uid://cwep0on2tthn7" path="res://addons/phantom_camera/examples/textures/2D/phantom_camera_2d_sprite.png" id="8_ys0m4"] +[ext_resource type="PackedScene" uid="uid://7kh0xydx0b1o" path="res://addons/phantom_camera/examples/example_scenes/2D/sub_scenes/playable_character_2d.tscn" id="9_witv0"] +[ext_resource type="Script" path="res://addons/phantom_camera/examples/scripts/2D/player_character_body_2d_4.3.gd" id="10_aivri"] + +[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_easgx"] +texture = ExtResource("1_8rflf") +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_1/linear_velocity = Vector2(0, 0) +0:0/0/physics_layer_1/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 +1:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +1:0/0/physics_layer_1/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 +2:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +2:0/0/physics_layer_1/angular_velocity = 0.0 +3:0/0 = 0 +3:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:0/0/physics_layer_0/angular_velocity = 0.0 +3:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:0/0/physics_layer_1/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 +4:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:0/0/physics_layer_1/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 +5:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +5:0/0/physics_layer_1/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 +6:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +6:0/0/physics_layer_1/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 +7:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +7:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:0/0/physics_layer_1/angular_velocity = 0.0 +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_1/linear_velocity = Vector2(0, 0) +0:1/0/physics_layer_1/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 +1:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +1:1/0/physics_layer_1/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_1/linear_velocity = Vector2(0, 0) +2:1/0/physics_layer_1/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 +3:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:1/0/physics_layer_1/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 +4:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:1/0/physics_layer_1/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 +5:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +5:1/0/physics_layer_1/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 +7:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +7:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:1/0/physics_layer_1/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 +2:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +2:2/0/physics_layer_1/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 +3:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:2/0/physics_layer_1/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 +4:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:2/0/physics_layer_1/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 +7:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +7:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:2/0/physics_layer_1/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 +3:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:3/0/physics_layer_1/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 +4:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:3/0/physics_layer_1/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 +5:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +5:3/0/physics_layer_1/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 +7:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +7:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:3/0/physics_layer_1/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 +3:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:4/0/physics_layer_1/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 +4:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:4/0/physics_layer_1/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 +5:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +5:4/0/physics_layer_1/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 +7:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:4/0/physics_layer_1/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 +3:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:5/0/physics_layer_1/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 +4:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:5/0/physics_layer_1/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 +7:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:5/0/physics_layer_1/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 +3:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:6/0/physics_layer_1/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 +4:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:6/0/physics_layer_1/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 +7:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:6/0/physics_layer_1/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 +2:7/0/physics_layer_1/linear_velocity = Vector2(0, 0) +2:7/0/physics_layer_1/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 +3:7/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:7/0/physics_layer_1/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 +4:7/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:7/0/physics_layer_1/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 +5:7/0/physics_layer_1/linear_velocity = Vector2(0, 0) +5:7/0/physics_layer_1/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 +8:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +8:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:0/0/physics_layer_1/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 +9:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +9:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:0/0/physics_layer_1/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) +10:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:0/0/physics_layer_1/angular_velocity = 0.0 +11:0/0 = 0 +11:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:0/0/physics_layer_0/angular_velocity = 0.0 +11:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +11:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:0/0/physics_layer_1/angular_velocity = 0.0 +12:0/0 = 0 +12:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:0/0/physics_layer_0/angular_velocity = 0.0 +12:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:0/0/physics_layer_1/angular_velocity = 0.0 +13:0/0 = 0 +13:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:0/0/physics_layer_0/angular_velocity = 0.0 +13:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +13:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:0/0/physics_layer_1/angular_velocity = 0.0 +14:0/0 = 0 +14:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:0/0/physics_layer_0/angular_velocity = 0.0 +14:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:0/0/physics_layer_1/angular_velocity = 0.0 +14:0/0/physics_layer_1/polygon_0/points = PackedVector2Array(8, -8, 8, 8, -8, 8) +14:0/0/custom_data_0 = &"Sign" +15:0/0 = 0 +15:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:0/0/physics_layer_0/angular_velocity = 0.0 +15:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:0/0/physics_layer_1/angular_velocity = 0.0 +16:0/0 = 0 +16:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:0/0/physics_layer_0/angular_velocity = 0.0 +16:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:0/0/physics_layer_1/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 +8:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +8:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:1/0/physics_layer_1/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 +9:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +9:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:1/0/physics_layer_1/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) +10:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:1/0/physics_layer_1/angular_velocity = 0.0 +11:1/0 = 0 +11:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:1/0/physics_layer_0/angular_velocity = 0.0 +11:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +11:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:1/0/physics_layer_1/angular_velocity = 0.0 +12:1/0 = 0 +12:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:1/0/physics_layer_0/angular_velocity = 0.0 +12:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:1/0/physics_layer_1/angular_velocity = 0.0 +13:1/0 = 0 +13:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:1/0/physics_layer_0/angular_velocity = 0.0 +13:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +13:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:1/0/physics_layer_1/angular_velocity = 0.0 +14:1/0 = 0 +14:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:1/0/physics_layer_0/angular_velocity = 0.0 +14:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:1/0/physics_layer_1/angular_velocity = 0.0 +15:1/0 = 0 +15:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:1/0/physics_layer_0/angular_velocity = 0.0 +15:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:1/0/physics_layer_1/angular_velocity = 0.0 +16:1/0 = 0 +16:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:1/0/physics_layer_0/angular_velocity = 0.0 +16:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:1/0/physics_layer_1/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 +8:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +8:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:2/0/physics_layer_1/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 +9:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +9:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:2/0/physics_layer_1/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) +10:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:2/0/physics_layer_1/angular_velocity = 0.0 +11:2/0 = 0 +11:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:2/0/physics_layer_0/angular_velocity = 0.0 +11:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +11:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:2/0/physics_layer_1/angular_velocity = 0.0 +12:2/0 = 0 +12:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:2/0/physics_layer_0/angular_velocity = 0.0 +12:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:2/0/physics_layer_1/angular_velocity = 0.0 +13:2/0 = 0 +13:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:2/0/physics_layer_0/angular_velocity = 0.0 +13:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +13:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:2/0/physics_layer_1/angular_velocity = 0.0 +14:2/0 = 0 +14:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:2/0/physics_layer_0/angular_velocity = 0.0 +14:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:2/0/physics_layer_1/angular_velocity = 0.0 +15:2/0 = 0 +15:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:2/0/physics_layer_0/angular_velocity = 0.0 +15:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:2/0/physics_layer_1/angular_velocity = 0.0 +16:2/0 = 0 +16:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:2/0/physics_layer_0/angular_velocity = 0.0 +16:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:2/0/physics_layer_1/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 +8:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +8:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:3/0/physics_layer_1/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 +9:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +9:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:3/0/physics_layer_1/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) +10:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:3/0/physics_layer_1/angular_velocity = 0.0 +11:3/0 = 0 +11:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:3/0/physics_layer_0/angular_velocity = 0.0 +11:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:3/0/physics_layer_1/angular_velocity = 0.0 +12:3/0 = 0 +12:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:3/0/physics_layer_0/angular_velocity = 0.0 +12:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:3/0/physics_layer_1/angular_velocity = 0.0 +13:3/0 = 0 +13:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:3/0/physics_layer_0/angular_velocity = 0.0 +13:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +13:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:3/0/physics_layer_1/angular_velocity = 0.0 +14:3/0 = 0 +14:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:3/0/physics_layer_0/angular_velocity = 0.0 +14:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:3/0/physics_layer_1/angular_velocity = 0.0 +15:3/0 = 0 +15:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:3/0/physics_layer_0/angular_velocity = 0.0 +15:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:3/0/physics_layer_1/angular_velocity = 0.0 +16:3/0 = 0 +16:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:3/0/physics_layer_0/angular_velocity = 0.0 +16:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:3/0/physics_layer_1/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 +8:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:4/0/physics_layer_1/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 +9:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:4/0/physics_layer_1/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_1/linear_velocity = Vector2(0, 0) +10:4/0/physics_layer_1/angular_velocity = 0.0 +11:4/0 = 0 +11:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:4/0/physics_layer_0/angular_velocity = 0.0 +11:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-7, 2.5, -5, -2, -2.5, -5, 2, -7, 8, -8, 8, 8, -8, 8) +11:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:4/0/physics_layer_1/angular_velocity = 0.0 +12:4/0 = 0 +12:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:4/0/physics_layer_0/angular_velocity = 0.0 +12:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:4/0/physics_layer_1/angular_velocity = 0.0 +13:4/0 = 0 +13:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:4/0/physics_layer_0/angular_velocity = 0.0 +13:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 0, -6, 4, -1.5, 6.5, 1.5, 8, 8, -8, 8) +13:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:4/0/physics_layer_1/angular_velocity = 0.0 +14:4/0 = 0 +14:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:4/0/physics_layer_0/angular_velocity = 0.0 +14:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:4/0/physics_layer_1/angular_velocity = 0.0 +14:4/0/physics_layer_1/polygon_0/points = PackedVector2Array(-8, -8, -8, 8, 8, 8, 8, -8) +14:4/0/custom_data_0 = &"Inventory" +15:4/0 = 0 +15:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:4/0/physics_layer_0/angular_velocity = 0.0 +15:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:4/0/physics_layer_1/angular_velocity = 0.0 +16:4/0 = 0 +16:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:4/0/physics_layer_0/angular_velocity = 0.0 +16:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:4/0/physics_layer_1/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 +8:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:5/0/physics_layer_1/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 +9:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:5/0/physics_layer_1/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_1/linear_velocity = Vector2(0, 0) +10:5/0/physics_layer_1/angular_velocity = 0.0 +11:5/0 = 0 +11:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:5/0/physics_layer_0/angular_velocity = 0.0 +11:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +11:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:5/0/physics_layer_1/angular_velocity = 0.0 +12:5/0 = 0 +12:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:5/0/physics_layer_0/angular_velocity = 0.0 +12:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:5/0/physics_layer_1/angular_velocity = 0.0 +13:5/0 = 0 +13:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:5/0/physics_layer_0/angular_velocity = 0.0 +13:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +13:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:5/0/physics_layer_1/angular_velocity = 0.0 +14:5/0 = 0 +14:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:5/0/physics_layer_0/angular_velocity = 0.0 +14:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:5/0/physics_layer_1/angular_velocity = 0.0 +15:5/0 = 0 +15:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:5/0/physics_layer_0/angular_velocity = 0.0 +15:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:5/0/physics_layer_1/angular_velocity = 0.0 +16:5/0 = 0 +16:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:5/0/physics_layer_0/angular_velocity = 0.0 +16:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:5/0/physics_layer_1/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 +8:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:6/0/physics_layer_1/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 +9:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:6/0/physics_layer_1/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_1/linear_velocity = Vector2(0, 0) +10:6/0/physics_layer_1/angular_velocity = 0.0 +11:6/0 = 0 +11:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:6/0/physics_layer_0/angular_velocity = 0.0 +11:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, 1, 6.5, -3, 3, -6.5, -1.5) +11:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:6/0/physics_layer_1/angular_velocity = 0.0 +12:6/0 = 0 +12:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:6/0/physics_layer_0/angular_velocity = 0.0 +12:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:6/0/physics_layer_1/angular_velocity = 0.0 +13:6/0 = 0 +13:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:6/0/physics_layer_0/angular_velocity = 0.0 +13:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 6, -0.5, 3, 3.5, -1.5, 6.5, -8, 8) +13:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:6/0/physics_layer_1/angular_velocity = 0.0 +14:6/0 = 0 +14:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:6/0/physics_layer_0/angular_velocity = 0.0 +14:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:6/0/physics_layer_1/angular_velocity = 0.0 +15:6/0 = 0 +15:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:6/0/physics_layer_0/angular_velocity = 0.0 +15:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:6/0/physics_layer_1/angular_velocity = 0.0 +16:6/0 = 0 +16:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:6/0/physics_layer_0/angular_velocity = 0.0 +16:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:6/0/physics_layer_1/angular_velocity = 0.0 + +[sub_resource type="TileSet" id="TileSet_kf7eg"] +physics_layer_0/collision_layer = 1 +physics_layer_1/collision_layer = 2 +physics_layer_1/collision_mask = 2 +custom_data_layer_0/name = "Type" +custom_data_layer_0/type = 21 +sources/0 = SubResource("TileSetAtlasSource_easgx") + +[sub_resource type="Resource" id="Resource_spy00"] +script = ExtResource("7_awenl") +duration = 0.3 +transition = 4 +ease = 2 + +[node name="ExampleScene2D" type="Node2D"] + +[node name="Background" type="CanvasLayer" parent="."] +layer = -3 + +[node name="ColorRect" type="ColorRect" parent="Background"] +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_left = -311.0 +offset_top = -173.0 +offset_right = 981.0 +offset_bottom = 548.0 +grow_horizontal = 2 +grow_vertical = 2 +auto_translate = false +localize_numeral_system = false +color = Color(0.137255, 0.14902, 0.196078, 1) + +[node name="TileMap" type="TileMap" parent="."] +z_index = -1 +scale = Vector2(3, 3) +tile_set = SubResource("TileSet_kf7eg") +format = 2 +layer_0/name = "Background" +layer_0/tile_data = PackedInt32Array(-393216, 655360, 2, -327680, 655360, 3, -262144, 655360, 3, -196608, 655360, 3, -131072, 655360, 3, -65536, 655360, 3, -393215, 720896, 2, -327679, 720896, 1, -262143, 720896, 1, -196607, 720896, 1, -131071, 720896, 1, -65535, 720896, 1, -393214, 786432, 2, -327678, 786432, 3, -262142, 786432, 3, -196606, 786432, 3, -131070, 786432, 3, -65534, 786432, 3) +layer_1/name = "Terrain" +layer_1/z_index = 1 +layer_1/tile_data = PackedInt32Array(1, 720896, 0, 2, 720896, 0, 3, 720896, 0, 4, 720896, 0, 5, 720896, 0, 6, 720896, 0, 7, 720896, 0, 8, 720896, 0, 9, 786432, 0, 65545, 786432, 1, 131081, 786432, 1, 196617, 786432, 1, 262153, 786432, 1, 327689, 786432, 1, 393225, 786432, 1, 65537, 720896, 1, 131073, 720896, 1, 196609, 720896, 1, 262145, 458752, 1, 327681, 720896, 1, 393217, 720896, 1, 65538, 720896, 1, 131074, 720896, 1, 196610, 720896, 1, 262146, 720896, 1, 327682, 720896, 1, 393218, 720896, 1, 65539, 720896, 1, 131075, 720896, 1, 196611, 720896, 1, 262147, 720896, 1, 327683, 720896, 1, 393219, 720896, 1, 65540, 458752, 1, 131076, 720896, 1, 196612, 720896, 1, 262148, 720896, 1, 327684, 720896, 1, 393220, 720896, 1, 65541, 720896, 1, 131077, 720896, 1, 196613, 720896, 1, 262149, 458752, 1, 327685, 720896, 1, 393221, 720896, 1, 65542, 720896, 1, 131078, 720896, 1, 196614, 720896, 1, 262150, 720896, 1, 327686, 720896, 1, 393222, 720896, 1, 65543, 720896, 1, 131079, 720896, 1, 196615, 720896, 1, 262151, 720896, 1, 327687, 720896, 1, 393223, 458752, 1, 65544, 720896, 1, 131080, 720896, 1, 196616, 458752, 1, 262152, 720896, 1, 327688, 720896, 1, 393224, 720896, 1, 65546, 524288, 5, 65547, 524288, 5, 65548, 524288, 5, 65549, 524288, 5, 131082, 524288, 6, 131083, 524288, 6, 131084, 524288, 6, 131085, 524288, 6, 196618, 720896, 1, 262154, 720896, 1, 196619, 720896, 1, 262155, 720896, 1, 196620, 720896, 1, 262156, 720896, 1, 196621, 720896, 1, 262157, 720896, 1, 65550, 524288, 5, 65551, 524288, 5, 65552, 524288, 5, 131086, 524288, 6, 131087, 524288, 6, 131088, 524288, 6, 196622, 720896, 1, 196623, 720896, 1, 262159, 720896, 1, 262160, 720896, 1, 196624, 720896, 1, 262158, 720896, 1, 17, 720896, 4, 65553, 720896, 5, 131089, 720896, 5, 196625, 720896, 5, 262161, 720896, 5, 18, 786432, 4, 19, 786432, 4, 20, 786432, 4, 21, 786432, 4, 22, 786432, 4, 23, 786432, 4, 65554, 786432, 5, 131090, 786432, 5, 196626, 786432, 5, 262162, 786432, 5, 65555, 786432, 5, 131091, 589824, 6, 196627, 786432, 5, 262163, 786432, 5, 65556, 786432, 5, 131092, 786432, 5, 196628, 786432, 5, 262164, 786432, 5, 65557, 786432, 5, 131093, 786432, 5, 196629, 786432, 5, 262165, 786432, 5, 65558, 786432, 5, 131094, 786432, 5, 196630, 786432, 5, 262166, 655360, 6, 65559, 786432, 5, 131095, 786432, 5, 196631, 786432, 5, 262167, 786432, 5, 327697, 720896, 5, 393233, 720896, 5, 327698, 589824, 6, 393234, 786432, 5, 327699, 786432, 5, 393235, 786432, 5, 327700, 786432, 5, 393236, 786432, 5, 327701, 786432, 5, 393237, 786432, 5, 327702, 786432, 5, 393238, 786432, 5, 327703, 786432, 5, 393239, 786432, 5, -131062, 720896, 4, -131061, 786432, 4, -131060, 786432, 4, -65526, 720896, 6, -65525, 786432, 6, -65524, 786432, 6, -131056, 851968, 4, -65520, 851968, 6, -131059, 786432, 4, -131058, 786432, 4, -131057, 786432, 4, -65523, 786432, 6, -65522, 786432, 6, -65521, 786432, 6, -196596, 917504, 0, -65536, 917504, 2, -65535, 983040, 2, -65534, 1048576, 2, -65533, 917504, 2, -65532, 983040, 2, -65531, 1048576, 2, -65530, 917504, 2, -65529, 983040, 2, -65528, 1048576, 2, 65535, 655360, 0, 131071, 655360, 1, 196607, 655360, 1, 262143, 655360, 1, 327679, 655360, 1, 393215, 655360, 1, 458751, 655360, 1, 524287, 655360, 1, 589823, 655360, 1, 0, 720896, 0, 65536, 720896, 1, 131072, 720896, 1, 196608, 720896, 1, 262144, 720896, 1, 327680, 720896, 1, 393216, 720896, 1, 458752, 720896, 1, 524288, 720896, 1, 524289, 720896, 1, 524290, 720896, 1, 524291, 720896, 1, 524292, 720896, 1, 524293, 720896, 1, 524294, 720896, 1, 524295, 720896, 1, 524296, 720896, 1, 524297, 786432, 1, 458761, 786432, 1, 458760, 720896, 1, 458759, 720896, 1, 458758, 458752, 1, 458757, 720896, 1, 458756, 720896, 1, 458755, 720896, 1, 458754, 720896, 1, 458753, 720896, 1, -262145, 851968, 4, -196609, 851968, 5, -131073, 851968, 5, -65537, 851968, 5, -1, 851968, 6, -262146, 786432, 4, -262147, 786432, 4, -196610, 589824, 6, -196611, 786432, 5, -6, 786432, 5, -5, 786432, 5, -4, 786432, 5, -3, 786432, 5, -2, 786432, 5, -65538, 786432, 5, -131074, 786432, 5, -131075, 786432, 5, -65539, 655360, 6, 65534, 851968, 5, 131070, 851968, 5, 196606, 851968, 5, 262142, 851968, 5, 327678, 851968, 5, 393214, 851968, 5, 458750, 851968, 5, 65533, 786432, 5, 65532, 786432, 5, 65531, 786432, 5, 65530, 786432, 5, 65529, 720896, 5, 131066, 786432, 5, 196602, 786432, 5, 262138, 786432, 5, 262139, 786432, 5, 327675, 786432, 5, 131068, 786432, 5, 131069, 786432, 5, 196605, 786432, 5, 262141, 786432, 5, 327677, 786432, 5, 393213, 786432, 5, 458749, 786432, 5, 393212, 786432, 5, 393211, 786432, 5, 458748, 786432, 5, 327676, 655360, 6, 262140, 786432, 5, 196604, 786432, 5, 131067, 786432, 5, 196603, 589824, 6, 458747, 786432, 5, 458746, 786432, 5, 393210, 786432, 5, 327674, 786432, 5, -7, 720896, 5, 131065, 720896, 5, 196601, 720896, 5, 262137, 720896, 5, 327673, 720896, 5, 393209, 720896, 5, 458745, 720896, 5, -327684, 720896, 3, -196594, 720896, 3, -196597, 720896, 3, -65518, 720896, 3, -65516, 720896, 3, -327686, 1048576, 5, -327685, 720896, 3, -196595, 917504, 6, -65514, 983040, 6, -327683, 983040, 5, -65513, 1048576, 5, -262151, 720896, 4, -196615, 720896, 5, -131079, 720896, 5, -65543, 720896, 5, -262150, 786432, 4, -196614, 655360, 6, -131078, 786432, 5, -65542, 786432, 5, -262149, 786432, 4, -196613, 786432, 5, -131077, 786432, 5, -65541, 786432, 5, -262148, 786432, 4, -196612, 786432, 5, -131076, 786432, 5, -65540, 786432, 5, 458769, 720896, 5, 524305, 720896, 6, 458775, 786432, 5, 458774, 786432, 5, 458773, 786432, 5, 458772, 786432, 5, 458771, 786432, 5, 458770, 786432, 5, 524306, 786432, 6, 524307, 786432, 6, 524308, 786432, 6, 524309, 786432, 6, 524310, 786432, 6, 524311, 786432, 6, 327690, 720896, 1, 393226, 720896, 1, 458762, 720896, 1, 524298, 720896, 1, 327691, 720896, 1, 393227, 720896, 1, 458763, 720896, 1, 524299, 720896, 1, 327692, 720896, 1, 393228, 720896, 1, 458764, 720896, 1, 524300, 720896, 1, 327693, 720896, 1, 393229, 720896, 1, 458765, 720896, 1, 524301, 720896, 1, 327694, 720896, 1, 393230, 720896, 1, 458766, 720896, 1, 524302, 720896, 1, 327695, 720896, 1, 393231, 720896, 1, 458767, 720896, 1, 524303, 720896, 1, 327696, 720896, 1, 393232, 720896, 1, 458768, 720896, 1, 524304, 720896, 1, 29, 851968, 4, 65565, 851968, 5, 131101, 851968, 5, 196637, 851968, 5, 262173, 851968, 5, 327709, 851968, 5, 393245, 851968, 5, 458781, 851968, 5, 524317, 851968, 6, -65511, 917504, 4, 24, 786432, 4, 25, 786432, 4, 26, 786432, 4, 27, 786432, 4, 28, 786432, 4, 65560, 786432, 5, 65561, 786432, 5, 65562, 786432, 5, 65563, 786432, 5, 65564, 786432, 5, 131100, 786432, 5, 196636, 589824, 6, 131099, 786432, 5, 131098, 786432, 5, 131097, 786432, 5, 131096, 786432, 5, 196632, 786432, 5, 262168, 786432, 5, 327704, 786432, 5, 393240, 786432, 5, 458776, 786432, 5, 524312, 786432, 6, 196633, 786432, 5, 262169, 786432, 5, 327705, 786432, 5, 393241, 786432, 5, 458777, 786432, 5, 524313, 786432, 6, 196634, 786432, 5, 262170, 786432, 5, 327706, 786432, 5, 393242, 655360, 6, 458778, 786432, 5, 524314, 786432, 6, 196635, 786432, 5, 262171, 786432, 5, 327707, 786432, 5, 393243, 786432, 5, 458779, 786432, 5, 524315, 786432, 6, 262172, 786432, 5, 327708, 786432, 5, 393244, 786432, 5, 458780, 786432, 5, 524316, 786432, 6, -196593, 1048576, 6, -393182, 1048576, 6, -393185, 917504, 6, -393180, 983040, 6, -393184, 983040, 5, -65509, 720896, 3, -65510, 720896, 3, -393181, 720896, 3, -393183, 720896, 3, -65517, 720896, 3, -65515, 720896, 3, -327650, 720896, 4, -262114, 720896, 5, -196578, 720896, 5, -131042, 720896, 5, -65506, 720896, 5, -65498, 851968, 5, -131034, 851968, 5, -196570, 851968, 5, -327642, 851968, 4, -327649, 786432, 4, -327648, 786432, 4, -327647, 786432, 4, -327646, 786432, 4, -327645, 786432, 4, -327644, 786432, 4, -327643, 786432, 4, -262106, 851968, 5, -65499, 786432, 5, -131035, 786432, 5, -196571, 786432, 5, -262107, 786432, 5, -262108, 786432, 5, -262109, 786432, 5, -262110, 786432, 5, -262111, 786432, 5, -262112, 786432, 5, -262113, 786432, 5, -196577, 655360, 6, -131041, 786432, 5, -65505, 786432, 5, -65500, 655360, 6, -131036, 589824, 6, -196572, 786432, 5, -196573, 786432, 5, -196574, 786432, 5, -196575, 786432, 5, -196576, 786432, 5, -131040, 589824, 6, -65504, 786432, 5, -65501, 786432, 5, -131037, 786432, 5, -131038, 786432, 5, -131039, 786432, 5, -65503, 786432, 5, -65502, 786432, 5, 524318, 720896, 6, 458782, 720896, 5, 393246, 720896, 5, 327710, 720896, 5, 262174, 720896, 5, 196638, 720896, 5, 131102, 720896, 5, 65566, 720896, 5, 30, 720896, 5, 524319, 786432, 6, 524320, 786432, 6, 524321, 786432, 6, 524322, 786432, 6, 524323, 786432, 6, 524324, 786432, 6, 524325, 786432, 6, 524326, 851968, 6, 38, 851968, 5, 65574, 851968, 5, 131110, 851968, 5, 196646, 851968, 5, 262182, 851968, 5, 327718, 851968, 5, 393254, 851968, 5, 458790, 851968, 5, 31, 786432, 5, 65567, 786432, 5, 131103, 786432, 5, 196639, 786432, 5, 262175, 786432, 5, 327711, 786432, 5, 393247, 655360, 6, 458783, 786432, 5, 32, 786432, 5, 65568, 786432, 5, 131104, 786432, 5, 196640, 786432, 5, 262176, 786432, 5, 327712, 786432, 5, 393248, 786432, 5, 458784, 786432, 5, 33, 786432, 5, 65569, 786432, 5, 131105, 655360, 6, 196641, 786432, 5, 262177, 786432, 5, 327713, 786432, 5, 393249, 786432, 5, 458785, 786432, 5, 34, 786432, 5, 65570, 786432, 5, 131106, 786432, 5, 196642, 786432, 5, 262178, 655360, 6, 327714, 655360, 6, 393250, 786432, 5, 458786, 786432, 5, 35, 786432, 5, 65571, 786432, 5, 131107, 786432, 5, 196643, 786432, 5, 262179, 786432, 5, 327715, 786432, 5, 393251, 786432, 5, 458787, 786432, 5, 36, 655360, 6, 65572, 786432, 5, 131108, 786432, 5, 196644, 786432, 5, 262180, 786432, 5, 327716, 786432, 5, 393252, 786432, 5, 458788, 655360, 6, 37, 786432, 5, 65573, 786432, 5, 131109, 786432, 5, 196645, 786432, 5, 262181, 786432, 5, 327717, 786432, 5, 393253, 786432, 5, 458789, 786432, 5) + +[node name="UI" type="CanvasLayer" parent="."] + +[node name="UIInventory" parent="UI" instance=ExtResource("2_tafwr")] +unique_name_in_owner = true +visible = false + +[node name="UISign" parent="UI" instance=ExtResource("3_37c7w")] +unique_name_in_owner = true +visible = false + +[node name="Camera2D" type="Camera2D" parent="."] +position = Vector2(107, -172.5) +position_smoothing_speed = 8.0 + +[node name="PhantomCameraHost" type="Node" parent="Camera2D"] +script = ExtResource("4_dxiro") + +[node name="Label" type="Label" parent="."] +offset_left = 167.0 +offset_top = -133.0 +offset_right = 332.0 +offset_bottom = -69.0 +theme_override_colors/font_color = Color(0.294118, 1, 0.631373, 1) +theme_override_fonts/font = ExtResource("5_gaaip") +text = "[WASD] to move +[Space] to jump" + +[node name="PhantomCamera2D" type="Node2D" parent="." node_paths=PackedStringArray("follow_targets")] +position = Vector2(107, -172.5) +script = ExtResource("6_ojk83") +priority = 10 +follow_mode = 3 +follow_targets = [NodePath("../GroupNPCSprite"), NodePath("../CharacterBody2D")] +tween_resource = SubResource("Resource_spy00") +tween_on_load = false +follow_damping = true +auto_zoom = true +auto_zoom_margin = Vector4(200, 0, 200, 0) +draw_limits = true + +[node name="GroupNPCSprite" type="Sprite2D" parent="."] +unique_name_in_owner = true +position = Vector2(107, -316) +texture = ExtResource("8_ys0m4") + +[node name="CharacterBody2D" parent="." instance=ExtResource("9_witv0")] +position = Vector2(265, -29) +script = ExtResource("10_aivri") diff --git a/addons/phantom_camera/examples/example_scenes/2D-4.3/2d_follow_path_example_scene.tscn b/addons/phantom_camera/examples/example_scenes/2D-4.3/2d_follow_path_example_scene.tscn new file mode 100644 index 0000000..260aa31 --- /dev/null +++ b/addons/phantom_camera/examples/example_scenes/2D-4.3/2d_follow_path_example_scene.tscn @@ -0,0 +1,659 @@ +[gd_scene load_steps=13 format=3 uid="uid://b75giavcvh1mv"] + +[ext_resource type="Texture2D" uid="uid://c77npili4pel4" path="res://addons/phantom_camera/examples/textures/2D/level_spritesheet.png" id="1_t003o"] +[ext_resource type="PackedScene" uid="uid://dg7rhrymsrrrm" path="res://addons/phantom_camera/examples/ui/ui_inventory.tscn" id="2_4ncqd"] +[ext_resource type="PackedScene" uid="uid://iq5xd1ob1res" path="res://addons/phantom_camera/examples/ui/ui_sign.tscn" id="3_tpji3"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/phantom_camera_host/phantom_camera_host.gd" id="4_w0rat"] +[ext_resource type="FontFile" uid="uid://c4mm3of2mc8o5" path="res://addons/phantom_camera/fonts/Nunito-Black.ttf" id="5_q77r4"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/phantom_camera/phantom_camera_2d.gd" id="6_y6hoa"] +[ext_resource type="Resource" uid="uid://euybd2w0bax" path="res://addons/phantom_camera/examples/resources/tween/player_phantom_camera_2d_tween.tres" id="7_wd55r"] +[ext_resource type="PackedScene" uid="uid://7kh0xydx0b1o" path="res://addons/phantom_camera/examples/example_scenes/2D/sub_scenes/playable_character_2d.tscn" id="8_fy81j"] +[ext_resource type="Script" path="res://addons/phantom_camera/examples/scripts/2D/player_character_body_2d_4.3.gd" id="9_u6ygl"] + +[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_easgx"] +texture = ExtResource("1_t003o") +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_1/linear_velocity = Vector2(0, 0) +0:0/0/physics_layer_1/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 +1:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +1:0/0/physics_layer_1/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 +2:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +2:0/0/physics_layer_1/angular_velocity = 0.0 +3:0/0 = 0 +3:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:0/0/physics_layer_0/angular_velocity = 0.0 +3:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:0/0/physics_layer_1/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 +4:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:0/0/physics_layer_1/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 +5:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +5:0/0/physics_layer_1/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 +6:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +6:0/0/physics_layer_1/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 +7:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +7:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:0/0/physics_layer_1/angular_velocity = 0.0 +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_1/linear_velocity = Vector2(0, 0) +0:1/0/physics_layer_1/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 +1:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +1:1/0/physics_layer_1/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_1/linear_velocity = Vector2(0, 0) +2:1/0/physics_layer_1/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 +3:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:1/0/physics_layer_1/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 +4:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:1/0/physics_layer_1/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 +5:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +5:1/0/physics_layer_1/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 +7:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +7:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:1/0/physics_layer_1/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 +2:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +2:2/0/physics_layer_1/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 +3:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:2/0/physics_layer_1/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 +4:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:2/0/physics_layer_1/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 +7:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +7:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:2/0/physics_layer_1/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 +3:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:3/0/physics_layer_1/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 +4:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:3/0/physics_layer_1/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 +5:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +5:3/0/physics_layer_1/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 +7:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +7:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:3/0/physics_layer_1/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 +3:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:4/0/physics_layer_1/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 +4:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:4/0/physics_layer_1/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 +5:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +5:4/0/physics_layer_1/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 +7:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:4/0/physics_layer_1/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 +3:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:5/0/physics_layer_1/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 +4:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:5/0/physics_layer_1/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 +7:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:5/0/physics_layer_1/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 +3:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:6/0/physics_layer_1/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 +4:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:6/0/physics_layer_1/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 +7:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:6/0/physics_layer_1/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 +2:7/0/physics_layer_1/linear_velocity = Vector2(0, 0) +2:7/0/physics_layer_1/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 +3:7/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:7/0/physics_layer_1/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 +4:7/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:7/0/physics_layer_1/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 +5:7/0/physics_layer_1/linear_velocity = Vector2(0, 0) +5:7/0/physics_layer_1/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 +8:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +8:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:0/0/physics_layer_1/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 +9:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +9:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:0/0/physics_layer_1/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) +10:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:0/0/physics_layer_1/angular_velocity = 0.0 +11:0/0 = 0 +11:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:0/0/physics_layer_0/angular_velocity = 0.0 +11:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +11:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:0/0/physics_layer_1/angular_velocity = 0.0 +12:0/0 = 0 +12:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:0/0/physics_layer_0/angular_velocity = 0.0 +12:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:0/0/physics_layer_1/angular_velocity = 0.0 +13:0/0 = 0 +13:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:0/0/physics_layer_0/angular_velocity = 0.0 +13:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +13:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:0/0/physics_layer_1/angular_velocity = 0.0 +14:0/0 = 0 +14:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:0/0/physics_layer_0/angular_velocity = 0.0 +14:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:0/0/physics_layer_1/angular_velocity = 0.0 +14:0/0/physics_layer_1/polygon_0/points = PackedVector2Array(8, -8, 8, 8, -8, 8) +14:0/0/custom_data_0 = &"Sign" +15:0/0 = 0 +15:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:0/0/physics_layer_0/angular_velocity = 0.0 +15:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:0/0/physics_layer_1/angular_velocity = 0.0 +16:0/0 = 0 +16:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:0/0/physics_layer_0/angular_velocity = 0.0 +16:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:0/0/physics_layer_1/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 +8:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +8:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:1/0/physics_layer_1/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 +9:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +9:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:1/0/physics_layer_1/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) +10:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:1/0/physics_layer_1/angular_velocity = 0.0 +11:1/0 = 0 +11:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:1/0/physics_layer_0/angular_velocity = 0.0 +11:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +11:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:1/0/physics_layer_1/angular_velocity = 0.0 +12:1/0 = 0 +12:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:1/0/physics_layer_0/angular_velocity = 0.0 +12:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:1/0/physics_layer_1/angular_velocity = 0.0 +13:1/0 = 0 +13:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:1/0/physics_layer_0/angular_velocity = 0.0 +13:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +13:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:1/0/physics_layer_1/angular_velocity = 0.0 +14:1/0 = 0 +14:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:1/0/physics_layer_0/angular_velocity = 0.0 +14:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:1/0/physics_layer_1/angular_velocity = 0.0 +15:1/0 = 0 +15:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:1/0/physics_layer_0/angular_velocity = 0.0 +15:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:1/0/physics_layer_1/angular_velocity = 0.0 +16:1/0 = 0 +16:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:1/0/physics_layer_0/angular_velocity = 0.0 +16:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:1/0/physics_layer_1/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 +8:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +8:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:2/0/physics_layer_1/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 +9:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +9:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:2/0/physics_layer_1/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) +10:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:2/0/physics_layer_1/angular_velocity = 0.0 +11:2/0 = 0 +11:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:2/0/physics_layer_0/angular_velocity = 0.0 +11:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +11:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:2/0/physics_layer_1/angular_velocity = 0.0 +12:2/0 = 0 +12:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:2/0/physics_layer_0/angular_velocity = 0.0 +12:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:2/0/physics_layer_1/angular_velocity = 0.0 +13:2/0 = 0 +13:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:2/0/physics_layer_0/angular_velocity = 0.0 +13:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +13:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:2/0/physics_layer_1/angular_velocity = 0.0 +14:2/0 = 0 +14:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:2/0/physics_layer_0/angular_velocity = 0.0 +14:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:2/0/physics_layer_1/angular_velocity = 0.0 +15:2/0 = 0 +15:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:2/0/physics_layer_0/angular_velocity = 0.0 +15:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:2/0/physics_layer_1/angular_velocity = 0.0 +16:2/0 = 0 +16:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:2/0/physics_layer_0/angular_velocity = 0.0 +16:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:2/0/physics_layer_1/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 +8:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +8:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:3/0/physics_layer_1/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 +9:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +9:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:3/0/physics_layer_1/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) +10:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:3/0/physics_layer_1/angular_velocity = 0.0 +11:3/0 = 0 +11:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:3/0/physics_layer_0/angular_velocity = 0.0 +11:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:3/0/physics_layer_1/angular_velocity = 0.0 +12:3/0 = 0 +12:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:3/0/physics_layer_0/angular_velocity = 0.0 +12:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:3/0/physics_layer_1/angular_velocity = 0.0 +13:3/0 = 0 +13:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:3/0/physics_layer_0/angular_velocity = 0.0 +13:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +13:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:3/0/physics_layer_1/angular_velocity = 0.0 +14:3/0 = 0 +14:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:3/0/physics_layer_0/angular_velocity = 0.0 +14:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:3/0/physics_layer_1/angular_velocity = 0.0 +15:3/0 = 0 +15:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:3/0/physics_layer_0/angular_velocity = 0.0 +15:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:3/0/physics_layer_1/angular_velocity = 0.0 +16:3/0 = 0 +16:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:3/0/physics_layer_0/angular_velocity = 0.0 +16:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:3/0/physics_layer_1/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 +8:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:4/0/physics_layer_1/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 +9:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:4/0/physics_layer_1/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_1/linear_velocity = Vector2(0, 0) +10:4/0/physics_layer_1/angular_velocity = 0.0 +11:4/0 = 0 +11:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:4/0/physics_layer_0/angular_velocity = 0.0 +11:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-7, 2.5, -5, -2, -2.5, -5, 2, -7, 8, -8, 8, 8, -8, 8) +11:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:4/0/physics_layer_1/angular_velocity = 0.0 +12:4/0 = 0 +12:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:4/0/physics_layer_0/angular_velocity = 0.0 +12:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:4/0/physics_layer_1/angular_velocity = 0.0 +13:4/0 = 0 +13:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:4/0/physics_layer_0/angular_velocity = 0.0 +13:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 0, -6, 4, -1.5, 6.5, 1.5, 8, 8, -8, 8) +13:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:4/0/physics_layer_1/angular_velocity = 0.0 +14:4/0 = 0 +14:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:4/0/physics_layer_0/angular_velocity = 0.0 +14:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:4/0/physics_layer_1/angular_velocity = 0.0 +14:4/0/physics_layer_1/polygon_0/points = PackedVector2Array(-8, -8, -8, 8, 8, 8, 8, -8) +14:4/0/custom_data_0 = &"Inventory" +15:4/0 = 0 +15:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:4/0/physics_layer_0/angular_velocity = 0.0 +15:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:4/0/physics_layer_1/angular_velocity = 0.0 +16:4/0 = 0 +16:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:4/0/physics_layer_0/angular_velocity = 0.0 +16:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:4/0/physics_layer_1/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 +8:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:5/0/physics_layer_1/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 +9:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:5/0/physics_layer_1/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_1/linear_velocity = Vector2(0, 0) +10:5/0/physics_layer_1/angular_velocity = 0.0 +11:5/0 = 0 +11:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:5/0/physics_layer_0/angular_velocity = 0.0 +11:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +11:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:5/0/physics_layer_1/angular_velocity = 0.0 +12:5/0 = 0 +12:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:5/0/physics_layer_0/angular_velocity = 0.0 +12:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:5/0/physics_layer_1/angular_velocity = 0.0 +13:5/0 = 0 +13:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:5/0/physics_layer_0/angular_velocity = 0.0 +13:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +13:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:5/0/physics_layer_1/angular_velocity = 0.0 +14:5/0 = 0 +14:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:5/0/physics_layer_0/angular_velocity = 0.0 +14:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:5/0/physics_layer_1/angular_velocity = 0.0 +15:5/0 = 0 +15:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:5/0/physics_layer_0/angular_velocity = 0.0 +15:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:5/0/physics_layer_1/angular_velocity = 0.0 +16:5/0 = 0 +16:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:5/0/physics_layer_0/angular_velocity = 0.0 +16:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:5/0/physics_layer_1/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 +8:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:6/0/physics_layer_1/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 +9:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:6/0/physics_layer_1/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_1/linear_velocity = Vector2(0, 0) +10:6/0/physics_layer_1/angular_velocity = 0.0 +11:6/0 = 0 +11:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:6/0/physics_layer_0/angular_velocity = 0.0 +11:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, 1, 6.5, -3, 3, -6.5, -1.5) +11:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:6/0/physics_layer_1/angular_velocity = 0.0 +12:6/0 = 0 +12:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:6/0/physics_layer_0/angular_velocity = 0.0 +12:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:6/0/physics_layer_1/angular_velocity = 0.0 +13:6/0 = 0 +13:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:6/0/physics_layer_0/angular_velocity = 0.0 +13:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 6, -0.5, 3, 3.5, -1.5, 6.5, -8, 8) +13:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:6/0/physics_layer_1/angular_velocity = 0.0 +14:6/0 = 0 +14:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:6/0/physics_layer_0/angular_velocity = 0.0 +14:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:6/0/physics_layer_1/angular_velocity = 0.0 +15:6/0 = 0 +15:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:6/0/physics_layer_0/angular_velocity = 0.0 +15:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:6/0/physics_layer_1/angular_velocity = 0.0 +16:6/0 = 0 +16:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:6/0/physics_layer_0/angular_velocity = 0.0 +16:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:6/0/physics_layer_1/angular_velocity = 0.0 + +[sub_resource type="TileSet" id="TileSet_kf7eg"] +physics_layer_0/collision_layer = 1 +physics_layer_1/collision_layer = 2 +physics_layer_1/collision_mask = 2 +custom_data_layer_0/name = "Type" +custom_data_layer_0/type = 21 +sources/0 = SubResource("TileSetAtlasSource_easgx") + +[sub_resource type="Curve2D" id="Curve2D_usrhf"] +_data = { +"points": PackedVector2Array(-96.4111, 42.3785, 0, 0, 222, 0, 0, 0, 0, 0, 1550, 0) +} +point_count = 2 + +[node name="ExampleScene2D" type="Node2D"] + +[node name="Background" type="CanvasLayer" parent="."] +layer = -3 + +[node name="ColorRect" type="ColorRect" parent="Background"] +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_left = -311.0 +offset_top = -173.0 +offset_right = 981.0 +offset_bottom = 548.0 +grow_horizontal = 2 +grow_vertical = 2 +auto_translate = false +localize_numeral_system = false +color = Color(0.137255, 0.14902, 0.196078, 1) + +[node name="TileMap" type="TileMap" parent="."] +z_index = -1 +scale = Vector2(3, 3) +tile_set = SubResource("TileSet_kf7eg") +format = 2 +layer_0/name = "Background" +layer_0/tile_data = PackedInt32Array(-393216, 655360, 2, -327680, 655360, 3, -262144, 655360, 3, -196608, 655360, 3, -131072, 655360, 3, -65536, 655360, 3, -393215, 720896, 2, -327679, 720896, 1, -262143, 720896, 1, -196607, 720896, 1, -131071, 720896, 1, -65535, 720896, 1, -393214, 786432, 2, -327678, 786432, 3, -262142, 786432, 3, -196606, 786432, 3, -131070, 786432, 3, -65534, 786432, 3) +layer_1/name = "Terrain" +layer_1/z_index = 1 +layer_1/tile_data = PackedInt32Array(1, 720896, 0, 2, 720896, 0, 3, 720896, 0, 4, 720896, 0, 5, 720896, 0, 6, 720896, 0, 7, 720896, 0, 8, 720896, 0, 9, 786432, 0, 65545, 786432, 1, 131081, 786432, 1, 196617, 786432, 1, 262153, 786432, 1, 327689, 786432, 1, 393225, 786432, 1, 65537, 720896, 1, 131073, 720896, 1, 196609, 720896, 1, 262145, 458752, 1, 327681, 720896, 1, 393217, 720896, 1, 65538, 720896, 1, 131074, 720896, 1, 196610, 720896, 1, 262146, 720896, 1, 327682, 720896, 1, 393218, 720896, 1, 65539, 720896, 1, 131075, 720896, 1, 196611, 720896, 1, 262147, 720896, 1, 327683, 720896, 1, 393219, 720896, 1, 65540, 458752, 1, 131076, 720896, 1, 196612, 720896, 1, 262148, 720896, 1, 327684, 720896, 1, 393220, 720896, 1, 65541, 720896, 1, 131077, 720896, 1, 196613, 720896, 1, 262149, 458752, 1, 327685, 720896, 1, 393221, 720896, 1, 65542, 720896, 1, 131078, 720896, 1, 196614, 720896, 1, 262150, 720896, 1, 327686, 720896, 1, 393222, 720896, 1, 65543, 720896, 1, 131079, 720896, 1, 196615, 720896, 1, 262151, 720896, 1, 327687, 720896, 1, 393223, 458752, 1, 65544, 720896, 1, 131080, 720896, 1, 196616, 458752, 1, 262152, 720896, 1, 327688, 720896, 1, 393224, 720896, 1, 65546, 524288, 5, 65547, 524288, 5, 65548, 524288, 5, 65549, 524288, 5, 131082, 524288, 6, 131083, 524288, 6, 131084, 524288, 6, 131085, 524288, 6, 196618, 720896, 1, 262154, 720896, 1, 196619, 720896, 1, 262155, 720896, 1, 196620, 720896, 1, 262156, 720896, 1, 196621, 720896, 1, 262157, 720896, 1, 65550, 524288, 5, 65551, 524288, 5, 65552, 524288, 5, 131086, 524288, 6, 131087, 524288, 6, 131088, 524288, 6, 196622, 720896, 1, 196623, 720896, 1, 262159, 720896, 1, 262160, 720896, 1, 196624, 720896, 1, 262158, 720896, 1, 17, 720896, 4, 65553, 720896, 5, 131089, 720896, 5, 196625, 720896, 5, 262161, 720896, 5, 18, 786432, 4, 19, 786432, 4, 20, 786432, 4, 21, 786432, 4, 22, 786432, 4, 23, 786432, 4, 65554, 786432, 5, 131090, 786432, 5, 196626, 786432, 5, 262162, 786432, 5, 65555, 786432, 5, 131091, 589824, 6, 196627, 786432, 5, 262163, 786432, 5, 65556, 786432, 5, 131092, 786432, 5, 196628, 786432, 5, 262164, 786432, 5, 65557, 786432, 5, 131093, 786432, 5, 196629, 786432, 5, 262165, 786432, 5, 65558, 786432, 5, 131094, 786432, 5, 196630, 786432, 5, 262166, 655360, 6, 65559, 786432, 5, 131095, 786432, 5, 196631, 786432, 5, 262167, 786432, 5, 327697, 720896, 5, 393233, 720896, 5, 327698, 589824, 6, 393234, 786432, 5, 327699, 786432, 5, 393235, 786432, 5, 327700, 786432, 5, 393236, 786432, 5, 327701, 786432, 5, 393237, 786432, 5, 327702, 786432, 5, 393238, 786432, 5, 327703, 786432, 5, 393239, 786432, 5, -131062, 720896, 4, -131061, 786432, 4, -131060, 786432, 4, -65526, 720896, 6, -65525, 786432, 6, -65524, 786432, 6, -131056, 851968, 4, -65520, 851968, 6, -131059, 786432, 4, -131058, 786432, 4, -131057, 786432, 4, -65523, 786432, 6, -65522, 786432, 6, -65521, 786432, 6, -65536, 917504, 2, -65535, 983040, 2, -65534, 1048576, 2, -65533, 917504, 2, -65532, 983040, 2, -65531, 1048576, 2, -65530, 917504, 2, -65529, 983040, 2, -65528, 1048576, 2, 65535, 655360, 0, 131071, 655360, 1, 196607, 655360, 1, 262143, 655360, 1, 327679, 655360, 1, 393215, 655360, 1, 458751, 655360, 1, 524287, 655360, 1, 589823, 655360, 1, 0, 720896, 0, 65536, 720896, 1, 131072, 720896, 1, 196608, 720896, 1, 262144, 720896, 1, 327680, 720896, 1, 393216, 720896, 1, 458752, 720896, 1, 524288, 720896, 1, 524289, 720896, 1, 524290, 720896, 1, 524291, 720896, 1, 524292, 720896, 1, 524293, 720896, 1, 524294, 720896, 1, 524295, 720896, 1, 524296, 720896, 1, 524297, 786432, 1, 458761, 786432, 1, 458760, 720896, 1, 458759, 720896, 1, 458758, 458752, 1, 458757, 720896, 1, 458756, 720896, 1, 458755, 720896, 1, 458754, 720896, 1, 458753, 720896, 1, -262145, 851968, 4, -196609, 851968, 5, -131073, 851968, 5, -65537, 851968, 5, -1, 851968, 6, -262146, 786432, 4, -262147, 786432, 4, -196610, 589824, 6, -196611, 786432, 5, -6, 786432, 5, -5, 786432, 5, -4, 786432, 5, -3, 786432, 5, -2, 786432, 5, -65538, 786432, 5, -131074, 786432, 5, -131075, 786432, 5, -65539, 655360, 6, 65534, 851968, 5, 131070, 851968, 5, 196606, 851968, 5, 262142, 851968, 5, 327678, 851968, 5, 393214, 851968, 5, 458750, 851968, 5, 65533, 786432, 5, 65532, 786432, 5, 65531, 786432, 5, 65530, 786432, 5, 65529, 720896, 5, 131066, 786432, 5, 196602, 786432, 5, 262138, 786432, 5, 262139, 786432, 5, 327675, 786432, 5, 131068, 786432, 5, 131069, 786432, 5, 196605, 786432, 5, 262141, 786432, 5, 327677, 786432, 5, 393213, 786432, 5, 458749, 786432, 5, 393212, 786432, 5, 393211, 786432, 5, 458748, 786432, 5, 327676, 655360, 6, 262140, 786432, 5, 196604, 786432, 5, 131067, 786432, 5, 196603, 589824, 6, 458747, 786432, 5, 458746, 786432, 5, 393210, 786432, 5, 327674, 786432, 5, -7, 720896, 5, 131065, 720896, 5, 196601, 720896, 5, 262137, 720896, 5, 327673, 720896, 5, 393209, 720896, 5, 458745, 720896, 5, -327684, 720896, 3, -196594, 720896, 3, -196597, 720896, 3, -65518, 720896, 3, -65516, 720896, 3, -327686, 1048576, 5, -327685, 720896, 3, -196595, 917504, 6, -65514, 983040, 6, -327683, 983040, 5, -65513, 1048576, 5, -262151, 720896, 4, -196615, 720896, 5, -131079, 720896, 5, -65543, 720896, 5, -262150, 786432, 4, -196614, 655360, 6, -131078, 786432, 5, -65542, 786432, 5, -262149, 786432, 4, -196613, 786432, 5, -131077, 786432, 5, -65541, 786432, 5, -262148, 786432, 4, -196612, 786432, 5, -131076, 786432, 5, -65540, 786432, 5, 458769, 720896, 5, 524305, 720896, 6, 458775, 786432, 5, 458774, 786432, 5, 458773, 786432, 5, 458772, 786432, 5, 458771, 786432, 5, 458770, 786432, 5, 524306, 786432, 6, 524307, 786432, 6, 524308, 786432, 6, 524309, 786432, 6, 524310, 786432, 6, 524311, 786432, 6, 327690, 720896, 1, 393226, 720896, 1, 458762, 720896, 1, 524298, 720896, 1, 327691, 720896, 1, 393227, 720896, 1, 458763, 720896, 1, 524299, 720896, 1, 327692, 720896, 1, 393228, 720896, 1, 458764, 720896, 1, 524300, 720896, 1, 327693, 720896, 1, 393229, 720896, 1, 458765, 720896, 1, 524301, 720896, 1, 327694, 720896, 1, 393230, 720896, 1, 458766, 720896, 1, 524302, 720896, 1, 327695, 720896, 1, 393231, 720896, 1, 458767, 720896, 1, 524303, 720896, 1, 327696, 720896, 1, 393232, 720896, 1, 458768, 720896, 1, 524304, 720896, 1, 29, 851968, 4, 65565, 851968, 5, 131101, 851968, 5, 196637, 851968, 5, 262173, 851968, 5, 327709, 851968, 5, 393245, 851968, 5, 458781, 851968, 5, 524317, 851968, 6, 24, 786432, 4, 25, 786432, 4, 26, 786432, 4, 27, 786432, 4, 28, 786432, 4, 65560, 786432, 5, 65561, 786432, 5, 65562, 786432, 5, 65563, 786432, 5, 65564, 786432, 5, 131100, 786432, 5, 196636, 589824, 6, 131099, 786432, 5, 131098, 786432, 5, 131097, 786432, 5, 131096, 786432, 5, 196632, 786432, 5, 262168, 786432, 5, 327704, 786432, 5, 393240, 786432, 5, 458776, 786432, 5, 524312, 786432, 6, 196633, 786432, 5, 262169, 786432, 5, 327705, 786432, 5, 393241, 786432, 5, 458777, 786432, 5, 524313, 786432, 6, 196634, 786432, 5, 262170, 786432, 5, 327706, 786432, 5, 393242, 655360, 6, 458778, 786432, 5, 524314, 786432, 6, 196635, 786432, 5, 262171, 786432, 5, 327707, 786432, 5, 393243, 786432, 5, 458779, 786432, 5, 524315, 786432, 6, 262172, 786432, 5, 327708, 786432, 5, 393244, 786432, 5, 458780, 786432, 5, 524316, 786432, 6, -196593, 1048576, 6, -65509, 720896, 3, -65510, 720896, 3, -65517, 720896, 3, -65515, 720896, 3, 524282, 786432, 5, 524283, 786432, 5, 524284, 786432, 5, 524285, 786432, 5, 524281, 720896, 5, 524286, 851968, 5, 589817, 720896, 6, 589818, 786432, 6, 589819, 786432, 6, 589820, 786432, 6, 589821, 786432, 6, 589822, 851968, 6, -196569, 720896, 4, -131033, 720896, 5, -65497, 720896, 5, 39, 720896, 5, 65575, 720896, 5, 131111, 720896, 5, 196647, 720896, 5, 262183, 720896, 5, 327719, 720896, 5, 393255, 720896, 5, 458791, 720896, 5, 524327, 720896, 5, 589863, 720896, 5, 655399, 720896, 6, -262104, 917504, 6, -196568, 786432, 4, -131032, 786432, 5, -65496, 655360, 6, 40, 786432, 5, 65576, 786432, 5, 131112, 786432, 5, 196648, 786432, 5, 262184, 786432, 5, 327720, 786432, 5, 393256, 786432, 5, 458792, 786432, 5, 524328, 655360, 6, 589864, 786432, 5, 655400, 786432, 6, -262103, 983040, 5, -196567, 786432, 4, -131031, 786432, 5, -65495, 786432, 5, 41, 589824, 6, 65577, 786432, 5, 131113, 786432, 5, 196649, 786432, 5, 262185, 786432, 5, 327721, 786432, 5, 393257, 786432, 5, 458793, 786432, 5, 524329, 786432, 5, 589865, 786432, 5, 655401, 786432, 6, -262102, 720896, 3, -196566, 786432, 4, -131030, 786432, 5, -65494, 786432, 5, 42, 786432, 5, 65578, 786432, 5, 131114, 786432, 5, 196650, 786432, 5, 262186, 655360, 6, 327722, 786432, 5, 393258, 786432, 5, 458794, 786432, 5, 524330, 786432, 5, 589866, 786432, 5, 655402, 786432, 6, -262101, 1048576, 6, -196565, 786432, 4, -131029, 786432, 5, -65493, 786432, 5, 43, 786432, 5, 65579, 786432, 5, 131115, 786432, 5, 196651, 786432, 5, 262187, 786432, 5, 327723, 786432, 5, 393259, 655360, 6, 458795, 655360, 6, 524331, 786432, 5, 589867, 786432, 5, 655403, 786432, 6, -262100, 720896, 3, -196564, 786432, 4, -131028, 786432, 5, -65492, 786432, 5, 44, 786432, 5, 65580, 786432, 5, 131116, 786432, 5, 196652, 786432, 5, 262188, 786432, 5, 327724, 786432, 5, 393260, 786432, 5, 458796, 786432, 5, 524332, 786432, 5, 589868, 786432, 5, 655404, 786432, 6, -262099, 983040, 6, -196563, 786432, 4, -131027, 786432, 5, -65491, 786432, 5, 45, 589824, 6, 65581, 655360, 6, 131117, 655360, 6, 196653, 786432, 5, 262189, 786432, 5, 327725, 786432, 5, 393261, 786432, 5, 458797, 786432, 5, 524333, 786432, 5, 589869, 655360, 6, 655405, 786432, 6, -196562, 786432, 4, -131026, 786432, 5, -65490, 786432, 5, 46, 786432, 5, 65582, 786432, 5, 131118, 786432, 5, 196654, 786432, 5, 262190, 786432, 5, 327726, 786432, 5, 393262, 786432, 5, 458798, 786432, 5, 524334, 786432, 5, 589870, 786432, 5, 655406, 786432, 6, -196561, 851968, 4, -131025, 851968, 5, -65489, 851968, 5, 47, 851968, 5, 65583, 851968, 5, 131119, 851968, 5, 196655, 851968, 5, 262191, 851968, 5, 327727, 851968, 5, 393263, 851968, 5, 458799, 851968, 5, 524335, 851968, 5, 589871, 851968, 5, 655407, 851968, 6, -131042, 720896, 4, -65506, 720896, 5, 30, 720896, 5, 65566, 720896, 5, 131102, 720896, 5, 196638, 720896, 5, 262174, 720896, 5, 327710, 720896, 5, 393246, 720896, 5, 458782, 720896, 5, 524318, 720896, 5, -196577, 917504, 6, -131041, 786432, 4, -65505, 786432, 5, 31, 655360, 6, 65567, 786432, 5, 131103, 786432, 5, 196639, 786432, 5, 262175, 786432, 5, 327711, 786432, 5, 393247, 786432, 5, 458783, 786432, 5, 524319, 786432, 5, -196576, 983040, 5, -131040, 786432, 4, -65504, 786432, 5, 32, 786432, 5, 65568, 589824, 6, 131104, 786432, 5, 196640, 786432, 5, 262176, 786432, 5, 327712, 786432, 5, 393248, 786432, 5, 458784, 786432, 5, 524320, 786432, 5, -196575, 720896, 3, -131039, 786432, 4, -65503, 786432, 5, 33, 786432, 5, 65569, 786432, 5, 131105, 786432, 5, 196641, 786432, 5, 262177, 786432, 5, 327713, 655360, 6, 393249, 786432, 5, 458785, 786432, 5, 524321, 786432, 5, -196574, 1048576, 6, -131038, 786432, 4, -65502, 786432, 5, 34, 786432, 5, 65570, 786432, 5, 131106, 786432, 5, 196642, 786432, 5, 262178, 786432, 5, 327714, 786432, 5, 393250, 786432, 5, 458786, 655360, 6, 524322, 655360, 6, -196573, 720896, 3, -131037, 786432, 4, -65501, 786432, 5, 35, 786432, 5, 65571, 786432, 5, 131107, 786432, 5, 196643, 786432, 5, 262179, 786432, 5, 327715, 786432, 5, 393251, 786432, 5, 458787, 786432, 5, 524323, 786432, 5, -196572, 983040, 6, -131036, 786432, 4, -65500, 786432, 5, 36, 786432, 5, 65572, 589824, 6, 131108, 655360, 6, 196644, 655360, 6, 262180, 786432, 5, 327716, 786432, 5, 393252, 786432, 5, 458788, 786432, 5, 524324, 786432, 5, -131035, 786432, 4, -65499, 786432, 5, 37, 786432, 5, 65573, 786432, 5, 131109, 786432, 5, 196645, 786432, 5, 262181, 786432, 5, 327717, 786432, 5, 393253, 786432, 5, 458789, 786432, 5, 524325, 786432, 5, -131034, 851968, 4, -65498, 851968, 5, 38, 851968, 5, 65574, 851968, 5, 131110, 851968, 5, 196646, 851968, 5, 262182, 851968, 5, 327718, 851968, 5, 393254, 851968, 5, 458790, 851968, 5, 524326, 851968, 5, 589854, 720896, 5, 655390, 720896, 5, 720926, 720896, 6, 589855, 655360, 6, 655391, 786432, 5, 720927, 786432, 6, 589856, 786432, 5, 655392, 786432, 5, 720928, 786432, 6, 589857, 786432, 5, 655393, 786432, 5, 720929, 786432, 6, 589858, 786432, 5, 655394, 786432, 5, 720930, 786432, 6, 589859, 786432, 5, 655395, 786432, 5, 720931, 786432, 6, 589860, 786432, 5, 655396, 655360, 6, 720932, 786432, 6, 589861, 786432, 5, 655397, 786432, 5, 720933, 786432, 6, 589862, 851968, 5, 655398, 851968, 5, 720934, 851968, 6, -458704, 720896, 4, -393168, 720896, 5, -327632, 720896, 5, -262096, 720896, 5, -196560, 720896, 5, -131024, 720896, 5, -65488, 720896, 5, 48, 720896, 5, 65584, 720896, 5, 131120, 720896, 5, 196656, 720896, 5, 262192, 720896, 5, 327728, 720896, 5, 393264, 720896, 6, -524239, 917504, 6, -458703, 786432, 4, -393167, 786432, 5, -327631, 655360, 6, -262095, 786432, 5, -196559, 786432, 5, -131023, 786432, 5, -65487, 786432, 5, 49, 786432, 5, 65585, 786432, 5, 131121, 786432, 5, 196657, 786432, 5, 262193, 655360, 6, 327729, 786432, 5, 393265, 786432, 6, -524238, 983040, 5, -458702, 786432, 4, -393166, 786432, 5, -327630, 786432, 5, -262094, 589824, 6, -196558, 786432, 5, -131022, 786432, 5, -65486, 786432, 5, 50, 786432, 5, 65586, 786432, 5, 131122, 786432, 5, 196658, 786432, 5, 262194, 786432, 5, 327730, 786432, 5, 393266, 786432, 6, -524237, 720896, 3, -458701, 786432, 4, -393165, 786432, 5, -327629, 786432, 5, -262093, 786432, 5, -196557, 786432, 5, -131021, 786432, 5, -65485, 786432, 5, 51, 655360, 6, 65587, 786432, 5, 131123, 786432, 5, 196659, 786432, 5, 262195, 786432, 5, 327731, 786432, 5, 393267, 786432, 6, -524236, 1048576, 6, -458700, 786432, 4, -393164, 786432, 5, -327628, 786432, 5, -262092, 786432, 5, -196556, 786432, 5, -131020, 786432, 5, -65484, 786432, 5, 52, 786432, 5, 65588, 786432, 5, 131124, 655360, 6, 196660, 655360, 6, 262196, 786432, 5, 327732, 786432, 5, 393268, 786432, 6, -524235, 720896, 3, -458699, 786432, 4, -393163, 786432, 5, -327627, 786432, 5, -262091, 786432, 5, -196555, 786432, 5, -131019, 786432, 5, -65483, 786432, 5, 53, 786432, 5, 65589, 786432, 5, 131125, 786432, 5, 196661, 786432, 5, 262197, 786432, 5, 327733, 786432, 5, 393269, 786432, 6, -524234, 983040, 6, -458698, 786432, 4, -393162, 786432, 5, -327626, 786432, 5, -262090, 589824, 6, -196554, 655360, 6, -131018, 655360, 6, -65482, 786432, 5, 54, 786432, 5, 65590, 786432, 5, 131126, 786432, 5, 196662, 786432, 5, 262198, 786432, 5, 327734, 655360, 6, 393270, 786432, 6, -458697, 786432, 4, -393161, 786432, 5, -327625, 786432, 5, -262089, 786432, 5, -196553, 786432, 5, -131017, 786432, 5, -65481, 786432, 5, 55, 786432, 5, 65591, 786432, 5, 131127, 786432, 5, 196663, 786432, 5, 262199, 786432, 5, 327735, 786432, 5, 393271, 786432, 6, -458696, 851968, 4, -393160, 851968, 5, -327624, 851968, 5, -262088, 851968, 5, -196552, 851968, 5, -131016, 851968, 5, -65480, 851968, 5, 56, 851968, 5, 65592, 851968, 5, 131128, 851968, 5, 196664, 851968, 5, 262200, 851968, 5, 327736, 851968, 5, 393272, 851968, 6) + +[node name="UI" type="CanvasLayer" parent="."] + +[node name="UIInventory" parent="UI" instance=ExtResource("2_4ncqd")] +unique_name_in_owner = true +visible = false + +[node name="UISign" parent="UI" instance=ExtResource("3_tpji3")] +unique_name_in_owner = true +visible = false + +[node name="Camera2D" type="Camera2D" parent="."] +position = Vector2(374, -216) +zoom = Vector2(1.5, 1.5) + +[node name="PhantomCameraHost" type="Node" parent="Camera2D"] +script = ExtResource("4_w0rat") + +[node name="Label" type="Label" parent="."] +offset_left = 167.0 +offset_top = -133.0 +offset_right = 332.0 +offset_bottom = -69.0 +theme_override_colors/font_color = Color(0.294118, 1, 0.631373, 1) +theme_override_fonts/font = ExtResource("5_q77r4") +text = "[WASD] to move +[Space] to jump" + +[node name="Player" type="Node" parent="."] + +[node name="Label" type="Label" parent="Player"] +visible = false +offset_left = 167.0 +offset_top = -145.0 +offset_right = 332.0 +offset_bottom = -81.0 +theme_override_colors/font_color = Color(0.294118, 1, 0.631373, 1) +theme_override_fonts/font = ExtResource("5_q77r4") +text = "[WASD] to move +[Space] to jump" + +[node name="PlayerPhantomCamera2D" type="Node2D" parent="." node_paths=PackedStringArray("follow_target", "follow_path")] +unique_name_in_owner = true +position = Vector2(374, -216) +script = ExtResource("6_y6hoa") +priority = 10 +follow_mode = 4 +follow_target = NodePath("../CharacterBody2D") +follow_path = NodePath("../Path2D") +zoom = Vector2(1.5, 1.5) +tween_resource = ExtResource("7_wd55r") +tween_on_load = false +draw_limits = true + +[node name="Path2D" type="Path2D" parent="."] +position = Vector2(152, -216) +curve = SubResource("Curve2D_usrhf") + +[node name="CharacterBody2D" parent="." instance=ExtResource("8_fy81j")] +position = Vector2(225, -28) +script = ExtResource("9_u6ygl") diff --git a/addons/phantom_camera/examples/example_scenes/2D-4.3/2d_limit_example_scene.tscn b/addons/phantom_camera/examples/example_scenes/2D-4.3/2d_limit_example_scene.tscn new file mode 100644 index 0000000..d34057f --- /dev/null +++ b/addons/phantom_camera/examples/example_scenes/2D-4.3/2d_limit_example_scene.tscn @@ -0,0 +1,718 @@ +[gd_scene load_steps=17 format=3 uid="uid://0ox7hgdpwpqp"] + +[ext_resource type="Script" path="res://addons/phantom_camera/examples/scripts/2D/2d_room_limit_tween_4.3.gd" id="1_bwr3f"] +[ext_resource type="Texture2D" uid="uid://c77npili4pel4" path="res://addons/phantom_camera/examples/textures/2D/level_spritesheet.png" id="2_f03of"] +[ext_resource type="PackedScene" uid="uid://dg7rhrymsrrrm" path="res://addons/phantom_camera/examples/ui/ui_inventory.tscn" id="3_cysy4"] +[ext_resource type="PackedScene" uid="uid://iq5xd1ob1res" path="res://addons/phantom_camera/examples/ui/ui_sign.tscn" id="4_qqut6"] +[ext_resource type="PackedScene" uid="uid://7kh0xydx0b1o" path="res://addons/phantom_camera/examples/example_scenes/2D/sub_scenes/playable_character_2d.tscn" id="5_yv8tn"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/phantom_camera/phantom_camera_2d.gd" id="6_2n5r1"] +[ext_resource type="Script" path="res://addons/phantom_camera/examples/scripts/2D/player_character_body_2d_4.3.gd" id="6_68ewj"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/resources/tween_resource.gd" id="7_ne05h"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/phantom_camera_host/phantom_camera_host.gd" id="8_hulu3"] + +[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_easgx"] +texture = ExtResource("2_f03of") +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_1/linear_velocity = Vector2(0, 0) +0:0/0/physics_layer_1/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 +1:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +1:0/0/physics_layer_1/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 +2:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +2:0/0/physics_layer_1/angular_velocity = 0.0 +3:0/0 = 0 +3:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:0/0/physics_layer_0/angular_velocity = 0.0 +3:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:0/0/physics_layer_1/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 +4:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:0/0/physics_layer_1/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 +5:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +5:0/0/physics_layer_1/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 +6:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +6:0/0/physics_layer_1/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 +7:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +7:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:0/0/physics_layer_1/angular_velocity = 0.0 +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_1/linear_velocity = Vector2(0, 0) +0:1/0/physics_layer_1/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 +1:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +1:1/0/physics_layer_1/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_1/linear_velocity = Vector2(0, 0) +2:1/0/physics_layer_1/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 +3:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:1/0/physics_layer_1/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 +4:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:1/0/physics_layer_1/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 +5:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +5:1/0/physics_layer_1/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 +7:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +7:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:1/0/physics_layer_1/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 +2:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +2:2/0/physics_layer_1/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 +3:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:2/0/physics_layer_1/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 +4:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:2/0/physics_layer_1/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 +7:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +7:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:2/0/physics_layer_1/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 +3:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:3/0/physics_layer_1/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 +4:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:3/0/physics_layer_1/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 +5:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +5:3/0/physics_layer_1/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 +7:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +7:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:3/0/physics_layer_1/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 +3:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:4/0/physics_layer_1/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 +4:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:4/0/physics_layer_1/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 +5:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +5:4/0/physics_layer_1/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 +7:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:4/0/physics_layer_1/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 +3:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:5/0/physics_layer_1/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 +4:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:5/0/physics_layer_1/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 +7:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:5/0/physics_layer_1/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 +3:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:6/0/physics_layer_1/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 +4:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:6/0/physics_layer_1/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 +7:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:6/0/physics_layer_1/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 +2:7/0/physics_layer_1/linear_velocity = Vector2(0, 0) +2:7/0/physics_layer_1/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 +3:7/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:7/0/physics_layer_1/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 +4:7/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:7/0/physics_layer_1/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 +5:7/0/physics_layer_1/linear_velocity = Vector2(0, 0) +5:7/0/physics_layer_1/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 +8:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +8:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:0/0/physics_layer_1/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 +9:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +9:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:0/0/physics_layer_1/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) +10:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:0/0/physics_layer_1/angular_velocity = 0.0 +11:0/0 = 0 +11:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:0/0/physics_layer_0/angular_velocity = 0.0 +11:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +11:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:0/0/physics_layer_1/angular_velocity = 0.0 +12:0/0 = 0 +12:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:0/0/physics_layer_0/angular_velocity = 0.0 +12:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:0/0/physics_layer_1/angular_velocity = 0.0 +13:0/0 = 0 +13:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:0/0/physics_layer_0/angular_velocity = 0.0 +13:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +13:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:0/0/physics_layer_1/angular_velocity = 0.0 +14:0/0 = 0 +14:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:0/0/physics_layer_0/angular_velocity = 0.0 +14:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:0/0/physics_layer_1/angular_velocity = 0.0 +14:0/0/physics_layer_1/polygon_0/points = PackedVector2Array(8, -8, 8, 8, -8, 8) +14:0/0/custom_data_0 = &"Sign" +15:0/0 = 0 +15:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:0/0/physics_layer_0/angular_velocity = 0.0 +15:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:0/0/physics_layer_1/angular_velocity = 0.0 +16:0/0 = 0 +16:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:0/0/physics_layer_0/angular_velocity = 0.0 +16:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:0/0/physics_layer_1/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 +8:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +8:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:1/0/physics_layer_1/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 +9:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +9:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:1/0/physics_layer_1/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) +10:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:1/0/physics_layer_1/angular_velocity = 0.0 +11:1/0 = 0 +11:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:1/0/physics_layer_0/angular_velocity = 0.0 +11:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +11:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:1/0/physics_layer_1/angular_velocity = 0.0 +12:1/0 = 0 +12:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:1/0/physics_layer_0/angular_velocity = 0.0 +12:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:1/0/physics_layer_1/angular_velocity = 0.0 +13:1/0 = 0 +13:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:1/0/physics_layer_0/angular_velocity = 0.0 +13:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +13:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:1/0/physics_layer_1/angular_velocity = 0.0 +14:1/0 = 0 +14:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:1/0/physics_layer_0/angular_velocity = 0.0 +14:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:1/0/physics_layer_1/angular_velocity = 0.0 +15:1/0 = 0 +15:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:1/0/physics_layer_0/angular_velocity = 0.0 +15:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:1/0/physics_layer_1/angular_velocity = 0.0 +16:1/0 = 0 +16:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:1/0/physics_layer_0/angular_velocity = 0.0 +16:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:1/0/physics_layer_1/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 +8:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +8:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:2/0/physics_layer_1/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 +9:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +9:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:2/0/physics_layer_1/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) +10:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:2/0/physics_layer_1/angular_velocity = 0.0 +11:2/0 = 0 +11:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:2/0/physics_layer_0/angular_velocity = 0.0 +11:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +11:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:2/0/physics_layer_1/angular_velocity = 0.0 +12:2/0 = 0 +12:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:2/0/physics_layer_0/angular_velocity = 0.0 +12:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:2/0/physics_layer_1/angular_velocity = 0.0 +13:2/0 = 0 +13:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:2/0/physics_layer_0/angular_velocity = 0.0 +13:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +13:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:2/0/physics_layer_1/angular_velocity = 0.0 +14:2/0 = 0 +14:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:2/0/physics_layer_0/angular_velocity = 0.0 +14:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:2/0/physics_layer_1/angular_velocity = 0.0 +15:2/0 = 0 +15:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:2/0/physics_layer_0/angular_velocity = 0.0 +15:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:2/0/physics_layer_1/angular_velocity = 0.0 +16:2/0 = 0 +16:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:2/0/physics_layer_0/angular_velocity = 0.0 +16:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:2/0/physics_layer_1/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 +8:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +8:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:3/0/physics_layer_1/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 +9:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +9:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:3/0/physics_layer_1/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) +10:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:3/0/physics_layer_1/angular_velocity = 0.0 +11:3/0 = 0 +11:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:3/0/physics_layer_0/angular_velocity = 0.0 +11:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:3/0/physics_layer_1/angular_velocity = 0.0 +12:3/0 = 0 +12:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:3/0/physics_layer_0/angular_velocity = 0.0 +12:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:3/0/physics_layer_1/angular_velocity = 0.0 +13:3/0 = 0 +13:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:3/0/physics_layer_0/angular_velocity = 0.0 +13:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +13:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:3/0/physics_layer_1/angular_velocity = 0.0 +14:3/0 = 0 +14:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:3/0/physics_layer_0/angular_velocity = 0.0 +14:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:3/0/physics_layer_1/angular_velocity = 0.0 +15:3/0 = 0 +15:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:3/0/physics_layer_0/angular_velocity = 0.0 +15:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:3/0/physics_layer_1/angular_velocity = 0.0 +16:3/0 = 0 +16:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:3/0/physics_layer_0/angular_velocity = 0.0 +16:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:3/0/physics_layer_1/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 +8:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:4/0/physics_layer_1/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 +9:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:4/0/physics_layer_1/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_1/linear_velocity = Vector2(0, 0) +10:4/0/physics_layer_1/angular_velocity = 0.0 +11:4/0 = 0 +11:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:4/0/physics_layer_0/angular_velocity = 0.0 +11:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-7, 2.5, -5, -2, -2.5, -5, 2, -7, 8, -8, 8, 8, -8, 8) +11:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:4/0/physics_layer_1/angular_velocity = 0.0 +12:4/0 = 0 +12:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:4/0/physics_layer_0/angular_velocity = 0.0 +12:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:4/0/physics_layer_1/angular_velocity = 0.0 +13:4/0 = 0 +13:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:4/0/physics_layer_0/angular_velocity = 0.0 +13:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 0, -6, 4, -1.5, 6.5, 1.5, 8, 8, -8, 8) +13:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:4/0/physics_layer_1/angular_velocity = 0.0 +14:4/0 = 0 +14:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:4/0/physics_layer_0/angular_velocity = 0.0 +14:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:4/0/physics_layer_1/angular_velocity = 0.0 +14:4/0/physics_layer_1/polygon_0/points = PackedVector2Array(-8, -8, -8, 8, 8, 8, 8, -8) +14:4/0/custom_data_0 = &"Inventory" +15:4/0 = 0 +15:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:4/0/physics_layer_0/angular_velocity = 0.0 +15:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:4/0/physics_layer_1/angular_velocity = 0.0 +16:4/0 = 0 +16:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:4/0/physics_layer_0/angular_velocity = 0.0 +16:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:4/0/physics_layer_1/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 +8:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:5/0/physics_layer_1/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 +9:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:5/0/physics_layer_1/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_1/linear_velocity = Vector2(0, 0) +10:5/0/physics_layer_1/angular_velocity = 0.0 +11:5/0 = 0 +11:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:5/0/physics_layer_0/angular_velocity = 0.0 +11:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +11:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:5/0/physics_layer_1/angular_velocity = 0.0 +12:5/0 = 0 +12:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:5/0/physics_layer_0/angular_velocity = 0.0 +12:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:5/0/physics_layer_1/angular_velocity = 0.0 +13:5/0 = 0 +13:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:5/0/physics_layer_0/angular_velocity = 0.0 +13:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +13:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:5/0/physics_layer_1/angular_velocity = 0.0 +14:5/0 = 0 +14:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:5/0/physics_layer_0/angular_velocity = 0.0 +14:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:5/0/physics_layer_1/angular_velocity = 0.0 +15:5/0 = 0 +15:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:5/0/physics_layer_0/angular_velocity = 0.0 +15:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:5/0/physics_layer_1/angular_velocity = 0.0 +16:5/0 = 0 +16:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:5/0/physics_layer_0/angular_velocity = 0.0 +16:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:5/0/physics_layer_1/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 +8:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:6/0/physics_layer_1/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 +9:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:6/0/physics_layer_1/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_1/linear_velocity = Vector2(0, 0) +10:6/0/physics_layer_1/angular_velocity = 0.0 +11:6/0 = 0 +11:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:6/0/physics_layer_0/angular_velocity = 0.0 +11:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, 1, 6.5, -3, 3, -6.5, -1.5) +11:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:6/0/physics_layer_1/angular_velocity = 0.0 +12:6/0 = 0 +12:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:6/0/physics_layer_0/angular_velocity = 0.0 +12:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:6/0/physics_layer_1/angular_velocity = 0.0 +13:6/0 = 0 +13:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:6/0/physics_layer_0/angular_velocity = 0.0 +13:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 6, -0.5, 3, 3.5, -1.5, 6.5, -8, 8) +13:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:6/0/physics_layer_1/angular_velocity = 0.0 +14:6/0 = 0 +14:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:6/0/physics_layer_0/angular_velocity = 0.0 +14:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:6/0/physics_layer_1/angular_velocity = 0.0 +15:6/0 = 0 +15:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:6/0/physics_layer_0/angular_velocity = 0.0 +15:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:6/0/physics_layer_1/angular_velocity = 0.0 +16:6/0 = 0 +16:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:6/0/physics_layer_0/angular_velocity = 0.0 +16:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:6/0/physics_layer_1/angular_velocity = 0.0 + +[sub_resource type="TileSet" id="TileSet_kf7eg"] +physics_layer_0/collision_layer = 1 +physics_layer_1/collision_layer = 2 +physics_layer_1/collision_mask = 2 +custom_data_layer_0/name = "Type" +custom_data_layer_0/type = 21 +sources/0 = SubResource("TileSetAtlasSource_easgx") + +[sub_resource type="Resource" id="Resource_ct1eh"] +script = ExtResource("7_ne05h") +duration = 0.9 +transition = 2 +ease = 2 + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_xmxri"] +size = Vector2(790, 410) + +[sub_resource type="Resource" id="Resource_exr3j"] +script = ExtResource("7_ne05h") +duration = 0.9 +transition = 2 +ease = 2 + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_wtfjw"] +size = Vector2(1530, 700) + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_daeuh"] +size = Vector2(1027.5, 610.5) + +[node name="ExampleScene2D" type="Node2D"] +script = ExtResource("1_bwr3f") + +[node name="Background" type="CanvasLayer" parent="."] +layer = -3 + +[node name="ColorRect" type="ColorRect" parent="Background"] +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_left = -311.0 +offset_top = -173.0 +offset_right = 981.0 +offset_bottom = 548.0 +grow_horizontal = 2 +grow_vertical = 2 +auto_translate = false +localize_numeral_system = false +color = Color(0.137255, 0.14902, 0.196078, 1) +metadata/_edit_lock_ = true + +[node name="TileMap" type="TileMap" parent="."] +z_index = -1 +position = Vector2(-97, 0) +scale = Vector2(3, 3) +tile_set = SubResource("TileSet_kf7eg") +format = 2 +layer_0/name = "Background" +layer_0/tile_data = PackedInt32Array(-458743, 851968, 6, -458744, 786432, 6, -458745, 786432, 6, -458746, 786432, 6, -458747, 786432, 6, -458748, 786432, 6, -458749, 786432, 6, -458750, 786432, 6, -458751, 786432, 6, -393218, 786432, 6, -393219, 786432, 6, -393220, 786432, 6, -393221, 720896, 6, -458752, 786432, 6, -393217, 786432, 6, -524279, 851968, 5, -589815, 851968, 5, -655351, 851968, 5, -720887, 851968, 4, -720888, 786432, 4, -720889, 786432, 4, -720890, 786432, 4, -720891, 786432, 4, -720892, 786432, 4, -720893, 786432, 4, -720894, 786432, 4, -720895, 786432, 4, -720896, 786432, 4, -655361, 786432, 4, -655362, 786432, 4, -655363, 786432, 4, -655364, 786432, 4, -655365, 720896, 4, -589829, 720896, 5, -524293, 720896, 5, -458757, 720896, 5, -589828, 786432, 5, -524292, 786432, 5, -458756, 786432, 5, -589827, 786432, 5, -524291, 786432, 5, -458755, 786432, 5, -589826, 786432, 5, -524290, 786432, 5, -458754, 786432, 5, -589825, 786432, 5, -524289, 786432, 5, -458753, 786432, 5, -655360, 786432, 5, -589824, 786432, 5, -524288, 786432, 5, -655359, 786432, 5, -589823, 786432, 5, -524287, 786432, 5, -655358, 786432, 5, -589822, 786432, 5, -524286, 786432, 5, -655357, 786432, 5, -589821, 786432, 5, -524285, 786432, 5, -655356, 786432, 5, -589820, 786432, 5, -524284, 786432, 5, -655355, 786432, 5, -589819, 786432, 5, -524283, 786432, 5, -655354, 786432, 5, -589818, 786432, 5, -524282, 786432, 5, -655353, 786432, 5, -589817, 786432, 5, -524281, 786432, 5, -655352, 786432, 5, -589816, 786432, 5, -524280, 786432, 5) +layer_1/name = "Terrain" +layer_1/z_index = 1 +layer_1/tile_data = PackedInt32Array(65533, 720896, 0, 65534, 720896, 0, 65535, 720896, 0, 0, 720896, 0, 1, 720896, 0, 2, 720896, 0, 3, 720896, 0, 4, 720896, 0, 5, 720896, 0, 6, 720896, 0, 7, 720896, 0, 8, 720896, 0, 9, 786432, 0, 65532, 720896, 0, 65531, 655360, 0, 131067, 655360, 1, 196603, 655360, 1, 262139, 655360, 1, 327675, 655360, 1, 393211, 655360, 1, 131068, 720896, 1, 196604, 720896, 1, 262140, 720896, 1, 327676, 720896, 1, 393212, 720896, 1, 131069, 720896, 1, 196605, 720896, 1, 262141, 720896, 1, 327677, 720896, 1, 393213, 720896, 1, 131070, 720896, 1, 196606, 720896, 1, 262142, 720896, 1, 327678, 720896, 1, 393214, 720896, 1, 131071, 720896, 1, 196607, 720896, 1, 262143, 720896, 1, 327679, 720896, 1, 393215, 720896, 1, 65536, 720896, 1, 131072, 720896, 1, 196608, 720896, 1, 262144, 720896, 1, 327680, 720896, 1, 65537, 720896, 1, 131073, 720896, 1, 196609, 720896, 1, 262145, 720896, 1, 327681, 720896, 1, 65538, 720896, 1, 131074, 720896, 1, 196610, 720896, 1, 262146, 720896, 1, 327682, 720896, 1, 65539, 720896, 1, 131075, 720896, 1, 196611, 720896, 1, 262147, 720896, 1, 327683, 720896, 1, 65540, 720896, 1, 131076, 720896, 1, 196612, 720896, 1, 262148, 720896, 1, 327684, 720896, 1, 65541, 720896, 1, 131077, 720896, 1, 196613, 720896, 1, 262149, 720896, 1, 327685, 720896, 1, 65542, 720896, 1, 131078, 720896, 1, 196614, 720896, 1, 262150, 720896, 1, 327686, 720896, 1, 65543, 720896, 1, 131079, 720896, 1, 196615, 720896, 1, 262151, 720896, 1, 327687, 720896, 1, 65544, 720896, 1, 131080, 720896, 1, 196616, 720896, 1, 262152, 720896, 1, 327688, 720896, 1, 65545, 786432, 1, 131081, 786432, 1, 196617, 786432, 1, 262153, 786432, 1, 327689, 786432, 1) + +[node name="TileMap2" type="TileMap" parent="."] +z_index = -1 +scale = Vector2(3, 3) +tile_set = SubResource("TileSet_kf7eg") +format = 2 +layer_0/name = "Background" +layer_1/name = "Terrain" +layer_1/z_index = 1 +layer_1/tile_data = PackedInt32Array(8, 786432, 4, 9, 786432, 4, 10, 786432, 4, 11, 786432, 4, 12, 786432, 4, 13, 786432, 4, 14, 786432, 4, 65528, 851968, 5, 65527, 786432, 5, 65526, 786432, 5, 65525, 786432, 5, 65524, 786432, 5, 65523, 786432, 5, 65544, 786432, 5, 131080, 786432, 5, 196616, 786432, 5, 262152, 786432, 5, 65545, 786432, 5, 131081, 786432, 5, 196617, 786432, 5, 262153, 786432, 5, 65546, 786432, 5, 131082, 786432, 5, 196618, 786432, 5, 262154, 786432, 5, 65547, 786432, 5, 131083, 786432, 5, 196619, 786432, 5, 262155, 786432, 5, 65548, 786432, 5, 131084, 786432, 5, 196620, 786432, 5, 262156, 786432, 5, 65549, 786432, 5, 131085, 786432, 5, 196621, 786432, 5, 262157, 786432, 5, 65550, 786432, 5, 131086, 786432, 5, 196622, 786432, 5, 262158, 786432, 5, 327694, 786432, 5, 327693, 786432, 5, 327692, 786432, 5, 327691, 786432, 5, 327690, 786432, 5, 327689, 786432, 5, 327688, 786432, 5, -131089, 720896, 5, -65553, 720896, 5, -17, 720896, 5, 65519, 720896, 6, -131088, 786432, 5, -65552, 786432, 5, -16, 786432, 5, 65520, 786432, 5, -131087, 786432, 5, -65551, 786432, 5, -15, 786432, 5, 65521, 786432, 5, -131086, 786432, 5, -65550, 786432, 5, -14, 786432, 5, 65522, 786432, 5, -131085, 786432, 5, -65549, 786432, 5, -13, 786432, 5, -131084, 786432, 5, -65548, 786432, 5, -12, 786432, 5, -131083, 786432, 5, -65547, 786432, 5, -11, 786432, 5, -131082, 786432, 5, -65546, 786432, 5, -10, 786432, 5, -131081, 786432, 5, -65545, 786432, 5, -9, 786432, 5, -131080, 851968, 5, -65544, 851968, 5, -8, 851968, 5, 131064, 851968, 5, 196600, 851968, 5, 262136, 851968, 5, 327672, 851968, 5, 393208, 851968, 5, 131056, 786432, 5, 196592, 786432, 5, 262128, 786432, 5, 327664, 786432, 5, 393200, 786432, 5, 131057, 786432, 5, 196593, 786432, 5, 262129, 786432, 5, 327665, 786432, 5, 393201, 786432, 5, 131058, 786432, 5, 196594, 786432, 5, 262130, 786432, 5, 327666, 786432, 5, 393202, 786432, 5, 131059, 786432, 5, 196595, 786432, 5, 262131, 786432, 5, 327667, 786432, 5, 393203, 786432, 5, 131060, 786432, 5, 196596, 786432, 5, 262132, 786432, 5, 327668, 786432, 5, 393204, 786432, 5, 131061, 786432, 5, 196597, 786432, 5, 262133, 786432, 5, 327669, 786432, 5, 393205, 786432, 5, 131062, 786432, 5, 196598, 786432, 5, 262134, 786432, 5, 327670, 786432, 5, 393206, 786432, 5, 131063, 786432, 5, 196599, 786432, 5, 262135, 786432, 5, 327671, 786432, 5, 393207, 786432, 5, 17, 786432, 4, 65553, 786432, 5, 131089, 786432, 5, 196625, 786432, 5, 262161, 786432, 5, 327697, 786432, 5, 18, 786432, 4, 65554, 786432, 5, 131090, 786432, 5, 196626, 786432, 5, 262162, 786432, 5, 327698, 786432, 5, 15, 786432, 4, 65551, 786432, 5, 131087, 786432, 5, 196623, 786432, 5, 262159, 786432, 5, 327695, 786432, 5, 16, 786432, 4, 65552, 786432, 5, 131088, 786432, 5, 196624, 786432, 5, 262160, 786432, 5, 327696, 786432, 5, 19, 786432, 4, 65555, 786432, 5, 131091, 786432, 5, 196627, 786432, 5, 262163, 786432, 5, 327699, 786432, 5, -458769, 720896, 5, -393233, 720896, 5, -458768, 786432, 5, -393232, 786432, 5, -458767, 786432, 5, -393231, 786432, 5, -458766, 786432, 5, -393230, 786432, 5, -458765, 786432, 5, -393229, 786432, 5, -458764, 786432, 5, -393228, 786432, 5, -458763, 786432, 5, -393227, 786432, 5, -458762, 786432, 5, -393226, 786432, 5, -458761, 786432, 5, -393225, 786432, 5, -458760, 851968, 5, -393224, 851968, 5, -655377, 720896, 4, -589841, 720896, 5, -524305, 720896, 5, -655376, 786432, 4, -589840, 786432, 5, -524304, 786432, 5, -655375, 786432, 4, -589839, 786432, 5, -524303, 786432, 5, -655374, 786432, 4, -589838, 786432, 5, -524302, 786432, 5, -655373, 786432, 4, -589837, 786432, 5, -524301, 786432, 5, -655372, 786432, 4, -589836, 786432, 5, -524300, 786432, 5, -655371, 786432, 4, -589835, 786432, 5, -524299, 786432, 5, -655370, 786432, 4, -589834, 786432, 5, -524298, 786432, 5, -655369, 786432, 4, -589833, 786432, 5, -524297, 786432, 5, -655368, 851968, 4, -589832, 851968, 5, -524296, 851968, 5, -327697, 720896, 5, -327696, 786432, 5, -327695, 786432, 5, -327694, 786432, 5, -327693, 786432, 5, -327692, 786432, 5, -327691, 786432, 5, -327690, 786432, 5, -327689, 786432, 5, -327688, 851968, 5, -262161, 720896, 5, -262160, 786432, 5, -262159, 786432, 5, -262158, 786432, 5, -262157, 786432, 5, -262156, 786432, 5, -262155, 786432, 5, -262154, 786432, 5, -262153, 786432, 5, -262152, 851968, 5, -196625, 720896, 5, -196624, 786432, 5, -196623, 786432, 5, -196622, 786432, 5, -196621, 786432, 5, -196620, 786432, 5, -196619, 786432, 5, -196618, 786432, 5, -196617, 786432, 5, -196616, 851968, 5, 20, 786432, 4, 65556, 786432, 5, 131092, 786432, 5, 196628, 786432, 5, 262164, 786432, 5, 327700, 786432, 5, 21, 786432, 4, 65557, 786432, 5, 131093, 786432, 5, 196629, 786432, 5, 262165, 786432, 5, 327701, 786432, 5, 22, 786432, 4, 65558, 786432, 5, 131094, 786432, 5, 196630, 786432, 5, 262166, 786432, 5, 327702, 786432, 5, 23, 786432, 4, 65559, 786432, 5, 131095, 786432, 5, 196631, 786432, 5, 262167, 786432, 5, 327703, 786432, 5, 24, 786432, 4, 65560, 786432, 5, 131096, 786432, 5, 196632, 786432, 5, 262168, 786432, 5, 327704, 786432, 5, 25, 786432, 4, 65561, 786432, 5, 131097, 786432, 5, 196633, 786432, 5, 262169, 786432, 5, 327705, 786432, 5, 26, 786432, 4, 65562, 786432, 5, 131098, 786432, 5, 196634, 786432, 5, 262170, 786432, 5, 327706, 786432, 5, 27, 786432, 4, 65563, 786432, 5, 131099, 786432, 5, 196635, 786432, 5, 262171, 786432, 5, 327707, 786432, 5, -65498, 917504, 3, 38, 786432, 4, 65574, 786432, 5, 131110, 786432, 5, 196646, 786432, 5, 262182, 786432, 5, 327718, 786432, 5, 39, 786432, 4, 65575, 786432, 5, 131111, 786432, 5, 196647, 786432, 5, 262183, 786432, 5, 327719, 786432, 5, -65496, 983040, 3, 40, 786432, 4, 65576, 786432, 5, 131112, 786432, 5, 196648, 786432, 5, 262184, 786432, 5, 327720, 786432, 5, -65495, 983040, 3, 41, 786432, 4, 65577, 786432, 5, 131113, 786432, 5, 196649, 786432, 5, 262185, 786432, 5, 327721, 786432, 5, -65494, 983040, 3, 42, 786432, 4, 65578, 786432, 5, 131114, 786432, 5, 196650, 786432, 5, 262186, 786432, 5, 327722, 786432, 5, -65493, 983040, 3, 43, 786432, 4, 65579, 786432, 5, 131115, 786432, 5, 196651, 786432, 5, 262187, 786432, 5, 327723, 786432, 5, -65492, 983040, 3, 44, 786432, 4, 65580, 786432, 5, 131116, 786432, 5, 196652, 786432, 5, 262188, 786432, 5, 327724, 786432, 5, -65491, 983040, 3, 45, 786432, 4, 65581, 786432, 5, 131117, 786432, 5, 196653, 786432, 5, 262189, 786432, 5, 327725, 786432, 5, -65490, 983040, 3, 46, 786432, 4, 65582, 786432, 5, 131118, 786432, 5, 196654, 786432, 5, 262190, 786432, 5, 327726, 786432, 5, -65489, 983040, 3, 47, 786432, 4, 65583, 786432, 5, 131119, 786432, 5, 196655, 786432, 5, 262191, 786432, 5, 327727, 786432, 5, -65488, 1048576, 3, 48, 786432, 4, 65584, 786432, 5, 131120, 786432, 5, 196656, 786432, 5, 262192, 786432, 5, 327728, 786432, 5, 49, 851968, 4, 65585, 851968, 5, 131121, 851968, 5, 196657, 851968, 5, 262193, 851968, 5, 327729, 851968, 5, -65497, 983040, 3, -589774, 720896, 4, -524238, 720896, 5, -458702, 720896, 5, -393166, 720896, 5, -327630, 720896, 5, -262094, 720896, 5, -196558, 720896, 5, -131022, 720896, 5, -65486, 720896, 5, 50, 720896, 5, 65586, 720896, 5, 131122, 720896, 5, 196658, 720896, 5, 262194, 720896, 5, 327730, 720896, 5, -589773, 786432, 4, -524237, 786432, 5, -458701, 786432, 5, -393165, 786432, 5, -327629, 786432, 5, -262093, 786432, 5, -196557, 786432, 5, -131021, 786432, 5, -65485, 786432, 5, 51, 786432, 5, 65587, 786432, 5, 131123, 786432, 5, 196659, 786432, 5, 262195, 786432, 5, 327731, 786432, 5, -589772, 786432, 4, -524236, 786432, 5, -458700, 786432, 5, -393164, 786432, 5, -327628, 786432, 5, -262092, 786432, 5, -196556, 786432, 5, -131020, 786432, 5, -65484, 786432, 5, 52, 786432, 5, 65588, 786432, 5, 131124, 786432, 5, 196660, 786432, 5, 262196, 786432, 5, 327732, 786432, 5, -589771, 786432, 4, -524235, 786432, 5, -458699, 786432, 5, -393163, 786432, 5, -327627, 786432, 5, -262091, 786432, 5, -196555, 786432, 5, -131019, 786432, 5, -65483, 786432, 5, 53, 786432, 5, 65589, 786432, 5, 131125, 786432, 5, 196661, 786432, 5, 262197, 786432, 5, 327733, 786432, 5, -589770, 786432, 4, -524234, 786432, 5, -458698, 786432, 5, -393162, 786432, 5, -327626, 786432, 5, -262090, 786432, 5, -196554, 786432, 5, -131018, 786432, 5, -65482, 786432, 5, 54, 786432, 5, 65590, 786432, 5, 131126, 786432, 5, 196662, 786432, 5, 262198, 786432, 5, 327734, 786432, 5, -589769, 786432, 4, -524233, 786432, 5, -458697, 786432, 5, -393161, 786432, 5, -327625, 786432, 5, -262089, 786432, 5, -196553, 786432, 5, -131017, 786432, 5, -65481, 786432, 5, 55, 786432, 5, 65591, 786432, 5, 131127, 786432, 5, 196663, 786432, 5, 262199, 786432, 5, 327735, 786432, 5, -589768, 786432, 4, -524232, 786432, 5, -458696, 786432, 5, -393160, 786432, 5, -327624, 786432, 5, -262088, 786432, 5, -196552, 786432, 5, -131016, 786432, 5, -65480, 786432, 5, 56, 786432, 5, 65592, 786432, 5, 131128, 786432, 5, 196664, 786432, 5, 262200, 786432, 5, 327736, 786432, 5, -589767, 786432, 4, -524231, 786432, 5, -458695, 786432, 5, -393159, 786432, 5, -327623, 786432, 5, -262087, 786432, 5, -196551, 786432, 5, -131015, 786432, 5, -65479, 786432, 5, 57, 786432, 5, 65593, 786432, 5, 131129, 786432, 5, 196665, 786432, 5, 262201, 786432, 5, 327737, 786432, 5, -589766, 786432, 4, -524230, 786432, 5, -458694, 786432, 5, -393158, 786432, 5, -327622, 786432, 5, -262086, 786432, 5, -196550, 786432, 5, -131014, 786432, 5, -65478, 786432, 5, 58, 786432, 5, 65594, 786432, 5, 131130, 786432, 5, 196666, 786432, 5, 262202, 786432, 5, 327738, 786432, 5, -589765, 851968, 4, -524229, 851968, 5, -458693, 851968, 5, -393157, 851968, 5, -327621, 851968, 5, -262085, 851968, 5, -196549, 851968, 5, -131013, 851968, 5, -65477, 851968, 5, 59, 851968, 5, 65595, 851968, 5, 131131, 851968, 5, 196667, 851968, 5, 262203, 851968, 5, 327739, 851968, 5, 28, 786432, 4, 65564, 786432, 5, 131100, 786432, 5, 196636, 786432, 5, 262172, 786432, 5, 327708, 786432, 5, 29, 786432, 4, 65565, 786432, 5, 131101, 786432, 5, 196637, 786432, 5, 262173, 786432, 5, 327709, 786432, 5, 30, 786432, 4, 65566, 786432, 5, 131102, 786432, 5, 196638, 786432, 5, 262174, 786432, 5, 327710, 786432, 5, 31, 786432, 4, 65567, 786432, 5, 131103, 786432, 5, 196639, 786432, 5, 262175, 786432, 5, 327711, 786432, 5, 32, 786432, 4, 65568, 786432, 5, 131104, 786432, 5, 196640, 786432, 5, 262176, 786432, 5, 327712, 786432, 5, 33, 786432, 4, 65569, 786432, 5, 131105, 786432, 5, 196641, 786432, 5, 262177, 786432, 5, 327713, 786432, 5, 34, 786432, 4, 65570, 786432, 5, 131106, 786432, 5, 196642, 786432, 5, 262178, 786432, 5, 327714, 786432, 5, 35, 786432, 4, 65571, 786432, 5, 131107, 786432, 5, 196643, 786432, 5, 262179, 786432, 5, 327715, 786432, 5, 36, 786432, 4, 65572, 786432, 5, 131108, 786432, 5, 196644, 786432, 5, 262180, 786432, 5, 327716, 786432, 5, 37, 786432, 4, 65573, 786432, 5, 131109, 786432, 5, 196645, 786432, 5, 262181, 786432, 5, 327717, 786432, 5, -65487, 458752, 6, -131023, 458752, 5, -196559, 458752, 5, -262095, 458752, 5, -327631, 458752, 5, -393167, 458752, 5, -458703, 458752, 5, -524239, 458752, 5, -589775, 458752, 4) + +[node name="UI" type="CanvasLayer" parent="."] + +[node name="UIInventory" parent="UI" instance=ExtResource("3_cysy4")] +unique_name_in_owner = true +visible = false + +[node name="UISign" parent="UI" instance=ExtResource("4_qqut6")] +unique_name_in_owner = true +visible = false + +[node name="CharacterBody2D" parent="." instance=ExtResource("5_yv8tn")] +unique_name_in_owner = true +position = Vector2(66, -50) +script = ExtResource("6_68ewj") + +[node name="RoomLeftPhantomCamera2D" type="Node2D" parent="." node_paths=PackedStringArray("follow_target")] +unique_name_in_owner = true +position = Vector2(66, -113.205) +script = ExtResource("6_2n5r1") +priority = 5 +follow_mode = 2 +follow_target = NodePath("../CharacterBody2D") +zoom = Vector2(2, 2) +tween_resource = SubResource("Resource_ct1eh") +follow_offset = Vector2(0, -63.205) +follow_damping = true +draw_limits = true +limit_target = NodePath("../TileMap") +limit_margin = Vector4i(-50, 0, -50, 0) + +[node name="RoomLeftArea2D" type="Area2D" parent="."] +unique_name_in_owner = true +position = Vector2(117, -174) + +[node name="CollisionShape2D" type="CollisionShape2D" parent="RoomLeftArea2D"] +position = Vector2(-79, 43) +shape = SubResource("RectangleShape2D_xmxri") +debug_color = Color(0, 0.6, 0.701961, 0.0313726) + +[node name="RoomCentrePhantomCamera2D" type="Node2D" parent="."] +unique_name_in_owner = true +position = Vector2(1474, -149) +script = ExtResource("6_2n5r1") +follow_mode = 2 +zoom = Vector2(1.5, 1.5) +tween_resource = SubResource("Resource_exr3j") +follow_damping = true +draw_limits = true +limit_target = NodePath("../RoomCentreArea2D/CollisionShape2D") + +[node name="RoomCentreArea2D" type="Area2D" parent="."] +unique_name_in_owner = true +position = Vector2(755, -179) + +[node name="CollisionShape2D" type="CollisionShape2D" parent="RoomCentreArea2D"] +position = Vector2(338, -28) +shape = SubResource("RectangleShape2D_wtfjw") +debug_color = Color(0, 0.6, 0.701961, 0) + +[node name="RoomRightArea2D" type="Area2D" parent="."] +unique_name_in_owner = true +position = Vector2(2065, -160) + +[node name="CollisionShape2D" type="CollisionShape2D" parent="RoomRightArea2D"] +position = Vector2(255.75, -3.25) +shape = SubResource("RectangleShape2D_daeuh") +debug_color = Color(0, 0.6, 0.701961, 0) + +[node name="RoomRightPhantomCamera2D" type="Node2D" parent="."] +unique_name_in_owner = true +position = Vector2(2347, -156) +scale = Vector2(1.0024, 1) +script = ExtResource("6_2n5r1") +follow_mode = 2 +zoom = Vector2(2, 2) +tween_resource = SubResource("Resource_exr3j") +follow_damping = true +draw_limits = true + +[node name="Camera2D" type="Camera2D" parent="."] +position = Vector2(66, -113.205) +zoom = Vector2(2, 2) +limit_left = -387 +limit_top = -528 +limit_right = 433 +limit_bottom = 288 +position_smoothing_speed = 10.0 +editor_draw_limits = true + +[node name="PhantomCameraHost" type="Node" parent="Camera2D"] +script = ExtResource("8_hulu3") diff --git a/addons/phantom_camera/examples/example_scenes/2D-4.3/2d_tweening_example_scene.tscn b/addons/phantom_camera/examples/example_scenes/2D-4.3/2d_tweening_example_scene.tscn new file mode 100644 index 0000000..4831baf --- /dev/null +++ b/addons/phantom_camera/examples/example_scenes/2D-4.3/2d_tweening_example_scene.tscn @@ -0,0 +1,793 @@ +[gd_scene load_steps=20 format=3 uid="uid://bvpp5na5054jd"] + +[ext_resource type="Texture2D" uid="uid://c77npili4pel4" path="res://addons/phantom_camera/examples/textures/2D/level_spritesheet.png" id="1_h1rbo"] +[ext_resource type="PackedScene" uid="uid://dg7rhrymsrrrm" path="res://addons/phantom_camera/examples/ui/ui_inventory.tscn" id="2_1f2t2"] +[ext_resource type="PackedScene" uid="uid://iq5xd1ob1res" path="res://addons/phantom_camera/examples/ui/ui_sign.tscn" id="3_o6nri"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/phantom_camera_host/phantom_camera_host.gd" id="4_j7670"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/phantom_camera/phantom_camera_2d.gd" id="5_gvv7r"] +[ext_resource type="Resource" uid="uid://euybd2w0bax" path="res://addons/phantom_camera/examples/resources/tween/player_phantom_camera_2d_tween.tres" id="6_rwobr"] +[ext_resource type="FontFile" uid="uid://c4mm3of2mc8o5" path="res://addons/phantom_camera/fonts/Nunito-Black.ttf" id="7_ylx0h"] +[ext_resource type="PackedScene" uid="uid://7kh0xydx0b1o" path="res://addons/phantom_camera/examples/example_scenes/2D/sub_scenes/playable_character_2d.tscn" id="8_ytsgf"] +[ext_resource type="Script" path="res://addons/phantom_camera/examples/scripts/2D/2d_trigger_area.gd" id="9_3r1pw"] +[ext_resource type="Script" path="res://addons/phantom_camera/examples/scripts/2D/player_character_body_2d_4.3.gd" id="9_5jy5e"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/resources/tween_resource.gd" id="10_guf2v"] + +[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_easgx"] +texture = ExtResource("1_h1rbo") +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_1/linear_velocity = Vector2(0, 0) +0:0/0/physics_layer_1/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 +1:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +1:0/0/physics_layer_1/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 +2:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +2:0/0/physics_layer_1/angular_velocity = 0.0 +3:0/0 = 0 +3:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:0/0/physics_layer_0/angular_velocity = 0.0 +3:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:0/0/physics_layer_1/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 +4:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:0/0/physics_layer_1/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 +5:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +5:0/0/physics_layer_1/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 +6:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +6:0/0/physics_layer_1/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 +7:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +7:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:0/0/physics_layer_1/angular_velocity = 0.0 +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_1/linear_velocity = Vector2(0, 0) +0:1/0/physics_layer_1/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 +1:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +1:1/0/physics_layer_1/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_1/linear_velocity = Vector2(0, 0) +2:1/0/physics_layer_1/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 +3:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:1/0/physics_layer_1/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 +4:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:1/0/physics_layer_1/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 +5:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +5:1/0/physics_layer_1/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 +7:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +7:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:1/0/physics_layer_1/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 +2:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +2:2/0/physics_layer_1/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 +3:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:2/0/physics_layer_1/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 +4:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:2/0/physics_layer_1/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 +7:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +7:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:2/0/physics_layer_1/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 +3:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:3/0/physics_layer_1/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 +4:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:3/0/physics_layer_1/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 +7:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +7:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:3/0/physics_layer_1/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 +3:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:4/0/physics_layer_1/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 +4:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:4/0/physics_layer_1/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 +5:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +5:4/0/physics_layer_1/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 +7:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:4/0/physics_layer_1/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 +3:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:5/0/physics_layer_1/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 +4:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:5/0/physics_layer_1/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 +7:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:5/0/physics_layer_1/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 +3:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:6/0/physics_layer_1/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 +4:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:6/0/physics_layer_1/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 +7:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:6/0/physics_layer_1/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 +2:7/0/physics_layer_1/linear_velocity = Vector2(0, 0) +2:7/0/physics_layer_1/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 +3:7/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:7/0/physics_layer_1/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 +4:7/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:7/0/physics_layer_1/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 +5:7/0/physics_layer_1/linear_velocity = Vector2(0, 0) +5:7/0/physics_layer_1/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 +8:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +8:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:0/0/physics_layer_1/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 +9:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +9:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:0/0/physics_layer_1/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) +10:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:0/0/physics_layer_1/angular_velocity = 0.0 +11:0/0 = 0 +11:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:0/0/physics_layer_0/angular_velocity = 0.0 +11:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +11:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:0/0/physics_layer_1/angular_velocity = 0.0 +12:0/0 = 0 +12:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:0/0/physics_layer_0/angular_velocity = 0.0 +12:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:0/0/physics_layer_1/angular_velocity = 0.0 +13:0/0 = 0 +13:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:0/0/physics_layer_0/angular_velocity = 0.0 +13:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +13:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:0/0/physics_layer_1/angular_velocity = 0.0 +14:0/0 = 0 +14:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:0/0/physics_layer_0/angular_velocity = 0.0 +14:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:0/0/physics_layer_1/angular_velocity = 0.0 +14:0/0/physics_layer_1/polygon_0/points = PackedVector2Array(8, -8, 8, 8, -8, 8) +14:0/0/custom_data_0 = &"Sign" +15:0/0 = 0 +15:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:0/0/physics_layer_0/angular_velocity = 0.0 +15:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:0/0/physics_layer_1/angular_velocity = 0.0 +16:0/0 = 0 +16:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:0/0/physics_layer_0/angular_velocity = 0.0 +16:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:0/0/physics_layer_1/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 +8:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +8:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:1/0/physics_layer_1/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 +9:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +9:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:1/0/physics_layer_1/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) +10:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:1/0/physics_layer_1/angular_velocity = 0.0 +11:1/0 = 0 +11:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:1/0/physics_layer_0/angular_velocity = 0.0 +11:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +11:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:1/0/physics_layer_1/angular_velocity = 0.0 +12:1/0 = 0 +12:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:1/0/physics_layer_0/angular_velocity = 0.0 +12:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:1/0/physics_layer_1/angular_velocity = 0.0 +13:1/0 = 0 +13:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:1/0/physics_layer_0/angular_velocity = 0.0 +13:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +13:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:1/0/physics_layer_1/angular_velocity = 0.0 +14:1/0 = 0 +14:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:1/0/physics_layer_0/angular_velocity = 0.0 +14:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:1/0/physics_layer_1/angular_velocity = 0.0 +15:1/0 = 0 +15:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:1/0/physics_layer_0/angular_velocity = 0.0 +15:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:1/0/physics_layer_1/angular_velocity = 0.0 +16:1/0 = 0 +16:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:1/0/physics_layer_0/angular_velocity = 0.0 +16:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:1/0/physics_layer_1/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 +8:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +8:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:2/0/physics_layer_1/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 +9:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +9:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:2/0/physics_layer_1/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) +10:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:2/0/physics_layer_1/angular_velocity = 0.0 +11:2/0 = 0 +11:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:2/0/physics_layer_0/angular_velocity = 0.0 +11:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +11:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:2/0/physics_layer_1/angular_velocity = 0.0 +12:2/0 = 0 +12:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:2/0/physics_layer_0/angular_velocity = 0.0 +12:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:2/0/physics_layer_1/angular_velocity = 0.0 +13:2/0 = 0 +13:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:2/0/physics_layer_0/angular_velocity = 0.0 +13:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +13:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:2/0/physics_layer_1/angular_velocity = 0.0 +14:2/0 = 0 +14:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:2/0/physics_layer_0/angular_velocity = 0.0 +14:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:2/0/physics_layer_1/angular_velocity = 0.0 +15:2/0 = 0 +15:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:2/0/physics_layer_0/angular_velocity = 0.0 +15:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:2/0/physics_layer_1/angular_velocity = 0.0 +16:2/0 = 0 +16:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:2/0/physics_layer_0/angular_velocity = 0.0 +16:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:2/0/physics_layer_1/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 +8:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +8:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:3/0/physics_layer_1/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 +9:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +9:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:3/0/physics_layer_1/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) +10:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:3/0/physics_layer_1/angular_velocity = 0.0 +11:3/0 = 0 +11:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:3/0/physics_layer_0/angular_velocity = 0.0 +11:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:3/0/physics_layer_1/angular_velocity = 0.0 +12:3/0 = 0 +12:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:3/0/physics_layer_0/angular_velocity = 0.0 +12:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:3/0/physics_layer_1/angular_velocity = 0.0 +13:3/0 = 0 +13:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:3/0/physics_layer_0/angular_velocity = 0.0 +13:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +13:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:3/0/physics_layer_1/angular_velocity = 0.0 +14:3/0 = 0 +14:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:3/0/physics_layer_0/angular_velocity = 0.0 +14:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:3/0/physics_layer_1/angular_velocity = 0.0 +15:3/0 = 0 +15:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:3/0/physics_layer_0/angular_velocity = 0.0 +15:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:3/0/physics_layer_1/angular_velocity = 0.0 +16:3/0 = 0 +16:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:3/0/physics_layer_0/angular_velocity = 0.0 +16:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:3/0/physics_layer_1/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 +8:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:4/0/physics_layer_1/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 +9:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:4/0/physics_layer_1/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_1/linear_velocity = Vector2(0, 0) +10:4/0/physics_layer_1/angular_velocity = 0.0 +11:4/0 = 0 +11:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:4/0/physics_layer_0/angular_velocity = 0.0 +11:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-7, 2.5, -5, -2, -2.5, -5, 2, -7, 8, -8, 8, 8, -8, 8) +11:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:4/0/physics_layer_1/angular_velocity = 0.0 +12:4/0 = 0 +12:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:4/0/physics_layer_0/angular_velocity = 0.0 +12:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:4/0/physics_layer_1/angular_velocity = 0.0 +13:4/0 = 0 +13:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:4/0/physics_layer_0/angular_velocity = 0.0 +13:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 0, -6, 4, -1.5, 6.5, 1.5, 8, 8, -8, 8) +13:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:4/0/physics_layer_1/angular_velocity = 0.0 +14:4/0 = 0 +14:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:4/0/physics_layer_0/angular_velocity = 0.0 +14:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:4/0/physics_layer_1/angular_velocity = 0.0 +14:4/0/physics_layer_1/polygon_0/points = PackedVector2Array(-8, -8, -8, 8, 8, 8, 8, -8) +14:4/0/custom_data_0 = &"Inventory" +15:4/0 = 0 +15:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:4/0/physics_layer_0/angular_velocity = 0.0 +15:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:4/0/physics_layer_1/angular_velocity = 0.0 +16:4/0 = 0 +16:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:4/0/physics_layer_0/angular_velocity = 0.0 +16:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:4/0/physics_layer_1/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 +8:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:5/0/physics_layer_1/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 +9:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:5/0/physics_layer_1/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_1/linear_velocity = Vector2(0, 0) +10:5/0/physics_layer_1/angular_velocity = 0.0 +11:5/0 = 0 +11:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:5/0/physics_layer_0/angular_velocity = 0.0 +11:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +11:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:5/0/physics_layer_1/angular_velocity = 0.0 +12:5/0 = 0 +12:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:5/0/physics_layer_0/angular_velocity = 0.0 +12:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:5/0/physics_layer_1/angular_velocity = 0.0 +13:5/0 = 0 +13:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:5/0/physics_layer_0/angular_velocity = 0.0 +13:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +13:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:5/0/physics_layer_1/angular_velocity = 0.0 +14:5/0 = 0 +14:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:5/0/physics_layer_0/angular_velocity = 0.0 +14:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:5/0/physics_layer_1/angular_velocity = 0.0 +15:5/0 = 0 +15:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:5/0/physics_layer_0/angular_velocity = 0.0 +15:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:5/0/physics_layer_1/angular_velocity = 0.0 +16:5/0 = 0 +16:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:5/0/physics_layer_0/angular_velocity = 0.0 +16:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:5/0/physics_layer_1/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 +8:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:6/0/physics_layer_1/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 +9:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:6/0/physics_layer_1/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_1/linear_velocity = Vector2(0, 0) +10:6/0/physics_layer_1/angular_velocity = 0.0 +11:6/0 = 0 +11:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:6/0/physics_layer_0/angular_velocity = 0.0 +11:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, 1, 6.5, -3, 3, -6.5, -1.5) +11:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:6/0/physics_layer_1/angular_velocity = 0.0 +12:6/0 = 0 +12:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:6/0/physics_layer_0/angular_velocity = 0.0 +12:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:6/0/physics_layer_1/angular_velocity = 0.0 +13:6/0 = 0 +13:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:6/0/physics_layer_0/angular_velocity = 0.0 +13:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 6, -0.5, 3, 3.5, -1.5, 6.5, -8, 8) +13:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:6/0/physics_layer_1/angular_velocity = 0.0 +14:6/0 = 0 +14:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:6/0/physics_layer_0/angular_velocity = 0.0 +14:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:6/0/physics_layer_1/angular_velocity = 0.0 +15:6/0 = 0 +15:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:6/0/physics_layer_0/angular_velocity = 0.0 +15:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:6/0/physics_layer_1/angular_velocity = 0.0 +16:6/0 = 0 +16:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:6/0/physics_layer_0/angular_velocity = 0.0 +16:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:6/0/physics_layer_1/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 +5:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +5:3/0/physics_layer_1/angular_velocity = 0.0 + +[sub_resource type="TileSet" id="TileSet_kf7eg"] +physics_layer_0/collision_layer = 1 +physics_layer_1/collision_layer = 2 +physics_layer_1/collision_mask = 2 +custom_data_layer_0/name = "Type" +custom_data_layer_0/type = 21 +sources/0 = SubResource("TileSetAtlasSource_easgx") + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_tgk1y"] +size = Vector2(140, 160) + +[sub_resource type="Resource" id="Resource_mtp70"] +script = ExtResource("10_guf2v") +duration = 0.6 +transition = 1 +ease = 2 + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_clm0y"] +size = Vector2(104, 160) + +[sub_resource type="Resource" id="Resource_8jg5c"] +script = ExtResource("10_guf2v") +duration = 0.3 +transition = 8 +ease = 2 + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_uka0w"] +size = Vector2(560, 160) + +[sub_resource type="Resource" id="Resource_e4e41"] +script = ExtResource("10_guf2v") +duration = 1.2 +transition = 10 +ease = 2 + +[node name="ExampleScene2D" type="Node2D"] + +[node name="Background" type="CanvasLayer" parent="."] +layer = -3 + +[node name="ColorRect" type="ColorRect" parent="Background"] +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_left = -311.0 +offset_top = -173.0 +offset_right = 981.0 +offset_bottom = 548.0 +grow_horizontal = 2 +grow_vertical = 2 +auto_translate = false +localize_numeral_system = false +color = Color(0.137255, 0.14902, 0.196078, 1) + +[node name="TileMap" type="TileMap" parent="."] +z_index = -1 +scale = Vector2(3, 3) +tile_set = SubResource("TileSet_kf7eg") +format = 2 +layer_0/name = "Background" +layer_0/tile_data = PackedInt32Array(-393216, 655360, 2, -327680, 655360, 3, -262144, 655360, 3, -196608, 655360, 3, -131072, 655360, 3, -65536, 655360, 3, -393215, 720896, 2, -327679, 720896, 1, -262143, 720896, 1, -196607, 720896, 1, -131071, 720896, 1, -65535, 720896, 1, -393214, 786432, 2, -327678, 786432, 3, -262142, 786432, 3, -196606, 786432, 3, -131070, 786432, 3, -65534, 786432, 3) +layer_1/name = "Terrain" +layer_1/z_index = 1 +layer_1/tile_data = PackedInt32Array(1, 720896, 0, 2, 720896, 0, 3, 720896, 0, 4, 720896, 0, 5, 720896, 0, 6, 720896, 0, 7, 720896, 0, 8, 720896, 0, 9, 786432, 0, 65545, 786432, 1, 131081, 786432, 1, 196617, 786432, 1, 262153, 786432, 1, 327689, 786432, 1, 393225, 786432, 1, 65537, 720896, 1, 131073, 720896, 1, 196609, 720896, 1, 262145, 458752, 1, 327681, 720896, 1, 393217, 720896, 1, 65538, 720896, 1, 131074, 720896, 1, 196610, 720896, 1, 262146, 720896, 1, 327682, 720896, 1, 393218, 720896, 1, 65539, 720896, 1, 131075, 720896, 1, 196611, 720896, 1, 262147, 720896, 1, 327683, 720896, 1, 393219, 720896, 1, 65540, 458752, 1, 131076, 720896, 1, 196612, 720896, 1, 262148, 720896, 1, 327684, 720896, 1, 393220, 720896, 1, 65541, 720896, 1, 131077, 720896, 1, 196613, 720896, 1, 262149, 458752, 1, 327685, 720896, 1, 393221, 720896, 1, 65542, 720896, 1, 131078, 720896, 1, 196614, 720896, 1, 262150, 720896, 1, 327686, 720896, 1, 393222, 720896, 1, 65543, 720896, 1, 131079, 720896, 1, 196615, 720896, 1, 262151, 720896, 1, 327687, 720896, 1, 393223, 458752, 1, 65544, 720896, 1, 131080, 720896, 1, 196616, 458752, 1, 262152, 720896, 1, 327688, 720896, 1, 393224, 720896, 1, 65546, 524288, 5, 65547, 524288, 5, 65548, 524288, 5, 65549, 524288, 5, 131082, 524288, 6, 131083, 524288, 6, 131084, 524288, 6, 131085, 524288, 6, 196618, 720896, 1, 262154, 720896, 1, 196619, 720896, 1, 262155, 720896, 1, 196620, 720896, 1, 262156, 720896, 1, 196621, 720896, 1, 262157, 720896, 1, 65550, 524288, 5, 65551, 524288, 5, 65552, 524288, 5, 131086, 524288, 6, 131087, 524288, 6, 131088, 524288, 6, 196622, 720896, 1, 196623, 720896, 1, 262159, 720896, 1, 262160, 720896, 1, 196624, 720896, 1, 262158, 720896, 1, 17, 720896, 4, 65553, 720896, 5, 131089, 720896, 5, 196625, 720896, 5, 262161, 720896, 5, 18, 786432, 4, 19, 786432, 4, 20, 786432, 4, 21, 786432, 4, 22, 786432, 4, 23, 786432, 4, 65554, 786432, 5, 131090, 786432, 5, 196626, 786432, 5, 262162, 786432, 5, 65555, 786432, 5, 131091, 589824, 6, 196627, 786432, 5, 262163, 786432, 5, 65556, 786432, 5, 131092, 786432, 5, 196628, 786432, 5, 262164, 786432, 5, 65557, 786432, 5, 131093, 786432, 5, 196629, 786432, 5, 262165, 786432, 5, 65558, 786432, 5, 131094, 786432, 5, 196630, 786432, 5, 262166, 655360, 6, 65559, 786432, 5, 131095, 786432, 5, 196631, 786432, 5, 262167, 786432, 5, 327697, 720896, 5, 393233, 720896, 5, 327698, 589824, 6, 393234, 786432, 5, 327699, 786432, 5, 393235, 786432, 5, 327700, 786432, 5, 393236, 786432, 5, 327701, 786432, 5, 393237, 786432, 5, 327702, 786432, 5, 393238, 786432, 5, 327703, 786432, 5, 393239, 786432, 5, -131062, 720896, 4, -131061, 786432, 4, -131060, 786432, 4, -65526, 720896, 6, -65525, 786432, 6, -65524, 786432, 6, -131056, 851968, 4, -65520, 851968, 6, -131059, 786432, 4, -131058, 786432, 4, -131057, 786432, 4, -65523, 786432, 6, -65522, 786432, 6, -65521, 786432, 6, -65536, 917504, 2, -65535, 983040, 2, -65534, 1048576, 2, -65533, 917504, 2, -65532, 983040, 2, -65531, 1048576, 2, -65530, 917504, 2, -65529, 983040, 2, -65528, 1048576, 2, 65535, 655360, 0, 131071, 655360, 1, 196607, 655360, 1, 262143, 655360, 1, 327679, 655360, 1, 393215, 655360, 1, 458751, 655360, 1, 524287, 655360, 1, 589823, 655360, 1, 0, 720896, 0, 65536, 720896, 1, 131072, 720896, 1, 196608, 720896, 1, 262144, 720896, 1, 327680, 720896, 1, 393216, 720896, 1, 458752, 720896, 1, 524288, 720896, 1, 524289, 720896, 1, 524290, 720896, 1, 524291, 720896, 1, 524292, 720896, 1, 524293, 720896, 1, 524294, 720896, 1, 524295, 720896, 1, 524296, 720896, 1, 524297, 786432, 1, 458761, 786432, 1, 458760, 720896, 1, 458759, 720896, 1, 458758, 458752, 1, 458757, 720896, 1, 458756, 720896, 1, 458755, 720896, 1, 458754, 720896, 1, 458753, 720896, 1, -262145, 851968, 4, -196609, 851968, 5, -131073, 851968, 5, -65537, 851968, 5, -1, 851968, 6, -262146, 786432, 4, -262147, 786432, 4, -196610, 589824, 6, -196611, 786432, 5, -6, 786432, 5, -5, 786432, 5, -4, 786432, 5, -3, 786432, 5, -2, 786432, 5, -65538, 786432, 5, -131074, 786432, 5, -131075, 786432, 5, -65539, 655360, 6, 65534, 851968, 5, 131070, 851968, 5, 196606, 851968, 5, 262142, 851968, 5, 327678, 851968, 5, 393214, 851968, 5, 458750, 851968, 5, 65533, 786432, 5, 65532, 786432, 5, 65531, 786432, 5, 65530, 786432, 5, 65529, 720896, 5, 131066, 786432, 5, 196602, 786432, 5, 262138, 786432, 5, 262139, 786432, 5, 327675, 786432, 5, 131068, 786432, 5, 131069, 786432, 5, 196605, 786432, 5, 262141, 786432, 5, 327677, 786432, 5, 393213, 786432, 5, 458749, 786432, 5, 393212, 786432, 5, 393211, 786432, 5, 458748, 786432, 5, 327676, 655360, 6, 262140, 786432, 5, 196604, 786432, 5, 131067, 786432, 5, 196603, 589824, 6, 458747, 786432, 5, 458746, 786432, 5, 393210, 786432, 5, 327674, 786432, 5, -7, 720896, 5, 131065, 720896, 5, 196601, 720896, 5, 262137, 720896, 5, 327673, 720896, 5, 393209, 720896, 5, 458745, 720896, 5, -327684, 720896, 3, -196594, 720896, 3, -196597, 720896, 3, -65518, 720896, 3, -65516, 720896, 3, -327686, 1048576, 5, -327685, 720896, 3, -196595, 917504, 6, -65514, 983040, 6, -327683, 983040, 5, -65513, 1048576, 5, -262151, 720896, 4, -196615, 720896, 5, -131079, 720896, 5, -65543, 720896, 5, -262150, 786432, 4, -196614, 655360, 6, -131078, 786432, 5, -65542, 786432, 5, -262149, 786432, 4, -196613, 786432, 5, -131077, 786432, 5, -65541, 786432, 5, -262148, 786432, 4, -196612, 786432, 5, -131076, 786432, 5, -65540, 786432, 5, 458769, 720896, 5, 458775, 786432, 5, 458774, 786432, 5, 458773, 786432, 5, 458772, 786432, 5, 458771, 786432, 5, 458770, 786432, 5, 327690, 720896, 1, 393226, 720896, 1, 458762, 720896, 1, 524298, 720896, 1, 327691, 720896, 1, 393227, 720896, 1, 458763, 720896, 1, 524299, 720896, 1, 327692, 720896, 1, 393228, 720896, 1, 458764, 720896, 1, 524300, 720896, 1, 327693, 720896, 1, 393229, 720896, 1, 458765, 720896, 1, 524301, 720896, 1, 327694, 720896, 1, 393230, 720896, 1, 458766, 720896, 1, 524302, 720896, 1, 327695, 720896, 1, 393231, 720896, 1, 458767, 720896, 1, 524303, 720896, 1, 327696, 720896, 1, 393232, 720896, 1, 458768, 720896, 1, 524304, 720896, 1, 29, 851968, 4, 65565, 851968, 5, 131101, 851968, 5, 196637, 851968, 5, 262173, 851968, 5, 327709, 851968, 5, 393245, 851968, 5, 458781, 851968, 5, 24, 786432, 4, 25, 786432, 4, 26, 786432, 4, 27, 786432, 4, 28, 786432, 4, 65560, 786432, 5, 65561, 786432, 5, 65562, 786432, 5, 65563, 786432, 5, 65564, 786432, 5, 131100, 786432, 5, 196636, 589824, 6, 131099, 786432, 5, 131098, 786432, 5, 131097, 786432, 5, 131096, 786432, 5, 196632, 786432, 5, 262168, 786432, 5, 327704, 786432, 5, 393240, 786432, 5, 458776, 786432, 5, 196633, 786432, 5, 262169, 786432, 5, 327705, 786432, 5, 393241, 786432, 5, 458777, 786432, 5, 196634, 786432, 5, 262170, 786432, 5, 327706, 786432, 5, 393242, 655360, 6, 458778, 786432, 5, 196635, 786432, 5, 262171, 786432, 5, 327707, 786432, 5, 393243, 786432, 5, 458779, 786432, 5, 262172, 786432, 5, 327708, 786432, 5, 393244, 786432, 5, 458780, 786432, 5, -196593, 1048576, 6, -393182, 1048576, 6, -393185, 917504, 6, -393180, 983040, 6, -393184, 983040, 5, -65509, 720896, 3, -65510, 720896, 3, -393181, 720896, 3, -393183, 720896, 3, -65517, 720896, 3, -65515, 720896, 3, -327650, 720896, 4, -262114, 720896, 5, -196578, 720896, 5, -131042, 720896, 5, -65506, 720896, 5, -327649, 786432, 4, -327648, 786432, 4, -327647, 786432, 4, -327646, 786432, 4, -327645, 786432, 4, -327644, 786432, 4, -327643, 786432, 4, -65499, 786432, 5, -131035, 786432, 5, -196571, 786432, 5, -262107, 655360, 6, -262108, 786432, 5, -262109, 786432, 5, -262110, 786432, 5, -262111, 786432, 5, -262112, 786432, 5, -262113, 786432, 5, -196577, 655360, 6, -131041, 786432, 5, -65505, 786432, 5, -65500, 655360, 6, -131036, 589824, 6, -196572, 786432, 5, -196573, 786432, 5, -196574, 786432, 5, -196575, 786432, 5, -196576, 786432, 5, -131040, 589824, 6, -65504, 786432, 5, -65501, 786432, 5, -131037, 786432, 5, -131038, 786432, 5, -131039, 786432, 5, -65503, 786432, 5, -65502, 786432, 5, 524318, 720896, 6, 458782, 720896, 5, 393246, 720896, 5, 327710, 720896, 5, 262174, 720896, 5, 196638, 720896, 5, 131102, 720896, 5, 65566, 720896, 5, 30, 720896, 5, 524319, 786432, 6, 524320, 786432, 6, 524321, 786432, 6, 524322, 786432, 6, 524323, 786432, 6, 524324, 786432, 6, 524325, 786432, 6, 31, 786432, 5, 65567, 786432, 5, 131103, 786432, 5, 196639, 786432, 5, 262175, 786432, 5, 327711, 786432, 5, 393247, 655360, 6, 458783, 786432, 5, 32, 786432, 5, 65568, 786432, 5, 131104, 786432, 5, 196640, 786432, 5, 262176, 786432, 5, 327712, 786432, 5, 393248, 786432, 5, 458784, 786432, 5, 33, 786432, 5, 65569, 786432, 5, 131105, 655360, 6, 196641, 786432, 5, 262177, 786432, 5, 327713, 786432, 5, 393249, 786432, 5, 458785, 786432, 5, 34, 786432, 5, 65570, 786432, 5, 131106, 786432, 5, 196642, 786432, 5, 262178, 655360, 6, 327714, 655360, 6, 393250, 786432, 5, 458786, 786432, 5, 35, 786432, 5, 65571, 786432, 5, 131107, 786432, 5, 196643, 786432, 5, 262179, 786432, 5, 327715, 786432, 5, 393251, 786432, 5, 458787, 786432, 5, 36, 655360, 6, 65572, 786432, 5, 131108, 786432, 5, 196644, 786432, 5, 262180, 786432, 5, 327716, 786432, 5, 393252, 786432, 5, 458788, 655360, 6, 37, 786432, 5, 65573, 786432, 5, 131109, 786432, 5, 196645, 786432, 5, 262181, 655360, 6, 327717, 786432, 5, 393253, 786432, 5, 458789, 786432, 5, 524281, 720896, 5, 524285, 786432, 5, 524284, 786432, 5, 524283, 786432, 5, 524282, 786432, 5, 589818, 786432, 5, 589819, 786432, 5, 589820, 786432, 5, 655356, 786432, 5, 655357, 786432, 5, 589821, 786432, 5, 655355, 786432, 5, 655354, 786432, 5, 720890, 786432, 5, 720891, 786432, 5, 720892, 786432, 5, 720893, 786432, 5, 720894, 851968, 5, 786429, 786432, 5, 786428, 786432, 5, 786427, 786432, 5, 786426, 786432, 5, 851962, 786432, 5, 917498, 786432, 5, 917499, 786432, 5, 851964, 786432, 5, 851965, 786432, 5, 917501, 786432, 5, 917500, 786432, 5, 851963, 786432, 5, 589817, 720896, 5, 655353, 720896, 5, 720889, 720896, 5, 786425, 720896, 5, 851961, 720896, 5, 917497, 720896, 5, 524286, 851968, 5, 589822, 851968, 5, 655358, 851968, 5, 786430, 851968, 5, 851966, 851968, 5, 917502, 851968, 5, 589824, 720896, 1, 655360, 720896, 1, 720896, 720896, 1, 786432, 720896, 1, 851968, 720896, 1, 589825, 720896, 1, 655361, 720896, 1, 720897, 720896, 1, 786433, 720896, 1, 851969, 720896, 1, 589826, 720896, 1, 655362, 720896, 1, 720898, 720896, 1, 786434, 720896, 1, 851970, 720896, 1, 589827, 720896, 1, 655363, 720896, 1, 720899, 720896, 1, 786435, 720896, 1, 851971, 720896, 1, 589828, 720896, 1, 655364, 720896, 1, 720900, 720896, 1, 786436, 720896, 1, 851972, 720896, 1, 589829, 720896, 1, 655365, 720896, 1, 720901, 720896, 1, 786437, 720896, 1, 851973, 720896, 1, 589830, 720896, 1, 655366, 720896, 1, 720902, 720896, 1, 786438, 720896, 1, 851974, 720896, 1, 589831, 720896, 1, 655367, 720896, 1, 720903, 720896, 1, 786439, 720896, 1, 851975, 720896, 1, 589832, 720896, 1, 655368, 720896, 1, 720904, 720896, 1, 786440, 720896, 1, 851976, 720896, 1, 589833, 786432, 1, 655369, 786432, 1, 720905, 786432, 1, 786441, 786432, 1, 851977, 786432, 1, 655359, 655360, 1, 720895, 655360, 1, 786431, 655360, 1, 851967, 655360, 1, 917503, 655360, 1, 589834, 720896, 1, 655370, 720896, 1, 720906, 720896, 1, 786442, 720896, 1, 851978, 720896, 1, 589835, 720896, 1, 655371, 720896, 1, 720907, 720896, 1, 786443, 720896, 1, 851979, 720896, 1, 589836, 720896, 1, 655372, 720896, 1, 720908, 720896, 1, 786444, 720896, 1, 851980, 720896, 1, 589837, 720896, 1, 655373, 720896, 1, 720909, 720896, 1, 786445, 720896, 1, 851981, 720896, 1, 589838, 720896, 1, 655374, 720896, 1, 720910, 720896, 1, 786446, 720896, 1, 851982, 720896, 1, 589839, 720896, 1, 655375, 720896, 1, 720911, 720896, 1, 786447, 720896, 1, 851983, 720896, 1, 589840, 720896, 1, 655376, 720896, 1, 720912, 720896, 1, 786448, 720896, 1, 851984, 720896, 1, 851985, 720896, 6, 851986, 786432, 6, 851987, 786432, 6, 851988, 786432, 6, 851989, 786432, 6, 851990, 786432, 6, 851991, 786432, 6, 851992, 786432, 6, 851993, 786432, 6, 851994, 786432, 6, 851995, 786432, 6, 851996, 786432, 6, 851997, 851968, 6, 524306, 786432, 5, 589842, 786432, 5, 655378, 786432, 5, 720914, 786432, 5, 786450, 786432, 5, 524307, 786432, 5, 589843, 786432, 5, 655379, 786432, 5, 720915, 786432, 5, 786451, 786432, 5, 524308, 786432, 5, 589844, 786432, 5, 655380, 786432, 5, 720916, 786432, 5, 786452, 786432, 5, 524309, 786432, 5, 589845, 786432, 5, 655381, 786432, 5, 720917, 786432, 5, 786453, 786432, 5, 524310, 786432, 5, 589846, 786432, 5, 655382, 786432, 5, 720918, 786432, 5, 786454, 786432, 5, 524311, 786432, 5, 589847, 786432, 5, 655383, 786432, 5, 720919, 786432, 5, 786455, 786432, 5, 524312, 786432, 5, 589848, 786432, 5, 655384, 786432, 5, 720920, 786432, 5, 786456, 786432, 5, 524313, 786432, 5, 589849, 786432, 5, 655385, 786432, 5, 720921, 786432, 5, 786457, 786432, 5, 524314, 786432, 5, 589850, 786432, 5, 655386, 786432, 5, 720922, 786432, 5, 786458, 786432, 5, 524315, 786432, 5, 589851, 786432, 5, 655387, 786432, 5, 720923, 786432, 5, 786459, 786432, 5, 524316, 786432, 5, 589852, 786432, 5, 655388, 786432, 5, 720924, 786432, 5, 786460, 786432, 5, 524305, 720896, 5, 589841, 720896, 5, 655377, 720896, 5, 720913, 720896, 5, 786449, 720896, 5, 524317, 851968, 5, 589853, 851968, 5, 655389, 851968, 5, 720925, 851968, 5, 786461, 851968, 5, -262106, 786432, 5, -196570, 786432, 5, -131034, 786432, 5, -65498, 786432, 5, 38, 786432, 5, 65574, 786432, 5, 131110, 655360, 6, 196646, 786432, 5, 262182, 786432, 5, 327718, 786432, 5, 393254, 786432, 5, 458790, 786432, 5, -262105, 786432, 5, -196569, 786432, 5, -131033, 786432, 5, -65497, 786432, 5, 39, 786432, 5, 65575, 786432, 5, 131111, 786432, 5, 196647, 786432, 5, 262183, 786432, 5, 327719, 786432, 5, 393255, 655360, 6, 458791, 786432, 5, -262104, 786432, 5, -196568, 786432, 5, -131032, 786432, 5, -65496, 786432, 5, 40, 655360, 6, 65576, 786432, 5, 131112, 786432, 5, 196648, 786432, 5, 262184, 655360, 6, 327720, 786432, 5, 393256, 786432, 5, 458792, 786432, 5, -262103, 786432, 5, -196567, 655360, 6, -131031, 786432, 5, -65495, 786432, 5, 41, 786432, 5, 65577, 786432, 5, 131113, 786432, 5, 196649, 786432, 5, 262185, 786432, 5, 327721, 786432, 5, 393257, 786432, 5, 458793, 786432, 5, -262102, 786432, 5, -196566, 786432, 5, -131030, 786432, 5, -65494, 786432, 5, 42, 786432, 5, 65578, 786432, 5, 131114, 655360, 6, 196650, 786432, 5, 262186, 786432, 5, 327722, 786432, 5, 393258, 786432, 5, 458794, 655360, 6, 524326, 786432, 6, 524327, 786432, 6, 524328, 786432, 6, 524329, 786432, 6, 524330, 786432, 6, -327642, 786432, 4, -327641, 786432, 4, -327640, 786432, 4, -327639, 786432, 4, -327638, 786432, 4, -327632, 851968, 4, -262096, 851968, 5, -196560, 851968, 5, -131024, 851968, 5, -65488, 851968, 5, 48, 851968, 5, 65584, 851968, 5, 131120, 851968, 5, 196656, 851968, 5, 262192, 851968, 5, 327728, 851968, 5, 393264, 851968, 5, 458800, 851968, 5, 524336, 851968, 6, -327637, 786432, 4, -327636, 786432, 4, -327635, 786432, 4, -327634, 786432, 4, -327633, 786432, 4, -262101, 786432, 5, -196565, 786432, 5, -131029, 655360, 6, -65493, 786432, 5, 43, 786432, 5, 65579, 786432, 5, 131115, 786432, 5, 196651, 786432, 5, 262187, 786432, 5, 327723, 655360, 6, 393259, 786432, 5, 458795, 786432, 5, -262100, 786432, 5, -196564, 786432, 5, -131028, 786432, 5, -65492, 786432, 5, 44, 655360, 6, 65580, 786432, 5, 131116, 786432, 5, 196652, 786432, 5, 262188, 786432, 5, 327724, 786432, 5, 393260, 786432, 5, 458796, 786432, 5, -262099, 786432, 5, -196563, 786432, 5, -131027, 786432, 5, -65491, 786432, 5, 45, 786432, 5, 65581, 655360, 6, 131117, 786432, 5, 196653, 786432, 5, 262189, 786432, 5, 327725, 786432, 5, 393261, 786432, 5, 458797, 786432, 5, -262098, 655360, 6, -196562, 786432, 5, -131026, 786432, 5, -65490, 786432, 5, 46, 786432, 5, 65582, 786432, 5, 131118, 786432, 5, 196654, 655360, 6, 262190, 786432, 5, 327726, 786432, 5, 393262, 786432, 5, 458798, 655360, 6, -262097, 786432, 5, -196561, 786432, 5, -131025, 786432, 5, -65489, 786432, 5, 47, 786432, 5, 65583, 786432, 5, 131119, 786432, 5, 196655, 786432, 5, 262191, 786432, 5, 327727, 786432, 5, 393263, 786432, 5, 458799, 786432, 5, 524331, 786432, 6, 524332, 786432, 6, 524333, 786432, 6, 524334, 786432, 6, 524335, 786432, 6) + +[node name="UI" type="CanvasLayer" parent="."] + +[node name="UIInventory" parent="UI" instance=ExtResource("2_1f2t2")] +unique_name_in_owner = true +visible = false + +[node name="UISign" parent="UI" instance=ExtResource("3_o6nri")] +unique_name_in_owner = true +visible = false + +[node name="Camera2D" type="Camera2D" parent="."] +position = Vector2(227, -28) +position_smoothing_speed = 10.0 + +[node name="PhantomCameraHost" type="Node" parent="Camera2D"] +script = ExtResource("4_j7670") + +[node name="Player" type="Node" parent="."] + +[node name="PlayerPhantomCamera2D" type="Node2D" parent="Player" node_paths=PackedStringArray("follow_target")] +unique_name_in_owner = true +position = Vector2(227, -28) +script = ExtResource("5_gvv7r") +priority = 5 +follow_mode = 2 +follow_target = NodePath("../CharacterBody2D/PlayerVisuals") +tween_resource = ExtResource("6_rwobr") +tween_on_load = false +follow_damping = true +draw_limits = true + +[node name="Label" type="Label" parent="Player"] +offset_left = 167.0 +offset_top = -132.0 +offset_right = 332.0 +offset_bottom = -68.0 +theme_override_colors/font_color = Color(0.294118, 1, 0.631373, 1) +theme_override_fonts/font = ExtResource("7_ylx0h") +text = "[WASD] to move +[Space] to jump" + +[node name="CharacterBody2D" parent="Player" instance=ExtResource("8_ytsgf")] +position = Vector2(227, -28) +script = ExtResource("9_5jy5e") + +[node name="WideArea" type="Area2D" parent="." node_paths=PackedStringArray("area_pcam")] +position = Vector2(393, -40) +collision_layer = 2 +collision_mask = 2 +script = ExtResource("9_3r1pw") +area_pcam = NodePath("PhantomCamera2D") + +[node name="CollisionShape2D" type="CollisionShape2D" parent="WideArea"] +position = Vector2(0, -40) +shape = SubResource("RectangleShape2D_tgk1y") + +[node name="ColorRect" type="ColorRect" parent="WideArea"] +offset_left = -70.0 +offset_top = -120.0 +offset_right = 70.0 +offset_bottom = 40.0 +size_flags_horizontal = 0 +size_flags_vertical = 0 +color = Color(0.556863, 0.447059, 0.545098, 0.698039) + +[node name="Label" type="Label" parent="WideArea"] +offset_left = -77.0 +offset_top = -250.0 +offset_right = 76.0 +offset_bottom = -120.0 +theme_override_colors/font_color = Color(0.294118, 1, 0.631373, 1) +theme_override_fonts/font = ExtResource("7_ylx0h") +text = "Transition Type: +Sine + +Duration: +0.6s" +horizontal_alignment = 1 + +[node name="PhantomCamera2D" type="Node2D" parent="WideArea"] +position = Vector2(4, -100) +script = ExtResource("5_gvv7r") +zoom = Vector2(0.8, 0.8) +tween_resource = SubResource("Resource_mtp70") +draw_limits = true + +[node name="UpperZoomArea" type="Area2D" parent="." node_paths=PackedStringArray("area_pcam")] +position = Vector2(649, -135) +collision_layer = 2 +collision_mask = 2 +script = ExtResource("9_3r1pw") +area_pcam = NodePath("PhantomCamera2D") + +[node name="CollisionShape2D" type="CollisionShape2D" parent="UpperZoomArea"] +position = Vector2(0, -40) +shape = SubResource("RectangleShape2D_clm0y") + +[node name="CollisionShape2D2" type="CollisionShape2D" parent="UpperZoomArea"] +position = Vector2(0, -40) +shape = SubResource("RectangleShape2D_clm0y") + +[node name="ColorRect" type="ColorRect" parent="UpperZoomArea"] +offset_left = -52.0 +offset_top = -120.0 +offset_right = 52.0 +offset_bottom = 40.0 +size_flags_horizontal = 0 +size_flags_vertical = 0 +color = Color(0.556863, 0.447059, 0.545098, 0.698039) + +[node name="Label" type="Label" parent="UpperZoomArea"] +offset_left = -74.0 +offset_top = -251.0 +offset_right = 79.0 +offset_bottom = -121.0 +theme_override_colors/font_color = Color(0.294118, 1, 0.631373, 1) +theme_override_fonts/font = ExtResource("7_ylx0h") +text = "Transition Type: +Circ + +Duration: +0.3s" +horizontal_alignment = 1 + +[node name="PhantomCamera2D" type="Node2D" parent="UpperZoomArea"] +position = Vector2(2, -83) +script = ExtResource("5_gvv7r") +zoom = Vector2(2, 2) +tween_resource = SubResource("Resource_8jg5c") +draw_limits = true + +[node name="ForwardArea" type="Area2D" parent="." node_paths=PackedStringArray("area_pcam")] +position = Vector2(1136, -38) +collision_layer = 2 +collision_mask = 2 +script = ExtResource("9_3r1pw") +area_pcam = NodePath("PhantomCamera2D") + +[node name="CollisionShape2D" type="CollisionShape2D" parent="ForwardArea"] +position = Vector2(0, -42) +shape = SubResource("RectangleShape2D_uka0w") + +[node name="ColorRect" type="ColorRect" parent="ForwardArea"] +offset_left = -280.0 +offset_top = -122.0 +offset_right = 280.0 +offset_bottom = 38.0 +size_flags_horizontal = 0 +size_flags_vertical = 0 +color = Color(0.556863, 0.447059, 0.545098, 0.698039) + +[node name="Label" type="Label" parent="ForwardArea"] +offset_left = -76.0 +offset_top = -252.0 +offset_right = 77.0 +offset_bottom = -122.0 +theme_override_colors/font_color = Color(0.294118, 1, 0.631373, 1) +theme_override_fonts/font = ExtResource("7_ylx0h") +text = "Transition Type: +Back + +Duration: +1.2s" +horizontal_alignment = 1 + +[node name="PhantomCamera2D" type="Node2D" parent="ForwardArea"] +position = Vector2(344, -46) +script = ExtResource("5_gvv7r") +zoom = Vector2(0.9, 0.9) +tween_resource = SubResource("Resource_e4e41") +draw_limits = true diff --git a/addons/phantom_camera/examples/example_scenes/2D/2d_example_scene.tscn b/addons/phantom_camera/examples/example_scenes/2D/2d_example_scene.tscn new file mode 100644 index 0000000..46d40be --- /dev/null +++ b/addons/phantom_camera/examples/example_scenes/2D/2d_example_scene.tscn @@ -0,0 +1,641 @@ +[gd_scene load_steps=11 format=3 uid="uid://drvexsp2t0nfy"] + +[ext_resource type="Texture2D" uid="uid://c77npili4pel4" path="res://addons/phantom_camera/examples/textures/2D/level_spritesheet.png" id="1_1utlo"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/phantom_camera/phantom_camera_2d.gd" id="2_mgsut"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/phantom_camera_host/phantom_camera_host.gd" id="4_54fc4"] +[ext_resource type="PackedScene" uid="uid://iq5xd1ob1res" path="res://addons/phantom_camera/examples/ui/ui_sign.tscn" id="6_kqt1v"] +[ext_resource type="Resource" uid="uid://euybd2w0bax" path="res://addons/phantom_camera/examples/resources/tween/player_phantom_camera_2d_tween.tres" id="6_pxbym"] +[ext_resource type="PackedScene" uid="uid://7kh0xydx0b1o" path="res://addons/phantom_camera/examples/example_scenes/2D/sub_scenes/playable_character_2d.tscn" id="7_62i3t"] +[ext_resource type="PackedScene" uid="uid://dg7rhrymsrrrm" path="res://addons/phantom_camera/examples/ui/ui_inventory.tscn" id="7_fdx1s"] +[ext_resource type="FontFile" uid="uid://c4mm3of2mc8o5" path="res://addons/phantom_camera/fonts/Nunito-Black.ttf" id="12_k4p0h"] + +[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_easgx"] +texture = ExtResource("1_1utlo") +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_1/linear_velocity = Vector2(0, 0) +0:0/0/physics_layer_1/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 +1:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +1:0/0/physics_layer_1/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 +2:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +2:0/0/physics_layer_1/angular_velocity = 0.0 +3:0/0 = 0 +3:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:0/0/physics_layer_0/angular_velocity = 0.0 +3:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:0/0/physics_layer_1/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 +4:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:0/0/physics_layer_1/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 +5:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +5:0/0/physics_layer_1/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 +6:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +6:0/0/physics_layer_1/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 +7:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +7:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:0/0/physics_layer_1/angular_velocity = 0.0 +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_1/linear_velocity = Vector2(0, 0) +0:1/0/physics_layer_1/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 +1:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +1:1/0/physics_layer_1/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_1/linear_velocity = Vector2(0, 0) +2:1/0/physics_layer_1/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 +3:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:1/0/physics_layer_1/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 +4:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:1/0/physics_layer_1/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 +5:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +5:1/0/physics_layer_1/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 +7:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +7:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:1/0/physics_layer_1/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 +2:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +2:2/0/physics_layer_1/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 +3:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:2/0/physics_layer_1/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 +4:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:2/0/physics_layer_1/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 +7:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +7:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:2/0/physics_layer_1/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 +3:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:3/0/physics_layer_1/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 +4:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:3/0/physics_layer_1/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 +5:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +5:3/0/physics_layer_1/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 +7:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +7:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:3/0/physics_layer_1/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 +3:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:4/0/physics_layer_1/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 +4:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:4/0/physics_layer_1/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 +5:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +5:4/0/physics_layer_1/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 +7:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:4/0/physics_layer_1/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 +3:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:5/0/physics_layer_1/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 +4:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:5/0/physics_layer_1/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 +7:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:5/0/physics_layer_1/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 +3:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:6/0/physics_layer_1/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 +4:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:6/0/physics_layer_1/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 +7:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:6/0/physics_layer_1/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 +2:7/0/physics_layer_1/linear_velocity = Vector2(0, 0) +2:7/0/physics_layer_1/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 +3:7/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:7/0/physics_layer_1/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 +4:7/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:7/0/physics_layer_1/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 +5:7/0/physics_layer_1/linear_velocity = Vector2(0, 0) +5:7/0/physics_layer_1/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 +8:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +8:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:0/0/physics_layer_1/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 +9:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +9:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:0/0/physics_layer_1/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) +10:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:0/0/physics_layer_1/angular_velocity = 0.0 +11:0/0 = 0 +11:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:0/0/physics_layer_0/angular_velocity = 0.0 +11:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +11:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:0/0/physics_layer_1/angular_velocity = 0.0 +12:0/0 = 0 +12:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:0/0/physics_layer_0/angular_velocity = 0.0 +12:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:0/0/physics_layer_1/angular_velocity = 0.0 +13:0/0 = 0 +13:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:0/0/physics_layer_0/angular_velocity = 0.0 +13:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +13:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:0/0/physics_layer_1/angular_velocity = 0.0 +14:0/0 = 0 +14:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:0/0/physics_layer_0/angular_velocity = 0.0 +14:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:0/0/physics_layer_1/angular_velocity = 0.0 +14:0/0/physics_layer_1/polygon_0/points = PackedVector2Array(8, -8, 8, 8, -8, 8) +14:0/0/custom_data_0 = &"Sign" +15:0/0 = 0 +15:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:0/0/physics_layer_0/angular_velocity = 0.0 +15:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:0/0/physics_layer_1/angular_velocity = 0.0 +16:0/0 = 0 +16:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:0/0/physics_layer_0/angular_velocity = 0.0 +16:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:0/0/physics_layer_1/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 +8:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +8:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:1/0/physics_layer_1/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 +9:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +9:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:1/0/physics_layer_1/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) +10:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:1/0/physics_layer_1/angular_velocity = 0.0 +11:1/0 = 0 +11:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:1/0/physics_layer_0/angular_velocity = 0.0 +11:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +11:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:1/0/physics_layer_1/angular_velocity = 0.0 +12:1/0 = 0 +12:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:1/0/physics_layer_0/angular_velocity = 0.0 +12:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:1/0/physics_layer_1/angular_velocity = 0.0 +13:1/0 = 0 +13:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:1/0/physics_layer_0/angular_velocity = 0.0 +13:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +13:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:1/0/physics_layer_1/angular_velocity = 0.0 +14:1/0 = 0 +14:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:1/0/physics_layer_0/angular_velocity = 0.0 +14:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:1/0/physics_layer_1/angular_velocity = 0.0 +15:1/0 = 0 +15:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:1/0/physics_layer_0/angular_velocity = 0.0 +15:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:1/0/physics_layer_1/angular_velocity = 0.0 +16:1/0 = 0 +16:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:1/0/physics_layer_0/angular_velocity = 0.0 +16:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:1/0/physics_layer_1/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 +8:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +8:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:2/0/physics_layer_1/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 +9:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +9:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:2/0/physics_layer_1/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) +10:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:2/0/physics_layer_1/angular_velocity = 0.0 +11:2/0 = 0 +11:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:2/0/physics_layer_0/angular_velocity = 0.0 +11:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +11:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:2/0/physics_layer_1/angular_velocity = 0.0 +12:2/0 = 0 +12:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:2/0/physics_layer_0/angular_velocity = 0.0 +12:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:2/0/physics_layer_1/angular_velocity = 0.0 +13:2/0 = 0 +13:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:2/0/physics_layer_0/angular_velocity = 0.0 +13:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +13:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:2/0/physics_layer_1/angular_velocity = 0.0 +14:2/0 = 0 +14:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:2/0/physics_layer_0/angular_velocity = 0.0 +14:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:2/0/physics_layer_1/angular_velocity = 0.0 +15:2/0 = 0 +15:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:2/0/physics_layer_0/angular_velocity = 0.0 +15:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:2/0/physics_layer_1/angular_velocity = 0.0 +16:2/0 = 0 +16:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:2/0/physics_layer_0/angular_velocity = 0.0 +16:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:2/0/physics_layer_1/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 +8:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +8:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:3/0/physics_layer_1/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 +9:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +9:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:3/0/physics_layer_1/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) +10:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:3/0/physics_layer_1/angular_velocity = 0.0 +11:3/0 = 0 +11:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:3/0/physics_layer_0/angular_velocity = 0.0 +11:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:3/0/physics_layer_1/angular_velocity = 0.0 +12:3/0 = 0 +12:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:3/0/physics_layer_0/angular_velocity = 0.0 +12:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:3/0/physics_layer_1/angular_velocity = 0.0 +13:3/0 = 0 +13:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:3/0/physics_layer_0/angular_velocity = 0.0 +13:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +13:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:3/0/physics_layer_1/angular_velocity = 0.0 +14:3/0 = 0 +14:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:3/0/physics_layer_0/angular_velocity = 0.0 +14:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:3/0/physics_layer_1/angular_velocity = 0.0 +15:3/0 = 0 +15:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:3/0/physics_layer_0/angular_velocity = 0.0 +15:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:3/0/physics_layer_1/angular_velocity = 0.0 +16:3/0 = 0 +16:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:3/0/physics_layer_0/angular_velocity = 0.0 +16:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:3/0/physics_layer_1/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 +8:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:4/0/physics_layer_1/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 +9:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:4/0/physics_layer_1/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_1/linear_velocity = Vector2(0, 0) +10:4/0/physics_layer_1/angular_velocity = 0.0 +11:4/0 = 0 +11:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:4/0/physics_layer_0/angular_velocity = 0.0 +11:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-7, 2.5, -5, -2, -2.5, -5, 2, -7, 8, -8, 8, 8, -8, 8) +11:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:4/0/physics_layer_1/angular_velocity = 0.0 +12:4/0 = 0 +12:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:4/0/physics_layer_0/angular_velocity = 0.0 +12:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:4/0/physics_layer_1/angular_velocity = 0.0 +13:4/0 = 0 +13:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:4/0/physics_layer_0/angular_velocity = 0.0 +13:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 0, -6, 4, -1.5, 6.5, 1.5, 8, 8, -8, 8) +13:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:4/0/physics_layer_1/angular_velocity = 0.0 +14:4/0 = 0 +14:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:4/0/physics_layer_0/angular_velocity = 0.0 +14:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:4/0/physics_layer_1/angular_velocity = 0.0 +14:4/0/physics_layer_1/polygon_0/points = PackedVector2Array(-8, -8, -8, 8, 8, 8, 8, -8) +14:4/0/custom_data_0 = &"Inventory" +15:4/0 = 0 +15:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:4/0/physics_layer_0/angular_velocity = 0.0 +15:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:4/0/physics_layer_1/angular_velocity = 0.0 +16:4/0 = 0 +16:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:4/0/physics_layer_0/angular_velocity = 0.0 +16:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:4/0/physics_layer_1/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 +8:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:5/0/physics_layer_1/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 +9:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:5/0/physics_layer_1/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_1/linear_velocity = Vector2(0, 0) +10:5/0/physics_layer_1/angular_velocity = 0.0 +11:5/0 = 0 +11:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:5/0/physics_layer_0/angular_velocity = 0.0 +11:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +11:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:5/0/physics_layer_1/angular_velocity = 0.0 +12:5/0 = 0 +12:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:5/0/physics_layer_0/angular_velocity = 0.0 +12:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:5/0/physics_layer_1/angular_velocity = 0.0 +13:5/0 = 0 +13:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:5/0/physics_layer_0/angular_velocity = 0.0 +13:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +13:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:5/0/physics_layer_1/angular_velocity = 0.0 +14:5/0 = 0 +14:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:5/0/physics_layer_0/angular_velocity = 0.0 +14:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:5/0/physics_layer_1/angular_velocity = 0.0 +15:5/0 = 0 +15:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:5/0/physics_layer_0/angular_velocity = 0.0 +15:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:5/0/physics_layer_1/angular_velocity = 0.0 +16:5/0 = 0 +16:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:5/0/physics_layer_0/angular_velocity = 0.0 +16:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:5/0/physics_layer_1/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 +8:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:6/0/physics_layer_1/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 +9:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:6/0/physics_layer_1/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_1/linear_velocity = Vector2(0, 0) +10:6/0/physics_layer_1/angular_velocity = 0.0 +11:6/0 = 0 +11:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:6/0/physics_layer_0/angular_velocity = 0.0 +11:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, 1, 6.5, -3, 3, -6.5, -1.5) +11:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:6/0/physics_layer_1/angular_velocity = 0.0 +12:6/0 = 0 +12:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:6/0/physics_layer_0/angular_velocity = 0.0 +12:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:6/0/physics_layer_1/angular_velocity = 0.0 +13:6/0 = 0 +13:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:6/0/physics_layer_0/angular_velocity = 0.0 +13:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 6, -0.5, 3, 3.5, -1.5, 6.5, -8, 8) +13:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:6/0/physics_layer_1/angular_velocity = 0.0 +14:6/0 = 0 +14:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:6/0/physics_layer_0/angular_velocity = 0.0 +14:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:6/0/physics_layer_1/angular_velocity = 0.0 +15:6/0 = 0 +15:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:6/0/physics_layer_0/angular_velocity = 0.0 +15:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:6/0/physics_layer_1/angular_velocity = 0.0 +16:6/0 = 0 +16:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:6/0/physics_layer_0/angular_velocity = 0.0 +16:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:6/0/physics_layer_1/angular_velocity = 0.0 + +[sub_resource type="TileSet" id="TileSet_kf7eg"] +physics_layer_0/collision_layer = 1 +physics_layer_1/collision_layer = 2 +physics_layer_1/collision_mask = 2 +custom_data_layer_0/name = "Type" +custom_data_layer_0/type = 21 +sources/0 = SubResource("TileSetAtlasSource_easgx") + +[node name="ExampleScene2D2" type="Node2D"] + +[node name="Background" type="CanvasLayer" parent="."] +layer = -3 + +[node name="ColorRect" type="ColorRect" parent="Background"] +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_left = -311.0 +offset_top = -173.0 +offset_right = 981.0 +offset_bottom = 548.0 +grow_horizontal = 2 +grow_vertical = 2 +auto_translate = false +localize_numeral_system = false +color = Color(0.137255, 0.14902, 0.196078, 1) + +[node name="TileMap" type="TileMap" parent="."] +z_index = -1 +scale = Vector2(3, 3) +tile_set = SubResource("TileSet_kf7eg") +format = 2 +layer_0/name = "Background" +layer_0/tile_data = PackedInt32Array(-393216, 655360, 2, -327680, 655360, 3, -262144, 655360, 3, -196608, 655360, 3, -131072, 655360, 3, -65536, 655360, 3, -393215, 720896, 2, -327679, 720896, 1, -262143, 720896, 1, -196607, 720896, 1, -131071, 720896, 1, -65535, 720896, 1, -393214, 786432, 2, -327678, 786432, 3, -262142, 786432, 3, -196606, 786432, 3, -131070, 786432, 3, -65534, 786432, 3) +layer_1/name = "Terrain" +layer_1/z_index = 1 +layer_1/tile_data = PackedInt32Array(1, 720896, 0, 2, 720896, 0, 3, 720896, 0, 4, 720896, 0, 5, 720896, 0, 6, 720896, 0, 7, 720896, 0, 8, 720896, 0, 9, 786432, 0, 65545, 786432, 1, 131081, 786432, 1, 196617, 786432, 1, 262153, 786432, 1, 327689, 786432, 1, 393225, 786432, 1, 65537, 720896, 1, 131073, 720896, 1, 196609, 720896, 1, 262145, 458752, 1, 327681, 720896, 1, 393217, 720896, 1, 65538, 720896, 1, 131074, 720896, 1, 196610, 720896, 1, 262146, 720896, 1, 327682, 720896, 1, 393218, 720896, 1, 65539, 720896, 1, 131075, 720896, 1, 196611, 720896, 1, 262147, 720896, 1, 327683, 720896, 1, 393219, 720896, 1, 65540, 458752, 1, 131076, 720896, 1, 196612, 720896, 1, 262148, 720896, 1, 327684, 720896, 1, 393220, 720896, 1, 65541, 720896, 1, 131077, 720896, 1, 196613, 720896, 1, 262149, 458752, 1, 327685, 720896, 1, 393221, 720896, 1, 65542, 720896, 1, 131078, 720896, 1, 196614, 720896, 1, 262150, 720896, 1, 327686, 720896, 1, 393222, 720896, 1, 65543, 720896, 1, 131079, 720896, 1, 196615, 720896, 1, 262151, 720896, 1, 327687, 720896, 1, 393223, 458752, 1, 65544, 720896, 1, 131080, 720896, 1, 196616, 458752, 1, 262152, 720896, 1, 327688, 720896, 1, 393224, 720896, 1, 65546, 524288, 5, 65547, 524288, 5, 65548, 524288, 5, 65549, 524288, 5, 131082, 524288, 6, 131083, 524288, 6, 131084, 524288, 6, 131085, 524288, 6, 196618, 720896, 1, 262154, 720896, 1, 196619, 720896, 1, 262155, 720896, 1, 196620, 720896, 1, 262156, 720896, 1, 196621, 720896, 1, 262157, 720896, 1, 65550, 524288, 5, 65551, 524288, 5, 65552, 524288, 5, 131086, 524288, 6, 131087, 524288, 6, 131088, 524288, 6, 196622, 720896, 1, 196623, 720896, 1, 262159, 720896, 1, 262160, 720896, 1, 196624, 720896, 1, 262158, 720896, 1, 17, 720896, 4, 65553, 720896, 5, 131089, 720896, 5, 196625, 720896, 5, 262161, 720896, 5, 18, 786432, 4, 19, 786432, 4, 20, 786432, 4, 21, 786432, 4, 22, 786432, 4, 23, 786432, 4, 65554, 786432, 5, 131090, 786432, 5, 196626, 786432, 5, 262162, 786432, 5, 65555, 786432, 5, 131091, 589824, 6, 196627, 786432, 5, 262163, 786432, 5, 65556, 786432, 5, 131092, 786432, 5, 196628, 786432, 5, 262164, 786432, 5, 65557, 786432, 5, 131093, 786432, 5, 196629, 786432, 5, 262165, 786432, 5, 65558, 786432, 5, 131094, 786432, 5, 196630, 786432, 5, 262166, 655360, 6, 65559, 786432, 5, 131095, 786432, 5, 196631, 786432, 5, 262167, 786432, 5, 327697, 720896, 5, 393233, 720896, 5, 327698, 589824, 6, 393234, 786432, 5, 327699, 786432, 5, 393235, 786432, 5, 327700, 786432, 5, 393236, 786432, 5, 327701, 786432, 5, 393237, 786432, 5, 327702, 786432, 5, 393238, 786432, 5, 327703, 786432, 5, 393239, 786432, 5, -131062, 720896, 4, -131061, 786432, 4, -131060, 786432, 4, -65526, 720896, 6, -65525, 786432, 6, -65524, 786432, 6, -131056, 851968, 4, -65520, 851968, 6, -131059, 786432, 4, -131058, 786432, 4, -131057, 786432, 4, -65523, 786432, 6, -65522, 786432, 6, -65521, 786432, 6, -196596, 917504, 0, -65536, 917504, 2, -65535, 983040, 2, -65534, 1048576, 2, -65533, 917504, 2, -65532, 983040, 2, -65531, 1048576, 2, -65530, 917504, 2, -65529, 983040, 2, -65528, 1048576, 2, 65535, 655360, 0, 131071, 655360, 1, 196607, 655360, 1, 262143, 655360, 1, 327679, 655360, 1, 393215, 655360, 1, 458751, 655360, 1, 524287, 655360, 1, 589823, 655360, 1, 0, 720896, 0, 65536, 720896, 1, 131072, 720896, 1, 196608, 720896, 1, 262144, 720896, 1, 327680, 720896, 1, 393216, 720896, 1, 458752, 720896, 1, 524288, 720896, 1, 524289, 720896, 1, 524290, 720896, 1, 524291, 720896, 1, 524292, 720896, 1, 524293, 720896, 1, 524294, 720896, 1, 524295, 720896, 1, 524296, 720896, 1, 524297, 786432, 1, 458761, 786432, 1, 458760, 720896, 1, 458759, 720896, 1, 458758, 458752, 1, 458757, 720896, 1, 458756, 720896, 1, 458755, 720896, 1, 458754, 720896, 1, 458753, 720896, 1, -262145, 851968, 4, -196609, 851968, 5, -131073, 851968, 5, -65537, 851968, 5, -1, 851968, 6, -262146, 786432, 4, -262147, 786432, 4, -196610, 589824, 6, -196611, 786432, 5, -6, 786432, 5, -5, 786432, 5, -4, 786432, 5, -3, 786432, 5, -2, 786432, 5, -65538, 786432, 5, -131074, 786432, 5, -131075, 786432, 5, -65539, 655360, 6, 65534, 851968, 5, 131070, 851968, 5, 196606, 851968, 5, 262142, 851968, 5, 327678, 851968, 5, 393214, 851968, 5, 458750, 851968, 5, 65533, 786432, 5, 65532, 786432, 5, 65531, 786432, 5, 65530, 786432, 5, 65529, 720896, 5, 131066, 786432, 5, 196602, 786432, 5, 262138, 786432, 5, 262139, 786432, 5, 327675, 786432, 5, 131068, 786432, 5, 131069, 786432, 5, 196605, 786432, 5, 262141, 786432, 5, 327677, 786432, 5, 393213, 786432, 5, 458749, 786432, 5, 393212, 786432, 5, 393211, 786432, 5, 458748, 786432, 5, 327676, 655360, 6, 262140, 786432, 5, 196604, 786432, 5, 131067, 786432, 5, 196603, 589824, 6, 458747, 786432, 5, 458746, 786432, 5, 393210, 786432, 5, 327674, 786432, 5, -7, 720896, 5, 131065, 720896, 5, 196601, 720896, 5, 262137, 720896, 5, 327673, 720896, 5, 393209, 720896, 5, 458745, 720896, 5, -327684, 720896, 3, -196594, 720896, 3, -196597, 720896, 3, -65518, 720896, 3, -65516, 720896, 3, -327686, 1048576, 5, -327685, 720896, 3, -196595, 917504, 6, -65514, 983040, 6, -327683, 983040, 5, -65513, 1048576, 5, -262151, 720896, 4, -196615, 720896, 5, -131079, 720896, 5, -65543, 720896, 5, -262150, 786432, 4, -196614, 655360, 6, -131078, 786432, 5, -65542, 786432, 5, -262149, 786432, 4, -196613, 786432, 5, -131077, 786432, 5, -65541, 786432, 5, -262148, 786432, 4, -196612, 786432, 5, -131076, 786432, 5, -65540, 786432, 5, 458769, 720896, 5, 524305, 720896, 6, 458775, 786432, 5, 458774, 786432, 5, 458773, 786432, 5, 458772, 786432, 5, 458771, 786432, 5, 458770, 786432, 5, 524306, 786432, 6, 524307, 786432, 6, 524308, 786432, 6, 524309, 786432, 6, 524310, 786432, 6, 524311, 786432, 6, 327690, 720896, 1, 393226, 720896, 1, 458762, 720896, 1, 524298, 720896, 1, 327691, 720896, 1, 393227, 720896, 1, 458763, 720896, 1, 524299, 720896, 1, 327692, 720896, 1, 393228, 720896, 1, 458764, 720896, 1, 524300, 720896, 1, 327693, 720896, 1, 393229, 720896, 1, 458765, 720896, 1, 524301, 720896, 1, 327694, 720896, 1, 393230, 720896, 1, 458766, 720896, 1, 524302, 720896, 1, 327695, 720896, 1, 393231, 720896, 1, 458767, 720896, 1, 524303, 720896, 1, 327696, 720896, 1, 393232, 720896, 1, 458768, 720896, 1, 524304, 720896, 1, 29, 851968, 4, 65565, 851968, 5, 131101, 851968, 5, 196637, 851968, 5, 262173, 851968, 5, 327709, 851968, 5, 393245, 851968, 5, 458781, 851968, 5, 524317, 851968, 6, -65511, 917504, 4, 24, 786432, 4, 25, 786432, 4, 26, 786432, 4, 27, 786432, 4, 28, 786432, 4, 65560, 786432, 5, 65561, 786432, 5, 65562, 786432, 5, 65563, 786432, 5, 65564, 786432, 5, 131100, 786432, 5, 196636, 589824, 6, 131099, 786432, 5, 131098, 786432, 5, 131097, 786432, 5, 131096, 786432, 5, 196632, 786432, 5, 262168, 786432, 5, 327704, 786432, 5, 393240, 786432, 5, 458776, 786432, 5, 524312, 786432, 6, 196633, 786432, 5, 262169, 786432, 5, 327705, 786432, 5, 393241, 786432, 5, 458777, 786432, 5, 524313, 786432, 6, 196634, 786432, 5, 262170, 786432, 5, 327706, 786432, 5, 393242, 655360, 6, 458778, 786432, 5, 524314, 786432, 6, 196635, 786432, 5, 262171, 786432, 5, 327707, 786432, 5, 393243, 786432, 5, 458779, 786432, 5, 524315, 786432, 6, 262172, 786432, 5, 327708, 786432, 5, 393244, 786432, 5, 458780, 786432, 5, 524316, 786432, 6, -196593, 1048576, 6, -393182, 1048576, 6, -393185, 917504, 6, -393180, 983040, 6, -393184, 983040, 5, -65509, 720896, 3, -65510, 720896, 3, -393181, 720896, 3, -393183, 720896, 3, -65517, 720896, 3, -65515, 720896, 3, -327650, 720896, 4, -262114, 720896, 5, -196578, 720896, 5, -131042, 720896, 5, -65506, 720896, 5, -65498, 851968, 5, -131034, 851968, 5, -196570, 851968, 5, -327642, 851968, 4, -327649, 786432, 4, -327648, 786432, 4, -327647, 786432, 4, -327646, 786432, 4, -327645, 786432, 4, -327644, 786432, 4, -327643, 786432, 4, -262106, 851968, 5, -65499, 786432, 5, -131035, 786432, 5, -196571, 786432, 5, -262107, 786432, 5, -262108, 786432, 5, -262109, 786432, 5, -262110, 786432, 5, -262111, 786432, 5, -262112, 786432, 5, -262113, 786432, 5, -196577, 655360, 6, -131041, 786432, 5, -65505, 786432, 5, -65500, 655360, 6, -131036, 589824, 6, -196572, 786432, 5, -196573, 786432, 5, -196574, 786432, 5, -196575, 786432, 5, -196576, 786432, 5, -131040, 589824, 6, -65504, 786432, 5, -65501, 786432, 5, -131037, 786432, 5, -131038, 786432, 5, -131039, 786432, 5, -65503, 786432, 5, -65502, 786432, 5, 524318, 720896, 6, 458782, 720896, 5, 393246, 720896, 5, 327710, 720896, 5, 262174, 720896, 5, 196638, 720896, 5, 131102, 720896, 5, 65566, 720896, 5, 30, 720896, 5, 524319, 786432, 6, 524320, 786432, 6, 524321, 786432, 6, 524322, 786432, 6, 524323, 786432, 6, 524324, 786432, 6, 524325, 786432, 6, 524326, 851968, 6, 38, 851968, 5, 65574, 851968, 5, 131110, 851968, 5, 196646, 851968, 5, 262182, 851968, 5, 327718, 851968, 5, 393254, 851968, 5, 458790, 851968, 5, 31, 786432, 5, 65567, 786432, 5, 131103, 786432, 5, 196639, 786432, 5, 262175, 786432, 5, 327711, 786432, 5, 393247, 655360, 6, 458783, 786432, 5, 32, 786432, 5, 65568, 786432, 5, 131104, 786432, 5, 196640, 786432, 5, 262176, 786432, 5, 327712, 786432, 5, 393248, 786432, 5, 458784, 786432, 5, 33, 786432, 5, 65569, 786432, 5, 131105, 655360, 6, 196641, 786432, 5, 262177, 786432, 5, 327713, 786432, 5, 393249, 786432, 5, 458785, 786432, 5, 34, 786432, 5, 65570, 786432, 5, 131106, 786432, 5, 196642, 786432, 5, 262178, 655360, 6, 327714, 655360, 6, 393250, 786432, 5, 458786, 786432, 5, 35, 786432, 5, 65571, 786432, 5, 131107, 786432, 5, 196643, 786432, 5, 262179, 786432, 5, 327715, 786432, 5, 393251, 786432, 5, 458787, 786432, 5, 36, 655360, 6, 65572, 786432, 5, 131108, 786432, 5, 196644, 786432, 5, 262180, 786432, 5, 327716, 786432, 5, 393252, 786432, 5, 458788, 655360, 6, 37, 786432, 5, 65573, 786432, 5, 131109, 786432, 5, 196645, 786432, 5, 262181, 786432, 5, 327717, 786432, 5, 393253, 786432, 5, 458789, 786432, 5, 524282, 786432, 5, 524283, 786432, 5, 524284, 786432, 5, 524285, 786432, 5, 524281, 720896, 5, 524286, 851968, 5, 589817, 720896, 6, 589818, 786432, 6, 589819, 786432, 6, 589820, 786432, 6, 589821, 786432, 6, 589822, 851968, 6) + +[node name="UI" type="CanvasLayer" parent="."] + +[node name="UIInventory" parent="UI" instance=ExtResource("7_fdx1s")] +unique_name_in_owner = true +visible = false + +[node name="UISign" parent="UI" instance=ExtResource("6_kqt1v")] +unique_name_in_owner = true +visible = false + +[node name="Controls" type="Label" parent="."] +offset_left = 167.0 +offset_top = -145.0 +offset_right = 332.0 +offset_bottom = -81.0 +theme_override_colors/font_color = Color(0.294118, 1, 0.631373, 1) +theme_override_fonts/font = ExtResource("12_k4p0h") +text = "[WASD] to move +[Space] to jump" + +[node name="Camera2D" type="Camera2D" parent="."] +position = Vector2(227, -28) +zoom = Vector2(1.5, 1.5) +editor_draw_limits = true + +[node name="PhantomCameraHost" type="Node" parent="Camera2D"] +script = ExtResource("4_54fc4") + +[node name="Player" type="Node" parent="."] + +[node name="PlayerPhantomCamera2D" type="Node2D" parent="Player" node_paths=PackedStringArray("follow_target")] +unique_name_in_owner = true +process_priority = -1 +position = Vector2(227, -28) +script = ExtResource("2_mgsut") +priority = 10 +follow_mode = 2 +follow_target = NodePath("../CharacterBody2D/PlayerVisuals") +zoom = Vector2(1.5, 1.5) +frame_preview = false +tween_resource = ExtResource("6_pxbym") +tween_on_load = false +follow_damping = true +draw_limits = true + +[node name="CharacterBody2D" parent="Player" instance=ExtResource("7_62i3t")] +position = Vector2(227, -28) + +[editable path="Player/CharacterBody2D"] diff --git a/addons/phantom_camera/examples/example_scenes/2D/2d_follow_framed_example_scene.tscn b/addons/phantom_camera/examples/example_scenes/2D/2d_follow_framed_example_scene.tscn new file mode 100644 index 0000000..69d1d70 --- /dev/null +++ b/addons/phantom_camera/examples/example_scenes/2D/2d_follow_framed_example_scene.tscn @@ -0,0 +1,641 @@ +[gd_scene load_steps=11 format=3 uid="uid://bxtsl6qlpq1ar"] + +[ext_resource type="Texture2D" uid="uid://c77npili4pel4" path="res://addons/phantom_camera/examples/textures/2D/level_spritesheet.png" id="1_27o77"] +[ext_resource type="PackedScene" uid="uid://dg7rhrymsrrrm" path="res://addons/phantom_camera/examples/ui/ui_inventory.tscn" id="2_1tbys"] +[ext_resource type="PackedScene" uid="uid://iq5xd1ob1res" path="res://addons/phantom_camera/examples/ui/ui_sign.tscn" id="3_1kfnp"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/phantom_camera_host/phantom_camera_host.gd" id="4_mylkx"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/phantom_camera/phantom_camera_2d.gd" id="5_lwx5e"] +[ext_resource type="Resource" uid="uid://euybd2w0bax" path="res://addons/phantom_camera/examples/resources/tween/player_phantom_camera_2d_tween.tres" id="6_tju6r"] +[ext_resource type="FontFile" uid="uid://c4mm3of2mc8o5" path="res://addons/phantom_camera/fonts/Nunito-Black.ttf" id="8_bo8m7"] +[ext_resource type="PackedScene" uid="uid://7kh0xydx0b1o" path="res://addons/phantom_camera/examples/example_scenes/2D/sub_scenes/playable_character_2d.tscn" id="8_wlikg"] + +[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_easgx"] +texture = ExtResource("1_27o77") +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_1/linear_velocity = Vector2(0, 0) +0:0/0/physics_layer_1/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 +1:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +1:0/0/physics_layer_1/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 +2:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +2:0/0/physics_layer_1/angular_velocity = 0.0 +3:0/0 = 0 +3:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:0/0/physics_layer_0/angular_velocity = 0.0 +3:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:0/0/physics_layer_1/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 +4:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:0/0/physics_layer_1/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 +5:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +5:0/0/physics_layer_1/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 +6:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +6:0/0/physics_layer_1/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 +7:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +7:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:0/0/physics_layer_1/angular_velocity = 0.0 +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_1/linear_velocity = Vector2(0, 0) +0:1/0/physics_layer_1/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 +1:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +1:1/0/physics_layer_1/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_1/linear_velocity = Vector2(0, 0) +2:1/0/physics_layer_1/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 +3:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:1/0/physics_layer_1/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 +4:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:1/0/physics_layer_1/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 +5:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +5:1/0/physics_layer_1/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 +7:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +7:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:1/0/physics_layer_1/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 +2:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +2:2/0/physics_layer_1/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 +3:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:2/0/physics_layer_1/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 +4:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:2/0/physics_layer_1/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 +7:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +7:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:2/0/physics_layer_1/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 +3:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:3/0/physics_layer_1/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 +4:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:3/0/physics_layer_1/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 +5:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +5:3/0/physics_layer_1/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 +7:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +7:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:3/0/physics_layer_1/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 +3:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:4/0/physics_layer_1/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 +4:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:4/0/physics_layer_1/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 +5:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +5:4/0/physics_layer_1/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 +7:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:4/0/physics_layer_1/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 +3:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:5/0/physics_layer_1/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 +4:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:5/0/physics_layer_1/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 +7:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:5/0/physics_layer_1/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 +3:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:6/0/physics_layer_1/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 +4:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:6/0/physics_layer_1/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 +7:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:6/0/physics_layer_1/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 +2:7/0/physics_layer_1/linear_velocity = Vector2(0, 0) +2:7/0/physics_layer_1/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 +3:7/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:7/0/physics_layer_1/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 +4:7/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:7/0/physics_layer_1/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 +5:7/0/physics_layer_1/linear_velocity = Vector2(0, 0) +5:7/0/physics_layer_1/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 +8:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +8:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:0/0/physics_layer_1/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 +9:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +9:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:0/0/physics_layer_1/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) +10:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:0/0/physics_layer_1/angular_velocity = 0.0 +11:0/0 = 0 +11:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:0/0/physics_layer_0/angular_velocity = 0.0 +11:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +11:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:0/0/physics_layer_1/angular_velocity = 0.0 +12:0/0 = 0 +12:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:0/0/physics_layer_0/angular_velocity = 0.0 +12:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:0/0/physics_layer_1/angular_velocity = 0.0 +13:0/0 = 0 +13:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:0/0/physics_layer_0/angular_velocity = 0.0 +13:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +13:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:0/0/physics_layer_1/angular_velocity = 0.0 +14:0/0 = 0 +14:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:0/0/physics_layer_0/angular_velocity = 0.0 +14:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:0/0/physics_layer_1/angular_velocity = 0.0 +14:0/0/physics_layer_1/polygon_0/points = PackedVector2Array(8, -8, 8, 8, -8, 8) +14:0/0/custom_data_0 = &"Sign" +15:0/0 = 0 +15:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:0/0/physics_layer_0/angular_velocity = 0.0 +15:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:0/0/physics_layer_1/angular_velocity = 0.0 +16:0/0 = 0 +16:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:0/0/physics_layer_0/angular_velocity = 0.0 +16:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:0/0/physics_layer_1/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 +8:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +8:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:1/0/physics_layer_1/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 +9:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +9:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:1/0/physics_layer_1/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) +10:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:1/0/physics_layer_1/angular_velocity = 0.0 +11:1/0 = 0 +11:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:1/0/physics_layer_0/angular_velocity = 0.0 +11:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +11:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:1/0/physics_layer_1/angular_velocity = 0.0 +12:1/0 = 0 +12:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:1/0/physics_layer_0/angular_velocity = 0.0 +12:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:1/0/physics_layer_1/angular_velocity = 0.0 +13:1/0 = 0 +13:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:1/0/physics_layer_0/angular_velocity = 0.0 +13:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +13:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:1/0/physics_layer_1/angular_velocity = 0.0 +14:1/0 = 0 +14:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:1/0/physics_layer_0/angular_velocity = 0.0 +14:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:1/0/physics_layer_1/angular_velocity = 0.0 +15:1/0 = 0 +15:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:1/0/physics_layer_0/angular_velocity = 0.0 +15:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:1/0/physics_layer_1/angular_velocity = 0.0 +16:1/0 = 0 +16:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:1/0/physics_layer_0/angular_velocity = 0.0 +16:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:1/0/physics_layer_1/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 +8:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +8:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:2/0/physics_layer_1/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 +9:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +9:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:2/0/physics_layer_1/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) +10:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:2/0/physics_layer_1/angular_velocity = 0.0 +11:2/0 = 0 +11:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:2/0/physics_layer_0/angular_velocity = 0.0 +11:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +11:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:2/0/physics_layer_1/angular_velocity = 0.0 +12:2/0 = 0 +12:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:2/0/physics_layer_0/angular_velocity = 0.0 +12:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:2/0/physics_layer_1/angular_velocity = 0.0 +13:2/0 = 0 +13:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:2/0/physics_layer_0/angular_velocity = 0.0 +13:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +13:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:2/0/physics_layer_1/angular_velocity = 0.0 +14:2/0 = 0 +14:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:2/0/physics_layer_0/angular_velocity = 0.0 +14:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:2/0/physics_layer_1/angular_velocity = 0.0 +15:2/0 = 0 +15:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:2/0/physics_layer_0/angular_velocity = 0.0 +15:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:2/0/physics_layer_1/angular_velocity = 0.0 +16:2/0 = 0 +16:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:2/0/physics_layer_0/angular_velocity = 0.0 +16:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:2/0/physics_layer_1/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 +8:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +8:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:3/0/physics_layer_1/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 +9:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +9:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:3/0/physics_layer_1/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) +10:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:3/0/physics_layer_1/angular_velocity = 0.0 +11:3/0 = 0 +11:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:3/0/physics_layer_0/angular_velocity = 0.0 +11:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:3/0/physics_layer_1/angular_velocity = 0.0 +12:3/0 = 0 +12:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:3/0/physics_layer_0/angular_velocity = 0.0 +12:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:3/0/physics_layer_1/angular_velocity = 0.0 +13:3/0 = 0 +13:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:3/0/physics_layer_0/angular_velocity = 0.0 +13:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +13:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:3/0/physics_layer_1/angular_velocity = 0.0 +14:3/0 = 0 +14:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:3/0/physics_layer_0/angular_velocity = 0.0 +14:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:3/0/physics_layer_1/angular_velocity = 0.0 +15:3/0 = 0 +15:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:3/0/physics_layer_0/angular_velocity = 0.0 +15:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:3/0/physics_layer_1/angular_velocity = 0.0 +16:3/0 = 0 +16:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:3/0/physics_layer_0/angular_velocity = 0.0 +16:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:3/0/physics_layer_1/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 +8:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:4/0/physics_layer_1/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 +9:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:4/0/physics_layer_1/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_1/linear_velocity = Vector2(0, 0) +10:4/0/physics_layer_1/angular_velocity = 0.0 +11:4/0 = 0 +11:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:4/0/physics_layer_0/angular_velocity = 0.0 +11:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-7, 2.5, -5, -2, -2.5, -5, 2, -7, 8, -8, 8, 8, -8, 8) +11:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:4/0/physics_layer_1/angular_velocity = 0.0 +12:4/0 = 0 +12:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:4/0/physics_layer_0/angular_velocity = 0.0 +12:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:4/0/physics_layer_1/angular_velocity = 0.0 +13:4/0 = 0 +13:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:4/0/physics_layer_0/angular_velocity = 0.0 +13:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 0, -6, 4, -1.5, 6.5, 1.5, 8, 8, -8, 8) +13:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:4/0/physics_layer_1/angular_velocity = 0.0 +14:4/0 = 0 +14:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:4/0/physics_layer_0/angular_velocity = 0.0 +14:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:4/0/physics_layer_1/angular_velocity = 0.0 +14:4/0/physics_layer_1/polygon_0/points = PackedVector2Array(-8, -8, -8, 8, 8, 8, 8, -8) +14:4/0/custom_data_0 = &"Inventory" +15:4/0 = 0 +15:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:4/0/physics_layer_0/angular_velocity = 0.0 +15:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:4/0/physics_layer_1/angular_velocity = 0.0 +16:4/0 = 0 +16:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:4/0/physics_layer_0/angular_velocity = 0.0 +16:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:4/0/physics_layer_1/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 +8:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:5/0/physics_layer_1/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 +9:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:5/0/physics_layer_1/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_1/linear_velocity = Vector2(0, 0) +10:5/0/physics_layer_1/angular_velocity = 0.0 +11:5/0 = 0 +11:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:5/0/physics_layer_0/angular_velocity = 0.0 +11:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +11:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:5/0/physics_layer_1/angular_velocity = 0.0 +12:5/0 = 0 +12:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:5/0/physics_layer_0/angular_velocity = 0.0 +12:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:5/0/physics_layer_1/angular_velocity = 0.0 +13:5/0 = 0 +13:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:5/0/physics_layer_0/angular_velocity = 0.0 +13:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +13:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:5/0/physics_layer_1/angular_velocity = 0.0 +14:5/0 = 0 +14:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:5/0/physics_layer_0/angular_velocity = 0.0 +14:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:5/0/physics_layer_1/angular_velocity = 0.0 +15:5/0 = 0 +15:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:5/0/physics_layer_0/angular_velocity = 0.0 +15:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:5/0/physics_layer_1/angular_velocity = 0.0 +16:5/0 = 0 +16:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:5/0/physics_layer_0/angular_velocity = 0.0 +16:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:5/0/physics_layer_1/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 +8:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:6/0/physics_layer_1/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 +9:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:6/0/physics_layer_1/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_1/linear_velocity = Vector2(0, 0) +10:6/0/physics_layer_1/angular_velocity = 0.0 +11:6/0 = 0 +11:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:6/0/physics_layer_0/angular_velocity = 0.0 +11:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, 1, 6.5, -3, 3, -6.5, -1.5) +11:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:6/0/physics_layer_1/angular_velocity = 0.0 +12:6/0 = 0 +12:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:6/0/physics_layer_0/angular_velocity = 0.0 +12:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:6/0/physics_layer_1/angular_velocity = 0.0 +13:6/0 = 0 +13:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:6/0/physics_layer_0/angular_velocity = 0.0 +13:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 6, -0.5, 3, 3.5, -1.5, 6.5, -8, 8) +13:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:6/0/physics_layer_1/angular_velocity = 0.0 +14:6/0 = 0 +14:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:6/0/physics_layer_0/angular_velocity = 0.0 +14:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:6/0/physics_layer_1/angular_velocity = 0.0 +15:6/0 = 0 +15:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:6/0/physics_layer_0/angular_velocity = 0.0 +15:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:6/0/physics_layer_1/angular_velocity = 0.0 +16:6/0 = 0 +16:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:6/0/physics_layer_0/angular_velocity = 0.0 +16:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:6/0/physics_layer_1/angular_velocity = 0.0 + +[sub_resource type="TileSet" id="TileSet_kf7eg"] +physics_layer_0/collision_layer = 1 +physics_layer_1/collision_layer = 2 +physics_layer_1/collision_mask = 2 +custom_data_layer_0/name = "Type" +custom_data_layer_0/type = 21 +sources/0 = SubResource("TileSetAtlasSource_easgx") + +[node name="ExampleScene2D" type="Node2D"] + +[node name="Background" type="CanvasLayer" parent="."] +layer = -3 + +[node name="ColorRect" type="ColorRect" parent="Background"] +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_left = -345.0 +offset_top = -143.0 +offset_right = 947.0 +offset_bottom = 578.0 +grow_horizontal = 2 +grow_vertical = 2 +auto_translate = false +localize_numeral_system = false +color = Color(0.137255, 0.14902, 0.196078, 1) + +[node name="TileMap" type="TileMap" parent="."] +z_index = -1 +scale = Vector2(3, 3) +tile_set = SubResource("TileSet_kf7eg") +format = 2 +layer_0/name = "Background" +layer_0/tile_data = PackedInt32Array(-393216, 655360, 2, -327680, 655360, 3, -262144, 655360, 3, -196608, 655360, 3, -131072, 655360, 3, -65536, 655360, 3, -393215, 720896, 2, -327679, 720896, 1, -262143, 720896, 1, -196607, 720896, 1, -131071, 720896, 1, -65535, 720896, 1, -393214, 786432, 2, -327678, 786432, 3, -262142, 786432, 3, -196606, 786432, 3, -131070, 786432, 3, -65534, 786432, 3) +layer_1/name = "Terrain" +layer_1/z_index = 1 +layer_1/tile_data = PackedInt32Array(1, 720896, 0, 2, 720896, 0, 3, 720896, 0, 4, 720896, 0, 5, 720896, 0, 6, 720896, 0, 7, 720896, 0, 8, 720896, 0, 9, 786432, 0, 65545, 786432, 1, 131081, 786432, 1, 196617, 786432, 1, 262153, 786432, 1, 327689, 786432, 1, 393225, 786432, 1, 65537, 720896, 1, 131073, 720896, 1, 196609, 720896, 1, 262145, 458752, 1, 327681, 720896, 1, 393217, 720896, 1, 65538, 720896, 1, 131074, 720896, 1, 196610, 720896, 1, 262146, 720896, 1, 327682, 720896, 1, 393218, 720896, 1, 65539, 720896, 1, 131075, 720896, 1, 196611, 720896, 1, 262147, 720896, 1, 327683, 720896, 1, 393219, 720896, 1, 65540, 458752, 1, 131076, 720896, 1, 196612, 720896, 1, 262148, 720896, 1, 327684, 720896, 1, 393220, 720896, 1, 65541, 720896, 1, 131077, 720896, 1, 196613, 720896, 1, 262149, 458752, 1, 327685, 720896, 1, 393221, 720896, 1, 65542, 720896, 1, 131078, 720896, 1, 196614, 720896, 1, 262150, 720896, 1, 327686, 720896, 1, 393222, 720896, 1, 65543, 720896, 1, 131079, 720896, 1, 196615, 720896, 1, 262151, 720896, 1, 327687, 720896, 1, 393223, 458752, 1, 65544, 720896, 1, 131080, 720896, 1, 196616, 458752, 1, 262152, 720896, 1, 327688, 720896, 1, 393224, 720896, 1, 65546, 524288, 5, 65547, 524288, 5, 65548, 524288, 5, 65549, 524288, 5, 131082, 524288, 6, 131083, 524288, 6, 131084, 524288, 6, 131085, 524288, 6, 196618, 720896, 1, 262154, 720896, 1, 196619, 720896, 1, 262155, 720896, 1, 196620, 720896, 1, 262156, 720896, 1, 196621, 720896, 1, 262157, 720896, 1, 65550, 524288, 5, 65551, 524288, 5, 65552, 524288, 5, 131086, 524288, 6, 131087, 524288, 6, 131088, 524288, 6, 196622, 720896, 1, 196623, 720896, 1, 262159, 720896, 1, 262160, 720896, 1, 196624, 720896, 1, 262158, 720896, 1, 17, 720896, 4, 65553, 720896, 5, 131089, 720896, 5, 196625, 720896, 5, 262161, 720896, 5, 18, 786432, 4, 19, 786432, 4, 20, 786432, 4, 21, 786432, 4, 22, 786432, 4, 23, 786432, 4, 65554, 786432, 5, 131090, 786432, 5, 196626, 786432, 5, 262162, 786432, 5, 65555, 786432, 5, 131091, 589824, 6, 196627, 786432, 5, 262163, 786432, 5, 65556, 786432, 5, 131092, 786432, 5, 196628, 786432, 5, 262164, 786432, 5, 65557, 786432, 5, 131093, 786432, 5, 196629, 786432, 5, 262165, 786432, 5, 65558, 786432, 5, 131094, 786432, 5, 196630, 786432, 5, 262166, 655360, 6, 65559, 786432, 5, 131095, 786432, 5, 196631, 786432, 5, 262167, 786432, 5, 327697, 720896, 5, 393233, 720896, 5, 327698, 589824, 6, 393234, 786432, 5, 327699, 786432, 5, 393235, 786432, 5, 327700, 786432, 5, 393236, 786432, 5, 327701, 786432, 5, 393237, 786432, 5, 327702, 786432, 5, 393238, 786432, 5, 327703, 786432, 5, 393239, 786432, 5, -131062, 720896, 4, -131061, 786432, 4, -131060, 786432, 4, -65526, 720896, 6, -65525, 786432, 6, -65524, 786432, 6, -131056, 851968, 4, -65520, 851968, 6, -131059, 786432, 4, -131058, 786432, 4, -131057, 786432, 4, -65523, 786432, 6, -65522, 786432, 6, -65521, 786432, 6, -196596, 917504, 0, -65536, 917504, 2, -65535, 983040, 2, -65534, 1048576, 2, -65533, 917504, 2, -65532, 983040, 2, -65531, 1048576, 2, -65530, 917504, 2, -65529, 983040, 2, -65528, 1048576, 2, 65535, 655360, 0, 131071, 655360, 1, 196607, 655360, 1, 262143, 655360, 1, 327679, 655360, 1, 393215, 655360, 1, 458751, 655360, 1, 524287, 655360, 1, 589823, 655360, 1, 0, 720896, 0, 65536, 720896, 1, 131072, 720896, 1, 196608, 720896, 1, 262144, 720896, 1, 327680, 720896, 1, 393216, 720896, 1, 458752, 720896, 1, 524288, 720896, 1, 524289, 720896, 1, 524290, 720896, 1, 524291, 720896, 1, 524292, 720896, 1, 524293, 720896, 1, 524294, 720896, 1, 524295, 720896, 1, 524296, 720896, 1, 524297, 786432, 1, 458761, 786432, 1, 458760, 720896, 1, 458759, 720896, 1, 458758, 458752, 1, 458757, 720896, 1, 458756, 720896, 1, 458755, 720896, 1, 458754, 720896, 1, 458753, 720896, 1, -262145, 851968, 4, -196609, 851968, 5, -131073, 851968, 5, -65537, 851968, 5, -1, 851968, 6, -262146, 786432, 4, -262147, 786432, 4, -196610, 589824, 6, -196611, 786432, 5, -6, 786432, 5, -5, 786432, 5, -4, 786432, 5, -3, 786432, 5, -2, 786432, 5, -65538, 786432, 5, -131074, 786432, 5, -131075, 786432, 5, -65539, 655360, 6, 65534, 851968, 5, 131070, 851968, 5, 196606, 851968, 5, 262142, 851968, 5, 327678, 851968, 5, 393214, 851968, 5, 458750, 851968, 5, 65533, 786432, 5, 65532, 786432, 5, 65531, 786432, 5, 65530, 786432, 5, 65529, 720896, 5, 131066, 786432, 5, 196602, 786432, 5, 262138, 786432, 5, 262139, 786432, 5, 327675, 786432, 5, 131068, 786432, 5, 131069, 786432, 5, 196605, 786432, 5, 262141, 786432, 5, 327677, 786432, 5, 393213, 786432, 5, 458749, 786432, 5, 393212, 786432, 5, 393211, 786432, 5, 458748, 786432, 5, 327676, 655360, 6, 262140, 786432, 5, 196604, 786432, 5, 131067, 786432, 5, 196603, 589824, 6, 458747, 786432, 5, 458746, 786432, 5, 393210, 786432, 5, 327674, 786432, 5, -7, 720896, 5, 131065, 720896, 5, 196601, 720896, 5, 262137, 720896, 5, 327673, 720896, 5, 393209, 720896, 5, 458745, 720896, 5, -327684, 720896, 3, -196594, 720896, 3, -196597, 720896, 3, -65518, 720896, 3, -65516, 720896, 3, -327686, 1048576, 5, -327685, 720896, 3, -196595, 917504, 6, -65514, 983040, 6, -327683, 983040, 5, -65513, 1048576, 5, -262151, 720896, 4, -196615, 720896, 5, -131079, 720896, 5, -65543, 720896, 5, -262150, 786432, 4, -196614, 655360, 6, -131078, 786432, 5, -65542, 786432, 5, -262149, 786432, 4, -196613, 786432, 5, -131077, 786432, 5, -65541, 786432, 5, -262148, 786432, 4, -196612, 786432, 5, -131076, 786432, 5, -65540, 786432, 5, 458769, 720896, 5, 524305, 720896, 6, 458775, 786432, 5, 458774, 786432, 5, 458773, 786432, 5, 458772, 786432, 5, 458771, 786432, 5, 458770, 786432, 5, 524306, 786432, 6, 524307, 786432, 6, 524308, 786432, 6, 524309, 786432, 6, 524310, 786432, 6, 524311, 786432, 6, 327690, 720896, 1, 393226, 720896, 1, 458762, 720896, 1, 524298, 720896, 1, 327691, 720896, 1, 393227, 720896, 1, 458763, 720896, 1, 524299, 720896, 1, 327692, 720896, 1, 393228, 720896, 1, 458764, 720896, 1, 524300, 720896, 1, 327693, 720896, 1, 393229, 720896, 1, 458765, 720896, 1, 524301, 720896, 1, 327694, 720896, 1, 393230, 720896, 1, 458766, 720896, 1, 524302, 720896, 1, 327695, 720896, 1, 393231, 720896, 1, 458767, 720896, 1, 524303, 720896, 1, 327696, 720896, 1, 393232, 720896, 1, 458768, 720896, 1, 524304, 720896, 1, 29, 851968, 4, 65565, 851968, 5, 131101, 851968, 5, 196637, 851968, 5, 262173, 851968, 5, 327709, 851968, 5, 393245, 851968, 5, 458781, 851968, 5, 524317, 851968, 6, -65511, 917504, 4, 24, 786432, 4, 25, 786432, 4, 26, 786432, 4, 27, 786432, 4, 28, 786432, 4, 65560, 786432, 5, 65561, 786432, 5, 65562, 786432, 5, 65563, 786432, 5, 65564, 786432, 5, 131100, 786432, 5, 196636, 589824, 6, 131099, 786432, 5, 131098, 786432, 5, 131097, 786432, 5, 131096, 786432, 5, 196632, 786432, 5, 262168, 786432, 5, 327704, 786432, 5, 393240, 786432, 5, 458776, 786432, 5, 524312, 786432, 6, 196633, 786432, 5, 262169, 786432, 5, 327705, 786432, 5, 393241, 786432, 5, 458777, 786432, 5, 524313, 786432, 6, 196634, 786432, 5, 262170, 786432, 5, 327706, 786432, 5, 393242, 655360, 6, 458778, 786432, 5, 524314, 786432, 6, 196635, 786432, 5, 262171, 786432, 5, 327707, 786432, 5, 393243, 786432, 5, 458779, 786432, 5, 524315, 786432, 6, 262172, 786432, 5, 327708, 786432, 5, 393244, 786432, 5, 458780, 786432, 5, 524316, 786432, 6, -196593, 1048576, 6, -393182, 1048576, 6, -393185, 917504, 6, -393180, 983040, 6, -393184, 983040, 5, -65509, 720896, 3, -65510, 720896, 3, -393181, 720896, 3, -393183, 720896, 3, -65517, 720896, 3, -65515, 720896, 3, -327650, 720896, 4, -262114, 720896, 5, -196578, 720896, 5, -131042, 720896, 5, -65506, 720896, 5, -65498, 851968, 5, -131034, 851968, 5, -196570, 851968, 5, -327642, 851968, 4, -327649, 786432, 4, -327648, 786432, 4, -327647, 786432, 4, -327646, 786432, 4, -327645, 786432, 4, -327644, 786432, 4, -327643, 786432, 4, -262106, 851968, 5, -65499, 786432, 5, -131035, 786432, 5, -196571, 786432, 5, -262107, 786432, 5, -262108, 786432, 5, -262109, 786432, 5, -262110, 786432, 5, -262111, 786432, 5, -262112, 786432, 5, -262113, 786432, 5, -196577, 655360, 6, -131041, 786432, 5, -65505, 786432, 5, -65500, 655360, 6, -131036, 589824, 6, -196572, 786432, 5, -196573, 786432, 5, -196574, 786432, 5, -196575, 786432, 5, -196576, 786432, 5, -131040, 589824, 6, -65504, 786432, 5, -65501, 786432, 5, -131037, 786432, 5, -131038, 786432, 5, -131039, 786432, 5, -65503, 786432, 5, -65502, 786432, 5, 524318, 720896, 6, 458782, 720896, 5, 393246, 720896, 5, 327710, 720896, 5, 262174, 720896, 5, 196638, 720896, 5, 131102, 720896, 5, 65566, 720896, 5, 30, 720896, 5, 524319, 786432, 6, 524320, 786432, 6, 524321, 786432, 6, 524322, 786432, 6, 524323, 786432, 6, 524324, 786432, 6, 524325, 786432, 6, 524326, 851968, 6, 38, 851968, 5, 65574, 851968, 5, 131110, 851968, 5, 196646, 851968, 5, 262182, 851968, 5, 327718, 851968, 5, 393254, 851968, 5, 458790, 851968, 5, 31, 786432, 5, 65567, 786432, 5, 131103, 786432, 5, 196639, 786432, 5, 262175, 786432, 5, 327711, 786432, 5, 393247, 655360, 6, 458783, 786432, 5, 32, 786432, 5, 65568, 786432, 5, 131104, 786432, 5, 196640, 786432, 5, 262176, 786432, 5, 327712, 786432, 5, 393248, 786432, 5, 458784, 786432, 5, 33, 786432, 5, 65569, 786432, 5, 131105, 655360, 6, 196641, 786432, 5, 262177, 786432, 5, 327713, 786432, 5, 393249, 786432, 5, 458785, 786432, 5, 34, 786432, 5, 65570, 786432, 5, 131106, 786432, 5, 196642, 786432, 5, 262178, 655360, 6, 327714, 655360, 6, 393250, 786432, 5, 458786, 786432, 5, 35, 786432, 5, 65571, 786432, 5, 131107, 786432, 5, 196643, 786432, 5, 262179, 786432, 5, 327715, 786432, 5, 393251, 786432, 5, 458787, 786432, 5, 36, 655360, 6, 65572, 786432, 5, 131108, 786432, 5, 196644, 786432, 5, 262180, 786432, 5, 327716, 786432, 5, 393252, 786432, 5, 458788, 655360, 6, 37, 786432, 5, 65573, 786432, 5, 131109, 786432, 5, 196645, 786432, 5, 262181, 786432, 5, 327717, 786432, 5, 393253, 786432, 5, 458789, 786432, 5, 524282, 786432, 5, 524283, 786432, 5, 524284, 786432, 5, 524285, 786432, 5, 524281, 720896, 5, 524286, 851968, 5, 589817, 720896, 6, 589818, 786432, 6, 589819, 786432, 6, 589820, 786432, 6, 589821, 786432, 6, 589822, 851968, 6) + +[node name="UI" type="CanvasLayer" parent="."] + +[node name="UIInventory" parent="UI" instance=ExtResource("2_1tbys")] +unique_name_in_owner = true +visible = false + +[node name="UISign" parent="UI" instance=ExtResource("3_1kfnp")] +unique_name_in_owner = true +visible = false + +[node name="Camera2D" type="Camera2D" parent="."] +position = Vector2(282, -29) +zoom = Vector2(2, 2) + +[node name="PhantomCameraHost" type="Node" parent="Camera2D"] +script = ExtResource("4_mylkx") + +[node name="Player" type="Node" parent="."] + +[node name="PlayerPhantomCamera2D" type="Node2D" parent="Player" node_paths=PackedStringArray("follow_target")] +unique_name_in_owner = true +position = Vector2(282, -29) +script = ExtResource("5_lwx5e") +priority = 5 +follow_mode = 5 +follow_target = NodePath("../CharacterBody2D/PlayerVisuals") +zoom = Vector2(2, 2) +tween_resource = ExtResource("6_tju6r") +tween_on_load = false +follow_damping = true +dead_zone_width = 0.416 +dead_zone_height = 0.63 +show_viewfinder_in_play = true +draw_limits = true + +[node name="Label" type="Label" parent="Player"] +offset_left = 167.0 +offset_top = -145.0 +offset_right = 332.0 +offset_bottom = -81.0 +theme_override_colors/font_color = Color(0.294118, 1, 0.631373, 1) +theme_override_fonts/font = ExtResource("8_bo8m7") +text = "[WASD] to move +[Space] to jump" + +[node name="CharacterBody2D" parent="Player" instance=ExtResource("8_wlikg")] +position = Vector2(282, -29) + +[editable path="Player/CharacterBody2D"] diff --git a/addons/phantom_camera/examples/example_scenes/2D/2d_follow_group_example_scene.tscn b/addons/phantom_camera/examples/example_scenes/2D/2d_follow_group_example_scene.tscn new file mode 100644 index 0000000..c07f5c1 --- /dev/null +++ b/addons/phantom_camera/examples/example_scenes/2D/2d_follow_group_example_scene.tscn @@ -0,0 +1,648 @@ +[gd_scene load_steps=13 format=3 uid="uid://brrncnp26lrco"] + +[ext_resource type="Texture2D" uid="uid://c77npili4pel4" path="res://addons/phantom_camera/examples/textures/2D/level_spritesheet.png" id="1_5kqbp"] +[ext_resource type="PackedScene" uid="uid://dg7rhrymsrrrm" path="res://addons/phantom_camera/examples/ui/ui_inventory.tscn" id="2_xmntp"] +[ext_resource type="PackedScene" uid="uid://iq5xd1ob1res" path="res://addons/phantom_camera/examples/ui/ui_sign.tscn" id="3_8dojy"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/phantom_camera_host/phantom_camera_host.gd" id="4_2efwt"] +[ext_resource type="Texture2D" uid="uid://cwep0on2tthn7" path="res://addons/phantom_camera/examples/textures/2D/phantom_camera_2d_sprite.png" id="5_0v2cd"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/phantom_camera/phantom_camera_2d.gd" id="6_diuy4"] +[ext_resource type="PackedScene" uid="uid://7kh0xydx0b1o" path="res://addons/phantom_camera/examples/example_scenes/2D/sub_scenes/playable_character_2d.tscn" id="7_ybwrw"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/resources/tween_resource.gd" id="9_wk0p3"] +[ext_resource type="FontFile" uid="uid://c4mm3of2mc8o5" path="res://addons/phantom_camera/fonts/Nunito-Black.ttf" id="12_uvcwb"] + +[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_easgx"] +texture = ExtResource("1_5kqbp") +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_1/linear_velocity = Vector2(0, 0) +0:0/0/physics_layer_1/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 +1:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +1:0/0/physics_layer_1/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 +2:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +2:0/0/physics_layer_1/angular_velocity = 0.0 +3:0/0 = 0 +3:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:0/0/physics_layer_0/angular_velocity = 0.0 +3:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:0/0/physics_layer_1/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 +4:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:0/0/physics_layer_1/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 +5:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +5:0/0/physics_layer_1/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 +6:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +6:0/0/physics_layer_1/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 +7:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +7:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:0/0/physics_layer_1/angular_velocity = 0.0 +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_1/linear_velocity = Vector2(0, 0) +0:1/0/physics_layer_1/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 +1:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +1:1/0/physics_layer_1/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_1/linear_velocity = Vector2(0, 0) +2:1/0/physics_layer_1/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 +3:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:1/0/physics_layer_1/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 +4:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:1/0/physics_layer_1/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 +5:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +5:1/0/physics_layer_1/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 +7:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +7:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:1/0/physics_layer_1/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 +2:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +2:2/0/physics_layer_1/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 +3:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:2/0/physics_layer_1/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 +4:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:2/0/physics_layer_1/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 +7:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +7:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:2/0/physics_layer_1/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 +3:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:3/0/physics_layer_1/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 +4:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:3/0/physics_layer_1/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 +5:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +5:3/0/physics_layer_1/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 +7:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +7:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:3/0/physics_layer_1/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 +3:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:4/0/physics_layer_1/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 +4:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:4/0/physics_layer_1/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 +5:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +5:4/0/physics_layer_1/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 +7:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:4/0/physics_layer_1/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 +3:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:5/0/physics_layer_1/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 +4:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:5/0/physics_layer_1/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 +7:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:5/0/physics_layer_1/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 +3:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:6/0/physics_layer_1/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 +4:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:6/0/physics_layer_1/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 +7:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:6/0/physics_layer_1/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 +2:7/0/physics_layer_1/linear_velocity = Vector2(0, 0) +2:7/0/physics_layer_1/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 +3:7/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:7/0/physics_layer_1/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 +4:7/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:7/0/physics_layer_1/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 +5:7/0/physics_layer_1/linear_velocity = Vector2(0, 0) +5:7/0/physics_layer_1/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 +8:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +8:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:0/0/physics_layer_1/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 +9:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +9:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:0/0/physics_layer_1/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) +10:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:0/0/physics_layer_1/angular_velocity = 0.0 +11:0/0 = 0 +11:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:0/0/physics_layer_0/angular_velocity = 0.0 +11:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +11:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:0/0/physics_layer_1/angular_velocity = 0.0 +12:0/0 = 0 +12:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:0/0/physics_layer_0/angular_velocity = 0.0 +12:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:0/0/physics_layer_1/angular_velocity = 0.0 +13:0/0 = 0 +13:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:0/0/physics_layer_0/angular_velocity = 0.0 +13:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +13:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:0/0/physics_layer_1/angular_velocity = 0.0 +14:0/0 = 0 +14:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:0/0/physics_layer_0/angular_velocity = 0.0 +14:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:0/0/physics_layer_1/angular_velocity = 0.0 +14:0/0/physics_layer_1/polygon_0/points = PackedVector2Array(8, -8, 8, 8, -8, 8) +14:0/0/custom_data_0 = &"Sign" +15:0/0 = 0 +15:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:0/0/physics_layer_0/angular_velocity = 0.0 +15:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:0/0/physics_layer_1/angular_velocity = 0.0 +16:0/0 = 0 +16:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:0/0/physics_layer_0/angular_velocity = 0.0 +16:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:0/0/physics_layer_1/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 +8:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +8:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:1/0/physics_layer_1/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 +9:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +9:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:1/0/physics_layer_1/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) +10:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:1/0/physics_layer_1/angular_velocity = 0.0 +11:1/0 = 0 +11:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:1/0/physics_layer_0/angular_velocity = 0.0 +11:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +11:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:1/0/physics_layer_1/angular_velocity = 0.0 +12:1/0 = 0 +12:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:1/0/physics_layer_0/angular_velocity = 0.0 +12:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:1/0/physics_layer_1/angular_velocity = 0.0 +13:1/0 = 0 +13:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:1/0/physics_layer_0/angular_velocity = 0.0 +13:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +13:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:1/0/physics_layer_1/angular_velocity = 0.0 +14:1/0 = 0 +14:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:1/0/physics_layer_0/angular_velocity = 0.0 +14:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:1/0/physics_layer_1/angular_velocity = 0.0 +15:1/0 = 0 +15:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:1/0/physics_layer_0/angular_velocity = 0.0 +15:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:1/0/physics_layer_1/angular_velocity = 0.0 +16:1/0 = 0 +16:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:1/0/physics_layer_0/angular_velocity = 0.0 +16:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:1/0/physics_layer_1/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 +8:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +8:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:2/0/physics_layer_1/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 +9:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +9:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:2/0/physics_layer_1/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) +10:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:2/0/physics_layer_1/angular_velocity = 0.0 +11:2/0 = 0 +11:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:2/0/physics_layer_0/angular_velocity = 0.0 +11:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +11:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:2/0/physics_layer_1/angular_velocity = 0.0 +12:2/0 = 0 +12:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:2/0/physics_layer_0/angular_velocity = 0.0 +12:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:2/0/physics_layer_1/angular_velocity = 0.0 +13:2/0 = 0 +13:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:2/0/physics_layer_0/angular_velocity = 0.0 +13:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +13:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:2/0/physics_layer_1/angular_velocity = 0.0 +14:2/0 = 0 +14:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:2/0/physics_layer_0/angular_velocity = 0.0 +14:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:2/0/physics_layer_1/angular_velocity = 0.0 +15:2/0 = 0 +15:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:2/0/physics_layer_0/angular_velocity = 0.0 +15:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:2/0/physics_layer_1/angular_velocity = 0.0 +16:2/0 = 0 +16:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:2/0/physics_layer_0/angular_velocity = 0.0 +16:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:2/0/physics_layer_1/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 +8:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +8:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:3/0/physics_layer_1/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 +9:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +9:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:3/0/physics_layer_1/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) +10:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:3/0/physics_layer_1/angular_velocity = 0.0 +11:3/0 = 0 +11:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:3/0/physics_layer_0/angular_velocity = 0.0 +11:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:3/0/physics_layer_1/angular_velocity = 0.0 +12:3/0 = 0 +12:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:3/0/physics_layer_0/angular_velocity = 0.0 +12:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:3/0/physics_layer_1/angular_velocity = 0.0 +13:3/0 = 0 +13:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:3/0/physics_layer_0/angular_velocity = 0.0 +13:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +13:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:3/0/physics_layer_1/angular_velocity = 0.0 +14:3/0 = 0 +14:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:3/0/physics_layer_0/angular_velocity = 0.0 +14:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:3/0/physics_layer_1/angular_velocity = 0.0 +15:3/0 = 0 +15:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:3/0/physics_layer_0/angular_velocity = 0.0 +15:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:3/0/physics_layer_1/angular_velocity = 0.0 +16:3/0 = 0 +16:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:3/0/physics_layer_0/angular_velocity = 0.0 +16:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:3/0/physics_layer_1/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 +8:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:4/0/physics_layer_1/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 +9:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:4/0/physics_layer_1/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_1/linear_velocity = Vector2(0, 0) +10:4/0/physics_layer_1/angular_velocity = 0.0 +11:4/0 = 0 +11:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:4/0/physics_layer_0/angular_velocity = 0.0 +11:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-7, 2.5, -5, -2, -2.5, -5, 2, -7, 8, -8, 8, 8, -8, 8) +11:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:4/0/physics_layer_1/angular_velocity = 0.0 +12:4/0 = 0 +12:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:4/0/physics_layer_0/angular_velocity = 0.0 +12:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:4/0/physics_layer_1/angular_velocity = 0.0 +13:4/0 = 0 +13:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:4/0/physics_layer_0/angular_velocity = 0.0 +13:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 0, -6, 4, -1.5, 6.5, 1.5, 8, 8, -8, 8) +13:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:4/0/physics_layer_1/angular_velocity = 0.0 +14:4/0 = 0 +14:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:4/0/physics_layer_0/angular_velocity = 0.0 +14:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:4/0/physics_layer_1/angular_velocity = 0.0 +14:4/0/physics_layer_1/polygon_0/points = PackedVector2Array(-8, -8, -8, 8, 8, 8, 8, -8) +14:4/0/custom_data_0 = &"Inventory" +15:4/0 = 0 +15:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:4/0/physics_layer_0/angular_velocity = 0.0 +15:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:4/0/physics_layer_1/angular_velocity = 0.0 +16:4/0 = 0 +16:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:4/0/physics_layer_0/angular_velocity = 0.0 +16:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:4/0/physics_layer_1/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 +8:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:5/0/physics_layer_1/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 +9:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:5/0/physics_layer_1/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_1/linear_velocity = Vector2(0, 0) +10:5/0/physics_layer_1/angular_velocity = 0.0 +11:5/0 = 0 +11:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:5/0/physics_layer_0/angular_velocity = 0.0 +11:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +11:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:5/0/physics_layer_1/angular_velocity = 0.0 +12:5/0 = 0 +12:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:5/0/physics_layer_0/angular_velocity = 0.0 +12:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:5/0/physics_layer_1/angular_velocity = 0.0 +13:5/0 = 0 +13:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:5/0/physics_layer_0/angular_velocity = 0.0 +13:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +13:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:5/0/physics_layer_1/angular_velocity = 0.0 +14:5/0 = 0 +14:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:5/0/physics_layer_0/angular_velocity = 0.0 +14:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:5/0/physics_layer_1/angular_velocity = 0.0 +15:5/0 = 0 +15:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:5/0/physics_layer_0/angular_velocity = 0.0 +15:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:5/0/physics_layer_1/angular_velocity = 0.0 +16:5/0 = 0 +16:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:5/0/physics_layer_0/angular_velocity = 0.0 +16:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:5/0/physics_layer_1/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 +8:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:6/0/physics_layer_1/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 +9:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:6/0/physics_layer_1/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_1/linear_velocity = Vector2(0, 0) +10:6/0/physics_layer_1/angular_velocity = 0.0 +11:6/0 = 0 +11:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:6/0/physics_layer_0/angular_velocity = 0.0 +11:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, 1, 6.5, -3, 3, -6.5, -1.5) +11:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:6/0/physics_layer_1/angular_velocity = 0.0 +12:6/0 = 0 +12:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:6/0/physics_layer_0/angular_velocity = 0.0 +12:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:6/0/physics_layer_1/angular_velocity = 0.0 +13:6/0 = 0 +13:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:6/0/physics_layer_0/angular_velocity = 0.0 +13:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 6, -0.5, 3, 3.5, -1.5, 6.5, -8, 8) +13:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:6/0/physics_layer_1/angular_velocity = 0.0 +14:6/0 = 0 +14:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:6/0/physics_layer_0/angular_velocity = 0.0 +14:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:6/0/physics_layer_1/angular_velocity = 0.0 +15:6/0 = 0 +15:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:6/0/physics_layer_0/angular_velocity = 0.0 +15:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:6/0/physics_layer_1/angular_velocity = 0.0 +16:6/0 = 0 +16:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:6/0/physics_layer_0/angular_velocity = 0.0 +16:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:6/0/physics_layer_1/angular_velocity = 0.0 + +[sub_resource type="TileSet" id="TileSet_kf7eg"] +physics_layer_0/collision_layer = 1 +physics_layer_1/collision_layer = 2 +physics_layer_1/collision_mask = 2 +custom_data_layer_0/name = "Type" +custom_data_layer_0/type = 21 +sources/0 = SubResource("TileSetAtlasSource_easgx") + +[sub_resource type="Resource" id="Resource_spy00"] +script = ExtResource("9_wk0p3") +duration = 0.3 +transition = 4 +ease = 2 + +[node name="ExampleScene2D" type="Node2D"] + +[node name="Background" type="CanvasLayer" parent="."] +layer = -3 + +[node name="ColorRect" type="ColorRect" parent="Background"] +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_left = -311.0 +offset_top = -173.0 +offset_right = 981.0 +offset_bottom = 548.0 +grow_horizontal = 2 +grow_vertical = 2 +auto_translate = false +localize_numeral_system = false +color = Color(0.137255, 0.14902, 0.196078, 1) + +[node name="TileMap" type="TileMap" parent="."] +z_index = -1 +scale = Vector2(3, 3) +tile_set = SubResource("TileSet_kf7eg") +format = 2 +layer_0/name = "Background" +layer_0/tile_data = PackedInt32Array(-393216, 655360, 2, -327680, 655360, 3, -262144, 655360, 3, -196608, 655360, 3, -131072, 655360, 3, -65536, 655360, 3, -393215, 720896, 2, -327679, 720896, 1, -262143, 720896, 1, -196607, 720896, 1, -131071, 720896, 1, -65535, 720896, 1, -393214, 786432, 2, -327678, 786432, 3, -262142, 786432, 3, -196606, 786432, 3, -131070, 786432, 3, -65534, 786432, 3) +layer_1/name = "Terrain" +layer_1/z_index = 1 +layer_1/tile_data = PackedInt32Array(1, 720896, 0, 2, 720896, 0, 3, 720896, 0, 4, 720896, 0, 5, 720896, 0, 6, 720896, 0, 7, 720896, 0, 8, 720896, 0, 9, 786432, 0, 65545, 786432, 1, 131081, 786432, 1, 196617, 786432, 1, 262153, 786432, 1, 327689, 786432, 1, 393225, 786432, 1, 65537, 720896, 1, 131073, 720896, 1, 196609, 720896, 1, 262145, 458752, 1, 327681, 720896, 1, 393217, 720896, 1, 65538, 720896, 1, 131074, 720896, 1, 196610, 720896, 1, 262146, 720896, 1, 327682, 720896, 1, 393218, 720896, 1, 65539, 720896, 1, 131075, 720896, 1, 196611, 720896, 1, 262147, 720896, 1, 327683, 720896, 1, 393219, 720896, 1, 65540, 458752, 1, 131076, 720896, 1, 196612, 720896, 1, 262148, 720896, 1, 327684, 720896, 1, 393220, 720896, 1, 65541, 720896, 1, 131077, 720896, 1, 196613, 720896, 1, 262149, 458752, 1, 327685, 720896, 1, 393221, 720896, 1, 65542, 720896, 1, 131078, 720896, 1, 196614, 720896, 1, 262150, 720896, 1, 327686, 720896, 1, 393222, 720896, 1, 65543, 720896, 1, 131079, 720896, 1, 196615, 720896, 1, 262151, 720896, 1, 327687, 720896, 1, 393223, 458752, 1, 65544, 720896, 1, 131080, 720896, 1, 196616, 458752, 1, 262152, 720896, 1, 327688, 720896, 1, 393224, 720896, 1, 65546, 524288, 5, 65547, 524288, 5, 65548, 524288, 5, 65549, 524288, 5, 131082, 524288, 6, 131083, 524288, 6, 131084, 524288, 6, 131085, 524288, 6, 196618, 720896, 1, 262154, 720896, 1, 196619, 720896, 1, 262155, 720896, 1, 196620, 720896, 1, 262156, 720896, 1, 196621, 720896, 1, 262157, 720896, 1, 65550, 524288, 5, 65551, 524288, 5, 65552, 524288, 5, 131086, 524288, 6, 131087, 524288, 6, 131088, 524288, 6, 196622, 720896, 1, 196623, 720896, 1, 262159, 720896, 1, 262160, 720896, 1, 196624, 720896, 1, 262158, 720896, 1, 17, 720896, 4, 65553, 720896, 5, 131089, 720896, 5, 196625, 720896, 5, 262161, 720896, 5, 18, 786432, 4, 19, 786432, 4, 20, 786432, 4, 21, 786432, 4, 22, 786432, 4, 23, 786432, 4, 65554, 786432, 5, 131090, 786432, 5, 196626, 786432, 5, 262162, 786432, 5, 65555, 786432, 5, 131091, 589824, 6, 196627, 786432, 5, 262163, 786432, 5, 65556, 786432, 5, 131092, 786432, 5, 196628, 786432, 5, 262164, 786432, 5, 65557, 786432, 5, 131093, 786432, 5, 196629, 786432, 5, 262165, 786432, 5, 65558, 786432, 5, 131094, 786432, 5, 196630, 786432, 5, 262166, 655360, 6, 65559, 786432, 5, 131095, 786432, 5, 196631, 786432, 5, 262167, 786432, 5, 327697, 720896, 5, 393233, 720896, 5, 327698, 589824, 6, 393234, 786432, 5, 327699, 786432, 5, 393235, 786432, 5, 327700, 786432, 5, 393236, 786432, 5, 327701, 786432, 5, 393237, 786432, 5, 327702, 786432, 5, 393238, 786432, 5, 327703, 786432, 5, 393239, 786432, 5, -131062, 720896, 4, -131061, 786432, 4, -131060, 786432, 4, -65526, 720896, 6, -65525, 786432, 6, -65524, 786432, 6, -131056, 851968, 4, -65520, 851968, 6, -131059, 786432, 4, -131058, 786432, 4, -131057, 786432, 4, -65523, 786432, 6, -65522, 786432, 6, -65521, 786432, 6, -196596, 917504, 0, -65536, 917504, 2, -65535, 983040, 2, -65534, 1048576, 2, -65533, 917504, 2, -65532, 983040, 2, -65531, 1048576, 2, -65530, 917504, 2, -65529, 983040, 2, -65528, 1048576, 2, 65535, 655360, 0, 131071, 655360, 1, 196607, 655360, 1, 262143, 655360, 1, 327679, 655360, 1, 393215, 655360, 1, 458751, 655360, 1, 524287, 655360, 1, 589823, 655360, 1, 0, 720896, 0, 65536, 720896, 1, 131072, 720896, 1, 196608, 720896, 1, 262144, 720896, 1, 327680, 720896, 1, 393216, 720896, 1, 458752, 720896, 1, 524288, 720896, 1, 524289, 720896, 1, 524290, 720896, 1, 524291, 720896, 1, 524292, 720896, 1, 524293, 720896, 1, 524294, 720896, 1, 524295, 720896, 1, 524296, 720896, 1, 524297, 786432, 1, 458761, 786432, 1, 458760, 720896, 1, 458759, 720896, 1, 458758, 458752, 1, 458757, 720896, 1, 458756, 720896, 1, 458755, 720896, 1, 458754, 720896, 1, 458753, 720896, 1, -262145, 851968, 4, -196609, 851968, 5, -131073, 851968, 5, -65537, 851968, 5, -1, 851968, 6, -262146, 786432, 4, -262147, 786432, 4, -196610, 589824, 6, -196611, 786432, 5, -6, 786432, 5, -5, 786432, 5, -4, 786432, 5, -3, 786432, 5, -2, 786432, 5, -65538, 786432, 5, -131074, 786432, 5, -131075, 786432, 5, -65539, 655360, 6, 65534, 851968, 5, 131070, 851968, 5, 196606, 851968, 5, 262142, 851968, 5, 327678, 851968, 5, 393214, 851968, 5, 458750, 851968, 5, 65533, 786432, 5, 65532, 786432, 5, 65531, 786432, 5, 65530, 786432, 5, 65529, 720896, 5, 131066, 786432, 5, 196602, 786432, 5, 262138, 786432, 5, 262139, 786432, 5, 327675, 786432, 5, 131068, 786432, 5, 131069, 786432, 5, 196605, 786432, 5, 262141, 786432, 5, 327677, 786432, 5, 393213, 786432, 5, 458749, 786432, 5, 393212, 786432, 5, 393211, 786432, 5, 458748, 786432, 5, 327676, 655360, 6, 262140, 786432, 5, 196604, 786432, 5, 131067, 786432, 5, 196603, 589824, 6, 458747, 786432, 5, 458746, 786432, 5, 393210, 786432, 5, 327674, 786432, 5, -7, 720896, 5, 131065, 720896, 5, 196601, 720896, 5, 262137, 720896, 5, 327673, 720896, 5, 393209, 720896, 5, 458745, 720896, 5, -327684, 720896, 3, -196594, 720896, 3, -196597, 720896, 3, -65518, 720896, 3, -65516, 720896, 3, -327686, 1048576, 5, -327685, 720896, 3, -196595, 917504, 6, -65514, 983040, 6, -327683, 983040, 5, -65513, 1048576, 5, -262151, 720896, 4, -196615, 720896, 5, -131079, 720896, 5, -65543, 720896, 5, -262150, 786432, 4, -196614, 655360, 6, -131078, 786432, 5, -65542, 786432, 5, -262149, 786432, 4, -196613, 786432, 5, -131077, 786432, 5, -65541, 786432, 5, -262148, 786432, 4, -196612, 786432, 5, -131076, 786432, 5, -65540, 786432, 5, 458769, 720896, 5, 524305, 720896, 6, 458775, 786432, 5, 458774, 786432, 5, 458773, 786432, 5, 458772, 786432, 5, 458771, 786432, 5, 458770, 786432, 5, 524306, 786432, 6, 524307, 786432, 6, 524308, 786432, 6, 524309, 786432, 6, 524310, 786432, 6, 524311, 786432, 6, 327690, 720896, 1, 393226, 720896, 1, 458762, 720896, 1, 524298, 720896, 1, 327691, 720896, 1, 393227, 720896, 1, 458763, 720896, 1, 524299, 720896, 1, 327692, 720896, 1, 393228, 720896, 1, 458764, 720896, 1, 524300, 720896, 1, 327693, 720896, 1, 393229, 720896, 1, 458765, 720896, 1, 524301, 720896, 1, 327694, 720896, 1, 393230, 720896, 1, 458766, 720896, 1, 524302, 720896, 1, 327695, 720896, 1, 393231, 720896, 1, 458767, 720896, 1, 524303, 720896, 1, 327696, 720896, 1, 393232, 720896, 1, 458768, 720896, 1, 524304, 720896, 1, 29, 851968, 4, 65565, 851968, 5, 131101, 851968, 5, 196637, 851968, 5, 262173, 851968, 5, 327709, 851968, 5, 393245, 851968, 5, 458781, 851968, 5, 524317, 851968, 6, -65511, 917504, 4, 24, 786432, 4, 25, 786432, 4, 26, 786432, 4, 27, 786432, 4, 28, 786432, 4, 65560, 786432, 5, 65561, 786432, 5, 65562, 786432, 5, 65563, 786432, 5, 65564, 786432, 5, 131100, 786432, 5, 196636, 589824, 6, 131099, 786432, 5, 131098, 786432, 5, 131097, 786432, 5, 131096, 786432, 5, 196632, 786432, 5, 262168, 786432, 5, 327704, 786432, 5, 393240, 786432, 5, 458776, 786432, 5, 524312, 786432, 6, 196633, 786432, 5, 262169, 786432, 5, 327705, 786432, 5, 393241, 786432, 5, 458777, 786432, 5, 524313, 786432, 6, 196634, 786432, 5, 262170, 786432, 5, 327706, 786432, 5, 393242, 655360, 6, 458778, 786432, 5, 524314, 786432, 6, 196635, 786432, 5, 262171, 786432, 5, 327707, 786432, 5, 393243, 786432, 5, 458779, 786432, 5, 524315, 786432, 6, 262172, 786432, 5, 327708, 786432, 5, 393244, 786432, 5, 458780, 786432, 5, 524316, 786432, 6, -196593, 1048576, 6, -393182, 1048576, 6, -393185, 917504, 6, -393180, 983040, 6, -393184, 983040, 5, -65509, 720896, 3, -65510, 720896, 3, -393181, 720896, 3, -393183, 720896, 3, -65517, 720896, 3, -65515, 720896, 3, -327650, 720896, 4, -262114, 720896, 5, -196578, 720896, 5, -131042, 720896, 5, -65506, 720896, 5, -65498, 851968, 5, -131034, 851968, 5, -196570, 851968, 5, -327642, 851968, 4, -327649, 786432, 4, -327648, 786432, 4, -327647, 786432, 4, -327646, 786432, 4, -327645, 786432, 4, -327644, 786432, 4, -327643, 786432, 4, -262106, 851968, 5, -65499, 786432, 5, -131035, 786432, 5, -196571, 786432, 5, -262107, 786432, 5, -262108, 786432, 5, -262109, 786432, 5, -262110, 786432, 5, -262111, 786432, 5, -262112, 786432, 5, -262113, 786432, 5, -196577, 655360, 6, -131041, 786432, 5, -65505, 786432, 5, -65500, 655360, 6, -131036, 589824, 6, -196572, 786432, 5, -196573, 786432, 5, -196574, 786432, 5, -196575, 786432, 5, -196576, 786432, 5, -131040, 589824, 6, -65504, 786432, 5, -65501, 786432, 5, -131037, 786432, 5, -131038, 786432, 5, -131039, 786432, 5, -65503, 786432, 5, -65502, 786432, 5, 524318, 720896, 6, 458782, 720896, 5, 393246, 720896, 5, 327710, 720896, 5, 262174, 720896, 5, 196638, 720896, 5, 131102, 720896, 5, 65566, 720896, 5, 30, 720896, 5, 524319, 786432, 6, 524320, 786432, 6, 524321, 786432, 6, 524322, 786432, 6, 524323, 786432, 6, 524324, 786432, 6, 524325, 786432, 6, 524326, 851968, 6, 38, 851968, 5, 65574, 851968, 5, 131110, 851968, 5, 196646, 851968, 5, 262182, 851968, 5, 327718, 851968, 5, 393254, 851968, 5, 458790, 851968, 5, 31, 786432, 5, 65567, 786432, 5, 131103, 786432, 5, 196639, 786432, 5, 262175, 786432, 5, 327711, 786432, 5, 393247, 655360, 6, 458783, 786432, 5, 32, 786432, 5, 65568, 786432, 5, 131104, 786432, 5, 196640, 786432, 5, 262176, 786432, 5, 327712, 786432, 5, 393248, 786432, 5, 458784, 786432, 5, 33, 786432, 5, 65569, 786432, 5, 131105, 655360, 6, 196641, 786432, 5, 262177, 786432, 5, 327713, 786432, 5, 393249, 786432, 5, 458785, 786432, 5, 34, 786432, 5, 65570, 786432, 5, 131106, 786432, 5, 196642, 786432, 5, 262178, 655360, 6, 327714, 655360, 6, 393250, 786432, 5, 458786, 786432, 5, 35, 786432, 5, 65571, 786432, 5, 131107, 786432, 5, 196643, 786432, 5, 262179, 786432, 5, 327715, 786432, 5, 393251, 786432, 5, 458787, 786432, 5, 36, 655360, 6, 65572, 786432, 5, 131108, 786432, 5, 196644, 786432, 5, 262180, 786432, 5, 327716, 786432, 5, 393252, 786432, 5, 458788, 655360, 6, 37, 786432, 5, 65573, 786432, 5, 131109, 786432, 5, 196645, 786432, 5, 262181, 786432, 5, 327717, 786432, 5, 393253, 786432, 5, 458789, 786432, 5) + +[node name="UI" type="CanvasLayer" parent="."] + +[node name="UIInventory" parent="UI" instance=ExtResource("2_xmntp")] +unique_name_in_owner = true +visible = false + +[node name="UISign" parent="UI" instance=ExtResource("3_8dojy")] +unique_name_in_owner = true +visible = false + +[node name="Camera2D" type="Camera2D" parent="."] +position = Vector2(107, -172.5) +position_smoothing_speed = 8.0 + +[node name="PhantomCameraHost" type="Node" parent="Camera2D"] +script = ExtResource("4_2efwt") + +[node name="Label" type="Label" parent="."] +offset_left = 167.0 +offset_top = -133.0 +offset_right = 332.0 +offset_bottom = -69.0 +theme_override_colors/font_color = Color(0.294118, 1, 0.631373, 1) +theme_override_fonts/font = ExtResource("12_uvcwb") +text = "[WASD] to move +[Space] to jump" + +[node name="PhantomCamera2D" type="Node2D" parent="." node_paths=PackedStringArray("follow_targets")] +position = Vector2(107, -172.5) +script = ExtResource("6_diuy4") +priority = 10 +follow_mode = 3 +follow_targets = [NodePath("../GroupNPCSprite"), NodePath("../CharacterBody2D/PlayerVisuals")] +tween_resource = SubResource("Resource_spy00") +tween_on_load = false +follow_damping = true +auto_zoom = true +auto_zoom_margin = Vector4(200, 0, 200, 0) +draw_limits = true + +[node name="GroupNPCSprite" type="Sprite2D" parent="."] +unique_name_in_owner = true +position = Vector2(107, -316) +texture = ExtResource("5_0v2cd") + +[node name="CharacterBody2D" parent="." instance=ExtResource("7_ybwrw")] +position = Vector2(265, -29) + +[editable path="CharacterBody2D"] diff --git a/addons/phantom_camera/examples/example_scenes/2D/2d_follow_path_example_scene.tscn b/addons/phantom_camera/examples/example_scenes/2D/2d_follow_path_example_scene.tscn new file mode 100644 index 0000000..9fb9454 --- /dev/null +++ b/addons/phantom_camera/examples/example_scenes/2D/2d_follow_path_example_scene.tscn @@ -0,0 +1,659 @@ +[gd_scene load_steps=12 format=3 uid="uid://psbaaxnedqmq"] + +[ext_resource type="Texture2D" uid="uid://c77npili4pel4" path="res://addons/phantom_camera/examples/textures/2D/level_spritesheet.png" id="1_17ngo"] +[ext_resource type="PackedScene" uid="uid://dg7rhrymsrrrm" path="res://addons/phantom_camera/examples/ui/ui_inventory.tscn" id="2_whpvu"] +[ext_resource type="PackedScene" uid="uid://iq5xd1ob1res" path="res://addons/phantom_camera/examples/ui/ui_sign.tscn" id="3_rbo5b"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/phantom_camera_host/phantom_camera_host.gd" id="4_yddet"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/phantom_camera/phantom_camera_2d.gd" id="5_x25dj"] +[ext_resource type="Resource" uid="uid://euybd2w0bax" path="res://addons/phantom_camera/examples/resources/tween/player_phantom_camera_2d_tween.tres" id="6_4vtmp"] +[ext_resource type="FontFile" uid="uid://c4mm3of2mc8o5" path="res://addons/phantom_camera/fonts/Nunito-Black.ttf" id="8_6pcaf"] +[ext_resource type="PackedScene" uid="uid://7kh0xydx0b1o" path="res://addons/phantom_camera/examples/example_scenes/2D/sub_scenes/playable_character_2d.tscn" id="8_a2pel"] + +[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_easgx"] +texture = ExtResource("1_17ngo") +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_1/linear_velocity = Vector2(0, 0) +0:0/0/physics_layer_1/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 +1:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +1:0/0/physics_layer_1/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 +2:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +2:0/0/physics_layer_1/angular_velocity = 0.0 +3:0/0 = 0 +3:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:0/0/physics_layer_0/angular_velocity = 0.0 +3:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:0/0/physics_layer_1/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 +4:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:0/0/physics_layer_1/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 +5:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +5:0/0/physics_layer_1/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 +6:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +6:0/0/physics_layer_1/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 +7:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +7:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:0/0/physics_layer_1/angular_velocity = 0.0 +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_1/linear_velocity = Vector2(0, 0) +0:1/0/physics_layer_1/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 +1:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +1:1/0/physics_layer_1/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_1/linear_velocity = Vector2(0, 0) +2:1/0/physics_layer_1/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 +3:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:1/0/physics_layer_1/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 +4:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:1/0/physics_layer_1/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 +5:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +5:1/0/physics_layer_1/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 +7:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +7:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:1/0/physics_layer_1/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 +2:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +2:2/0/physics_layer_1/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 +3:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:2/0/physics_layer_1/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 +4:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:2/0/physics_layer_1/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 +7:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +7:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:2/0/physics_layer_1/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 +3:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:3/0/physics_layer_1/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 +4:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:3/0/physics_layer_1/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 +5:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +5:3/0/physics_layer_1/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 +7:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +7:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:3/0/physics_layer_1/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 +3:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:4/0/physics_layer_1/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 +4:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:4/0/physics_layer_1/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 +5:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +5:4/0/physics_layer_1/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 +7:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:4/0/physics_layer_1/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 +3:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:5/0/physics_layer_1/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 +4:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:5/0/physics_layer_1/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 +7:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:5/0/physics_layer_1/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 +3:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:6/0/physics_layer_1/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 +4:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:6/0/physics_layer_1/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 +7:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:6/0/physics_layer_1/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 +2:7/0/physics_layer_1/linear_velocity = Vector2(0, 0) +2:7/0/physics_layer_1/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 +3:7/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:7/0/physics_layer_1/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 +4:7/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:7/0/physics_layer_1/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 +5:7/0/physics_layer_1/linear_velocity = Vector2(0, 0) +5:7/0/physics_layer_1/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 +8:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +8:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:0/0/physics_layer_1/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 +9:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +9:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:0/0/physics_layer_1/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) +10:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:0/0/physics_layer_1/angular_velocity = 0.0 +11:0/0 = 0 +11:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:0/0/physics_layer_0/angular_velocity = 0.0 +11:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +11:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:0/0/physics_layer_1/angular_velocity = 0.0 +12:0/0 = 0 +12:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:0/0/physics_layer_0/angular_velocity = 0.0 +12:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:0/0/physics_layer_1/angular_velocity = 0.0 +13:0/0 = 0 +13:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:0/0/physics_layer_0/angular_velocity = 0.0 +13:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +13:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:0/0/physics_layer_1/angular_velocity = 0.0 +14:0/0 = 0 +14:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:0/0/physics_layer_0/angular_velocity = 0.0 +14:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:0/0/physics_layer_1/angular_velocity = 0.0 +14:0/0/physics_layer_1/polygon_0/points = PackedVector2Array(8, -8, 8, 8, -8, 8) +14:0/0/custom_data_0 = &"Sign" +15:0/0 = 0 +15:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:0/0/physics_layer_0/angular_velocity = 0.0 +15:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:0/0/physics_layer_1/angular_velocity = 0.0 +16:0/0 = 0 +16:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:0/0/physics_layer_0/angular_velocity = 0.0 +16:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:0/0/physics_layer_1/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 +8:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +8:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:1/0/physics_layer_1/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 +9:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +9:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:1/0/physics_layer_1/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) +10:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:1/0/physics_layer_1/angular_velocity = 0.0 +11:1/0 = 0 +11:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:1/0/physics_layer_0/angular_velocity = 0.0 +11:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +11:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:1/0/physics_layer_1/angular_velocity = 0.0 +12:1/0 = 0 +12:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:1/0/physics_layer_0/angular_velocity = 0.0 +12:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:1/0/physics_layer_1/angular_velocity = 0.0 +13:1/0 = 0 +13:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:1/0/physics_layer_0/angular_velocity = 0.0 +13:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +13:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:1/0/physics_layer_1/angular_velocity = 0.0 +14:1/0 = 0 +14:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:1/0/physics_layer_0/angular_velocity = 0.0 +14:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:1/0/physics_layer_1/angular_velocity = 0.0 +15:1/0 = 0 +15:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:1/0/physics_layer_0/angular_velocity = 0.0 +15:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:1/0/physics_layer_1/angular_velocity = 0.0 +16:1/0 = 0 +16:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:1/0/physics_layer_0/angular_velocity = 0.0 +16:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:1/0/physics_layer_1/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 +8:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +8:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:2/0/physics_layer_1/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 +9:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +9:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:2/0/physics_layer_1/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) +10:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:2/0/physics_layer_1/angular_velocity = 0.0 +11:2/0 = 0 +11:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:2/0/physics_layer_0/angular_velocity = 0.0 +11:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +11:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:2/0/physics_layer_1/angular_velocity = 0.0 +12:2/0 = 0 +12:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:2/0/physics_layer_0/angular_velocity = 0.0 +12:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:2/0/physics_layer_1/angular_velocity = 0.0 +13:2/0 = 0 +13:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:2/0/physics_layer_0/angular_velocity = 0.0 +13:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +13:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:2/0/physics_layer_1/angular_velocity = 0.0 +14:2/0 = 0 +14:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:2/0/physics_layer_0/angular_velocity = 0.0 +14:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:2/0/physics_layer_1/angular_velocity = 0.0 +15:2/0 = 0 +15:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:2/0/physics_layer_0/angular_velocity = 0.0 +15:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:2/0/physics_layer_1/angular_velocity = 0.0 +16:2/0 = 0 +16:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:2/0/physics_layer_0/angular_velocity = 0.0 +16:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:2/0/physics_layer_1/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 +8:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +8:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:3/0/physics_layer_1/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 +9:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +9:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:3/0/physics_layer_1/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) +10:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:3/0/physics_layer_1/angular_velocity = 0.0 +11:3/0 = 0 +11:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:3/0/physics_layer_0/angular_velocity = 0.0 +11:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:3/0/physics_layer_1/angular_velocity = 0.0 +12:3/0 = 0 +12:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:3/0/physics_layer_0/angular_velocity = 0.0 +12:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:3/0/physics_layer_1/angular_velocity = 0.0 +13:3/0 = 0 +13:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:3/0/physics_layer_0/angular_velocity = 0.0 +13:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +13:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:3/0/physics_layer_1/angular_velocity = 0.0 +14:3/0 = 0 +14:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:3/0/physics_layer_0/angular_velocity = 0.0 +14:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:3/0/physics_layer_1/angular_velocity = 0.0 +15:3/0 = 0 +15:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:3/0/physics_layer_0/angular_velocity = 0.0 +15:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:3/0/physics_layer_1/angular_velocity = 0.0 +16:3/0 = 0 +16:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:3/0/physics_layer_0/angular_velocity = 0.0 +16:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:3/0/physics_layer_1/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 +8:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:4/0/physics_layer_1/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 +9:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:4/0/physics_layer_1/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_1/linear_velocity = Vector2(0, 0) +10:4/0/physics_layer_1/angular_velocity = 0.0 +11:4/0 = 0 +11:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:4/0/physics_layer_0/angular_velocity = 0.0 +11:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-7, 2.5, -5, -2, -2.5, -5, 2, -7, 8, -8, 8, 8, -8, 8) +11:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:4/0/physics_layer_1/angular_velocity = 0.0 +12:4/0 = 0 +12:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:4/0/physics_layer_0/angular_velocity = 0.0 +12:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:4/0/physics_layer_1/angular_velocity = 0.0 +13:4/0 = 0 +13:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:4/0/physics_layer_0/angular_velocity = 0.0 +13:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 0, -6, 4, -1.5, 6.5, 1.5, 8, 8, -8, 8) +13:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:4/0/physics_layer_1/angular_velocity = 0.0 +14:4/0 = 0 +14:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:4/0/physics_layer_0/angular_velocity = 0.0 +14:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:4/0/physics_layer_1/angular_velocity = 0.0 +14:4/0/physics_layer_1/polygon_0/points = PackedVector2Array(-8, -8, -8, 8, 8, 8, 8, -8) +14:4/0/custom_data_0 = &"Inventory" +15:4/0 = 0 +15:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:4/0/physics_layer_0/angular_velocity = 0.0 +15:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:4/0/physics_layer_1/angular_velocity = 0.0 +16:4/0 = 0 +16:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:4/0/physics_layer_0/angular_velocity = 0.0 +16:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:4/0/physics_layer_1/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 +8:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:5/0/physics_layer_1/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 +9:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:5/0/physics_layer_1/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_1/linear_velocity = Vector2(0, 0) +10:5/0/physics_layer_1/angular_velocity = 0.0 +11:5/0 = 0 +11:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:5/0/physics_layer_0/angular_velocity = 0.0 +11:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +11:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:5/0/physics_layer_1/angular_velocity = 0.0 +12:5/0 = 0 +12:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:5/0/physics_layer_0/angular_velocity = 0.0 +12:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:5/0/physics_layer_1/angular_velocity = 0.0 +13:5/0 = 0 +13:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:5/0/physics_layer_0/angular_velocity = 0.0 +13:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +13:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:5/0/physics_layer_1/angular_velocity = 0.0 +14:5/0 = 0 +14:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:5/0/physics_layer_0/angular_velocity = 0.0 +14:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:5/0/physics_layer_1/angular_velocity = 0.0 +15:5/0 = 0 +15:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:5/0/physics_layer_0/angular_velocity = 0.0 +15:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:5/0/physics_layer_1/angular_velocity = 0.0 +16:5/0 = 0 +16:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:5/0/physics_layer_0/angular_velocity = 0.0 +16:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:5/0/physics_layer_1/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 +8:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:6/0/physics_layer_1/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 +9:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:6/0/physics_layer_1/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_1/linear_velocity = Vector2(0, 0) +10:6/0/physics_layer_1/angular_velocity = 0.0 +11:6/0 = 0 +11:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:6/0/physics_layer_0/angular_velocity = 0.0 +11:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, 1, 6.5, -3, 3, -6.5, -1.5) +11:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:6/0/physics_layer_1/angular_velocity = 0.0 +12:6/0 = 0 +12:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:6/0/physics_layer_0/angular_velocity = 0.0 +12:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:6/0/physics_layer_1/angular_velocity = 0.0 +13:6/0 = 0 +13:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:6/0/physics_layer_0/angular_velocity = 0.0 +13:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 6, -0.5, 3, 3.5, -1.5, 6.5, -8, 8) +13:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:6/0/physics_layer_1/angular_velocity = 0.0 +14:6/0 = 0 +14:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:6/0/physics_layer_0/angular_velocity = 0.0 +14:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:6/0/physics_layer_1/angular_velocity = 0.0 +15:6/0 = 0 +15:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:6/0/physics_layer_0/angular_velocity = 0.0 +15:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:6/0/physics_layer_1/angular_velocity = 0.0 +16:6/0 = 0 +16:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:6/0/physics_layer_0/angular_velocity = 0.0 +16:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:6/0/physics_layer_1/angular_velocity = 0.0 + +[sub_resource type="TileSet" id="TileSet_kf7eg"] +physics_layer_0/collision_layer = 1 +physics_layer_1/collision_layer = 2 +physics_layer_1/collision_mask = 2 +custom_data_layer_0/name = "Type" +custom_data_layer_0/type = 21 +sources/0 = SubResource("TileSetAtlasSource_easgx") + +[sub_resource type="Curve2D" id="Curve2D_usrhf"] +_data = { +"points": PackedVector2Array(-96.4111, 42.3785, 0, 0, 222, 0, 0, 0, 0, 0, 1550, 0) +} +point_count = 2 + +[node name="ExampleScene2D" type="Node2D"] + +[node name="Background" type="CanvasLayer" parent="."] +layer = -3 + +[node name="ColorRect" type="ColorRect" parent="Background"] +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_left = -311.0 +offset_top = -173.0 +offset_right = 981.0 +offset_bottom = 548.0 +grow_horizontal = 2 +grow_vertical = 2 +auto_translate = false +localize_numeral_system = false +color = Color(0.137255, 0.14902, 0.196078, 1) + +[node name="TileMap" type="TileMap" parent="."] +z_index = -1 +scale = Vector2(3, 3) +tile_set = SubResource("TileSet_kf7eg") +format = 2 +layer_0/name = "Background" +layer_0/tile_data = PackedInt32Array(-393216, 655360, 2, -327680, 655360, 3, -262144, 655360, 3, -196608, 655360, 3, -131072, 655360, 3, -65536, 655360, 3, -393215, 720896, 2, -327679, 720896, 1, -262143, 720896, 1, -196607, 720896, 1, -131071, 720896, 1, -65535, 720896, 1, -393214, 786432, 2, -327678, 786432, 3, -262142, 786432, 3, -196606, 786432, 3, -131070, 786432, 3, -65534, 786432, 3) +layer_1/name = "Terrain" +layer_1/z_index = 1 +layer_1/tile_data = PackedInt32Array(1, 720896, 0, 2, 720896, 0, 3, 720896, 0, 4, 720896, 0, 5, 720896, 0, 6, 720896, 0, 7, 720896, 0, 8, 720896, 0, 9, 786432, 0, 65545, 786432, 1, 131081, 786432, 1, 196617, 786432, 1, 262153, 786432, 1, 327689, 786432, 1, 393225, 786432, 1, 65537, 720896, 1, 131073, 720896, 1, 196609, 720896, 1, 262145, 458752, 1, 327681, 720896, 1, 393217, 720896, 1, 65538, 720896, 1, 131074, 720896, 1, 196610, 720896, 1, 262146, 720896, 1, 327682, 720896, 1, 393218, 720896, 1, 65539, 720896, 1, 131075, 720896, 1, 196611, 720896, 1, 262147, 720896, 1, 327683, 720896, 1, 393219, 720896, 1, 65540, 458752, 1, 131076, 720896, 1, 196612, 720896, 1, 262148, 720896, 1, 327684, 720896, 1, 393220, 720896, 1, 65541, 720896, 1, 131077, 720896, 1, 196613, 720896, 1, 262149, 458752, 1, 327685, 720896, 1, 393221, 720896, 1, 65542, 720896, 1, 131078, 720896, 1, 196614, 720896, 1, 262150, 720896, 1, 327686, 720896, 1, 393222, 720896, 1, 65543, 720896, 1, 131079, 720896, 1, 196615, 720896, 1, 262151, 720896, 1, 327687, 720896, 1, 393223, 458752, 1, 65544, 720896, 1, 131080, 720896, 1, 196616, 458752, 1, 262152, 720896, 1, 327688, 720896, 1, 393224, 720896, 1, 65546, 524288, 5, 65547, 524288, 5, 65548, 524288, 5, 65549, 524288, 5, 131082, 524288, 6, 131083, 524288, 6, 131084, 524288, 6, 131085, 524288, 6, 196618, 720896, 1, 262154, 720896, 1, 196619, 720896, 1, 262155, 720896, 1, 196620, 720896, 1, 262156, 720896, 1, 196621, 720896, 1, 262157, 720896, 1, 65550, 524288, 5, 65551, 524288, 5, 65552, 524288, 5, 131086, 524288, 6, 131087, 524288, 6, 131088, 524288, 6, 196622, 720896, 1, 196623, 720896, 1, 262159, 720896, 1, 262160, 720896, 1, 196624, 720896, 1, 262158, 720896, 1, 17, 720896, 4, 65553, 720896, 5, 131089, 720896, 5, 196625, 720896, 5, 262161, 720896, 5, 18, 786432, 4, 19, 786432, 4, 20, 786432, 4, 21, 786432, 4, 22, 786432, 4, 23, 786432, 4, 65554, 786432, 5, 131090, 786432, 5, 196626, 786432, 5, 262162, 786432, 5, 65555, 786432, 5, 131091, 589824, 6, 196627, 786432, 5, 262163, 786432, 5, 65556, 786432, 5, 131092, 786432, 5, 196628, 786432, 5, 262164, 786432, 5, 65557, 786432, 5, 131093, 786432, 5, 196629, 786432, 5, 262165, 786432, 5, 65558, 786432, 5, 131094, 786432, 5, 196630, 786432, 5, 262166, 655360, 6, 65559, 786432, 5, 131095, 786432, 5, 196631, 786432, 5, 262167, 786432, 5, 327697, 720896, 5, 393233, 720896, 5, 327698, 589824, 6, 393234, 786432, 5, 327699, 786432, 5, 393235, 786432, 5, 327700, 786432, 5, 393236, 786432, 5, 327701, 786432, 5, 393237, 786432, 5, 327702, 786432, 5, 393238, 786432, 5, 327703, 786432, 5, 393239, 786432, 5, -131062, 720896, 4, -131061, 786432, 4, -131060, 786432, 4, -65526, 720896, 6, -65525, 786432, 6, -65524, 786432, 6, -131056, 851968, 4, -65520, 851968, 6, -131059, 786432, 4, -131058, 786432, 4, -131057, 786432, 4, -65523, 786432, 6, -65522, 786432, 6, -65521, 786432, 6, -65536, 917504, 2, -65535, 983040, 2, -65534, 1048576, 2, -65533, 917504, 2, -65532, 983040, 2, -65531, 1048576, 2, -65530, 917504, 2, -65529, 983040, 2, -65528, 1048576, 2, 65535, 655360, 0, 131071, 655360, 1, 196607, 655360, 1, 262143, 655360, 1, 327679, 655360, 1, 393215, 655360, 1, 458751, 655360, 1, 524287, 655360, 1, 589823, 655360, 1, 0, 720896, 0, 65536, 720896, 1, 131072, 720896, 1, 196608, 720896, 1, 262144, 720896, 1, 327680, 720896, 1, 393216, 720896, 1, 458752, 720896, 1, 524288, 720896, 1, 524289, 720896, 1, 524290, 720896, 1, 524291, 720896, 1, 524292, 720896, 1, 524293, 720896, 1, 524294, 720896, 1, 524295, 720896, 1, 524296, 720896, 1, 524297, 786432, 1, 458761, 786432, 1, 458760, 720896, 1, 458759, 720896, 1, 458758, 458752, 1, 458757, 720896, 1, 458756, 720896, 1, 458755, 720896, 1, 458754, 720896, 1, 458753, 720896, 1, -262145, 851968, 4, -196609, 851968, 5, -131073, 851968, 5, -65537, 851968, 5, -1, 851968, 6, -262146, 786432, 4, -262147, 786432, 4, -196610, 589824, 6, -196611, 786432, 5, -6, 786432, 5, -5, 786432, 5, -4, 786432, 5, -3, 786432, 5, -2, 786432, 5, -65538, 786432, 5, -131074, 786432, 5, -131075, 786432, 5, -65539, 655360, 6, 65534, 851968, 5, 131070, 851968, 5, 196606, 851968, 5, 262142, 851968, 5, 327678, 851968, 5, 393214, 851968, 5, 458750, 851968, 5, 65533, 786432, 5, 65532, 786432, 5, 65531, 786432, 5, 65530, 786432, 5, 65529, 720896, 5, 131066, 786432, 5, 196602, 786432, 5, 262138, 786432, 5, 262139, 786432, 5, 327675, 786432, 5, 131068, 786432, 5, 131069, 786432, 5, 196605, 786432, 5, 262141, 786432, 5, 327677, 786432, 5, 393213, 786432, 5, 458749, 786432, 5, 393212, 786432, 5, 393211, 786432, 5, 458748, 786432, 5, 327676, 655360, 6, 262140, 786432, 5, 196604, 786432, 5, 131067, 786432, 5, 196603, 589824, 6, 458747, 786432, 5, 458746, 786432, 5, 393210, 786432, 5, 327674, 786432, 5, -7, 720896, 5, 131065, 720896, 5, 196601, 720896, 5, 262137, 720896, 5, 327673, 720896, 5, 393209, 720896, 5, 458745, 720896, 5, -327684, 720896, 3, -196594, 720896, 3, -196597, 720896, 3, -65518, 720896, 3, -65516, 720896, 3, -327686, 1048576, 5, -327685, 720896, 3, -196595, 917504, 6, -65514, 983040, 6, -327683, 983040, 5, -65513, 1048576, 5, -262151, 720896, 4, -196615, 720896, 5, -131079, 720896, 5, -65543, 720896, 5, -262150, 786432, 4, -196614, 655360, 6, -131078, 786432, 5, -65542, 786432, 5, -262149, 786432, 4, -196613, 786432, 5, -131077, 786432, 5, -65541, 786432, 5, -262148, 786432, 4, -196612, 786432, 5, -131076, 786432, 5, -65540, 786432, 5, 458769, 720896, 5, 524305, 720896, 6, 458775, 786432, 5, 458774, 786432, 5, 458773, 786432, 5, 458772, 786432, 5, 458771, 786432, 5, 458770, 786432, 5, 524306, 786432, 6, 524307, 786432, 6, 524308, 786432, 6, 524309, 786432, 6, 524310, 786432, 6, 524311, 786432, 6, 327690, 720896, 1, 393226, 720896, 1, 458762, 720896, 1, 524298, 720896, 1, 327691, 720896, 1, 393227, 720896, 1, 458763, 720896, 1, 524299, 720896, 1, 327692, 720896, 1, 393228, 720896, 1, 458764, 720896, 1, 524300, 720896, 1, 327693, 720896, 1, 393229, 720896, 1, 458765, 720896, 1, 524301, 720896, 1, 327694, 720896, 1, 393230, 720896, 1, 458766, 720896, 1, 524302, 720896, 1, 327695, 720896, 1, 393231, 720896, 1, 458767, 720896, 1, 524303, 720896, 1, 327696, 720896, 1, 393232, 720896, 1, 458768, 720896, 1, 524304, 720896, 1, 29, 851968, 4, 65565, 851968, 5, 131101, 851968, 5, 196637, 851968, 5, 262173, 851968, 5, 327709, 851968, 5, 393245, 851968, 5, 458781, 851968, 5, 524317, 851968, 6, 24, 786432, 4, 25, 786432, 4, 26, 786432, 4, 27, 786432, 4, 28, 786432, 4, 65560, 786432, 5, 65561, 786432, 5, 65562, 786432, 5, 65563, 786432, 5, 65564, 786432, 5, 131100, 786432, 5, 196636, 589824, 6, 131099, 786432, 5, 131098, 786432, 5, 131097, 786432, 5, 131096, 786432, 5, 196632, 786432, 5, 262168, 786432, 5, 327704, 786432, 5, 393240, 786432, 5, 458776, 786432, 5, 524312, 786432, 6, 196633, 786432, 5, 262169, 786432, 5, 327705, 786432, 5, 393241, 786432, 5, 458777, 786432, 5, 524313, 786432, 6, 196634, 786432, 5, 262170, 786432, 5, 327706, 786432, 5, 393242, 655360, 6, 458778, 786432, 5, 524314, 786432, 6, 196635, 786432, 5, 262171, 786432, 5, 327707, 786432, 5, 393243, 786432, 5, 458779, 786432, 5, 524315, 786432, 6, 262172, 786432, 5, 327708, 786432, 5, 393244, 786432, 5, 458780, 786432, 5, 524316, 786432, 6, -196593, 1048576, 6, -65509, 720896, 3, -65510, 720896, 3, -65517, 720896, 3, -65515, 720896, 3, 524282, 786432, 5, 524283, 786432, 5, 524284, 786432, 5, 524285, 786432, 5, 524281, 720896, 5, 524286, 851968, 5, 589817, 720896, 6, 589818, 786432, 6, 589819, 786432, 6, 589820, 786432, 6, 589821, 786432, 6, 589822, 851968, 6, -196569, 720896, 4, -131033, 720896, 5, -65497, 720896, 5, 39, 720896, 5, 65575, 720896, 5, 131111, 720896, 5, 196647, 720896, 5, 262183, 720896, 5, 327719, 720896, 5, 393255, 720896, 5, 458791, 720896, 5, 524327, 720896, 5, 589863, 720896, 5, 655399, 720896, 6, -262104, 917504, 6, -196568, 786432, 4, -131032, 786432, 5, -65496, 655360, 6, 40, 786432, 5, 65576, 786432, 5, 131112, 786432, 5, 196648, 786432, 5, 262184, 786432, 5, 327720, 786432, 5, 393256, 786432, 5, 458792, 786432, 5, 524328, 655360, 6, 589864, 786432, 5, 655400, 786432, 6, -262103, 983040, 5, -196567, 786432, 4, -131031, 786432, 5, -65495, 786432, 5, 41, 589824, 6, 65577, 786432, 5, 131113, 786432, 5, 196649, 786432, 5, 262185, 786432, 5, 327721, 786432, 5, 393257, 786432, 5, 458793, 786432, 5, 524329, 786432, 5, 589865, 786432, 5, 655401, 786432, 6, -262102, 720896, 3, -196566, 786432, 4, -131030, 786432, 5, -65494, 786432, 5, 42, 786432, 5, 65578, 786432, 5, 131114, 786432, 5, 196650, 786432, 5, 262186, 655360, 6, 327722, 786432, 5, 393258, 786432, 5, 458794, 786432, 5, 524330, 786432, 5, 589866, 786432, 5, 655402, 786432, 6, -262101, 1048576, 6, -196565, 786432, 4, -131029, 786432, 5, -65493, 786432, 5, 43, 786432, 5, 65579, 786432, 5, 131115, 786432, 5, 196651, 786432, 5, 262187, 786432, 5, 327723, 786432, 5, 393259, 655360, 6, 458795, 655360, 6, 524331, 786432, 5, 589867, 786432, 5, 655403, 786432, 6, -262100, 720896, 3, -196564, 786432, 4, -131028, 786432, 5, -65492, 786432, 5, 44, 786432, 5, 65580, 786432, 5, 131116, 786432, 5, 196652, 786432, 5, 262188, 786432, 5, 327724, 786432, 5, 393260, 786432, 5, 458796, 786432, 5, 524332, 786432, 5, 589868, 786432, 5, 655404, 786432, 6, -262099, 983040, 6, -196563, 786432, 4, -131027, 786432, 5, -65491, 786432, 5, 45, 589824, 6, 65581, 655360, 6, 131117, 655360, 6, 196653, 786432, 5, 262189, 786432, 5, 327725, 786432, 5, 393261, 786432, 5, 458797, 786432, 5, 524333, 786432, 5, 589869, 655360, 6, 655405, 786432, 6, -196562, 786432, 4, -131026, 786432, 5, -65490, 786432, 5, 46, 786432, 5, 65582, 786432, 5, 131118, 786432, 5, 196654, 786432, 5, 262190, 786432, 5, 327726, 786432, 5, 393262, 786432, 5, 458798, 786432, 5, 524334, 786432, 5, 589870, 786432, 5, 655406, 786432, 6, -196561, 851968, 4, -131025, 851968, 5, -65489, 851968, 5, 47, 851968, 5, 65583, 851968, 5, 131119, 851968, 5, 196655, 851968, 5, 262191, 851968, 5, 327727, 851968, 5, 393263, 851968, 5, 458799, 851968, 5, 524335, 851968, 5, 589871, 851968, 5, 655407, 851968, 6, -131042, 720896, 4, -65506, 720896, 5, 30, 720896, 5, 65566, 720896, 5, 131102, 720896, 5, 196638, 720896, 5, 262174, 720896, 5, 327710, 720896, 5, 393246, 720896, 5, 458782, 720896, 5, 524318, 720896, 5, -196577, 917504, 6, -131041, 786432, 4, -65505, 786432, 5, 31, 655360, 6, 65567, 786432, 5, 131103, 786432, 5, 196639, 786432, 5, 262175, 786432, 5, 327711, 786432, 5, 393247, 786432, 5, 458783, 786432, 5, 524319, 786432, 5, -196576, 983040, 5, -131040, 786432, 4, -65504, 786432, 5, 32, 786432, 5, 65568, 589824, 6, 131104, 786432, 5, 196640, 786432, 5, 262176, 786432, 5, 327712, 786432, 5, 393248, 786432, 5, 458784, 786432, 5, 524320, 786432, 5, -196575, 720896, 3, -131039, 786432, 4, -65503, 786432, 5, 33, 786432, 5, 65569, 786432, 5, 131105, 786432, 5, 196641, 786432, 5, 262177, 786432, 5, 327713, 655360, 6, 393249, 786432, 5, 458785, 786432, 5, 524321, 786432, 5, -196574, 1048576, 6, -131038, 786432, 4, -65502, 786432, 5, 34, 786432, 5, 65570, 786432, 5, 131106, 786432, 5, 196642, 786432, 5, 262178, 786432, 5, 327714, 786432, 5, 393250, 786432, 5, 458786, 655360, 6, 524322, 655360, 6, -196573, 720896, 3, -131037, 786432, 4, -65501, 786432, 5, 35, 786432, 5, 65571, 786432, 5, 131107, 786432, 5, 196643, 786432, 5, 262179, 786432, 5, 327715, 786432, 5, 393251, 786432, 5, 458787, 786432, 5, 524323, 786432, 5, -196572, 983040, 6, -131036, 786432, 4, -65500, 786432, 5, 36, 786432, 5, 65572, 589824, 6, 131108, 655360, 6, 196644, 655360, 6, 262180, 786432, 5, 327716, 786432, 5, 393252, 786432, 5, 458788, 786432, 5, 524324, 786432, 5, -131035, 786432, 4, -65499, 786432, 5, 37, 786432, 5, 65573, 786432, 5, 131109, 786432, 5, 196645, 786432, 5, 262181, 786432, 5, 327717, 786432, 5, 393253, 786432, 5, 458789, 786432, 5, 524325, 786432, 5, -131034, 851968, 4, -65498, 851968, 5, 38, 851968, 5, 65574, 851968, 5, 131110, 851968, 5, 196646, 851968, 5, 262182, 851968, 5, 327718, 851968, 5, 393254, 851968, 5, 458790, 851968, 5, 524326, 851968, 5, 589854, 720896, 5, 655390, 720896, 5, 720926, 720896, 6, 589855, 655360, 6, 655391, 786432, 5, 720927, 786432, 6, 589856, 786432, 5, 655392, 786432, 5, 720928, 786432, 6, 589857, 786432, 5, 655393, 786432, 5, 720929, 786432, 6, 589858, 786432, 5, 655394, 786432, 5, 720930, 786432, 6, 589859, 786432, 5, 655395, 786432, 5, 720931, 786432, 6, 589860, 786432, 5, 655396, 655360, 6, 720932, 786432, 6, 589861, 786432, 5, 655397, 786432, 5, 720933, 786432, 6, 589862, 851968, 5, 655398, 851968, 5, 720934, 851968, 6, -458704, 720896, 4, -393168, 720896, 5, -327632, 720896, 5, -262096, 720896, 5, -196560, 720896, 5, -131024, 720896, 5, -65488, 720896, 5, 48, 720896, 5, 65584, 720896, 5, 131120, 720896, 5, 196656, 720896, 5, 262192, 720896, 5, 327728, 720896, 5, 393264, 720896, 6, -524239, 917504, 6, -458703, 786432, 4, -393167, 786432, 5, -327631, 655360, 6, -262095, 786432, 5, -196559, 786432, 5, -131023, 786432, 5, -65487, 786432, 5, 49, 786432, 5, 65585, 786432, 5, 131121, 786432, 5, 196657, 786432, 5, 262193, 655360, 6, 327729, 786432, 5, 393265, 786432, 6, -524238, 983040, 5, -458702, 786432, 4, -393166, 786432, 5, -327630, 786432, 5, -262094, 589824, 6, -196558, 786432, 5, -131022, 786432, 5, -65486, 786432, 5, 50, 786432, 5, 65586, 786432, 5, 131122, 786432, 5, 196658, 786432, 5, 262194, 786432, 5, 327730, 786432, 5, 393266, 786432, 6, -524237, 720896, 3, -458701, 786432, 4, -393165, 786432, 5, -327629, 786432, 5, -262093, 786432, 5, -196557, 786432, 5, -131021, 786432, 5, -65485, 786432, 5, 51, 655360, 6, 65587, 786432, 5, 131123, 786432, 5, 196659, 786432, 5, 262195, 786432, 5, 327731, 786432, 5, 393267, 786432, 6, -524236, 1048576, 6, -458700, 786432, 4, -393164, 786432, 5, -327628, 786432, 5, -262092, 786432, 5, -196556, 786432, 5, -131020, 786432, 5, -65484, 786432, 5, 52, 786432, 5, 65588, 786432, 5, 131124, 655360, 6, 196660, 655360, 6, 262196, 786432, 5, 327732, 786432, 5, 393268, 786432, 6, -524235, 720896, 3, -458699, 786432, 4, -393163, 786432, 5, -327627, 786432, 5, -262091, 786432, 5, -196555, 786432, 5, -131019, 786432, 5, -65483, 786432, 5, 53, 786432, 5, 65589, 786432, 5, 131125, 786432, 5, 196661, 786432, 5, 262197, 786432, 5, 327733, 786432, 5, 393269, 786432, 6, -524234, 983040, 6, -458698, 786432, 4, -393162, 786432, 5, -327626, 786432, 5, -262090, 589824, 6, -196554, 655360, 6, -131018, 655360, 6, -65482, 786432, 5, 54, 786432, 5, 65590, 786432, 5, 131126, 786432, 5, 196662, 786432, 5, 262198, 786432, 5, 327734, 655360, 6, 393270, 786432, 6, -458697, 786432, 4, -393161, 786432, 5, -327625, 786432, 5, -262089, 786432, 5, -196553, 786432, 5, -131017, 786432, 5, -65481, 786432, 5, 55, 786432, 5, 65591, 786432, 5, 131127, 786432, 5, 196663, 786432, 5, 262199, 786432, 5, 327735, 786432, 5, 393271, 786432, 6, -458696, 851968, 4, -393160, 851968, 5, -327624, 851968, 5, -262088, 851968, 5, -196552, 851968, 5, -131016, 851968, 5, -65480, 851968, 5, 56, 851968, 5, 65592, 851968, 5, 131128, 851968, 5, 196664, 851968, 5, 262200, 851968, 5, 327736, 851968, 5, 393272, 851968, 6) + +[node name="UI" type="CanvasLayer" parent="."] + +[node name="UIInventory" parent="UI" instance=ExtResource("2_whpvu")] +unique_name_in_owner = true +visible = false + +[node name="UISign" parent="UI" instance=ExtResource("3_rbo5b")] +unique_name_in_owner = true +visible = false + +[node name="Camera2D" type="Camera2D" parent="."] +position = Vector2(374, -216) +zoom = Vector2(1.5, 1.5) + +[node name="PhantomCameraHost" type="Node" parent="Camera2D"] +script = ExtResource("4_yddet") + +[node name="Label" type="Label" parent="."] +offset_left = 167.0 +offset_top = -133.0 +offset_right = 332.0 +offset_bottom = -69.0 +theme_override_colors/font_color = Color(0.294118, 1, 0.631373, 1) +theme_override_fonts/font = ExtResource("8_6pcaf") +text = "[WASD] to move +[Space] to jump" + +[node name="Player" type="Node" parent="."] + +[node name="Label" type="Label" parent="Player"] +visible = false +offset_left = 167.0 +offset_top = -145.0 +offset_right = 332.0 +offset_bottom = -81.0 +theme_override_colors/font_color = Color(0.294118, 1, 0.631373, 1) +theme_override_fonts/font = ExtResource("8_6pcaf") +text = "[WASD] to move +[Space] to jump" + +[node name="PlayerPhantomCamera2D" type="Node2D" parent="." node_paths=PackedStringArray("follow_target", "follow_path")] +unique_name_in_owner = true +position = Vector2(374, -216) +script = ExtResource("5_x25dj") +priority = 10 +follow_mode = 4 +follow_target = NodePath("../CharacterBody2D/PlayerVisuals") +follow_path = NodePath("../Path2D") +zoom = Vector2(1.5, 1.5) +tween_resource = ExtResource("6_4vtmp") +tween_on_load = false +draw_limits = true + +[node name="Path2D" type="Path2D" parent="."] +position = Vector2(152, -216) +curve = SubResource("Curve2D_usrhf") + +[node name="CharacterBody2D" parent="." instance=ExtResource("8_a2pel")] +position = Vector2(225, -28) + +[editable path="CharacterBody2D"] diff --git a/addons/phantom_camera/examples/example_scenes/2D/2d_limit_example_scene.tscn b/addons/phantom_camera/examples/example_scenes/2D/2d_limit_example_scene.tscn new file mode 100644 index 0000000..fdfb571 --- /dev/null +++ b/addons/phantom_camera/examples/example_scenes/2D/2d_limit_example_scene.tscn @@ -0,0 +1,718 @@ +[gd_scene load_steps=16 format=3 uid="uid://w20wokw3ohsq"] + +[ext_resource type="Script" path="res://addons/phantom_camera/examples/scripts/2D/2d_room_limit_tween.gd" id="1_ijqyv"] +[ext_resource type="Texture2D" uid="uid://c77npili4pel4" path="res://addons/phantom_camera/examples/textures/2D/level_spritesheet.png" id="1_wmhqb"] +[ext_resource type="PackedScene" uid="uid://dg7rhrymsrrrm" path="res://addons/phantom_camera/examples/ui/ui_inventory.tscn" id="2_v5qg2"] +[ext_resource type="PackedScene" uid="uid://iq5xd1ob1res" path="res://addons/phantom_camera/examples/ui/ui_sign.tscn" id="3_oqmwp"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/phantom_camera/phantom_camera_2d.gd" id="4_4b648"] +[ext_resource type="PackedScene" uid="uid://7kh0xydx0b1o" path="res://addons/phantom_camera/examples/example_scenes/2D/sub_scenes/playable_character_2d.tscn" id="5_pr2x5"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/resources/tween_resource.gd" id="9_twplb"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/phantom_camera_host/phantom_camera_host.gd" id="9_w5e16"] + +[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_easgx"] +texture = ExtResource("1_wmhqb") +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_1/linear_velocity = Vector2(0, 0) +0:0/0/physics_layer_1/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 +1:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +1:0/0/physics_layer_1/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 +2:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +2:0/0/physics_layer_1/angular_velocity = 0.0 +3:0/0 = 0 +3:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:0/0/physics_layer_0/angular_velocity = 0.0 +3:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:0/0/physics_layer_1/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 +4:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:0/0/physics_layer_1/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 +5:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +5:0/0/physics_layer_1/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 +6:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +6:0/0/physics_layer_1/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 +7:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +7:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:0/0/physics_layer_1/angular_velocity = 0.0 +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_1/linear_velocity = Vector2(0, 0) +0:1/0/physics_layer_1/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 +1:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +1:1/0/physics_layer_1/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_1/linear_velocity = Vector2(0, 0) +2:1/0/physics_layer_1/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 +3:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:1/0/physics_layer_1/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 +4:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:1/0/physics_layer_1/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 +5:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +5:1/0/physics_layer_1/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 +7:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +7:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:1/0/physics_layer_1/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 +2:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +2:2/0/physics_layer_1/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 +3:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:2/0/physics_layer_1/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 +4:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:2/0/physics_layer_1/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 +7:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +7:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:2/0/physics_layer_1/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 +3:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:3/0/physics_layer_1/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 +4:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:3/0/physics_layer_1/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 +5:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +5:3/0/physics_layer_1/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 +7:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +7:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:3/0/physics_layer_1/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 +3:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:4/0/physics_layer_1/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 +4:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:4/0/physics_layer_1/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 +5:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +5:4/0/physics_layer_1/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 +7:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:4/0/physics_layer_1/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 +3:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:5/0/physics_layer_1/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 +4:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:5/0/physics_layer_1/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 +7:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:5/0/physics_layer_1/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 +3:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:6/0/physics_layer_1/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 +4:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:6/0/physics_layer_1/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 +7:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:6/0/physics_layer_1/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 +2:7/0/physics_layer_1/linear_velocity = Vector2(0, 0) +2:7/0/physics_layer_1/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 +3:7/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:7/0/physics_layer_1/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 +4:7/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:7/0/physics_layer_1/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 +5:7/0/physics_layer_1/linear_velocity = Vector2(0, 0) +5:7/0/physics_layer_1/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 +8:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +8:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:0/0/physics_layer_1/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 +9:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +9:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:0/0/physics_layer_1/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) +10:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:0/0/physics_layer_1/angular_velocity = 0.0 +11:0/0 = 0 +11:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:0/0/physics_layer_0/angular_velocity = 0.0 +11:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +11:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:0/0/physics_layer_1/angular_velocity = 0.0 +12:0/0 = 0 +12:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:0/0/physics_layer_0/angular_velocity = 0.0 +12:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:0/0/physics_layer_1/angular_velocity = 0.0 +13:0/0 = 0 +13:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:0/0/physics_layer_0/angular_velocity = 0.0 +13:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +13:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:0/0/physics_layer_1/angular_velocity = 0.0 +14:0/0 = 0 +14:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:0/0/physics_layer_0/angular_velocity = 0.0 +14:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:0/0/physics_layer_1/angular_velocity = 0.0 +14:0/0/physics_layer_1/polygon_0/points = PackedVector2Array(8, -8, 8, 8, -8, 8) +14:0/0/custom_data_0 = &"Sign" +15:0/0 = 0 +15:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:0/0/physics_layer_0/angular_velocity = 0.0 +15:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:0/0/physics_layer_1/angular_velocity = 0.0 +16:0/0 = 0 +16:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:0/0/physics_layer_0/angular_velocity = 0.0 +16:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:0/0/physics_layer_1/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 +8:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +8:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:1/0/physics_layer_1/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 +9:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +9:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:1/0/physics_layer_1/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) +10:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:1/0/physics_layer_1/angular_velocity = 0.0 +11:1/0 = 0 +11:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:1/0/physics_layer_0/angular_velocity = 0.0 +11:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +11:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:1/0/physics_layer_1/angular_velocity = 0.0 +12:1/0 = 0 +12:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:1/0/physics_layer_0/angular_velocity = 0.0 +12:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:1/0/physics_layer_1/angular_velocity = 0.0 +13:1/0 = 0 +13:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:1/0/physics_layer_0/angular_velocity = 0.0 +13:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +13:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:1/0/physics_layer_1/angular_velocity = 0.0 +14:1/0 = 0 +14:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:1/0/physics_layer_0/angular_velocity = 0.0 +14:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:1/0/physics_layer_1/angular_velocity = 0.0 +15:1/0 = 0 +15:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:1/0/physics_layer_0/angular_velocity = 0.0 +15:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:1/0/physics_layer_1/angular_velocity = 0.0 +16:1/0 = 0 +16:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:1/0/physics_layer_0/angular_velocity = 0.0 +16:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:1/0/physics_layer_1/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 +8:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +8:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:2/0/physics_layer_1/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 +9:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +9:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:2/0/physics_layer_1/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) +10:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:2/0/physics_layer_1/angular_velocity = 0.0 +11:2/0 = 0 +11:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:2/0/physics_layer_0/angular_velocity = 0.0 +11:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +11:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:2/0/physics_layer_1/angular_velocity = 0.0 +12:2/0 = 0 +12:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:2/0/physics_layer_0/angular_velocity = 0.0 +12:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:2/0/physics_layer_1/angular_velocity = 0.0 +13:2/0 = 0 +13:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:2/0/physics_layer_0/angular_velocity = 0.0 +13:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +13:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:2/0/physics_layer_1/angular_velocity = 0.0 +14:2/0 = 0 +14:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:2/0/physics_layer_0/angular_velocity = 0.0 +14:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:2/0/physics_layer_1/angular_velocity = 0.0 +15:2/0 = 0 +15:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:2/0/physics_layer_0/angular_velocity = 0.0 +15:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:2/0/physics_layer_1/angular_velocity = 0.0 +16:2/0 = 0 +16:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:2/0/physics_layer_0/angular_velocity = 0.0 +16:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:2/0/physics_layer_1/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 +8:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +8:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:3/0/physics_layer_1/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 +9:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +9:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:3/0/physics_layer_1/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) +10:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:3/0/physics_layer_1/angular_velocity = 0.0 +11:3/0 = 0 +11:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:3/0/physics_layer_0/angular_velocity = 0.0 +11:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:3/0/physics_layer_1/angular_velocity = 0.0 +12:3/0 = 0 +12:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:3/0/physics_layer_0/angular_velocity = 0.0 +12:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:3/0/physics_layer_1/angular_velocity = 0.0 +13:3/0 = 0 +13:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:3/0/physics_layer_0/angular_velocity = 0.0 +13:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +13:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:3/0/physics_layer_1/angular_velocity = 0.0 +14:3/0 = 0 +14:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:3/0/physics_layer_0/angular_velocity = 0.0 +14:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:3/0/physics_layer_1/angular_velocity = 0.0 +15:3/0 = 0 +15:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:3/0/physics_layer_0/angular_velocity = 0.0 +15:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:3/0/physics_layer_1/angular_velocity = 0.0 +16:3/0 = 0 +16:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:3/0/physics_layer_0/angular_velocity = 0.0 +16:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:3/0/physics_layer_1/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 +8:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:4/0/physics_layer_1/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 +9:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:4/0/physics_layer_1/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_1/linear_velocity = Vector2(0, 0) +10:4/0/physics_layer_1/angular_velocity = 0.0 +11:4/0 = 0 +11:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:4/0/physics_layer_0/angular_velocity = 0.0 +11:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-7, 2.5, -5, -2, -2.5, -5, 2, -7, 8, -8, 8, 8, -8, 8) +11:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:4/0/physics_layer_1/angular_velocity = 0.0 +12:4/0 = 0 +12:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:4/0/physics_layer_0/angular_velocity = 0.0 +12:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:4/0/physics_layer_1/angular_velocity = 0.0 +13:4/0 = 0 +13:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:4/0/physics_layer_0/angular_velocity = 0.0 +13:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 0, -6, 4, -1.5, 6.5, 1.5, 8, 8, -8, 8) +13:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:4/0/physics_layer_1/angular_velocity = 0.0 +14:4/0 = 0 +14:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:4/0/physics_layer_0/angular_velocity = 0.0 +14:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:4/0/physics_layer_1/angular_velocity = 0.0 +14:4/0/physics_layer_1/polygon_0/points = PackedVector2Array(-8, -8, -8, 8, 8, 8, 8, -8) +14:4/0/custom_data_0 = &"Inventory" +15:4/0 = 0 +15:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:4/0/physics_layer_0/angular_velocity = 0.0 +15:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:4/0/physics_layer_1/angular_velocity = 0.0 +16:4/0 = 0 +16:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:4/0/physics_layer_0/angular_velocity = 0.0 +16:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:4/0/physics_layer_1/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 +8:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:5/0/physics_layer_1/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 +9:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:5/0/physics_layer_1/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_1/linear_velocity = Vector2(0, 0) +10:5/0/physics_layer_1/angular_velocity = 0.0 +11:5/0 = 0 +11:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:5/0/physics_layer_0/angular_velocity = 0.0 +11:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +11:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:5/0/physics_layer_1/angular_velocity = 0.0 +12:5/0 = 0 +12:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:5/0/physics_layer_0/angular_velocity = 0.0 +12:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:5/0/physics_layer_1/angular_velocity = 0.0 +13:5/0 = 0 +13:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:5/0/physics_layer_0/angular_velocity = 0.0 +13:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +13:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:5/0/physics_layer_1/angular_velocity = 0.0 +14:5/0 = 0 +14:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:5/0/physics_layer_0/angular_velocity = 0.0 +14:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:5/0/physics_layer_1/angular_velocity = 0.0 +15:5/0 = 0 +15:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:5/0/physics_layer_0/angular_velocity = 0.0 +15:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:5/0/physics_layer_1/angular_velocity = 0.0 +16:5/0 = 0 +16:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:5/0/physics_layer_0/angular_velocity = 0.0 +16:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:5/0/physics_layer_1/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 +8:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:6/0/physics_layer_1/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 +9:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:6/0/physics_layer_1/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_1/linear_velocity = Vector2(0, 0) +10:6/0/physics_layer_1/angular_velocity = 0.0 +11:6/0 = 0 +11:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:6/0/physics_layer_0/angular_velocity = 0.0 +11:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, 1, 6.5, -3, 3, -6.5, -1.5) +11:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:6/0/physics_layer_1/angular_velocity = 0.0 +12:6/0 = 0 +12:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:6/0/physics_layer_0/angular_velocity = 0.0 +12:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:6/0/physics_layer_1/angular_velocity = 0.0 +13:6/0 = 0 +13:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:6/0/physics_layer_0/angular_velocity = 0.0 +13:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 6, -0.5, 3, 3.5, -1.5, 6.5, -8, 8) +13:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:6/0/physics_layer_1/angular_velocity = 0.0 +14:6/0 = 0 +14:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:6/0/physics_layer_0/angular_velocity = 0.0 +14:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:6/0/physics_layer_1/angular_velocity = 0.0 +15:6/0 = 0 +15:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:6/0/physics_layer_0/angular_velocity = 0.0 +15:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:6/0/physics_layer_1/angular_velocity = 0.0 +16:6/0 = 0 +16:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:6/0/physics_layer_0/angular_velocity = 0.0 +16:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:6/0/physics_layer_1/angular_velocity = 0.0 + +[sub_resource type="TileSet" id="TileSet_kf7eg"] +physics_layer_0/collision_layer = 1 +physics_layer_1/collision_layer = 2 +physics_layer_1/collision_mask = 2 +custom_data_layer_0/name = "Type" +custom_data_layer_0/type = 21 +sources/0 = SubResource("TileSetAtlasSource_easgx") + +[sub_resource type="Resource" id="Resource_ct1eh"] +script = ExtResource("9_twplb") +duration = 0.9 +transition = 2 +ease = 2 + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_xmxri"] +size = Vector2(790, 410) + +[sub_resource type="Resource" id="Resource_exr3j"] +script = ExtResource("9_twplb") +duration = 0.9 +transition = 2 +ease = 2 + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_wtfjw"] +size = Vector2(1530, 700) + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_daeuh"] +size = Vector2(1027.5, 610.5) + +[node name="ExampleScene2D" type="Node2D"] +script = ExtResource("1_ijqyv") + +[node name="Background" type="CanvasLayer" parent="."] +layer = -3 + +[node name="ColorRect" type="ColorRect" parent="Background"] +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_left = -311.0 +offset_top = -173.0 +offset_right = 981.0 +offset_bottom = 548.0 +grow_horizontal = 2 +grow_vertical = 2 +auto_translate = false +localize_numeral_system = false +color = Color(0.137255, 0.14902, 0.196078, 1) +metadata/_edit_lock_ = true + +[node name="TileMap" type="TileMap" parent="."] +z_index = -1 +position = Vector2(-97, 0) +scale = Vector2(3, 3) +tile_set = SubResource("TileSet_kf7eg") +format = 2 +layer_0/name = "Background" +layer_0/tile_data = PackedInt32Array(-458743, 851968, 6, -458744, 786432, 6, -458745, 786432, 6, -458746, 786432, 6, -458747, 786432, 6, -458748, 786432, 6, -458749, 786432, 6, -458750, 786432, 6, -458751, 786432, 6, -393218, 786432, 6, -393219, 786432, 6, -393220, 786432, 6, -393221, 720896, 6, -458752, 786432, 6, -393217, 786432, 6, -524279, 851968, 5, -589815, 851968, 5, -655351, 851968, 5, -720887, 851968, 4, -720888, 786432, 4, -720889, 786432, 4, -720890, 786432, 4, -720891, 786432, 4, -720892, 786432, 4, -720893, 786432, 4, -720894, 786432, 4, -720895, 786432, 4, -720896, 786432, 4, -655361, 786432, 4, -655362, 786432, 4, -655363, 786432, 4, -655364, 786432, 4, -655365, 720896, 4, -589829, 720896, 5, -524293, 720896, 5, -458757, 720896, 5, -589828, 786432, 5, -524292, 786432, 5, -458756, 786432, 5, -589827, 786432, 5, -524291, 786432, 5, -458755, 786432, 5, -589826, 786432, 5, -524290, 786432, 5, -458754, 786432, 5, -589825, 786432, 5, -524289, 786432, 5, -458753, 786432, 5, -655360, 786432, 5, -589824, 786432, 5, -524288, 786432, 5, -655359, 786432, 5, -589823, 786432, 5, -524287, 786432, 5, -655358, 786432, 5, -589822, 786432, 5, -524286, 786432, 5, -655357, 786432, 5, -589821, 786432, 5, -524285, 786432, 5, -655356, 786432, 5, -589820, 786432, 5, -524284, 786432, 5, -655355, 786432, 5, -589819, 786432, 5, -524283, 786432, 5, -655354, 786432, 5, -589818, 786432, 5, -524282, 786432, 5, -655353, 786432, 5, -589817, 786432, 5, -524281, 786432, 5, -655352, 786432, 5, -589816, 786432, 5, -524280, 786432, 5) +layer_1/name = "Terrain" +layer_1/z_index = 1 +layer_1/tile_data = PackedInt32Array(65533, 720896, 0, 65534, 720896, 0, 65535, 720896, 0, 0, 720896, 0, 1, 720896, 0, 2, 720896, 0, 3, 720896, 0, 4, 720896, 0, 5, 720896, 0, 6, 720896, 0, 7, 720896, 0, 8, 720896, 0, 9, 786432, 0, 65532, 720896, 0, 65531, 655360, 0, 131067, 655360, 1, 196603, 655360, 1, 262139, 655360, 1, 327675, 655360, 1, 393211, 655360, 1, 131068, 720896, 1, 196604, 720896, 1, 262140, 720896, 1, 327676, 720896, 1, 393212, 720896, 1, 131069, 720896, 1, 196605, 720896, 1, 262141, 720896, 1, 327677, 720896, 1, 393213, 720896, 1, 131070, 720896, 1, 196606, 720896, 1, 262142, 720896, 1, 327678, 720896, 1, 393214, 720896, 1, 131071, 720896, 1, 196607, 720896, 1, 262143, 720896, 1, 327679, 720896, 1, 393215, 720896, 1, 65536, 720896, 1, 131072, 720896, 1, 196608, 720896, 1, 262144, 720896, 1, 327680, 720896, 1, 65537, 720896, 1, 131073, 720896, 1, 196609, 720896, 1, 262145, 720896, 1, 327681, 720896, 1, 65538, 720896, 1, 131074, 720896, 1, 196610, 720896, 1, 262146, 720896, 1, 327682, 720896, 1, 65539, 720896, 1, 131075, 720896, 1, 196611, 720896, 1, 262147, 720896, 1, 327683, 720896, 1, 65540, 720896, 1, 131076, 720896, 1, 196612, 720896, 1, 262148, 720896, 1, 327684, 720896, 1, 65541, 720896, 1, 131077, 720896, 1, 196613, 720896, 1, 262149, 720896, 1, 327685, 720896, 1, 65542, 720896, 1, 131078, 720896, 1, 196614, 720896, 1, 262150, 720896, 1, 327686, 720896, 1, 65543, 720896, 1, 131079, 720896, 1, 196615, 720896, 1, 262151, 720896, 1, 327687, 720896, 1, 65544, 720896, 1, 131080, 720896, 1, 196616, 720896, 1, 262152, 720896, 1, 327688, 720896, 1, 65545, 786432, 1, 131081, 786432, 1, 196617, 786432, 1, 262153, 786432, 1, 327689, 786432, 1) + +[node name="TileMap2" type="TileMap" parent="."] +z_index = -1 +scale = Vector2(3, 3) +tile_set = SubResource("TileSet_kf7eg") +format = 2 +layer_0/name = "Background" +layer_1/name = "Terrain" +layer_1/z_index = 1 +layer_1/tile_data = PackedInt32Array(8, 786432, 4, 9, 786432, 4, 10, 786432, 4, 11, 786432, 4, 12, 786432, 4, 13, 786432, 4, 14, 786432, 4, 65528, 851968, 5, 65527, 786432, 5, 65526, 786432, 5, 65525, 786432, 5, 65524, 786432, 5, 65523, 786432, 5, 65544, 786432, 5, 131080, 786432, 5, 196616, 786432, 5, 262152, 786432, 5, 65545, 786432, 5, 131081, 786432, 5, 196617, 786432, 5, 262153, 786432, 5, 65546, 786432, 5, 131082, 786432, 5, 196618, 786432, 5, 262154, 786432, 5, 65547, 786432, 5, 131083, 786432, 5, 196619, 786432, 5, 262155, 786432, 5, 65548, 786432, 5, 131084, 786432, 5, 196620, 786432, 5, 262156, 786432, 5, 65549, 786432, 5, 131085, 786432, 5, 196621, 786432, 5, 262157, 786432, 5, 65550, 786432, 5, 131086, 786432, 5, 196622, 786432, 5, 262158, 786432, 5, 327694, 786432, 5, 327693, 786432, 5, 327692, 786432, 5, 327691, 786432, 5, 327690, 786432, 5, 327689, 786432, 5, 327688, 786432, 5, -131089, 720896, 5, -65553, 720896, 5, -17, 720896, 5, 65519, 720896, 6, -131088, 786432, 5, -65552, 786432, 5, -16, 786432, 5, 65520, 786432, 5, -131087, 786432, 5, -65551, 786432, 5, -15, 786432, 5, 65521, 786432, 5, -131086, 786432, 5, -65550, 786432, 5, -14, 786432, 5, 65522, 786432, 5, -131085, 786432, 5, -65549, 786432, 5, -13, 786432, 5, -131084, 786432, 5, -65548, 786432, 5, -12, 786432, 5, -131083, 786432, 5, -65547, 786432, 5, -11, 786432, 5, -131082, 786432, 5, -65546, 786432, 5, -10, 786432, 5, -131081, 786432, 5, -65545, 786432, 5, -9, 786432, 5, -131080, 851968, 5, -65544, 851968, 5, -8, 851968, 5, 131064, 851968, 5, 196600, 851968, 5, 262136, 851968, 5, 327672, 851968, 5, 393208, 851968, 5, 131056, 786432, 5, 196592, 786432, 5, 262128, 786432, 5, 327664, 786432, 5, 393200, 786432, 5, 131057, 786432, 5, 196593, 786432, 5, 262129, 786432, 5, 327665, 786432, 5, 393201, 786432, 5, 131058, 786432, 5, 196594, 786432, 5, 262130, 786432, 5, 327666, 786432, 5, 393202, 786432, 5, 131059, 786432, 5, 196595, 786432, 5, 262131, 786432, 5, 327667, 786432, 5, 393203, 786432, 5, 131060, 786432, 5, 196596, 786432, 5, 262132, 786432, 5, 327668, 786432, 5, 393204, 786432, 5, 131061, 786432, 5, 196597, 786432, 5, 262133, 786432, 5, 327669, 786432, 5, 393205, 786432, 5, 131062, 786432, 5, 196598, 786432, 5, 262134, 786432, 5, 327670, 786432, 5, 393206, 786432, 5, 131063, 786432, 5, 196599, 786432, 5, 262135, 786432, 5, 327671, 786432, 5, 393207, 786432, 5, 17, 786432, 4, 65553, 786432, 5, 131089, 786432, 5, 196625, 786432, 5, 262161, 786432, 5, 327697, 786432, 5, 18, 786432, 4, 65554, 786432, 5, 131090, 786432, 5, 196626, 786432, 5, 262162, 786432, 5, 327698, 786432, 5, 15, 786432, 4, 65551, 786432, 5, 131087, 786432, 5, 196623, 786432, 5, 262159, 786432, 5, 327695, 786432, 5, 16, 786432, 4, 65552, 786432, 5, 131088, 786432, 5, 196624, 786432, 5, 262160, 786432, 5, 327696, 786432, 5, 19, 786432, 4, 65555, 786432, 5, 131091, 786432, 5, 196627, 786432, 5, 262163, 786432, 5, 327699, 786432, 5, -458769, 720896, 5, -393233, 720896, 5, -458768, 786432, 5, -393232, 786432, 5, -458767, 786432, 5, -393231, 786432, 5, -458766, 786432, 5, -393230, 786432, 5, -458765, 786432, 5, -393229, 786432, 5, -458764, 786432, 5, -393228, 786432, 5, -458763, 786432, 5, -393227, 786432, 5, -458762, 786432, 5, -393226, 786432, 5, -458761, 786432, 5, -393225, 786432, 5, -458760, 851968, 5, -393224, 851968, 5, -655377, 720896, 4, -589841, 720896, 5, -524305, 720896, 5, -655376, 786432, 4, -589840, 786432, 5, -524304, 786432, 5, -655375, 786432, 4, -589839, 786432, 5, -524303, 786432, 5, -655374, 786432, 4, -589838, 786432, 5, -524302, 786432, 5, -655373, 786432, 4, -589837, 786432, 5, -524301, 786432, 5, -655372, 786432, 4, -589836, 786432, 5, -524300, 786432, 5, -655371, 786432, 4, -589835, 786432, 5, -524299, 786432, 5, -655370, 786432, 4, -589834, 786432, 5, -524298, 786432, 5, -655369, 786432, 4, -589833, 786432, 5, -524297, 786432, 5, -655368, 851968, 4, -589832, 851968, 5, -524296, 851968, 5, -327697, 720896, 5, -327696, 786432, 5, -327695, 786432, 5, -327694, 786432, 5, -327693, 786432, 5, -327692, 786432, 5, -327691, 786432, 5, -327690, 786432, 5, -327689, 786432, 5, -327688, 851968, 5, -262161, 720896, 5, -262160, 786432, 5, -262159, 786432, 5, -262158, 786432, 5, -262157, 786432, 5, -262156, 786432, 5, -262155, 786432, 5, -262154, 786432, 5, -262153, 786432, 5, -262152, 851968, 5, -196625, 720896, 5, -196624, 786432, 5, -196623, 786432, 5, -196622, 786432, 5, -196621, 786432, 5, -196620, 786432, 5, -196619, 786432, 5, -196618, 786432, 5, -196617, 786432, 5, -196616, 851968, 5, 20, 786432, 4, 65556, 786432, 5, 131092, 786432, 5, 196628, 786432, 5, 262164, 786432, 5, 327700, 786432, 5, 21, 786432, 4, 65557, 786432, 5, 131093, 786432, 5, 196629, 786432, 5, 262165, 786432, 5, 327701, 786432, 5, 22, 786432, 4, 65558, 786432, 5, 131094, 786432, 5, 196630, 786432, 5, 262166, 786432, 5, 327702, 786432, 5, 23, 786432, 4, 65559, 786432, 5, 131095, 786432, 5, 196631, 786432, 5, 262167, 786432, 5, 327703, 786432, 5, 24, 786432, 4, 65560, 786432, 5, 131096, 786432, 5, 196632, 786432, 5, 262168, 786432, 5, 327704, 786432, 5, 25, 786432, 4, 65561, 786432, 5, 131097, 786432, 5, 196633, 786432, 5, 262169, 786432, 5, 327705, 786432, 5, 26, 786432, 4, 65562, 786432, 5, 131098, 786432, 5, 196634, 786432, 5, 262170, 786432, 5, 327706, 786432, 5, 27, 786432, 4, 65563, 786432, 5, 131099, 786432, 5, 196635, 786432, 5, 262171, 786432, 5, 327707, 786432, 5, -65498, 917504, 3, 38, 786432, 4, 65574, 786432, 5, 131110, 786432, 5, 196646, 786432, 5, 262182, 786432, 5, 327718, 786432, 5, 39, 786432, 4, 65575, 786432, 5, 131111, 786432, 5, 196647, 786432, 5, 262183, 786432, 5, 327719, 786432, 5, -65496, 983040, 3, 40, 786432, 4, 65576, 786432, 5, 131112, 786432, 5, 196648, 786432, 5, 262184, 786432, 5, 327720, 786432, 5, -65495, 983040, 3, 41, 786432, 4, 65577, 786432, 5, 131113, 786432, 5, 196649, 786432, 5, 262185, 786432, 5, 327721, 786432, 5, -65494, 983040, 3, 42, 786432, 4, 65578, 786432, 5, 131114, 786432, 5, 196650, 786432, 5, 262186, 786432, 5, 327722, 786432, 5, -65493, 983040, 3, 43, 786432, 4, 65579, 786432, 5, 131115, 786432, 5, 196651, 786432, 5, 262187, 786432, 5, 327723, 786432, 5, -65492, 983040, 3, 44, 786432, 4, 65580, 786432, 5, 131116, 786432, 5, 196652, 786432, 5, 262188, 786432, 5, 327724, 786432, 5, -65491, 983040, 3, 45, 786432, 4, 65581, 786432, 5, 131117, 786432, 5, 196653, 786432, 5, 262189, 786432, 5, 327725, 786432, 5, -65490, 983040, 3, 46, 786432, 4, 65582, 786432, 5, 131118, 786432, 5, 196654, 786432, 5, 262190, 786432, 5, 327726, 786432, 5, -65489, 983040, 3, 47, 786432, 4, 65583, 786432, 5, 131119, 786432, 5, 196655, 786432, 5, 262191, 786432, 5, 327727, 786432, 5, -65488, 1048576, 3, 48, 786432, 4, 65584, 786432, 5, 131120, 786432, 5, 196656, 786432, 5, 262192, 786432, 5, 327728, 786432, 5, 49, 851968, 4, 65585, 851968, 5, 131121, 851968, 5, 196657, 851968, 5, 262193, 851968, 5, 327729, 851968, 5, -65497, 983040, 3, -589774, 720896, 4, -524238, 720896, 5, -458702, 720896, 5, -393166, 720896, 5, -327630, 720896, 5, -262094, 720896, 5, -196558, 720896, 5, -131022, 720896, 5, -65486, 720896, 5, 50, 720896, 5, 65586, 720896, 5, 131122, 720896, 5, 196658, 720896, 5, 262194, 720896, 5, 327730, 720896, 5, -589773, 786432, 4, -524237, 786432, 5, -458701, 786432, 5, -393165, 786432, 5, -327629, 786432, 5, -262093, 786432, 5, -196557, 786432, 5, -131021, 786432, 5, -65485, 786432, 5, 51, 786432, 5, 65587, 786432, 5, 131123, 786432, 5, 196659, 786432, 5, 262195, 786432, 5, 327731, 786432, 5, -589772, 786432, 4, -524236, 786432, 5, -458700, 786432, 5, -393164, 786432, 5, -327628, 786432, 5, -262092, 786432, 5, -196556, 786432, 5, -131020, 786432, 5, -65484, 786432, 5, 52, 786432, 5, 65588, 786432, 5, 131124, 786432, 5, 196660, 786432, 5, 262196, 786432, 5, 327732, 786432, 5, -589771, 786432, 4, -524235, 786432, 5, -458699, 786432, 5, -393163, 786432, 5, -327627, 786432, 5, -262091, 786432, 5, -196555, 786432, 5, -131019, 786432, 5, -65483, 786432, 5, 53, 786432, 5, 65589, 786432, 5, 131125, 786432, 5, 196661, 786432, 5, 262197, 786432, 5, 327733, 786432, 5, -589770, 786432, 4, -524234, 786432, 5, -458698, 786432, 5, -393162, 786432, 5, -327626, 786432, 5, -262090, 786432, 5, -196554, 786432, 5, -131018, 786432, 5, -65482, 786432, 5, 54, 786432, 5, 65590, 786432, 5, 131126, 786432, 5, 196662, 786432, 5, 262198, 786432, 5, 327734, 786432, 5, -589769, 786432, 4, -524233, 786432, 5, -458697, 786432, 5, -393161, 786432, 5, -327625, 786432, 5, -262089, 786432, 5, -196553, 786432, 5, -131017, 786432, 5, -65481, 786432, 5, 55, 786432, 5, 65591, 786432, 5, 131127, 786432, 5, 196663, 786432, 5, 262199, 786432, 5, 327735, 786432, 5, -589768, 786432, 4, -524232, 786432, 5, -458696, 786432, 5, -393160, 786432, 5, -327624, 786432, 5, -262088, 786432, 5, -196552, 786432, 5, -131016, 786432, 5, -65480, 786432, 5, 56, 786432, 5, 65592, 786432, 5, 131128, 786432, 5, 196664, 786432, 5, 262200, 786432, 5, 327736, 786432, 5, -589767, 786432, 4, -524231, 786432, 5, -458695, 786432, 5, -393159, 786432, 5, -327623, 786432, 5, -262087, 786432, 5, -196551, 786432, 5, -131015, 786432, 5, -65479, 786432, 5, 57, 786432, 5, 65593, 786432, 5, 131129, 786432, 5, 196665, 786432, 5, 262201, 786432, 5, 327737, 786432, 5, -589766, 786432, 4, -524230, 786432, 5, -458694, 786432, 5, -393158, 786432, 5, -327622, 786432, 5, -262086, 786432, 5, -196550, 786432, 5, -131014, 786432, 5, -65478, 786432, 5, 58, 786432, 5, 65594, 786432, 5, 131130, 786432, 5, 196666, 786432, 5, 262202, 786432, 5, 327738, 786432, 5, -589765, 851968, 4, -524229, 851968, 5, -458693, 851968, 5, -393157, 851968, 5, -327621, 851968, 5, -262085, 851968, 5, -196549, 851968, 5, -131013, 851968, 5, -65477, 851968, 5, 59, 851968, 5, 65595, 851968, 5, 131131, 851968, 5, 196667, 851968, 5, 262203, 851968, 5, 327739, 851968, 5, 28, 786432, 4, 65564, 786432, 5, 131100, 786432, 5, 196636, 786432, 5, 262172, 786432, 5, 327708, 786432, 5, 29, 786432, 4, 65565, 786432, 5, 131101, 786432, 5, 196637, 786432, 5, 262173, 786432, 5, 327709, 786432, 5, 30, 786432, 4, 65566, 786432, 5, 131102, 786432, 5, 196638, 786432, 5, 262174, 786432, 5, 327710, 786432, 5, 31, 786432, 4, 65567, 786432, 5, 131103, 786432, 5, 196639, 786432, 5, 262175, 786432, 5, 327711, 786432, 5, 32, 786432, 4, 65568, 786432, 5, 131104, 786432, 5, 196640, 786432, 5, 262176, 786432, 5, 327712, 786432, 5, 33, 786432, 4, 65569, 786432, 5, 131105, 786432, 5, 196641, 786432, 5, 262177, 786432, 5, 327713, 786432, 5, 34, 786432, 4, 65570, 786432, 5, 131106, 786432, 5, 196642, 786432, 5, 262178, 786432, 5, 327714, 786432, 5, 35, 786432, 4, 65571, 786432, 5, 131107, 786432, 5, 196643, 786432, 5, 262179, 786432, 5, 327715, 786432, 5, 36, 786432, 4, 65572, 786432, 5, 131108, 786432, 5, 196644, 786432, 5, 262180, 786432, 5, 327716, 786432, 5, 37, 786432, 4, 65573, 786432, 5, 131109, 786432, 5, 196645, 786432, 5, 262181, 786432, 5, 327717, 786432, 5, -65487, 458752, 6, -131023, 458752, 5, -196559, 458752, 5, -262095, 458752, 5, -327631, 458752, 5, -393167, 458752, 5, -458703, 458752, 5, -524239, 458752, 5, -589775, 458752, 4) + +[node name="UI" type="CanvasLayer" parent="."] + +[node name="UIInventory" parent="UI" instance=ExtResource("2_v5qg2")] +unique_name_in_owner = true +visible = false + +[node name="UISign" parent="UI" instance=ExtResource("3_oqmwp")] +unique_name_in_owner = true +visible = false + +[node name="CharacterBody2D" parent="." instance=ExtResource("5_pr2x5")] +unique_name_in_owner = true +position = Vector2(66, -50) + +[node name="RoomLeftPhantomCamera2D" type="Node2D" parent="." node_paths=PackedStringArray("follow_target")] +unique_name_in_owner = true +position = Vector2(66, -113.205) +script = ExtResource("4_4b648") +priority = 5 +follow_mode = 2 +follow_target = NodePath("../CharacterBody2D/PlayerVisuals") +zoom = Vector2(2, 2) +tween_resource = SubResource("Resource_ct1eh") +follow_offset = Vector2(0, -63.205) +follow_damping = true +draw_limits = true +limit_target = NodePath("../TileMap") +limit_margin = Vector4i(-50, 0, -50, 0) + +[node name="RoomLeftArea2D" type="Area2D" parent="."] +unique_name_in_owner = true +position = Vector2(117, -174) + +[node name="CollisionShape2D" type="CollisionShape2D" parent="RoomLeftArea2D"] +position = Vector2(-79, 43) +shape = SubResource("RectangleShape2D_xmxri") +debug_color = Color(0, 0.6, 0.701961, 0.0313726) + +[node name="RoomCentrePhantomCamera2D" type="Node2D" parent="."] +unique_name_in_owner = true +position = Vector2(1474, -149) +script = ExtResource("4_4b648") +follow_mode = 2 +zoom = Vector2(1.5, 1.5) +tween_resource = SubResource("Resource_exr3j") +follow_damping = true +draw_limits = true +limit_target = NodePath("../RoomCentreArea2D/CollisionShape2D") + +[node name="RoomCentreArea2D" type="Area2D" parent="."] +unique_name_in_owner = true +position = Vector2(755, -179) + +[node name="CollisionShape2D" type="CollisionShape2D" parent="RoomCentreArea2D"] +position = Vector2(338, -28) +shape = SubResource("RectangleShape2D_wtfjw") +debug_color = Color(0, 0.6, 0.701961, 0) + +[node name="RoomRightArea2D" type="Area2D" parent="."] +unique_name_in_owner = true +position = Vector2(2065, -160) + +[node name="CollisionShape2D" type="CollisionShape2D" parent="RoomRightArea2D"] +position = Vector2(255.75, -3.25) +shape = SubResource("RectangleShape2D_daeuh") +debug_color = Color(0, 0.6, 0.701961, 0) + +[node name="RoomRightPhantomCamera2D" type="Node2D" parent="."] +unique_name_in_owner = true +position = Vector2(2347, -156) +scale = Vector2(1.0024, 1) +script = ExtResource("4_4b648") +follow_mode = 2 +zoom = Vector2(2, 2) +tween_resource = SubResource("Resource_exr3j") +follow_damping = true +draw_limits = true + +[node name="Camera2D" type="Camera2D" parent="."] +position = Vector2(66, -113.205) +zoom = Vector2(2, 2) +limit_left = -387 +limit_top = -528 +limit_right = 433 +limit_bottom = 288 +position_smoothing_speed = 10.0 +editor_draw_limits = true + +[node name="PhantomCameraHost" type="Node" parent="Camera2D"] +script = ExtResource("9_w5e16") + +[editable path="CharacterBody2D"] diff --git a/addons/phantom_camera/examples/example_scenes/2D/2d_tweening_example_scene.tscn b/addons/phantom_camera/examples/example_scenes/2D/2d_tweening_example_scene.tscn new file mode 100644 index 0000000..24d9a1a --- /dev/null +++ b/addons/phantom_camera/examples/example_scenes/2D/2d_tweening_example_scene.tscn @@ -0,0 +1,793 @@ +[gd_scene load_steps=19 format=3 uid="uid://cpyb3ucwcqj8l"] + +[ext_resource type="Texture2D" uid="uid://c77npili4pel4" path="res://addons/phantom_camera/examples/textures/2D/level_spritesheet.png" id="1_oo2bo"] +[ext_resource type="PackedScene" uid="uid://dg7rhrymsrrrm" path="res://addons/phantom_camera/examples/ui/ui_inventory.tscn" id="2_as4e6"] +[ext_resource type="PackedScene" uid="uid://iq5xd1ob1res" path="res://addons/phantom_camera/examples/ui/ui_sign.tscn" id="3_6yi7w"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/phantom_camera_host/phantom_camera_host.gd" id="4_bb7en"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/phantom_camera/phantom_camera_2d.gd" id="5_kikl5"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/resources/tween_resource.gd" id="6_8u8cj"] +[ext_resource type="Resource" uid="uid://euybd2w0bax" path="res://addons/phantom_camera/examples/resources/tween/player_phantom_camera_2d_tween.tres" id="6_gu0o0"] +[ext_resource type="PackedScene" uid="uid://7kh0xydx0b1o" path="res://addons/phantom_camera/examples/example_scenes/2D/sub_scenes/playable_character_2d.tscn" id="8_g1syc"] +[ext_resource type="Script" path="res://addons/phantom_camera/examples/scripts/2D/2d_trigger_area.gd" id="9_184pu"] +[ext_resource type="FontFile" uid="uid://c4mm3of2mc8o5" path="res://addons/phantom_camera/fonts/Nunito-Black.ttf" id="11_myq47"] + +[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_easgx"] +texture = ExtResource("1_oo2bo") +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_1/linear_velocity = Vector2(0, 0) +0:0/0/physics_layer_1/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 +1:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +1:0/0/physics_layer_1/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 +2:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +2:0/0/physics_layer_1/angular_velocity = 0.0 +3:0/0 = 0 +3:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:0/0/physics_layer_0/angular_velocity = 0.0 +3:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:0/0/physics_layer_1/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 +4:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:0/0/physics_layer_1/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 +5:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +5:0/0/physics_layer_1/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 +6:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +6:0/0/physics_layer_1/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 +7:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +7:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:0/0/physics_layer_1/angular_velocity = 0.0 +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_1/linear_velocity = Vector2(0, 0) +0:1/0/physics_layer_1/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 +1:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +1:1/0/physics_layer_1/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_1/linear_velocity = Vector2(0, 0) +2:1/0/physics_layer_1/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 +3:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:1/0/physics_layer_1/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 +4:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:1/0/physics_layer_1/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 +5:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +5:1/0/physics_layer_1/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 +7:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +7:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:1/0/physics_layer_1/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 +2:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +2:2/0/physics_layer_1/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 +3:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:2/0/physics_layer_1/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 +4:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:2/0/physics_layer_1/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 +7:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +7:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:2/0/physics_layer_1/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 +3:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:3/0/physics_layer_1/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 +4:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:3/0/physics_layer_1/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 +7:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +7:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:3/0/physics_layer_1/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 +3:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:4/0/physics_layer_1/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 +4:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:4/0/physics_layer_1/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 +5:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +5:4/0/physics_layer_1/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 +7:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:4/0/physics_layer_1/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 +3:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:5/0/physics_layer_1/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 +4:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:5/0/physics_layer_1/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 +7:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:5/0/physics_layer_1/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 +3:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:6/0/physics_layer_1/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 +4:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:6/0/physics_layer_1/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 +7:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:6/0/physics_layer_1/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 +2:7/0/physics_layer_1/linear_velocity = Vector2(0, 0) +2:7/0/physics_layer_1/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 +3:7/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:7/0/physics_layer_1/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 +4:7/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:7/0/physics_layer_1/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 +5:7/0/physics_layer_1/linear_velocity = Vector2(0, 0) +5:7/0/physics_layer_1/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 +8:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +8:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:0/0/physics_layer_1/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 +9:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +9:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:0/0/physics_layer_1/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) +10:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:0/0/physics_layer_1/angular_velocity = 0.0 +11:0/0 = 0 +11:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:0/0/physics_layer_0/angular_velocity = 0.0 +11:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +11:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:0/0/physics_layer_1/angular_velocity = 0.0 +12:0/0 = 0 +12:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:0/0/physics_layer_0/angular_velocity = 0.0 +12:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:0/0/physics_layer_1/angular_velocity = 0.0 +13:0/0 = 0 +13:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:0/0/physics_layer_0/angular_velocity = 0.0 +13:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +13:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:0/0/physics_layer_1/angular_velocity = 0.0 +14:0/0 = 0 +14:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:0/0/physics_layer_0/angular_velocity = 0.0 +14:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:0/0/physics_layer_1/angular_velocity = 0.0 +14:0/0/physics_layer_1/polygon_0/points = PackedVector2Array(8, -8, 8, 8, -8, 8) +14:0/0/custom_data_0 = &"Sign" +15:0/0 = 0 +15:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:0/0/physics_layer_0/angular_velocity = 0.0 +15:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:0/0/physics_layer_1/angular_velocity = 0.0 +16:0/0 = 0 +16:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:0/0/physics_layer_0/angular_velocity = 0.0 +16:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:0/0/physics_layer_1/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 +8:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +8:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:1/0/physics_layer_1/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 +9:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +9:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:1/0/physics_layer_1/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) +10:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:1/0/physics_layer_1/angular_velocity = 0.0 +11:1/0 = 0 +11:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:1/0/physics_layer_0/angular_velocity = 0.0 +11:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +11:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:1/0/physics_layer_1/angular_velocity = 0.0 +12:1/0 = 0 +12:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:1/0/physics_layer_0/angular_velocity = 0.0 +12:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:1/0/physics_layer_1/angular_velocity = 0.0 +13:1/0 = 0 +13:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:1/0/physics_layer_0/angular_velocity = 0.0 +13:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +13:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:1/0/physics_layer_1/angular_velocity = 0.0 +14:1/0 = 0 +14:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:1/0/physics_layer_0/angular_velocity = 0.0 +14:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:1/0/physics_layer_1/angular_velocity = 0.0 +15:1/0 = 0 +15:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:1/0/physics_layer_0/angular_velocity = 0.0 +15:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:1/0/physics_layer_1/angular_velocity = 0.0 +16:1/0 = 0 +16:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:1/0/physics_layer_0/angular_velocity = 0.0 +16:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:1/0/physics_layer_1/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 +8:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +8:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:2/0/physics_layer_1/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 +9:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +9:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:2/0/physics_layer_1/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) +10:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:2/0/physics_layer_1/angular_velocity = 0.0 +11:2/0 = 0 +11:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:2/0/physics_layer_0/angular_velocity = 0.0 +11:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +11:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:2/0/physics_layer_1/angular_velocity = 0.0 +12:2/0 = 0 +12:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:2/0/physics_layer_0/angular_velocity = 0.0 +12:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:2/0/physics_layer_1/angular_velocity = 0.0 +13:2/0 = 0 +13:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:2/0/physics_layer_0/angular_velocity = 0.0 +13:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +13:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:2/0/physics_layer_1/angular_velocity = 0.0 +14:2/0 = 0 +14:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:2/0/physics_layer_0/angular_velocity = 0.0 +14:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:2/0/physics_layer_1/angular_velocity = 0.0 +15:2/0 = 0 +15:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:2/0/physics_layer_0/angular_velocity = 0.0 +15:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:2/0/physics_layer_1/angular_velocity = 0.0 +16:2/0 = 0 +16:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:2/0/physics_layer_0/angular_velocity = 0.0 +16:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:2/0/physics_layer_1/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 +8:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +8:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:3/0/physics_layer_1/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 +9:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +9:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:3/0/physics_layer_1/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) +10:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:3/0/physics_layer_1/angular_velocity = 0.0 +11:3/0 = 0 +11:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:3/0/physics_layer_0/angular_velocity = 0.0 +11:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:3/0/physics_layer_1/angular_velocity = 0.0 +12:3/0 = 0 +12:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:3/0/physics_layer_0/angular_velocity = 0.0 +12:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:3/0/physics_layer_1/angular_velocity = 0.0 +13:3/0 = 0 +13:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:3/0/physics_layer_0/angular_velocity = 0.0 +13:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +13:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:3/0/physics_layer_1/angular_velocity = 0.0 +14:3/0 = 0 +14:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:3/0/physics_layer_0/angular_velocity = 0.0 +14:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:3/0/physics_layer_1/angular_velocity = 0.0 +15:3/0 = 0 +15:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:3/0/physics_layer_0/angular_velocity = 0.0 +15:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:3/0/physics_layer_1/angular_velocity = 0.0 +16:3/0 = 0 +16:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:3/0/physics_layer_0/angular_velocity = 0.0 +16:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:3/0/physics_layer_1/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 +8:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:4/0/physics_layer_1/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 +9:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:4/0/physics_layer_1/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_1/linear_velocity = Vector2(0, 0) +10:4/0/physics_layer_1/angular_velocity = 0.0 +11:4/0 = 0 +11:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:4/0/physics_layer_0/angular_velocity = 0.0 +11:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-7, 2.5, -5, -2, -2.5, -5, 2, -7, 8, -8, 8, 8, -8, 8) +11:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:4/0/physics_layer_1/angular_velocity = 0.0 +12:4/0 = 0 +12:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:4/0/physics_layer_0/angular_velocity = 0.0 +12:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:4/0/physics_layer_1/angular_velocity = 0.0 +13:4/0 = 0 +13:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:4/0/physics_layer_0/angular_velocity = 0.0 +13:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 0, -6, 4, -1.5, 6.5, 1.5, 8, 8, -8, 8) +13:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:4/0/physics_layer_1/angular_velocity = 0.0 +14:4/0 = 0 +14:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:4/0/physics_layer_0/angular_velocity = 0.0 +14:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:4/0/physics_layer_1/angular_velocity = 0.0 +14:4/0/physics_layer_1/polygon_0/points = PackedVector2Array(-8, -8, -8, 8, 8, 8, 8, -8) +14:4/0/custom_data_0 = &"Inventory" +15:4/0 = 0 +15:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:4/0/physics_layer_0/angular_velocity = 0.0 +15:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:4/0/physics_layer_1/angular_velocity = 0.0 +16:4/0 = 0 +16:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:4/0/physics_layer_0/angular_velocity = 0.0 +16:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:4/0/physics_layer_1/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 +8:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:5/0/physics_layer_1/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 +9:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:5/0/physics_layer_1/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_1/linear_velocity = Vector2(0, 0) +10:5/0/physics_layer_1/angular_velocity = 0.0 +11:5/0 = 0 +11:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:5/0/physics_layer_0/angular_velocity = 0.0 +11:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +11:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:5/0/physics_layer_1/angular_velocity = 0.0 +12:5/0 = 0 +12:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:5/0/physics_layer_0/angular_velocity = 0.0 +12:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:5/0/physics_layer_1/angular_velocity = 0.0 +13:5/0 = 0 +13:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:5/0/physics_layer_0/angular_velocity = 0.0 +13:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +13:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:5/0/physics_layer_1/angular_velocity = 0.0 +14:5/0 = 0 +14:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:5/0/physics_layer_0/angular_velocity = 0.0 +14:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:5/0/physics_layer_1/angular_velocity = 0.0 +15:5/0 = 0 +15:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:5/0/physics_layer_0/angular_velocity = 0.0 +15:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:5/0/physics_layer_1/angular_velocity = 0.0 +16:5/0 = 0 +16:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:5/0/physics_layer_0/angular_velocity = 0.0 +16:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:5/0/physics_layer_1/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 +8:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:6/0/physics_layer_1/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 +9:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:6/0/physics_layer_1/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_1/linear_velocity = Vector2(0, 0) +10:6/0/physics_layer_1/angular_velocity = 0.0 +11:6/0 = 0 +11:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:6/0/physics_layer_0/angular_velocity = 0.0 +11:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, 1, 6.5, -3, 3, -6.5, -1.5) +11:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:6/0/physics_layer_1/angular_velocity = 0.0 +12:6/0 = 0 +12:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:6/0/physics_layer_0/angular_velocity = 0.0 +12:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:6/0/physics_layer_1/angular_velocity = 0.0 +13:6/0 = 0 +13:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:6/0/physics_layer_0/angular_velocity = 0.0 +13:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 6, -0.5, 3, 3.5, -1.5, 6.5, -8, 8) +13:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:6/0/physics_layer_1/angular_velocity = 0.0 +14:6/0 = 0 +14:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:6/0/physics_layer_0/angular_velocity = 0.0 +14:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:6/0/physics_layer_1/angular_velocity = 0.0 +15:6/0 = 0 +15:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:6/0/physics_layer_0/angular_velocity = 0.0 +15:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:6/0/physics_layer_1/angular_velocity = 0.0 +16:6/0 = 0 +16:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:6/0/physics_layer_0/angular_velocity = 0.0 +16:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:6/0/physics_layer_1/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 +5:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +5:3/0/physics_layer_1/angular_velocity = 0.0 + +[sub_resource type="TileSet" id="TileSet_kf7eg"] +physics_layer_0/collision_layer = 1 +physics_layer_1/collision_layer = 2 +physics_layer_1/collision_mask = 2 +custom_data_layer_0/name = "Type" +custom_data_layer_0/type = 21 +sources/0 = SubResource("TileSetAtlasSource_easgx") + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_tgk1y"] +size = Vector2(140, 160) + +[sub_resource type="Resource" id="Resource_mtp70"] +script = ExtResource("6_8u8cj") +duration = 0.6 +transition = 1 +ease = 2 + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_clm0y"] +size = Vector2(104, 160) + +[sub_resource type="Resource" id="Resource_8jg5c"] +script = ExtResource("6_8u8cj") +duration = 0.3 +transition = 8 +ease = 2 + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_uka0w"] +size = Vector2(560, 160) + +[sub_resource type="Resource" id="Resource_e4e41"] +script = ExtResource("6_8u8cj") +duration = 1.2 +transition = 10 +ease = 2 + +[node name="ExampleScene2D" type="Node2D"] + +[node name="Background" type="CanvasLayer" parent="."] +layer = -3 + +[node name="ColorRect" type="ColorRect" parent="Background"] +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_left = -311.0 +offset_top = -173.0 +offset_right = 981.0 +offset_bottom = 548.0 +grow_horizontal = 2 +grow_vertical = 2 +auto_translate = false +localize_numeral_system = false +color = Color(0.137255, 0.14902, 0.196078, 1) + +[node name="TileMap" type="TileMap" parent="."] +z_index = -1 +scale = Vector2(3, 3) +tile_set = SubResource("TileSet_kf7eg") +format = 2 +layer_0/name = "Background" +layer_0/tile_data = PackedInt32Array(-393216, 655360, 2, -327680, 655360, 3, -262144, 655360, 3, -196608, 655360, 3, -131072, 655360, 3, -65536, 655360, 3, -393215, 720896, 2, -327679, 720896, 1, -262143, 720896, 1, -196607, 720896, 1, -131071, 720896, 1, -65535, 720896, 1, -393214, 786432, 2, -327678, 786432, 3, -262142, 786432, 3, -196606, 786432, 3, -131070, 786432, 3, -65534, 786432, 3) +layer_1/name = "Terrain" +layer_1/z_index = 1 +layer_1/tile_data = PackedInt32Array(1, 720896, 0, 2, 720896, 0, 3, 720896, 0, 4, 720896, 0, 5, 720896, 0, 6, 720896, 0, 7, 720896, 0, 8, 720896, 0, 9, 786432, 0, 65545, 786432, 1, 131081, 786432, 1, 196617, 786432, 1, 262153, 786432, 1, 327689, 786432, 1, 393225, 786432, 1, 65537, 720896, 1, 131073, 720896, 1, 196609, 720896, 1, 262145, 458752, 1, 327681, 720896, 1, 393217, 720896, 1, 65538, 720896, 1, 131074, 720896, 1, 196610, 720896, 1, 262146, 720896, 1, 327682, 720896, 1, 393218, 720896, 1, 65539, 720896, 1, 131075, 720896, 1, 196611, 720896, 1, 262147, 720896, 1, 327683, 720896, 1, 393219, 720896, 1, 65540, 458752, 1, 131076, 720896, 1, 196612, 720896, 1, 262148, 720896, 1, 327684, 720896, 1, 393220, 720896, 1, 65541, 720896, 1, 131077, 720896, 1, 196613, 720896, 1, 262149, 458752, 1, 327685, 720896, 1, 393221, 720896, 1, 65542, 720896, 1, 131078, 720896, 1, 196614, 720896, 1, 262150, 720896, 1, 327686, 720896, 1, 393222, 720896, 1, 65543, 720896, 1, 131079, 720896, 1, 196615, 720896, 1, 262151, 720896, 1, 327687, 720896, 1, 393223, 458752, 1, 65544, 720896, 1, 131080, 720896, 1, 196616, 458752, 1, 262152, 720896, 1, 327688, 720896, 1, 393224, 720896, 1, 65546, 524288, 5, 65547, 524288, 5, 65548, 524288, 5, 65549, 524288, 5, 131082, 524288, 6, 131083, 524288, 6, 131084, 524288, 6, 131085, 524288, 6, 196618, 720896, 1, 262154, 720896, 1, 196619, 720896, 1, 262155, 720896, 1, 196620, 720896, 1, 262156, 720896, 1, 196621, 720896, 1, 262157, 720896, 1, 65550, 524288, 5, 65551, 524288, 5, 65552, 524288, 5, 131086, 524288, 6, 131087, 524288, 6, 131088, 524288, 6, 196622, 720896, 1, 196623, 720896, 1, 262159, 720896, 1, 262160, 720896, 1, 196624, 720896, 1, 262158, 720896, 1, 17, 720896, 4, 65553, 720896, 5, 131089, 720896, 5, 196625, 720896, 5, 262161, 720896, 5, 18, 786432, 4, 19, 786432, 4, 20, 786432, 4, 21, 786432, 4, 22, 786432, 4, 23, 786432, 4, 65554, 786432, 5, 131090, 786432, 5, 196626, 786432, 5, 262162, 786432, 5, 65555, 786432, 5, 131091, 589824, 6, 196627, 786432, 5, 262163, 786432, 5, 65556, 786432, 5, 131092, 786432, 5, 196628, 786432, 5, 262164, 786432, 5, 65557, 786432, 5, 131093, 786432, 5, 196629, 786432, 5, 262165, 786432, 5, 65558, 786432, 5, 131094, 786432, 5, 196630, 786432, 5, 262166, 655360, 6, 65559, 786432, 5, 131095, 786432, 5, 196631, 786432, 5, 262167, 786432, 5, 327697, 720896, 5, 393233, 720896, 5, 327698, 589824, 6, 393234, 786432, 5, 327699, 786432, 5, 393235, 786432, 5, 327700, 786432, 5, 393236, 786432, 5, 327701, 786432, 5, 393237, 786432, 5, 327702, 786432, 5, 393238, 786432, 5, 327703, 786432, 5, 393239, 786432, 5, -131062, 720896, 4, -131061, 786432, 4, -131060, 786432, 4, -65526, 720896, 6, -65525, 786432, 6, -65524, 786432, 6, -131056, 851968, 4, -65520, 851968, 6, -131059, 786432, 4, -131058, 786432, 4, -131057, 786432, 4, -65523, 786432, 6, -65522, 786432, 6, -65521, 786432, 6, -65536, 917504, 2, -65535, 983040, 2, -65534, 1048576, 2, -65533, 917504, 2, -65532, 983040, 2, -65531, 1048576, 2, -65530, 917504, 2, -65529, 983040, 2, -65528, 1048576, 2, 65535, 655360, 0, 131071, 655360, 1, 196607, 655360, 1, 262143, 655360, 1, 327679, 655360, 1, 393215, 655360, 1, 458751, 655360, 1, 524287, 655360, 1, 589823, 655360, 1, 0, 720896, 0, 65536, 720896, 1, 131072, 720896, 1, 196608, 720896, 1, 262144, 720896, 1, 327680, 720896, 1, 393216, 720896, 1, 458752, 720896, 1, 524288, 720896, 1, 524289, 720896, 1, 524290, 720896, 1, 524291, 720896, 1, 524292, 720896, 1, 524293, 720896, 1, 524294, 720896, 1, 524295, 720896, 1, 524296, 720896, 1, 524297, 786432, 1, 458761, 786432, 1, 458760, 720896, 1, 458759, 720896, 1, 458758, 458752, 1, 458757, 720896, 1, 458756, 720896, 1, 458755, 720896, 1, 458754, 720896, 1, 458753, 720896, 1, -262145, 851968, 4, -196609, 851968, 5, -131073, 851968, 5, -65537, 851968, 5, -1, 851968, 6, -262146, 786432, 4, -262147, 786432, 4, -196610, 589824, 6, -196611, 786432, 5, -6, 786432, 5, -5, 786432, 5, -4, 786432, 5, -3, 786432, 5, -2, 786432, 5, -65538, 786432, 5, -131074, 786432, 5, -131075, 786432, 5, -65539, 655360, 6, 65534, 851968, 5, 131070, 851968, 5, 196606, 851968, 5, 262142, 851968, 5, 327678, 851968, 5, 393214, 851968, 5, 458750, 851968, 5, 65533, 786432, 5, 65532, 786432, 5, 65531, 786432, 5, 65530, 786432, 5, 65529, 720896, 5, 131066, 786432, 5, 196602, 786432, 5, 262138, 786432, 5, 262139, 786432, 5, 327675, 786432, 5, 131068, 786432, 5, 131069, 786432, 5, 196605, 786432, 5, 262141, 786432, 5, 327677, 786432, 5, 393213, 786432, 5, 458749, 786432, 5, 393212, 786432, 5, 393211, 786432, 5, 458748, 786432, 5, 327676, 655360, 6, 262140, 786432, 5, 196604, 786432, 5, 131067, 786432, 5, 196603, 589824, 6, 458747, 786432, 5, 458746, 786432, 5, 393210, 786432, 5, 327674, 786432, 5, -7, 720896, 5, 131065, 720896, 5, 196601, 720896, 5, 262137, 720896, 5, 327673, 720896, 5, 393209, 720896, 5, 458745, 720896, 5, -327684, 720896, 3, -196594, 720896, 3, -196597, 720896, 3, -65518, 720896, 3, -65516, 720896, 3, -327686, 1048576, 5, -327685, 720896, 3, -196595, 917504, 6, -65514, 983040, 6, -327683, 983040, 5, -65513, 1048576, 5, -262151, 720896, 4, -196615, 720896, 5, -131079, 720896, 5, -65543, 720896, 5, -262150, 786432, 4, -196614, 655360, 6, -131078, 786432, 5, -65542, 786432, 5, -262149, 786432, 4, -196613, 786432, 5, -131077, 786432, 5, -65541, 786432, 5, -262148, 786432, 4, -196612, 786432, 5, -131076, 786432, 5, -65540, 786432, 5, 458769, 720896, 5, 458775, 786432, 5, 458774, 786432, 5, 458773, 786432, 5, 458772, 786432, 5, 458771, 786432, 5, 458770, 786432, 5, 327690, 720896, 1, 393226, 720896, 1, 458762, 720896, 1, 524298, 720896, 1, 327691, 720896, 1, 393227, 720896, 1, 458763, 720896, 1, 524299, 720896, 1, 327692, 720896, 1, 393228, 720896, 1, 458764, 720896, 1, 524300, 720896, 1, 327693, 720896, 1, 393229, 720896, 1, 458765, 720896, 1, 524301, 720896, 1, 327694, 720896, 1, 393230, 720896, 1, 458766, 720896, 1, 524302, 720896, 1, 327695, 720896, 1, 393231, 720896, 1, 458767, 720896, 1, 524303, 720896, 1, 327696, 720896, 1, 393232, 720896, 1, 458768, 720896, 1, 524304, 720896, 1, 29, 851968, 4, 65565, 851968, 5, 131101, 851968, 5, 196637, 851968, 5, 262173, 851968, 5, 327709, 851968, 5, 393245, 851968, 5, 458781, 851968, 5, 24, 786432, 4, 25, 786432, 4, 26, 786432, 4, 27, 786432, 4, 28, 786432, 4, 65560, 786432, 5, 65561, 786432, 5, 65562, 786432, 5, 65563, 786432, 5, 65564, 786432, 5, 131100, 786432, 5, 196636, 589824, 6, 131099, 786432, 5, 131098, 786432, 5, 131097, 786432, 5, 131096, 786432, 5, 196632, 786432, 5, 262168, 786432, 5, 327704, 786432, 5, 393240, 786432, 5, 458776, 786432, 5, 196633, 786432, 5, 262169, 786432, 5, 327705, 786432, 5, 393241, 786432, 5, 458777, 786432, 5, 196634, 786432, 5, 262170, 786432, 5, 327706, 786432, 5, 393242, 655360, 6, 458778, 786432, 5, 196635, 786432, 5, 262171, 786432, 5, 327707, 786432, 5, 393243, 786432, 5, 458779, 786432, 5, 262172, 786432, 5, 327708, 786432, 5, 393244, 786432, 5, 458780, 786432, 5, -196593, 1048576, 6, -393182, 1048576, 6, -393185, 917504, 6, -393180, 983040, 6, -393184, 983040, 5, -65509, 720896, 3, -65510, 720896, 3, -393181, 720896, 3, -393183, 720896, 3, -65517, 720896, 3, -65515, 720896, 3, -327650, 720896, 4, -262114, 720896, 5, -196578, 720896, 5, -131042, 720896, 5, -65506, 720896, 5, -327649, 786432, 4, -327648, 786432, 4, -327647, 786432, 4, -327646, 786432, 4, -327645, 786432, 4, -327644, 786432, 4, -327643, 786432, 4, -65499, 786432, 5, -131035, 786432, 5, -196571, 786432, 5, -262107, 655360, 6, -262108, 786432, 5, -262109, 786432, 5, -262110, 786432, 5, -262111, 786432, 5, -262112, 786432, 5, -262113, 786432, 5, -196577, 655360, 6, -131041, 786432, 5, -65505, 786432, 5, -65500, 655360, 6, -131036, 589824, 6, -196572, 786432, 5, -196573, 786432, 5, -196574, 786432, 5, -196575, 786432, 5, -196576, 786432, 5, -131040, 589824, 6, -65504, 786432, 5, -65501, 786432, 5, -131037, 786432, 5, -131038, 786432, 5, -131039, 786432, 5, -65503, 786432, 5, -65502, 786432, 5, 524318, 720896, 6, 458782, 720896, 5, 393246, 720896, 5, 327710, 720896, 5, 262174, 720896, 5, 196638, 720896, 5, 131102, 720896, 5, 65566, 720896, 5, 30, 720896, 5, 524319, 786432, 6, 524320, 786432, 6, 524321, 786432, 6, 524322, 786432, 6, 524323, 786432, 6, 524324, 786432, 6, 524325, 786432, 6, 31, 786432, 5, 65567, 786432, 5, 131103, 786432, 5, 196639, 786432, 5, 262175, 786432, 5, 327711, 786432, 5, 393247, 655360, 6, 458783, 786432, 5, 32, 786432, 5, 65568, 786432, 5, 131104, 786432, 5, 196640, 786432, 5, 262176, 786432, 5, 327712, 786432, 5, 393248, 786432, 5, 458784, 786432, 5, 33, 786432, 5, 65569, 786432, 5, 131105, 655360, 6, 196641, 786432, 5, 262177, 786432, 5, 327713, 786432, 5, 393249, 786432, 5, 458785, 786432, 5, 34, 786432, 5, 65570, 786432, 5, 131106, 786432, 5, 196642, 786432, 5, 262178, 655360, 6, 327714, 655360, 6, 393250, 786432, 5, 458786, 786432, 5, 35, 786432, 5, 65571, 786432, 5, 131107, 786432, 5, 196643, 786432, 5, 262179, 786432, 5, 327715, 786432, 5, 393251, 786432, 5, 458787, 786432, 5, 36, 655360, 6, 65572, 786432, 5, 131108, 786432, 5, 196644, 786432, 5, 262180, 786432, 5, 327716, 786432, 5, 393252, 786432, 5, 458788, 655360, 6, 37, 786432, 5, 65573, 786432, 5, 131109, 786432, 5, 196645, 786432, 5, 262181, 655360, 6, 327717, 786432, 5, 393253, 786432, 5, 458789, 786432, 5, 524281, 720896, 5, 524285, 786432, 5, 524284, 786432, 5, 524283, 786432, 5, 524282, 786432, 5, 589818, 786432, 5, 589819, 786432, 5, 589820, 786432, 5, 655356, 786432, 5, 655357, 786432, 5, 589821, 786432, 5, 655355, 786432, 5, 655354, 786432, 5, 720890, 786432, 5, 720891, 786432, 5, 720892, 786432, 5, 720893, 786432, 5, 720894, 851968, 5, 786429, 786432, 5, 786428, 786432, 5, 786427, 786432, 5, 786426, 786432, 5, 851962, 786432, 5, 917498, 786432, 5, 917499, 786432, 5, 851964, 786432, 5, 851965, 786432, 5, 917501, 786432, 5, 917500, 786432, 5, 851963, 786432, 5, 589817, 720896, 5, 655353, 720896, 5, 720889, 720896, 5, 786425, 720896, 5, 851961, 720896, 5, 917497, 720896, 5, 524286, 851968, 5, 589822, 851968, 5, 655358, 851968, 5, 786430, 851968, 5, 851966, 851968, 5, 917502, 851968, 5, 589824, 720896, 1, 655360, 720896, 1, 720896, 720896, 1, 786432, 720896, 1, 851968, 720896, 1, 589825, 720896, 1, 655361, 720896, 1, 720897, 720896, 1, 786433, 720896, 1, 851969, 720896, 1, 589826, 720896, 1, 655362, 720896, 1, 720898, 720896, 1, 786434, 720896, 1, 851970, 720896, 1, 589827, 720896, 1, 655363, 720896, 1, 720899, 720896, 1, 786435, 720896, 1, 851971, 720896, 1, 589828, 720896, 1, 655364, 720896, 1, 720900, 720896, 1, 786436, 720896, 1, 851972, 720896, 1, 589829, 720896, 1, 655365, 720896, 1, 720901, 720896, 1, 786437, 720896, 1, 851973, 720896, 1, 589830, 720896, 1, 655366, 720896, 1, 720902, 720896, 1, 786438, 720896, 1, 851974, 720896, 1, 589831, 720896, 1, 655367, 720896, 1, 720903, 720896, 1, 786439, 720896, 1, 851975, 720896, 1, 589832, 720896, 1, 655368, 720896, 1, 720904, 720896, 1, 786440, 720896, 1, 851976, 720896, 1, 589833, 786432, 1, 655369, 786432, 1, 720905, 786432, 1, 786441, 786432, 1, 851977, 786432, 1, 655359, 655360, 1, 720895, 655360, 1, 786431, 655360, 1, 851967, 655360, 1, 917503, 655360, 1, 589834, 720896, 1, 655370, 720896, 1, 720906, 720896, 1, 786442, 720896, 1, 851978, 720896, 1, 589835, 720896, 1, 655371, 720896, 1, 720907, 720896, 1, 786443, 720896, 1, 851979, 720896, 1, 589836, 720896, 1, 655372, 720896, 1, 720908, 720896, 1, 786444, 720896, 1, 851980, 720896, 1, 589837, 720896, 1, 655373, 720896, 1, 720909, 720896, 1, 786445, 720896, 1, 851981, 720896, 1, 589838, 720896, 1, 655374, 720896, 1, 720910, 720896, 1, 786446, 720896, 1, 851982, 720896, 1, 589839, 720896, 1, 655375, 720896, 1, 720911, 720896, 1, 786447, 720896, 1, 851983, 720896, 1, 589840, 720896, 1, 655376, 720896, 1, 720912, 720896, 1, 786448, 720896, 1, 851984, 720896, 1, 851985, 720896, 6, 851986, 786432, 6, 851987, 786432, 6, 851988, 786432, 6, 851989, 786432, 6, 851990, 786432, 6, 851991, 786432, 6, 851992, 786432, 6, 851993, 786432, 6, 851994, 786432, 6, 851995, 786432, 6, 851996, 786432, 6, 851997, 851968, 6, 524306, 786432, 5, 589842, 786432, 5, 655378, 786432, 5, 720914, 786432, 5, 786450, 786432, 5, 524307, 786432, 5, 589843, 786432, 5, 655379, 786432, 5, 720915, 786432, 5, 786451, 786432, 5, 524308, 786432, 5, 589844, 786432, 5, 655380, 786432, 5, 720916, 786432, 5, 786452, 786432, 5, 524309, 786432, 5, 589845, 786432, 5, 655381, 786432, 5, 720917, 786432, 5, 786453, 786432, 5, 524310, 786432, 5, 589846, 786432, 5, 655382, 786432, 5, 720918, 786432, 5, 786454, 786432, 5, 524311, 786432, 5, 589847, 786432, 5, 655383, 786432, 5, 720919, 786432, 5, 786455, 786432, 5, 524312, 786432, 5, 589848, 786432, 5, 655384, 786432, 5, 720920, 786432, 5, 786456, 786432, 5, 524313, 786432, 5, 589849, 786432, 5, 655385, 786432, 5, 720921, 786432, 5, 786457, 786432, 5, 524314, 786432, 5, 589850, 786432, 5, 655386, 786432, 5, 720922, 786432, 5, 786458, 786432, 5, 524315, 786432, 5, 589851, 786432, 5, 655387, 786432, 5, 720923, 786432, 5, 786459, 786432, 5, 524316, 786432, 5, 589852, 786432, 5, 655388, 786432, 5, 720924, 786432, 5, 786460, 786432, 5, 524305, 720896, 5, 589841, 720896, 5, 655377, 720896, 5, 720913, 720896, 5, 786449, 720896, 5, 524317, 851968, 5, 589853, 851968, 5, 655389, 851968, 5, 720925, 851968, 5, 786461, 851968, 5, -262106, 786432, 5, -196570, 786432, 5, -131034, 786432, 5, -65498, 786432, 5, 38, 786432, 5, 65574, 786432, 5, 131110, 655360, 6, 196646, 786432, 5, 262182, 786432, 5, 327718, 786432, 5, 393254, 786432, 5, 458790, 786432, 5, -262105, 786432, 5, -196569, 786432, 5, -131033, 786432, 5, -65497, 786432, 5, 39, 786432, 5, 65575, 786432, 5, 131111, 786432, 5, 196647, 786432, 5, 262183, 786432, 5, 327719, 786432, 5, 393255, 655360, 6, 458791, 786432, 5, -262104, 786432, 5, -196568, 786432, 5, -131032, 786432, 5, -65496, 786432, 5, 40, 655360, 6, 65576, 786432, 5, 131112, 786432, 5, 196648, 786432, 5, 262184, 655360, 6, 327720, 786432, 5, 393256, 786432, 5, 458792, 786432, 5, -262103, 786432, 5, -196567, 655360, 6, -131031, 786432, 5, -65495, 786432, 5, 41, 786432, 5, 65577, 786432, 5, 131113, 786432, 5, 196649, 786432, 5, 262185, 786432, 5, 327721, 786432, 5, 393257, 786432, 5, 458793, 786432, 5, -262102, 786432, 5, -196566, 786432, 5, -131030, 786432, 5, -65494, 786432, 5, 42, 786432, 5, 65578, 786432, 5, 131114, 655360, 6, 196650, 786432, 5, 262186, 786432, 5, 327722, 786432, 5, 393258, 786432, 5, 458794, 655360, 6, 524326, 786432, 6, 524327, 786432, 6, 524328, 786432, 6, 524329, 786432, 6, 524330, 786432, 6, -327642, 786432, 4, -327641, 786432, 4, -327640, 786432, 4, -327639, 786432, 4, -327638, 786432, 4, -327632, 851968, 4, -262096, 851968, 5, -196560, 851968, 5, -131024, 851968, 5, -65488, 851968, 5, 48, 851968, 5, 65584, 851968, 5, 131120, 851968, 5, 196656, 851968, 5, 262192, 851968, 5, 327728, 851968, 5, 393264, 851968, 5, 458800, 851968, 5, 524336, 851968, 6, -327637, 786432, 4, -327636, 786432, 4, -327635, 786432, 4, -327634, 786432, 4, -327633, 786432, 4, -262101, 786432, 5, -196565, 786432, 5, -131029, 655360, 6, -65493, 786432, 5, 43, 786432, 5, 65579, 786432, 5, 131115, 786432, 5, 196651, 786432, 5, 262187, 786432, 5, 327723, 655360, 6, 393259, 786432, 5, 458795, 786432, 5, -262100, 786432, 5, -196564, 786432, 5, -131028, 786432, 5, -65492, 786432, 5, 44, 655360, 6, 65580, 786432, 5, 131116, 786432, 5, 196652, 786432, 5, 262188, 786432, 5, 327724, 786432, 5, 393260, 786432, 5, 458796, 786432, 5, -262099, 786432, 5, -196563, 786432, 5, -131027, 786432, 5, -65491, 786432, 5, 45, 786432, 5, 65581, 655360, 6, 131117, 786432, 5, 196653, 786432, 5, 262189, 786432, 5, 327725, 786432, 5, 393261, 786432, 5, 458797, 786432, 5, -262098, 655360, 6, -196562, 786432, 5, -131026, 786432, 5, -65490, 786432, 5, 46, 786432, 5, 65582, 786432, 5, 131118, 786432, 5, 196654, 655360, 6, 262190, 786432, 5, 327726, 786432, 5, 393262, 786432, 5, 458798, 655360, 6, -262097, 786432, 5, -196561, 786432, 5, -131025, 786432, 5, -65489, 786432, 5, 47, 786432, 5, 65583, 786432, 5, 131119, 786432, 5, 196655, 786432, 5, 262191, 786432, 5, 327727, 786432, 5, 393263, 786432, 5, 458799, 786432, 5, 524331, 786432, 6, 524332, 786432, 6, 524333, 786432, 6, 524334, 786432, 6, 524335, 786432, 6) + +[node name="UI" type="CanvasLayer" parent="."] + +[node name="UIInventory" parent="UI" instance=ExtResource("2_as4e6")] +unique_name_in_owner = true +visible = false + +[node name="UISign" parent="UI" instance=ExtResource("3_6yi7w")] +unique_name_in_owner = true +visible = false + +[node name="Camera2D" type="Camera2D" parent="."] +position = Vector2(227, -28) +position_smoothing_speed = 10.0 + +[node name="PhantomCameraHost" type="Node" parent="Camera2D"] +script = ExtResource("4_bb7en") + +[node name="Player" type="Node" parent="."] + +[node name="PlayerPhantomCamera2D" type="Node2D" parent="Player" node_paths=PackedStringArray("follow_target")] +unique_name_in_owner = true +position = Vector2(227, -28) +script = ExtResource("5_kikl5") +priority = 5 +follow_mode = 2 +follow_target = NodePath("../CharacterBody2D/PlayerVisuals") +tween_resource = ExtResource("6_gu0o0") +tween_on_load = false +follow_damping = true +draw_limits = true + +[node name="Label" type="Label" parent="Player"] +offset_left = 167.0 +offset_top = -132.0 +offset_right = 332.0 +offset_bottom = -68.0 +theme_override_colors/font_color = Color(0.294118, 1, 0.631373, 1) +theme_override_fonts/font = ExtResource("11_myq47") +text = "[WASD] to move +[Space] to jump" + +[node name="CharacterBody2D" parent="Player" instance=ExtResource("8_g1syc")] +position = Vector2(227, -28) + +[node name="WideArea" type="Area2D" parent="." node_paths=PackedStringArray("area_pcam")] +position = Vector2(393, -40) +collision_layer = 2 +collision_mask = 2 +script = ExtResource("9_184pu") +area_pcam = NodePath("PhantomCamera2D") + +[node name="CollisionShape2D" type="CollisionShape2D" parent="WideArea"] +position = Vector2(0, -40) +shape = SubResource("RectangleShape2D_tgk1y") + +[node name="ColorRect" type="ColorRect" parent="WideArea"] +offset_left = -70.0 +offset_top = -120.0 +offset_right = 70.0 +offset_bottom = 40.0 +size_flags_horizontal = 0 +size_flags_vertical = 0 +color = Color(0.556863, 0.447059, 0.545098, 0.698039) + +[node name="Label" type="Label" parent="WideArea"] +offset_left = -77.0 +offset_top = -250.0 +offset_right = 76.0 +offset_bottom = -120.0 +theme_override_colors/font_color = Color(0.294118, 1, 0.631373, 1) +theme_override_fonts/font = ExtResource("11_myq47") +text = "Transition Type: +Sine + +Duration: +0.6s" +horizontal_alignment = 1 + +[node name="PhantomCamera2D" type="Node2D" parent="WideArea"] +position = Vector2(4, -100) +script = ExtResource("5_kikl5") +zoom = Vector2(0.8, 0.8) +tween_resource = SubResource("Resource_mtp70") +draw_limits = true + +[node name="UpperZoomArea" type="Area2D" parent="." node_paths=PackedStringArray("area_pcam")] +position = Vector2(649, -135) +collision_layer = 2 +collision_mask = 2 +script = ExtResource("9_184pu") +area_pcam = NodePath("PhantomCamera2D") + +[node name="CollisionShape2D" type="CollisionShape2D" parent="UpperZoomArea"] +position = Vector2(0, -40) +shape = SubResource("RectangleShape2D_clm0y") + +[node name="CollisionShape2D2" type="CollisionShape2D" parent="UpperZoomArea"] +position = Vector2(0, -40) +shape = SubResource("RectangleShape2D_clm0y") + +[node name="ColorRect" type="ColorRect" parent="UpperZoomArea"] +offset_left = -52.0 +offset_top = -120.0 +offset_right = 52.0 +offset_bottom = 40.0 +size_flags_horizontal = 0 +size_flags_vertical = 0 +color = Color(0.556863, 0.447059, 0.545098, 0.698039) + +[node name="Label" type="Label" parent="UpperZoomArea"] +offset_left = -74.0 +offset_top = -251.0 +offset_right = 79.0 +offset_bottom = -121.0 +theme_override_colors/font_color = Color(0.294118, 1, 0.631373, 1) +theme_override_fonts/font = ExtResource("11_myq47") +text = "Transition Type: +Circ + +Duration: +0.3s" +horizontal_alignment = 1 + +[node name="PhantomCamera2D" type="Node2D" parent="UpperZoomArea"] +position = Vector2(2, -83) +script = ExtResource("5_kikl5") +zoom = Vector2(2, 2) +tween_resource = SubResource("Resource_8jg5c") +draw_limits = true + +[node name="ForwardArea" type="Area2D" parent="." node_paths=PackedStringArray("area_pcam")] +position = Vector2(1136, -38) +collision_layer = 2 +collision_mask = 2 +script = ExtResource("9_184pu") +area_pcam = NodePath("PhantomCamera2D") + +[node name="CollisionShape2D" type="CollisionShape2D" parent="ForwardArea"] +position = Vector2(0, -42) +shape = SubResource("RectangleShape2D_uka0w") + +[node name="ColorRect" type="ColorRect" parent="ForwardArea"] +offset_left = -280.0 +offset_top = -122.0 +offset_right = 280.0 +offset_bottom = 38.0 +size_flags_horizontal = 0 +size_flags_vertical = 0 +color = Color(0.556863, 0.447059, 0.545098, 0.698039) + +[node name="Label" type="Label" parent="ForwardArea"] +offset_left = -76.0 +offset_top = -252.0 +offset_right = 77.0 +offset_bottom = -122.0 +theme_override_colors/font_color = Color(0.294118, 1, 0.631373, 1) +theme_override_fonts/font = ExtResource("11_myq47") +text = "Transition Type: +Back + +Duration: +1.2s" +horizontal_alignment = 1 + +[node name="PhantomCamera2D" type="Node2D" parent="ForwardArea"] +position = Vector2(344, -46) +script = ExtResource("5_kikl5") +zoom = Vector2(0.9, 0.9) +tween_resource = SubResource("Resource_e4e41") +draw_limits = true + +[editable path="Player/CharacterBody2D"] diff --git a/addons/phantom_camera/examples/example_scenes/2D/sub_scenes/playable_character_2d.tscn b/addons/phantom_camera/examples/example_scenes/2D/sub_scenes/playable_character_2d.tscn new file mode 100644 index 0000000..7d2ec5c --- /dev/null +++ b/addons/phantom_camera/examples/example_scenes/2D/sub_scenes/playable_character_2d.tscn @@ -0,0 +1,120 @@ +[gd_scene load_steps=10 format=3 uid="uid://7kh0xydx0b1o"] + +[ext_resource type="Script" path="res://addons/phantom_camera/examples/scripts/2D/player_character_body_2d.gd" id="1_jnc14"] +[ext_resource type="FontFile" uid="uid://c4mm3of2mc8o5" path="res://addons/phantom_camera/fonts/Nunito-Black.ttf" id="2_62b2n"] +[ext_resource type="Texture2D" uid="uid://ci76plsequlrq" path="res://addons/phantom_camera/examples/textures/2D/player_sprite.svg" id="2_yr8cm"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/phantom_camera/phantom_camera_2d.gd" id="4_rloon"] +[ext_resource type="Resource" uid="uid://cecrnq0wnkexh" path="res://addons/phantom_camera/examples/resources/tween/item_focus_phantom_camera_2d_tween.tres" id="5_4iyk1"] +[ext_resource type="Resource" uid="uid://cllveybboaqk5" path="res://addons/phantom_camera/examples/resources/tween/inventory_phantom_camera_2d_tween.tres" id="6_2h6fv"] + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_5hryl"] +bg_color = Color(0.85098, 0.894118, 0.937255, 1) +border_width_left = 2 +border_width_top = 2 +border_width_right = 2 +border_width_bottom = 2 +border_color = Color(0.113725, 0.113725, 0.113725, 1) +corner_radius_top_left = 7 +corner_radius_top_right = 7 +corner_radius_bottom_right = 7 +corner_radius_bottom_left = 7 + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_xj4ar"] +size = Vector2(64, 57) + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_18i13"] +size = Vector2(64, 57) + +[node name="CharacterBody2D" type="CharacterBody2D"] +script = ExtResource("1_jnc14") + +[node name="DarkOverlay" type="ColorRect" parent="."] +unique_name_in_owner = true +visible = false +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +offset_left = -1000.0 +offset_top = -1000.0 +offset_right = 1000.0 +offset_bottom = 1000.0 +grow_horizontal = 2 +grow_vertical = 2 +color = Color(0, 0, 0, 0.615686) + +[node name="PlayerVisuals" type="Node2D" parent="."] +unique_name_in_owner = true + +[node name="PlayerSprite" type="Sprite2D" parent="PlayerVisuals"] +unique_name_in_owner = true +scale = Vector2(0.5, 0.5) +texture = ExtResource("2_yr8cm") + +[node name="InteractionPrompt" type="Panel" parent="PlayerVisuals"] +unique_name_in_owner = true +visible = false +anchors_preset = 7 +anchor_left = 0.5 +anchor_top = 1.0 +anchor_right = 0.5 +anchor_bottom = 1.0 +offset_left = -16.0 +offset_top = -66.0 +offset_right = 16.0 +offset_bottom = -34.0 +grow_horizontal = 2 +grow_vertical = 0 +size_flags_vertical = 0 +theme_override_styles/panel = SubResource("StyleBoxFlat_5hryl") + +[node name="Label" type="Label" parent="PlayerVisuals/InteractionPrompt"] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_top = -3.0 +offset_bottom = 5.0 +grow_horizontal = 2 +grow_vertical = 2 +theme_override_colors/font_color = Color(0, 0, 0, 1) +theme_override_fonts/font = ExtResource("2_62b2n") +theme_override_font_sizes/font_size = 26 +text = "F" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="CollisionShape2D" type="CollisionShape2D" parent="."] +position = Vector2(0, -0.5) +shape = SubResource("RectangleShape2D_xj4ar") + +[node name="PlayerArea2D" type="Area2D" parent="."] +unique_name_in_owner = true +collision_layer = 2 +collision_mask = 2 +priority = 20 + +[node name="CollisionShape2D" type="CollisionShape2D" parent="PlayerArea2D"] +position = Vector2(0, -0.5) +shape = SubResource("RectangleShape2D_18i13") + +[node name="ItemFocusPhantomCamera2D" type="Node2D" parent="."] +unique_name_in_owner = true +position = Vector2(0, -122) +script = ExtResource("4_rloon") +zoom = Vector2(2, 2) +frame_preview = false +tween_resource = ExtResource("5_4iyk1") +follow_damping_value = Vector2(0, 0) +draw_limits = true + +[node name="InventoryPhantomCamera2D" type="Node2D" parent="."] +unique_name_in_owner = true +position = Vector2(-183, -5) +script = ExtResource("4_rloon") +zoom = Vector2(2.5, 2.5) +frame_preview = false +tween_resource = ExtResource("6_2h6fv") +follow_damping_value = Vector2(0, 0) +draw_limits = true diff --git a/addons/phantom_camera/examples/example_scenes/3D/3d_example_scene.tscn b/addons/phantom_camera/examples/example_scenes/3D/3d_example_scene.tscn new file mode 100644 index 0000000..553ddeb --- /dev/null +++ b/addons/phantom_camera/examples/example_scenes/3D/3d_example_scene.tscn @@ -0,0 +1,379 @@ +[gd_scene load_steps=40 format=3 uid="uid://ci12ytew5vwty"] + +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/phantom_camera_host/phantom_camera_host.gd" id="1_wn7ww"] +[ext_resource type="Script" path="res://addons/phantom_camera/examples/scripts/3D/npc.gd" id="2_2n1da"] +[ext_resource type="FontFile" uid="uid://c4mm3of2mc8o5" path="res://addons/phantom_camera/fonts/Nunito-Black.ttf" id="2_e7gxt"] +[ext_resource type="PackedScene" uid="uid://bulsh7s0ibmao" path="res://addons/phantom_camera/examples/example_scenes/3D/sub_scenes/playable_character_3d.tscn" id="2_tvx5n"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/phantom_camera/phantom_camera_3d.gd" id="2_y3dy8"] +[ext_resource type="PackedScene" uid="uid://cixlwqycoox8h" path="res://addons/phantom_camera/examples/models/3d_cube_dark.tscn" id="3_f5qrw"] +[ext_resource type="Resource" uid="uid://cptfoggk2ok67" path="res://addons/phantom_camera/examples/resources/tween/player_phantom_camera_3d_tween.tres" id="4_a27nb"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/resources/camera_3d_resource.gd" id="4_m2vbn"] +[ext_resource type="Script" path="res://addons/phantom_camera/examples/scripts/3D/3d_trigger_area.gd" id="4_moad5"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/resources/tween_resource.gd" id="7_jitt8"] + +[sub_resource type="Resource" id="Resource_jtk1d"] +script = ExtResource("4_m2vbn") +cull_mask = 1048575 +h_offset = 0.0 +v_offset = 0.0 +fov = 75.0 + +[sub_resource type="Resource" id="Resource_o161n"] +script = ExtResource("4_m2vbn") +cull_mask = 1048575 +h_offset = 0.0 +v_offset = 0.0 +fov = 75.0 + +[sub_resource type="BoxMesh" id="BoxMesh_7tjw4"] +size = Vector3(2, 0.5, 4) + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_hpllm"] +transparency = 1 +albedo_color = Color(0.988235, 0.478431, 0.905882, 0.0901961) + +[sub_resource type="BoxShape3D" id="BoxShape3D_65o6h"] +size = Vector3(2, 0.5, 4) + +[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_tpc7d"] + +[sub_resource type="CapsuleMesh" id="CapsuleMesh_g0eml"] + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_v5iy7"] +albedo_color = Color(0.988235, 0.478431, 0.905882, 1) + +[sub_resource type="Resource" id="Resource_tpvee"] +script = ExtResource("7_jitt8") +duration = 0.0 +transition = 0 +ease = 2 + +[sub_resource type="Resource" id="Resource_bxbnv"] +script = ExtResource("4_m2vbn") +cull_mask = 1048575 +h_offset = 0.0 +v_offset = 0.0 +fov = 75.0 + +[sub_resource type="BoxShape3D" id="BoxShape3D_wcrbb"] +size = Vector3(6.8, 0.1, 5.4) + +[sub_resource type="Resource" id="Resource_7ih0k"] +script = ExtResource("7_jitt8") +duration = 0.0 +transition = 0 +ease = 2 + +[sub_resource type="Resource" id="Resource_4iyps"] +script = ExtResource("4_m2vbn") +cull_mask = 1048575 +h_offset = 0.0 +v_offset = 0.0 +fov = 75.0 + +[sub_resource type="BoxShape3D" id="BoxShape3D_ctyr8"] +size = Vector3(7.4, 0.1, 3.6) + +[sub_resource type="Resource" id="Resource_x5y0u"] +script = ExtResource("7_jitt8") +duration = 0.0 +transition = 0 +ease = 2 + +[sub_resource type="Resource" id="Resource_pgiyx"] +script = ExtResource("4_m2vbn") +cull_mask = 1048575 +h_offset = 0.0 +v_offset = 0.0 +fov = 75.0 + +[sub_resource type="BoxShape3D" id="BoxShape3D_ua072"] +size = Vector3(6.8, 0.1, 3.6) + +[sub_resource type="BoxMesh" id="BoxMesh_ugc3s"] +size = Vector3(1, 1, 2) + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_68thd"] +albedo_color = Color(0.34902, 0.862745, 0.854902, 1) + +[sub_resource type="BoxMesh" id="BoxMesh_wphly"] +size = Vector3(1, 0.5, 1) + +[sub_resource type="BoxMesh" id="BoxMesh_gyp5s"] +size = Vector3(20, 40, 30) + +[sub_resource type="BoxShape3D" id="BoxShape3D_lfaqs"] +size = Vector3(20, 40, 30) + +[sub_resource type="BoxMesh" id="BoxMesh_n70lt"] +size = Vector3(14, 40, 6) + +[sub_resource type="BoxShape3D" id="BoxShape3D_jxmqm"] +size = Vector3(14, 40, 6) + +[sub_resource type="BoxMesh" id="BoxMesh_x0tgm"] +size = Vector3(8, 40, 1) + +[sub_resource type="BoxShape3D" id="BoxShape3D_t67ef"] +size = Vector3(50, 40, 1) + +[sub_resource type="BoxMesh" id="BoxMesh_rmslh"] +size = Vector3(0.5, 6, 13.5) + +[sub_resource type="BoxMesh" id="BoxMesh_242ij"] +size = Vector3(2, 3, 3) + +[sub_resource type="BoxMesh" id="BoxMesh_niuda"] +size = Vector3(8, 6, 0.5) + +[node name="Root" type="Node3D"] + +[node name="MainCamera3D" type="Camera3D" parent="."] +unique_name_in_owner = true +transform = Transform3D(0.999858, 0, 0, 0, 0.94884, 0.315632, 0, -0.315637, 0.948825, -2.53871, 2, 9.76232) + +[node name="PhantomCameraHost" type="Node" parent="MainCamera3D"] +script = ExtResource("1_wn7ww") + +[node name="PlayerGroup" type="Node" parent="."] + +[node name="PlayerCharacterBody3D" parent="PlayerGroup" instance=ExtResource("2_tvx5n")] +unique_name_in_owner = true +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2.53871, 0.5, 7.26232) + +[node name="MovementInstructionsLabel" type="Label3D" parent="PlayerGroup"] +transform = Transform3D(1, 0, 0, 0, 0.866025, 0.5, 0, -0.5, 0.866025, -2.47682, -0.0708016, 7.93048) +modulate = Color(0.294118, 1, 0.631373, 1) +text = "[WASD] to move" +font = ExtResource("2_e7gxt") +font_size = 48 + +[node name="PlayerPhantomCamera3D" type="Node3D" parent="PlayerGroup" node_paths=PackedStringArray("follow_target")] +unique_name_in_owner = true +transform = Transform3D(0.999858, 0, 0, 0, 0.94884, 0.315632, 0, -0.315637, 0.948825, -2.53871, 2, 9.76232) +script = ExtResource("2_y3dy8") +priority = 10 +follow_mode = 2 +follow_target = NodePath("../PlayerCharacterBody3D/PlayerVisual") +tween_resource = ExtResource("4_a27nb") +tween_on_load = false +camera_3d_resource = SubResource("Resource_jtk1d") +follow_offset = Vector3(0, 1.5, 2.5) +follow_damping = true + +[node name="NPCGroup" type="Node" parent="."] + +[node name="NPCPhantomCamera3D" type="Node3D" parent="NPCGroup"] +unique_name_in_owner = true +transform = Transform3D(0.616596, -0.109786, 0.779587, -2.23517e-08, 0.990229, 0.13945, -0.78728, -0.0859841, 0.610571, -2.98802, 1.50739, 1.19719) +script = ExtResource("2_y3dy8") +tween_resource = ExtResource("4_a27nb") +camera_3d_resource = SubResource("Resource_o161n") + +[node name="NPCDescriptionLabel" type="Label3D" parent="NPCGroup"] +transform = Transform3D(1, 0, 0, 0, 0.866026, 0.5, 0, -0.5, 0.866025, -3.04693, 0.367287, 0.953757) +text = "Input Example" +font = ExtResource("2_e7gxt") + +[node name="NPCDialogueExampleLabel" type="Label3D" parent="NPCGroup"] +unique_name_in_owner = true +transform = Transform3D(1, 4.54671e-10, 1.65487e-10, 4.25644e-10, 0.939693, 0.34202, 0, -0.34202, 0.939693, -4.46738, 1.58641, -0.253679) +modulate = Color(1, 0.603922, 0.254902, 1) +text = "Press [ F ] to change camera" +font = ExtResource("2_e7gxt") + +[node name="NPCInteractionZoneMesh" type="MeshInstance3D" parent="NPCGroup"] +transform = Transform3D(0.819152, 4.83851e-10, -0.573576, -3.92481e-09, 1, -6.3473e-09, 0.573576, 7.45058e-09, 0.819152, -3.46138, -0.4, 0.875321) +mesh = SubResource("BoxMesh_7tjw4") +skeleton = NodePath("../..") +surface_material_override/0 = SubResource("StandardMaterial3D_hpllm") +metadata/_edit_group_ = true + +[node name="NPCInteractionArea3D" type="Area3D" parent="NPCGroup/NPCInteractionZoneMesh"] +unique_name_in_owner = true +transform = Transform3D(1, -2.68591e-26, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0) +monitorable = false + +[node name="NPCInterationCollisionShape3D" type="CollisionShape3D" parent="NPCGroup/NPCInteractionZoneMesh/NPCInteractionArea3D"] +shape = SubResource("BoxShape3D_65o6h") + +[node name="NPC" type="StaticBody3D" parent="NPCGroup"] +transform = Transform3D(1, 4.83851e-10, 0, 4.25644e-10, 1, -7.45058e-09, 0, 7.45058e-09, 1, -4.56338, 0.5, -0.272679) +script = ExtResource("2_2n1da") + +[node name="PlayerCollisionShape3D2" type="CollisionShape3D" parent="NPCGroup/NPC"] +transform = Transform3D(1, -2.68591e-26, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0) +shape = SubResource("CapsuleShape3D_tpc7d") + +[node name="NPCMesh" type="MeshInstance3D" parent="NPCGroup/NPC"] +transform = Transform3D(1, -2.68591e-26, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0) +mesh = SubResource("CapsuleMesh_g0eml") +skeleton = NodePath("../../..") +surface_material_override/0 = SubResource("StandardMaterial3D_v5iy7") + +[node name="MoveToLocation" type="Node3D" parent="NPCGroup"] +unique_name_in_owner = true +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -4.70084, 0.5, 0.962891) + +[node name="FixedCameraTriggerZone" type="Node" parent="."] + +[node name="FixedCameraLabel" type="Label3D" parent="FixedCameraTriggerZone"] +unique_name_in_owner = true +transform = Transform3D(0.939693, 0.280167, -0.196175, 1.49012e-08, 0.573577, 0.819152, 0.34202, -0.769751, 0.538986, -0.538716, -0.247626, 3.13456) +text = "Fixed Camera +Example" +font = ExtResource("2_e7gxt") + +[node name="NorthRoomPhantomCamera3D" type="Node3D" parent="FixedCameraTriggerZone"] +transform = Transform3D(0.38357, -0.555836, 0.737507, -0.105898, 0.766851, 0.633027, -0.917417, -0.320912, 0.235279, 6.89638, 4.73986, 0.115512) +script = ExtResource("2_y3dy8") +tween_resource = SubResource("Resource_tpvee") +camera_3d_resource = SubResource("Resource_bxbnv") + +[node name="NorthRoomTrigger" type="Area3D" parent="FixedCameraTriggerZone" node_paths=PackedStringArray("area_pcam")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3, -0.45, -0.9) +priority = 5 +script = ExtResource("4_moad5") +area_pcam = NodePath("../NorthRoomPhantomCamera3D") +metadata/_edit_group_ = true + +[node name="CollisionShape3D" type="CollisionShape3D" parent="FixedCameraTriggerZone/NorthRoomTrigger"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.6, 0, -0.4) +shape = SubResource("BoxShape3D_wcrbb") + +[node name="EntryRoomPhantomCamera3D" type="Node3D" parent="FixedCameraTriggerZone"] +transform = Transform3D(0.258818, -0.482963, 0.836515, 1.3027e-15, 0.866025, 0.499999, -0.965924, -0.129409, 0.224143, 6.69741, 4.73364, 4.02374) +script = ExtResource("2_y3dy8") +tween_resource = SubResource("Resource_7ih0k") +camera_3d_resource = SubResource("Resource_4iyps") + +[node name="EntryRoomTrigger" type="Area3D" parent="FixedCameraTriggerZone" node_paths=PackedStringArray("area_pcam")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3.00003, -0.454982, 3.00572) +priority = 5 +script = ExtResource("4_moad5") +area_pcam = NodePath("../EntryRoomPhantomCamera3D") +metadata/_edit_group_ = true + +[node name="CollisionShape3D" type="CollisionShape3D" parent="FixedCameraTriggerZone/EntryRoomTrigger"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.3, 0, 0.2) +shape = SubResource("BoxShape3D_ctyr8") + +[node name="SouthRoomPhantomCamera3D" type="Node3D" parent="FixedCameraTriggerZone"] +transform = Transform3D(-0.766043, -0.492403, 0.413175, 0, 0.642787, 0.766043, -0.642786, 0.586825, -0.492403, 6.89741, 4.73364, 5.62374) +script = ExtResource("2_y3dy8") +tween_resource = SubResource("Resource_x5y0u") +camera_3d_resource = SubResource("Resource_pgiyx") + +[node name="SouthRoomTrigger" type="Area3D" parent="FixedCameraTriggerZone" node_paths=PackedStringArray("area_pcam")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3, -0.45, 6.7) +priority = 5 +script = ExtResource("4_moad5") +area_pcam = NodePath("../SouthRoomPhantomCamera3D") +metadata/_edit_group_ = true + +[node name="CollisionShape3D" type="CollisionShape3D" parent="FixedCameraTriggerZone/SouthRoomTrigger"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.6, 0, 0.1) +shape = SubResource("BoxShape3D_ua072") + +[node name="CSGMesh3D" type="CSGMesh3D" parent="FixedCameraTriggerZone"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 7.14238, 1.82571, 2.88655) +mesh = SubResource("BoxMesh_ugc3s") +material = SubResource("StandardMaterial3D_68thd") + +[node name="CSGMesh3D2" type="CSGMesh3D" parent="FixedCameraTriggerZone/CSGMesh3D"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.00192642, -0.0120339, 0.00494432) +operation = 2 +mesh = SubResource("BoxMesh_wphly") +material = SubResource("StandardMaterial3D_68thd") + +[node name="Environment" type="Node" parent="."] + +[node name="DirectionalLight3D" type="DirectionalLight3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 0.707107, 0.707107, 0, -0.707107, 0.707107, 0, 8, 0) +metadata/_edit_lock_ = true + +[node name="Environment" type="Node3D" parent="Environment"] + +[node name="Floor" parent="Environment/Environment" instance=ExtResource("3_f5qrw")] +transform = Transform3D(1000, 0, 0, 0, 1, 0, 0, 0, 1000, 0, -1, 0) +metadata/_edit_lock_ = true + +[node name="West Wall" type="StaticBody3D" parent="Environment/Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -16, 0.5, 0) +metadata/_edit_group_ = true +metadata/_edit_lock_ = true + +[node name="MeshInstance3D2" type="MeshInstance3D" parent="Environment/Environment/West Wall"] +mesh = SubResource("BoxMesh_gyp5s") +skeleton = NodePath("") + +[node name="CollisionShape3D" type="CollisionShape3D" parent="Environment/Environment/West Wall"] +shape = SubResource("BoxShape3D_lfaqs") + +[node name="East Wall" type="StaticBody3D" parent="Environment/Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 16.999, 0.502, 0) +metadata/_edit_group_ = true +metadata/_edit_lock_ = true + +[node name="MeshInstance3D2" type="MeshInstance3D" parent="Environment/Environment/East Wall"] +mesh = SubResource("BoxMesh_gyp5s") +skeleton = NodePath("") + +[node name="CollisionShape3D" type="CollisionShape3D" parent="Environment/Environment/East Wall"] +shape = SubResource("BoxShape3D_lfaqs") + +[node name="North Wall" type="StaticBody3D" parent="Environment/Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, -6.90828) +metadata/_edit_group_ = true +metadata/_edit_lock_ = true + +[node name="MeshInstance3D2" type="MeshInstance3D" parent="Environment/Environment/North Wall"] +mesh = SubResource("BoxMesh_n70lt") +skeleton = NodePath("") + +[node name="CollisionShape3D" type="CollisionShape3D" parent="Environment/Environment/North Wall"] +shape = SubResource("BoxShape3D_jxmqm") + +[node name="South Wall" type="StaticBody3D" parent="Environment/Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.25, 0.5, 9.087) +metadata/_edit_group_ = true + +[node name="MeshInstance3D3" type="MeshInstance3D" parent="Environment/Environment/South Wall"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 4, 0, 0) +mesh = SubResource("BoxMesh_x0tgm") +skeleton = NodePath("") + +[node name="CollisionShape3D" type="CollisionShape3D" parent="Environment/Environment/South Wall"] +shape = SubResource("BoxShape3D_t67ef") + +[node name="FixedCamOuterWall" type="CSGMesh3D" parent="Environment/Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.5, 2) +use_collision = true +mesh = SubResource("BoxMesh_rmslh") + +[node name="FixedCamOuterDoorway" type="CSGMesh3D" parent="Environment/Environment/FixedCamOuterWall"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -1.5, 1) +operation = 2 +mesh = SubResource("BoxMesh_242ij") + +[node name="FixedCamNorthWall" type="CSGMesh3D" parent="Environment/Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 4, 2.5, 1) +use_collision = true +mesh = SubResource("BoxMesh_niuda") + +[node name="FixedCamNorthDoorway" type="CSGMesh3D" parent="Environment/Environment/FixedCamNorthWall"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -1.5, 0) +operation = 2 +mesh = SubResource("BoxMesh_242ij") + +[node name="FixedCamSouthWall" type="CSGMesh3D" parent="Environment/Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 4, 2.5, 5.1) +use_collision = true +mesh = SubResource("BoxMesh_niuda") + +[node name="FixedCamSouthDoorway" type="CSGMesh3D" parent="Environment/Environment/FixedCamSouthWall"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -1.50541, 1.19209e-07) +operation = 2 +mesh = SubResource("BoxMesh_242ij") + +[editable path="PlayerGroup/PlayerCharacterBody3D"] diff --git a/addons/phantom_camera/examples/example_scenes/3D/3d_follow_framed_example_scene.tscn b/addons/phantom_camera/examples/example_scenes/3D/3d_follow_framed_example_scene.tscn new file mode 100644 index 0000000..b17abcf --- /dev/null +++ b/addons/phantom_camera/examples/example_scenes/3D/3d_follow_framed_example_scene.tscn @@ -0,0 +1,147 @@ +[gd_scene load_steps=10 format=3 uid="uid://c4llb3gsbfv1a"] + +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/phantom_camera_host/phantom_camera_host.gd" id="1_7824u"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/phantom_camera/phantom_camera_3d.gd" id="2_g1bv4"] +[ext_resource type="Resource" uid="uid://cptfoggk2ok67" path="res://addons/phantom_camera/examples/resources/tween/player_phantom_camera_3d_tween.tres" id="3_420vh"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/resources/camera_3d_resource.gd" id="4_oqbub"] +[ext_resource type="PackedScene" uid="uid://cixlwqycoox8h" path="res://addons/phantom_camera/examples/models/3d_cube_dark.tscn" id="4_t4fso"] +[ext_resource type="Texture2D" uid="uid://c7ja4woxol8yc" path="res://addons/phantom_camera/examples/textures/3D/checker_pattern_dark.png" id="5_c0upu"] +[ext_resource type="PackedScene" uid="uid://bulsh7s0ibmao" path="res://addons/phantom_camera/examples/example_scenes/3D/sub_scenes/playable_character_3d.tscn" id="5_f2w3x"] + +[sub_resource type="Resource" id="Resource_wg1pr"] +script = ExtResource("4_oqbub") +cull_mask = 1048575 +h_offset = 0.0 +v_offset = 0.0 +fov = 75.0 + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_auy8m"] +albedo_texture = ExtResource("5_c0upu") +uv1_triplanar = true +uv1_world_triplanar = true + +[node name="Root" type="Node3D"] + +[node name="MainCamera3D" type="Camera3D" parent="."] +unique_name_in_owner = true +transform = Transform3D(0.99995, 0, 0, 0, 0.79324, 0.608671, 0, -0.608675, 0.793235, 0.083587, 2.94168, 5.22787) + +[node name="PhantomCameraHost" type="Node" parent="MainCamera3D"] +script = ExtResource("1_7824u") + +[node name="DirectionalLight3D" type="DirectionalLight3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 0.707107, 0.707107, 0, -0.707107, 0.707107, 0, 8, 0) +metadata/_edit_lock_ = true + +[node name="Player" type="Node" parent="."] + +[node name="PlayerPhantomCamera3D" type="Node3D" parent="Player" node_paths=PackedStringArray("follow_target")] +unique_name_in_owner = true +transform = Transform3D(0.99995, 0, 0, 0, 0.79324, 0.608671, 0, -0.608675, 0.793235, 0.083587, 2.94168, 5.22787) +script = ExtResource("2_g1bv4") +follow_mode = 5 +follow_target = NodePath("../PlayerCharacterBody3D2/PlayerVisual") +tween_resource = ExtResource("3_420vh") +tween_on_load = false +camera_3d_resource = SubResource("Resource_wg1pr") +follow_damping = true +follow_distance = 4.0 +dead_zone_width = 0.384 +dead_zone_height = 0.669 +show_viewfinder_in_play = true +spring_length = 4.0 + +[node name="PlayerCharacterBody3D2" parent="Player" instance=ExtResource("5_f2w3x")] + +[node name="Environment" type="Node" parent="."] + +[node name="Floor" parent="Environment" instance=ExtResource("4_t4fso")] +transform = Transform3D(1000, 0, 0, 0, 1, 0, 0, 0, 1000, 0, -1, 0) +metadata/_edit_lock_ = true + +[node name="CSGCylinder3D" type="CSGCylinder3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.636134, 0.805455, -6.37532) +use_collision = true +radius = 1.71971 +height = 2.61091 +sides = 32 + +[node name="CSGCylinder3D5" type="CSGCylinder3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -7.54597, -0.540694, -3.39517) +use_collision = true +radius = 1.53269 +height = 2.5036 +sides = 32 + +[node name="CSGCylinder3D6" type="CSGCylinder3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2.64877, -1.50101, 1.22863) +use_collision = true +radius = 1.57419 +height = 3.47475 +sides = 32 + +[node name="CSGCylinder3D2" type="CSGCylinder3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 10.4732, 0.805455, -8.78984) +use_collision = true +radius = 0.956285 +height = 2.61091 +sides = 32 + +[node name="CSGSphere3D" type="CSGSphere3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -9.40027, -1.69814, 3.36997) +use_collision = true +radius = 3.34732 +rings = 32 + +[node name="CSGSphere3D2" type="CSGSphere3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 5.13768, -0.599204, -1.04651) +use_collision = true +radius = 2.65844 +rings = 32 + +[node name="CSGSphere3D3" type="CSGSphere3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -11.7976, -0.599204, -2.42244) +use_collision = true +radius = 2.14606 +rings = 32 + +[node name="CSGTorus3D2" type="CSGTorus3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 7.84078, -0.497663, 4.44352) +use_collision = true +inner_radius = 0.971543 +outer_radius = 2.15226 +sides = 32 +ring_sides = 18 + +[node name="CSGBox3D" type="CSGBox3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2.52545, 6.53866, -12.6331) +use_collision = true +size = Vector3(178.429, 14.0773, 1) +material = SubResource("StandardMaterial3D_auy8m") + +[node name="CSGBox3D2" type="CSGBox3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -6.88916, 0.760708, -6.1376) +use_collision = true +size = Vector3(2.64182, 2.52142, 2.30997) + +[node name="CSGBox3D5" type="CSGBox3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -3.83837, -0.241718, 7.14677) +use_collision = true +size = Vector3(3.80964, 1.67049, 0.932048) + +[node name="CSGBox3D3" type="CSGBox3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 7.34377, 0.138478, -4.36159) +use_collision = true +size = Vector3(1.53893, 1.27695, 1.80814) + +[node name="CSGBox3D6" type="CSGBox3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 10.9834, 0.138478, -1.89037) +use_collision = true +size = Vector3(4.03502, 1.27695, 5.2198) + +[node name="CSGBox3D4" type="CSGBox3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 8.38147, 0.0440434, 8.36617) +use_collision = true +size = Vector3(4.57784, 1.08809, 3.11285) + +[editable path="Player/PlayerCharacterBody3D2"] diff --git a/addons/phantom_camera/examples/example_scenes/3D/3d_follow_glued_example_scene.tscn b/addons/phantom_camera/examples/example_scenes/3D/3d_follow_glued_example_scene.tscn new file mode 100644 index 0000000..0d7b543 --- /dev/null +++ b/addons/phantom_camera/examples/example_scenes/3D/3d_follow_glued_example_scene.tscn @@ -0,0 +1,199 @@ +[gd_scene load_steps=14 format=3 uid="uid://dw2yflu7up2rr"] + +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/phantom_camera_host/phantom_camera_host.gd" id="1_pmeux"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/phantom_camera/phantom_camera_3d.gd" id="2_q1ygp"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/resources/tween_resource.gd" id="3_hpix1"] +[ext_resource type="PackedScene" uid="uid://cixlwqycoox8h" path="res://addons/phantom_camera/examples/models/3d_cube_dark.tscn" id="4_8qqha"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/resources/camera_3d_resource.gd" id="4_evdoo"] +[ext_resource type="PackedScene" uid="uid://bulsh7s0ibmao" path="res://addons/phantom_camera/examples/example_scenes/3D/sub_scenes/playable_character_3d.tscn" id="5_vqgn5"] +[ext_resource type="Texture2D" uid="uid://c7ja4woxol8yc" path="res://addons/phantom_camera/examples/textures/3D/checker_pattern_dark.png" id="5_wr3bq"] + +[sub_resource type="Resource" id="Resource_ucp3e"] +script = ExtResource("3_hpix1") +duration = 1.0 +transition = 0 +ease = 2 + +[sub_resource type="Resource" id="Resource_ab013"] +script = ExtResource("4_evdoo") +cull_mask = 1048575 +h_offset = 0.0 +v_offset = 0.0 +fov = 75.0 + +[sub_resource type="CapsuleMesh" id="CapsuleMesh_2h36r"] + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_w3olp"] +albedo_color = Color(0.227451, 0.337255, 0.576471, 1) + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_cw102"] +albedo_color = Color(0.227451, 0.337255, 0.576471, 1) + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_auy8m"] +albedo_texture = ExtResource("5_wr3bq") +uv1_triplanar = true +uv1_world_triplanar = true + +[node name="Node3D" type="Node3D"] + +[node name="MainCamera3D" type="Camera3D" parent="."] +unique_name_in_owner = true +transform = Transform3D(0.999954, 0, 0, 0, 0.638683, 0.769345, 0, -0.769298, 0.638723, -5.60519e-45, 6.39, 7) + +[node name="PhantomCameraHost" type="Node" parent="MainCamera3D"] +script = ExtResource("1_pmeux") + +[node name="DirectionalLight3D" type="DirectionalLight3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 0.707107, 0.707107, 0, -0.707107, 0.707107, 0, 8, 0) +metadata/_edit_lock_ = true + +[node name="Player" type="Node" parent="."] + +[node name="PlayerPhantomCamera3D" type="Node3D" parent="Player" node_paths=PackedStringArray("follow_target")] +unique_name_in_owner = true +transform = Transform3D(0.999954, 0, 0, 0, 0.638683, 0.769345, 0, -0.769298, 0.638723, -5.60519e-45, 6.39, 7) +script = ExtResource("2_q1ygp") +priority = 5 +follow_mode = 1 +follow_target = NodePath("../PlayerCharacterBody3D/PlayerVisual") +tween_resource = SubResource("Resource_ucp3e") +tween_on_load = false +camera_3d_resource = SubResource("Resource_ab013") +follow_damping = true +follow_damping_value = Vector3(0.3, 0.3, 0.3) + +[node name="PlayerCharacterBody3D" parent="Player" instance=ExtResource("5_vqgn5")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6.39, 7) +enable_gravity = false + +[node name="PlayerVisual" parent="Player/PlayerCharacterBody3D" index="2"] +visible = false + +[node name="NPCs" type="Node" parent="."] + +[node name="PlayerMeshInstance3D" type="MeshInstance3D" parent="NPCs"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2.04486, 0.519002, -1.52506) +mesh = SubResource("CapsuleMesh_2h36r") +skeleton = NodePath("") +surface_material_override/0 = SubResource("StandardMaterial3D_w3olp") + +[node name="PlayerMeshInstance3D2" type="MeshInstance3D" parent="NPCs"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2.51494, 0.519, 4.06618) +mesh = SubResource("CapsuleMesh_2h36r") +skeleton = NodePath("") +surface_material_override/0 = SubResource("StandardMaterial3D_cw102") + +[node name="Environment" type="Node" parent="."] + +[node name="Floor" parent="Environment" instance=ExtResource("4_8qqha")] +transform = Transform3D(1000, 0, 0, 0, 1, 0, 0, 0, 1000, 0, -1, 0) +metadata/_edit_lock_ = true + +[node name="CSGCylinder3D" type="CSGCylinder3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1.62737, 0.805455, -6.37532) +use_collision = true +radius = 1.71971 +height = 2.61091 +sides = 32 + +[node name="CSGCylinder3D5" type="CSGCylinder3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 24.9378, 0.31181, -5.46661) +use_collision = true +radius = 2.77591 +height = 1.62362 +sides = 32 + +[node name="CSGCylinder3D6" type="CSGCylinder3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -9.58617, 0.31181, 6.6322) +use_collision = true +radius = 1.57419 +height = 3.47475 +sides = 32 + +[node name="CSGCylinder3D3" type="CSGCylinder3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 14.774, 0.201103, 2.71259) +use_collision = true +radius = 1.41311 +height = 1.40221 +sides = 32 + +[node name="CSGCylinder3D4" type="CSGCylinder3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 7.40488, 0.201101, 11.6804) +use_collision = true +radius = 2.21673 +height = 7.88261 +sides = 32 + +[node name="CSGCylinder3D2" type="CSGCylinder3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 8.20971, 0.805455, -8.78984) +use_collision = true +radius = 0.956285 +height = 2.61091 +sides = 32 + +[node name="CSGSphere3D" type="CSGSphere3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 14.9771, -1.69814, -6.51262) +use_collision = true +radius = 3.34732 +rings = 32 + +[node name="CSGSphere3D2" type="CSGSphere3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.555532, -0.599204, 8.81048) +use_collision = true +radius = 2.65844 +rings = 32 + +[node name="CSGSphere3D3" type="CSGSphere3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -14.0611, -0.599204, -2.42244) +use_collision = true +radius = 2.14606 +rings = 32 + +[node name="CSGTorus3D" type="CSGTorus3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -5.21187, -1.90735e-06, 0.346393) +use_collision = true +inner_radius = 1.3 +outer_radius = 2.0 +sides = 32 +ring_sides = 18 + +[node name="CSGTorus3D2" type="CSGTorus3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 21.9283, -1.90735e-06, 7.89765) +use_collision = true +inner_radius = 0.971543 +outer_radius = 2.15226 +sides = 32 +ring_sides = 18 + +[node name="CSGBox3D" type="CSGBox3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 9.49828, 6.53866, -12.6331) +use_collision = true +size = Vector3(178.429, 14.0773, 1) +material = SubResource("StandardMaterial3D_auy8m") + +[node name="CSGBox3D2" type="CSGBox3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -9.15267, 0.760708, -6.1376) +use_collision = true +size = Vector3(2.64182, 2.52142, 2.30997) + +[node name="CSGBox3D5" type="CSGBox3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 14.3427, 0.335247, 8.22829) +use_collision = true +size = Vector3(3.80964, 1.67049, 0.932048) + +[node name="CSGBox3D3" type="CSGBox3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 5.08027, 0.138478, -4.36159) +use_collision = true +size = Vector3(1.53893, 1.27695, 1.80814) + +[node name="CSGBox3D6" type="CSGBox3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -14.7748, 0.138478, 5.20734) +use_collision = true +size = Vector3(4.03502, 1.27695, 5.2198) + +[node name="CSGBox3D4" type="CSGBox3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 30.1473, 1.78638, -1.60318) +use_collision = true +size = Vector3(4.57784, 4.57276, 3.11285) + +[editable path="Player/PlayerCharacterBody3D"] diff --git a/addons/phantom_camera/examples/example_scenes/3D/3d_follow_group_example_scene.tscn b/addons/phantom_camera/examples/example_scenes/3D/3d_follow_group_example_scene.tscn new file mode 100644 index 0000000..9ef95a5 --- /dev/null +++ b/addons/phantom_camera/examples/example_scenes/3D/3d_follow_group_example_scene.tscn @@ -0,0 +1,171 @@ +[gd_scene load_steps=13 format=3 uid="uid://dbfiy6svpcqap"] + +[ext_resource type="PackedScene" uid="uid://cixlwqycoox8h" path="res://addons/phantom_camera/examples/models/3d_cube_dark.tscn" id="1_r00ve"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/phantom_camera/phantom_camera_3d.gd" id="2_pi7mp"] +[ext_resource type="PackedScene" uid="uid://bulsh7s0ibmao" path="res://addons/phantom_camera/examples/example_scenes/3D/sub_scenes/playable_character_3d.tscn" id="2_wnlkq"] +[ext_resource type="Resource" uid="uid://cptfoggk2ok67" path="res://addons/phantom_camera/examples/resources/tween/player_phantom_camera_3d_tween.tres" id="3_1eb12"] +[ext_resource type="Texture2D" uid="uid://c7ja4woxol8yc" path="res://addons/phantom_camera/examples/textures/3D/checker_pattern_dark.png" id="3_a5igg"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/phantom_camera_host/phantom_camera_host.gd" id="3_wr1tj"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/resources/camera_3d_resource.gd" id="5_70gws"] + +[sub_resource type="Resource" id="Resource_1iman"] +script = ExtResource("5_70gws") +cull_mask = 1048575 +h_offset = 0.0 +v_offset = 0.0 +fov = 75.0 + +[sub_resource type="CapsuleMesh" id="CapsuleMesh_2h36r"] + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_w3olp"] +albedo_color = Color(0.227451, 0.337255, 0.576471, 1) + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_cw102"] +albedo_color = Color(0.227451, 0.337255, 0.576471, 1) + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_auy8m"] +albedo_texture = ExtResource("3_a5igg") +uv1_triplanar = true +uv1_world_triplanar = true + +[node name="Node3D" type="Node3D"] + +[node name="MainCamera3D" type="Camera3D" parent="."] +unique_name_in_owner = true +transform = Transform3D(0.999954, 0, 0, 0, 0.906188, 0.422588, 0, -0.422562, 0.906243, -7.26116, 5.72974, 12.279) + +[node name="PhantomCameraHost" type="Node" parent="MainCamera3D"] +script = ExtResource("3_wr1tj") + +[node name="DirectionalLight3D" type="DirectionalLight3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 0.707107, 0.707107, 0, -0.707107, 0.707107, 0, 8, 0) +metadata/_edit_lock_ = true + +[node name="Player" type="Node" parent="."] + +[node name="PlayerCharacterBody3D2" parent="Player" instance=ExtResource("2_wnlkq")] + +[node name="PlayerPhantomCamera3D" type="Node3D" parent="Player" node_paths=PackedStringArray("follow_targets")] +unique_name_in_owner = true +transform = Transform3D(0.999954, 0, 0, 0, 0.906188, 0.422588, 0, -0.422562, 0.906243, -7.26116, 5.72974, 12.279) +script = ExtResource("2_pi7mp") +priority = 5 +follow_mode = 3 +follow_targets = [NodePath("../PlayerCharacterBody3D2"), NodePath("../../NPCs/PlayerMeshInstance3D"), NodePath("../../NPCs/PlayerMeshInstance3D2")] +tween_resource = ExtResource("3_1eb12") +tween_on_load = false +camera_3d_resource = SubResource("Resource_1iman") +follow_damping = true +follow_distance = 5.0 +auto_follow_distance = true +auto_follow_distance_min = 5.0 +auto_follow_distance_max = 15.0 +auto_follow_distance_divisor = 20.0 +spring_length = 5.0 + +[node name="NPCs" type="Node" parent="."] + +[node name="PlayerMeshInstance3D" type="MeshInstance3D" parent="NPCs"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -14.6059, 0.519002, 0.128472) +mesh = SubResource("CapsuleMesh_2h36r") +skeleton = NodePath("") +surface_material_override/0 = SubResource("StandardMaterial3D_w3olp") + +[node name="PlayerMeshInstance3D2" type="MeshInstance3D" parent="NPCs"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -10.0461, 0.519, 0.249913) +mesh = SubResource("CapsuleMesh_2h36r") +skeleton = NodePath("") +surface_material_override/0 = SubResource("StandardMaterial3D_cw102") + +[node name="Environment" type="Node" parent="."] + +[node name="Floor" parent="Environment" instance=ExtResource("1_r00ve")] +transform = Transform3D(1000, 0, 0, 0, 1, 0, 0, 0, 1000, 0, -1, 0) +metadata/_edit_lock_ = true + +[node name="Wall" type="CSGBox3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2.52545, 6.53866, -12.6331) +use_collision = true +size = Vector3(178.429, 14.0773, 1) +material = SubResource("StandardMaterial3D_auy8m") + +[node name="CSGCylinder3D" type="CSGCylinder3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -13.6511, 0.805455, -6.37532) +use_collision = true +radius = 1.71971 +height = 2.61091 +sides = 32 + +[node name="CSGCylinder3D5" type="CSGCylinder3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 12.9141, 0.31181, -5.46661) +use_collision = true +radius = 2.77591 +height = 1.62362 +sides = 32 + +[node name="CSGCylinder3D6" type="CSGCylinder3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -21.6099, 0.31181, 6.6322) +use_collision = true +radius = 1.57419 +height = 3.47475 +sides = 32 + +[node name="CSGCylinder3D2" type="CSGCylinder3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -3.81402, 0.805455, -8.78984) +use_collision = true +radius = 0.956285 +height = 2.61091 +sides = 32 + +[node name="CSGSphere3D" type="CSGSphere3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2.95333, -1.69814, -6.51262) +use_collision = true +radius = 3.34732 +rings = 32 + +[node name="CSGSphere3D2" type="CSGSphere3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -11.4682, -0.599204, 8.81048) +use_collision = true +radius = 2.65844 +rings = 32 + +[node name="CSGSphere3D3" type="CSGSphere3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -26.0848, -0.599204, -2.42244) +use_collision = true +radius = 2.14606 +rings = 32 + +[node name="CSGTorus3D2" type="CSGTorus3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 9.90455, -1.90735e-06, 7.89765) +use_collision = true +inner_radius = 0.971543 +outer_radius = 2.15226 +sides = 32 +ring_sides = 18 + +[node name="CSGBox3D2" type="CSGBox3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -21.1764, 0.760708, -6.1376) +use_collision = true +size = Vector3(2.64182, 2.52142, 2.30997) + +[node name="CSGBox3D5" type="CSGBox3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2.31901, 0.335247, 8.22829) +use_collision = true +size = Vector3(3.80964, 1.67049, 0.932048) + +[node name="CSGBox3D3" type="CSGBox3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -6.94346, 0.138478, -4.36159) +use_collision = true +size = Vector3(1.53893, 1.27695, 1.80814) + +[node name="CSGBox3D6" type="CSGBox3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -26.7985, 0.138478, 5.20734) +use_collision = true +size = Vector3(4.03502, 1.27695, 5.2198) + +[node name="CSGBox3D4" type="CSGBox3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 18.1236, 1.78638, -1.60318) +use_collision = true +size = Vector3(4.57784, 4.57276, 3.11285) + +[editable path="Player/PlayerCharacterBody3D2"] diff --git a/addons/phantom_camera/examples/example_scenes/3D/3d_follow_path_example_scene.tscn b/addons/phantom_camera/examples/example_scenes/3D/3d_follow_path_example_scene.tscn new file mode 100644 index 0000000..4228afd --- /dev/null +++ b/addons/phantom_camera/examples/example_scenes/3D/3d_follow_path_example_scene.tscn @@ -0,0 +1,221 @@ +[gd_scene load_steps=24 format=3 uid="uid://dxx7ngi0emt8h"] + +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/phantom_camera_host/phantom_camera_host.gd" id="1_lm5n8"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/phantom_camera/phantom_camera_3d.gd" id="3_bd7x3"] +[ext_resource type="Resource" uid="uid://cptfoggk2ok67" path="res://addons/phantom_camera/examples/resources/tween/player_phantom_camera_3d_tween.tres" id="3_od2r4"] +[ext_resource type="PackedScene" uid="uid://cixlwqycoox8h" path="res://addons/phantom_camera/examples/models/3d_cube_dark.tscn" id="4_dfdlo"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/resources/camera_3d_resource.gd" id="4_hni7n"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/resources/tween_resource.gd" id="4_lfwkm"] +[ext_resource type="Script" path="res://addons/phantom_camera/examples/scripts/3D/path_follow.gd" id="5_vdqkm"] +[ext_resource type="PackedScene" uid="uid://bulsh7s0ibmao" path="res://addons/phantom_camera/examples/example_scenes/3D/sub_scenes/playable_character_3d.tscn" id="5_vms5c"] +[ext_resource type="FontFile" uid="uid://c4mm3of2mc8o5" path="res://addons/phantom_camera/fonts/Nunito-Black.ttf" id="6_obo83"] + +[sub_resource type="Resource" id="Resource_ofv2c"] +script = ExtResource("4_hni7n") +cull_mask = 1048575 +h_offset = 0.0 +v_offset = 0.0 +fov = 75.0 + +[sub_resource type="Resource" id="Resource_01tho"] +script = ExtResource("4_lfwkm") +duration = 1.2 +transition = 3 +ease = 2 + +[sub_resource type="Resource" id="Resource_syh5m"] +script = ExtResource("4_hni7n") +cull_mask = 1048575 +h_offset = 0.0 +v_offset = 0.0 +fov = 75.0 + +[sub_resource type="Curve3D" id="Curve3D_b33df"] +_data = { +"points": PackedVector3Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -10), +"tilts": PackedFloat32Array(0, 0) +} +point_count = 2 + +[sub_resource type="BoxShape3D" id="BoxShape3D_aovgi"] +size = Vector3(6, 0.1, 10) + +[sub_resource type="BoxMesh" id="BoxMesh_0hdeh"] +size = Vector3(6, 0.1, 10) + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_fsm1b"] +transparency = 1 +albedo_color = Color(0.988235, 0.478431, 0.905882, 0.0901961) + +[sub_resource type="Resource" id="Resource_xci4c"] +script = ExtResource("4_hni7n") +cull_mask = 1048575 +h_offset = 0.0 +v_offset = 0.0 +fov = 75.0 + +[sub_resource type="Curve3D" id="Curve3D_8uw2x"] +_data = { +"points": PackedVector3Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0), +"tilts": PackedFloat32Array(0, 0) +} +point_count = 2 + +[sub_resource type="BoxShape3D" id="BoxShape3D_ctnqu"] +size = Vector3(12, 0.1, 4) + +[sub_resource type="BoxMesh" id="BoxMesh_f6dp8"] +size = Vector3(12, 0.1, 4) + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_gwnkj"] +transparency = 1 +albedo_color = Color(0.568403, 0.988235, 0.762724, 0.0901961) + +[sub_resource type="BoxMesh" id="BoxMesh_7l3dh"] + +[sub_resource type="BoxMesh" id="BoxMesh_as6ok"] + +[node name="Root" type="Node3D"] + +[node name="MainCamera3D" type="Camera3D" parent="."] +unique_name_in_owner = true +transform = Transform3D(0.999807, -0.00216249, 0.00184445, 0, 0.648836, 0.760728, -0.00284214, -0.760718, 0.648839, 0, 2.507, 1.5) + +[node name="PhantomCameraHost" type="Node" parent="MainCamera3D"] +script = ExtResource("1_lm5n8") + +[node name="DirectionalLight3D" type="DirectionalLight3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 0.707107, 0.707107, 0, -0.707107, 0.707107, 0, 8, 0) +metadata/_edit_lock_ = true + +[node name="PlayerPhantomCamera3D" type="Node3D" parent="." node_paths=PackedStringArray("follow_target")] +unique_name_in_owner = true +transform = Transform3D(0.999807, -0.00216249, 0.00184445, 0, 0.648836, 0.760728, -0.00284214, -0.760718, 0.648839, 0, 2.507, 1.5) +script = ExtResource("3_bd7x3") +priority = 10 +follow_mode = 2 +follow_target = NodePath("../PlayerCharacterBody3D2/PlayerVisual") +tween_resource = ExtResource("3_od2r4") +tween_on_load = false +camera_3d_resource = SubResource("Resource_ofv2c") +follow_offset = Vector3(0, 2, 1.5) +follow_damping = true + +[node name="PlayerCharacterBody3D2" parent="." instance=ExtResource("5_vms5c")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.507, 0) + +[node name="Paths" type="Node" parent="."] + +[node name="PathPhantomCamera3D" type="Node3D" parent="Paths" node_paths=PackedStringArray("follow_target", "follow_path")] +transform = Transform3D(-4.37114e-08, -1, -4.37114e-08, 0, -4.37114e-08, 1, -1, 4.37114e-08, 1.91069e-15, -0.31028, 7.9199, -1.60976) +script = ExtResource("3_bd7x3") +priority = 2 +follow_mode = 4 +follow_target = NodePath("../../PlayerCharacterBody3D2/PlayerVisual") +follow_path = NodePath("../FollowPath") +tween_resource = SubResource("Resource_01tho") +camera_3d_resource = SubResource("Resource_syh5m") +follow_damping = true + +[node name="FollowPath" type="Path3D" parent="Paths"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.31028, 7.9199, -1.60976) +curve = SubResource("Curve3D_b33df") + +[node name="StraightPathFollowTrigger" type="Area3D" parent="Paths" node_paths=PackedStringArray("path_pcam")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.0420399, -0.45, -6.73666) +priority = 5 +script = ExtResource("5_vdqkm") +path_pcam = NodePath("../PathPhantomCamera3D") +metadata/_edit_group_ = true + +[node name="CollisionShape3D" type="CollisionShape3D" parent="Paths/StraightPathFollowTrigger"] +shape = SubResource("BoxShape3D_aovgi") + +[node name="NPCInteractionZoneMesh" type="MeshInstance3D" parent="Paths/StraightPathFollowTrigger/CollisionShape3D"] +mesh = SubResource("BoxMesh_0hdeh") +skeleton = NodePath("../../../..") +surface_material_override/0 = SubResource("StandardMaterial3D_fsm1b") +metadata/_edit_group_ = true + +[node name="PathPhantomCamera3D2" type="Node3D" parent="Paths" node_paths=PackedStringArray("follow_target", "follow_path")] +transform = Transform3D(1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, 0, 7.9199, -13.4572) +visible = false +script = ExtResource("3_bd7x3") +priority = 2 +follow_mode = 4 +follow_target = NodePath("../../PlayerCharacterBody3D2/PlayerVisual") +follow_path = NodePath("../FollowPath2") +tween_resource = SubResource("Resource_01tho") +camera_3d_resource = SubResource("Resource_xci4c") +follow_damping = true +follow_damping_value = Vector3(0.6, 0.1, 0.1) + +[node name="FollowPath2" type="Path3D" parent="Paths"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -4.97141, 7.9199, -13.4572) +curve = SubResource("Curve3D_8uw2x") + +[node name="StraightPathFollowTrigger2" type="Area3D" parent="Paths" node_paths=PackedStringArray("path_pcam")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.0420399, 0, -13.7367) +priority = 5 +script = ExtResource("5_vdqkm") +path_pcam = NodePath("../PathPhantomCamera3D2") +metadata/_edit_group_ = true + +[node name="CollisionShape3D" type="CollisionShape3D" parent="Paths/StraightPathFollowTrigger2"] +shape = SubResource("BoxShape3D_ctnqu") + +[node name="NPCInteractionZoneMesh" type="MeshInstance3D" parent="Paths/StraightPathFollowTrigger2/CollisionShape3D"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.45, 0) +mesh = SubResource("BoxMesh_f6dp8") +skeleton = NodePath("../../../..") +surface_material_override/0 = SubResource("StandardMaterial3D_gwnkj") +metadata/_edit_group_ = true + +[node name="Environment" type="Node" parent="."] + +[node name="Floor" parent="Environment" instance=ExtResource("4_dfdlo")] +transform = Transform3D(1000, 0, 0, 0, 1, 0, 0, 0, 1000, 0, -1, 0) +metadata/_edit_lock_ = true + +[node name="Floor3" parent="Environment" instance=ExtResource("4_dfdlo")] +transform = Transform3D(6, 0, 0, 0, 1, 0, 0, 0, 1, -0.44204, 0, 1.76334) + +[node name="Floor2" parent="Environment/Floor3" instance=ExtResource("4_dfdlo")] +transform = Transform3D(0.166667, 0, 0, 0, 3, 0, 0, 0, 14, -0.516667, 1, -6.5) + +[node name="Floor5" parent="Environment/Floor3" instance=ExtResource("4_dfdlo")] +transform = Transform3D(0.166667, 0, 0, 0, 3, 0, 0, 0, 14, 0.65, 1, -6.5) + +[node name="Floor4" parent="Environment/Floor3" instance=ExtResource("4_dfdlo")] +transform = Transform3D(2, 0, 0, 0, 3, 0, 0, 0, 1, 0.0666667, 1, -18) + +[node name="Floor6" parent="Environment/Floor3" instance=ExtResource("4_dfdlo")] +transform = Transform3D(0.333333, 0, 0, 0, 3, 0, 0, 0, 1, -0.766667, 1, -13) +mesh = SubResource("BoxMesh_7l3dh") + +[node name="Floor8" parent="Environment/Floor3" instance=ExtResource("4_dfdlo")] +transform = Transform3D(0.166667, 0, 0, 0, 3, 0, 0, 0, 6, -1.01667, 1, -15.5) +mesh = SubResource("BoxMesh_as6ok") + +[node name="Floor9" parent="Environment/Floor3" instance=ExtResource("4_dfdlo")] +transform = Transform3D(0.166667, 0, 0, 0, 3, 0, 0, 0, 6, 1.15, 1, -15.5) +mesh = SubResource("BoxMesh_as6ok") + +[node name="Floor7" parent="Environment/Floor3" instance=ExtResource("4_dfdlo")] +transform = Transform3D(0.333333, 0, 0, 0, 3, 0, 0, 0, 1, 0.9, 1, -13) +mesh = SubResource("BoxMesh_7l3dh") + +[node name="NPCDescriptionLabel" type="Label3D" parent="Environment"] +transform = Transform3D(5.21541e-08, -1, -7.7486e-07, -1.10675e-15, 2.23517e-07, 0.999999, -0.999999, -7.45058e-08, -5.68829e-14, -3.47306, 2.59595, -5.51755) +text = "Camera follows player while confined to a Path3D" +font = ExtResource("6_obo83") +font_size = 64 + +[node name="MovementInstructionsLabel" type="Label3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, -0.02174, -0.455369, 0.570585) +modulate = Color(0.294118, 1, 0.631373, 1) +text = "[WASD] to move" +font = ExtResource("6_obo83") +font_size = 48 + +[editable path="PlayerCharacterBody3D2"] diff --git a/addons/phantom_camera/examples/example_scenes/3D/3d_follow_simple_example_scene.tscn b/addons/phantom_camera/examples/example_scenes/3D/3d_follow_simple_example_scene.tscn new file mode 100644 index 0000000..f81396f --- /dev/null +++ b/addons/phantom_camera/examples/example_scenes/3D/3d_follow_simple_example_scene.tscn @@ -0,0 +1,174 @@ +[gd_scene load_steps=14 format=3 uid="uid://buglvjwpn85ny"] + +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/phantom_camera_host/phantom_camera_host.gd" id="1_3tok8"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/phantom_camera/phantom_camera_3d.gd" id="2_grjck"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/resources/tween_resource.gd" id="3_j3f4l"] +[ext_resource type="Script" path="res://addons/phantom_camera/examples/scripts/3D/player_controller.gd" id="3_uymu2"] +[ext_resource type="PackedScene" uid="uid://cixlwqycoox8h" path="res://addons/phantom_camera/examples/models/3d_cube_dark.tscn" id="4_4u2y6"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/resources/camera_3d_resource.gd" id="4_sielv"] +[ext_resource type="Texture2D" uid="uid://c7ja4woxol8yc" path="res://addons/phantom_camera/examples/textures/3D/checker_pattern_dark.png" id="5_1tybo"] + +[sub_resource type="Resource" id="Resource_28vpp"] +script = ExtResource("3_j3f4l") +duration = 1.0 +transition = 0 +ease = 2 + +[sub_resource type="Resource" id="Resource_axopo"] +script = ExtResource("4_sielv") +cull_mask = 1048575 +h_offset = 0.0 +v_offset = 0.0 +fov = 75.0 + +[sub_resource type="CapsuleMesh" id="CapsuleMesh_pda7a"] + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_u74j7"] +albedo_color = Color(0.988235, 0.498039, 0.498039, 1) + +[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_3xplc"] + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_auy8m"] +albedo_texture = ExtResource("5_1tybo") +uv1_triplanar = true +uv1_world_triplanar = true + +[node name="Node3D2" type="Node3D"] + +[node name="MainCamera3D" type="Camera3D" parent="."] +unique_name_in_owner = true +transform = Transform3D(0.999954, 0, 0, 0, 0.906188, 0.422588, 0, -0.422562, 0.906243, -13.1946, 2.34415, 10.4086) + +[node name="PhantomCameraHost" type="Node" parent="MainCamera3D"] +script = ExtResource("1_3tok8") + +[node name="DirectionalLight3D" type="DirectionalLight3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 0.707107, 0.707107, 0, -0.707107, 0.707107, 0, 8, 0) +metadata/_edit_lock_ = true + +[node name="Player" type="Node" parent="."] + +[node name="PlayerPhantomCamera3D" type="Node3D" parent="Player" node_paths=PackedStringArray("follow_target")] +unique_name_in_owner = true +transform = Transform3D(0.999954, 0, 0, 0, 0.906188, 0.422588, 0, -0.422562, 0.906243, -13.1946, 2.34415, 10.4086) +script = ExtResource("2_grjck") +priority = 10 +follow_mode = 2 +follow_target = NodePath("../PlayerCharacterBody3D2") +tween_resource = SubResource("Resource_28vpp") +tween_on_load = false +camera_3d_resource = SubResource("Resource_axopo") +follow_offset = Vector3(0, 2, 2) +follow_damping = true + +[node name="PlayerCharacterBody3D2" type="CharacterBody3D" parent="Player"] +unique_name_in_owner = true +transform = Transform3D(0.999897, 0.0143636, 0, -0.0143636, 0.999897, 0, 0, 0, 1, -13.1946, 0.344147, 8.40857) +script = ExtResource("3_uymu2") +metadata/_edit_group_ = true + +[node name="PlayerModel" type="MeshInstance3D" parent="Player/PlayerCharacterBody3D2"] +unique_name_in_owner = true +mesh = SubResource("CapsuleMesh_pda7a") +surface_material_override/0 = SubResource("StandardMaterial3D_u74j7") + +[node name="PlayerArea3D" type="Area3D" parent="Player/PlayerCharacterBody3D2"] + +[node name="CollisionShape3D" type="CollisionShape3D" parent="Player/PlayerCharacterBody3D2/PlayerArea3D"] +shape = SubResource("CapsuleShape3D_3xplc") + +[node name="PlayerCollisionShape3D" type="CollisionShape3D" parent="Player/PlayerCharacterBody3D2"] +shape = SubResource("CapsuleShape3D_3xplc") + +[node name="NPCs" type="Node" parent="."] + +[node name="Environment" type="Node" parent="."] + +[node name="Floor" parent="Environment" instance=ExtResource("4_4u2y6")] +transform = Transform3D(1000, 0, 0, 0, 1, 0, 0, 0, 1000, 0, -1, 0) +metadata/_edit_lock_ = true + +[node name="CSGCylinder3D" type="CSGCylinder3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -13.6511, 0.805455, -6.37532) +use_collision = true +radius = 1.71971 +height = 2.61091 +sides = 32 + +[node name="CSGCylinder3D5" type="CSGCylinder3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -21.8332, -0.540694, -3.39517) +use_collision = true +radius = 1.53269 +height = 2.5036 +sides = 32 + +[node name="CSGCylinder3D6" type="CSGCylinder3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -16.936, -1.50101, 1.22863) +use_collision = true +radius = 1.57419 +height = 3.47475 +sides = 32 + +[node name="CSGCylinder3D2" type="CSGCylinder3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -3.81402, 0.805455, -8.78984) +use_collision = true +radius = 0.956285 +height = 2.61091 +sides = 32 + +[node name="CSGSphere3D" type="CSGSphere3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -23.6875, -1.69814, 3.36997) +use_collision = true +radius = 3.34732 +rings = 32 + +[node name="CSGSphere3D2" type="CSGSphere3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -9.14955, -0.599204, -1.04651) +use_collision = true +radius = 2.65844 +rings = 32 + +[node name="CSGSphere3D3" type="CSGSphere3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -26.0848, -0.599204, -2.42244) +use_collision = true +radius = 2.14606 +rings = 32 + +[node name="CSGTorus3D2" type="CSGTorus3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -6.44645, -0.497663, 4.44352) +use_collision = true +inner_radius = 0.971543 +outer_radius = 2.15226 +sides = 32 +ring_sides = 18 + +[node name="CSGBox3D" type="CSGBox3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2.52545, 6.53866, -12.6331) +use_collision = true +size = Vector3(178.429, 14.0773, 1) +material = SubResource("StandardMaterial3D_auy8m") + +[node name="CSGBox3D2" type="CSGBox3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -21.1764, 0.760708, -6.1376) +use_collision = true +size = Vector3(2.64182, 2.52142, 2.30997) + +[node name="CSGBox3D5" type="CSGBox3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -18.1256, 0.335247, 7.14677) +use_collision = true +size = Vector3(3.80964, 1.67049, 0.932048) + +[node name="CSGBox3D3" type="CSGBox3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -6.94346, 0.138478, -4.36159) +use_collision = true +size = Vector3(1.53893, 1.27695, 1.80814) + +[node name="CSGBox3D6" type="CSGBox3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -3.30382, 0.138478, -1.89037) +use_collision = true +size = Vector3(4.03502, 1.27695, 5.2198) + +[node name="CSGBox3D4" type="CSGBox3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -9.04727, 0.0440434, 8.36617) +use_collision = true +size = Vector3(4.57784, 1.08809, 3.11285) diff --git a/addons/phantom_camera/examples/example_scenes/3D/3d_follow_third_person_example_scene.tscn b/addons/phantom_camera/examples/example_scenes/3D/3d_follow_third_person_example_scene.tscn new file mode 100644 index 0000000..5c1f34c --- /dev/null +++ b/addons/phantom_camera/examples/example_scenes/3D/3d_follow_third_person_example_scene.tscn @@ -0,0 +1,171 @@ +[gd_scene load_steps=16 format=3 uid="uid://4i5csj0s34nb"] + +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/resources/tween_resource.gd" id="2_47xf2"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/phantom_camera/phantom_camera_3d.gd" id="2_whx47"] +[ext_resource type="PackedScene" uid="uid://cixlwqycoox8h" path="res://addons/phantom_camera/examples/models/3d_cube_dark.tscn" id="4_lii5s"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/resources/camera_3d_resource.gd" id="5_jt2lp"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/phantom_camera_host/phantom_camera_host.gd" id="5_oc4q1"] +[ext_resource type="FontFile" uid="uid://c4mm3of2mc8o5" path="res://addons/phantom_camera/fonts/Nunito-Black.ttf" id="7_kg7u1"] +[ext_resource type="PackedScene" uid="uid://mskcwn1a1v6d" path="res://addons/phantom_camera/examples/example_scenes/3D/sub_scenes/playable_character_third_person_3d.tscn" id="7_kut0u"] + +[sub_resource type="Resource" id="Resource_8fhct"] +script = ExtResource("2_47xf2") +duration = 0.3 +transition = 3 +ease = 1 + +[sub_resource type="Resource" id="Resource_7m0fv"] +script = ExtResource("5_jt2lp") +cull_mask = 1048575 +h_offset = 0.0 +v_offset = 0.0 +fov = 75.0 + +[sub_resource type="Resource" id="Resource_e7t18"] +script = ExtResource("2_47xf2") +duration = 0.4 +transition = 2 +ease = 1 + +[sub_resource type="Resource" id="Resource_jogxh"] +script = ExtResource("5_jt2lp") +cull_mask = 1048575 +h_offset = 1.0 +v_offset = 0.0 +fov = 75.0 + +[sub_resource type="BoxMesh" id="BoxMesh_wsigl"] +size = Vector3(1, 10, 20) + +[sub_resource type="BoxMesh" id="BoxMesh_bj3re"] +size = Vector3(1, 7, 7) + +[sub_resource type="Resource" id="Resource_afrr1"] +script = ExtResource("2_47xf2") +duration = 0.6 +transition = 3 +ease = 1 + +[sub_resource type="Resource" id="Resource_y5dqe"] +script = ExtResource("5_jt2lp") +cull_mask = 1048575 +h_offset = 0.0 +v_offset = 0.0 +fov = 75.0 + +[node name="Root" type="Node3D"] + +[node name="PlayerPhantomCamera3D" type="Node3D" parent="." node_paths=PackedStringArray("follow_target")] +unique_name_in_owner = true +transform = Transform3D(1, 0, 0, 0, 0.866025, 0.499999, 0, -0.5, 0.866023, -0.0194088, 2.25688, 3.01476) +script = ExtResource("2_whx47") +priority = 10 +follow_mode = 6 +follow_target = NodePath("../PlayerCharacterBody3D/PlayerVisual") +tween_resource = SubResource("Resource_8fhct") +tween_on_load = null +camera_3d_resource = SubResource("Resource_7m0fv") +follow_damping = true +follow_distance = 3.5 +spring_length = 3.5 + +[node name="PlayerAimPhantomCamera3D" type="Node3D" parent="." node_paths=PackedStringArray("follow_target")] +unique_name_in_owner = true +transform = Transform3D(0.953716, -0.0104945, 0.300522, 0, 0.99939, 0.0348995, -0.300706, -0.0332842, 0.953135, 0.431374, 1.35923, 1.41338) +script = ExtResource("2_whx47") +follow_mode = 6 +follow_target = NodePath("../PlayerCharacterBody3D/PlayerVisual") +tween_resource = SubResource("Resource_e7t18") +tween_on_load = null +camera_3d_resource = SubResource("Resource_jogxh") +follow_offset = Vector3(0, 0.8, 0) +follow_damping = true +follow_distance = 1.5 +spring_length = 1.5 + +[node name="PlayerCharacterBody3D" parent="." instance=ExtResource("7_kut0u")] +unique_name_in_owner = true + +[node name="MainCamera3D" type="Camera3D" parent="."] +unique_name_in_owner = true +transform = Transform3D(1, 0, 0, 0, 0.866025, 0.499999, 0, -0.5, 0.866023, -0.0194088, 2.25688, 3.01476) +current = true + +[node name="PhantomCameraHost" type="Node" parent="MainCamera3D"] +script = ExtResource("5_oc4q1") + +[node name="Environment" type="Node" parent="."] + +[node name="Floor" parent="Environment" instance=ExtResource("4_lii5s")] +transform = Transform3D(1000, 0, 0, 0, 1, 0, 0, 0, 1000, 0, -1, 0) +metadata/_edit_lock_ = true + +[node name="Wall" parent="Environment" instance=ExtResource("4_lii5s")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -9.5, 4.5, 0) +mesh = SubResource("BoxMesh_wsigl") +metadata/_edit_lock_ = true + +[node name="Wall5" parent="Environment" instance=ExtResource("4_lii5s")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -6.133, 3, -6.5) +mesh = SubResource("BoxMesh_bj3re") +metadata/_edit_lock_ = true + +[node name="Wall6" parent="Environment" instance=ExtResource("4_lii5s")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2.5, 3, 0) +mesh = SubResource("BoxMesh_bj3re") +metadata/_edit_lock_ = true + +[node name="Wall7" parent="Environment" instance=ExtResource("4_lii5s")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2.5, 3, 0) +mesh = SubResource("BoxMesh_bj3re") +metadata/_edit_lock_ = true + +[node name="Wall2" parent="Environment" instance=ExtResource("4_lii5s")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 9.5, 4.5, 0) +mesh = SubResource("BoxMesh_wsigl") +metadata/_edit_lock_ = true + +[node name="Wall3" parent="Environment" instance=ExtResource("4_lii5s")] +transform = Transform3D(-4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, 0, 4.5, 10.5) +mesh = SubResource("BoxMesh_wsigl") +metadata/_edit_lock_ = true + +[node name="Wall4" parent="Environment" instance=ExtResource("4_lii5s")] +transform = Transform3D(-4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, 0, 4.5, -9.5) +mesh = SubResource("BoxMesh_wsigl") +metadata/_edit_lock_ = true + +[node name="DirectionalLight3D" type="DirectionalLight3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 0.707107, 0.707107, 0, -0.707107, 0.707107, 0, 8, 0) +metadata/_edit_lock_ = true + +[node name="CeilingPhantomCamera3D" type="Node3D" parent="."] +unique_name_in_owner = true +transform = Transform3D(-4.37114e-08, -1, 2.98023e-08, 0, 2.98023e-08, 1, -1, 4.37114e-08, -1.3027e-15, -0.200665, 13.366, -0.162648) +script = ExtResource("2_whx47") +tween_resource = SubResource("Resource_afrr1") +tween_on_load = null +camera_3d_resource = SubResource("Resource_y5dqe") + +[node name="MovementInstructionsLabel" type="Label3D" parent="."] +transform = Transform3D(1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, 0.0505604, -0.484909, 1.44357) +modulate = Color(0.294118, 1, 0.631373, 1) +text = "[WASD] to move" +font = ExtResource("7_kg7u1") +font_size = 48 + +[node name="MovementInstructionsLabel3" type="Label3D" parent="."] +transform = Transform3D(1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, 0.0505604, -0.484909, 0.817134) +modulate = Color(0.294118, 1, 0.631373, 1) +text = "[Right Mouse Click] to \"aim\"" +font = ExtResource("7_kg7u1") +font_size = 48 + +[node name="MovementInstructionsLabel2" type="Label3D" parent="."] +transform = Transform3D(1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, -0.0440154, -0.490478, -6.30248) +modulate = Color(0.294118, 1, 0.631373, 1) +text = "[Space] to toggle PCam" +font = ExtResource("7_kg7u1") +font_size = 48 + +[editable path="PlayerCharacterBody3D"] diff --git a/addons/phantom_camera/examples/example_scenes/3D/3d_look_at_example_scene.tscn b/addons/phantom_camera/examples/example_scenes/3D/3d_look_at_example_scene.tscn new file mode 100644 index 0000000..d6fa268 --- /dev/null +++ b/addons/phantom_camera/examples/example_scenes/3D/3d_look_at_example_scene.tscn @@ -0,0 +1,193 @@ +[gd_scene load_steps=14 format=3 uid="uid://bdhrdhbux7sjg"] + +[ext_resource type="PackedScene" uid="uid://bulsh7s0ibmao" path="res://addons/phantom_camera/examples/example_scenes/3D/sub_scenes/playable_character_3d.tscn" id="1_i2pjc"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/phantom_camera_host/phantom_camera_host.gd" id="1_lldvu"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/phantom_camera/phantom_camera_3d.gd" id="2_8md3q"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/resources/tween_resource.gd" id="3_dqss1"] +[ext_resource type="PackedScene" uid="uid://cixlwqycoox8h" path="res://addons/phantom_camera/examples/models/3d_cube_dark.tscn" id="4_2i811"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/resources/camera_3d_resource.gd" id="4_m3qpq"] +[ext_resource type="Texture2D" uid="uid://c7ja4woxol8yc" path="res://addons/phantom_camera/examples/textures/3D/checker_pattern_dark.png" id="5_u5qhp"] + +[sub_resource type="Resource" id="Resource_pwcgo"] +script = ExtResource("3_dqss1") +duration = 1.0 +transition = 0 +ease = 2 + +[sub_resource type="Resource" id="Resource_ft2w3"] +script = ExtResource("4_m3qpq") +cull_mask = 1048575 +h_offset = 0.0 +v_offset = 0.0 +fov = 75.0 + +[sub_resource type="CapsuleMesh" id="CapsuleMesh_2h36r"] + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_w3olp"] +albedo_color = Color(0.227451, 0.337255, 0.576471, 1) + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_cw102"] +albedo_color = Color(0.227451, 0.337255, 0.576471, 1) + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_auy8m"] +albedo_texture = ExtResource("5_u5qhp") +uv1_triplanar = true +uv1_world_triplanar = true + +[node name="Node3D" type="Node3D"] + +[node name="MainCamera3D" type="Camera3D" parent="."] +unique_name_in_owner = true +transform = Transform3D(0.998682, 0.0324725, -0.0397495, 0, 0.774433, 0.632656, 0.0513272, -0.631822, 0.773413, -0.137901, 4.03222, 6.36446) + +[node name="PhantomCameraHost" type="Node" parent="MainCamera3D"] +process_priority = 100 +script = ExtResource("1_lldvu") + +[node name="DirectionalLight3D" type="DirectionalLight3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 0.707107, 0.707107, 0, -0.707107, 0.707107, 0, 8, 0) +metadata/_edit_lock_ = true + +[node name="PhantomCamera3D" type="Node3D" parent="." node_paths=PackedStringArray("look_at_target", "look_at_targets")] +transform = Transform3D(0.998682, 0.0324725, -0.0397495, 0, 0.774433, 0.632656, 0.0513272, -0.631822, 0.773413, -0.137901, 4.03222, 6.36446) +script = ExtResource("2_8md3q") +priority = 10 +look_at_mode = 2 +look_at_target = NodePath("../PlayerCharacterBody3D2/PlayerVisual") +look_at_targets = [null, NodePath("../NPCs/PlayerMeshInstance3D")] +tween_resource = SubResource("Resource_pwcgo") +tween_on_load = false +camera_3d_resource = SubResource("Resource_ft2w3") +look_at_damping = true +look_at_damping_value = 0.1 + +[node name="PlayerCharacterBody3D2" parent="." instance=ExtResource("1_i2pjc")] + +[node name="NPCs" type="Node" parent="."] + +[node name="PlayerMeshInstance3D" type="MeshInstance3D" parent="NPCs"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1.96028, 0.519002, -1.52506) +mesh = SubResource("CapsuleMesh_2h36r") +skeleton = NodePath("") +surface_material_override/0 = SubResource("StandardMaterial3D_w3olp") + +[node name="PlayerMeshInstance3D2" type="MeshInstance3D" parent="NPCs"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2.59952, 0.519, 4.06618) +mesh = SubResource("CapsuleMesh_2h36r") +skeleton = NodePath("") +surface_material_override/0 = SubResource("StandardMaterial3D_cw102") + +[node name="Environment" type="Node" parent="."] + +[node name="Floor" parent="Environment" instance=ExtResource("4_2i811")] +transform = Transform3D(1000, 0, 0, 0, 1, 0, 0, 0, 1000, 0, -1, 0) +metadata/_edit_lock_ = true + +[node name="CSGCylinder3D" type="CSGCylinder3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1.00548, 0.805455, -6.37532) +use_collision = true +radius = 1.71971 +height = 2.61091 +sides = 32 + +[node name="CSGCylinder3D5" type="CSGCylinder3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 25.5597, 0.31181, -5.46661) +use_collision = true +radius = 2.77591 +height = 1.62362 +sides = 32 + +[node name="CSGCylinder3D6" type="CSGCylinder3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -8.96428, 0.31181, 6.6322) +use_collision = true +radius = 1.57419 +height = 3.47475 +sides = 32 + +[node name="CSGCylinder3D3" type="CSGCylinder3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 15.3959, 0.201103, 2.71259) +use_collision = true +radius = 1.41311 +height = 1.40221 +sides = 32 + +[node name="CSGCylinder3D4" type="CSGCylinder3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 8.02677, 0.201101, 11.6804) +use_collision = true +radius = 2.21673 +height = 7.88261 +sides = 32 + +[node name="CSGCylinder3D2" type="CSGCylinder3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 8.8316, 0.805455, -8.78984) +use_collision = true +radius = 0.956285 +height = 2.61091 +sides = 32 + +[node name="CSGSphere3D" type="CSGSphere3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 15.5989, -1.69814, -6.51262) +use_collision = true +radius = 3.34732 +rings = 32 + +[node name="CSGSphere3D2" type="CSGSphere3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.17742, -0.599204, 8.81048) +use_collision = true +radius = 2.65844 +rings = 32 + +[node name="CSGSphere3D3" type="CSGSphere3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -13.4392, -0.599204, -2.42244) +use_collision = true +radius = 2.14606 +rings = 32 + +[node name="CSGTorus3D" type="CSGTorus3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -4.58998, -1.90735e-06, 0.346393) +use_collision = true +inner_radius = 1.3 +outer_radius = 2.0 +sides = 32 +ring_sides = 18 + +[node name="CSGTorus3D2" type="CSGTorus3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 22.5502, -1.90735e-06, 7.89765) +use_collision = true +inner_radius = 0.971543 +outer_radius = 2.15226 +sides = 32 +ring_sides = 18 + +[node name="CSGBox3D" type="CSGBox3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 10.1202, 6.53866, -12.6331) +use_collision = true +size = Vector3(178.429, 14.0773, 1) +material = SubResource("StandardMaterial3D_auy8m") + +[node name="CSGBox3D2" type="CSGBox3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -8.53078, 0.760708, -6.1376) +use_collision = true +size = Vector3(2.64182, 2.52142, 2.30997) + +[node name="CSGBox3D5" type="CSGBox3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 14.9646, 0.335247, 8.22829) +use_collision = true +size = Vector3(3.80964, 1.67049, 0.932048) + +[node name="CSGBox3D3" type="CSGBox3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 5.70216, 0.138478, -4.36159) +use_collision = true +size = Vector3(1.53893, 1.27695, 1.80814) + +[node name="CSGBox3D6" type="CSGBox3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -14.1529, 0.138478, 5.20734) +use_collision = true +size = Vector3(4.03502, 1.27695, 5.2198) + +[node name="CSGBox3D4" type="CSGBox3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 30.7692, 1.78638, -1.60318) +use_collision = true +size = Vector3(4.57784, 4.57276, 3.11285) + +[editable path="PlayerCharacterBody3D2"] diff --git a/addons/phantom_camera/examples/example_scenes/3D/3d_tweening_example_scene.tscn b/addons/phantom_camera/examples/example_scenes/3D/3d_tweening_example_scene.tscn new file mode 100644 index 0000000..eeba110 --- /dev/null +++ b/addons/phantom_camera/examples/example_scenes/3D/3d_tweening_example_scene.tscn @@ -0,0 +1,258 @@ +[gd_scene load_steps=22 format=3 uid="uid://5xtssqdfilal"] + +[ext_resource type="PackedScene" uid="uid://cixlwqycoox8h" path="res://addons/phantom_camera/examples/models/3d_cube_dark.tscn" id="1_ydeog"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/phantom_camera_host/phantom_camera_host.gd" id="2_b2yrt"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/phantom_camera/phantom_camera_3d.gd" id="3_m2w30"] +[ext_resource type="Resource" uid="uid://cptfoggk2ok67" path="res://addons/phantom_camera/examples/resources/tween/player_phantom_camera_3d_tween.tres" id="4_425ma"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/resources/camera_3d_resource.gd" id="5_cn3g7"] +[ext_resource type="Script" path="res://addons/phantom_camera/examples/scripts/3D/3d_trigger_area.gd" id="5_h0ouh"] +[ext_resource type="PackedScene" uid="uid://bulsh7s0ibmao" path="res://addons/phantom_camera/examples/example_scenes/3D/sub_scenes/playable_character_3d.tscn" id="6_gcjyn"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/resources/tween_resource.gd" id="6_wup4d"] +[ext_resource type="FontFile" uid="uid://c4mm3of2mc8o5" path="res://addons/phantom_camera/fonts/Nunito-Black.ttf" id="8_60rny"] + +[sub_resource type="Resource" id="Resource_0dtvs"] +script = ExtResource("5_cn3g7") +cull_mask = 1048575 +h_offset = 0.0 +v_offset = 0.0 +fov = 75.0 + +[sub_resource type="BoxShape3D" id="BoxShape3D_j6fha"] +size = Vector3(5, 0.1, 4) + +[sub_resource type="BoxMesh" id="BoxMesh_xg4en"] +size = Vector3(5, 0.1, 4) + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_2dct5"] +transparency = 1 +albedo_color = Color(0.988235, 0.478431, 0.905882, 0.0901961) + +[sub_resource type="Resource" id="Resource_v8ndi"] +script = ExtResource("6_wup4d") +duration = 0.6 +transition = 0 +ease = 2 + +[sub_resource type="Resource" id="Resource_kmep1"] +script = ExtResource("5_cn3g7") +cull_mask = 1048575 +h_offset = 0.0 +v_offset = 0.0 +fov = 75.0 + +[sub_resource type="Resource" id="Resource_uxg44"] +script = ExtResource("6_wup4d") +duration = 0.3 +transition = 1 +ease = 2 + +[sub_resource type="Resource" id="Resource_eu3bc"] +script = ExtResource("5_cn3g7") +cull_mask = 1048575 +h_offset = 0.0 +v_offset = 0.0 +fov = 75.0 + +[sub_resource type="Resource" id="Resource_0nci0"] +script = ExtResource("6_wup4d") +duration = 0.3 +transition = 8 +ease = 2 + +[sub_resource type="Resource" id="Resource_u0lff"] +script = ExtResource("5_cn3g7") +cull_mask = 1048575 +h_offset = 0.0 +v_offset = 0.0 +fov = 75.0 + +[sub_resource type="Resource" id="Resource_50m5g"] +script = ExtResource("6_wup4d") +duration = 1.2 +transition = 10 +ease = 2 + +[sub_resource type="Resource" id="Resource_rexf8"] +script = ExtResource("5_cn3g7") +cull_mask = 1048575 +h_offset = 0.0 +v_offset = 0.0 +fov = 75.0 + +[node name="Root" type="Node3D"] + +[node name="Environment" type="Node" parent="."] + +[node name="DirectionalLight3D" type="DirectionalLight3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 0.707107, 0.707107, 0, -0.707107, 0.707107, 0, 8, 0) +metadata/_edit_lock_ = true + +[node name="Floor" parent="Environment" instance=ExtResource("1_ydeog")] +transform = Transform3D(1000, 0, 0, 0, 1, 0, 0, 0, 1000, 0, -1, 0) +metadata/_edit_lock_ = true + +[node name="MainCamera3D" type="Camera3D" parent="."] +unique_name_in_owner = true +transform = Transform3D(0.999889, 0, 0, 0, 0.707092, 0.707088, 0, -0.707092, 0.707088, 0.083587, 2.507, 4.05493) + +[node name="PhantomCameraHost" type="Node" parent="MainCamera3D"] +script = ExtResource("2_b2yrt") + +[node name="------------------" type="Node" parent="."] + +[node name="PlayerPhantomCamera3D" type="Node3D" parent="." node_paths=PackedStringArray("follow_target")] +unique_name_in_owner = true +transform = Transform3D(0.999889, 0, 0, 0, 0.707092, 0.707088, 0, -0.707092, 0.707088, 0.083587, 2.507, 4.05493) +script = ExtResource("3_m2w30") +priority = 3 +follow_mode = 2 +follow_target = NodePath("../PlayerCharacterBody3D2/PlayerVisual") +tween_resource = ExtResource("4_425ma") +tween_on_load = false +camera_3d_resource = SubResource("Resource_0dtvs") +follow_offset = Vector3(0, 2, 2) +follow_damping = true + +[node name="PlayerCharacterBody3D2" parent="." instance=ExtResource("6_gcjyn")] + +[node name="-------------------" type="Node" parent="."] + +[node name="Tweening Example" type="Node3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -1.97) + +[node name="Linear" type="Node3D" parent="Tweening Example"] + +[node name="EntryRoomTrigger" type="Area3D" parent="Tweening Example/Linear" node_paths=PackedStringArray("area_pcam")] +priority = 5 +script = ExtResource("5_h0ouh") +area_pcam = NodePath("../PhantomCamera3D") +metadata/_edit_group_ = true + +[node name="CollisionShape3D" type="CollisionShape3D" parent="Tweening Example/Linear/EntryRoomTrigger"] +shape = SubResource("BoxShape3D_j6fha") + +[node name="NPCInteractionZoneMesh" type="MeshInstance3D" parent="Tweening Example/Linear/EntryRoomTrigger"] +mesh = SubResource("BoxMesh_xg4en") +skeleton = NodePath("../../../../..") +surface_material_override/0 = SubResource("StandardMaterial3D_2dct5") +metadata/_edit_group_ = true + +[node name="PhantomCamera3D" type="Node3D" parent="Tweening Example/Linear"] +transform = Transform3D(1, 0, 0, 0, 0.642788, 0.766044, 0, -0.766044, 0.642788, 0, 4.8, 3.3) +script = ExtResource("3_m2w30") +tween_resource = SubResource("Resource_v8ndi") +camera_3d_resource = SubResource("Resource_kmep1") + +[node name="TweenNameLabel" type="Label3D" parent="Tweening Example/Linear"] +transform = Transform3D(1, 0, 0, 0, 0.695913, 0.718126, 0, -0.718126, 0.695913, -1.8, 0.5, 0) +text = "Transition Type: +Linear + +Duration: +0.6s" +font = ExtResource("8_60rny") +font_size = 48 + +[node name="Sine" type="Node3D" parent="Tweening Example"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -7.4) + +[node name="EntryRoomTrigger" type="Area3D" parent="Tweening Example/Sine" node_paths=PackedStringArray("area_pcam")] +priority = 5 +script = ExtResource("5_h0ouh") +area_pcam = NodePath("../PhantomCamera3D") +metadata/_edit_group_ = true + +[node name="CollisionShape3D" type="CollisionShape3D" parent="Tweening Example/Sine/EntryRoomTrigger"] +shape = SubResource("BoxShape3D_j6fha") + +[node name="NPCInteractionZoneMesh" type="MeshInstance3D" parent="Tweening Example/Sine/EntryRoomTrigger"] +mesh = SubResource("BoxMesh_xg4en") +skeleton = NodePath("../../../../..") +surface_material_override/0 = SubResource("StandardMaterial3D_2dct5") +metadata/_edit_group_ = true + +[node name="PhantomCamera3D" type="Node3D" parent="Tweening Example/Sine"] +transform = Transform3D(1, 0, 0, 0, 0.642788, 0.766044, 0, -0.766044, 0.642788, 0, 4.8, 3.3) +script = ExtResource("3_m2w30") +tween_resource = SubResource("Resource_uxg44") +camera_3d_resource = SubResource("Resource_eu3bc") + +[node name="TweenNameLabel" type="Label3D" parent="Tweening Example/Sine"] +transform = Transform3D(1, 0, 0, 0, 0.695913, 0.718126, 0, -0.718126, 0.695913, 1.7, 0.5, 0) +text = "Transition Type: +Sine + +Duration: +0.3s" +font = ExtResource("8_60rny") +font_size = 72 + +[node name="Circ" type="Node3D" parent="Tweening Example"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -14.1) + +[node name="EntryRoomTrigger" type="Area3D" parent="Tweening Example/Circ" node_paths=PackedStringArray("area_pcam")] +priority = 5 +script = ExtResource("5_h0ouh") +area_pcam = NodePath("../PhantomCamera3D") +metadata/_edit_group_ = true + +[node name="CollisionShape3D" type="CollisionShape3D" parent="Tweening Example/Circ/EntryRoomTrigger"] +shape = SubResource("BoxShape3D_j6fha") + +[node name="NPCInteractionZoneMesh" type="MeshInstance3D" parent="Tweening Example/Circ/EntryRoomTrigger"] +mesh = SubResource("BoxMesh_xg4en") +skeleton = NodePath("../../../../..") +surface_material_override/0 = SubResource("StandardMaterial3D_2dct5") +metadata/_edit_group_ = true + +[node name="PhantomCamera3D" type="Node3D" parent="Tweening Example/Circ"] +transform = Transform3D(1, 0, 0, 0, 0.642788, 0.766044, 0, -0.766044, 0.642788, 0, 4.8, 3.3) +script = ExtResource("3_m2w30") +tween_resource = SubResource("Resource_0nci0") +camera_3d_resource = SubResource("Resource_u0lff") + +[node name="TweenNameLabel" type="Label3D" parent="Tweening Example/Circ"] +transform = Transform3D(1, 0, 0, 0, 0.695913, 0.718126, 0, -0.718126, 0.695913, -1.8, 0.5, 0) +text = "Transition Type: +Circ + +Duration: +0.3s" +font = ExtResource("8_60rny") +font_size = 72 + +[node name="Back" type="Node3D" parent="Tweening Example"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -21) + +[node name="EntryRoomTrigger" type="Area3D" parent="Tweening Example/Back" node_paths=PackedStringArray("area_pcam")] +priority = 5 +script = ExtResource("5_h0ouh") +area_pcam = NodePath("../PhantomCamera3D") +metadata/_edit_group_ = true + +[node name="CollisionShape3D" type="CollisionShape3D" parent="Tweening Example/Back/EntryRoomTrigger"] +shape = SubResource("BoxShape3D_j6fha") + +[node name="NPCInteractionZoneMesh" type="MeshInstance3D" parent="Tweening Example/Back/EntryRoomTrigger"] +mesh = SubResource("BoxMesh_xg4en") +skeleton = NodePath("../../../../..") +surface_material_override/0 = SubResource("StandardMaterial3D_2dct5") +metadata/_edit_group_ = true + +[node name="PhantomCamera3D" type="Node3D" parent="Tweening Example/Back"] +transform = Transform3D(1, 0, 0, 0, 0.642788, 0.766044, 0, -0.766044, 0.642788, -0.8, 4.8, 3.3) +script = ExtResource("3_m2w30") +tween_resource = SubResource("Resource_50m5g") +camera_3d_resource = SubResource("Resource_rexf8") + +[node name="TweenNameLabel" type="Label3D" parent="Tweening Example/Back"] +transform = Transform3D(1, 0, 0, 0, 0.695913, 0.718126, 0, -0.718126, 0.695913, 1.7, 0.5, 0) +text = "Transition Type: +Back + +Duration: +1.2s" +font = ExtResource("8_60rny") +font_size = 48 + +[editable path="PlayerCharacterBody3D2"] diff --git a/addons/phantom_camera/examples/example_scenes/3D/sub_scenes/playable_character_3d.tscn b/addons/phantom_camera/examples/example_scenes/3D/sub_scenes/playable_character_3d.tscn new file mode 100644 index 0000000..2198ced --- /dev/null +++ b/addons/phantom_camera/examples/example_scenes/3D/sub_scenes/playable_character_3d.tscn @@ -0,0 +1,31 @@ +[gd_scene load_steps=5 format=3 uid="uid://bulsh7s0ibmao"] + +[ext_resource type="Script" path="res://addons/phantom_camera/examples/scripts/3D/player_controller.gd" id="1_6hh6c"] + +[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_8efyg"] + +[sub_resource type="CapsuleMesh" id="CapsuleMesh_2cfaw"] + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_r3ldp"] +albedo_color = Color(0.988235, 0.498039, 0.498039, 1) + +[node name="PlayerCharacterBody3D2" type="CharacterBody3D"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.083587, 0.507, 2.05493) +script = ExtResource("1_6hh6c") +metadata/_edit_group_ = true + +[node name="PlayerArea3D" type="Area3D" parent="."] + +[node name="CollisionShape3D" type="CollisionShape3D" parent="PlayerArea3D"] +shape = SubResource("CapsuleShape3D_8efyg") + +[node name="PlayerCollisionShape3D" type="CollisionShape3D" parent="."] +shape = SubResource("CapsuleShape3D_8efyg") + +[node name="PlayerVisual" type="Node3D" parent="."] +unique_name_in_owner = true + +[node name="PlayerModel" type="MeshInstance3D" parent="PlayerVisual"] +mesh = SubResource("CapsuleMesh_2cfaw") +skeleton = NodePath("../..") +surface_material_override/0 = SubResource("StandardMaterial3D_r3ldp") diff --git a/addons/phantom_camera/examples/example_scenes/3D/sub_scenes/playable_character_third_person_3d.tscn b/addons/phantom_camera/examples/example_scenes/3D/sub_scenes/playable_character_third_person_3d.tscn new file mode 100644 index 0000000..ecfd6f9 --- /dev/null +++ b/addons/phantom_camera/examples/example_scenes/3D/sub_scenes/playable_character_third_person_3d.tscn @@ -0,0 +1,43 @@ +[gd_scene load_steps=6 format=3 uid="uid://mskcwn1a1v6d"] + +[ext_resource type="Script" path="res://addons/phantom_camera/examples/scripts/3D/player_controller_third_person.gd" id="1_0dnfe"] + +[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_s61dn"] + +[sub_resource type="CapsuleMesh" id="CapsuleMesh_47f0o"] + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_mv4do"] +albedo_color = Color(0.988235, 0.498039, 0.498039, 1) + +[sub_resource type="PrismMesh" id="PrismMesh_wg1x3"] +size = Vector3(0.5, 0.5, 0.3) + +[node name="PlayerCharacterBody3D" type="CharacterBody3D"] +transform = Transform3D(0.999903, 0.0139622, 0, -0.0139622, 0.999903, 0, 0, 0, 1, -0.0194088, 0.506884, -0.0163251) +collision_layer = 2 +script = ExtResource("1_0dnfe") +metadata/_edit_group_ = true + +[node name="PlayerArea3D" type="Area3D" parent="."] + +[node name="CollisionShape3D" type="CollisionShape3D" parent="PlayerArea3D"] +shape = SubResource("CapsuleShape3D_s61dn") + +[node name="PlayerCollisionShape3D" type="CollisionShape3D" parent="."] +shape = SubResource("CapsuleShape3D_s61dn") + +[node name="PlayerVisual" type="Node3D" parent="."] +unique_name_in_owner = true + +[node name="PlayerMeshInstance3D" type="MeshInstance3D" parent="PlayerVisual"] +transform = Transform3D(1, 0, 0, 0, 1, 4.65661e-10, 0, 0, 1, 0, 0, 0) +mesh = SubResource("CapsuleMesh_47f0o") +skeleton = NodePath("../..") +surface_material_override/0 = SubResource("StandardMaterial3D_mv4do") + +[node name="PlayerDirection" type="MeshInstance3D" parent="PlayerVisual"] +unique_name_in_owner = true +transform = Transform3D(1, 0, 0, -9.31323e-10, 1, 4.65661e-10, 2.98023e-08, 0, 1, -0.0156226, 1.08631, 0) +mesh = SubResource("PrismMesh_wg1x3") +skeleton = NodePath("../..") +surface_material_override/0 = SubResource("StandardMaterial3D_mv4do") diff --git a/addons/phantom_camera/examples/models/3d_cube_dark.tscn b/addons/phantom_camera/examples/models/3d_cube_dark.tscn new file mode 100644 index 0000000..627dc6f --- /dev/null +++ b/addons/phantom_camera/examples/models/3d_cube_dark.tscn @@ -0,0 +1,15 @@ +[gd_scene load_steps=4 format=3 uid="uid://cixlwqycoox8h"] + +[ext_resource type="Texture2D" uid="uid://c7ja4woxol8yc" path="res://addons/phantom_camera/examples/textures/3D/checker_pattern_dark.png" id="1_836jx"] + +[sub_resource type="BoxMesh" id="BoxMesh_d24c3"] + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_aox6v"] +albedo_texture = ExtResource("1_836jx") +uv1_triplanar = true +uv1_world_triplanar = true + +[node name="3DPrototypeCube" type="CSGMesh3D"] +use_collision = true +mesh = SubResource("BoxMesh_d24c3") +material = SubResource("StandardMaterial3D_aox6v") diff --git a/addons/phantom_camera/examples/resources/tween/fixed_camera_tween.tres b/addons/phantom_camera/examples/resources/tween/fixed_camera_tween.tres new file mode 100644 index 0000000..640b6ae --- /dev/null +++ b/addons/phantom_camera/examples/resources/tween/fixed_camera_tween.tres @@ -0,0 +1,9 @@ +[gd_resource type="Resource" script_class="PhantomCameraTween" load_steps=2 format=3 uid="uid://c1v786g5agaw5"] + +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/resources/tween_resource.gd" id="1_ptlie"] + +[resource] +script = ExtResource("1_ptlie") +duration = 0.0 +transition = 0 +ease = 2 diff --git a/addons/phantom_camera/examples/resources/tween/inventory_phantom_camera_2d_tween.tres b/addons/phantom_camera/examples/resources/tween/inventory_phantom_camera_2d_tween.tres new file mode 100644 index 0000000..38d9879 --- /dev/null +++ b/addons/phantom_camera/examples/resources/tween/inventory_phantom_camera_2d_tween.tres @@ -0,0 +1,9 @@ +[gd_resource type="Resource" script_class="PhantomCameraTweenResource" load_steps=2 format=3 uid="uid://cllveybboaqk5"] + +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/resources/tween_resource.gd" id="1_7yoy0"] + +[resource] +script = ExtResource("1_7yoy0") +duration = 0.6 +transition = 5 +ease = 1 diff --git a/addons/phantom_camera/examples/resources/tween/item_focus_phantom_camera_2d_tween.tres b/addons/phantom_camera/examples/resources/tween/item_focus_phantom_camera_2d_tween.tres new file mode 100644 index 0000000..3a09b1e --- /dev/null +++ b/addons/phantom_camera/examples/resources/tween/item_focus_phantom_camera_2d_tween.tres @@ -0,0 +1,9 @@ +[gd_resource type="Resource" script_class="PhantomCameraTweenResource" load_steps=2 format=3 uid="uid://cecrnq0wnkexh"] + +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/resources/tween_resource.gd" id="1_sq5ls"] + +[resource] +script = ExtResource("1_sq5ls") +duration = 0.6 +transition = 8 +ease = 1 diff --git a/addons/phantom_camera/examples/resources/tween/player_phantom_camera_2d_tween.tres b/addons/phantom_camera/examples/resources/tween/player_phantom_camera_2d_tween.tres new file mode 100644 index 0000000..e23bdbe --- /dev/null +++ b/addons/phantom_camera/examples/resources/tween/player_phantom_camera_2d_tween.tres @@ -0,0 +1,9 @@ +[gd_resource type="Resource" script_class="PhantomCameraTween" load_steps=2 format=3 uid="uid://euybd2w0bax"] + +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/resources/tween_resource.gd" id="1_by4ei"] + +[resource] +script = ExtResource("1_by4ei") +duration = 0.6 +transition = 3 +ease = 1 diff --git a/addons/phantom_camera/examples/resources/tween/player_phantom_camera_3d_tween.tres b/addons/phantom_camera/examples/resources/tween/player_phantom_camera_3d_tween.tres new file mode 100644 index 0000000..7edea42 --- /dev/null +++ b/addons/phantom_camera/examples/resources/tween/player_phantom_camera_3d_tween.tres @@ -0,0 +1,9 @@ +[gd_resource type="Resource" script_class="PhantomCameraTween" load_steps=2 format=3 uid="uid://cptfoggk2ok67"] + +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/resources/tween_resource.gd" id="1_q5tix"] + +[resource] +script = ExtResource("1_q5tix") +duration = 0.6 +transition = 3 +ease = 2 diff --git a/addons/phantom_camera/examples/scripts/2D/2d_room_limit_tween.gd b/addons/phantom_camera/examples/scripts/2D/2d_room_limit_tween.gd new file mode 100644 index 0000000..06e9180 --- /dev/null +++ b/addons/phantom_camera/examples/scripts/2D/2d_room_limit_tween.gd @@ -0,0 +1,36 @@ +extends Node2D + +@onready var pcam_room_left: PhantomCamera2D = %RoomLeftPhantomCamera2D +@onready var pcam_room_centre: PhantomCamera2D = %RoomCentrePhantomCamera2D +@onready var pcam_room_right: PhantomCamera2D = %RoomRightPhantomCamera2D + +@onready var player: Node2D = %CharacterBody2D/%PlayerVisuals + +@onready var area_2d_room_left: Area2D = %RoomLeftArea2D +@onready var area_2d_room_centre: Area2D = %RoomCentreArea2D +@onready var area_2d_room_right: Area2D = %RoomRightArea2D + + +func _ready(): + pcam_room_left.set_follow_offset(Vector2(0, -80)) + pcam_room_right.set_follow_offset(Vector2(0, -80)) + + area_2d_room_left.body_entered.connect(_on_body_entered.bind(pcam_room_left)) + area_2d_room_centre.body_entered.connect(_on_body_entered.bind(pcam_room_centre)) + area_2d_room_right.body_entered.connect(_on_body_entered.bind(pcam_room_right)) + + area_2d_room_left.body_exited.connect(_on_body_exited.bind(pcam_room_left)) + area_2d_room_centre.body_exited.connect(_on_body_exited.bind(pcam_room_centre)) + area_2d_room_right.body_exited.connect(_on_body_exited.bind(pcam_room_right)) + + +func _on_body_entered(body: Node2D, pcam: PhantomCamera2D) -> void: + if body == player.get_parent(): + pcam.set_follow_target(player) + pcam.set_priority(20) + + +func _on_body_exited(body: Node2D, pcam: PhantomCamera2D) -> void: + if body == player.get_parent(): + pcam.set_priority(0) + pcam.set_follow_target(null) diff --git a/addons/phantom_camera/examples/scripts/2D/2d_room_limit_tween_4.3.gd b/addons/phantom_camera/examples/scripts/2D/2d_room_limit_tween_4.3.gd new file mode 100644 index 0000000..970c52e --- /dev/null +++ b/addons/phantom_camera/examples/scripts/2D/2d_room_limit_tween_4.3.gd @@ -0,0 +1,36 @@ +extends Node2D + +@onready var pcam_room_left: PhantomCamera2D = %RoomLeftPhantomCamera2D +@onready var pcam_room_centre: PhantomCamera2D = %RoomCentrePhantomCamera2D +@onready var pcam_room_right: PhantomCamera2D = %RoomRightPhantomCamera2D + +@onready var player: Node2D = %CharacterBody2D + +@onready var area_2d_room_left: Area2D = %RoomLeftArea2D +@onready var area_2d_room_centre: Area2D = %RoomCentreArea2D +@onready var area_2d_room_right: Area2D = %RoomRightArea2D + + +func _ready(): + pcam_room_left.set_follow_offset(Vector2(0, -80)) + pcam_room_right.set_follow_offset(Vector2(0, -80)) + + area_2d_room_left.body_entered.connect(_on_body_entered.bind(pcam_room_left)) + area_2d_room_centre.body_entered.connect(_on_body_entered.bind(pcam_room_centre)) + area_2d_room_right.body_entered.connect(_on_body_entered.bind(pcam_room_right)) + + area_2d_room_left.body_exited.connect(_on_body_exited.bind(pcam_room_left)) + area_2d_room_centre.body_exited.connect(_on_body_exited.bind(pcam_room_centre)) + area_2d_room_right.body_exited.connect(_on_body_exited.bind(pcam_room_right)) + + +func _on_body_entered(body: Node2D, pcam: PhantomCamera2D) -> void: + if body == player: + pcam.set_follow_target(player) + pcam.set_priority(20) + + +func _on_body_exited(body: Node2D, pcam: PhantomCamera2D) -> void: + if body == player: + pcam.set_priority(0) + pcam.set_follow_target(null) diff --git a/addons/phantom_camera/examples/scripts/2D/2d_trigger_area.gd b/addons/phantom_camera/examples/scripts/2D/2d_trigger_area.gd new file mode 100644 index 0000000..db0209c --- /dev/null +++ b/addons/phantom_camera/examples/scripts/2D/2d_trigger_area.gd @@ -0,0 +1,16 @@ +extends Area2D + +@export var area_pcam: PhantomCamera2D + +func _ready() -> void: + connect("area_entered", _entered_area) + connect("area_exited", _exited_area) + +func _entered_area(area_2d: Area2D) -> void: + if area_2d.get_parent() is CharacterBody2D: + area_pcam.set_priority(20) + +func _exited_area(area_2d: Area2D) -> void: + if area_2d.get_parent() is CharacterBody2D: + area_pcam.set_priority(0) + diff --git a/addons/phantom_camera/examples/scripts/2D/player_character_body_2d.gd b/addons/phantom_camera/examples/scripts/2D/player_character_body_2d.gd new file mode 100644 index 0000000..c7fd488 --- /dev/null +++ b/addons/phantom_camera/examples/scripts/2D/player_character_body_2d.gd @@ -0,0 +1,190 @@ +extends CharacterBody2D + +@onready var _player_area2d = %PlayerArea2D +@onready var _player_visuals: Node2D = %PlayerVisuals +@onready var _player_sprite: Sprite2D = %PlayerSprite +@onready var _interaction_prompt: Panel = %InteractionPrompt +@onready var _ui_sign: Control +@onready var _dark_overlay: ColorRect = %DarkOverlay + +const KEY_STRINGNAME: StringName = "Key" +const ACTION_STRINGNAME: StringName = "Action" +const INPUT_MOVE_LEFT_STRINGNAME: StringName = "move_left" +const INPUT_MOVE_RIGHT_STRINGNAME: StringName = "move_right" + +const SPEED = 350.0 +const JUMP_VELOCITY = -750.0 + +# Get the gravity from the project settings to be synced with RigidBody nodes. +var gravity: int = 2400 +var _is_interactive: bool +var _can_open_inventory: bool +var _movement_disabled: bool +var tween: Tween +var _interactive_UI: Control +var _active_pcam: PhantomCamera2D + +var _physics_body_trans_last: Transform2D +var _physics_body_trans_current: Transform2D + +enum InteractiveType { + NONE = 0, + ITEM = 1, + INVENTORY = 2, +} +var _interactive_object: InteractiveType = InteractiveType.NONE + +var InputMovementDic: Dictionary = { + INPUT_MOVE_LEFT_STRINGNAME: { + KEY_STRINGNAME: KEY_A, + ACTION_STRINGNAME: INPUT_MOVE_LEFT_STRINGNAME + }, + INPUT_MOVE_RIGHT_STRINGNAME: { + KEY_STRINGNAME: KEY_D, + ACTION_STRINGNAME: INPUT_MOVE_RIGHT_STRINGNAME + }, +} + + +func _ready() -> void: + _player_area2d.connect("body_shape_entered", _show_prompt) + _player_area2d.connect("body_shape_exited", _hide_prompt) + + _ui_sign = owner.get_node("%UISign") + + for input in InputMovementDic: + var key_val = InputMovementDic[input].get(KEY_STRINGNAME) + var action_val = InputMovementDic[input].get(ACTION_STRINGNAME) + + var movement_input = InputEventKey.new() + movement_input.physical_keycode = key_val + InputMap.add_action(action_val) + InputMap.action_add_event(action_val, movement_input) + + _player_visuals.top_level = true + + if Engine.get_version_info().major == 4 and \ + Engine.get_version_info().minor >= 3: + printerr("Please run the other 2D example scenes, in the 2D-4.3 directory, for more up-to-date example setups.") + + +func _unhandled_input(event: InputEvent) -> void: + if _is_interactive: + if Input.is_physical_key_pressed(KEY_F): + if tween: + tween.kill() + + if not _movement_disabled: + tween = get_tree().create_tween() + + _movement_disabled = true + _active_pcam.set_priority(10) + + _show_interactive_node(_interactive_UI) + _interactive_node_logic() + + else: + _hide_interactive_node(_interactive_UI) + _interactive_node_logic() + + + if Input.is_physical_key_pressed(KEY_ESCAPE) and _movement_disabled: + _hide_interactive_node(_interactive_UI) + _interactive_node_logic() + + +func _show_interactive_node(UI: Control) -> void: + UI.modulate.a = 0 + UI.visible = true + tween.tween_property(UI, "modulate", Color.WHITE, 1).set_ease(Tween.EASE_OUT).set_trans(Tween.TRANS_CIRC) + + +func _hide_interactive_node(UI: Control) -> void: + _movement_disabled = false + _active_pcam.set_priority(0) + UI.visible = false + + +func _interactive_node_logic() -> void: + match _interactive_object: + 2: + if _movement_disabled: + _dark_overlay.set_visible(true) + else: + _dark_overlay.set_visible(false) + + +func _physics_process(delta: float) -> void: + _physics_body_trans_last = _physics_body_trans_current + _physics_body_trans_current = global_transform + + if not is_on_floor(): + velocity.y += gravity * delta + + if Input.is_action_just_pressed("ui_accept") and is_on_floor(): + velocity.y = JUMP_VELOCITY + + if _movement_disabled: return + + var input_dir: = Input.get_axis( + INPUT_MOVE_LEFT_STRINGNAME, + INPUT_MOVE_RIGHT_STRINGNAME + ) + + if input_dir: + velocity.x = input_dir * SPEED + if input_dir > 0: + _player_sprite.set_flip_h(false) + elif input_dir < 0: + _player_sprite.set_flip_h(true) + else: + velocity.x = move_toward(velocity.x, 0, SPEED) + + move_and_slide() + + +func _process(delta) -> void: + _player_visuals.global_position = _physics_body_trans_last.interpolate_with( + _physics_body_trans_current, + Engine.get_physics_interpolation_fraction() + ).origin + + +func _show_prompt(body_rid: RID, body: Node2D, body_shape_index: int, local_shape: int) -> void: + if body is TileMap: + var tile_map: TileMap = body + + var tile_coords: Vector2i = tile_map.get_coords_for_body_rid(body_rid) + var cell_data: TileData = tile_map.get_cell_tile_data(1, tile_coords) + + if cell_data: + var cell_data_type: StringName = cell_data.get_custom_data("Type") +# var cell_global_pos: Vector2 = tile_map.to_global(tile_map.map_to_local(tile_coords)) + _is_interactive = true + _interaction_prompt.set_visible(true) + + match cell_data_type: + "Sign": + _interactive_UI = owner.get_node("%UISign") + _active_pcam = %ItemFocusPhantomCamera2D + _interactive_object = InteractiveType.ITEM + "Inventory": + _interactive_UI = owner.get_node("%UIInventory") + _interactive_object = InteractiveType.INVENTORY + _active_pcam = %InventoryPhantomCamera2D + + +func _hide_prompt(body_rid: RID, body: Node2D, body_shape_index: int, local_shape: int) -> void: + if body is TileMap: + var tile_map: TileMap = body + + var tile_coords: Vector2i = tile_map.get_coords_for_body_rid(body_rid) + var cell_data: TileData = tile_map.get_cell_tile_data(1, tile_coords) + + if cell_data: + _interaction_prompt.set_visible(false) + _is_interactive = false + _interactive_UI = null + _interactive_object = InteractiveType.NONE + _active_pcam = null + diff --git a/addons/phantom_camera/examples/scripts/2D/player_character_body_2d_4.3.gd b/addons/phantom_camera/examples/scripts/2D/player_character_body_2d_4.3.gd new file mode 100644 index 0000000..590b5ae --- /dev/null +++ b/addons/phantom_camera/examples/scripts/2D/player_character_body_2d_4.3.gd @@ -0,0 +1,176 @@ +extends CharacterBody2D + +@onready var _player_area2d = %PlayerArea2D +@onready var _player_visuals: Node2D = %PlayerVisuals +@onready var _player_sprite: Sprite2D = %PlayerSprite +@onready var _interaction_prompt: Panel = %InteractionPrompt +@onready var _ui_sign: Control +@onready var _dark_overlay: ColorRect = %DarkOverlay + +const KEY_STRINGNAME: StringName = "Key" +const ACTION_STRINGNAME: StringName = "Action" +const INPUT_MOVE_LEFT_STRINGNAME: StringName = "move_left" +const INPUT_MOVE_RIGHT_STRINGNAME: StringName = "move_right" + +const SPEED = 350.0 +const JUMP_VELOCITY = -750.0 + +# Get the gravity from the project settings to be synced with RigidBody nodes. +var gravity: int = 2400 +var _is_interactive: bool +var _can_open_inventory: bool +var _movement_disabled: bool +var tween: Tween +var _interactive_UI: Control +var _active_pcam: PhantomCamera2D + +enum InteractiveType { + NONE = 0, + ITEM = 1, + INVENTORY = 2, +} +var _interactive_object: InteractiveType = InteractiveType.NONE + +var InputMovementDic: Dictionary = { + INPUT_MOVE_LEFT_STRINGNAME: { + KEY_STRINGNAME: KEY_A, + ACTION_STRINGNAME: INPUT_MOVE_LEFT_STRINGNAME + }, + INPUT_MOVE_RIGHT_STRINGNAME: { + KEY_STRINGNAME: KEY_D, + ACTION_STRINGNAME: INPUT_MOVE_RIGHT_STRINGNAME + }, +} + + +func _ready() -> void: + _player_area2d.connect("body_shape_entered", _show_prompt) + _player_area2d.connect("body_shape_exited", _hide_prompt) + + _ui_sign = owner.get_node("%UISign") + + for input in InputMovementDic: + var key_val = InputMovementDic[input].get(KEY_STRINGNAME) + var action_val = InputMovementDic[input].get(ACTION_STRINGNAME) + + var movement_input = InputEventKey.new() + movement_input.physical_keycode = key_val + InputMap.add_action(action_val) + InputMap.action_add_event(action_val, movement_input) + + if Engine.get_version_info().major == 4 and \ + Engine.get_version_info().minor < 3: + printerr("This scene is designed to only work properly in Godot 4.3 or later that supports 2D Physics Interpolation.") + printerr("Please run the other 2D example scenes in the other directory.") + + +func _unhandled_input(event: InputEvent) -> void: + if _is_interactive: + if Input.is_physical_key_pressed(KEY_F): + if tween: + tween.kill() + + if not _movement_disabled: + tween = get_tree().create_tween() + + _movement_disabled = true + _active_pcam.set_priority(10) + + _show_interactive_node(_interactive_UI) + _interactive_node_logic() + + else: + _hide_interactive_node(_interactive_UI) + _interactive_node_logic() + + + if Input.is_physical_key_pressed(KEY_ESCAPE) and _movement_disabled: + _hide_interactive_node(_interactive_UI) + _interactive_node_logic() + + +func _show_interactive_node(UI: Control) -> void: + UI.modulate.a = 0 + UI.visible = true + tween.tween_property(UI, "modulate", Color.WHITE, 1).set_ease(Tween.EASE_OUT).set_trans(Tween.TRANS_CIRC) + + +func _hide_interactive_node(UI: Control) -> void: + _movement_disabled = false + _active_pcam.set_priority(0) + UI.visible = false + + +func _interactive_node_logic() -> void: + match _interactive_object: + 2: + if _movement_disabled: + _dark_overlay.set_visible(true) + else: + _dark_overlay.set_visible(false) + + +func _physics_process(delta: float) -> void: + if not is_on_floor(): + velocity.y += gravity * delta + + if Input.is_action_just_pressed("ui_accept") and is_on_floor(): + velocity.y = JUMP_VELOCITY + + if _movement_disabled: return + + var input_dir: = Input.get_axis( + INPUT_MOVE_LEFT_STRINGNAME, + INPUT_MOVE_RIGHT_STRINGNAME + ) + + if input_dir: + velocity.x = input_dir * SPEED + if input_dir > 0: + _player_sprite.set_flip_h(false) + elif input_dir < 0: + _player_sprite.set_flip_h(true) + else: + velocity.x = move_toward(velocity.x, 0, SPEED) + + move_and_slide() + + +func _show_prompt(body_rid: RID, body: Node2D, body_shape_index: int, local_shape: int) -> void: + if body is TileMap: + var tile_map: TileMap = body + + var tile_coords: Vector2i = tile_map.get_coords_for_body_rid(body_rid) + var cell_data: TileData = tile_map.get_cell_tile_data(1, tile_coords) + + if cell_data: + var cell_data_type: StringName = cell_data.get_custom_data("Type") +# var cell_global_pos: Vector2 = tile_map.to_global(tile_map.map_to_local(tile_coords)) + _is_interactive = true + _interaction_prompt.set_visible(true) + + match cell_data_type: + "Sign": + _interactive_UI = owner.get_node("%UISign") + _active_pcam = %ItemFocusPhantomCamera2D + _interactive_object = InteractiveType.ITEM + "Inventory": + _interactive_UI = owner.get_node("%UIInventory") + _interactive_object = InteractiveType.INVENTORY + _active_pcam = %InventoryPhantomCamera2D + + +func _hide_prompt(body_rid: RID, body: Node2D, body_shape_index: int, local_shape: int) -> void: + if body is TileMap: + var tile_map: TileMap = body + + var tile_coords: Vector2i = tile_map.get_coords_for_body_rid(body_rid) + var cell_data: TileData = tile_map.get_cell_tile_data(1, tile_coords) + + if cell_data: + _interaction_prompt.set_visible(false) + _is_interactive = false + _interactive_UI = null + _interactive_object = InteractiveType.NONE + _active_pcam = null + diff --git a/addons/phantom_camera/examples/scripts/3D/3d_trigger_area.gd b/addons/phantom_camera/examples/scripts/3D/3d_trigger_area.gd new file mode 100644 index 0000000..4fc9764 --- /dev/null +++ b/addons/phantom_camera/examples/scripts/3D/3d_trigger_area.gd @@ -0,0 +1,26 @@ +extends Area3D + +@export var area_pcam: PhantomCamera3D + +var initial_camera_position: Vector3 +var initial_camera_rotation: Vector3 + +var tween: Tween +var tween_duration: float = 0.9 + + +func _ready() -> void: + connect("area_entered", _entered_area) + connect("area_exited", _exited_area) + + +func _entered_area(area_3D: Area3D) -> void: + if area_3D.get_parent() is CharacterBody3D: + area_pcam.set_priority(20) + + +func _exited_area(area_3D: Area3D) -> void: + if area_3D.get_parent() is CharacterBody3D: + area_pcam.set_priority(0) + + diff --git a/addons/phantom_camera/examples/scripts/3D/npc.gd b/addons/phantom_camera/examples/scripts/3D/npc.gd new file mode 100644 index 0000000..3d9a523 --- /dev/null +++ b/addons/phantom_camera/examples/scripts/3D/npc.gd @@ -0,0 +1,71 @@ +extends Node3D + +@onready var npc_pcam: PhantomCamera3D = %NPCPhantomCamera3D +@onready var dialogueArea: Area3D = %NPCInteractionArea3D +@onready var dialogueLabel3D: Label3D = %NPCDialogueExampleLabel + +@onready var player: CharacterBody3D = %PlayerCharacterBody3D + +@onready var move_to_location: Vector3 = %MoveToLocation.get_global_position() + +var dialogue_label_initial_position: Vector3 +var dialogue_label_initial_rotation: Vector3 + +var tween: Tween +var tween_duration: float = 0.9 +var tween_transition: Tween.TransitionType = Tween.TRANS_QUAD + +var interactable: bool +var is_interacting: bool + +func _ready() -> void: + dialogueArea.connect("area_entered", _interactable) + dialogueArea.connect("area_exited", _not_interactable) + + dialogueLabel3D.set_visible(false) + + dialogue_label_initial_position = dialogueLabel3D.get_global_position() + dialogue_label_initial_rotation = dialogueLabel3D.get_global_rotation() + + npc_pcam.tween_completed.connect(_on_tween_started) + + + +func _on_tween_started() -> void: + player.movement_enabled = false + + +func _interactable(area_3D: Area3D) -> void: + if area_3D.get_parent() is CharacterBody3D: + dialogueLabel3D.set_visible(true) + interactable = true + + var tween: Tween = get_tree().create_tween().set_trans(tween_transition).set_ease(Tween.EASE_IN_OUT).set_loops() + tween.tween_property(dialogueLabel3D, "global_position", dialogue_label_initial_position - Vector3(0, -0.2, 0), tween_duration) + tween.tween_property(dialogueLabel3D, "position", dialogue_label_initial_position, tween_duration) + + +func _not_interactable(area_3D: Area3D) -> void: + if area_3D.get_parent() is CharacterBody3D: + dialogueLabel3D.set_visible(false) + interactable = false + + +func _input(event) -> void: + if not interactable: return + + if event is InputEventKey and event.pressed: + if event.keycode == KEY_F: + var tween: Tween = get_tree().create_tween() \ + .set_parallel(true) \ + .set_trans(Tween.TRANS_QUART) \ + .set_ease(Tween.EASE_IN_OUT) + if not is_interacting: + npc_pcam.priority = 20 + tween.tween_property(player, "global_position", move_to_location, 0.6).set_trans(tween_transition) + tween.tween_property(dialogueLabel3D, "rotation", Vector3(deg_to_rad(-20), deg_to_rad(53), 0), 0.6).set_trans(tween_transition) + else: + npc_pcam.priority = 0 + tween.tween_property(dialogueLabel3D, "rotation", dialogue_label_initial_rotation, 0.9) + player.movement_enabled = true + is_interacting = !is_interacting diff --git a/addons/phantom_camera/examples/scripts/3D/path_follow.gd b/addons/phantom_camera/examples/scripts/3D/path_follow.gd new file mode 100644 index 0000000..22973ec --- /dev/null +++ b/addons/phantom_camera/examples/scripts/3D/path_follow.gd @@ -0,0 +1,18 @@ +extends Node + +@export var path_pcam: PhantomCamera3D + +func _ready() -> void: + connect("area_entered", _entered_area) + connect("area_exited", _exited_area) + + +func _entered_area(area_3D: Area3D) -> void: + if area_3D.get_parent() is CharacterBody3D: + path_pcam.set_priority(20) + + +func _exited_area(area_3D: Area3D) -> void: + if area_3D.get_parent() is CharacterBody3D: + path_pcam.set_priority(0) + diff --git a/addons/phantom_camera/examples/scripts/3D/player_controller.gd b/addons/phantom_camera/examples/scripts/3D/player_controller.gd new file mode 100644 index 0000000..b136103 --- /dev/null +++ b/addons/phantom_camera/examples/scripts/3D/player_controller.gd @@ -0,0 +1,103 @@ +extends CharacterBody3D + +@export var SPEED: float = 5.0 +@export var JUMP_VELOCITY: float = 4.5 +@export var enable_gravity = true + +@onready var _camera: Camera3D + +@onready var _player_visual: Node3D = %PlayerVisual + +# Get the gravity from the project settings to be synced with RigidBody nodes. +var gravity: float = 9.8 + +var movement_enabled: bool = true + +var _physics_body_trans_last: Transform3D +var _physics_body_trans_current: Transform3D + +const KEY_STRINGNAME: StringName = "Key" +const ACTION_STRINGNAME: StringName = "Action" + +const INPUT_MOVE_UP_STRINGNAME: StringName = "move_up" +const INPUT_MOVE_DOWM_STRINGNAME: StringName = "move_down" +const INPUT_MOVE_LEFT_STRINGNAME: StringName = "move_left" +const INPUT_MOVE_RIGHT_STRINGNAME: StringName = "move_right" + +var InputMovementDic: Dictionary = { + INPUT_MOVE_UP_STRINGNAME: { + KEY_STRINGNAME: KEY_W, + ACTION_STRINGNAME: INPUT_MOVE_UP_STRINGNAME + }, + INPUT_MOVE_DOWM_STRINGNAME: { + KEY_STRINGNAME: KEY_S, + ACTION_STRINGNAME: INPUT_MOVE_DOWM_STRINGNAME + }, + INPUT_MOVE_LEFT_STRINGNAME: { + KEY_STRINGNAME: KEY_A, + ACTION_STRINGNAME: INPUT_MOVE_LEFT_STRINGNAME + }, + INPUT_MOVE_RIGHT_STRINGNAME: { + KEY_STRINGNAME: KEY_D, + ACTION_STRINGNAME: INPUT_MOVE_RIGHT_STRINGNAME + }, +} + + +func _ready() -> void: + for input in InputMovementDic: + var key_val = InputMovementDic[input].get(KEY_STRINGNAME) + var action_val = InputMovementDic[input].get(ACTION_STRINGNAME) + + _camera = owner.get_node("%MainCamera3D") + + var movement_input = InputEventKey.new() + movement_input.physical_keycode = key_val + InputMap.add_action(action_val) + InputMap.action_add_event(action_val, movement_input) + + _player_visual.top_level = true + + +func _physics_process(delta: float) -> void: + _physics_body_trans_last = _physics_body_trans_current + _physics_body_trans_current = global_transform + + # Add the gravity. + if enable_gravity and not is_on_floor(): + velocity.y -= gravity * delta + + if not movement_enabled: return + + # Get the input direction and handle the movement/deceleration. + # As good practice, you should replace UI actions with custom gameplay actions. + var input_dir: Vector2 = Input.get_vector( + INPUT_MOVE_LEFT_STRINGNAME, + INPUT_MOVE_RIGHT_STRINGNAME, + INPUT_MOVE_UP_STRINGNAME, + INPUT_MOVE_DOWM_STRINGNAME + ) + + var cam_dir: Vector3 = -_camera.global_transform.basis.z + + var direction: Vector3 = (transform.basis * Vector3(input_dir.x, 0, input_dir.y)).normalized() + if direction: + var move_dir: Vector3 = Vector3.ZERO + move_dir.x = direction.x + move_dir.z = direction.z + + move_dir = move_dir.rotated(Vector3.UP, _camera.rotation.y).normalized() + velocity.x = move_dir.x * SPEED + velocity.z = move_dir.z * SPEED + else: + velocity.x = move_toward(velocity.x, 0, SPEED) + velocity.z = move_toward(velocity.z, 0, SPEED) + + move_and_slide() + + +func _process(_delta: float) -> void: + _player_visual.global_transform = _physics_body_trans_last.interpolate_with( + _physics_body_trans_current, + Engine.get_physics_interpolation_fraction() + ) diff --git a/addons/phantom_camera/examples/scripts/3D/player_controller_third_person.gd b/addons/phantom_camera/examples/scripts/3D/player_controller_third_person.gd new file mode 100644 index 0000000..9bd3a76 --- /dev/null +++ b/addons/phantom_camera/examples/scripts/3D/player_controller_third_person.gd @@ -0,0 +1,88 @@ +extends "player_controller.gd" + +@onready var _player_pcam: PhantomCamera3D +@onready var _aim_pcam: PhantomCamera3D +@onready var _player_direction: Node3D = %PlayerDirection +@onready var _ceiling_pcam: PhantomCamera3D + +@export var mouse_sensitivity: float = 0.05 + +@export var min_pitch: float = -89.9 +@export var max_pitch: float = 50 + +@export var min_yaw: float = 0 +@export var max_yaw: float = 360 + + + +func _ready() -> void: + super() + + _player_pcam = owner.get_node("%PlayerPhantomCamera3D") + _aim_pcam = owner.get_node("%PlayerAimPhantomCamera3D") + _ceiling_pcam = owner.get_node("%CeilingPhantomCamera3D") + + if _player_pcam.get_follow_mode() == _player_pcam.FollowMode.THIRD_PERSON: + Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED) + + +func _physics_process(delta: float) -> void: + super(delta) + + if velocity.length() > 0.2: + var look_direction: Vector2 = Vector2(velocity.z, velocity.x) + _player_direction.rotation.y = look_direction.angle() + + +func _unhandled_input(event: InputEvent) -> void: + if _player_pcam.get_follow_mode() == _player_pcam.FollowMode.THIRD_PERSON: + var active_pcam: PhantomCamera3D + + if is_instance_valid(_aim_pcam): + _set_pcam_rotation(_player_pcam, event) + _set_pcam_rotation(_aim_pcam, event) + if _player_pcam.get_priority() > _aim_pcam.get_priority(): + _toggle_aim_pcam(event) + else: + _toggle_aim_pcam(event) + + if event is InputEventKey and event.pressed: + if event.keycode == KEY_SPACE: + if _ceiling_pcam.get_priority() < 30 and _player_pcam.is_active(): + _ceiling_pcam.set_priority(30) + else: + _ceiling_pcam.set_priority(1) + + +func _set_pcam_rotation(pcam: PhantomCamera3D, event: InputEvent) -> void: + if event is InputEventMouseMotion: + var pcam_rotation_degrees: Vector3 + + # Assigns the current 3D rotation of the SpringArm3D node - so it starts off where it is in the editor + pcam_rotation_degrees = pcam.get_third_person_rotation_degrees() + + # Change the X rotation + pcam_rotation_degrees.x -= event.relative.y * mouse_sensitivity + + # Clamp the rotation in the X axis so it go over or under the target + pcam_rotation_degrees.x = clampf(pcam_rotation_degrees.x, min_pitch, max_pitch) + + # Change the Y rotation value + pcam_rotation_degrees.y -= event.relative.x * mouse_sensitivity + + # Sets the rotation to fully loop around its target, but witout going below or exceeding 0 and 360 degrees respectively + pcam_rotation_degrees.y = wrapf(pcam_rotation_degrees.y, min_yaw, max_yaw) + + # Change the SpringArm3D node's rotation and rotate around its target + pcam.set_third_person_rotation_degrees(pcam_rotation_degrees) + + +func _toggle_aim_pcam(event: InputEvent) -> void: + if event is InputEventMouseButton \ + and event.is_pressed() \ + and event.button_index == 2 \ + and (_player_pcam.is_active() or _aim_pcam.is_active()): + if _player_pcam.get_priority() > _aim_pcam.get_priority(): + _aim_pcam.set_priority(30) + else: + _aim_pcam.set_priority(0) diff --git a/addons/phantom_camera/examples/textures/2D/inventory_container.png b/addons/phantom_camera/examples/textures/2D/inventory_container.png new file mode 100644 index 0000000..7dd5178 Binary files /dev/null and b/addons/phantom_camera/examples/textures/2D/inventory_container.png differ diff --git a/addons/phantom_camera/examples/textures/2D/inventory_container.png.import b/addons/phantom_camera/examples/textures/2D/inventory_container.png.import new file mode 100644 index 0000000..72be1e5 --- /dev/null +++ b/addons/phantom_camera/examples/textures/2D/inventory_container.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://b7cs6me43ufh3" +path="res://.godot/imported/inventory_container.png-12241277f279bfc4bf7d5dad6b3e8ff2.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://addons/phantom_camera/examples/textures/2D/inventory_container.png" +dest_files=["res://.godot/imported/inventory_container.png-12241277f279bfc4bf7d5dad6b3e8ff2.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/addons/phantom_camera/examples/textures/2D/level_spritesheet.png b/addons/phantom_camera/examples/textures/2D/level_spritesheet.png new file mode 100644 index 0000000..939cb28 Binary files /dev/null and b/addons/phantom_camera/examples/textures/2D/level_spritesheet.png differ diff --git a/addons/phantom_camera/examples/textures/2D/level_spritesheet.png.import b/addons/phantom_camera/examples/textures/2D/level_spritesheet.png.import new file mode 100644 index 0000000..520372a --- /dev/null +++ b/addons/phantom_camera/examples/textures/2D/level_spritesheet.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://c77npili4pel4" +path="res://.godot/imported/level_spritesheet.png-26a44dd21a040a5480d5ccba54377d99.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://addons/phantom_camera/examples/textures/2D/level_spritesheet.png" +dest_files=["res://.godot/imported/level_spritesheet.png-26a44dd21a040a5480d5ccba54377d99.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/addons/phantom_camera/examples/textures/2D/phantom_camera_2d_sprite.png b/addons/phantom_camera/examples/textures/2D/phantom_camera_2d_sprite.png new file mode 100644 index 0000000..2012b3a Binary files /dev/null and b/addons/phantom_camera/examples/textures/2D/phantom_camera_2d_sprite.png differ diff --git a/addons/phantom_camera/examples/textures/2D/phantom_camera_2d_sprite.png.import b/addons/phantom_camera/examples/textures/2D/phantom_camera_2d_sprite.png.import new file mode 100644 index 0000000..425002e --- /dev/null +++ b/addons/phantom_camera/examples/textures/2D/phantom_camera_2d_sprite.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cwep0on2tthn7" +path="res://.godot/imported/phantom_camera_2d_sprite.png-deab230b83ae03aeb308a08ff66b8dbc.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://addons/phantom_camera/examples/textures/2D/phantom_camera_2d_sprite.png" +dest_files=["res://.godot/imported/phantom_camera_2d_sprite.png-deab230b83ae03aeb308a08ff66b8dbc.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/addons/phantom_camera/examples/textures/2D/player_sprite.svg b/addons/phantom_camera/examples/textures/2D/player_sprite.svg new file mode 100644 index 0000000..ce261b1 --- /dev/null +++ b/addons/phantom_camera/examples/textures/2D/player_sprite.svg @@ -0,0 +1,4 @@ + + + + diff --git a/addons/phantom_camera/examples/textures/2D/player_sprite.svg.import b/addons/phantom_camera/examples/textures/2D/player_sprite.svg.import new file mode 100644 index 0000000..41dc9dc --- /dev/null +++ b/addons/phantom_camera/examples/textures/2D/player_sprite.svg.import @@ -0,0 +1,37 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://ci76plsequlrq" +path="res://.godot/imported/player_sprite.svg-8862ecb19e12152eb892607676f3831f.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://addons/phantom_camera/examples/textures/2D/player_sprite.svg" +dest_files=["res://.godot/imported/player_sprite.svg-8862ecb19e12152eb892607676f3831f.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=8.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/addons/phantom_camera/examples/textures/2D/sign_prompt.png b/addons/phantom_camera/examples/textures/2D/sign_prompt.png new file mode 100644 index 0000000..a730837 Binary files /dev/null and b/addons/phantom_camera/examples/textures/2D/sign_prompt.png differ diff --git a/addons/phantom_camera/examples/textures/2D/sign_prompt.png.import b/addons/phantom_camera/examples/textures/2D/sign_prompt.png.import new file mode 100644 index 0000000..a5799d3 --- /dev/null +++ b/addons/phantom_camera/examples/textures/2D/sign_prompt.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bloouh2jtndx1" +path="res://.godot/imported/sign_prompt.png-18d451127e1cd1a16367acd23cec47e5.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://addons/phantom_camera/examples/textures/2D/sign_prompt.png" +dest_files=["res://.godot/imported/sign_prompt.png-18d451127e1cd1a16367acd23cec47e5.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/addons/phantom_camera/examples/textures/3D/checker_pattern_dark.png b/addons/phantom_camera/examples/textures/3D/checker_pattern_dark.png new file mode 100644 index 0000000..4aeae6c Binary files /dev/null and b/addons/phantom_camera/examples/textures/3D/checker_pattern_dark.png differ diff --git a/addons/phantom_camera/examples/textures/3D/checker_pattern_dark.png.import b/addons/phantom_camera/examples/textures/3D/checker_pattern_dark.png.import new file mode 100644 index 0000000..cfcc34e --- /dev/null +++ b/addons/phantom_camera/examples/textures/3D/checker_pattern_dark.png.import @@ -0,0 +1,35 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://c7ja4woxol8yc" +path.bptc="res://.godot/imported/checker_pattern_dark.png-70cedad2d3abf4ad6166d6614eefa7fb.bptc.ctex" +metadata={ +"imported_formats": ["s3tc_bptc"], +"vram_texture": true +} + +[deps] + +source_file="res://addons/phantom_camera/examples/textures/3D/checker_pattern_dark.png" +dest_files=["res://.godot/imported/checker_pattern_dark.png-70cedad2d3abf4ad6166d6614eefa7fb.bptc.ctex"] + +[params] + +compress/mode=2 +compress/high_quality=true +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=true +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=0 diff --git a/addons/phantom_camera/examples/ui/ui_inventory.tscn b/addons/phantom_camera/examples/ui/ui_inventory.tscn new file mode 100644 index 0000000..cddd377 --- /dev/null +++ b/addons/phantom_camera/examples/ui/ui_inventory.tscn @@ -0,0 +1,37 @@ +[gd_scene load_steps=3 format=3 uid="uid://dg7rhrymsrrrm"] + +[ext_resource type="Texture2D" uid="uid://b7cs6me43ufh3" path="res://addons/phantom_camera/examples/textures/2D/inventory_container.png" id="1_pi2dp"] +[ext_resource type="FontFile" uid="uid://c4mm3of2mc8o5" path="res://addons/phantom_camera/fonts/Nunito-Black.ttf" id="2_0rdcn"] + +[node name="Control" type="Control"] +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="TextureRect" type="TextureRect" parent="."] +layout_mode = 1 +anchors_preset = 4 +anchor_top = 0.5 +anchor_bottom = 0.5 +offset_left = 28.0 +offset_top = -255.0 +offset_right = 908.0 +offset_bottom = 183.0 +grow_vertical = 2 +texture = ExtResource("1_pi2dp") + +[node name="Label" type="Label" parent="TextureRect"] +layout_mode = 0 +offset_left = 345.0 +offset_top = 12.0 +offset_right = 535.0 +offset_bottom = 60.0 +theme_override_colors/font_color = Color(0.356863, 0.105882, 0.133333, 1) +theme_override_fonts/font = ExtResource("2_0rdcn") +theme_override_font_sizes/font_size = 32 +text = "Inventory" +horizontal_alignment = 1 +uppercase = true diff --git a/addons/phantom_camera/examples/ui/ui_sign.tscn b/addons/phantom_camera/examples/ui/ui_sign.tscn new file mode 100644 index 0000000..1b891ef --- /dev/null +++ b/addons/phantom_camera/examples/ui/ui_sign.tscn @@ -0,0 +1,83 @@ +[gd_scene load_steps=4 format=3 uid="uid://iq5xd1ob1res"] + +[ext_resource type="Texture2D" uid="uid://bloouh2jtndx1" path="res://addons/phantom_camera/examples/textures/2D/sign_prompt.png" id="1_tftrk"] +[ext_resource type="FontFile" uid="uid://c4mm3of2mc8o5" path="res://addons/phantom_camera/fonts/Nunito-Black.ttf" id="2_y5454"] + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_r4h3u"] +bg_color = Color(0.470588, 0.6, 0.45098, 1) +corner_radius_top_right = 47 +corner_radius_bottom_left = 40 + +[node name="Control" type="Control"] +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 + +[node name="TextureRect" type="TextureRect" parent="."] +layout_mode = 1 +anchors_preset = 5 +anchor_left = 0.5 +anchor_right = 0.5 +offset_left = -273.568 +offset_top = 47.0 +offset_right = 273.568 +offset_bottom = 413.0 +grow_horizontal = 2 +texture = ExtResource("1_tftrk") +metadata/_edit_group_ = true + +[node name="Label" type="Label" parent="TextureRect"] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_left = 25.0 +offset_top = 64.0 +offset_right = -25.0 +offset_bottom = -88.0 +grow_horizontal = 2 +grow_vertical = 2 +theme_override_colors/font_color = Color(0.207843, 0.0470588, 0.0666667, 1) +theme_override_fonts/font = ExtResource("2_y5454") +theme_override_font_sizes/font_size = 62 +text = "Stay Awhile +and read" +horizontal_alignment = 1 +vertical_alignment = 1 +uppercase = true + +[node name="Panel" type="Panel" parent="."] +visible = false +layout_mode = 1 +anchors_preset = 5 +anchor_left = 0.5 +anchor_right = 0.5 +offset_left = -240.0 +offset_right = 240.0 +offset_bottom = 200.0 +grow_horizontal = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 +theme_override_styles/panel = SubResource("StyleBoxFlat_r4h3u") +metadata/_edit_use_anchors_ = true + +[node name="VBoxContainer" type="VBoxContainer" parent="Panel"] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +alignment = 1 + +[node name="Label2" type="Label" parent="Panel/VBoxContainer"] +layout_mode = 2 +text = "Example Textsdadassa +" +horizontal_alignment = 1 +vertical_alignment = 1 diff --git a/addons/phantom_camera/fonts/Nunito-Black.ttf b/addons/phantom_camera/fonts/Nunito-Black.ttf new file mode 100644 index 0000000..1081731 Binary files /dev/null and b/addons/phantom_camera/fonts/Nunito-Black.ttf differ diff --git a/addons/phantom_camera/fonts/Nunito-Black.ttf.import b/addons/phantom_camera/fonts/Nunito-Black.ttf.import new file mode 100644 index 0000000..ac96a49 --- /dev/null +++ b/addons/phantom_camera/fonts/Nunito-Black.ttf.import @@ -0,0 +1,34 @@ +[remap] + +importer="font_data_dynamic" +type="FontFile" +uid="uid://c4mm3of2mc8o5" +path="res://.godot/imported/Nunito-Black.ttf-2a374efbc207a97a99b8c70bdc4b7cbb.fontdata" + +[deps] + +source_file="res://addons/phantom_camera/fonts/Nunito-Black.ttf" +dest_files=["res://.godot/imported/Nunito-Black.ttf-2a374efbc207a97a99b8c70bdc4b7cbb.fontdata"] + +[params] + +Rendering=null +antialiasing=1 +generate_mipmaps=false +disable_embedded_bitmaps=true +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/addons/phantom_camera/fonts/Nunito-Regular.ttf b/addons/phantom_camera/fonts/Nunito-Regular.ttf new file mode 100644 index 0000000..dfd0fcb Binary files /dev/null and b/addons/phantom_camera/fonts/Nunito-Regular.ttf differ diff --git a/addons/phantom_camera/fonts/Nunito-Regular.ttf.import b/addons/phantom_camera/fonts/Nunito-Regular.ttf.import new file mode 100644 index 0000000..393153f --- /dev/null +++ b/addons/phantom_camera/fonts/Nunito-Regular.ttf.import @@ -0,0 +1,34 @@ +[remap] + +importer="font_data_dynamic" +type="FontFile" +uid="uid://dve7mgsjik4dg" +path="res://.godot/imported/Nunito-Regular.ttf-b6054d499efa1a10921004862b1e217a.fontdata" + +[deps] + +source_file="res://addons/phantom_camera/fonts/Nunito-Regular.ttf" +dest_files=["res://.godot/imported/Nunito-Regular.ttf-b6054d499efa1a10921004862b1e217a.fontdata"] + +[params] + +Rendering=null +antialiasing=1 +generate_mipmaps=false +disable_embedded_bitmaps=true +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/addons/phantom_camera/gizmos/custom_gizmo.gd b/addons/phantom_camera/gizmos/custom_gizmo.gd new file mode 100644 index 0000000..f094f7b --- /dev/null +++ b/addons/phantom_camera/gizmos/custom_gizmo.gd @@ -0,0 +1,93 @@ +extends EditorNode3DGizmoPlugin +class_name CustomPluginGizmo + +var _gizmo_name +var gizmo_name: String: set = set_gizmo_name + +var _gizmo_icon: Texture2D +var gizmo_icon: Texture2D: set = set_gizmo_icon + +var _gizmo_spatial_script: Script +var gizmo_spatial_script: Script: set = set_gizmo_spatial_script + +var _gizmo_scale: float = 0.035 + + +func set_gizmo_name(name: String) -> void: + _gizmo_name = name + + +func set_gizmo_icon(icon: Texture2D) -> void: + _gizmo_icon = icon + + +func set_gizmo_spatial_script(script: Script) -> void: + _gizmo_spatial_script = script + + +func _get_gizmo_name() -> String: + return _gizmo_name + +func _has_gizmo(spatial: Node3D): + return spatial.get_script() == _gizmo_spatial_script + + +func _init() -> void: + create_icon_material(_gizmo_name, _gizmo_icon, false, Color.WHITE) + create_material("main", Color8(252, 127, 127, 255)) + + +func _draw_frustum() -> PackedVector3Array: + var lines = PackedVector3Array() + + var dis: float = 0.25 + var width: float = dis * 1.25 + var len: float = dis * 1.5 + + # Straight line +# lines.push_back(Vector3(0, 0, 0)) +# lines.push_back(Vector3(0, 0, -len)) + + + # Trapezoid + lines.push_back(Vector3(0, 0, 0)) + lines.push_back(Vector3(-width, dis, -len)) + + lines.push_back(Vector3(0, 0, 0)) + lines.push_back(Vector3(width, dis, -len)) + + lines.push_back(Vector3(0, 0, 0)) + lines.push_back(Vector3(-width, -dis, -len)) + + lines.push_back(Vector3(0, 0, 0)) + lines.push_back(Vector3(width, -dis, -len)) + + + # Square + ## Left + lines.push_back(Vector3(-width, dis, -len)) + lines.push_back(Vector3(-width, -dis, -len)) + + ## Bottom + lines.push_back(Vector3(-width, -dis, -len)) + lines.push_back(Vector3(width, -dis, -len)) + + ## Right + lines.push_back(Vector3(width, -dis, -len)) + lines.push_back(Vector3(width, dis, -len)) + + ## Top + lines.push_back(Vector3(width, dis, -len)) + lines.push_back(Vector3(-width, dis, -len)) + + return lines + + +func _redraw(gizmo: EditorNode3DGizmo): + gizmo.clear() + + var icon: Material = get_material(_gizmo_name, gizmo) + gizmo.add_unscaled_billboard(icon, _gizmo_scale) + + var material = get_material("main", gizmo) + gizmo.add_lines(_draw_frustum(), material) diff --git a/addons/phantom_camera/gizmos/phantom_camera_gizmo_plugin_3d.gd b/addons/phantom_camera/gizmos/phantom_camera_gizmo_plugin_3d.gd new file mode 100644 index 0000000..bef8180 --- /dev/null +++ b/addons/phantom_camera/gizmos/phantom_camera_gizmo_plugin_3d.gd @@ -0,0 +1,11 @@ +extends CustomPluginGizmo + +var _spatial_script: Script = preload("res://addons/phantom_camera/scripts/phantom_camera/phantom_camera_3d.gd") +var _icon: Texture2D = preload("res://addons/phantom_camera/icons/phantom_camera_gizmo.svg") + + +func _init() -> void: + set_gizmo_name("PhantomCamera") + set_gizmo_spatial_script(_spatial_script) + set_gizmo_icon(_icon) + super() diff --git a/addons/phantom_camera/icons/misc/PriorityOverride.svg b/addons/phantom_camera/icons/misc/PriorityOverride.svg new file mode 100644 index 0000000..de7fd01 --- /dev/null +++ b/addons/phantom_camera/icons/misc/PriorityOverride.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/addons/phantom_camera/icons/misc/PriorityOverride.svg.import b/addons/phantom_camera/icons/misc/PriorityOverride.svg.import new file mode 100644 index 0000000..d78acf5 --- /dev/null +++ b/addons/phantom_camera/icons/misc/PriorityOverride.svg.import @@ -0,0 +1,37 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dy8eifa6aw2en" +path="res://.godot/imported/PriorityOverride.svg-e76e07f4bbd98169f119e17fe5f2f03f.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://addons/phantom_camera/icons/misc/PriorityOverride.svg" +dest_files=["res://.godot/imported/PriorityOverride.svg-e76e07f4bbd98169f119e17fe5f2f03f.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/addons/phantom_camera/icons/phantom_camera_2d.svg b/addons/phantom_camera/icons/phantom_camera_2d.svg new file mode 100644 index 0000000..0c67805 --- /dev/null +++ b/addons/phantom_camera/icons/phantom_camera_2d.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/addons/phantom_camera/icons/phantom_camera_2d.svg.import b/addons/phantom_camera/icons/phantom_camera_2d.svg.import new file mode 100644 index 0000000..b10d490 --- /dev/null +++ b/addons/phantom_camera/icons/phantom_camera_2d.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cmcvv0edbbpv4" +path="res://.godot/imported/phantom_camera_2d.svg-e5483cbc858fc5f95f7210b1649dff0d.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/phantom_camera/icons/phantom_camera_2d.svg" +dest_files=["res://.godot/imported/phantom_camera_2d.svg-e5483cbc858fc5f95f7210b1649dff0d.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=true diff --git a/addons/phantom_camera/icons/phantom_camera_3d.svg b/addons/phantom_camera/icons/phantom_camera_3d.svg new file mode 100644 index 0000000..db18730 --- /dev/null +++ b/addons/phantom_camera/icons/phantom_camera_3d.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/addons/phantom_camera/icons/phantom_camera_3d.svg.import b/addons/phantom_camera/icons/phantom_camera_3d.svg.import new file mode 100644 index 0000000..6542a24 --- /dev/null +++ b/addons/phantom_camera/icons/phantom_camera_3d.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bf8bxgxx71qki" +path="res://.godot/imported/phantom_camera_3d.svg-41ed612e834470377fb56eebffa083fe.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/phantom_camera/icons/phantom_camera_3d.svg" +dest_files=["res://.godot/imported/phantom_camera_3d.svg-41ed612e834470377fb56eebffa083fe.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=true diff --git a/addons/phantom_camera/icons/phantom_camera_camera_3d_resource.svg b/addons/phantom_camera/icons/phantom_camera_camera_3d_resource.svg new file mode 100644 index 0000000..282adf2 --- /dev/null +++ b/addons/phantom_camera/icons/phantom_camera_camera_3d_resource.svg @@ -0,0 +1,3 @@ + + + diff --git a/addons/phantom_camera/icons/phantom_camera_camera_3d_resource.svg.import b/addons/phantom_camera/icons/phantom_camera_camera_3d_resource.svg.import new file mode 100644 index 0000000..d880530 --- /dev/null +++ b/addons/phantom_camera/icons/phantom_camera_camera_3d_resource.svg.import @@ -0,0 +1,37 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dkpwb4k1bkbvn" +path="res://.godot/imported/phantom_camera_camera_3d_resource.svg-f8bf8d1a5b7442fd6933bfbed999d57d.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://addons/phantom_camera/icons/phantom_camera_camera_3d_resource.svg" +dest_files=["res://.godot/imported/phantom_camera_camera_3d_resource.svg-f8bf8d1a5b7442fd6933bfbed999d57d.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/addons/phantom_camera/icons/phantom_camera_gizmo.svg b/addons/phantom_camera/icons/phantom_camera_gizmo.svg new file mode 100644 index 0000000..d791ce0 --- /dev/null +++ b/addons/phantom_camera/icons/phantom_camera_gizmo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/addons/phantom_camera/icons/phantom_camera_gizmo.svg.import b/addons/phantom_camera/icons/phantom_camera_gizmo.svg.import new file mode 100644 index 0000000..7b49608 --- /dev/null +++ b/addons/phantom_camera/icons/phantom_camera_gizmo.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://e36npe2rbxyg" +path.s3tc="res://.godot/imported/phantom_camera_gizmo.svg-ba1aacb9b1c5f4ef401d3bd3697a542b.s3tc.ctex" +metadata={ +"imported_formats": ["s3tc_bptc"], +"vram_texture": true +} + +[deps] + +source_file="res://addons/phantom_camera/icons/phantom_camera_gizmo.svg" +dest_files=["res://.godot/imported/phantom_camera_gizmo.svg-ba1aacb9b1c5f4ef401d3bd3697a542b.s3tc.ctex"] + +[params] + +compress/mode=2 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=true +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=0 +svg/scale=1.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/addons/phantom_camera/icons/phantom_camera_glow_logo.png b/addons/phantom_camera/icons/phantom_camera_glow_logo.png new file mode 100644 index 0000000..41ad8de Binary files /dev/null and b/addons/phantom_camera/icons/phantom_camera_glow_logo.png differ diff --git a/addons/phantom_camera/icons/phantom_camera_glow_logo.png.import b/addons/phantom_camera/icons/phantom_camera_glow_logo.png.import new file mode 100644 index 0000000..d68be86 --- /dev/null +++ b/addons/phantom_camera/icons/phantom_camera_glow_logo.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cjli3p2b8mfyh" +path="res://.godot/imported/phantom_camera_glow_logo.png-078f944973b55b32029ba02980211fe0.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://addons/phantom_camera/icons/phantom_camera_glow_logo.png" +dest_files=["res://.godot/imported/phantom_camera_glow_logo.png-078f944973b55b32029ba02980211fe0.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/addons/phantom_camera/icons/phantom_camera_host.svg b/addons/phantom_camera/icons/phantom_camera_host.svg new file mode 100644 index 0000000..4ff3ada --- /dev/null +++ b/addons/phantom_camera/icons/phantom_camera_host.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/addons/phantom_camera/icons/phantom_camera_host.svg.import b/addons/phantom_camera/icons/phantom_camera_host.svg.import new file mode 100644 index 0000000..430d67d --- /dev/null +++ b/addons/phantom_camera/icons/phantom_camera_host.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://5fatldiu7dd5" +path="res://.godot/imported/phantom_camera_host.svg-3150f8f2d82ca9ecab9a3a415da21c5b.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/phantom_camera/icons/phantom_camera_host.svg" +dest_files=["res://.godot/imported/phantom_camera_host.svg-3150f8f2d82ca9ecab9a3a415da21c5b.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=true diff --git a/addons/phantom_camera/icons/phantom_camera_logo.png b/addons/phantom_camera/icons/phantom_camera_logo.png new file mode 100644 index 0000000..bc43e56 Binary files /dev/null and b/addons/phantom_camera/icons/phantom_camera_logo.png differ diff --git a/addons/phantom_camera/icons/phantom_camera_logo.png.import b/addons/phantom_camera/icons/phantom_camera_logo.png.import new file mode 100644 index 0000000..6f51cf4 --- /dev/null +++ b/addons/phantom_camera/icons/phantom_camera_logo.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cc0wmici0eic8" +path="res://.godot/imported/phantom_camera_logo.png-8b8d347b5e4800c86cd8095d030a3e5a.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://addons/phantom_camera/icons/phantom_camera_logo.png" +dest_files=["res://.godot/imported/phantom_camera_logo.png-8b8d347b5e4800c86cd8095d030a3e5a.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/addons/phantom_camera/icons/phantom_camera_tween.svg b/addons/phantom_camera/icons/phantom_camera_tween.svg new file mode 100644 index 0000000..6956fb5 --- /dev/null +++ b/addons/phantom_camera/icons/phantom_camera_tween.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/addons/phantom_camera/icons/phantom_camera_tween.svg.import b/addons/phantom_camera/icons/phantom_camera_tween.svg.import new file mode 100644 index 0000000..3db67fb --- /dev/null +++ b/addons/phantom_camera/icons/phantom_camera_tween.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dphl04mdf3220" +path="res://.godot/imported/phantom_camera_tween.svg-16faced08ef4a5f3458264d894230dbd.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/phantom_camera/icons/phantom_camera_tween.svg" +dest_files=["res://.godot/imported/phantom_camera_tween.svg-16faced08ef4a5f3458264d894230dbd.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=true diff --git a/addons/phantom_camera/icons/phantom_camera_updater_panel_icon.svg b/addons/phantom_camera/icons/phantom_camera_updater_panel_icon.svg new file mode 100644 index 0000000..6d3bcd4 --- /dev/null +++ b/addons/phantom_camera/icons/phantom_camera_updater_panel_icon.svg @@ -0,0 +1,3 @@ + + + diff --git a/addons/phantom_camera/icons/phantom_camera_updater_panel_icon.svg.import b/addons/phantom_camera/icons/phantom_camera_updater_panel_icon.svg.import new file mode 100644 index 0000000..c182784 --- /dev/null +++ b/addons/phantom_camera/icons/phantom_camera_updater_panel_icon.svg.import @@ -0,0 +1,37 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://d4j4hrb7yusyq" +path="res://.godot/imported/phantom_camera_updater_panel_icon.svg-19823e6cbee8115f8b2554d0ee6e79db.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://addons/phantom_camera/icons/phantom_camera_updater_panel_icon.svg" +dest_files=["res://.godot/imported/phantom_camera_updater_panel_icon.svg-19823e6cbee8115f8b2554d0ee6e79db.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/addons/phantom_camera/icons/viewfinder/Camera2DIcon.svg b/addons/phantom_camera/icons/viewfinder/Camera2DIcon.svg new file mode 100644 index 0000000..59efad4 --- /dev/null +++ b/addons/phantom_camera/icons/viewfinder/Camera2DIcon.svg @@ -0,0 +1,3 @@ + + + diff --git a/addons/phantom_camera/icons/viewfinder/Camera2DIcon.svg.import b/addons/phantom_camera/icons/viewfinder/Camera2DIcon.svg.import new file mode 100644 index 0000000..e8fb35d --- /dev/null +++ b/addons/phantom_camera/icons/viewfinder/Camera2DIcon.svg.import @@ -0,0 +1,37 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://ccnsrg8hq74p2" +path="res://.godot/imported/Camera2DIcon.svg-300e6f57281180711c5ecf391104d4ba.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://addons/phantom_camera/icons/viewfinder/Camera2DIcon.svg" +dest_files=["res://.godot/imported/Camera2DIcon.svg-300e6f57281180711c5ecf391104d4ba.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/addons/phantom_camera/icons/viewfinder/Camera3DIcon.svg b/addons/phantom_camera/icons/viewfinder/Camera3DIcon.svg new file mode 100644 index 0000000..2366c3f --- /dev/null +++ b/addons/phantom_camera/icons/viewfinder/Camera3DIcon.svg @@ -0,0 +1,3 @@ + + + diff --git a/addons/phantom_camera/icons/viewfinder/Camera3DIcon.svg.import b/addons/phantom_camera/icons/viewfinder/Camera3DIcon.svg.import new file mode 100644 index 0000000..79708e2 --- /dev/null +++ b/addons/phantom_camera/icons/viewfinder/Camera3DIcon.svg.import @@ -0,0 +1,37 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dkiefpjsrj37n" +path="res://.godot/imported/Camera3DIcon.svg-4805c46004db1c89cc9443dd740693f5.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://addons/phantom_camera/icons/viewfinder/Camera3DIcon.svg" +dest_files=["res://.godot/imported/Camera3DIcon.svg-4805c46004db1c89cc9443dd740693f5.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/addons/phantom_camera/icons/viewfinder/SceneTypesIcon.svg b/addons/phantom_camera/icons/viewfinder/SceneTypesIcon.svg new file mode 100644 index 0000000..87e3f79 --- /dev/null +++ b/addons/phantom_camera/icons/viewfinder/SceneTypesIcon.svg @@ -0,0 +1,4 @@ + + + + diff --git a/addons/phantom_camera/icons/viewfinder/SceneTypesIcon.svg.import b/addons/phantom_camera/icons/viewfinder/SceneTypesIcon.svg.import new file mode 100644 index 0000000..364c4ed --- /dev/null +++ b/addons/phantom_camera/icons/viewfinder/SceneTypesIcon.svg.import @@ -0,0 +1,37 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dk7omm0x44suj" +path="res://.godot/imported/SceneTypesIcon.svg-66e2255bd3398007bec03a5cbfa4d0aa.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://addons/phantom_camera/icons/viewfinder/SceneTypesIcon.svg" +dest_files=["res://.godot/imported/SceneTypesIcon.svg-66e2255bd3398007bec03a5cbfa4d0aa.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/addons/phantom_camera/inspector/phantom_camera_inspector_plugin.gd b/addons/phantom_camera/inspector/phantom_camera_inspector_plugin.gd new file mode 100644 index 0000000..d5a0d22 --- /dev/null +++ b/addons/phantom_camera/inspector/phantom_camera_inspector_plugin.gd @@ -0,0 +1,46 @@ +@tool +extends EditorInspectorPlugin + +#var _phantom_camera_script: Script = preload("res://addons/phantom_camera/scripts/phantom_camera.gd") + + +# TODO - Enable again once work is resumed for inspector based tasks + +#func _can_handle(object) -> bool: +# return object is _phantom_camera_script + + +func _parse_category(object: Object, category: String) -> void: + + var _margin_container: MarginContainer = MarginContainer.new() + var _margin_v: float = 20 + _margin_container.add_theme_constant_override("margin_left", 10) + _margin_container.add_theme_constant_override("margin_top", _margin_v) + _margin_container.add_theme_constant_override("margin_right", 10) + _margin_container.add_theme_constant_override("margin_bottom", _margin_v) + add_custom_control(_margin_container) + + var _vbox_container: VBoxContainer = VBoxContainer.new() + _margin_container.add_child(_vbox_container) + + var align_with_view_button = Button.new() + align_with_view_button.connect("pressed", _align_camera_with_view.bind(object)) + align_with_view_button.set_custom_minimum_size(Vector2(0, 60)) + align_with_view_button.set_text("Align with view") + _vbox_container.add_child(align_with_view_button) + + var preview_camera_button = Button.new() + preview_camera_button.connect("pressed", _preview_camera.bind(object)) + preview_camera_button.set_custom_minimum_size(Vector2(0, 60)) + preview_camera_button.set_text("Preview Camera") + _vbox_container.add_child(preview_camera_button) + + + +func _align_camera_with_view(object: Object) -> void: + print("Aligning camera with view") + print(object) + +func _preview_camera(object: Object) -> void: + print("Previewing camera") + print(object) diff --git a/addons/phantom_camera/panel/editor.gd b/addons/phantom_camera/panel/editor.gd new file mode 100644 index 0000000..9f52b8f --- /dev/null +++ b/addons/phantom_camera/panel/editor.gd @@ -0,0 +1,11 @@ +@tool +extends VBoxContainer + +var editor_plugin: EditorPlugin + +@onready var updater: Control = %UpdateButton +@onready var viewfinder: Control = %ViewfinderPanel + + +func _ready(): + updater.editor_plugin = editor_plugin diff --git a/addons/phantom_camera/panel/editor.tscn b/addons/phantom_camera/panel/editor.tscn new file mode 100644 index 0000000..da1574c --- /dev/null +++ b/addons/phantom_camera/panel/editor.tscn @@ -0,0 +1,23 @@ +[gd_scene load_steps=4 format=3 uid="uid://cfdoaceoosi1w"] + +[ext_resource type="Script" path="res://addons/phantom_camera/panel/editor.gd" id="1_86hp7"] +[ext_resource type="PackedScene" uid="uid://cuqkqsp3ikv5u" path="res://addons/phantom_camera/panel/updater/update_button.tscn" id="1_oowcd"] +[ext_resource type="PackedScene" uid="uid://dbkr3d716wtx0" path="res://addons/phantom_camera/panel/viewfinder/viewfinder_panel.tscn" id="2_xecnk"] + +[node name="EditorPanel" type="VBoxContainer"] +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +script = ExtResource("1_86hp7") + +[node name="UpdateButton" parent="." instance=ExtResource("1_oowcd")] +unique_name_in_owner = true +layout_mode = 2 +size_flags_horizontal = 8 +size_flags_vertical = 1 + +[node name="ViewfinderPanel" parent="." instance=ExtResource("2_xecnk")] +unique_name_in_owner = true +layout_mode = 2 diff --git a/addons/phantom_camera/panel/updater/download_update_panel.tscn b/addons/phantom_camera/panel/updater/download_update_panel.tscn new file mode 100644 index 0000000..240ed5f --- /dev/null +++ b/addons/phantom_camera/panel/updater/download_update_panel.tscn @@ -0,0 +1,253 @@ +[gd_scene load_steps=15 format=3 uid="uid://b25fl4usw0nlp"] + +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/panel/updater/download_update_panel.gd" id="1_sx5xq"] +[ext_resource type="Texture2D" uid="uid://cc0wmici0eic8" path="res://addons/phantom_camera/icons/phantom_camera_logo.png" id="2_f3yo7"] +[ext_resource type="FontFile" uid="uid://c4mm3of2mc8o5" path="res://addons/phantom_camera/fonts/Nunito-Black.ttf" id="3_h8uk3"] +[ext_resource type="FontFile" uid="uid://dve7mgsjik4dg" path="res://addons/phantom_camera/fonts/Nunito-Regular.ttf" id="4_gwh4i"] +[ext_resource type="Texture2D" uid="uid://censw3w53gldn" path="res://addons/phantom_camera/assets/PhantomCameraBtnPrimaryDefault.png" id="5_bonti"] + +[sub_resource type="ImageTexture" id="ImageTexture_sjwi2"] + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_insma"] +bg_color = Color(0.0190018, 0.21903, 0.16997, 1) +border_width_left = 2 +border_width_top = 2 +border_width_right = 2 +border_width_bottom = 2 +border_color = Color(0.0980392, 0.572549, 0.458824, 1) +border_blend = true +corner_radius_bottom_right = 12 +corner_radius_bottom_left = 12 + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_8m63d"] +bg_color = Color(0.0784314, 0.109804, 0.129412, 1) +border_width_left = 2 +border_width_top = 2 +border_width_right = 2 +border_width_bottom = 2 +border_color = Color(0.105882, 0.619608, 0.498039, 1) +corner_radius_bottom_right = 12 +corner_radius_bottom_left = 12 + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_yn22d"] +bg_color = Color(0.0117647, 0.164706, 0.12549, 1) +border_width_left = 2 +border_width_top = 2 +border_width_right = 2 +border_width_bottom = 2 +border_color = Color(0.0980392, 0.572549, 0.458824, 1) +border_blend = true +corner_radius_bottom_right = 12 +corner_radius_bottom_left = 12 + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_djsbc"] + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_xtrn6"] + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_o12j0"] + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_buptb"] + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_g3tf0"] + +[node name="DownloadUpdatePanel" type="Control"] +custom_minimum_size = Vector2(300, 350) +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_bottom = -61.0 +grow_horizontal = 2 +grow_vertical = 2 +script = ExtResource("1_sx5xq") + +[node name="DownloadHTTPRequest" type="HTTPRequest" parent="."] +unique_name_in_owner = true + +[node name="Timer" type="Timer" parent="DownloadHTTPRequest"] +one_shot = true + +[node name="VBox" type="VBoxContainer" parent="."] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +theme_override_constants/separation = 2 + +[node name="VBoxContainer2" type="VBoxContainer" parent="VBox"] +layout_mode = 2 +theme_override_constants/separation = -20 + +[node name="MarginContainer" type="MarginContainer" parent="VBox/VBoxContainer2"] +layout_mode = 2 +theme_override_constants/margin_top = 12 + +[node name="Logo" type="TextureRect" parent="VBox/VBoxContainer2/MarginContainer"] +unique_name_in_owner = true +clip_contents = true +custom_minimum_size = Vector2(300, 160) +layout_mode = 2 +texture = ExtResource("2_f3yo7") +expand_mode = 3 +stretch_mode = 5 + +[node name="VBoxContainer" type="VBoxContainer" parent="VBox/VBoxContainer2"] +layout_mode = 2 +theme_override_constants/separation = -5 + +[node name="NameLabel" type="Label" parent="VBox/VBoxContainer2/VBoxContainer"] +layout_mode = 2 +theme_override_colors/font_color = Color(0.960784, 0.960784, 0.960784, 1) +theme_override_fonts/font = ExtResource("3_h8uk3") +theme_override_font_sizes/font_size = 32 +text = "Phantom Camera" +horizontal_alignment = 1 + +[node name="DownloadVersionLabel" type="Label" parent="VBox/VBoxContainer2/VBoxContainer"] +unique_name_in_owner = true +layout_mode = 2 +theme_override_colors/font_color = Color(0.960784, 0.960784, 0.960784, 1) +theme_override_fonts/font = ExtResource("4_gwh4i") +theme_override_font_sizes/font_size = 18 +text = "v1.2.3 is available for download." +horizontal_alignment = 1 + +[node name="CurrentVersionLabel" type="Label" parent="VBox"] +unique_name_in_owner = true +visible = false +layout_mode = 2 +theme_override_fonts/font = ExtResource("4_gwh4i") +text = "Current version: 0.0.0" +horizontal_alignment = 1 + +[node name="Center2" type="CenterContainer" parent="VBox"] +layout_mode = 2 + +[node name="NotesButton" type="LinkButton" parent="VBox/Center2"] +layout_mode = 2 +theme_override_colors/font_color = Color(0.917647, 0.631373, 0.368627, 1) +theme_override_colors/font_hover_color = Color(0.721569, 0.454902, 0.192157, 1) +theme_override_fonts/font = ExtResource("3_h8uk3") +theme_override_font_sizes/font_size = 18 +text = "Release Notes" + +[node name="Center" type="CenterContainer" parent="VBox"] +layout_mode = 2 + +[node name="VBoxContainer" type="VBoxContainer" parent="VBox/Center"] +layout_mode = 2 + +[node name="BreakingLabel" type="Label" parent="VBox/Center/VBoxContainer"] +unique_name_in_owner = true +visible = false +layout_mode = 2 +theme_override_colors/font_color = Color(0.72549, 0.227451, 0.34902, 1) +theme_override_fonts/font = ExtResource("3_h8uk3") +theme_override_font_sizes/font_size = 18 +text = "Potential Breaking Changes +in new release" +horizontal_alignment = 1 +uppercase = true + +[node name="BreakingMarginContainer" type="MarginContainer" parent="VBox/Center/VBoxContainer"] +unique_name_in_owner = true +visible = false +layout_mode = 2 + +[node name="VBoxContainer" type="VBoxContainer" parent="VBox/Center/VBoxContainer/BreakingMarginContainer"] +layout_mode = 2 + +[node name="RichTextLabel2" type="RichTextLabel" parent="VBox/Center/VBoxContainer/BreakingMarginContainer/VBoxContainer"] +layout_mode = 2 +theme_override_fonts/normal_font = ExtResource("4_gwh4i") +theme_override_fonts/bold_font = ExtResource("3_h8uk3") +theme_override_fonts/mono_font = ExtResource("3_h8uk3") +theme_override_font_sizes/normal_font_size = 18 +theme_override_font_sizes/bold_font_size = 14 +theme_override_font_sizes/mono_font_size = 12 +bbcode_enabled = true +text = "[center][b]I am prepared for any breaking +changes that may occur from this update[/b][/center]" +fit_content = true + +[node name="BreakingOptionButton" type="OptionButton" parent="VBox/Center/VBoxContainer/BreakingMarginContainer/VBoxContainer"] +unique_name_in_owner = true +visible = false +layout_mode = 2 +mouse_default_cursor_shape = 2 +theme_override_fonts/font = ExtResource("3_h8uk3") +theme_override_font_sizes/font_size = 18 +theme_override_icons/arrow = SubResource("ImageTexture_sjwi2") +theme_override_styles/normal = SubResource("StyleBoxFlat_insma") +theme_override_styles/hover = SubResource("StyleBoxFlat_8m63d") +theme_override_styles/pressed = SubResource("StyleBoxFlat_yn22d") +alignment = 1 +item_count = 2 +selected = 0 +popup/item_0/text = "Confirm choice" +popup/item_0/id = 0 +popup/item_1/text = "Yes, I am prepared" +popup/item_1/id = 1 + +[node name="DownloadButton" type="Button" parent="VBox/Center/VBoxContainer"] +unique_name_in_owner = true +custom_minimum_size = Vector2(240, 90) +layout_mode = 2 +mouse_default_cursor_shape = 2 +theme_override_styles/normal = SubResource("StyleBoxEmpty_djsbc") +theme_override_styles/hover = SubResource("StyleBoxEmpty_xtrn6") +theme_override_styles/pressed = SubResource("StyleBoxEmpty_o12j0") +theme_override_styles/disabled = SubResource("StyleBoxEmpty_buptb") +theme_override_styles/focus = SubResource("StyleBoxEmpty_g3tf0") + +[node name="DownloadButtonBG" type="NinePatchRect" parent="VBox/Center/VBoxContainer/DownloadButton"] +unique_name_in_owner = true +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +texture = ExtResource("5_bonti") +patch_margin_left = 38 +patch_margin_top = 37 +patch_margin_right = 38 +patch_margin_bottom = 39 + +[node name="UpdateLabel" type="Label" parent="VBox/Center/VBoxContainer/DownloadButton"] +unique_name_in_owner = true +layout_mode = 1 +anchors_preset = 14 +anchor_top = 0.5 +anchor_right = 1.0 +anchor_bottom = 0.5 +offset_top = -14.5 +offset_bottom = 14.5 +grow_horizontal = 2 +grow_vertical = 2 +theme_override_colors/font_color = Color(0.960784, 0.960784, 0.960784, 1) +theme_override_colors/font_shadow_color = Color(0, 0, 0, 1) +theme_override_fonts/font = ExtResource("3_h8uk3") +theme_override_font_sizes/font_size = 20 +text = "Update" +horizontal_alignment = 1 +uppercase = true + +[node name="MarginContainer" type="MarginContainer" parent="VBox"] +layout_mode = 2 +theme_override_constants/margin_top = 10 + +[node name="RichTextLabel" type="RichTextLabel" parent="VBox/MarginContainer"] +layout_mode = 2 +theme_override_fonts/normal_font = ExtResource("4_gwh4i") +theme_override_fonts/mono_font = ExtResource("3_h8uk3") +theme_override_font_sizes/normal_font_size = 12 +theme_override_font_sizes/mono_font_size = 12 +bbcode_enabled = true +text = "[center]The updater can be disabled within: +[code]Project Settings / Phantom Camera / Updater / Enable Updater[/code][/center]" +fit_content = true + +[connection signal="pressed" from="VBox/Center2/NotesButton" to="." method="_on_notes_button_pressed"] diff --git a/addons/phantom_camera/panel/updater/update_button.tscn b/addons/phantom_camera/panel/updater/update_button.tscn new file mode 100644 index 0000000..00c80de --- /dev/null +++ b/addons/phantom_camera/panel/updater/update_button.tscn @@ -0,0 +1,101 @@ +[gd_scene load_steps=10 format=3 uid="uid://cuqkqsp3ikv5u"] + +[ext_resource type="FontFile" uid="uid://c4mm3of2mc8o5" path="res://addons/phantom_camera/fonts/Nunito-Black.ttf" id="1_5e5k4"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/panel/updater/update_button.gd" id="1_xtaw5"] +[ext_resource type="Texture2D" uid="uid://d4j4hrb7yusyq" path="res://addons/phantom_camera/icons/phantom_camera_updater_panel_icon.svg" id="2_c4d83"] +[ext_resource type="PackedScene" uid="uid://b25fl4usw0nlp" path="res://addons/phantom_camera/panel/updater/download_update_panel.tscn" id="2_vtgcx"] + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_c7fd1"] +content_margin_left = 10.0 +content_margin_top = 4.0 +content_margin_right = 10.0 +content_margin_bottom = 4.0 +bg_color = Color(0.0980392, 0.415686, 0.341176, 1) +border_width_left = 2 +border_width_top = 2 +border_width_right = 2 +border_width_bottom = 2 +border_color = Color(0.227451, 0.72549, 0.603922, 1) +corner_radius_top_left = 20 +corner_radius_top_right = 20 +corner_radius_bottom_right = 20 +corner_radius_bottom_left = 20 + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_y83dj"] +content_margin_left = 10.0 +content_margin_top = 4.0 +content_margin_right = 10.0 +content_margin_bottom = 4.0 +bg_color = Color(0.0784314, 0.109804, 0.129412, 1) +border_width_left = 2 +border_width_top = 2 +border_width_right = 2 +border_width_bottom = 2 +border_color = Color(0.960784, 0.960784, 0.960784, 1) +corner_radius_top_left = 20 +corner_radius_top_right = 20 +corner_radius_bottom_right = 20 +corner_radius_bottom_left = 20 + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_slf6e"] + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_lekqh"] + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_dr4n4"] +content_margin_bottom = 20.0 +bg_color = Color(0.0784314, 0.109804, 0.129412, 1) +border_width_left = 2 +border_width_top = 2 +border_width_right = 2 +border_width_bottom = 2 +border_color = Color(0.227451, 0.72549, 0.603922, 1) + +[node name="UpdateButton" type="Button"] +visible = false +offset_left = 1.0 +offset_right = 149.0 +offset_bottom = 28.0 +size_flags_vertical = 3 +theme_override_colors/font_color = Color(0.960784, 0.960784, 0.960784, 1) +theme_override_colors/font_hover_color = Color(0.939288, 0.917743, 0.892615, 1) +theme_override_colors/icon_normal_color = Color(0.960784, 0.960784, 0.960784, 1) +theme_override_fonts/font = ExtResource("1_5e5k4") +theme_override_font_sizes/font_size = 14 +theme_override_styles/normal = SubResource("StyleBoxFlat_c7fd1") +theme_override_styles/hover = SubResource("StyleBoxFlat_y83dj") +theme_override_styles/pressed = SubResource("StyleBoxEmpty_slf6e") +theme_override_styles/focus = SubResource("StyleBoxEmpty_lekqh") +text = "Update available" +icon = ExtResource("2_c4d83") +script = ExtResource("1_xtaw5") + +[node name="HTTPRequest" type="HTTPRequest" parent="."] +unique_name_in_owner = true + +[node name="DownloadDialog" type="AcceptDialog" parent="."] +unique_name_in_owner = true +transparent_bg = true +title = "New Update" +initial_position = 2 +size = Vector2i(450, 480) +transient = false +unresizable = true +borderless = true +keep_title_visible = false +content_scale_mode = 1 +theme_override_constants/buttons_separation = 30 +theme_override_styles/panel = SubResource("StyleBoxFlat_dr4n4") +ok_button_text = "Close" + +[node name="DownloadUpdatePanel" parent="DownloadDialog" instance=ExtResource("2_vtgcx")] +unique_name_in_owner = true +offset_left = 2.0 +offset_top = 2.0 +offset_right = -2.0 +offset_bottom = -80.0 + +[node name="NeedsReloadDialog" type="ConfirmationDialog" parent="."] +unique_name_in_owner = true + +[node name="UpdateFailedDialog" type="AcceptDialog" parent="."] +unique_name_in_owner = true diff --git a/addons/phantom_camera/panel/viewfinder/deadzone_style_box.tres b/addons/phantom_camera/panel/viewfinder/deadzone_style_box.tres new file mode 100644 index 0000000..7353299 --- /dev/null +++ b/addons/phantom_camera/panel/viewfinder/deadzone_style_box.tres @@ -0,0 +1,14 @@ +[gd_resource type="StyleBoxFlat" format=3 uid="uid://dpa7yvxlq043a"] + +[resource] +bg_color = Color(0.227451, 0.72549, 0.603922, 0.2) +border_width_left = 2 +border_width_top = 2 +border_width_right = 2 +border_width_bottom = 2 +border_color = Color(0.227451, 0.72549, 0.603922, 1) +corner_detail = 1 +expand_margin_left = 1.0 +expand_margin_top = 1.0 +expand_margin_right = 1.0 +expand_margin_bottom = 1.0 diff --git a/addons/phantom_camera/panel/viewfinder/viewfinder_panel.tscn b/addons/phantom_camera/panel/viewfinder/viewfinder_panel.tscn new file mode 100644 index 0000000..5d26888 --- /dev/null +++ b/addons/phantom_camera/panel/viewfinder/viewfinder_panel.tscn @@ -0,0 +1,445 @@ +[gd_scene load_steps=22 format=3 uid="uid://dbkr3d716wtx0"] + +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/panel/viewfinder/viewfinder.gd" id="1_utvi8"] +[ext_resource type="StyleBox" uid="uid://dpa7yvxlq043a" path="res://addons/phantom_camera/panel/viewfinder/deadzone_style_box.tres" id="2_uabt4"] +[ext_resource type="FontFile" uid="uid://c4mm3of2mc8o5" path="res://addons/phantom_camera/fonts/Nunito-Black.ttf" id="3_li3i3"] +[ext_resource type="Texture2D" uid="uid://5fatldiu7dd5" path="res://addons/phantom_camera/icons/phantom_camera_host.svg" id="4_lcg1p"] +[ext_resource type="FontFile" uid="uid://dve7mgsjik4dg" path="res://addons/phantom_camera/fonts/Nunito-Regular.ttf" id="5_4jhax"] +[ext_resource type="Texture2D" uid="uid://dy8eifa6aw2en" path="res://addons/phantom_camera/icons/misc/PriorityOverride.svg" id="6_ptuth"] + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_fle8t"] +bg_color = Color(0.227451, 0.72549, 0.603922, 0.2) +draw_center = false +border_width_left = 2 +border_width_top = 2 +border_width_right = 2 +border_width_bottom = 2 +border_color = Color(0.227451, 0.72549, 0.603922, 1) +corner_detail = 1 +expand_margin_left = 1.0 +expand_margin_top = 1.0 +expand_margin_right = 1.0 +expand_margin_bottom = 1.0 + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_xmo1t"] +draw_center = false +border_width_left = 1 +border_width_top = 1 +border_width_right = 1 +border_width_bottom = 1 +border_color = Color(0.745098, 0.858824, 0.380392, 1) + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_q7vs4"] +bg_color = Color(0.929412, 0.87451, 0.619608, 1) +border_width_left = 1 +border_width_top = 1 +border_width_right = 1 +border_width_bottom = 1 +border_color = Color(0, 0, 0, 1) +corner_radius_top_left = 10 +corner_radius_top_right = 10 +corner_radius_bottom_right = 10 +corner_radius_bottom_left = 10 + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_iho1a"] + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_obaj6"] + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_fsxik"] +content_margin_left = 10.0 +content_margin_top = 10.0 +content_margin_right = 10.0 +content_margin_bottom = 10.0 +bg_color = Color(0.129412, 0.407843, 0.337255, 1) +border_width_left = 4 +border_width_top = 4 +border_width_right = 4 +border_width_bottom = 4 +border_color = Color(0.227451, 0.72549, 0.603922, 1) +corner_radius_top_left = 10 +corner_radius_top_right = 10 +corner_radius_bottom_right = 10 +corner_radius_bottom_left = 10 + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_yh38y"] +content_margin_left = 10.0 +content_margin_top = 10.0 +content_margin_right = 10.0 +content_margin_bottom = 10.0 +bg_color = Color(0.129412, 0.407843, 0.337255, 1) +border_width_left = 4 +border_width_top = 4 +border_width_right = 4 +border_width_bottom = 4 +border_color = Color(0.552941, 0.647059, 0.952941, 1) +corner_radius_top_left = 10 +corner_radius_top_right = 10 +corner_radius_bottom_right = 10 +corner_radius_bottom_left = 10 + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_gci88"] +content_margin_left = 10.0 +content_margin_top = 10.0 +content_margin_right = 10.0 +content_margin_bottom = 10.0 +bg_color = Color(0.180392, 0.576471, 0.482353, 1) +corner_radius_top_left = 10 +corner_radius_top_right = 10 +corner_radius_bottom_right = 10 +corner_radius_bottom_left = 10 + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_4b76l"] + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_g5wua"] + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_x4bx8"] + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_agqdu"] +bg_color = Color(0.72549, 0.227451, 0.34902, 1) +border_width_left = 2 +border_width_top = 2 +border_width_right = 2 +border_width_bottom = 2 +border_blend = true +corner_radius_top_left = 10 +corner_radius_top_right = 10 +corner_radius_bottom_right = 10 +corner_radius_bottom_left = 10 + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_ja3vm"] +bg_color = Color(0.53, 0.1643, 0.255725, 1) +border_width_left = 2 +border_width_top = 2 +border_width_right = 2 +border_width_bottom = 2 +border_blend = true +corner_radius_top_left = 10 +corner_radius_top_right = 10 +corner_radius_bottom_right = 10 +corner_radius_bottom_left = 10 + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_mk273"] +bg_color = Color(0.43, 0.1333, 0.207475, 1) +border_width_left = 2 +border_width_top = 2 +border_width_right = 2 +border_width_bottom = 2 +border_blend = true +corner_radius_top_left = 10 +corner_radius_top_right = 10 +corner_radius_bottom_right = 10 +corner_radius_bottom_left = 10 + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_840sd"] + +[node name="ViewfinderPanel" type="Control"] +clip_contents = true +custom_minimum_size = Vector2(0, 300) +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 +mouse_filter = 2 +script = ExtResource("1_utvi8") + +[node name="FramedViewfinder" type="Control" parent="."] +unique_name_in_owner = true +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +metadata/_edit_lock_ = true + +[node name="SubViewportContainer" type="SubViewportContainer" parent="FramedViewfinder"] +unique_name_in_owner = true +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +stretch = true + +[node name="SubViewport" type="SubViewport" parent="FramedViewfinder/SubViewportContainer"] +unique_name_in_owner = true +handle_input_locally = false +gui_disable_input = true +size = Vector2i(1152, 648) +size_2d_override_stretch = true +render_target_update_mode = 4 + +[node name="Camera2D" type="Camera2D" parent="FramedViewfinder/SubViewportContainer/SubViewport"] +unique_name_in_owner = true +editor_draw_screen = false + +[node name="DeadZoneHBoxContainer" type="HBoxContainer" parent="FramedViewfinder"] +unique_name_in_owner = true +clip_contents = true +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +theme_override_constants/separation = 0 + +[node name="DeadZoneLeftHBoxContainer" type="VBoxContainer" parent="FramedViewfinder/DeadZoneHBoxContainer"] +clip_contents = true +layout_mode = 2 +size_flags_horizontal = 3 +theme_override_constants/separation = 0 + +[node name="DeadZoneLeftTopPanel" type="Panel" parent="FramedViewfinder/DeadZoneHBoxContainer/DeadZoneLeftHBoxContainer"] +layout_mode = 2 +size_flags_vertical = 3 +theme_override_styles/panel = ExtResource("2_uabt4") + +[node name="DeadZoneLeftCenterPanel" type="Panel" parent="FramedViewfinder/DeadZoneHBoxContainer/DeadZoneLeftHBoxContainer"] +unique_name_in_owner = true +layout_mode = 2 +theme_override_styles/panel = ExtResource("2_uabt4") + +[node name="DeadZoneLeftBottomPanel" type="Panel" parent="FramedViewfinder/DeadZoneHBoxContainer/DeadZoneLeftHBoxContainer"] +layout_mode = 2 +size_flags_vertical = 3 +theme_override_styles/panel = ExtResource("2_uabt4") + +[node name="DeadZoneCenterHBoxContainer" type="VBoxContainer" parent="FramedViewfinder/DeadZoneHBoxContainer"] +unique_name_in_owner = true +clip_contents = true +layout_mode = 2 +size_flags_horizontal = 4 +theme_override_constants/separation = 0 + +[node name="DeadZoneCenterTopPanel" type="Panel" parent="FramedViewfinder/DeadZoneHBoxContainer/DeadZoneCenterHBoxContainer"] +layout_mode = 2 +size_flags_vertical = 3 +theme_override_styles/panel = ExtResource("2_uabt4") + +[node name="DeadZoneCenterCenterPanel" type="Panel" parent="FramedViewfinder/DeadZoneHBoxContainer/DeadZoneCenterHBoxContainer"] +unique_name_in_owner = true +layout_mode = 2 +size_flags_vertical = 4 +theme_override_styles/panel = SubResource("StyleBoxFlat_fle8t") + +[node name="DeadZoneCenterBottomPanel" type="Panel" parent="FramedViewfinder/DeadZoneHBoxContainer/DeadZoneCenterHBoxContainer"] +layout_mode = 2 +size_flags_vertical = 3 +theme_override_styles/panel = ExtResource("2_uabt4") + +[node name="DeadZoneRightHBoxContainer" type="VBoxContainer" parent="FramedViewfinder/DeadZoneHBoxContainer"] +clip_contents = true +layout_mode = 2 +size_flags_horizontal = 3 +theme_override_constants/separation = 0 + +[node name="DeadZoneRightTopPanel" type="Panel" parent="FramedViewfinder/DeadZoneHBoxContainer/DeadZoneRightHBoxContainer"] +layout_mode = 2 +size_flags_vertical = 3 +theme_override_styles/panel = ExtResource("2_uabt4") + +[node name="DeadZoneRightCenterPanel" type="Panel" parent="FramedViewfinder/DeadZoneHBoxContainer/DeadZoneRightHBoxContainer"] +unique_name_in_owner = true +layout_mode = 2 +theme_override_styles/panel = ExtResource("2_uabt4") + +[node name="DeadZoneRightBottomPanel" type="Panel" parent="FramedViewfinder/DeadZoneHBoxContainer/DeadZoneRightHBoxContainer"] +layout_mode = 2 +size_flags_vertical = 3 +theme_override_styles/panel = ExtResource("2_uabt4") + +[node name="AspectRatioContainer" type="AspectRatioContainer" parent="FramedViewfinder"] +unique_name_in_owner = true +clip_contents = true +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +ratio = 1.77778 + +[node name="CameraViewportPanel" type="Panel" parent="FramedViewfinder/AspectRatioContainer"] +layout_mode = 2 +theme_override_styles/panel = SubResource("StyleBoxFlat_xmo1t") + +[node name="TargetPoint" type="Panel" parent="FramedViewfinder/AspectRatioContainer/CameraViewportPanel"] +unique_name_in_owner = true +layout_mode = 1 +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +offset_left = -3.0 +offset_top = -3.0 +offset_right = 3.0 +offset_bottom = 3.0 +grow_horizontal = 2 +grow_vertical = 2 +theme_override_styles/panel = SubResource("StyleBoxFlat_q7vs4") + +[node name="NoSupportMsg" type="Label" parent="."] +unique_name_in_owner = true +visible = false +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_top = -8.0 +offset_bottom = -8.0 +grow_horizontal = 2 +grow_vertical = 2 +theme_override_fonts/font = ExtResource("3_li3i3") +theme_override_font_sizes/font_size = 24 +theme_override_styles/normal = SubResource("StyleBoxEmpty_iho1a") +text = "Control scenes are not supported" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="EmptyStateControl" type="Control" parent="."] +unique_name_in_owner = true +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="BGColorRect" type="ColorRect" parent="EmptyStateControl"] +visible = false +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +color = Color(0, 0, 0, 1) +metadata/_edit_lock_ = true + +[node name="VBoxContainer" type="VBoxContainer" parent="EmptyStateControl"] +layout_mode = 1 +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +offset_left = -200.0 +offset_top = -112.0 +offset_right = 200.0 +offset_bottom = 112.0 +grow_horizontal = 2 +grow_vertical = 2 +alignment = 1 + +[node name="EmptyStateIcon" type="TextureRect" parent="EmptyStateControl/VBoxContainer"] +unique_name_in_owner = true +custom_minimum_size = Vector2(0, 64) +layout_mode = 2 +texture = ExtResource("4_lcg1p") +expand_mode = 1 +stretch_mode = 5 + +[node name="EmptyStateText" type="RichTextLabel" parent="EmptyStateControl/VBoxContainer"] +unique_name_in_owner = true +layout_mode = 2 +theme_override_colors/default_color = Color(1, 1, 1, 1) +theme_override_fonts/normal_font = ExtResource("5_4jhax") +theme_override_fonts/bold_font = ExtResource("3_li3i3") +theme_override_font_sizes/normal_font_size = 24 +theme_override_font_sizes/bold_font_size = 24 +theme_override_styles/focus = SubResource("StyleBoxEmpty_obaj6") +theme_override_styles/normal = SubResource("StyleBoxEmpty_iho1a") +bbcode_enabled = true +text = "[center][b]NodeType[/b] Description [/center]" +fit_content = true + +[node name="AddNodeButton" type="Button" parent="EmptyStateControl/VBoxContainer"] +unique_name_in_owner = true +custom_minimum_size = Vector2(400, 54) +layout_mode = 2 +size_flags_horizontal = 4 +focus_mode = 0 +theme_override_colors/font_color = Color(1, 1, 1, 1) +theme_override_fonts/font = ExtResource("3_li3i3") +theme_override_font_sizes/font_size = 24 +theme_override_styles/normal = SubResource("StyleBoxFlat_fsxik") +theme_override_styles/hover = SubResource("StyleBoxFlat_yh38y") +theme_override_styles/pressed = SubResource("StyleBoxFlat_gci88") +theme_override_styles/focus = SubResource("StyleBoxEmpty_4b76l") + +[node name="AddNodeTypeText" type="RichTextLabel" parent="EmptyStateControl/VBoxContainer/AddNodeButton"] +unique_name_in_owner = true +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_top = 9.0 +offset_bottom = -11.0 +grow_horizontal = 2 +grow_vertical = 2 +mouse_filter = 2 +theme_override_colors/default_color = Color(1, 1, 1, 1) +theme_override_fonts/normal_font = ExtResource("5_4jhax") +theme_override_fonts/bold_font = ExtResource("3_li3i3") +theme_override_font_sizes/normal_font_size = 24 +theme_override_font_sizes/bold_font_size = 24 +theme_override_styles/focus = SubResource("StyleBoxEmpty_g5wua") +theme_override_styles/normal = SubResource("StyleBoxEmpty_x4bx8") +bbcode_enabled = true +text = "[center]Add [img=32]res://addons/phantom_camera/icons/viewfinder/Camera3DIcon.svg[/img] [b]{NodeType}[/b][/center]" +scroll_active = false + +[node name="PriorityOverrideButton" type="Button" parent="."] +unique_name_in_owner = true +visible = false +layout_mode = 1 +offset_left = 5.0 +offset_top = 5.0 +offset_right = 165.0 +offset_bottom = 57.0 +mouse_default_cursor_shape = 2 +theme_override_styles/normal = SubResource("StyleBoxFlat_agqdu") +theme_override_styles/hover = SubResource("StyleBoxFlat_ja3vm") +theme_override_styles/pressed = SubResource("StyleBoxFlat_mk273") +theme_override_styles/focus = SubResource("StyleBoxEmpty_840sd") + +[node name="PriorityOverrideIcon" type="TextureRect" parent="PriorityOverrideButton"] +layout_mode = 1 +offset_left = 8.0 +offset_top = 4.0 +offset_right = 32.0 +offset_bottom = 28.0 +texture = ExtResource("6_ptuth") +expand_mode = 1 + +[node name="PriorityOverrideByLabel" type="Label" parent="PriorityOverrideButton"] +layout_mode = 0 +offset_left = 30.0 +offset_top = 1.0 +offset_right = 140.0 +offset_bottom = 24.0 +theme_override_fonts/font = ExtResource("3_li3i3") +theme_override_font_sizes/font_size = 14 +text = "OVERRIDDEN BY" +vertical_alignment = 1 + +[node name="PriorityOverrideNameLabel" type="Label" parent="PriorityOverrideButton"] +unique_name_in_owner = true +layout_mode = 0 +offset_left = 6.0 +offset_top = 21.0 +offset_right = 153.0 +offset_bottom = 44.0 +theme_override_fonts/font = ExtResource("5_4jhax") +theme_override_font_sizes/font_size = 14 +text = "PCam_Name +" +vertical_alignment = 1 +text_overrun_behavior = 3 diff --git a/addons/phantom_camera/plugin.cfg b/addons/phantom_camera/plugin.cfg new file mode 100644 index 0000000..dd90728 --- /dev/null +++ b/addons/phantom_camera/plugin.cfg @@ -0,0 +1,7 @@ +[plugin] + +name="Phantom Camera" +description="Control the movement and dynamically tween 2D & 3D cameras positions. Built for Godot 4. Inspired by Cinemachine." +author="Marcus Skov" +version="0.7.2.1" +script="plugin.gd" diff --git a/addons/phantom_camera/plugin.gd b/addons/phantom_camera/plugin.gd new file mode 100644 index 0000000..e4759de --- /dev/null +++ b/addons/phantom_camera/plugin.gd @@ -0,0 +1,124 @@ +@tool +extends EditorPlugin + +#region Constants + +const PCAM_HOST: String = "PhantomCameraHost" +const PCAM_2D: String = "PhantomCamera2D" +const PCAM_3D: String = "PhantomCamera3D" + +const Pcam3DPlugin = preload("res://addons/phantom_camera/gizmos/phantom_camera_gizmo_plugin_3d.gd") + +const EditorPanel = preload("res://addons/phantom_camera/panel/editor.tscn") + +const updater_constants := preload("res://addons/phantom_camera/scripts/panel/updater/updater_constants.gd") + +const PHANTOM_CAMERA_MANAGER: StringName = "PhantomCameraManager" + +#endregion + + +#region Variables + +var pcam_3D_gizmo_plugin = Pcam3DPlugin.new() + +var editor_panel_instance: Control +var panel_button: Button +#var viewfinder_panel_instance + +#endregion + + +#region Private Functions + +func _enter_tree() -> void: + add_autoload_singleton(PHANTOM_CAMERA_MANAGER, "res://addons/phantom_camera/scripts/managers/phantom_camera_manager.gd") + + # Phantom Camera Nodes + add_custom_type(PCAM_2D, "Node2D", preload("res://addons/phantom_camera/scripts/phantom_camera/phantom_camera_2d.gd"), preload("res://addons/phantom_camera/icons/phantom_camera_2d.svg")) + add_custom_type(PCAM_3D, "Node3D", preload("res://addons/phantom_camera/scripts/phantom_camera/phantom_camera_3d.gd"), preload("res://addons/phantom_camera/icons/phantom_camera_2d.svg")) + add_custom_type(PCAM_HOST, "Node", preload("res://addons/phantom_camera/scripts/phantom_camera_host/phantom_camera_host.gd"), preload("res://addons/phantom_camera/icons/phantom_camera_2d.svg")) + + + # Phantom Camera 3D Gizmo + add_node_3d_gizmo_plugin(pcam_3D_gizmo_plugin) + + # TODO - Should be disabled unless in editor + # Viewfinder + editor_panel_instance = EditorPanel.instantiate() + editor_panel_instance.editor_plugin = self + panel_button = add_control_to_bottom_panel(editor_panel_instance, "Phantom Camera") + + # Trigger events in the viewfinder whenever + panel_button.toggled.connect(_btn_toggled) + + scene_changed.connect(editor_panel_instance.viewfinder.scene_changed) + + scene_changed.connect(_scene_changed) + + ## Sets Updater Disabling option for non-forked projects + if not FileAccess.file_exists("res://dev_scenes/3d/dev_scene_3d.tscn"): + if not ProjectSettings.has_setting(updater_constants.setting_updater_enabled): + ProjectSettings.set_setting(updater_constants.setting_updater_enabled, true) + ProjectSettings.set_initial_value(updater_constants.setting_updater_enabled, true) + + ## Adds Release console log disabler + if not ProjectSettings.has_setting(updater_constants.setting_updater_notify_release): + ProjectSettings.set_setting(updater_constants.setting_updater_notify_release, true) + ProjectSettings.set_initial_value(updater_constants.setting_updater_notify_release, true) + + ## Enables or disable + if not ProjectSettings.has_setting("phantom_camera/tips/show_jitter_tips"): + ProjectSettings.set_setting("phantom_camera/tips/show_jitter_tips", true) + ProjectSettings.set_initial_value("phantom_camera/tips/show_jitter_tips", true) + + +func _btn_toggled(toggled_on: bool): + if toggled_on: + editor_panel_instance.viewfinder.viewfinder_visible = true + editor_panel_instance.viewfinder.visibility_check() + else: + editor_panel_instance.viewfinder.viewfinder_visible = false + + +func _exit_tree() -> void: + remove_custom_type(PCAM_2D) + remove_custom_type(PCAM_3D) + remove_custom_type(PCAM_HOST) + + remove_node_3d_gizmo_plugin(pcam_3D_gizmo_plugin) + + remove_control_from_bottom_panel(editor_panel_instance) + editor_panel_instance.queue_free() +# if framed_viewfinder_panel_instance: + scene_changed.disconnect(_scene_changed) + + remove_autoload_singleton(PHANTOM_CAMERA_MANAGER) + + panel_button.toggled.disconnect(_btn_toggled) + scene_changed.disconnect(editor_panel_instance.viewfinder.scene_changed) + scene_changed.disconnect(_scene_changed) + +#func _has_main_screen(): +# return true; + + +func _make_visible(visible): + if editor_panel_instance: + editor_panel_instance.set_visible(visible) + + +func _scene_changed(scene_root: Node) -> void: + editor_panel_instance.viewfinder.scene_changed(scene_root) + +#endregion + + +#region Public Functions + +func get_version() -> String: + var config: ConfigFile = ConfigFile.new() + config.load(get_script().resource_path.get_base_dir() + "/plugin.cfg") + return config.get_value("plugin", "version") + +#endregion diff --git a/addons/phantom_camera/scripts/managers/phantom_camera_manager.gd b/addons/phantom_camera/scripts/managers/phantom_camera_manager.gd new file mode 100644 index 0000000..8a53e05 --- /dev/null +++ b/addons/phantom_camera/scripts/managers/phantom_camera_manager.gd @@ -0,0 +1,72 @@ +@tool +extends Node + +const PHANTOM_CAMERA_CONSTS = preload("res://addons/phantom_camera/scripts/phantom_camera/phantom_camera_constants.gd") + +var phantom_camera_hosts: Array[PhantomCameraHost]: + get: + return _phantom_camera_host_list +var _phantom_camera_host_list: Array[PhantomCameraHost] + +var phantom_camera_2ds: Array[PhantomCamera2D]: + get: + return _phantom_camera_2d_list +var _phantom_camera_2d_list: Array[PhantomCamera2D] + +var phantom_camera_3ds: Array: ## Note: To support disable_3d export templates for 2D projects, this is purposely not strongly typed. + get: + return _phantom_camera_3d_list +var _phantom_camera_3d_list: Array ## Note: To support disable_3d export templates for 2D projects, this is purposely not strongly typed. + + +func _enter_tree(): + Engine.physics_jitter_fix = 0 + + +func pcam_host_added(caller: Node) -> void: + if is_instance_of(caller, PhantomCameraHost): + _phantom_camera_host_list.append(caller) + else: + printerr("This method can only be called from a PhantomCameraHost node") + +func pcam_host_removed(caller: Node) -> void: + if is_instance_of(caller, PhantomCameraHost): + _phantom_camera_host_list.erase(caller) + else: + printerr("This method can only be called from a PhantomCameraHost node") + + +func pcam_added(caller, host_slot: int = 0) -> void: + if is_instance_of(caller, PhantomCamera2D): + _phantom_camera_2d_list.append(caller) + #print("Added PCam2D to PCamManager") + elif caller.is_class("PhantomCamera3D"): ## Note: To support disable_3d export templates for 2D projects, this is purposely not strongly typed. + _phantom_camera_3d_list.append(caller) + #print("Added PCam3D to PCamManager") + + if not _phantom_camera_host_list.is_empty(): + _phantom_camera_host_list[host_slot].pcam_added_to_scene(caller) + +func pcam_removed(caller) -> void: + if is_instance_of(caller, PhantomCamera2D): + _phantom_camera_2d_list.erase(caller) + elif caller.is_class("PhantomCamera3D"): ## Note: To support disable_3d export templates for 2D projects, this is purposely not strongly typed. + _phantom_camera_3d_list.erase(caller) + else: + printerr("This method can only be called from a PhantomCamera node") + + +func get_phantom_camera_hosts() -> Array[PhantomCameraHost]: + return _phantom_camera_host_list + +func get_phantom_camera_2ds() -> Array[PhantomCamera2D]: + return _phantom_camera_2d_list + +func get_phantom_camera_3ds() -> Array: ## Note: To support disable_3d export templates for 2D projects, this is purposely not strongly typed. + return _phantom_camera_3d_list + + +func scene_changed() -> void: + _phantom_camera_2d_list.clear() + _phantom_camera_3d_list.clear() + _phantom_camera_host_list.clear() diff --git a/addons/phantom_camera/scripts/panel/updater/download_update_panel.gd b/addons/phantom_camera/scripts/panel/updater/download_update_panel.gd new file mode 100644 index 0000000..b19beb9 --- /dev/null +++ b/addons/phantom_camera/scripts/panel/updater/download_update_panel.gd @@ -0,0 +1,162 @@ +####################################################################### +# Credit goes to the Dialogue Manager plugin for this script +# Check it out at: https://github.com/nathanhoad/godot_dialogue_manager +####################################################################### + +@tool +extends Control + +#region Constants + +const TEMP_FILE_NAME = "user://temp.zip" + +#endregion + + +#region Signals + +signal failed() +signal updated(updated_to_version: String) + +#endregion + + +#region @onready + +#@onready var logo: TextureRect = %Logo +@onready var _download_verion: Label = %DownloadVersionLabel +@onready var _download_http_request: HTTPRequest = %DownloadHTTPRequest +@onready var _download_button: Button = %DownloadButton +@onready var _download_button_bg: NinePatchRect = %DownloadButtonBG +@onready var _download_label: Label = %UpdateLabel + +@onready var _breaking_label: Label = %BreakingLabel +@onready var _breaking_margin_container: MarginContainer = %BreakingMarginContainer +@onready var _breaking_options_button: OptionButton = %BreakingOptionButton +#@onready var current_version_label: Label = %CurrentVersionLabel + +#endregion + + +#region Variables + +# Todo - For 4.2 upgrade - Shows current version +var _download_dialogue: AcceptDialog +var _button_texture_default: Texture2D = load("res://addons/phantom_camera/assets/PhantomCameraBtnPrimaryDefault.png") +var _button_texture_hover: Texture2D = load("res://addons/phantom_camera/assets/PhantomCameraBtnPrimaryHover.png") + +var next_version_release: Dictionary: + set(value): + next_version_release = value + _download_verion.text = "%s update is available for download" % value.tag_name.substr(1) + # Todo - For 4.2 upgrade + #current_version_label.text = "Current version is " + editor_plugin.get_version() + get: + return next_version_release + +var _breaking_window_height: float = 520 +var _breaking_window_height_update: float = 600 + +#endregion + + +#region Private Functions + +func _ready() -> void: + _download_http_request.request_completed.connect(_on_http_request_request_completed) + _download_button.pressed.connect(_on_download_button_pressed) + _download_button.mouse_entered.connect(_on_mouse_entered) + _download_button.mouse_exited.connect(_on_mouse_exited) + + _breaking_label.hide() + _breaking_margin_container.hide() + _breaking_options_button.hide() + + _breaking_options_button.item_selected.connect(_on_item_selected) + + +func _on_item_selected(index: int) -> void: + if index == 1: + _download_button.show() + _download_dialogue.size = Vector2(_download_dialogue.size.x, _breaking_window_height_update) + else: + _download_button.hide() + _download_dialogue.size = Vector2(_download_dialogue.size.x, _breaking_window_height) + + +func _on_download_button_pressed() -> void: + _download_http_request.request(next_version_release.zipball_url) + _download_button.disabled = true + _download_label.text = "Downloading..." + _download_button_bg.hide() + + +func _on_mouse_entered() -> void: + _download_button_bg.set_texture(_button_texture_hover) + + +func _on_mouse_exited() -> void: + _download_button_bg.set_texture(_button_texture_default) + + +func _on_http_request_request_completed(result: int, response_code: int, headers: PackedStringArray, body: PackedByteArray) -> void: + if result != HTTPRequest.RESULT_SUCCESS: + failed.emit() + return + + # Save the downloaded zip + var zip_file: FileAccess = FileAccess.open(TEMP_FILE_NAME, FileAccess.WRITE) + zip_file.store_buffer(body) + zip_file.close() + + OS.move_to_trash(ProjectSettings.globalize_path("res://addons/phantom_camera")) + + var zip_reader: ZIPReader = ZIPReader.new() + zip_reader.open(TEMP_FILE_NAME) + var files: PackedStringArray = zip_reader.get_files() + + var base_path = files[1] + # Remove archive folder + files.remove_at(0) + # Remove assets folder + files.remove_at(0) + + for path in files: + var new_file_path: String = path.replace(base_path, "") + if path.ends_with("/"): + DirAccess.make_dir_recursive_absolute("res://addons/%s" % new_file_path) + else: + var file: FileAccess = FileAccess.open("res://addons/%s" % new_file_path, FileAccess.WRITE) + file.store_buffer(zip_reader.read_file(path)) + + zip_reader.close() + DirAccess.remove_absolute(TEMP_FILE_NAME) + + updated.emit(next_version_release.tag_name.substr(1)) + + +func _on_notes_button_pressed() -> void: + OS.shell_open(next_version_release.html_url) + +#endregion + +#region Public Functions + +func show_updater_warning(next_version_number: Array, current_version_number: Array) -> void: + var current_version_number_0: int = current_version_number[0] as int + var current_version_number_1: int = current_version_number[1] as int + + var next_version_number_0: int = next_version_number[0] as int # Major release number in the new release + var next_version_number_1: int = next_version_number[1] as int # Minor release number in the new release + + if next_version_number_0 > current_version_number_0 or \ + next_version_number_1 > current_version_number_1: + _breaking_label.show() + _breaking_margin_container.show() + _breaking_options_button.show() + _download_button.hide() + + _download_dialogue = get_parent() + _download_dialogue.size = Vector2(_download_dialogue.size.x, _breaking_window_height) + +#endregion diff --git a/addons/phantom_camera/scripts/panel/updater/update_button.gd b/addons/phantom_camera/scripts/panel/updater/update_button.gd new file mode 100644 index 0000000..965e394 --- /dev/null +++ b/addons/phantom_camera/scripts/panel/updater/update_button.gd @@ -0,0 +1,175 @@ +####################################################################### +# Credit goes to the Dialogue Manager plugin for this script +# Check it out at: https://github.com/nathanhoad/godot_dialogue_manager +####################################################################### + +@tool +extends Button + +#region Constants + +const REMOTE_RELEASE_URL: StringName = "https://api.github.com/repos/ramokz/phantom-camera/releases" +const UPDATER_CONSTANTS := preload("res://addons/phantom_camera/scripts/panel/updater/updater_constants.gd") + +#endregion + + +#region @onready + +@onready var http_request: HTTPRequest = %HTTPRequest +@onready var download_dialog: AcceptDialog = %DownloadDialog +@onready var download_update_panel: Control = %DownloadUpdatePanel +@onready var needs_reload_dialog: AcceptDialog = %NeedsReloadDialog +@onready var update_failed_dialog: AcceptDialog = %UpdateFailedDialog + +#endregion + + +#region Variables + +# The main editor plugin +var editor_plugin: EditorPlugin + +var needs_reload: bool = false + +# A lambda that gets called just before refreshing the plugin. Return false to stop the reload. +var on_before_refresh: Callable = func(): return true + +#endregion + + +#region Private Functions + +func _ready() -> void: + hide() + + # Check for updates on GitHub Releases + check_for_update() + + pressed.connect(_on_update_button_pressed) + http_request.request_completed.connect(_request_request_completed) + download_update_panel.updated.connect(_on_download_update_panel_updated) + needs_reload_dialog.confirmed.connect(_on_needs_reload_dialog_confirmed) + + +func _request_request_completed(result: int, response_code: int, headers: PackedStringArray, body: PackedByteArray) -> void: + if result != HTTPRequest.RESULT_SUCCESS: return + + if not editor_plugin: return + var current_version: String = editor_plugin.get_version() + + # Work out the next version from the releases information on GitHub + var response: Array = JSON.parse_string(body.get_string_from_utf8()) + if typeof(response) != TYPE_ARRAY: return + + # GitHub releases are in order of creation, not order of version + var versions: Array = response.filter(func(release): + var version: String = release.tag_name.substr(1) + return version_to_number(version) > version_to_number(current_version) + ) + + if versions.size() > 0: + # Safeguard forks from being updated itself + if FileAccess.file_exists("res://dev_scenes/3d/dev_scene_3d.tscn") or \ + not ProjectSettings.get_setting(UPDATER_CONSTANTS.setting_updater_enabled): + + if not ProjectSettings.get_setting(UPDATER_CONSTANTS.setting_updater_notify_release): return + + print_rich(" +[color=#3AB99A] ********[/color] +[color=#3AB99A] ************[/color] +[color=#3AB99A]**************[/color] +[color=#3AB99A]****** *** *[/color] +[color=#3AB99A]****** ***[/color] +[color=#3AB99A]********** *****[/color] +[color=#3AB99A]******** ***********[/color] +[color=#3AB99A]******** *********** **[/color] +[color=#3AB99A]********* **************[/color] +[color=#3AB99A]********** *************[/color] +[color=#3AB99A]** ** ** ******* **[/color] +[font_size=18][b]New Phantom Camera version is available[/b][/font_size]") + + if FileAccess.file_exists("res://dev_scenes/3d/dev_scene_3d.tscn"): + print_rich("[font_size=14][color=#EAA15E][b]As you're using a fork of the project, you will need to update it manually[/b][/color][/font_size]") + + print_rich("[font_size=12]If you don't want to see this message, then it can be disabled inside:\n[code]Project Settings/Phantom Camera/Updater/Show New Release Info on Editor Launch in Output[/code]") + + return + + download_update_panel.next_version_release = versions[0] + download_update_panel.show_updater_warning( + versions[0].tag_name.substr(1).split("."), + current_version.split(".") + ) + _set_scale() + editor_plugin.panel_button.add_theme_color_override("font_color", Color("#3AB99A")) + editor_plugin.panel_button.icon = load("res://addons/phantom_camera/icons/phantom_camera_updater_panel_icon.svg") + editor_plugin.panel_button.add_theme_color_override("icon_normal_color", Color("#3AB99A")) + show() + + +func _on_update_button_pressed() -> void: + if needs_reload: + var will_refresh = on_before_refresh.call() + if will_refresh: + EditorInterface.restart_editor(true) + else: + _set_scale() + download_dialog.popup_centered() + + +func _set_scale() -> void: + var scale: float = EditorInterface.get_editor_scale() + download_dialog.min_size = Vector2(300, 250) * scale + + +func _on_download_dialog_close_requested() -> void: + download_dialog.hide() + + +func _on_download_update_panel_updated(updated_to_version: String) -> void: + download_dialog.hide() + + needs_reload_dialog.dialog_text = "Reload to finish update" + needs_reload_dialog.ok_button_text = "Reload" + needs_reload_dialog.cancel_button_text = "Cancel" + needs_reload_dialog.popup_centered() + + needs_reload = true + text = "Reload Project" + + +func _on_download_update_panel_failed() -> void: + download_dialog.hide() + update_failed_dialog.dialog_text = "Updated Failed" + update_failed_dialog.popup_centered() + + +func _on_needs_reload_dialog_confirmed() -> void: + EditorInterface.restart_editor(true) + + +func _on_timer_timeout() -> void: + if not needs_reload: + check_for_update() + +#endregion + + +#region Public Functions + +# Convert a version number to an actually comparable number +func version_to_number(version: String) -> int: + var bits = version.split(".") + var version_bit: int + var multiplier: int = 10000 + for i in bits.size(): + version_bit += bits[i].to_int() * multiplier / (10 ** (i)) + + return version_bit + + +func check_for_update() -> void: + http_request.request(REMOTE_RELEASE_URL) + +#endregion diff --git a/addons/phantom_camera/scripts/panel/updater/updater_constants.gd b/addons/phantom_camera/scripts/panel/updater/updater_constants.gd new file mode 100644 index 0000000..2cd69cb --- /dev/null +++ b/addons/phantom_camera/scripts/panel/updater/updater_constants.gd @@ -0,0 +1,9 @@ +extends RefCounted + +# Plugin Project Settings Sections +const setting_phantom_camera: StringName = "phantom_camera/" +const setting_updater_name: StringName = setting_phantom_camera + "updater/" + +# Updater Settings +const setting_updater_enabled: StringName = setting_updater_name + "enable_updater" +const setting_updater_notify_release: StringName = setting_updater_name + "show_new_release_info_on_editor_launch_in_output" diff --git a/addons/phantom_camera/scripts/panel/viewfinder/viewfinder.gd b/addons/phantom_camera/scripts/panel/viewfinder/viewfinder.gd new file mode 100644 index 0000000..c183876 --- /dev/null +++ b/addons/phantom_camera/scripts/panel/viewfinder/viewfinder.gd @@ -0,0 +1,469 @@ +@tool +extends Control + +#region Constants + +const _constants = preload("res://addons/phantom_camera/scripts/phantom_camera/phantom_camera_constants.gd") + +# TODO - Should be in a central location +const _camera_2d_icon: CompressedTexture2D = preload("res://addons/phantom_camera/icons/viewfinder/Camera2DIcon.svg") +const _camera_3d_icon: CompressedTexture2D = preload("res://addons/phantom_camera/icons/viewfinder/Camera3DIcon.svg") +const _pcam_host_icon: CompressedTexture2D = preload("res://addons/phantom_camera/icons/phantom_camera_host.svg") +const _pcam_2D_icon: CompressedTexture2D = preload("res://addons/phantom_camera/icons/phantom_camera_2d.svg") +const _pcam_3D_icon: CompressedTexture2D = preload("res://addons/phantom_camera/icons/phantom_camera_3d.svg") + +const _overlay_color_alpha: float = 0.3 + +#endregion + +#region @onready + +@onready var dead_zone_center_hbox: VBoxContainer = %DeadZoneCenterHBoxContainer +@onready var dead_zone_center_center_panel: Panel = %DeadZoneCenterCenterPanel +@onready var dead_zone_left_center_panel: Panel = %DeadZoneLeftCenterPanel +@onready var dead_zone_right_center_panel: Panel = %DeadZoneRightCenterPanel +@onready var target_point: Panel = %TargetPoint + +@onready var aspect_ratio_container: AspectRatioContainer = %AspectRatioContainer +@onready var camera_viewport_panel: Panel = aspect_ratio_container.get_child(0) +@onready var _framed_viewfinder: Control = %FramedViewfinder +@onready var _dead_zone_h_box_container: Control = %DeadZoneHBoxContainer +@onready var sub_viewport: SubViewport = %SubViewport + +@onready var _empty_state_control: Control = %EmptyStateControl +@onready var _empty_state_icon: Control = %EmptyStateIcon +@onready var _empty_state_text: RichTextLabel = %EmptyStateText +@onready var _add_node_button: Button = %AddNodeButton +@onready var _add_node_button_text: RichTextLabel = %AddNodeTypeText + +@onready var _priority_override_button: Button = %PriorityOverrideButton +@onready var _priority_override_name_label: Label = %PriorityOverrideNameLabel + +@onready var _camera_2d: Camera2D = %Camera2D + +#endregion + +#region Private Variables +var _no_open_scene_icon: CompressedTexture2D = preload("res://addons/phantom_camera/icons/viewfinder/SceneTypesIcon.svg") +var _no_open_scene_string: String = "[b]2D[/b] or [b]3D[/b] scene open" + +var _selected_camera: Node +var _active_pcam: Node + +var _is_2d: bool + +var root_node: Node + +#endregion + +#region Public variables + +var pcam_host_group: Array[PhantomCameraHost] + +var is_scene: bool + +var viewfinder_visible: bool + +var min_horizontal: float +var max_horizontal: float +var min_vertical: float +var max_vertical: float + +var pcam_host: PhantomCameraHost + +#endregion + + +#region Private Functions + +func _ready() -> void: + if not Engine.is_editor_hint(): + set_process(true) + camera_viewport_panel.self_modulate.a = 0 + + root_node = get_tree().current_scene + + if root_node is Node2D || root_node is Node3D: + %SubViewportContainer.set_visible(false) + if root_node is Node2D: + _is_2d = true + else: + _is_2d = false + + _set_viewfinder(root_node, false) + + if Engine.is_editor_hint(): + # BUG - Both signals below are called whenever a noe is selected in the scenetree + # Should only be triggered whenever a node is added or removed. + get_tree().node_added.connect(_node_added_or_removed) + get_tree().node_removed.connect(_node_added_or_removed) + else: + _empty_state_control.set_visible(false) + + _priority_override_button.set_visible(false) + + # Triggered when viewport size is changed in Project Settings + ProjectSettings.settings_changed.connect(_settings_changed) + + +func _exit_tree() -> void: + if Engine.is_editor_hint(): + if get_tree().node_added.is_connected(_node_added_or_removed): + get_tree().node_added.disconnect(_node_added_or_removed) + get_tree().node_removed.disconnect(_node_added_or_removed) + + if aspect_ratio_container.resized.is_connected(_resized): + aspect_ratio_container.resized.disconnect(_resized) + + if _add_node_button.pressed.is_connected(visibility_check): + _add_node_button.pressed.disconnect(visibility_check) + + if is_instance_valid(_active_pcam): + if _active_pcam.dead_zone_changed.is_connected(_on_dead_zone_changed): + _active_pcam.dead_zone_changed.disconnect(_on_dead_zone_changed) + + if _priority_override_button.pressed.is_connected(_select_override_pcam): + _priority_override_button.pressed.disconnect(_select_override_pcam) + + +func _process(_delta: float) -> void: + if Engine.is_editor_hint() and not viewfinder_visible: return + if not is_instance_valid(_active_pcam): return + + var unprojected_position_clamped: Vector2 = Vector2( + clamp(_active_pcam.viewport_position.x, min_horizontal, max_horizontal), + clamp(_active_pcam.viewport_position.y, min_vertical, max_vertical) + ) + + if not Engine.is_editor_hint(): + target_point.position = camera_viewport_panel.size * unprojected_position_clamped - target_point.size / 2 + + if _is_2d: + if not is_instance_valid(pcam_host): return + if not is_instance_valid(pcam_host.camera_2d): return + + var window_size_height: float = ProjectSettings.get_setting("display/window/size/viewport_height") + sub_viewport.size_2d_override = sub_viewport.size * (window_size_height / sub_viewport.size.y) + + _camera_2d.global_transform = pcam_host.camera_2d.global_transform + _camera_2d.offset = pcam_host.camera_2d.offset + _camera_2d.zoom = pcam_host.camera_2d.zoom + _camera_2d.ignore_rotation = pcam_host.camera_2d.ignore_rotation + _camera_2d.anchor_mode = pcam_host.camera_2d.anchor_mode + _camera_2d.limit_left = pcam_host.camera_2d.limit_left + _camera_2d.limit_top = pcam_host.camera_2d.limit_top + _camera_2d.limit_right = pcam_host.camera_2d.limit_right + _camera_2d.limit_bottom = pcam_host.camera_2d.limit_bottom + + +func _settings_changed() -> void: + var viewport_width: float = ProjectSettings.get_setting("display/window/size/viewport_width") + var viewport_height: float = ProjectSettings.get_setting("display/window/size/viewport_height") + var ratio: float = viewport_width / viewport_height + aspect_ratio_container.set_ratio(ratio) + camera_viewport_panel.size.x = viewport_width / (viewport_height / sub_viewport.size.y) + # TODO - Add resizer for Framed Viewfinder + + +func _node_added_or_removed(_node: Node) -> void: + visibility_check() + + +func visibility_check() -> void: + if not viewfinder_visible: return + + var phantom_camera_host: PhantomCameraHost + var has_camera: bool = false + if not get_tree().root.get_node(_constants.PCAM_MANAGER_NODE_NAME).get_phantom_camera_hosts().is_empty(): + has_camera = true + phantom_camera_host = get_tree().root.get_node(_constants.PCAM_MANAGER_NODE_NAME).get_phantom_camera_hosts()[0] + + var root: Node = EditorInterface.get_edited_scene_root() + + if root is Node2D: + var camera_2d: Camera2D + + if has_camera: + camera_2d = phantom_camera_host.camera_2d + else: + camera_2d = _get_camera_2d() + + _is_2d = true + is_scene = true + _add_node_button.set_visible(true) + _check_camera(root, camera_2d, true) + elif root is Node3D: + var camera_3d: Camera3D + + if has_camera: + camera_3d = phantom_camera_host.camera_3d + else: + camera_3d = root.get_viewport().get_camera_3d() + + _is_2d = false + is_scene = true + _add_node_button.set_visible(true) + _check_camera(root, camera_3d, false) + else: + is_scene = false +# Is not a 2D or 3D scene + _set_empty_viewfinder_state(_no_open_scene_string, _no_open_scene_icon) + _add_node_button.set_visible(false) + + if not _priority_override_button.pressed.is_connected(_select_override_pcam): + _priority_override_button.pressed.connect(_select_override_pcam) + + +func _get_camera_2d() -> Camera2D: + var camerasGroupName = "__cameras_%d" % EditorInterface.get_edited_scene_root().get_viewport().get_viewport_rid().get_id() + var cameras = get_tree().get_nodes_in_group(camerasGroupName) + + for camera in cameras: + if camera is Camera2D and camera.is_current: + return camera + return null + + +func _check_camera(root: Node, camera: Node, is_2D: bool) -> void: + var camera_string: String + var pcam_string: String + var color: Color + var color_alpha: Color + var camera_icon: CompressedTexture2D + var pcam_icon: CompressedTexture2D + + if is_2D: + camera_string = _constants.CAMERA_2D_NODE_NAME + pcam_string = _constants.PCAM_2D_NODE_NAME + color = _constants.COLOR_2D + camera_icon = _camera_2d_icon + pcam_icon = _pcam_2D_icon + else: + camera_string = _constants.CAMERA_3D_NODE_NAME + pcam_string = _constants.PCAM_3D_NODE_NAME + color = _constants.COLOR_3D + camera_icon = _camera_3d_icon + pcam_icon = _pcam_3D_icon + + if camera: +# Has Camera + if camera.get_children().size() > 0: + for cam_child in camera.get_children(): + if cam_child is PhantomCameraHost: + pcam_host = cam_child + + if pcam_host: + if get_tree().root.get_node(_constants.PCAM_MANAGER_NODE_NAME).get_phantom_camera_2ds() or \ + get_tree().root.get_node(_constants.PCAM_MANAGER_NODE_NAME).get_phantom_camera_3ds(): + # Pcam exists in tree + _set_viewfinder(root, true) +# if pcam_host.get_active_pcam().get_get_follow_mode(): +# _on_dead_zone_changed() + + _set_viewfinder_state() + + %NoSupportMsg.set_visible(false) + + else: +# No PCam in scene + _update_button(pcam_string, pcam_icon, color) + _set_empty_viewfinder_state(pcam_string, pcam_icon) + else: +# No PCamHost in scene + _update_button(_constants.PCAM_HOST_NODE_NAME, _pcam_host_icon, _constants.PCAM_HOST_COLOR) + _set_empty_viewfinder_state(_constants.PCAM_HOST_NODE_NAME, _pcam_host_icon) + else: +# No PCamHost in scene + _update_button(_constants.PCAM_HOST_NODE_NAME, _pcam_host_icon, _constants.PCAM_HOST_COLOR) + _set_empty_viewfinder_state(_constants.PCAM_HOST_NODE_NAME, _pcam_host_icon) + else: +# No Camera + _update_button(camera_string, camera_icon, color) + _set_empty_viewfinder_state(camera_string, camera_icon) + + +func _update_button(text: String, icon: CompressedTexture2D, color: Color) -> void: + _add_node_button_text.set_text("[center]Add [img=32]" + icon.resource_path + "[/img] [b]"+ text + "[/b][/center]"); + var button_theme_hover: StyleBoxFlat = _add_node_button.get_theme_stylebox("hover") + button_theme_hover.border_color = color + _add_node_button.add_theme_stylebox_override("hover", button_theme_hover) + + +func _set_viewfinder_state() -> void: + _empty_state_control.set_visible(false) + + _framed_viewfinder.set_visible(true) + + if is_instance_valid(_active_pcam): + if _active_pcam.get_follow_mode() == _active_pcam.FollowMode.FRAMED: + _dead_zone_h_box_container.set_visible(true) + target_point.set_visible(true) + else: + _dead_zone_h_box_container.set_visible(false) + target_point.set_visible(false) + + +func _set_empty_viewfinder_state(text: String, icon: CompressedTexture2D) -> void: + _framed_viewfinder.set_visible(false) + target_point.set_visible(false) + + _empty_state_control.set_visible(true) + _empty_state_icon.set_texture(icon) + if icon == _no_open_scene_icon: + _empty_state_text.set_text("[center]No " + text + "[/center]") + else: + _empty_state_text.set_text("[center]No [b]" + text + "[/b] in scene[/center]") + + if _add_node_button.pressed.is_connected(_add_node): + _add_node_button.pressed.disconnect(_add_node) + + _add_node_button.pressed.connect(_add_node.bind(text)) + + +func _add_node(node_type: String) -> void: + var root: Node = EditorInterface.get_edited_scene_root() + + match node_type: + _no_open_scene_string: + pass + _constants.CAMERA_2D_NODE_NAME: + var camera: Camera2D = Camera2D.new() + _instantiate_node(root, camera, _constants.CAMERA_2D_NODE_NAME) + _constants.CAMERA_3D_NODE_NAME: + var camera: Camera3D = Camera3D.new() + _instantiate_node(root, camera, _constants.CAMERA_3D_NODE_NAME) + _constants.PCAM_HOST_NODE_NAME: + var pcam_host: PhantomCameraHost = PhantomCameraHost.new() + pcam_host.set_name(_constants.PCAM_HOST_NODE_NAME) + if _is_2d: +# get_tree().get_edited_scene_root().get_viewport().get_camera_2d().add_child(pcam_host) + _get_camera_2d().add_child(pcam_host) + pcam_host.set_owner(get_tree().get_edited_scene_root()) + else: +# var pcam_3D := get_tree().get_edited_scene_root().get_viewport().get_camera_3d() + get_tree().get_edited_scene_root().get_viewport().get_camera_3d().add_child(pcam_host) + pcam_host.set_owner(get_tree().get_edited_scene_root()) + _constants.PCAM_2D_NODE_NAME: + var pcam_2D: PhantomCamera2D = PhantomCamera2D.new() + _instantiate_node(root, pcam_2D, _constants.PCAM_2D_NODE_NAME) + _constants.PCAM_3D_NODE_NAME: + var pcam_3D: PhantomCamera3D = PhantomCamera3D.new() + _instantiate_node(root, pcam_3D, _constants.PCAM_3D_NODE_NAME) + + +func _instantiate_node(root: Node, node: Node, name: String) -> void: + node.set_name(name) + root.add_child(node) + node.set_owner(get_tree().get_edited_scene_root()) + + +func _set_viewfinder(root: Node, editor: bool) -> void: + pcam_host_group = get_tree().root.get_node(_constants.PCAM_MANAGER_NODE_NAME).get_phantom_camera_hosts() + if pcam_host_group.size() != 0: + if pcam_host_group.size() == 1: + var pcam_host: PhantomCameraHost = pcam_host_group[0] + if _is_2d: + _selected_camera = pcam_host.camera_2d + _active_pcam = pcam_host.get_active_pcam() as PhantomCamera2D + if editor: + var camera_2d_rid: RID = _selected_camera.get_canvas() + sub_viewport.disable_3d = true + _camera_2d.zoom = pcam_host.camera_2d.zoom + _camera_2d.offset = pcam_host.camera_2d.offset + _camera_2d.ignore_rotation = pcam_host.camera_2d.ignore_rotation + + sub_viewport.world_2d = pcam_host.camera_2d.get_world_2d() + sub_viewport.render_target_update_mode = SubViewport.UPDATE_ALWAYS + sub_viewport.render_target_clear_mode = SubViewport.CLEAR_MODE_ALWAYS + sub_viewport.size_2d_override_stretch = true + else: + _selected_camera = pcam_host.camera_3d + _active_pcam = pcam_host.get_active_pcam() as PhantomCamera3D + if editor: + var camera_3d_rid: RID = _selected_camera.get_camera_rid() + sub_viewport.disable_3d = false + sub_viewport.world_3d = pcam_host.camera_3d.get_world_3d() + RenderingServer.viewport_attach_camera(sub_viewport.get_viewport_rid(), camera_3d_rid) + + if _selected_camera.keep_aspect == Camera3D.KeepAspect.KEEP_HEIGHT: + aspect_ratio_container.set_stretch_mode(AspectRatioContainer.STRETCH_HEIGHT_CONTROLS_WIDTH) + else: + aspect_ratio_container.set_stretch_mode(AspectRatioContainer.STRETCH_WIDTH_CONTROLS_HEIGHT) + + _on_dead_zone_changed() + set_process(true) + + if not pcam_host.update_editor_viewfinder.is_connected(_on_update_editor_viewfinder): + pcam_host.update_editor_viewfinder.connect(_on_update_editor_viewfinder.bind(pcam_host)) + + if not aspect_ratio_container.resized.is_connected(_resized): + aspect_ratio_container.resized.connect(_resized) + + if not _active_pcam.dead_zone_changed.is_connected(_on_dead_zone_changed): + _active_pcam.dead_zone_changed.connect(_on_dead_zone_changed) + + +func _resized() -> void: + _on_dead_zone_changed() + + +func _on_dead_zone_changed() -> void: + if not is_instance_valid(_active_pcam): return + if not _active_pcam.follow_mode == _active_pcam.FollowMode.FRAMED: return + + # Waits until the camera_viewport_panel has been resized when launching the game + if camera_viewport_panel.size.x == 0: + await camera_viewport_panel.resized + + #print(_active_pcam.get_pcam_host_owner()) + if is_instance_valid(_active_pcam.get_pcam_host_owner()): + pcam_host = _active_pcam.get_pcam_host_owner() + if not _active_pcam == pcam_host.get_active_pcam(): + _active_pcam == pcam_host.get_active_pcam() + print("Active pcam in viewfinder: ", _active_pcam) + + var dead_zone_width: float = _active_pcam.dead_zone_width * camera_viewport_panel.size.x + var dead_zone_height: float = _active_pcam.dead_zone_height * camera_viewport_panel.size.y + dead_zone_center_hbox.set_custom_minimum_size(Vector2(dead_zone_width, 0)) + dead_zone_center_center_panel.set_custom_minimum_size(Vector2(0, dead_zone_height)) + dead_zone_left_center_panel.set_custom_minimum_size(Vector2(0, dead_zone_height)) + dead_zone_right_center_panel.set_custom_minimum_size(Vector2(0, dead_zone_height)) + + min_horizontal = 0.5 - _active_pcam.dead_zone_width / 2 + max_horizontal = 0.5 + _active_pcam.dead_zone_width / 2 + min_vertical = 0.5 - _active_pcam.dead_zone_height / 2 + max_vertical = 0.5 + _active_pcam.dead_zone_height / 2 + + +#################### +## Priority Override +#################### +func _on_update_editor_viewfinder(pcam_host: PhantomCameraHost) -> void: + if pcam_host.get_active_pcam().priority_override: + _active_pcam = pcam_host.get_active_pcam() + _priority_override_button.set_visible(true) + _priority_override_name_label.set_text(_active_pcam.name) + _priority_override_button.set_tooltip_text(_active_pcam.name) + else: + _priority_override_button.set_visible(false) + +func _select_override_pcam() -> void: + EditorInterface.get_selection().clear() + EditorInterface.get_selection().add_node(_active_pcam) + +#endregion + + +#region Public Functions + +func update_dead_zone() -> void: + _set_viewfinder(root_node, true) + + +func scene_changed(scene_root: Node) -> void: + if not scene_root is Node2D and not scene_root is Node3D: + is_scene = false + _set_empty_viewfinder_state(_no_open_scene_string, _no_open_scene_icon) + _add_node_button.set_visible(false) + +#endregion diff --git a/addons/phantom_camera/scripts/phantom_camera/phantom_camera_2d.gd b/addons/phantom_camera/scripts/phantom_camera/phantom_camera_2d.gd new file mode 100644 index 0000000..85081b0 --- /dev/null +++ b/addons/phantom_camera/scripts/phantom_camera/phantom_camera_2d.gd @@ -0,0 +1,1304 @@ +@tool +@icon("res://addons/phantom_camera/icons/phantom_camera_2d.svg") +class_name PhantomCamera2D +extends Node2D + +## Controls a scene's [Camera2D] and applies logic to it. +## +## The scene's [param Camera2D] will follow the position of the +## [param PhantomCamera2D] with the highest priority. +## Each instance can have different positional and rotational logic applied +## to them. + +#region Constants + +const _constants := preload("res://addons/phantom_camera/scripts/phantom_camera/phantom_camera_constants.gd") + +#endregion + + +#region Signals + +## Emitted when the [param PhantomCamera2D] becomes active. +signal became_active +## Emitted when the [param PhantomCamera2D] becomes inactive. +signal became_inactive + +## Emitted when [member follow_target] changes. +signal follow_target_changed + +## Emitted when dead zones changes.[br] +## [b]Note:[/b] Only applicable in [param Framed] [enum FollowMode]. +signal dead_zone_changed + +## Emitted when the [param Camera2D] starts to tween to another [param PhantomCamera2D]. +signal tween_started +## Emitted when the [param Camera2D] is to tweening towards another [param PhantomCamera2D]. +signal is_tweening +## Emitted when the tween is interrupted due to another [param PhantomCamera2D] +## becoming active. The argument is the [param PhantomCamera2D] that interrupted +## the tween. +signal tween_interrupted(pcam_2d: PhantomCamera2D) +## Emitted when the [param Camera2D] completes its tween to the +## [param PhantomCamera2D]. +signal tween_completed + +#endregion + +#region Enums + +## Determines the positional logic for a given [param PCamPhantomCamera2D] +## [br][br] +## The different modes have different functionalities and purposes, so choosing +## the correct one depends on what each [param PhantomCamera2D] is meant to do. +enum FollowMode { + NONE = 0, ## Default - No follow logic is applied. + GLUED = 1, ## Sticks to its target. + SIMPLE = 2, ## Follows its target with an optional offset. + GROUP = 3, ## Follows multiple targets with option to dynamically reframe itself. + PATH = 4, ## Follows a target while being positionally confined to a [Path2D] node. + FRAMED = 5, ## Applies a dead zone on the frame and only follows its target when it tries to leave it. +} + +## Determines how often an inactive [param PhantomCamera2D] should update +## its positional and rotational values. This is meant to reduce the amount +## of calculations inactive [param PhantomCamera2D] are doing when idling to +## improve performance. +enum InactiveUpdateMode { + ALWAYS, ## Always updates the [param PhantomCamera2D], even when it's inactive. + NEVER, ## Never updates the [param PhantomCamera2D] when it's inactive. Reduces the amount of computational resources when inactive. +# EXPONENTIALLY, +} + +#endregion + +#region Variables + +var _is_active: bool = false + +## The [PhantomCameraHost] that owns this [param PhantomCamera2D]. +var pcam_host_owner: PhantomCameraHost = null: + set = set_pcam_host_owner, + get = get_pcam_host_owner + +## To quickly preview a [param PhantomCamera2D] without adjusting its +## [member priority], this property allows the selected PCam to ignore the +## Priority system altogether and forcefully become the active one. It's +## partly designed to work within the Viewfinder, and will be disabled when +## running a build export of the game. +@export var priority_override: bool = false: + set(value): + if Engine.is_editor_hint() and _has_valid_pcam_owner(): + if value == true: + priority_override = value + get_pcam_host_owner().pcam_priority_override(self) + else: + priority_override = value + get_pcam_host_owner().pcam_priority_updated(self) + get_pcam_host_owner().pcam_priority_override_disabled() + get: + return priority_override + +## It defines which [param PhantomCamera2D] a scene's [param Camera2D] should +## be corresponding with and be attached to. This is decided by the PCam with +## the highest [param Priority]. +## [br][br] +## Changing [param Priority] will send an event to the scene's +## [PhantomCameraHost], which will then determine whether if the +## [param Priority] value is greater than or equal to the currently +## highest [param PhantomCamera2D]'s in the scene. The [param PhantomCamera2D] +## with the highest value will then reattach the [param Camera2D] accordingly. +@export var priority: int = 0: + set = set_priority, + get = get_priority + +## Determines the positional logic for a given [param PhantomCamera2D]. +## The different modes have different functionalities and purposes, so +## choosing the correct one depends on what each [param PhantomCamera2D] +## is meant to do. +@export var follow_mode: FollowMode = FollowMode.NONE: + set(value): + follow_mode = value + + if value == FollowMode.FRAMED: + if _follow_framed_initial_set and follow_target: + _follow_framed_initial_set = false + dead_zone_changed.connect(_on_dead_zone_changed) + else: + if dead_zone_changed.is_connected(_on_dead_zone_changed): + dead_zone_changed.disconnect(_on_dead_zone_changed) + + if follow_mode == FollowMode.NONE: + _should_follow = false + elif follow_mode == FollowMode.GROUP and follow_targets or follow_target: + _should_follow = true + notify_property_list_changed() + get: + return follow_mode + + +## Determines which target should be followed. +## The [param Camera2D] will follow the position of the Follow Target +## based on the [member follow_mode] type and its parameters. +@export var follow_target: Node2D = null: + set = set_follow_target, + get = get_follow_target +var _should_follow: bool = false +var _follow_framed_offset: Vector2 = Vector2.ZERO +var _follow_target_physics_based: bool = false +var _physics_interpolation_enabled = false # NOTE - Enable for Godot 4.3 and when PhysicsInterpolationMode bug is resolved + +### Defines the targets that the [param PhantomCamera2D] should be following. +@export var follow_targets: Array[Node2D] = []: + set = set_follow_targets, + get = get_follow_targets +var _has_multiple_follow_targets: bool = false + + +## Determines the [Path2D] the [param PhantomCamera2D] +## should be bound to. +## The [param PhantomCamera2D] will follow the position of the +## [member follow_target] while sticking to the closest point on this path. +@export var follow_path: Path2D = null: + set = set_follow_path, + get = get_follow_path +var _has_follow_path: bool = false + +## Applies a zoom level to the [param PhantomCamera2D], which effectively +## overrides the [param zoom] property of the [param Camera2D] node. +@export var zoom: Vector2 = Vector2.ONE: + set = set_zoom, + get = get_zoom + +## If enabled, will snap the [param Camera2D] to whole pixels as it moves. +## [br][br] +## This should be particularly useful in pixel art projects, +## where assets should always be aligned to the monitor's pixels to avoid +## unintended stretching. +@export var snap_to_pixel: bool = false: + set = set_snap_to_pixel, + get = get_snap_to_pixel + +## Enables a preview of what the [PhantomCamera2D] will see in the +## scene. It works identically to how a [param Camera2D] shows which area +## will be visible during runtime. Likewise, this too will be affected by the +## [member zoom] property and the [param viewport_width] and +## [param Viewport Height] defined in the [param Project Settings]. +@export var frame_preview: bool = true: + set(value): + frame_preview = value + queue_redraw() + get: + return frame_preview + +## Defines how the [param PhantomCamera2D] transition between one another. +## Changing the tween values for a given [param PhantomCamera2D] +## determines how transitioning to that instance will look like. +## This is a resource type that can be either used for one +## [param PhantomCamera] or reused across multiple - both 2D and 3D. +## By default, all [param PhantomCameras] will use a [param linear] +## transition, [param easeInOut] ease with a [param 1s] duration. +@export var tween_resource: PhantomCameraTween = PhantomCameraTween.new(): + set = set_tween_resource, + get = get_tween_resource +var _has_tweened: bool = false + +## If enabled, the moment a [param PhantomCamera3D] is instantiated into +## a scene, and has the highest priority, it will perform its tween transition. +## This is most obvious if a [param PhantomCamera3D] has a long duration and +## is attached to a playable character that can be moved the moment a scene +## is loaded. Disabling the [param tween_on_load] property will +## disable this behaviour and skip the tweening entirely when instantiated. +@export var tween_on_load: bool = true: + set = set_tween_on_load, + get = get_tween_on_load + +## Determines how often an inactive [param PhantomCamera2D] should update +## its positional and rotational values. This is meant to reduce the amount +## of calculations inactive [param PhantomCamera2Ds] are doing when idling +## to improve performance. +@export var inactive_update_mode: InactiveUpdateMode = InactiveUpdateMode.ALWAYS + +@export_group("Follow Parameters") +## Offsets the [member follow_target] position. +@export var follow_offset: Vector2 = Vector2.ZERO: + set = set_follow_offset, + get = get_follow_offset + +## Applies a damping effect on the [param Camera2D]'s movement. +## Leading to heavier / slower camera movement as the targeted node moves around. +## This is useful to avoid sharp and rapid camera movement. +@export var follow_damping: bool = false: + set = set_follow_damping, + get = get_follow_damping + +## Defines the damping amount. The ideal range should be somewhere between 0-1.[br][br] +## The damping amount can be specified in the individual axis.[br][br] +## [b]Lower value[/b] = faster / sharper camera movement.[br] +## [b]Higher value[/b] = slower / heavier camera movement. +@export var follow_damping_value: Vector2 = Vector2(0.1, 0.1): + set = set_follow_damping_value, + get = get_follow_damping_value +var _velocity_ref: Vector2 = Vector2.ZERO # Stores and applies the velocity of the movement + +@export_subgroup("Follow Group") +## Enables the [param PhantomCamera2D] to dynamically zoom in and out based on +## the targets' distances between each other. +## Once enabled, the [param Camera2D] will stay as zoomed in as possible, +## limited by the [member auto_zoom_max] and start zooming out as the targets +## move further apart, limited by the [member auto_zoom_min]. +## Note: Enabling this property hides and disables the [member zoom] property +## as this effectively overrides that value. +@export var auto_zoom: bool = false: + set = set_auto_zoom, + get = get_auto_zoom +## Sets the param minimum zoom amount, in other words how far away the +## [param Camera2D] can be from scene.[br][br] +## This only works when [member auto_zoom] is enabled. +@export var auto_zoom_min: float = 1: + set = set_auto_zoom_min, + get = get_auto_zoom_min + +## Sets the maximum zoom amount, in other words how close the [param Camera2D] +## can move towards the scene.[br][br] +## This only works when [member auto_zoom] is enabled. +@export var auto_zoom_max: float = 5: + set = set_auto_zoom_max, + get = get_auto_zoom_max +## Determines how close to the edges the targets are allowed to be. +## This is useful to avoid targets being cut off at the edges of the screen. +## [br][br] + +## The Vector4 parameter order goes: [param Left] - [param Top] - [param Right] +## - [param Bottom]. +@export var auto_zoom_margin: Vector4 = Vector4.ZERO: + set = set_auto_zoom_margin, + get = get_auto_zoom_margin + +@export_subgroup("Dead Zones") +## Defines the horizontal dead zone area. While the target is within it, the +## [param PhantomCamera2D] will not move in the horizontal axis. +## If the targeted node leaves the horizontal bounds, the +## [param PhantomCamera2D] will follow the target horizontally to keep +## it within bounds. +@export_range(0, 1) var dead_zone_width: float = 0: + set(value): + dead_zone_width = value + dead_zone_changed.emit() + get: + return dead_zone_width + +## Defines the vertical dead zone area. While the target is within it, the +## [param PhantomCamera2D] will not move in the vertical axis. +## If the targeted node leaves the vertical bounds, the +## [param PhantomCamera2D] will follow the target horizontally to keep +## it within bounds. +@export_range(0, 1) var dead_zone_height: float = 0: + set(value): + dead_zone_height = value + dead_zone_changed.emit() + get: + return dead_zone_height + +## Enables the [param dead zones] to be visible when running the game from the editor. +## [br] +## [param dead zones] will never be visible in build exports. +@export var show_viewfinder_in_play: bool = false + +## Defines the position of the [member follow_target] within the viewport.[br] +## This is only used for when [member follow_mode] is set to [param Framed]. +var viewport_position: Vector2 +var _follow_framed_initial_set: bool = false + +@export_group("Limit") + +## Shows the [param Camera2D]'s built-in limit border.[br] +## The [param PhantomCamera2D] and [param Camera2D] can move around anywhere within it. +@export var draw_limits: bool = false: + set(value): + _draw_limits = value + if Engine.is_editor_hint(): + _draw_camera_2d_limit() + get: + return _draw_limits + +static var _draw_limits: bool + +var _limit_sides: Vector4i +var _limit_sides_default: Vector4i = Vector4i(-10000000, -10000000, 10000000, 10000000) +## Defines the left side of the [param Camera2D] limit. +## The camera will not be able to move past this point. +@export var limit_left: int = -10000000: + set = set_limit_left, + get = get_limit_left +## Defines the top side of the [param Camera2D] limit. +## The camera will not be able to move past this point. +@export var limit_top: int = -10000000: + set = set_limit_top, + get = get_limit_top +## Defines the right side of the [param Camera2D] limit. +## The camera will not be able to move past this point. +@export var limit_right: int = 10000000: + set = set_limit_right, + get = get_limit_right +## Defines the bottom side of the [param Camera2D] limit. +## The camera will not be able to move past this point. +@export var limit_bottom: int = 10000000: + set = set_limit_bottom, + get = get_limit_bottom + +## Allows for setting either a [TileMap] or [CollisionShape2D] node to +## automatically apply a limit size instead of manually adjusting the Left, +## Top, Right and Left properties.[br][br] +## [b]TileMap[/b][br] +## The Limit will update after the [TileSet] of the [TileMap] has changed.[br] +## [b]Note:[/b] The limit size will only update after closing the TileMap editor +## bottom panel. +## [br][br] +## [b]CollisionShape2D[/b][br] +## The limit will update in realtime as the Shape2D changes its size. +## Note: For performance reasons, resizing the [Shape2D] during runtime will not change the Limits sides. +@export_node_path("TileMap", "CollisionShape2D") var limit_target = NodePath(""): + set = set_limit_target, + get = get_limit_target +var _limit_node: Node2D +## Applies an offset to the [TileMap] Limit or [Shape2D] Limit. +## The values goes from [param Left], [param Top], [param Right] +## and [param Bottom]. +@export var limit_margin: Vector4i: + set = set_limit_margin, + get = get_limit_margin +#@export var limit_smoothed: bool = false: # TODO - Needs proper support + #set = set_limit_smoothing, + #get = get_limit_smoothing +var _limit_inactive_pcam: bool + +#endregion + +# NOTE - Temp solution until Godot has better plugin autoload recognition out-of-the-box. +var _phantom_camera_manager: Node + + +func _validate_property(property: Dictionary) -> void: + ################ + ## Follow Target + ################ + if property.name == "follow_target": + if follow_mode == FollowMode.NONE or \ + follow_mode == FollowMode.GROUP: + property.usage = PROPERTY_USAGE_NO_EDITOR + + elif property.name == "follow_path" and \ + follow_mode != FollowMode.PATH: + property.usage = PROPERTY_USAGE_NO_EDITOR + + + #################### + ## Follow Parameters + #################### + + + if follow_mode == FollowMode.NONE: + match property.name: + "follow_offset", \ + "follow_damping", \ + "follow_damping_value": + property.usage = PROPERTY_USAGE_NO_EDITOR + + if property.name == "follow_offset": + if follow_mode == FollowMode.PATH or \ + follow_mode == FollowMode.GLUED: + property.usage = PROPERTY_USAGE_NO_EDITOR + + if property.name == "follow_damping_value" and not follow_damping: + property.usage = PROPERTY_USAGE_NO_EDITOR + + ############### + ## Follow Group + ############### + if follow_mode != FollowMode.GROUP: + match property.name: + "follow_targets", \ + "auto_zoom": + property.usage = PROPERTY_USAGE_NO_EDITOR + + if not auto_zoom: + match property.name: + "auto_zoom_min", \ + "auto_zoom_max", \ + "auto_zoom_margin": + property.usage = PROPERTY_USAGE_NO_EDITOR + + ################ + ## Follow Framed + ################ + if not follow_mode == FollowMode.FRAMED: + match property.name: + "dead_zone_width", \ + "dead_zone_height", \ + "show_viewfinder_in_play": + property.usage = PROPERTY_USAGE_NO_EDITOR + + ####### + ## Zoom + ####### + if property.name == "zoom" and auto_zoom: + property.usage = PROPERTY_USAGE_NO_EDITOR + + ######## + ## Limit + ######## + if is_instance_valid(_limit_node): + match property.name: + "limit_left", \ + "limit_top", \ + "limit_right", \ + "limit_bottom": + property.usage = PROPERTY_USAGE_NO_EDITOR + + if property.name == "limit_margin" and not _limit_node: + property.usage = PROPERTY_USAGE_NO_EDITOR + + ################ + ## Frame Preview + ################ + if property.name == "frame_preview" and _is_active: + property.usage |= PROPERTY_USAGE_READ_ONLY + + notify_property_list_changed() + +#region Private Functions + +func _enter_tree() -> void: + _phantom_camera_manager = get_tree().root.get_node(_constants.PCAM_MANAGER_NODE_NAME) + _phantom_camera_manager.pcam_added(self) + update_limit_all_sides() + + if not _phantom_camera_manager.get_phantom_camera_hosts().is_empty(): + set_pcam_host_owner(_phantom_camera_manager.get_phantom_camera_hosts()[0]) + + +func _exit_tree() -> void: + _phantom_camera_manager.pcam_removed(self) + + if _has_valid_pcam_owner(): + get_pcam_host_owner().pcam_removed_from_scene(self) + + +func _process(delta: float) -> void: + if _follow_target_physics_based: return + _process_logic(delta) + + +func _physics_process(delta: float): + if not _follow_target_physics_based: return + _process_logic(delta) + + +func _process_logic(delta: float) -> void: + if not _is_active: + match inactive_update_mode: + InactiveUpdateMode.NEVER: return + InactiveUpdateMode.ALWAYS: + # Only triggers if limit isn't default + if _limit_inactive_pcam: + global_position = _set_limit_clamp_position(global_position) +# InactiveUpdateMode.EXPONENTIALLY: +# TODO - Trigger positional updates less frequently as more Pcams gets added + _limit_checker() + if _should_follow: + _follow(delta) + + +func _limit_checker() -> void: + ## TODO - Needs to see if this can be triggerd only from CollisionShape2D Transform changes + if Engine.is_editor_hint(): + if draw_limits: + update_limit_all_sides() + + +func _follow(delta: float) -> void: + var follow_position: Vector2 + + match follow_mode: + FollowMode.GLUED: + if follow_target: + follow_position = follow_target.global_position + FollowMode.SIMPLE: + if follow_target: + follow_position = _target_position_with_offset() + FollowMode.GROUP: + if follow_targets.size() == 1: + follow_position = follow_targets[0].global_position + elif _has_multiple_follow_targets and follow_targets.size() > 1: + var rect: Rect2 = Rect2(follow_targets[0].global_position, Vector2.ZERO) + for node in follow_targets: + rect = rect.expand(node.global_position) + if auto_zoom: + rect = rect.grow_individual( + auto_zoom_margin.x, + auto_zoom_margin.y, + auto_zoom_margin.z, + auto_zoom_margin.w + ) +# else: +# rect = rect.grow_individual(-80, 0, 0, 0) + if auto_zoom: + var screen_size: Vector2 = get_viewport_rect().size + if rect.size.x > rect.size.y * screen_size.aspect(): + zoom = clamp(screen_size.x / rect.size.x, auto_zoom_min, auto_zoom_max) * Vector2.ONE + else: + zoom = clamp(screen_size.y / rect.size.y, auto_zoom_min, auto_zoom_max) * Vector2.ONE + follow_position = rect.get_center() + FollowMode.PATH: + if follow_target and follow_path: + var path_position: Vector2 = follow_path.global_position + + follow_position = \ + follow_path.curve.get_closest_point( + _target_position_with_offset() - path_position + ) + path_position + + FollowMode.FRAMED: + if follow_target: + if not Engine.is_editor_hint(): + viewport_position = (get_follow_target().get_global_transform_with_canvas().get_origin() + follow_offset) / get_viewport_rect().size + + if _get_framed_side_offset() != Vector2.ZERO: + var glo_pos: Vector2 + var target_position: Vector2 = _target_position_with_offset() + _follow_framed_offset + + if dead_zone_width == 0 || dead_zone_height == 0: + if dead_zone_width == 0 && dead_zone_height != 0: + follow_position = _target_position_with_offset() + elif dead_zone_width != 0 && dead_zone_height == 0: + glo_pos = _target_position_with_offset() + glo_pos.x += target_position.x - global_position.x + follow_position = glo_pos + else: + follow_position = _target_position_with_offset() + else: + follow_position = target_position + else: + _follow_framed_offset = global_position - _target_position_with_offset() + return + else: + follow_position = _target_position_with_offset() + + _interpolate_position(follow_position, delta) + + +func _set_velocity(index: int, value: float): + _velocity_ref[index] = value + + +func _interpolate_position(target_position: Vector2, delta: float) -> void: + if _limit_inactive_pcam and not _has_tweened: + target_position = _set_limit_clamp_position(target_position) + + if follow_damping: + for index in 2: + global_position[index] = \ + _smooth_damp( + target_position[index], + global_position[index], + index, + _velocity_ref[index], + _set_velocity, + follow_damping_value[index], + delta + ) + else: + global_position = target_position + + +func _smooth_damp(target_axis: float, self_axis: float, index: int, current_velocity: float, set_velocity: Callable, damping_time: float, delta: float) -> float: + damping_time = maxf(0.0001, damping_time) + var omega: float = 2 / damping_time + var x: float = omega * delta + var exponential: float = 1 / (1 + x + 0.48 * x * x + 0.235 * x * x * x) + var diff: float = self_axis - target_axis + var _target_axis: float = target_axis + + var max_change: float = INF * damping_time + diff = clampf(diff, -max_change, max_change) + target_axis = self_axis - diff + + var temp: float = (current_velocity + omega * diff) * delta + set_velocity.call(index, (current_velocity - omega * temp) * exponential) + var output: float = target_axis + (diff + temp) * exponential + + ## To prevent overshooting + if (_target_axis - self_axis > 0.0) == (output > _target_axis): + output = _target_axis + set_velocity.call(index, (output - _target_axis) / delta) + + return output + + +func _set_limit_clamp_position(value: Vector2) -> Vector2: + var camera_frame_rect_size: Vector2 = _camera_frame_rect().size + value.x = clampf(value.x, _limit_sides.x + camera_frame_rect_size.x / 2, _limit_sides.z - camera_frame_rect_size.x / 2) + value.y = clampf(value.y, _limit_sides.y + camera_frame_rect_size.y / 2, _limit_sides.w - camera_frame_rect_size.y / 2) + return value + + +func _draw(): + if not Engine.is_editor_hint(): return + + if frame_preview and not _is_active: + var screen_size_width: int = ProjectSettings.get_setting("display/window/size/viewport_width") + var screen_size_height: int = ProjectSettings.get_setting("display/window/size/viewport_height") + var screen_size_zoom: Vector2 = Vector2(screen_size_width / get_zoom().x, screen_size_height / get_zoom().y) + draw_rect(_camera_frame_rect(), Color("3ab99a"), false, 2) + + +func _camera_frame_rect() -> Rect2: + var screen_size_width: int = ProjectSettings.get_setting("display/window/size/viewport_width") + var screen_size_height: int = ProjectSettings.get_setting("display/window/size/viewport_height") + var screen_size_zoom: Vector2 = Vector2(screen_size_width / get_zoom().x, screen_size_height / get_zoom().y) + + return Rect2(-screen_size_zoom / 2, screen_size_zoom) + + +func _on_tile_map_changed() -> void: + update_limit_all_sides() + + +func _target_position_with_offset() -> Vector2: + return follow_target.global_position + follow_offset + + +func _on_dead_zone_changed() -> void: + set_global_position( _target_position_with_offset() ) + + +func _has_valid_pcam_owner() -> bool: + if not is_instance_valid(get_pcam_host_owner()): return false + if not is_instance_valid(get_pcam_host_owner().camera_2d): return false + return true + + +func _get_framed_side_offset() -> Vector2: + var frame_out_bounds: Vector2 + + if viewport_position.x < 0.5 - dead_zone_width / 2: + # Is outside left edge + frame_out_bounds.x = -1 + + if viewport_position.y < 0.5 - dead_zone_height / 2: + # Is outside top edge + frame_out_bounds.y = 1 + + if viewport_position.x > 0.5 + dead_zone_width / 2: + # Is outside right edge + frame_out_bounds.x = 1 + + if viewport_position.y > 0.5001 + dead_zone_height / 2: # 0.501 to resolve an issue where the bottom vertical Dead Zone never becoming 0 when the Dead Zone Vertical parameter is set to 0 + # Is outside bottom edge + frame_out_bounds.y = -1 + + return frame_out_bounds + + +func _draw_camera_2d_limit() -> void: + if _has_valid_pcam_owner(): + get_pcam_host_owner().camera_2d.set_limit_drawing_enabled(draw_limits) + + +func _check_limit_is_not_default() -> void: + if _limit_sides == _limit_sides_default: + _limit_inactive_pcam = false + else: + _limit_inactive_pcam = true + + +func _set_camera_2d_limit(side: int, limit: int) -> void: + if not _has_valid_pcam_owner(): return + if not _is_active: return + get_pcam_host_owner().camera_2d.set_limit(side, limit) + +#endregion + + +#region Public Functions + +## Updates the limit sides based what has been set to define it +## This should be automatic, but can be called manully if need be. +func update_limit_all_sides() -> void: + var limit_rect: Rect2 + + if not is_instance_valid(_limit_node): + _limit_sides.x = limit_left + _limit_sides.y = limit_top + _limit_sides.z = limit_right + _limit_sides.w = limit_bottom + elif _limit_node is TileMap: + var tile_map: TileMap = _limit_node as TileMap + var tile_map_size: Vector2 = Vector2(tile_map.get_used_rect().size) * Vector2(tile_map.tile_set.tile_size) * tile_map.get_scale() + var tile_map_position: Vector2 = tile_map.global_position + Vector2(tile_map.get_used_rect().position) * Vector2(tile_map.tile_set.tile_size) * tile_map.get_scale() + + ## Calculates the Rect2 based on the Tile Map position and size + margin + limit_rect = Rect2( + tile_map_position + Vector2(limit_margin.x, limit_margin.y), + tile_map_size - Vector2(limit_margin.x, limit_margin.y) - Vector2(limit_margin.z, limit_margin.w) + ) + + # Left + _limit_sides.x = roundi(limit_rect.position.x) + # Top + _limit_sides.y = roundi(limit_rect.position.y) + # Right + _limit_sides.z = roundi(limit_rect.position.x + limit_rect.size.x) + # Bottom + _limit_sides.w = roundi(limit_rect.position.y + limit_rect.size.y) + elif _limit_node is CollisionShape2D: + var collision_shape_2d = _limit_node as CollisionShape2D + + if not collision_shape_2d.get_shape(): return + + var shape_2d: Shape2D = collision_shape_2d.get_shape() + var shape_2d_size: Vector2 = shape_2d.get_rect().size + var shape_2d_position: Vector2 = collision_shape_2d.global_position + Vector2(shape_2d.get_rect().position) + + ## Calculates the Rect2 based on the Tile Map position and size + limit_rect = Rect2(shape_2d_position, shape_2d_size) + + ## Calculates the Rect2 based on the Tile Map position and size + margin + limit_rect = Rect2( + limit_rect.position + Vector2(limit_margin.x, limit_margin.y), + limit_rect.size - Vector2(limit_margin.x, limit_margin.y) - Vector2(limit_margin.z, limit_margin.w) + ) + + # Left + _limit_sides.x = roundi(limit_rect.position.x) + # Top + _limit_sides.y = roundi(limit_rect.position.y) + # Right + _limit_sides.z = roundi(limit_rect.position.x + limit_rect.size.x) + # Bottom + _limit_sides.w = roundi(limit_rect.position.y + limit_rect.size.y) + + _check_limit_is_not_default() + + if _is_active and _has_valid_pcam_owner(): + _set_camera_2d_limit(SIDE_LEFT, _limit_sides.x) + _set_camera_2d_limit(SIDE_TOP, _limit_sides.y) + _set_camera_2d_limit(SIDE_RIGHT, _limit_sides.z) + _set_camera_2d_limit(SIDE_BOTTOM, _limit_sides.w) + + +func reset_limit() -> void: + if not _has_valid_pcam_owner(): return + if not _is_active: return + get_pcam_host_owner().camera_2d.set_limit(SIDE_LEFT, _limit_sides_default.x) + get_pcam_host_owner().camera_2d.set_limit(SIDE_TOP, _limit_sides_default.y) + get_pcam_host_owner().camera_2d.set_limit(SIDE_RIGHT, _limit_sides_default.z) + get_pcam_host_owner().camera_2d.set_limit(SIDE_BOTTOM, _limit_sides_default.w) + + +## Assigns the value of the [param has_tweened] property. +## [b][color=yellow]Important:[/color][/b] This value can only be changed +## from the [PhantomCameraHost] script. +func set_has_tweened(caller: Node, value: bool) -> void: + if is_instance_of(caller, PhantomCameraHost): + _has_tweened = value + else: + printerr("Can only be called PhantomCameraHost class") +## Returns the current [param has_tweened] value. +func get_has_tweened() -> bool: + return _has_tweened + +#endregion + + +#region Setter & Getter Functions + +## Assigns the [param PhantomCamera2D] to a new [PhantomCameraHost].[br] +## [b][color=yellow]Important:[/color][/b] This is currently restricted to +## plugin internals. Proper support will be added in issue #26. +func set_pcam_host_owner(value: PhantomCameraHost) -> void: + pcam_host_owner = value + if is_instance_valid(pcam_host_owner): + pcam_host_owner.pcam_added_to_scene(self) + #if value.size() == 1: +# else: +# for camera_host in camera_host_group: +# print("Multiple PhantomCameraBases in scene") +# print(pcam_host_group) +# print(pcam.get_tree().get_nodes_in_group(PhantomCameraGroupNames.PHANTOM_CAMERA_HOST_GROUP_NAME)) +# multiple_pcam_host_group.append(camera_host) +# return nullfunc assign_pcam_host() -> void: +## Gets the current [PhantomCameraHost] this [param PhantomCamera2D] is +## assigned to. +func get_pcam_host_owner() -> PhantomCameraHost: + return pcam_host_owner + + +## Assigns new Zoom value. +func set_zoom(value: Vector2) -> void: + zoom = value + queue_redraw() + +## Gets current Zoom value. +func get_zoom() -> Vector2: + return zoom + + +## Assigns new Priority value. +func set_priority(value: int) -> void: + priority = abs(value) + if _has_valid_pcam_owner(): + get_pcam_host_owner().pcam_priority_updated(self) + +## Gets current Priority value. +func get_priority() -> int: + return priority + + +## Assigns a new PhantomCameraTween resource to the PhantomCamera2D +func set_tween_resource(value: PhantomCameraTween) -> void: + tween_resource = value + +## Gets the PhantomCameraTween resource assigned to the PhantomCamera2D +## Returns null if there's nothing assigned to it. +func get_tween_resource() -> PhantomCameraTween: + return tween_resource + + +## Assigns a new [param Tween Duration] to the [member tween_resource] value.[br] +## The duration value is in seconds. +func set_tween_duration(value: float) -> void: + tween_resource.duration = value + +## Gets the current [param Tween Duration] value inside the +## [member tween_resource].[br] +## The duration value is in seconds. +func get_tween_duration() -> float: + return tween_resource.duration + + +## Assigns a new [param Tween Transition] value inside the +## [member tween_resource]. +func set_tween_transition(value: int) -> void: + tween_resource.transition = value + +## Gets the current [param Tween Transition] value inside the +## [member tween_resource]. +func get_tween_transition() -> int: + return tween_resource.transition + + +## Assigns a new [param Tween Ease] value inside the [member tween_resource]. +func set_tween_ease(value: int) -> void: + tween_resource.ease = value + +## Gets the current [param Tween Ease] value inside the [member tween_resource]. +func get_tween_ease() -> int: + return tween_resource.ease + + +## Sets the [param PhantomCamera2D] active state.[br] +## [b][color=yellow]Important:[/color][/b] This value can only be changed +## from the [PhantomCameraHost] script. +func set_is_active(node, value) -> void: + if node is PhantomCameraHost: + _is_active = value + else: + printerr("PCams can only be set from the PhantomCameraHost") + +## Gets current active state of the [param PhantomCamera2D]. +## If it returns true, it means the [param PhantomCamera2D] is what the +## [param Camera2D] is currently following. +func is_active() -> bool: + return _is_active + + +## Enables or disables the [member tween_on_load]. +func set_tween_on_load(value: bool) -> void: + tween_on_load = value + +## Gets the current [member tween_on_load] value. +func get_tween_on_load() -> bool: + return tween_on_load + + +## Gets the current follow mode as an enum int based on [enum FollowMode].[br] +## [b]Note:[/b] Setting [enum FollowMode] purposely not added. +## A separate PCam should be used instead. +func get_follow_mode() -> int: + return follow_mode + + +## Assigns a new [Node2D] as the [member follow_target]. +func set_follow_target(value: Node2D) -> void: + if follow_target == value: return + follow_target = value + _follow_target_physics_based = false + if is_instance_valid(value): + _should_follow = true + _check_physics_body(value) + else: + _should_follow = false + follow_target_changed.emit() + notify_property_list_changed() + +## Erases the current [member follow_target]. +func erase_follow_target() -> void: + if follow_target == null: return + _should_follow = false + follow_target = null + _follow_target_physics_based = false + follow_target_changed.emit() + +## Gets the current [member follow_target]. +func get_follow_target() -> Node2D: + return follow_target + + +## Assigns a new [Path2D] to the [member follow_path]. +func set_follow_path(value: Path2D) -> void: + follow_path = value + +## Erases the current [Path2D] from the [member follow_path] property. +func erase_follow_path() -> void: + follow_path = null + +## Gets the current [Path2D] from the [member follow_path]. +func get_follow_path() -> Path2D: + return follow_path + + +## Assigns a new [param follow_targets] array value. +func set_follow_targets(value: Array[Node2D]) -> void: + if follow_targets == value: return + + follow_targets = value + + if follow_targets.is_empty(): + _should_follow = false + _has_multiple_follow_targets = false + return + + _follow_target_physics_based = false + var valid_instances: int = 0 + for target in follow_targets: + if is_instance_valid(target): + _should_follow = true + valid_instances += 1 + + _check_physics_body(target) + + if valid_instances > 1: + _has_multiple_follow_targets = true + +## Appends a single [Node2D] to [member follow_targets]. +func append_follow_targets(value: Node2D) -> void: + if not is_instance_valid(value): + printerr(value, " is not a valid Node2D instance.") + return + if not follow_targets.has(value): + follow_targets.append(value) + _should_follow = true + _has_multiple_follow_targets = true + _check_physics_body(value) + else: + printerr(value, " is already part of Follow Group") + +## Adds an Array of type [Node2D] to [member follow_targets]. +func append_follow_targets_array(value: Array[Node2D]) -> void: + for target in value: + if not is_instance_valid(target): continue + if not follow_targets.has(target): + follow_targets.append(target) + _should_follow = true + _check_physics_body(target) + if follow_targets.size() > 1: + _has_multiple_follow_targets = true + else: + printerr(value, " is already part of Follow Group") + +## Removes a [Node2D] from [member follow_targets] array. +func erase_follow_targets(value: Node2D) -> void: + follow_targets.erase(value) + _follow_target_physics_based = false + for target in follow_targets: + _check_physics_body(target) + if follow_targets.size() < 2: + _has_multiple_follow_targets = false + if follow_targets.size() < 1: + _should_follow = false + +## Gets all [Node2D] from [member follow_targets] array. +func get_follow_targets() -> Array[Node2D]: + return follow_targets + + +func _check_physics_body(target: Node2D) -> void: + if target is PhysicsBody2D: + ## NOTE - Feature Toggle + if Engine.get_version_info().major == 4 and \ + Engine.get_version_info().minor < 3: + if ProjectSettings.get_setting("phantom_camera/tips/show_jitter_tips"): + print_rich("Following a [b]PhysicsBody2D[/b] node will likely result in jitter - on lower physics ticks in particular.") + print_rich("Once Godot 4.3 is released, will strongly recommend upgrading to that as it has built-in support for 2D Physics Interpolation.") + print_rich("Until then, try following the guide on the [url=https://phantom-camera.dev/support/faq#i-m-seeing-jitter-what-can-i-do]documentation site[/url] for better results.") + print_rich("This tip can be disabled from within [code]Project Settings / Phantom Camera / Tips / Show Jitter Tips[/code]") + return + ## NOTE - Only supported in Godot 4.3 or above + elif not ProjectSettings.get_setting("physics/common/physics_interpolation") and ProjectSettings.get_setting("phantom_camera/tips/show_jitter_tips"): + printerr("Physics Interpolation is disabled in the Project Settings, recommend enabling it to smooth out physics-based camera movement") + print_rich("This tip can be disabled from within [code]Project Settings / Phantom Camera / Tips / Show Jitter Tips[/code]") + _follow_target_physics_based = true + + +## Assigns a new Vector2 for the Follow Target Offset property. +func set_follow_offset(value: Vector2) -> void: + follow_offset = value + +## Gets the current Vector2 for the Follow Target Offset property. +func get_follow_offset() -> Vector2: + return follow_offset + + +## Enables or disables Follow Damping. +func set_follow_damping(value: bool) -> void: + follow_damping = value + notify_property_list_changed() + +## Gets the current Follow Damping property. +func get_follow_damping() -> bool: + return follow_damping + + +## Assigns new Damping value. +func set_follow_damping_value(value: Vector2) -> void: + ## TODO - Should be using @export_range once minimum version support is Godot 4.3 + if value.x < 0: value.x = 0 + elif value.y < 0: value.y = 0 + follow_damping_value = value + +## Gets the current Follow Damping value. +func get_follow_damping_value() -> Vector2: + return follow_damping_value + + +## Enables or disables [member snap_to_pixel]. +func set_snap_to_pixel(value: bool) -> void: + snap_to_pixel = value + +## Gets the current [member snap_to_pixel] value. +func get_snap_to_pixel() -> bool: + return snap_to_pixel + + +## Returns true if the [param PhantomCamera2D] has more than one member in the +## [follow_targets] array. +func get_has_multiple_follow_targets() -> bool: + return _has_multiple_follow_targets + + +## Enables or disables Auto zoom when using Group Follow. +func set_auto_zoom(value: bool) -> void: + auto_zoom = value + notify_property_list_changed() + +## Gets Auto Zoom state. +func get_auto_zoom() -> bool: + return auto_zoom + + +## Assigns new Min Auto Zoom value. +func set_auto_zoom_min(value: float) -> void: + auto_zoom_min = value + +## Gets Min Auto Zoom value. +func get_auto_zoom_min() -> float: + return auto_zoom_min + + +## Assigns new Max Auto Zoom value. +func set_auto_zoom_max(value: float) -> void: + auto_zoom_max = value + +## Gets Max Auto Zoom value. +func get_auto_zoom_max() -> float: + return auto_zoom_max + + +## Assigns new Zoom Auto Margin value. +func set_auto_zoom_margin(value: Vector4) -> void: + auto_zoom_margin = value + +## Gets Zoom Auto Margin value. +func get_auto_zoom_margin() -> Vector4: + return auto_zoom_margin + + +## Sets a limit side based on the side parameter.[br] +## It's recommended to pass the [enum Side] enum as the sid parameter. +func set_limit(side: int, value: int) -> void: + match side: + SIDE_LEFT: limit_left = value + SIDE_TOP: limit_top = value + SIDE_RIGHT: limit_right = value + SIDE_BOTTOM: limit_bottom = value + _: printerr("Not a valid Side.") + +## Gets the limit side +func get_limit(value: int) -> int: + match value: + SIDE_LEFT: return limit_left + SIDE_TOP: return limit_top + SIDE_RIGHT: return limit_right + SIDE_BOTTOM: return limit_bottom + _: + printerr("Not a valid Side.") + return -1 + + +## Assign a the Camera2D Left Limit Side value. +func set_limit_left(value: int) -> void: + _limit_target_exist_error() + limit_left = value + update_limit_all_sides() + +## Gets the Camera2D Left Limit value. +func get_limit_left() -> int: + return limit_left + + +## Assign a the Camera2D Top Limit Side value. +func set_limit_top(value: int) -> void: + _limit_target_exist_error() + limit_top = value + update_limit_all_sides() + +## Gets the Camera2D Top Limit value. +func get_limit_top() -> int: + return limit_top + + +## Assign a the Camera2D Right Limit Side value. +func set_limit_right(value: int) -> void: + _limit_target_exist_error() + limit_right = value + update_limit_all_sides() + +## Gets the Camera2D Right Limit value. +func get_limit_right() -> int: + return limit_right + + +## Assign a the Camera2D Bottom Limit Side value. +func set_limit_bottom(value: int) -> void: + _limit_target_exist_error() + limit_bottom = value + update_limit_all_sides() + +## Gets the Camera2D Bottom Limit value. +func get_limit_bottom() -> int: + return limit_bottom + + +func _limit_target_exist_error() -> void: + if not limit_target.is_empty(): + printerr("Unable to set Limit Side due to Limit Target ", _limit_node.name, " being assigned") + + +# Sets a [memeber limit_target] node. +func set_limit_target(value: NodePath) -> void: + limit_target = value + + # Waits for PCam2d's _ready() before trying to validate limit_node_path + if not is_node_ready(): await ready + + # Removes signal from existing TileMap node + if is_instance_valid(get_node_or_null(value)): + var prev_limit_node: Node2D = _limit_node + var new_limit_node: Node2D = get_node(value) + + if prev_limit_node is TileMap: + if prev_limit_node.changed.is_connected(_on_tile_map_changed): + prev_limit_node.changed.disconnect(_on_tile_map_changed) + + if new_limit_node is TileMap: + if not new_limit_node.changed.is_connected(_on_tile_map_changed): + new_limit_node.changed.connect(_on_tile_map_changed) + elif new_limit_node is CollisionShape2D: + var col_shape: CollisionShape2D = get_node(value) + + if col_shape.shape == null: + printerr("No Shape2D in: ", col_shape.name) + reset_limit() + limit_target = null + return + else: + printerr("Limit Target is not a TileMap or CollisionShape2D node") + return + + elif value == NodePath(""): + reset_limit() + limit_target = null + else: + printerr("Limit Target cannot be found") + return + + _limit_node = get_node_or_null(value) + + notify_property_list_changed() + update_limit_all_sides() + +## Get [member limit_target] node. +func get_limit_target() -> NodePath: + if not limit_target: # TODO - Fixes an spam error if if limit_taret is empty + return NodePath("") + else: + return limit_target + + +## Set Tile Map Limit Margin. +func set_limit_margin(value: Vector4i) -> void: + limit_margin = value + update_limit_all_sides() +## Get Tile Map Limit Margin. +func get_limit_margin() -> Vector4i: + return limit_margin + + +### Enables or disables the Limit Smoothing beaviour. +#func set_limit_smoothing(value: bool) -> void: + #limit_smoothed = value + #if is_active() and _has_valid_pcam_owner(): + #get_pcam_host_owner().camera_2d.reset_smoothing() +### Returns the Limit Smoothing beaviour. +#func get_limit_smoothing() -> bool: + #return limit_smoothed + + +## Sets [member inactive_update_mode] property. +func set_inactive_update_mode(value: int) -> void: + inactive_update_mode = value + +## Gets [enum InactiveUpdateMode] value. +func get_inactive_update_mode() -> int: + return inactive_update_mode + + +func set_follow_target_physics_based(value: bool, caller: Node) -> void: + if is_instance_of(caller, PhantomCameraHost): + _follow_target_physics_based = value + else: + printerr("set_follow_target_physics_based() is for internal use only.") +func get_follow_target_physics_based() -> bool: + return _follow_target_physics_based + + +func get_class() -> String: + return "PhantomCamera2D" + + +func is_class(value) -> bool: + return value == "PhantomCamera2D" + +#endregion diff --git a/addons/phantom_camera/scripts/phantom_camera/phantom_camera_3d.gd b/addons/phantom_camera/scripts/phantom_camera/phantom_camera_3d.gd new file mode 100644 index 0000000..2342157 --- /dev/null +++ b/addons/phantom_camera/scripts/phantom_camera/phantom_camera_3d.gd @@ -0,0 +1,1562 @@ +@tool +@icon("res://addons/phantom_camera/icons/phantom_camera_3d.svg") +class_name PhantomCamera3D +extends Node3D + +## Controls a scene's [Camera3D] and applies logic to it. +## +## The scene's [param Camera3D] will follow the position of the +## [param PhantomCamera3D] with the highest priority. +## Each instance can have different positional and rotational logic applied +## to them. + +#region Constants + +const _constants = preload("res://addons/phantom_camera/scripts/phantom_camera/phantom_camera_constants.gd") + +#endregion + + +#region Signals + +## Emitted when the [param PhantomCamera3D] becomes active. +signal became_active +## Emitted when the [param PhantomCamera3D] becomes inactive. +signal became_inactive + +## Emitted when [member follow_target] changes. +signal follow_target_changed + +## Emitted when [member look_at_target] changes. +signal look_at_target_changed + +## Emitted when dead zones changes. [br] +## [b]Note:[/b] Only applicable in [param Framed] [member FollowMode]. +signal dead_zone_changed + +## Emitted when the [param Camera3D] starts to tween to another +## [param PhantomCamera3D]. +signal tween_started +## Emitted when the [param Camera3D] is to tweening towards another +## [param PhantomCamera3D]. +signal is_tweening +## Emitted when the tween is interrupted due to another [param PhantomCamera3D] +## becoming active. The argument is the [param PhantomCamera3D] that +## interrupted the tween. +signal tween_interrupted(pcam_3d: PhantomCamera3D) +## Emitted when the [param Camera3D] completes its tween to the +## [param PhantomCamera3D]. +signal tween_completed + +#endregion + + +#region Enums + +## Determines the positional logic for a given [param PhantomCamera3D] +## [br][br] +## The different modes have different functionalities and purposes, so choosing +## the correct one depends on what each [param PhantomCamera3D] is meant to do. +enum FollowMode { + NONE = 0, ## Default - No follow logic is applied. + GLUED = 1, ## Sticks to its target. + SIMPLE = 2, ## Follows its target with an optional offset. + GROUP = 3, ## Follows multiple targets with option to dynamically reframe itself. + PATH = 4, ## Follows a target while being positionally confined to a [Path3D] node. + FRAMED = 5, ## Applies a dead zone on the frame and only follows its target when it tries to leave it. + THIRD_PERSON = 6, ## Applies a [SpringArm3D] node to the target's position and allows for rotating around it. +} + +## Determines the rotational logic for a given [param PhantomCamera3D].[br][br] +## The different modes has different functionalities and purposes, so +## choosing the correct mode depends on what each [param PhantomCamera3D] +## is meant to do. +enum LookAtMode { + NONE = 0, ## Default - No Look At logic is applied. + MIMIC = 1, ## Copies its target's rotational value. + SIMPLE = 2, ## Looks at its target in a straight line. + GROUP = 3, ## Looks at the centre of its targets. +} + +## Determines how often an inactive [param PhantomCamera3D] should update +## its positional and rotational values. This is meant to reduce the amount +## of calculations inactive [param PhantomCamera3D] are doing when idling +## to improve performance. +enum InactiveUpdateMode { + ALWAYS, ## Always updates the [param PhantomCamera3D], even when it's inactive. + NEVER, ## Never updates the [param PhantomCamera3D] when it's inactive. Reduces the amount of computational resources when inactive. +# EXPONENTIALLY, +} + +#endregion + + +#region Variables + +## The [PhantomCameraHost] that owns this [param PhantomCamera2D]. +var pcam_host_owner: PhantomCameraHost = null: + set = set_pcam_host_owner, + get = get_pcam_host_owner + +var _is_active: bool = false + +## To quickly preview a [param PhantomCamera3D] without adjusting its +## [member Priority], this property allows the selected [param PhantomCamera3D] +## to ignore the Priority system altogether and forcefully become the active +## one. It's partly designed to work within the [param viewfinder], and will be +## disabled when running a build export of the game. +@export var priority_override: bool = false: + set(value): + if Engine.is_editor_hint() and _has_valid_pcam_owner(): + if value == true: + priority_override = value + get_pcam_host_owner().pcam_priority_override(self) + else: + priority_override = value + get_pcam_host_owner().pcam_priority_updated(self) + get_pcam_host_owner().pcam_priority_override_disabled() + get: + return priority_override + +## It defines which [param PhantomCamera3D] a scene's [param Camera3D] should +## be corresponding with and be attached to. This is decided by the +## [param PhantomCamera3D] with the highest [param priority]. +## [br][br] +## Changing [param priority] will send an event to the scene's +## [PhantomCameraHost], which will then determine whether if the +## [param priority] value is greater than or equal to the currently +## highest [param PhantomCamera3D]'s in the scene. The +## [param PhantomCamera3D] with the highest value will then reattach the +## Camera accordingly. +@export var priority: int = 0: + set = set_priority, + get = get_priority + +## Determines the positional logic for a given [param PhantomCamera3D]. +## The different modes have different functionalities and purposes, so +## choosing the correct one depends on what each [param PhantomCamera3D] +## is meant to do. +@export var follow_mode: FollowMode = FollowMode.NONE: + set(value): + follow_mode = value + + if value == FollowMode.FRAMED: + if _follow_framed_initial_set and follow_target: + _follow_framed_initial_set = false + dead_zone_changed.connect(_on_dead_zone_changed) + else: + if dead_zone_changed.is_connected(_on_dead_zone_changed): + dead_zone_changed.disconnect(_on_dead_zone_changed) + + if follow_mode == FollowMode.NONE: + _should_follow = false + elif follow_mode == FollowMode.GROUP and follow_targets or follow_target: + _should_follow = true + + notify_property_list_changed() + get: + return follow_mode + + +## Determines which target should be followed. +## The [param Camera3D] will follow the position of the Follow Target based on +## the [member follow_mode] type and its parameters. +@export var follow_target: Node3D = null: + set = set_follow_target, + get = get_follow_target +var _should_follow: bool = false +var _follow_target_physics_based: bool = false +var _physics_interpolation_enabled = false ## TOOD - Should be anbled once toggling physics_interpolation_mode ON, when previously OFF, works in 3D + +## Defines the targets that the [param PhantomCamera3D] should be following. +@export var follow_targets: Array[Node3D] = []: + set = set_follow_targets, + get = get_follow_targets +var _has_multiple_follow_targets: bool = false + + +## Determines the [Path3D] node the [param PhantomCamera3D] +## should be bound to. +## The [param PhantomCamera3D] will follow the position of the +## [member follow_target] while sticking to the closest point on this path. +@export var follow_path: Path3D = null: + set = set_follow_path, + get = get_follow_path + + +## Determines the rotational logic for a given [param PhantomCamera3D]. +## The different modes has different functionalities and purposes, +## so choosing the correct mode depends on what each +## [param PhantomCamera3D] is meant to do. +@export var look_at_mode: LookAtMode = LookAtMode.NONE: + set(value): + look_at_mode = value + if look_at_target is Node3D: + _should_look_at = true + + if look_at_mode == LookAtMode.NONE: + _should_look_at = false + elif look_at_mode == LookAtMode.GROUP and look_at_targets or look_at_target: + _should_look_at = true + + notify_property_list_changed() + get: + return look_at_mode +var _should_look_at: bool = false +var _multiple_look_at_targets: bool = false + +## Determines which target should be looked at. +## The [param PhantomCamera3D] will update its rotational value as the +## target changes its position. +@export var look_at_target: Node3D = null: + set = set_look_at_target, + get = get_look_at_target + +## Defines the targets that the camera should looking at. +## It will be looking at the centre of all the assigned targets. +@export var look_at_targets: Array[Node3D] = []: + set = set_look_at_targets, + get = get_look_at_targets +var _valid_look_at_targets: Array[Node3D] = [] + +## Defines how [param ]PhantomCamera3Ds] transition between one another. +## Changing the tween values for a given [param PhantomCamera3D] +## determines how transitioning to that instance will look like. +## This is a resource type that can be either used for one +## [param PhantomCamera] or reused across multiple - both 2D and 3D. +## By default, all [param PhantomCameras] will use a [param linear] +## transition, [param easeInOut] ease with a [param 1s] duration. +@export var tween_resource: PhantomCameraTween = PhantomCameraTween.new(): + set = set_tween_resource, + get = get_tween_resource +var _has_tweened: bool = false + +## If enabled, the moment a [param PhantomCamera3D] is instantiated into +## a scene, and has the highest priority, it will perform its tween transition. +## This is most obvious if a [param PhantomCamera3D] has a long duration and +## is attached to a playable character that can be moved the moment a scene +## is loaded. Disabling the [param tween_on_load] property will +## disable this behaviour and skip the tweening entirely when instantiated. +@export var tween_on_load: bool = true: + set = set_tween_on_load, + get = get_tween_on_load + +## Determines how often an inactive [param PhantomCamera3D] should update +## its positional and rotational values. This is meant to reduce the amount +## of calculations inactive [param PhantomCamera3Ds] are doing when idling +## to improve performance. +@export var inactive_update_mode: InactiveUpdateMode = InactiveUpdateMode.ALWAYS: + set = set_inactive_update_mode, + get = get_inactive_update_mode + + +## A resource type that allows for overriding the [param Camera3D] node's +## properties. +@export var camera_3d_resource: Camera3DResource = Camera3DResource.new(): + set = set_camera_3d_resource, + get = get_camera_3d_resource + +@export_group("Follow Parameters") +## Offsets the [member follow_target] position. +@export var follow_offset: Vector3 = Vector3.ZERO: + set = set_follow_offset, + get = get_follow_offset + +## Applies a damping effect on the camera's movement. +## Leading to heavier / slower camera movement as the targeted node moves around. +## This is useful to avoid sharp and rapid camera movement. +@export var follow_damping: bool = false: + set = set_follow_damping, + get = get_follow_damping + +## Defines the damping amount. The ideal range should be somewhere between 0-1.[br][br] +## The damping amount can be specified in the individual axis.[br][br] +## [b]Lower value[/b] = faster / sharper camera movement.[br] +## [b]Higher value[/b] = slower / heavier camera movement. +@export var follow_damping_value: Vector3 = Vector3(0.1, 0.1, 0.1): + set = set_follow_damping_value, + get = get_follow_damping_value +var _follow_velocity_ref: Vector3 = Vector3.ZERO # Stores and applies the velocity of the movement + +## Sets a distance offset from the centre of the target's position. +## The distance is applied to the [param PhantomCamera3D]'s local z axis. +@export var follow_distance: float = 1: + set = set_follow_distance, + get = get_follow_distance + +## Enables the [param PhantomCamera3D] to automatically distance +## itself as the [param follow targets] move further apart.[br] +## It looks at the longest axis between the different targets and interpolates +## the distance length between the [member auto_follow_distance_min] and +## [member follow_group_distance] properties.[br][br] +## Note: Enabling this property hides and disables the [member follow_distance] +## property as this effectively overrides that property. +@export var auto_follow_distance: bool = false: + set = set_auto_follow_distance, + get = get_auto_follow_distance + +## Sets the minimum distance between the Camera and centre of [AABB]. +## [br][br] +## Note: This distance will only ever be reached when all the targets are in +## the exact same [param Vector3] coordinate, which will very unlikely +## happen, so adjust the value here accordingly. +@export var auto_follow_distance_min: float = 1: + set = set_auto_follow_distance_min, + get = get_auto_follow_distance_min + +## Sets the maximum distance between the Camera and centre of [AABB]. +@export var auto_follow_distance_max: float = 5: + set = set_auto_follow_distance_max, + get = get_auto_follow_distance_max + +## Determines how fast the [member auto_follow_distance] moves between the +## maximum and minimum distance. The higher the value, the sooner the +## maximum distance is reached.[br][br] +## This value should be based on the sizes of the [member auto_follow_distance_min] +## and [member auto_follow_distance_max].[br] +## E.g. if the value between the [member auto_follow_distance_min] and +## [member auto_follow_distance_max] is small, consider keeping the number low +## and vice versa. +@export var auto_follow_distance_divisor: float = 10: + set = set_auto_follow_distance_divisor, + get = get_auto_follow_distance_divisor + +@export_subgroup("Dead Zones") +## Defines the horizontal dead zone area. While the target is within it, the +## [param PhantomCamera3D] will not move in the horizontal axis. +## If the targeted node leaves the horizontal bounds, the +## [param PhantomCamera3D] will follow the target horizontally to keep +## it within bounds. +@export_range(0, 1) var dead_zone_width: float = 0: + set(value): + dead_zone_width = value + dead_zone_changed.emit() + get: + return dead_zone_width + +## Defines the vertical dead zone area. While the target is within it, the +## [param PhantomCamera3D] will not move in the vertical axis. +## If the targeted node leaves the vertical bounds, the +## [param PhantomCamera3D] will follow the target horizontally to keep +## it within bounds. +@export_range(0, 1) var dead_zone_height: float = 0: + set(value): + dead_zone_height = value + dead_zone_changed.emit() + get: + return dead_zone_height + +## Enables the dead zones to be visible when running the game from the editor. +## Dead zones will never be visible in build exports. +@export var show_viewfinder_in_play: bool = false + +## Defines the position of the [member follow_target] within the viewport.[br] +## This is only used for when [member follow_mode] is set to [param Framed]. +var viewport_position: Vector2 +var _follow_framed_initial_set: bool = false +var _follow_framed_offset: Vector3 + +@export_subgroup("Spring Arm") +var _follow_spring_arm: SpringArm3D + +## Defines the [member SpringArm3D.spring_length]. +@export var spring_length: float = 1: + set = set_spring_length, + get = get_spring_length + +## Defines the [member SpringArm3D.collision_mask] node's Collision Mask. +@export_flags_3d_physics var collision_mask: int = 1: + set = set_collision_mask, + get = get_collision_mask + +## Defines the [member SpringArm3D.shape] node's Shape3D. +@export var shape: Shape3D = null: + set = set_shape, + get = get_shape + +## Defines the [member SpringArm3D.margin] node's Margin. +@export var margin: float = 0.01: + set = set_margin, + get = get_margin + +@export_group("Look At Parameters") +## Offsets the target's [param Vector3] position that the +## [param PhantomCamera3D] is looking at. +@export var look_at_offset: Vector3 = Vector3.ZERO: + set = set_look_at_offset, + get = get_look_at_offset + +## Applies a damping effect on the camera's rotation. +## Leading to heavier / slower camera movement as the targeted node moves around. +## This is useful to avoid sharp and rapid camera rotation. +@export var look_at_damping: bool = false: + set = set_look_at_damping, + get = get_look_at_damping + +## Defines the Rotational damping amount. The ideal range is typicall somewhere between 0-1.[br][br] +## The damping amount can be specified in the individual axis.[br][br] +## [b]Lower value[/b] = faster / sharper camera rotation.[br] +## [b]Higher value[/b] = slower / heavier camera rotation. +@export_range(0.0, 1.0, 0.001, "or_greater") var look_at_damping_value: float = 0.25: + set = set_look_at_damping_value, + get = get_look_at_damping_value + +var _current_rotation: Vector3 + +#endregion + +# NOTE - Temp solution until Godot has better plugin autoload recognition out-of-the-box. +var _phantom_camera_manager: Node + + +#region Property Validator + +func _validate_property(property: Dictionary) -> void: + ################ + ## Follow Target + ################ + if property.name == "follow_target": + if follow_mode == FollowMode.NONE or \ + follow_mode == FollowMode.GROUP: + property.usage = PROPERTY_USAGE_NO_EDITOR + + if property.name == "follow_path" and \ + follow_mode != FollowMode.PATH: + property.usage = PROPERTY_USAGE_NO_EDITOR + + #################### + ## Follow Parameters + #################### + + if follow_mode == FollowMode.NONE: + match property.name: + "follow_offset", \ + "follow_damping", \ + "follow_damping_value": + property.usage = PROPERTY_USAGE_NO_EDITOR + + if property.name == "follow_offset": + if follow_mode == FollowMode.PATH or \ + follow_mode == FollowMode.GLUED: + property.usage = PROPERTY_USAGE_NO_EDITOR + + if property.name == "follow_damping_value" and not follow_damping: + property.usage = PROPERTY_USAGE_NO_EDITOR + + if property.name == "follow_distance": + if not follow_mode == FollowMode.FRAMED: + if not follow_mode == FollowMode.GROUP or \ + auto_follow_distance: \ + property.usage = PROPERTY_USAGE_NO_EDITOR + + ############### + ## Group Follow + ############### + if property.name == "follow_targets" and \ + not follow_mode == FollowMode.GROUP: + property.usage = PROPERTY_USAGE_NO_EDITOR + + if property.name == "auto_follow_distance" and \ + not follow_mode == FollowMode.GROUP: + property.usage = PROPERTY_USAGE_NO_EDITOR + + if not auto_follow_distance: + match property.name: + "auto_follow_distance_min", \ + "auto_follow_distance_max", \ + "auto_follow_distance_divisor": + property.usage = PROPERTY_USAGE_NO_EDITOR + + ############### + ## Framed Follow + ############### + if not follow_mode == FollowMode.FRAMED: + match property.name: + "dead_zone_width", \ + "dead_zone_height", \ + "show_viewfinder_in_play": + property.usage = PROPERTY_USAGE_NO_EDITOR + + ###################### + ## Third Person Follow + ###################### + if not follow_mode == FollowMode.THIRD_PERSON: + match property.name: + "spring_length", \ + "collision_mask", \ + "shape", \ + "margin": + property.usage = PROPERTY_USAGE_NO_EDITOR + + ########## + ## Look At + ########## + if look_at_mode == LookAtMode.NONE: + match property.name: + "look_at_target", \ + "look_at_offset" , \ + "look_at_damping", \ + "look_at_damping_value": + property.usage = PROPERTY_USAGE_NO_EDITOR + elif look_at_mode == LookAtMode.GROUP: + match property.name: + "look_at_target": + property.usage = PROPERTY_USAGE_NO_EDITOR + + if property.name == "look_at_target": + if look_at_mode == LookAtMode.NONE or \ + look_at_mode == LookAtMode.GROUP: + property.usage = PROPERTY_USAGE_NO_EDITOR + + if property.name == "look_at_targets" and \ + not look_at_mode == LookAtMode.GROUP: + property.usage = PROPERTY_USAGE_NO_EDITOR + + if property.name == "look_at_damping_value" and \ + not look_at_damping: + property.usage = PROPERTY_USAGE_NO_EDITOR + + notify_property_list_changed() +#endregion + +#region Private Functions + +func _enter_tree() -> void: + _phantom_camera_manager = get_tree().root.get_node(_constants.PCAM_MANAGER_NODE_NAME) + + _phantom_camera_manager.pcam_added(self) + + if not _phantom_camera_manager.get_phantom_camera_hosts().is_empty(): + set_pcam_host_owner(_phantom_camera_manager.get_phantom_camera_hosts()[0]) + + #if not get_parent() is SpringArm3D: + #if look_at_target: + #_look_at_target_node = look_at_target + #elif look_at_targets: + #_look_at_group_nodes.clear() + #for path in look_at_targets: + #if not path.is_empty() and path: + #_should_look_at = true + #_has_look_at_targets = true + #_look_at_group_nodes.append(path) + + +func _exit_tree() -> void: + _phantom_camera_manager.pcam_removed(self) + + if _has_valid_pcam_owner(): + get_pcam_host_owner().pcam_removed_from_scene(self) + + + +func _ready(): + if follow_mode == FollowMode.THIRD_PERSON: + if not Engine.is_editor_hint(): + if not is_instance_valid(_follow_spring_arm): + _follow_spring_arm = SpringArm3D.new() + _follow_spring_arm.top_level = true + _follow_spring_arm.rotation = global_rotation + _follow_spring_arm.position = _get_target_position_offset() if is_instance_valid(follow_target) else global_position + _follow_spring_arm.spring_length = spring_length + _follow_spring_arm.collision_mask = collision_mask + _follow_spring_arm.shape = shape + _follow_spring_arm.margin = margin + get_parent().add_child.call_deferred(_follow_spring_arm) + reparent.call_deferred(_follow_spring_arm) + if follow_mode == FollowMode.FRAMED: + if not Engine.is_editor_hint(): + _follow_framed_offset = global_position - _get_target_position_offset() + _current_rotation = global_rotation + + +func _process(delta: float) -> void: + if not _follow_target_physics_based: + _process_logic(delta) + + +func _physics_process(delta: float): + if _follow_target_physics_based: + _process_logic(delta) + + +func _process_logic(delta: float) -> void: + if not _is_active: + match inactive_update_mode: + InactiveUpdateMode.NEVER: return + # InactiveUpdateMode.EXPONENTIALLY: + # TODO - Trigger positional updates less frequently as more Pcams gets added + if _should_follow: + _follow(delta) + if _should_look_at: + _look_at() # TODO - Delta needs to be applied, pending Godot's 3D Physics Interpolation to be implemented + + +func _follow(delta: float) -> void: + var follow_position: Vector3 + + var follow_target_node: Node3D = self + + match follow_mode: + FollowMode.GLUED: + if follow_target: + follow_position = follow_target.global_position + FollowMode.SIMPLE: + if follow_target: + follow_position = _get_target_position_offset() + FollowMode.GROUP: + if follow_targets: + if follow_targets.size() == 1: + follow_position = \ + follow_targets[0].global_position + \ + follow_offset + \ + get_transform().basis.z * \ + Vector3(follow_distance, follow_distance, follow_distance) + + elif follow_targets.size() > 1: + var bounds: AABB = AABB(follow_targets[0].global_position, Vector3.ZERO) + for node in follow_targets: + if is_instance_valid(node): + bounds = bounds.expand(node.global_position) + + var distance: float + if auto_follow_distance: + distance = lerp(auto_follow_distance_min, auto_follow_distance_max, bounds.get_longest_axis_size() / auto_follow_distance_divisor) + distance = clamp(distance, auto_follow_distance_min, auto_follow_distance_max) + else: + distance = follow_distance + + follow_position = \ + bounds.get_center() + \ + follow_offset + \ + get_transform().basis.z * \ + Vector3(distance, distance, distance) + FollowMode.PATH: + if follow_target and follow_path: + var path_position: Vector3 = follow_path.global_position + follow_position = \ + follow_path.curve.get_closest_point( + follow_target.global_position - path_position + ) + path_position + FollowMode.FRAMED: + if follow_target: + if not Engine.is_editor_hint(): + if not _is_active || get_pcam_host_owner().get_trigger_pcam_tween(): + follow_position = _get_position_offset_distance() + _interpolate_position(follow_position, delta) + return + + viewport_position = get_viewport().get_camera_3d().unproject_position(_get_target_position_offset()) + var visible_rect_size: Vector2 = get_viewport().get_viewport().size + viewport_position = viewport_position / visible_rect_size + _current_rotation = global_rotation + + if _current_rotation != global_rotation: + follow_position = _get_position_offset_distance() + + if _get_framed_side_offset() != Vector2.ZERO: + var target_position: Vector3 = _get_target_position_offset() + _follow_framed_offset + var glo_pos: Vector3 + + if dead_zone_width == 0 || dead_zone_height == 0: + if dead_zone_width == 0 && dead_zone_height != 0: + glo_pos = _get_position_offset_distance() + glo_pos.z = target_position.z + follow_position = glo_pos + elif dead_zone_width != 0 && dead_zone_height == 0: + glo_pos = _get_position_offset_distance() + glo_pos.x = target_position.x + follow_position = glo_pos + else: + follow_position = _get_position_offset_distance() + else: + if _current_rotation != global_rotation: + var opposite: float = sin(-global_rotation.x) * follow_distance + _get_target_position_offset().y + glo_pos.y = _get_target_position_offset().y + opposite + glo_pos.z = sqrt(pow(follow_distance, 2) - pow(opposite, 2)) + _get_target_position_offset().z + glo_pos.x = global_position.x + + follow_position = glo_pos + _current_rotation = global_rotation + else: + follow_position = target_position + else: + _follow_framed_offset = global_position - _get_target_position_offset() + _current_rotation = global_rotation + return + else: + follow_position = _get_position_offset_distance() + var unprojected_position: Vector2 = _get_raw_unprojected_position() + var viewport_width: float = get_viewport().size.x + var viewport_height: float = get_viewport().size.y + var camera_aspect: Camera3D.KeepAspect = get_viewport().get_camera_3d().keep_aspect + var visible_rect_size: Vector2 = get_viewport().get_viewport().size + + unprojected_position = unprojected_position - visible_rect_size / 2 + if camera_aspect == Camera3D.KeepAspect.KEEP_HEIGHT: +# Landscape View + var aspect_ratio_scale: float = viewport_width / viewport_height + unprojected_position.x = (unprojected_position.x / aspect_ratio_scale + 1) / 2 + unprojected_position.y = (unprojected_position.y + 1) / 2 + else: +# Portrait View + var aspect_ratio_scale: float = viewport_height / viewport_width + unprojected_position.x = (unprojected_position.x + 1) / 2 + unprojected_position.y = (unprojected_position.y / aspect_ratio_scale + 1) / 2 + + viewport_position = unprojected_position + FollowMode.THIRD_PERSON: + if follow_target: + if not Engine.is_editor_hint(): + if is_instance_valid(follow_target) and is_instance_valid(_follow_spring_arm): + follow_position = _get_target_position_offset() + follow_target_node = _follow_spring_arm + else: + follow_position = _get_position_offset_distance() + + _interpolate_position(follow_position, delta, follow_target_node) + + +func _look_at() -> void: + match look_at_mode: + LookAtMode.MIMIC: + global_rotation = look_at_target.global_rotation + LookAtMode.SIMPLE: + _interpolate_rotation(look_at_target.global_position) + LookAtMode.GROUP: + if not _multiple_look_at_targets: + if look_at_targets.size() == 0: return + _interpolate_rotation(look_at_targets[0].global_position) + else: + var bounds: AABB = AABB(look_at_targets[0].global_position, Vector3.ZERO) + for node in look_at_targets: + bounds = bounds.expand(node.global_position) + _interpolate_rotation(bounds.get_center()) + + +func _get_target_position_offset() -> Vector3: + return follow_target.global_position + follow_offset + + +func _get_position_offset_distance() -> Vector3: + return _get_target_position_offset() + \ + get_transform().basis.z * Vector3(follow_distance, follow_distance, follow_distance) + + +func _set_follow_velocity(index: int, value: float) -> void: + _follow_velocity_ref[index] = value +func _interpolate_position(target_position: Vector3, delta: float, camera_target: Node3D = self) -> void: + if follow_damping: + for index in 3: + camera_target.global_position[index] = _smooth_damp( + target_position[index], + camera_target.global_position[index], + index, + _follow_velocity_ref[index], + _set_follow_velocity, + follow_damping_value[index] + ) + else: + camera_target.global_position = target_position + + +func _interpolate_rotation(target_trans: Vector3) -> void: + var direction: Vector3 = (target_trans - global_position + look_at_offset).normalized() + var target_basis: Basis = Basis().looking_at(direction) + var target_quat: Quaternion = target_basis.get_rotation_quaternion().normalized() + if look_at_damping: + var current_quat: Quaternion = quaternion.normalized() + + var damping_time: float = max(0.0001, look_at_damping_value) + var t: float = min(1.0, get_process_delta_time() / damping_time) + + var dot: float = current_quat.dot(target_quat) + + if dot < 0.0: + target_quat = -target_quat + dot = -dot + + dot = clampf(dot, -1.0, 1.0) + + var theta: float = acos(dot) * t + var sin_theta: float = sin(theta) + var sin_theta_total: float = sin(acos(dot)) + + # Stop interpolating once sin_theta_total reaches a very low value or 0 + if sin_theta_total < 0.00001: + return + + var ratio_a: float = cos(theta) - dot * sin_theta / sin_theta_total + var ratio_b: float = sin_theta / sin_theta_total + + quaternion = current_quat * ratio_a + target_quat * ratio_b + else: + quaternion = target_quat + + +func _smooth_damp(target_axis: float, self_axis: float, index: int, current_velocity: float, set_velocity: Callable, damping_time: float, rot: bool = false) -> float: + damping_time = maxf(0.0001, damping_time) + var omega: float = 2 / damping_time + var delta: float = get_process_delta_time() + var x: float = omega * delta + var exponential: float = 1 / (1 + x + 0.48 * x * x + 0.235 * x * x * x) + var diff: float = self_axis - target_axis + var _target_axis: float = target_axis + + var max_change: float = INF * damping_time + diff = clampf(diff, -max_change, max_change) + target_axis = self_axis - diff + + var temp: float = (current_velocity + omega * diff) * delta + set_velocity.call(index, (current_velocity - omega * temp) * exponential) + var output: float = target_axis + (diff + temp) * exponential + + ## To prevent overshooting + if (_target_axis - self_axis > 0.0) == (output > _target_axis): + output = _target_axis + set_velocity.call(index, (output - _target_axis) / delta) + + return output + + +func _get_raw_unprojected_position() -> Vector2: + return get_viewport().get_camera_3d().unproject_position(follow_target.global_position + follow_offset) + + +func _on_dead_zone_changed() -> void: + global_position = _get_position_offset_distance() + + +func _get_framed_side_offset() -> Vector2: + var frame_out_bounds: Vector2 + + if viewport_position.x < 0.5 - dead_zone_width / 2: + # Is outside left edge + frame_out_bounds.x = -1 + + if viewport_position.y < 0.5 - dead_zone_height / 2: + # Is outside top edge + frame_out_bounds.y = 1 + + if viewport_position.x > 0.5 + dead_zone_width / 2: + # Is outside right edge + frame_out_bounds.x = 1 + + if viewport_position.y > 0.5001 + dead_zone_height / 2: # 0.501 to resolve an issue where the bottom vertical Dead Zone never becoming 0 when the Dead Zone Vertical parameter is set to 0 + # Is outside bottom edge + frame_out_bounds.y = -1 + + return frame_out_bounds + +func _set_layer(current_layers: int, layer_number: int, value: bool) -> int: + var mask: int = current_layers + + # From https://github.com/godotengine/godot/blob/51991e20143a39e9ef0107163eaf283ca0a761ea/scene/3d/camera_3d.cpp#L638 + if layer_number < 1 or layer_number > 20: + printerr("Render layer must be between 1 and 20.") + else: + if value: + mask |= 1 << (layer_number - 1) + else: + mask &= ~(1 << (layer_number - 1)) + + return mask + +func _has_valid_pcam_owner() -> bool: + if not is_instance_valid(get_pcam_host_owner()): return false + if not is_instance_valid(get_pcam_host_owner().camera_3d): return false + return true + +#endregion + +# TBD +#func get_unprojected_position() -> Vector2: + #var unprojected_position: Vector2 = _get_raw_unprojected_position() + #var viewport_width: float = get_viewport().size.x + #var viewport_height: float = get_viewport().size.y + #var camera_aspect: Camera3D.KeepAspect = get_viewport().get_camera_3d().keep_aspect + #var visible_rect_size: Vector2 = get_viewport().size +# + #unprojected_position = unprojected_position - visible_rect_size / 2 + #if camera_aspect == Camera3D.KeepAspect.KEEP_HEIGHT: +## print("Landscape View") + #var aspect_ratio_scale: float = viewport_width / viewport_height + #unprojected_position.x = (unprojected_position.x / aspect_ratio_scale + 1) / 2 + #unprojected_position.y = (unprojected_position.y + 1) / 2 + #else: +## print("Portrait View") + #var aspect_ratio_scale: float = viewport_height / viewport_width + #unprojected_position.x = (unprojected_position.x + 1) / 2 + #unprojected_position.y = (unprojected_position.y / aspect_ratio_scale + 1) / 2 +# + #return unprojected_position + + +#region Setter & Getter Functions + +## Assigns the value of the [param has_tweened] property.[br] +## [b][color=yellow]Important:[/color][/b] This value can only be changed +## from the [PhantomCameraHost] script. +func set_has_tweened(caller: Node, value: bool) -> void: + if is_instance_of(caller, PhantomCameraHost): + _has_tweened = value + else: + printerr("Can only be called PhantomCameraHost class") +## Returns the current [param has_tweened] value. +func get_has_tweened() -> bool: + return _has_tweened + + +## Assigns the [param PhantomCamera3D] to a new [PhantomCameraHost].[br] +## [b][color=yellow]Important:[/color][/b] This is currently restricted to +## plugin internals. Proper support will be added in issue #26. +func set_pcam_host_owner(value: PhantomCameraHost) -> void: + pcam_host_owner = value + if is_instance_valid(pcam_host_owner): + pcam_host_owner.pcam_added_to_scene(self) + + #if value.size() == 1: +# else: +# for camera_host in camera_host_group: +# print("Multiple PhantomCameraBases in scene") +# print(pcam_host_group) +# print(pcam.get_tree().get_nodes_in_group(PhantomCameraGroupNames.PHANTOM_CAMERA_HOST_GROUP_NAME)) +# multiple_pcam_host_group.append(camera_host) +# return null +## Sets a PCamHost to +#func assign_pcam_host(value: PhantomCameraHost) -> void: + #pcam_host_owner = value +## Gets the current [PhantomCameraHost] this [param PhantomCamera3D] is +## assigned to. +func get_pcam_host_owner() -> PhantomCameraHost: + return pcam_host_owner + + +## Assigns new [member priority] value. +func set_priority(value: int) -> void: + priority = abs(value) # TODO - Make any minus values be 0 + if _has_valid_pcam_owner(): + get_pcam_host_owner().pcam_priority_updated(self) +## Gets current [param Priority] value. +func get_priority() -> int: + return priority + + +## Assigns a new [PhantomCameraTween] resource to the [param PhantomCamera3D]. +func set_tween_resource(value: PhantomCameraTween) -> void: + tween_resource = value +## Gets the [param PhantomCameraTween] resource assigned to the [param PhantomCamera3D]. +## Returns null if there's nothing assigned to it. +func get_tween_resource() -> PhantomCameraTween: + return tween_resource + +## Assigns a new [param Tween Duration] to the [member tween_resource] value.[br] +## The duration value is in seconds. +func set_tween_duration(value: float) -> void: + tween_resource.duration = value +## Gets the current [param Tween] Duration value. The duration value is in +## [param seconds]. +func get_tween_duration() -> float: + return tween_resource.duration + +## Assigns a new [param Tween Transition] to the [member tween_resource] value.[br] +## The duration value is in seconds. +func set_tween_transition(value: int) -> void: + tween_resource.transition = value +## Gets the current [param Tween Transition] value. +func get_tween_transition() -> int: + return tween_resource.transition + +## Assigns a new [param Tween Ease] to the [member tween_resource] value.[br] +## The duration value is in seconds. +func set_tween_ease(value: int) -> void: + tween_resource.ease = value +## Gets the current [param Tween Ease] value. +func get_tween_ease() -> int: + return tween_resource.ease + +## Sets the [param PhantomCamera3D] active state[br] +## [b][color=yellow]Important:[/color][/b] This value can only be changed +## from the [PhantomCameraHost] script. +func set_is_active(node: Node, value: bool) -> void: + if node is PhantomCameraHost: + _is_active = value + else: + printerr("PCams can only be set from the PhantomCameraHost") +## Gets current active state of the [param PhantomCamera3D]. +## If it returns true, it means the [param PhantomCamera3D] is what the +## [param Camera3D] is currently following. +func is_active() -> bool: + return _is_active + + +## Enables or disables the [member tween_on_load]. +func set_tween_on_load(value: bool) -> void: + tween_on_load = value +## Gets the current [member tween_on_load] value. +func get_tween_on_load() -> bool: + return tween_on_load + + +## Gets the current follow mode as an enum int based on [member FollowMode] enum.[br] +## [b]Note:[/b] Setting [member follow_mode] has purposely not been added. +## A separate [param PhantomCamera3D] instance should be used instead. +func get_follow_mode() -> int: + return follow_mode + + +## Assigns a new [Node3D] as the [member follow_target]. +func set_follow_target(value: Node3D) -> void: + if follow_target == value: return + follow_target = value + + _follow_target_physics_based = false + if is_instance_valid(value): + _should_follow = true + _check_physics_body(value) + else: + _should_follow = false + follow_target_changed.emit() + notify_property_list_changed() +## Removes the current [Node3D] [member follow_target]. +func erase_follow_target() -> void: + if follow_target == null: return + _follow_target_physics_based = false + _should_follow = false + follow_target = null + follow_target_changed.emit() +## Gets the current Node3D target. +func get_follow_target() -> Node3D: + return follow_target + + +## Assigns a new [Path3D] to the [member follow_path] property. +func set_follow_path(value: Path3D) -> void: + follow_path = value +## Erases the current [Path3D] from [member follow_path] property. +func erase_follow_path() -> void: + follow_path = null +## Gets the current [Path3D] from the [member follow_path] property. +func get_follow_path() -> Path3D: + return follow_path + + +## Assigns a new [param follow_targets] array value. +func set_follow_targets(value: Array[Node3D]) -> void: + if follow_targets == value: return + + follow_targets = value + + if follow_targets.is_empty(): + _should_follow = false + _has_multiple_follow_targets = false + _follow_target_physics_based = false + return + + var valid_instances: int + _follow_target_physics_based = false + for target in follow_targets: + if is_instance_valid(target): + _should_follow = true + valid_instances += 1 + + _check_physics_body(target) + + if valid_instances > 1: + _has_multiple_follow_targets = true +## Adds a single [Node3D] to [member follow_targets] array. +func append_follow_targets(value: Node3D) -> void: + if not is_instance_valid(value): + printerr(value, " is not a valid instance") + return + + if not follow_targets.has(value): + follow_targets.append(value) + _should_follow = true + _has_multiple_follow_targets = true + _check_physics_body(value) + else: + printerr(value, " is already part of Follow Group") +## Adds an Array of type [Node3D] to [member follow_targets] array. +func append_follow_targets_array(value: Array[Node3D]) -> void: + for target in value: + if not is_instance_valid(target): continue + if not follow_targets.has(target): + follow_targets.append(target) + _should_follow = true + _check_physics_body(target) + if follow_targets.size() > 1: + _has_multiple_follow_targets = true + else: + printerr(value, " is already part of Follow Group") +## Removes [Node3D] from [member follow_targets]. +func erase_follow_targets(value: Node3D) -> void: + follow_targets.erase(value) + _follow_target_physics_based = false + for target in follow_targets: + _check_physics_body(target) + + if follow_targets.size() < 2: + _has_multiple_follow_targets = false + if follow_targets.size() < 1: + _should_follow = false +## Gets all [Node3D] from [follow_targets]. +func get_follow_targets() -> Array[Node3D]: + return follow_targets + +## Returns true if the [param PhantomCamera3D] has more than one member in the +## [member follow_targets] array. +func get_has_multiple_follow_targets() -> bool: + return _has_multiple_follow_targets + +func _check_physics_body(target: Node3D) -> void: + if target is PhysicsBody3D: + ## NOTE - Feature Toggle + #if Engine.get_version_info().major == 4 and \ + #Engine.get_version_info().minor < XX: + if ProjectSettings.get_setting("phantom_camera/tips/show_jitter_tips"): + print_rich("Following or Looking at a [b]PhysicsBody3D[/b] node will likely result in jitter - on lower physics ticks in particular.") + print_rich("Will have proper support once 3D Physics Interpolation becomes part of the core Godot engine.") + print_rich("Until then, try following the guide on the [url=https://phantom-camera.dev/support/faq#i-m-seeing-jitter-what-can-i-do]documentation site[/url] for better results.") + print_rich("This tip can be disabled from within [code]Project Settings / Phantom Camera / Tips / Show Jitter Tips[/code]") + return + ## TODO - Enable once Godot supports 3D Physics Interpolation + #elif not ProjectSettings.get_setting("physics/common/physics_interpolation"): + #printerr("Physics Interpolation is disabled in the Project Settings, recommend enabling it to smooth out physics-based camera movement") + #_follow_target_physics_based = true + + +## Assigns a new [param Vector3] for the [param follow_offset] property. +func set_follow_offset(value: Vector3) -> void: + follow_offset = value + +## Gets the current [param Vector3] for the [param follow_offset] property. +func get_follow_offset() -> Vector3: + return follow_offset + + +## Enables or disables [member follow_damping]. +func set_follow_damping(value: bool) -> void: + follow_damping = value + notify_property_list_changed() + +## Gets the currents [member follow_damping] property. +func get_follow_damping() -> bool: + return follow_damping + + +## Assigns new [member follow_damping_value] value. +func set_follow_damping_value(value: Vector3) -> void: + ## TODO - Should be using @export_range once minimum version support is Godot 4.3 + if value.x < 0: value.x = 0 + elif value.y < 0: value.y = 0 + elif value.z < 0: value.z = 0 + follow_damping_value = value + +## Gets the currents [member follow_damping_value] value. +func get_follow_damping_value() -> Vector3: + return follow_damping_value + + +## Assigns a new [member follow_distance] value. +func set_follow_distance(value: float) -> void: + follow_distance = value + +## Gets [member follow_distance] value. +func get_follow_distance() -> float: + return follow_distance + + +## Enables or disables [member auto_follow_distance] when using Group Follow. +func set_auto_follow_distance(value: bool) -> void: + auto_follow_distance = value + notify_property_list_changed() + +## Gets [member auto_follow_distance] state. +func get_auto_follow_distance() -> bool: + return auto_follow_distance + + +## Assigns new [member auto_follow_distance_min] value. +func set_auto_follow_distance_min(value: float) -> void: + auto_follow_distance_min = value + +## Gets [member auto_follow_distance_min] value. +func get_auto_follow_distance_min() -> float: + return auto_follow_distance_min + + +## Assigns new [member auto_follow_distance_max] value. +func set_auto_follow_distance_max(value: float) -> void: + auto_follow_distance_max = value +## Gets [member auto_follow_distance_max] value. +func get_auto_follow_distance_max() -> float: + return auto_follow_distance_max + + +## Assigns new [member auto_follow_distance_divisor] value. +func set_auto_follow_distance_divisor(value: float) -> void: + auto_follow_distance_divisor = value + +## Gets [member auto_follow_distance_divisor] value. +func get_auto_follow_distance_divisor() -> float: + return auto_follow_distance_divisor + + +## Assigns new rotation (in radians) value to [SpringArm3D] for +## [param ThirdPerson] [enum FollowMode]. +func set_third_person_rotation(value: Vector3) -> void: + _follow_spring_arm.rotation = value + +## Gets the rotation value (in radians) from the [SpringArm3D] for +## [param ThirdPerson] [enum FollowMode]. +func get_third_person_rotation() -> Vector3: + return _follow_spring_arm.rotation + + +## Assigns new rotation (in degrees) value to [SpringArm3D] for +## [param ThirdPerson] [enum FollowMode]. +func set_third_person_rotation_degrees(value: Vector3) -> void: + _follow_spring_arm.rotation_degrees = value + +## Gets the rotation value (in degrees) from the [SpringArm3D] for +## [param ThirdPerson] [enum FollowMode]. +func get_third_person_rotation_degrees() -> Vector3: + return _follow_spring_arm.rotation_degrees + + +## Assigns new [Quaternion] value to [SpringArm3D] for [param ThirdPerson] +## [enum FollowMode]. +func set_third_person_quaternion(value: Quaternion) -> void: + _follow_spring_arm.quaternion = value + +## Gets the [Quaternion] value of the [SpringArm3D] for [param ThirdPerson] +## [enum Follow mode]. +func get_third_person_quaternion() -> Quaternion: + return _follow_spring_arm.quaternion + + +## Assigns a new ThirdPerson [member SpringArm3D.length] value. +func set_spring_length(value: float) -> void: + follow_distance = value + if is_instance_valid(_follow_spring_arm): + _follow_spring_arm.spring_length = value + +## Gets the [member SpringArm3D.length] +## from a [param ThirdPerson] [enum follow_mode] instance. +func get_spring_length() -> float: + return follow_distance + + +## Assigns a new [member collision_mask] to the [SpringArm3D] when [enum FollowMode] +## is set to [param ThirdPerson]. +func set_collision_mask(value: int) -> void: + collision_mask = value + if is_instance_valid(_follow_spring_arm): + _follow_spring_arm.collision_mask = collision_mask + +## Enables or disables a specific [member collision_mask] layer for the +## [SpringArm3D] when [enum FollowMode] is set to [param ThirdPerson]. +func set_collision_mask_value(value: int, enabled: bool) -> void: + collision_mask = _set_layer(collision_mask, value, enabled) + if is_instance_valid(_follow_spring_arm): + _follow_spring_arm.collision_mask = collision_mask + +## Gets [member collision_mask] from the [SpringArm3D] when [enum FollowMode] +## is set to [param ThirdPerson]. +func get_collision_mask() -> int: + return collision_mask + + +## Assigns a new [SpringArm3D.shape] when [enum FollowMode] +## is set to [param ThirdPerson]. +func set_shape(value: Shape3D) -> void: + shape = value + if is_instance_valid(_follow_spring_arm): + _follow_spring_arm.shape = shape + +## Gets [param ThirdPerson] [member SpringArm3D.shape] value. +func get_shape() -> Shape3D: + return shape + + +## Assigns a new [member SpringArm3D.margin] value when [enum FollowMode] +## is set to [param ThirdPerson]. +func set_margin(value: float) -> void: + margin = value + if is_instance_valid(_follow_spring_arm): + _follow_spring_arm.margin = margin + +## Gets the [SpringArm3D.margin] when [enum FollowMode] is set to +## [param ThirdPerson]. +func get_margin() -> float: + return margin + + +## Gets the current [member look_at_mode]. Value is based on [enum LookAtMode] +## enum.[br] +## Note: To set a new [member look_at_mode], a separate [param PhantomCamera3D] should +## be used. +func get_look_at_mode() -> int: + return look_at_mode + + +## Assigns new [Node3D] as [member look_at_target]. +func set_look_at_target(value: Node3D) -> void: + look_at_target = value + _check_physics_body(value) + #_look_at_target_node = get_node_or_null(value) + look_at_target_changed + if is_instance_valid(look_at_target): + _should_look_at = true + else: + _should_look_at = false + notify_property_list_changed() + +## Gets current [Node3D] from [member look_at_target] property. +func get_look_at_target(): + return look_at_target + + +## Sets an array of type [Node3D] to [member set_look_at_targets]. +func set_look_at_targets(value: Array[Node3D]) -> void: + if look_at_targets == value: return + look_at_targets = value + + if look_at_mode != LookAtMode.GROUP: return + + if look_at_targets.is_empty(): + _should_look_at = false + _multiple_look_at_targets = false + else: + var valid_instances: int = 0 + for target in look_at_targets: + if is_instance_valid(target): + valid_instances += 1 + _should_look_at = true + _valid_look_at_targets.append(target) + _check_physics_body(target) + + if valid_instances > 1: + _multiple_look_at_targets = true + elif valid_instances == 0: + _should_look_at = false + _multiple_look_at_targets = false + notify_property_list_changed() + +## Appends a [Node3D] to [member look_at_targets] array. +func append_look_at_target(value: Node3D) -> void: + if not look_at_targets.has(value): + look_at_targets.append(value) + _valid_look_at_targets.append(value) + _check_physics_body(value) + if look_at_targets.size() > 1: + _multiple_look_at_targets = true + else: + printerr(value, " is already part of Look At Group") + +## Appends an array of type [Node3D] to [member look_at_targets] array. +func append_look_at_targets_array(value: Array[NodePath]) -> void: + for val in value: + if not look_at_targets.has(get_node(val)): + var node: Node3D = get_node(val) + look_at_targets.append(node) + _valid_look_at_targets.append(node) + _check_physics_body(node) + if look_at_targets.size() > 1: + _multiple_look_at_targets = true + else: + printerr(val, " is already part of Look At Group") + +## Removes [Node3D] from [member look_at_targets] array. +func erase_look_at_targets_member(value: Node3D) -> void: + look_at_targets.erase(value) + _valid_look_at_targets.erase(value) + _check_physics_body(value) + if look_at_targets.size() < 1: + _multiple_look_at_targets = false + +## Gets all the [Node3D] instances in [member look_at_targets]. +func get_look_at_targets() -> Array[Node3D]: + return look_at_targets + + +## Assigns a new [Vector3] to the [member look_at_offset] value. +func set_look_at_offset(value: Vector3) -> void: + look_at_offset = value + +## Gets the current [member look_at_offset] value. +func get_look_at_offset() -> Vector3: + return look_at_offset + + +## Enables or disables [member look_at_damping]. +func set_look_at_damping(value: bool) -> void: + look_at_damping = value + notify_property_list_changed() + +## Gets the currents [member look_at_damping] property. +func get_look_at_damping() -> bool: + return look_at_damping + + +## Assigns new [member look_at_damping_value] value. +func set_look_at_damping_value(value: float) -> void: + look_at_damping_value = value + +## Gets the currents [member look_at_damping_value] value. +func get_look_at_damping_value() -> float: + return look_at_damping_value + + +## Sets [member inactive_update_mode] property. +func set_inactive_update_mode(value: int) -> void: + inactive_update_mode = value + +## Gets [member inactive_update_mode] property. +func get_inactive_update_mode() -> int: + return inactive_update_mode + + +## Assigns a [Camera3DResource]. +func set_camera_3d_resource(value: Camera3DResource) -> void: + camera_3d_resource = value + +## Gets the [Camera3DResource] +func get_camera_3d_resource() -> Camera3DResource: + return camera_3d_resource + + +## Assigns a new [member Camera3D.cull_mask] value.[br] +## [b]Note:[/b] This will override and make the [param Camera3DResource] unique to +## this [param PhantomCamera3D]. +func set_cull_mask(value: int) -> void: + camera_3d_resource.cull_mask = value + if _is_active: get_pcam_host_owner().camera_3d.cull_mask = value + +## Enables or disables a specific [member Camera3D.cull_mask] layer.[br] +## [b]Note:[/b] This will override and make the [param Camera3DResource] unique to +## this [param PhantomCamera3D]. +func set_cull_mask_value(layer_number: int, value: bool) -> void: + var mask: int = _set_layer(get_cull_mask(), layer_number, value) + camera_3d_resource.cull_mask = mask + if _is_active: get_pcam_host_owner().camera_3d.cull_mask = mask + +## Gets the [member Camera3D.cull_mask] value assigned to the [Camera3DResource]. +func get_cull_mask() -> int: + return camera_3d_resource.cull_mask + + +## Assigns a new [member Camera3D.h_offset] value.[br] +## [b]Note:[/b] This will override and make the [param Camera3DResource] unique to +## this [param PhantomCamera3D]. +func set_h_offset(value: float) -> void: + camera_3d_resource.h_offset = value + if _is_active: get_pcam_host_owner().camera_3d.h_offset = value + +## Gets the [member Camera3D.h_offset] value assigned to the [param Camera3DResource]. +func get_h_offset() -> float: + return camera_3d_resource.h_offset + + +## Assigns a new [Camera3D.v_offset] value.[br] +## [b]Note:[/b] This will override and make the [param Camera3DResource] unique to +## this [param PhantomCamera3D]. +func set_v_offset(value: float) -> void: + camera_3d_resource.v_offset = value + if _is_active: get_pcam_host_owner().camera_3d.v_offset = value + +## Gets the [member Camera3D.v_offset] value assigned to the [param Camera3DResource]. +func get_v_offset() -> float: + return camera_3d_resource.v_offset + + +## Assigns a new [Camera3D.projection] value.[br] +## [b]Note:[/b] This will override and make the [param Camera3DResource] unique to +## this [param PhantomCamera3D]. +func set_projection(value: int) -> void: + camera_3d_resource.projection = value + if _is_active: get_pcam_host_owner().camera_3d.projection = value + +## Gets the [member Camera3D.projection] value assigned to the [param Camera3DResource]. +func get_projection() -> int: + return camera_3d_resource.projection + + +## Assigns a new [member Camera3D.fov] value.[br] +## [b]Note:[/b] This will override and make the [param Camera3DResource] unique to +## this [param PhantomCamera3D]. +func set_fov(value: float) -> void: + camera_3d_resource.fov = value + if _is_active: get_pcam_host_owner().camera_3d.fov = value + +## Gets the [member Camera3D.fov] value assigned to the [param Camera3DResource]. +func get_fov() -> float: + return camera_3d_resource.fov + + +## Assigns a new [member Camera3D.size] value.[br] +## [b]Note:[/b] This will override and make the [param Camera3DResource] unique to +## this [param PhantomCamera3D]. +func set_size(value: float) -> void: + camera_3d_resource.size = value + if _is_active: get_pcam_host_owner().camera_3d.size = value + +## Gets the [member Camera3D.size] value assigned to the [param Camera3DResource]. +func get_size() -> float: + return camera_3d_resource.size + + +## Assigns a new [member Camera3D.frustum_offset] value.[br] +## [b]Note:[/b] This will override and make the [param Camera3DResource] unique to +## this [param PhantomCamera3D]. +func set_frustum_offset(value: Vector2) -> void: + camera_3d_resource.frustum_offset = value + if _is_active: get_pcam_host_owner().camera_3d.frustum_offset = value + +## Gets the [member Camera3D.frustum_offset] value assigned to the [param Camera3DResource]. +func get_frustum_offset() -> Vector2: + return camera_3d_resource.frustum_offset + + +## Assigns a new [member Camera3D.near] value.[br] +## [b]Note:[/b] This will override and make the [param Camera3DResource] unique to +## this [param PhantomCamera3D]. +func set_near(value: float) -> void: + camera_3d_resource.near = value + if _is_active: get_pcam_host_owner().camera_3d.near = value + +## Gets the [member Camera3D.near] value assigned to the [param Camera3DResource]. +func get_near() -> float: + return camera_3d_resource.near + + +## Assigns a new [member Camera3D.far] value.[br] +## [b]Note:[/b] This will override and make the [param Camera3DResource] unique to +## this [param PhantomCamera3D]. +func set_far(value: float) -> void: + camera_3d_resource.far = value + if _is_active: get_pcam_host_owner().camera_3d.far = value + +## Gets the [member Camera3D.far] value assigned to the [param Camera3DResource]. +func get_far() -> float: + return camera_3d_resource.far + + +func set_follow_target_physics_based(value: bool, caller: Node) -> void: + if is_instance_of(caller, PhantomCameraHost): + _follow_target_physics_based = value + else: + printerr("set_follow_target_physics_based is for internal use only.") + +func get_follow_target_physics_based() -> bool: + return _follow_target_physics_based + + +func get_class() -> String: + return "PhantomCamera3D" + + +func is_class(value) -> bool: + return value == "PhantomCamera3D" + +#endregion diff --git a/addons/phantom_camera/scripts/phantom_camera/phantom_camera_constants.gd b/addons/phantom_camera/scripts/phantom_camera/phantom_camera_constants.gd new file mode 100644 index 0000000..43f6cf4 --- /dev/null +++ b/addons/phantom_camera/scripts/phantom_camera/phantom_camera_constants.gd @@ -0,0 +1,29 @@ +@tool +extends RefCounted + +#region Constants + +#const PhantomCameraHost: Script = preload("res://addons/phantom_camera/scripts/phantom_camera_host/phantom_camera_host.gd") + +const CAMERA_2D_NODE_NAME: StringName = "Camera2D" +const CAMERA_3D_NODE_NAME: StringName = "Camera3D" +const PCAM_HOST_NODE_NAME: StringName = "PhantomCameraHost" +const PCAM_MANAGER_NODE_NAME: String = "PhantomCameraManager" # TODO - Convert to StringName once https://github.com/godotengine/godot/pull/72702 is merged +const PCAM_2D_NODE_NAME: StringName = "PhantomCamera2D" +const PCAM_3D_NODE_NAME: StringName = "PhantomCamera3D" +const PCAM_HOST: StringName = "phantom_camera_host" + +const COLOR_2D: Color = Color("8DA5F3") +const COLOR_3D: Color = Color("FC7F7F") +const COLOR_PCAM: Color = Color("3AB99A") +const COLOR_PCAM_33: Color = Color("3ab99a33") +const PCAM_HOST_COLOR: Color = Color("E0E0E0") + +#endregion + +#region Group Names + +const PCAM_GROUP_NAME: StringName = "phantom_camera_group" +const PCAM_HOST_GROUP_NAME: StringName = "phantom_camera_host_group" + +#endregion diff --git a/addons/phantom_camera/scripts/phantom_camera_host/phantom_camera_host.gd b/addons/phantom_camera/scripts/phantom_camera_host/phantom_camera_host.gd new file mode 100644 index 0000000..77e8f29 --- /dev/null +++ b/addons/phantom_camera/scripts/phantom_camera_host/phantom_camera_host.gd @@ -0,0 +1,701 @@ +@tool +@icon("res://addons/phantom_camera/icons/phantom_camera_host.svg") +class_name PhantomCameraHost +extends Node + +## Controls a scene's [Camera2D] (2D scenes) and [Camera3D] (3D scenes). +## +## All instantiated [param PhantomCameras] in a scene are assign to and managed by a +## PhantomCameraHost. It is what determines which [param PhantomCamera] should +## be active. + +#region Constants + +const _constants := preload("res://addons/phantom_camera/scripts/phantom_camera/phantom_camera_constants.gd") + +#endregion + + +#region Signals + +## Updates the viewfinder [param dead zones] sizes.[br] +## [b]Note:[/b] This is only being used in the editor viewfinder UI. +signal update_editor_viewfinder + +#endregion + + +#region Variables + +enum InterpolationMode { + AUTO = 0, + IDLE = 1, + PHYSICS = 2, +} + +## TBD - For when Godot 4.3 becomes the minimum version +#@export var interpolation_mode: InterpolationMode = InterpolationMode.AUTO: + #set = set_interpolation_mode, + #get = get_interpolation_mode + + +## For 2D scenes, is the [Camera2D] instance the [param PhantomCameraHost] controls. +var camera_2d: Camera2D = null +## For 3D scenes, is the [Camera3D] instance the [param PhantomCameraHost] controls. +var camera_3d = null ## Note: To support disable_3d export templates for 2D projects, this is purposely not strongly typed. + +var _pcam_list: Array[Node] = [] + +var _active_pcam_2d: PhantomCamera2D = null +var _active_pcam_3d = null ## Note: To support disable_3d export templates for 2D projects, this is purposely not strongly typed. +var _active_pcam_priority: int = -1 +var _active_pcam_missing: bool = true +var _active_pcam_has_damping: bool = false +var _follow_target_physics_based: bool = false + +var _prev_active_pcam_2d_transform: Transform2D = Transform2D() +var _prev_active_pcam_3d_transform: Transform3D = Transform3D() + +var _trigger_pcam_tween: bool = false +var _tween_elapsed_time: float = 0 +var _tween_duration: float = 0 + +var _multiple_pcam_hosts: bool = false + +var _is_child_of_camera: bool = false +var _is_2D: bool = false + + +var _viewfinder_node: Control = null +var _viewfinder_needed_check: bool = true + +var _camera_zoom: Vector2 = Vector2.ONE + +#region Camera3DResource +var _prev_cam_h_offset: float = 0 +var _cam_h_offset_changed: bool = false + +var _prev_cam_v_offset: float = 0 +var _cam_v_offset_changed: bool = false + +var _prev_cam_fov: float = 75 +var _cam_fov_changed: bool = false + +var _prev_cam_size: float = 1 +var _cam_size_changed: bool = false + +var _prev_cam_frustum_offset: Vector2 = Vector2.ZERO +var _cam_frustum_offset_changed: bool = false + +var _prev_cam_near: float = 0.05 +var _cam_near_changed: bool = false + +var _prev_cam_far: float = 4000 +var _cam_far_changed: bool = false +#endregion + +var _active_pcam_2d_glob_transform: Transform2D = Transform2D() +var _active_pcam_3d_glob_transform: Transform3D = Transform3D() + +#endregion + +# NOTE - Temp solution until Godot has better plugin autoload recognition out-of-the-box. +var _phantom_camera_manager: Node + +#region Private Functions + +## TBD - For when Godot 4.3 becomes a minimum version +#func _validate_property(property: Dictionary) -> void: + #if property.name == "interpolation_mode" and get_parent() is Node3D: + #property.usage = PROPERTY_USAGE_NO_EDITOR + + +func _get_configuration_warnings() -> PackedStringArray: + var parent = get_parent() + + if _is_2D: + if not parent is Camera2D: + return ["Needs to be a child of a Camera2D in order to work."] + else: + return [] + else: + if not parent.is_class("Camera3D"): ## Note: To support disable_3d export templates for 2D projects, this is purposely not strongly typed. + return ["Needs to be a child of a Camera3D in order to work."] + else: + return [] + + +func _enter_tree() -> void: + _phantom_camera_manager = get_tree().root.get_node(_constants.PCAM_MANAGER_NODE_NAME) + + var parent = get_parent() + + if parent is Camera2D or parent.is_class("Camera3D"): ## Note: To support disable_3d export templates for 2D projects, this is purposely not strongly typed. + _is_child_of_camera = true + if parent is Camera2D: + _is_2D = true + camera_2d = parent + ## Force applies position smoothing to be disabled + ## This is to prevent overlap with the interpolation of the PCam2D. + camera_2d.set_position_smoothing_enabled(false) + else: + _is_2D = false + camera_3d = parent + + _phantom_camera_manager.pcam_host_added(self) +# var already_multi_hosts: bool = multiple_pcam_hosts + + _check_camera_host_amount() + + if _multiple_pcam_hosts: + printerr( + "Only one PhantomCameraHost can exist in a scene", + "\n", + "Multiple PhantomCameraHosts will be supported in https://github.com/ramokz/phantom-camera/issues/26" + ) + queue_free() + + if _is_2D: + if not _phantom_camera_manager.get_phantom_camera_2ds().is_empty(): + for pcam in _phantom_camera_manager.get_phantom_camera_2ds(): + pcam_added_to_scene(pcam) + pcam.set_pcam_host_owner(self) + else: + if not _phantom_camera_manager.get_phantom_camera_3ds().is_empty(): + for pcam in _phantom_camera_manager.get_phantom_camera_3ds(): + pcam_added_to_scene(pcam) + pcam.set_pcam_host_owner(self) + + +func _exit_tree() -> void: + _phantom_camera_manager.pcam_host_removed(self) + _check_camera_host_amount() + + +func _ready() -> void: + if not is_instance_valid(_active_pcam_2d) or is_instance_valid(_active_pcam_3d): return + if _is_2D: + _active_pcam_2d_glob_transform = _active_pcam_2d.get_global_transform() + else: + _active_pcam_3d_glob_transform = _active_pcam_3d.get_global_transform() + + +func _check_camera_host_amount() -> void: + if _phantom_camera_manager.get_phantom_camera_hosts().size() > 1: + _multiple_pcam_hosts = true + else: + _multiple_pcam_hosts = false + + +func _assign_new_active_pcam(pcam: Node) -> void: + var no_previous_pcam: bool + + if is_instance_valid(_active_pcam_2d) or is_instance_valid(_active_pcam_3d): + if _is_2D: + _prev_active_pcam_2d_transform = camera_2d.get_global_transform() + _active_pcam_2d.queue_redraw() + _active_pcam_2d.set_is_active(self, false) + _active_pcam_2d.became_inactive.emit() + + if _trigger_pcam_tween: + _active_pcam_2d.tween_interrupted.emit(pcam) + else: + _prev_active_pcam_3d_transform = camera_3d.get_global_transform() + + _prev_cam_h_offset = camera_3d.h_offset + _prev_cam_v_offset = camera_3d.v_offset + _prev_cam_fov = camera_3d.fov + _prev_cam_size = camera_3d.size + _prev_cam_frustum_offset = camera_3d.frustum_offset + _prev_cam_near = camera_3d.near + _prev_cam_far = camera_3d.far + + _active_pcam_3d.set_is_active(self, false) + _active_pcam_3d.became_inactive.emit() + + if _trigger_pcam_tween: + _active_pcam_3d.tween_interrupted.emit(pcam) + else: + no_previous_pcam = true + + ## Assign newly active pcam + if _is_2D: + _active_pcam_2d = pcam + _active_pcam_priority = _active_pcam_2d.priority + _active_pcam_has_damping = _active_pcam_2d.follow_damping + _tween_duration = _active_pcam_2d.get_tween_duration() + else: + _active_pcam_3d = pcam + _active_pcam_priority = _active_pcam_3d.priority + _active_pcam_has_damping = _active_pcam_3d.follow_damping + _tween_duration = _active_pcam_3d.get_tween_duration() + + # Checks if the Camera3DResource has changed from previous Active PCam3D + if _active_pcam_3d.get_camera_3d_resource(): + if _prev_cam_h_offset != _active_pcam_3d.get_h_offset(): + _cam_h_offset_changed = true + if _prev_cam_v_offset != _active_pcam_3d.get_v_offset(): + _cam_v_offset_changed = true + if _prev_cam_fov != _active_pcam_3d.get_fov(): + _cam_fov_changed = true + if _prev_cam_size != _active_pcam_3d.get_size(): + _cam_size_changed = true + if _prev_cam_frustum_offset != _active_pcam_3d.get_frustum_offset(): + _cam_frustum_offset_changed = true + if _prev_cam_near != _active_pcam_3d.get_near(): + _cam_near_changed = true + if _prev_cam_far != _active_pcam_3d.get_far(): + _cam_far_changed = true + + if _is_2D: + if _active_pcam_2d.show_viewfinder_in_play: + _viewfinder_needed_check = true + + _active_pcam_2d.set_is_active(self, true) + _active_pcam_2d.became_active.emit() + _camera_zoom = camera_2d.get_zoom() + ## TODO - Needs 3D variant once Godot supports physics_interpolation for 3D scenes. + var _physics_based: bool + + ## NOTE - Only supported in Godot 4.3 or above + if Engine.get_version_info().major == 4 and \ + Engine.get_version_info().minor >= 3: + ## TBD - For when Godot 4.3 becomes the minimum version + #if interpolation_mode == InterpolationMode.IDLE: + #_physics_based = false + #elif interpolation_mode == InterpolationMode.PHYSICS: + #_physics_based = true + #else: + #_physics_based = _active_pcam.follow_target_physics_based + + # TBD - REMOVE this line once Godot 4.3 becomes the minimum version + _physics_based = _active_pcam_2d.get_follow_target_physics_based() + + if _physics_based: + _follow_target_physics_based = true + _active_pcam_2d.set_follow_target_physics_based(true, self) + ## TODO - Temporary solution to support Godot 4.2 + ## Remove line below and uncomment the following once Godot 4.3 is min verison. + camera_2d.call("reset_physics_interpolation") + camera_2d.set("physics_interpolation_mode", 1) + #camera_2d.reset_physics_interpolation() + #camera_2d.physics_interpolation_mode = Node.PHYSICS_INTERPOLATION_MODE_ON + else: + _follow_target_physics_based = false + _active_pcam_2d.set_follow_target_physics_based(false, self) + ## TODO - Temporary solution to support Godot 4.2 + ## Remove line below and uncomment the following once Godot 4.3 is min verison. + camera_2d.set("physics_interpolation_mode", 2) + #camera_2d.physics_interpolation_mode = Node.PHYSICS_INTERPOLATION_MODE_OFF + else: + _follow_target_physics_based = false + if _active_pcam_3d.show_viewfinder_in_play: + _viewfinder_needed_check = true + + _active_pcam_3d.set_is_active(self, true) + _active_pcam_3d.became_active.emit() + if _active_pcam_3d.get_camera_3d_resource(): + camera_3d.cull_mask = _active_pcam_3d.get_cull_mask() + camera_3d.projection = _active_pcam_3d.get_projection() + + if no_previous_pcam: + if _is_2D: + _prev_active_pcam_2d_transform = _active_pcam_2d.get_global_transform() + else: + _prev_active_pcam_3d_transform = _active_pcam_3d.get_global_transform() + + _tween_elapsed_time = 0 + if not pcam.get_has_tweened(): + _trigger_pcam_tween = true + else: + _trigger_pcam_tween = false + + +func _find_pcam_with_highest_priority() -> void: + for pcam in _pcam_list: + if pcam.get_priority() > _active_pcam_priority: + _assign_new_active_pcam(pcam) + + pcam.set_has_tweened(self, false) + + _active_pcam_missing = false + + +func _process(delta: float): + if _follow_target_physics_based or _active_pcam_missing: return + + if _is_2D: + _active_pcam_2d_glob_transform = _active_pcam_2d.get_global_transform() + else: + _active_pcam_3d_glob_transform = _active_pcam_3d.get_global_transform() + + if _trigger_pcam_tween: + _pcam_tween(delta) + else: + _pcam_follow(delta) + + +func _physics_process(delta: float): + if not _follow_target_physics_based or _active_pcam_missing: return + + if _is_2D: + _active_pcam_2d_glob_transform = _active_pcam_2d.get_global_transform() + else: + _active_pcam_3d_glob_transform = _active_pcam_3d.get_global_transform() + + if _trigger_pcam_tween: + _pcam_tween(delta) + else: + _pcam_follow(delta) + + +func _pcam_follow(delta: float) -> void: + if _is_2D: + if not is_instance_valid(_active_pcam_2d): return + else: + if not is_instance_valid(_active_pcam_3d): return + + if _active_pcam_missing or not _is_child_of_camera: return + # When following + _pcam_set_position(delta) + + if _viewfinder_needed_check: + _show_viewfinder_in_play() + _viewfinder_needed_check = false + + # TODO - Should be able to find a more efficient way using signals + if Engine.is_editor_hint(): + if not _is_2D: + if _active_pcam_3d.get_camera_3d_resource(): + camera_3d.cull_mask = _active_pcam_3d.get_cull_mask() + camera_3d.h_offset = _active_pcam_3d.get_h_offset() + camera_3d.v_offset = _active_pcam_3d.get_v_offset() + camera_3d.projection = _active_pcam_3d.get_projection() + camera_3d.fov = _active_pcam_3d.get_fov() + camera_3d.size = _active_pcam_3d.get_size() + camera_3d.frustum_offset = _active_pcam_3d.get_frustum_offset() + camera_3d.near = _active_pcam_3d.get_near() + camera_3d.far = _active_pcam_3d.get_far() + + +func _pcam_set_position(delta: float) -> void: + if _is_2D: + if _active_pcam_2d.snap_to_pixel: + var snap_to_pixel_glob_transform: Transform2D = _active_pcam_2d_glob_transform + snap_to_pixel_glob_transform.origin = snap_to_pixel_glob_transform.origin.round() + camera_2d.global_transform = snap_to_pixel_glob_transform + else: + camera_2d.global_transform =_active_pcam_2d_glob_transform + camera_2d.zoom = _active_pcam_2d.zoom + else: + camera_3d.global_transform = _active_pcam_3d_glob_transform + + +func _pcam_tween(delta: float) -> void: + if _tween_elapsed_time < _tween_duration: + _pcam_tween_properties(delta) + else: # First frame when tweening completes + _tween_elapsed_time = 0 + _trigger_pcam_tween = false + #_show_viewfinder_in_play() # NOTE - Likely not needed + _pcam_follow(delta) + + if _is_2D: + _active_pcam_2d.update_limit_all_sides() + _active_pcam_2d.tween_completed.emit() + if Engine.is_editor_hint(): + _active_pcam_2d.queue_redraw() + else: + _cam_h_offset_changed = false + _cam_v_offset_changed = false + _cam_fov_changed = false + _cam_size_changed = false + _cam_frustum_offset_changed = false + _cam_near_changed = false + _cam_far_changed = false + + _active_pcam_3d.tween_completed.emit() + + +func _pcam_tween_properties(delta: float) -> void: + # Run at the first tween frame + if _tween_elapsed_time == 0: + if _is_2D: + _active_pcam_2d.tween_started.emit() + _active_pcam_2d.reset_limit() + else: + _active_pcam_3d.tween_started.emit() + + _tween_elapsed_time = min(_tween_duration, _tween_elapsed_time + delta) + + if _is_2D: + _active_pcam_2d.is_tweening.emit() + var interpolation_destination: Vector2 = _tween_interpolate_value( + _prev_active_pcam_2d_transform.origin, + _active_pcam_2d_glob_transform.origin, + _active_pcam_2d.get_tween_duration(), + _active_pcam_2d.get_tween_transition(), + _active_pcam_2d.get_tween_ease() + ) + + if _active_pcam_2d.snap_to_pixel: + camera_2d.global_position = interpolation_destination.round() + else: + camera_2d.global_position = interpolation_destination + + camera_2d.rotation = _tween_interpolate_value( + _prev_active_pcam_2d_transform.get_rotation(), + _active_pcam_2d_glob_transform.get_rotation(), + _active_pcam_2d.get_tween_duration(), + _active_pcam_2d.get_tween_transition(), + _active_pcam_2d.get_tween_ease() + ) + camera_2d.zoom = _tween_interpolate_value( + _camera_zoom, + _active_pcam_2d.zoom, + _active_pcam_2d.get_tween_duration(), + _active_pcam_2d.get_tween_transition(), + _active_pcam_2d.get_tween_ease() + ) + else: + _active_pcam_3d.is_tweening.emit() + camera_3d.global_position = _tween_interpolate_value( + _prev_active_pcam_3d_transform.origin, + _active_pcam_3d_glob_transform.origin, + _active_pcam_3d.get_tween_duration(), + _active_pcam_3d.get_tween_transition(), + _active_pcam_3d.get_tween_ease() + ) + + var prev_active_pcam_3d_quat: Quaternion = Quaternion(_prev_active_pcam_3d_transform.basis.orthonormalized()) + camera_3d.quaternion = \ + Tween.interpolate_value( + prev_active_pcam_3d_quat, \ + prev_active_pcam_3d_quat.inverse() * Quaternion(_active_pcam_3d_glob_transform.basis.orthonormalized()), + _tween_elapsed_time, \ + _active_pcam_3d.get_tween_duration(), \ + _active_pcam_3d.get_tween_transition(), + _active_pcam_3d.get_tween_ease() + ) + + if _cam_fov_changed: + camera_3d.fov = \ + _tween_interpolate_value( + _prev_cam_fov, + _active_pcam_3d.get_fov(), + _active_pcam_3d.get_tween_duration(), + _active_pcam_3d.get_tween_transition(), + _active_pcam_3d.get_tween_ease() + ) + + if _cam_size_changed: + camera_3d.size = \ + _tween_interpolate_value( + _prev_cam_size, + _active_pcam_3d.get_size(), + _active_pcam_3d.get_tween_duration(), + _active_pcam_3d.get_tween_transition(), + _active_pcam_3d.get_tween_ease() + ) + + if _cam_frustum_offset_changed: + camera_3d.frustum_offset = \ + _tween_interpolate_value( + _prev_cam_frustum_offset, + _active_pcam_3d.get_frustum_offset(), + _active_pcam_3d.get_tween_duration(), + _active_pcam_3d.get_tween_transition(), + _active_pcam_3d.get_tween_ease() + ) + + if _cam_h_offset_changed: + camera_3d.h_offset = \ + _tween_interpolate_value( + _prev_cam_h_offset, + _active_pcam_3d.get_h_offset(), + _active_pcam_3d.get_tween_duration(), + _active_pcam_3d.get_tween_transition(), + _active_pcam_3d.get_tween_ease() + ) + + if _cam_v_offset_changed: + camera_3d.v_offset = \ + _tween_interpolate_value( + _prev_cam_v_offset, + _active_pcam_3d.get_v_offset(), + _active_pcam_3d.get_tween_duration(), + _active_pcam_3d.get_tween_transition(), + _active_pcam_3d.get_tween_ease() + ) + + if _cam_near_changed: + camera_3d.near = \ + _tween_interpolate_value( + _prev_cam_near, + _active_pcam_3d.get_near(), + _active_pcam_3d.get_tween_duration(), + _active_pcam_3d.get_tween_transition(), + _active_pcam_3d.get_tween_ease() + ) + + if _cam_far_changed: + camera_3d.far = \ + _tween_interpolate_value( + _prev_cam_far, + _active_pcam_3d.get_far(), + _active_pcam_3d.get_tween_duration(), + _active_pcam_3d.get_tween_transition(), + _active_pcam_3d.get_tween_ease() + ) + + +func _tween_interpolate_value(from: Variant, to: Variant, duration: float, transition_type: int, ease_type: int) -> Variant: + return Tween.interpolate_value( + from, \ + to - from, + _tween_elapsed_time, \ + duration, \ + transition_type, + ease_type, + ) + +#endregion + + +#region Public Functions + +func _show_viewfinder_in_play() -> void: + # Don't show the viewfinder in the actual editor or project builds + if Engine.is_editor_hint() or !OS.has_feature("editor"): return + + # We default the viewfinder node to hidden + if is_instance_valid(_viewfinder_node): + _viewfinder_node.visible = false + + if _is_2D: + if not _active_pcam_2d.show_viewfinder_in_play: return + if _active_pcam_2d.follow_mode != _active_pcam_2d.FollowMode.FRAMED: return + else: + if not _active_pcam_3d.show_viewfinder_in_play: return + if _active_pcam_3d.follow_mode != _active_pcam_2d.FollowMode.FRAMED: return + + var canvas_layer: CanvasLayer = CanvasLayer.new() + get_tree().get_root().add_child(canvas_layer) + + # Instantiate the viewfinder scene if it isn't already + if not is_instance_valid(_viewfinder_node): + var _viewfinder_scene := load("res://addons/phantom_camera/panel/viewfinder/viewfinder_panel.tscn") + _viewfinder_node = _viewfinder_scene.instantiate() + canvas_layer.add_child(_viewfinder_node) + + _viewfinder_node.visible = true + _viewfinder_node.update_dead_zone() + + +## Called when a [param PhantomCamera] is added to the scene.[br] +## [b]Note:[/b] This can only be called internally from a +## [param PhantomCamera] node. +func pcam_added_to_scene(pcam) -> void: + if is_instance_of(pcam, PhantomCamera2D) or pcam.is_class("PhantomCamera3D"): ## Note: To support disable_3d export templates for 2D projects, this is purposely not strongly typed. + if not _pcam_list.has(pcam): + _pcam_list.append(pcam) + if not pcam.tween_on_load: + pcam.set_has_tweened(self, true) # Skips its tween if it has the highest priority on load + _find_pcam_with_highest_priority() + else: + printerr("This function should only be called from PhantomCamera scripts") + + +## Called when a [param PhantomCamera] is removed from the scene.[br] +## [b]Note:[/b] This can only be called internally from a +## [param PhantomCamera] node. +func pcam_removed_from_scene(pcam) -> void: + if is_instance_of(pcam, PhantomCamera2D) or pcam.is_class("PhantomCamera3D"): ## Note: To support disable_3d export templates for 2D projects, this is purposely not strongly typed. + _pcam_list.erase(pcam) + if _is_2D: + if pcam == _active_pcam_2d: + _active_pcam_missing = true + _active_pcam_priority = -1 + _find_pcam_with_highest_priority() + else: + if pcam == _active_pcam_3d: + _active_pcam_missing = true + _active_pcam_priority = -1 + _find_pcam_with_highest_priority() + else: + printerr("This function should only be called from PhantomCamera scripts") + + +## Triggers a recalculation to determine which PhantomCamera has the highest +## priority. +func pcam_priority_updated(pcam: Node) -> void: + if Engine.is_editor_hint(): + if _is_2D: + if _active_pcam_2d.priority_override: return + else: + if _active_pcam_3d.priority_override: return + + if not is_instance_valid(pcam): return + + var current_pcam_priority: int = pcam.get_priority() + + if current_pcam_priority >= _active_pcam_priority: + if _is_2D: + if pcam != _active_pcam_2d: + _assign_new_active_pcam(pcam) + else: + if pcam != _active_pcam_3d: + _assign_new_active_pcam(pcam) + + if pcam == _active_pcam_2d or pcam == _active_pcam_3d: + if current_pcam_priority <= _active_pcam_priority: + _active_pcam_priority = current_pcam_priority + _find_pcam_with_highest_priority() + else: + _active_pcam_priority = current_pcam_priority + + +## Updates the viewfinder when a [param PhantomCamera] has its +## [param priority_ovrride] enabled.[br] +## [b]Note:[/b] This only affects the editor. +func pcam_priority_override(pcam: Node) -> void: + if Engine.is_editor_hint(): + if _is_2D: + if _active_pcam_2d.priority_override: + _active_pcam_2d.priority_override = false + else: + if _active_pcam_3d.priority_override: + _active_pcam_3d.priority_override = false + + _assign_new_active_pcam(pcam) + update_editor_viewfinder.emit() + + +## Updates the viewfinder when a [param PhantomCamera] has its +## [param priority_ovrride] disabled.[br] +## [b]Note:[/b] This only affects the editor. +func pcam_priority_override_disabled() -> void: + update_editor_viewfinder.emit() + + +## Returns the currently active [param PhantomCamera] +func get_active_pcam() -> Node: + if _is_2D: + return _active_pcam_2d + else: + return _active_pcam_3d + + +## Returns whether if a [param PhantomCamera] should tween when it becomes +## active. If it's already active, the value will always be false. +## [b]Note:[/b] This can only be called internally from a +## [param PhantomCamera] node. +func get_trigger_pcam_tween() -> bool: + return _trigger_pcam_tween + +#func set_interpolation_mode(value: int) -> void: + #interpolation_mode = value +#func get_interpolation_mode() -> int: + #return interpolation_mode + +#endregion diff --git a/addons/phantom_camera/scripts/resources/camera_3d_resource.gd b/addons/phantom_camera/scripts/resources/camera_3d_resource.gd new file mode 100644 index 0000000..70a0487 --- /dev/null +++ b/addons/phantom_camera/scripts/resources/camera_3d_resource.gd @@ -0,0 +1,59 @@ +@tool +@icon("res://addons/phantom_camera/icons/phantom_camera_camera_3d_resource.svg") +class_name Camera3DResource +extends Resource + +## Resource for [PhantomCamera3D] to override various [Camera3D] properties. +## +## The overrides defined here will be applied to the [Camera3D] upon the +## [PhantomCamera3D] becoming active. + +## Overrides [member Camera3D.cull_mask]. +@export_flags_3d_render var cull_mask: int = 1048575 + +## Overrides [member Camera3D.h_offset]. +@export_range(0, 1, 0.001, "hide_slider", "suffix:m") var h_offset: float = 0 + +## Overrides [member Camera3D.v_offset]. +@export_range(0, 1, 0.001, "hide_slider", "suffix:m") var v_offset: float = 0 + + +enum ProjectionType { + PERSPECTIVE = 0, ## Perspective projection. Objects on the screen becomes smaller when they are far away. + ORTHOGONAL = 1, ## Orthogonal projection, also known as orthographic projection. Objects remain the same size on the screen no matter how far away they are. + FRUSTUM = 2, ## Frustum projection. This mode allows adjusting frustum_offset to create "tilted frustum" effects. +} + +## Overrides [member Camera3D.projection]. +@export var projection: ProjectionType = ProjectionType.PERSPECTIVE: + set(value): + projection = value + notify_property_list_changed() + get: + return projection + +## Overrides [member Camera3D.fov]. +@export_range(1, 179, 0.1, "degrees") var fov: float = 75 + +## Overrides [member Camera3D.size]. +@export_range(0.001, 100, 0.001, "suffix:m", "or_greater") var size: float = 1 + +## Overrides [member Camera3d.frustum_offset]. +@export var frustum_offset: Vector2 = Vector2.ZERO + +## Overrides [member Camera3D.near]. +@export_range(0.001, 10, 0.001, "suffix:m", "or_greater") var near: float = 0.05 + +## Overrides [member Camera3D.far]. +@export_range(0.01, 4000, 0.001, "suffix:m","or_greater") var far: float = 4000 + + +func _validate_property(property: Dictionary) -> void: + if property.name == "fov" and not projection == ProjectionType.PERSPECTIVE: + property.usage = PROPERTY_USAGE_NO_EDITOR + + if property.name == "size" and projection == ProjectionType.PERSPECTIVE: + property.usage = PROPERTY_USAGE_NO_EDITOR + + if property.name == "frustum_offset" and not projection == ProjectionType.FRUSTUM: + property.usage = PROPERTY_USAGE_NO_EDITOR diff --git a/addons/phantom_camera/scripts/resources/tween_resource.gd b/addons/phantom_camera/scripts/resources/tween_resource.gd new file mode 100644 index 0000000..997ddb8 --- /dev/null +++ b/addons/phantom_camera/scripts/resources/tween_resource.gd @@ -0,0 +1,41 @@ +@icon("res://addons/phantom_camera/icons/phantom_camera_tween.svg") +class_name PhantomCameraTween +extends Resource + +## Tweening resource for [PhantomCamera2D] and [PhantomCamera3D]. +## +## Defines how [param PhantomCameras] transition between one another. +## Changing the tween values for a given [param PhantomCamera] determines how +## transitioning to that instance will look like. + +enum TransitionType { + LINEAR = 0, ## The animation is interpolated linearly. + SINE = 1, ## The animation is interpolated using a sine function. + QUINT = 2, ## The animation is interpolated with a quintic (to the power of 5) function. + QUART = 3, ## The animation is interpolated with a quartic (to the power of 4) function. + QUAD = 4, ## The animation is interpolated with a quadratic (to the power of 2) function. + EXPO = 5, ## The animation is interpolated with an exponential (to the power of x) function. + ELASTIC = 6, ## The animation is interpolated with elasticity, wiggling around the edges. + CUBIC = 7, ## The animation is interpolated with a cubic (to the power of 3) function. + CIRC = 8, ## The animation is interpolated with a function using square roots. + BOUNCE = 9, ## The animation is interpolated by bouncing at the end. + BACK = 10, ## The animation is interpolated backing out at ends. +# CUSTOM = 11, +# NONE = 12, +} + +enum EaseType { + EASE_IN = 0, ## The interpolation starts slowly and speeds up towards the end. + EASE_OUT = 1, ## The interpolation starts quickly and slows down towards the end. + EASE_IN_OUT = 2, ## A combination of EASE_IN and EASE_OUT. The interpolation is slowest at both ends. + EASE_OUT_IN = 3, ## A combination of EASE_IN and EASE_OUT. The interpolation is fastest at both ends. +} + +## The time it takes to tween to this PhantomCamera in [param seconds]. +@export var duration: float = 1 + +## The transition bezier type for the tween. The options are defined in the [enum TransitionType]. +@export var transition: TransitionType = TransitionType.LINEAR + +## The ease type for the tween. The options are defined in the [enum EaseType]. +@export var ease: EaseType = EaseType.EASE_IN_OUT diff --git a/addons/save_system/LICENSE b/addons/save_system/LICENSE new file mode 100644 index 0000000..76b2a2c --- /dev/null +++ b/addons/save_system/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2023 AdamKormos + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/addons/save_system/README.md b/addons/save_system/README.md new file mode 100644 index 0000000..e555ef5 --- /dev/null +++ b/addons/save_system/README.md @@ -0,0 +1,46 @@ +# Save Made Easy - A simple, diverse Save/Load plugin for Godot 4 +An easy to use, versatile Save/Load System inspired by the simplicity of Unity's PlayerPrefs. Supports nested variables, Resources and encryption. +I've browsed multiple forum sites and checked the Asset Library, only to find out there are no plugins made to simplify saving data really, while this is default built-in functionality in Unity. +New programmers (and people who don't want to spend too much time coding) shouldn't have to struggle with save systems, as they are quite finicky to debug if something is not set up right in the core code. Thus, here we go. +This compact plugin stores all the data in an encrypted save file (encoded with the player's unique OS ID - meaning, players cannot exchange save files), which is automatically loaded at start-up. + +# Instructions +1. Download the plugin from the Godot Asset Library or the zip file of this repo by clicking on "Code", and the "Local" menu. You should see a "Download ZIP" option. +2. If you downloaded manually, place the addons/save_system file into your project directory, ideally into a folder called "addons". +3. Go to Godot's Plugins tab (Project -> Project Settings -> Plugins) and tick "Enable" by the plugin. (If the plugin doesn't show up, you may need to restart the editor.) +4. You're good to go! Don't forget to read the documentation. You can modify the save file name ("const file_name") at the top of the SaveSystem.gd script. + +# Contact +If you have any questions/concerns or just wanna say hi, you can message me on [Twitter](https://twitter.com/olcgreen) or add me on Discord. My handle is olcgreen on both. + +# Documentation +While you can find complete documentation in the plugin code, let me highlight the most important functions: +- set_var(key_path, value): **Use this for storing a variable.** +- get_var(key_path, default): **Use this for retrieving a variable.** If the variable at "key_path" doesn't exist, "default" is returned. +- delete(key_path): **Deletes variable at "key_path".** +- delete_all: **Deletes all data.** (Still need to call save() for the file to be overwritten.) +- has(key_path): **Checks if a variable exists at "key_path".** +- save: **Use this to save data and write the file.** + +You can also notice functions intended for internal use begin their names with an underscore in the code. + +**Note: Your save file will go into what Godot refers to as the user:// directory, on Windows, this is C:\Users\UserName\AppData\Roaming\Godot\app_userdata.** + +# Demonstration +_Here's a class of our Resource created for testing this system:_ + + +![Screenshot_43](https://github.com/AdamKormos/SaveMadeEasy/assets/49873113/d9547f06-9253-4005-9e3b-989ca69e92f3) + +_You may use the set_var and get_var variables of the SaveSystem Singleton for the core functionality: (This code sample can be found in SaveSystem.gd)_ + +![Screenshot_41](https://github.com/AdamKormos/SaveMadeEasy/assets/49873113/f860e709-c108-4ebc-a0f8-c18e3e7925af) + +**Nesting is expressed by the colon symbol (:). You may also access dictionary values with this notation.** + +# Support +If you like my work and wanna support me, please consider checking out my [YouTube](https://www.youtube.com/@AdamsGodotTutorials) channel, which has a handful of tutorials - with more to come as time goes on! + +I also have a [Discord](https://discord.gg/vhpYfYZSWh) server for my community, you're welcome to hop in. :) + +Aaand last but not least, I'm working on games too. Wishlists are appreciated! [Odyssey of Dremid'ir](https://store.steampowered.com/app/2134530/Odyssey_of_Dremidir/) is a hand-drawn RPG, and [Frieseria](https://store.steampowered.com/app/2591170/Frieseria_The_Grand_Reopening/) is a restaurant management game. diff --git a/addons/save_system/plugin.cfg b/addons/save_system/plugin.cfg new file mode 100644 index 0000000..a551f5d --- /dev/null +++ b/addons/save_system/plugin.cfg @@ -0,0 +1,7 @@ +[plugin] + +name="SaveSystem" +description="An easy to use, versatile Save/Load System inspired by the simplicity of Unity's PlayerPrefs" +author="Ádám Kormos" +version="1.3" +script="plugin_save_system.gd" diff --git a/addons/save_system/plugin_logo.png b/addons/save_system/plugin_logo.png new file mode 100644 index 0000000..d418e26 Binary files /dev/null and b/addons/save_system/plugin_logo.png differ diff --git a/addons/save_system/plugin_logo.png.import b/addons/save_system/plugin_logo.png.import new file mode 100644 index 0000000..2f19ba1 --- /dev/null +++ b/addons/save_system/plugin_logo.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dhsqvh4qbp6ot" +path="res://.godot/imported/plugin_logo.png-1f0305143f7a1a7c79d7f4bc7c21433d.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://addons/save_system/plugin_logo.png" +dest_files=["res://.godot/imported/plugin_logo.png-1f0305143f7a1a7c79d7f4bc7c21433d.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/addons/save_system/plugin_save_system.gd b/addons/save_system/plugin_save_system.gd new file mode 100644 index 0000000..07130b7 --- /dev/null +++ b/addons/save_system/plugin_save_system.gd @@ -0,0 +1,13 @@ +@tool +extends EditorPlugin + + +const AUTOLOAD_NAME = "SaveSystem" + + +func _enter_tree(): + add_autoload_singleton(AUTOLOAD_NAME, "res://addons/save_system/save_system.gd") + + +func _exit_tree(): + remove_autoload_singleton(AUTOLOAD_NAME) diff --git a/addons/save_system/save_system.gd b/addons/save_system/save_system.gd new file mode 100644 index 0000000..a4934a8 --- /dev/null +++ b/addons/save_system/save_system.gd @@ -0,0 +1,432 @@ +#@tool # Temporarily disabled for maintenance +extends Node + +# --------------------------------------------------------------------- +# --- SaveMadeEasy - A Save System inspired by Unity's PlayerPrefs --- +# ----------- Made by Ádám Kormos ----------- +# --------------------------------------------------------------------- +# The Save System is a drag-and-drop, easy to use plugin that even allows +# nested Dictionaries and Resources to be stored & accessed conveniently! +# Save data is encrypted based on an encryption key variable. (Note: As of +# v1.2, OS.get_unique_id isn't used anymore, as it may change upon the user +# reinstalling their OS. :UniqueIDDeprecated) +# A Resource is broken down to a Dictionary internally. Let's say you're saving +# a Resource under the key name of "res", and it has variables "a", "b" and "c". +# You can access its first variable like this: +# get_var("res:a") +# Simple, right? +# +# I'd like to thank Loppansson for the awesome setup of the test environment and the naming +# conventions cleanup, and Nevereven for pointing out a handful of things that can make +# the plugin more diverse. :) My gratitude goes to all of you using the plugin and helping me +# make it better by reporting arising issues! +# +# You can use this plugin in your Godot project as you wish. +# Crediting me is appreciated, but not a must! +# +# If you rely on save data in an AutoLoad's _ready function, you may need to wait for the +# "loaded" signal of this AutoLoad. + + +# The default file path of your save data. You can freely modify this. +const default_file_path : String = "user://save_data.sav" +const encryption_key : String = "abcdefg1234567" +const use_encryption : bool = false +# Typecasting the keys manually may increase loading times, so if you feel like +# this feature is irrelevant in your project, set this to false. +# You typically only need this enabled if you are using dictionary keys +# that aren't Strings. +const perform_typecast_on_dictionary_keys : bool = false + +@export var current_state_dictionary := {} + +# I wished to create a separate Dock for the controls, but connecting +# clear_save_data_on_start to a dock control was very problematic and +# never seemed to work as intended, so I had to put these as exports. Unfortunate :( +## Set this to true to clear every save data you have, when starting the game. +@export var clear_save_data_on_start : bool = false +## Set this to true to clear every save data you have. Automatically resets to false +## afterwards +@export var clear_all_data : bool = false : set = set_clear_data +func set_clear_data(value): + if value: + delete_all() + can_save_empty_in_editor_with_permission = true + save() + clear_all_data = false + +# This variable is created because if you try to disable the plugin, +# due to this script's exit_tree, the file gets saved, but it will be +# empty (= current_state_dictionary is empty)! I'm assuming the script +# gets deloaded and that's why, but it still doesn't completely click. +# Anyway, we *do* want to clear our save file with the exported +# variable though, so this permission is given in that case. +# :EditorEmptySavingPermission +var can_save_empty_in_editor_with_permission : bool = false + +var base_resource_property_names := [] + +signal loaded +signal saved + + +func _ready(): + # Locating what properties a Resource has by default, so that they do not get + # added to a Dictionary when it is formed based on a Resource. + var res := Resource.new() + for property in res.get_property_list(): + base_resource_property_names.append(property.name) + + # If we boot the game and want to erase data on start - + if !Engine.is_editor_hint() and clear_save_data_on_start: + delete_all() + save() + else: + _load() # Load save data. + +# Test stuff for demonstration of the plugin -------------------------- +# +# print(get_var("Bob")) +# set_var("Bob", TestResource.new()) +# set_var("Bob:e", Vector2(4, 9)) +# + # Saving arrays with resources and nested resources: +# var my_arr := [TestSubresource.new(), TestSubresource.new()] +# my_arr[0].c[0].b = 66 +# set_var("Bob:f", my_arr) +# print(get_var("Bob:f")[0].c[0].b) +# save() +# + # Saving primitive types, dictionaries and non-resource arrays: +# set_var("Bob:a:b", 3) +# set_var("Bob:a:c:d", {"abcf" : 5}) +# print(has("Bob")) +# set_var("Bob:a:b", null) +# set_var("Bob:a:c", TestResource.new()) +# set_var("Bob:a:c:c", 10) +# delete("Bob:a:c:d") +# print(get_var("Bob")) +# print(_sanitize_key_path("Bob:a:c:d")) +# print(_sanitize_key_path(":::::Bob::::a:c:::d::")) +# print(has("Z")) + + +func _exit_tree(): + save() # Save on exit. + + +# Deletes every existing save data. +func delete_all(): + current_state_dictionary.clear() + + +# Deletes a specific key's information. +func delete(key_path : String): + if not has(key_path): + return + + if not _is_hierarchical(key_path): # If the key has no hierarchy, it can be simply erased. + current_state_dictionary.erase(key_path) + return + + # In case of a hierarchical key, we need to break it down to body and head, + # where body means every part of the key until the last colon and the head + # is the rest of it, at the bottom of the hierarchy, as it's inside the + # body's dictionary key set. + # A path is a certain variable's identifier with which you can access it. + # :KeyParts + var body = _get_variable_name_body(key_path) + var head = _get_variable_name_head(key_path) + _get_variable_at_path(body).erase(head) + + +# Returns whether a key exists or not. A variable can exist and be null, +# so you can get a null returned, because the condition only checks if the key's +# parent is null. It's made this way because despite the value being null, the variable +# itself is still around and is in the save info tree. Returning false in case it's null +# would make it impossible to assign anything to it once it is set to null! +# :HasIncludesNull +# (Note: Might consider making a function called has_and_valid) +func has(key_path : String) -> bool: + if _is_hierarchical(key_path): + var variable_head = _get_variable_name_head(key_path) + var key_parent = _get_variable_at_path(_get_variable_name_body(key_path)) + if key_parent == null: + return false + + var valid_as_object : bool = (key_parent is Object and variable_head in key_parent) + var valid_as_dict : bool = (not key_parent is Object and key_parent.has(variable_head)) + return key_parent != null and (valid_as_object or valid_as_dict) + else: + return current_state_dictionary.has(key_path) + + +# Assigns a value to a key. +func set_var(key_path : String, value): + key_path = _sanitize_key_path(key_path) + if _is_hierarchical(key_path): + if value is Resource: + value = _resource_to_dict(value) + elif value is Array: + value = _parse_array(value) + elif value is Dictionary: + value = _typecast_dictionary_keys(value) + + if not has(key_path): # Read :HasIncludesNull + return + + # Hierarchical variable assignment can be achieved by tracking the key's direct parent + # dictionary, and then getting the head of it so that we can overwrite the value. + var result = _get_parent_dictionary(key_path) + var variable_name : String = _get_variable_name_head(key_path) + result[variable_name] = value + return + + if value is Resource: # Resource, has to be nested and translated. + current_state_dictionary[key_path] = _resource_to_dict(value) + else: # Simple value. + current_state_dictionary[key_path] = value + + +# Saves the current state. You may use a different file path for multi-slot saving. +func save(file_path : String = default_file_path): + # :EditorEmptySavingPermission + if current_state_dictionary.is_empty() and Engine.is_editor_hint(): + if !can_save_empty_in_editor_with_permission: + return + + var file : FileAccess + if use_encryption: + file = FileAccess.open_encrypted_with_pass(file_path, FileAccess.WRITE, encryption_key) + else: + file = FileAccess.open(file_path, FileAccess.WRITE) + + # We need to call typecasting when saving too, so that Resources that + # weren't manually added with set_var but are parts of an object that + # were, can be broken down to Dictionaries. + current_state_dictionary = _typecast_dictionary_keys(current_state_dictionary) + file.store_string(JSON.stringify(current_state_dictionary, "\t")) + can_save_empty_in_editor_with_permission = false + emit_signal("saved") + + +# Returns a variable. +func get_var(key_path : String, default = null): + key_path = _sanitize_key_path(key_path) + var var_at_path = _get_variable_at_path(key_path) + if var_at_path != null: + return var_at_path + else: + return default + + +# --------------------------------- INTERNAL FUNCTIONS --------------------------------- + + +# Performs a recursive look-up on its elements to "unpack" potential resources in arrays, +# and return an array of data that only holds primitives and dictionaries. +func _parse_array(array : Array) -> Array: + var result := [] + for element in array: + if element is Resource: + result.append(_resource_to_dict(element)) + elif element is Array: + result.append(_parse_array(element)) + else: + result.append(element) + return result + + +# A hierarchical key has a colon separating its body and head. Read :KeyParts +func _is_hierarchical(key : String) -> bool: + return key.find(":") != -1 + + +# Loads the root dictionary stored in the save file. You may use a different +# file path for multi-slot saving. +func _load(file_path : String = default_file_path): + var file : FileAccess + if use_encryption: + file = FileAccess.open_encrypted_with_pass(file_path, FileAccess.READ, encryption_key) + else: + file = FileAccess.open(file_path, FileAccess.READ) + + if file: + current_state_dictionary = JSON.parse_string(file.get_as_text()) + if perform_typecast_on_dictionary_keys: + current_state_dictionary = _typecast_dictionary_keys(current_state_dictionary) + + emit_signal("loaded") + + +# By default, JSON parsing doesn't typecast the keys of a Dictionary, which can be +# an issue. So when the file is loaded, a manual typecast is performed on Dictionary +# keys to ensure you can access them as intended, without having to stringify all +# your Dictionary keys. +func _typecast_dictionary_keys(input_dict : Dictionary) -> Dictionary: + var typed_dict := {} + for key in input_dict.keys(): + var value = input_dict[key] + + var typed_key = _get_typed_key(key) + # If our key's value is a Dictionary, its keys must go through recursive + # typecasting, and be assigned in that form to our result dictionary's key. + if value is Dictionary: + typed_dict[typed_key] = _typecast_dictionary_keys(value) + else: + # If the value is an Array, we have to account for underlying Dictionaries + # among its elements and recursively typecast them. + if value is Array: + for i in range(value.size()): + if value[i] is Dictionary: + value[i] = _typecast_dictionary_keys(value[i]) + typed_dict[typed_key] = value + return typed_dict + + +# Typecasts a key value and returns it. We cannot simply use str_to_var in every case, +# as for Strings (text value - which is also what we read out of files) that cannot +# be typecasted, it returns null, and it doesn't parse Vectors properly! +# :StrToVarIsNullOnString +func _get_typed_key(key): + # Since str_to_var lacks converting the sheer coordinate values into a Vector + # automatically, we have to add some conditions to predict whether the key is + # a Vector value or not. + if key is String and key.begins_with("(") and key.ends_with(")") and key.find(",") != -1: + var comma_count : int = key.count(",") + # To better understand this parsing, imagine we store a 2D Vector of + # (2, 5). "(2, 5)" is what's being stored in the file, and we have one comma, + # so the result parameter of str_to_var is "Vector2(2, 5)", which the + # function can conveniently work with. + var supposed_vector_value = str_to_var("Vector" + str(comma_count + 1) + key) + if supposed_vector_value != null: + return supposed_vector_value + # Here we can get around the :StrToVarIsNullOnString limitation, as we + # already know our key is a String, given the branch entry conditions. + else: + return key + # We cannot typecast Resource keys, because when we load them back, + # there is no reliable way to know what type of Resource it was, + # so the recommended approach is to call _resource_to_dict on your + # resource before using it as a key, if the Dictionary is in an object + # you're saving. + # TODO: Perhaps we could add the Resource's resource_path as an additional + # key when we convert it to a Dictionary, and immediately convert the + # Dictionary back to a Resource on load? We'd still need a manual + # lookup method though, because Godot compares Resources based on their + # unique IDs, not based on their variables matching, of course. + # :NoResourceKeyTypecast +# elif key is Resource: +# return _typecast_dictionary_keys(_resource_to_dict(key)) + # :StrToVarIsNullOnString + elif (key is String and str_to_var(key) == null) or (not key is String): + return key + else: + return str_to_var(key) + + +# Sanitizes the input key path. It must be performed on every input that goes into +# internal functions. +func _sanitize_key_path(key_path : String) -> String: + var sanitized_string : String = "" + key_path = key_path.lstrip(":").rstrip(":") # Remove : from beginning and end + + var i : int = 0 + while i < key_path.length(): + sanitized_string += key_path[i] + if key_path[i] == ":": # Skip over multiple colons placed after each other. + while(key_path[i + 1] == ":"): # No need to look for going OOB because the edges of the key are uncolonised (lol) + i += 1 + i += 1 + return sanitized_string + + +# Returns the top element of a key path. +func _get_variable_root(key_path : String) -> String: + key_path = _sanitize_key_path(key_path) + if _is_hierarchical(key_path): + return key_path.substr(0, key_path.find(":")) + else: + return key_path + + +# :KeyParts +func _get_variable_name_body(key_path : String) -> String: + key_path = _sanitize_key_path(key_path) + if _is_hierarchical(key_path): + return key_path.substr(0, key_path.rfind(":")) + else: + return key_path + + +# :KeyParts +func _get_variable_name_head(key_path : String) -> String: + key_path = _sanitize_key_path(key_path) + if _is_hierarchical(key_path): + return key_path.substr(key_path.rfind(":") + 1) + else: + return key_path + + +# Retrieves a key's parent dictionary using recursion. If path is not hierarchical, +# the base is used. +func _get_parent_dictionary(key_path : String, carried_dict : Dictionary = current_state_dictionary): + key_path = _sanitize_key_path(key_path) + var depth_count = key_path.count(":") + if depth_count == 0: + return carried_dict + elif depth_count == 1: + return carried_dict[key_path.split(":")[0]] + + var first_splitter_index = key_path.find(":") + var first_name = key_path.substr(0, first_splitter_index) + key_path = key_path.trim_prefix(first_name + key_path[first_splitter_index]) + + if carried_dict[first_name] is Object: + carried_dict[first_name] = _resource_to_dict(carried_dict[first_name]) + return _get_parent_dictionary(key_path, carried_dict[first_name]) + + +# Initiates recursive search for a variable. +func _get_variable_at_path(key_path : String, carried_dict : Dictionary = current_state_dictionary): + key_path = _sanitize_key_path(key_path) + var parent_dict = _get_parent_dictionary(key_path) + if parent_dict != null: + var variable_head = _get_variable_name_head(key_path) + if not parent_dict is Object and parent_dict.has(variable_head): + return parent_dict[variable_head] + elif parent_dict is Object and variable_head in parent_dict: + return parent_dict.get(variable_head) + else: + return null + else: + return null + + +# Converts a Resource to a Dictionary so that it can be stored as save data. The +# default properties of a Resource aren't included because they would just flood the dictionary. +func _resource_to_dict(resource : Resource) -> Dictionary: + var dict := {} + for property in resource.get_property_list(): + if base_resource_property_names.has(property.name) or property.name.ends_with(".gd"): + continue + + var property_value = resource.get(property.name) + # Arrays have to be interpreted recursively, see _parse_array function description. + if property_value is Array: + dict[property.name] = _parse_array(property_value) + else: + dict[property.name] = property_value + return dict + + +# Converts a Dictionary's information into a Resource. We need a resource as the +# 2nd parameter so that the instance has the given fields our Dictionary assigns. +# The simplest approach is using a new instance of the Resource type in question +# (e.g TestResource.new()) +func _dict_to_resource(dict : Dictionary, target_resource : Resource) -> Resource: + for i in range(dict.size()): + var key = dict.keys()[i] + var value = dict.values()[i] + target_resource.set(key, value) + return target_resource diff --git a/addons/save_system/save_system_test/save_system_test.gd b/addons/save_system/save_system_test/save_system_test.gd new file mode 100644 index 0000000..b508944 --- /dev/null +++ b/addons/save_system/save_system_test/save_system_test.gd @@ -0,0 +1,129 @@ +extends Node + +# Scipt used to test the save system. Ctrl+Drag script into the scene and the +# current scene twice to test. + + +var _tests := [] +var _number_of_test_done : int = 0 +var _longest_input_len : int = 0 + + +func _ready(): + await get_tree().create_timer(0.2).timeout + var first_load = not SaveSystem.has("test_resource") + + if first_load: + var res := SaveSystemTestResource.new() + res.id = 2 + SaveSystem.set_var("test_resource", res) + # Notice how we get_var the test_resource and separately assign its "resource" variable, + # without a set_var call. Later in the tests, you can see the reference makes it so + # when you get/set_var "test_resource:resource", the code will refer to what + # we've just set here. + SaveSystem.get_var("test_resource").resource = SaveSystemTestResource.new() + SaveSystem.set_var("test_resource:resource:id", 1) + SaveSystem.set_var("test_resource:resource:data:tags", { + "primary_tag" : "resource", + "secondary_tag" : "test_resource" + }) + SaveSystem.set_var("test_resource:resource:name", null) + SaveSystem.set_var("test_resource:resource:resource", SaveSystemTestResource.new()) + SaveSystem.set_var("test_resource:resource:resource:id", 2) + SaveSystem.get_var("test_resource:resource_arr")[0].id = 44 + SaveSystem.delete("test_resource:resource:resource:data") + + var test_resource = SaveSystem.get_var("test_resource", SaveSystemTestResource.new()) + _test('test_resource.id', test_resource.id, 2) + _test('test_resource.resource.id', test_resource.resource.id, 1) + # Example: You don't have to manually set_var test_resource:name! + _test('test_resource.name', test_resource.name, 'abc') + _test('test_resource.data["position"]', test_resource.data["position"], 0) + _test('test_resource.data["tags"]', test_resource.data["tags"], {"primary_tag": "", "secondary_tag": ""}) + _test('SaveSystem.has("test_resource")', SaveSystem.has("test_resource"), true) + _test('SaveSystem.has("test_resource:id")', SaveSystem.has("test_resource:id"), true) + _test('SaveSystem.has("test_resource:no")', SaveSystem.has("test_resource:no"), false) + _test('SaveSystem.has("non_existent_var")', SaveSystem.has("non_existent_var"), false) + _test( + 'SaveSystem._sanitize_key_path(":::::test_resource::::a:c:::d::")', + SaveSystem._sanitize_key_path(":::::test_resource::::a:c:::d::"), + 'test_resource:a:c:d' + ) + _test( + 'test_resource.resource_arr[0].id', + test_resource.resource_arr[0].id, + 44 + ) + + if SaveSystem.perform_typecast_on_dictionary_keys: + _test( + 'test_resource.non_string_key_dictionary[123]', + test_resource.non_string_key_dictionary[123], + "abc" + ) + _test( + 'test_resource.non_string_key_dictionary[true]', + test_resource.non_string_key_dictionary[true], + Vector2.ONE + ) + _test( + 'test_resource.non_string_key_dictionary[Vector2(1, 1)][0]["name"]', + test_resource.non_string_key_dictionary[Vector2(1, 1)][0]["name"], + "Bob" + ) + _test( + 'test_resource.non_string_key_dictionary[Vector2(1, 1)][0][false]', + test_resource.non_string_key_dictionary[Vector2(1, 1)][0][false], + "False :(" + ) + # Experimental test, this won't work with the current plugin yet, + # if the positions Dictionary has a Resource as the key. + # :ExperimentalResKey +# _test( +# 'test_resource.positions[SaveSystem._resource_to_dict(SaveSystemTestSubresource.new())]', +# test_resource.positions[SaveSystem._resource_to_dict(SaveSystemTestSubresource.new())], +# Vector2(2, 3) +# ) + + _render_tests() + + # Quit after printing results + await get_tree().create_timer(1.0).timeout + get_tree().quit() + + +func _test(input : String, result, expected_result): + var success_state = "" + if str(result) == str(expected_result): + success_state = "OK" + else: + success_state = "ER" + + _tests.append({ + "input" : input, + "result" : str(result), + "expected_result" : str(expected_result), + "success_state" : success_state + }) + + _longest_input_len = max(len(input), _longest_input_len) + _number_of_test_done += 1 + + +func _render_tests(): + print("State Input") + var number_of_ok : int = 0 + var _test_rendered : int = 0 + for test in _tests: + if test["success_state"] == "ER": + print("ER " + test["input"]) + print(" L____ Expected: ", test["expected_result"]) + print(" L____ Recieved: ", test["result"]) + if not _test_rendered + 1 == _number_of_test_done: + print(" |") + else: + print("OK " + test["input"]) + number_of_ok += 1 + _test_rendered += 1 + print() + print("OVER ALL: [", number_of_ok, "/", _number_of_test_done, "] OK") diff --git a/addons/save_system/save_system_test/save_system_test_resource.gd b/addons/save_system/save_system_test/save_system_test_resource.gd new file mode 100644 index 0000000..d62a3f7 --- /dev/null +++ b/addons/save_system/save_system_test/save_system_test_resource.gd @@ -0,0 +1,27 @@ +class_name SaveSystemTestResource +extends Resource + + +var id : int +var name : String = "abc" +var resource : Resource +var resource_arr := [SaveSystemTestSubresource.new(), SaveSystemTestSubresource.new()] +var data : Dictionary = { + "position" : 0, + "tags" : { + "primary_tag" : "", + "secondary_tag" : "" + } +} + +var non_string_key_dictionary : Dictionary = { + 123 : "abc", + true : Vector2.ONE, + Vector2(-1, 0.5) : "aaaaa", + Vector2(1, 1) : [{"name" : "Bob", "cast" : "Warrior", "mana" : 5, false : "False :("}, 235] +} + +# :ExperimentalResKey +var positions : Dictionary = { + SaveSystemTestSubresource.new() : Vector2(2, 3) +} diff --git a/addons/save_system/save_system_test/save_system_test_subresource.gd b/addons/save_system/save_system_test/save_system_test_subresource.gd new file mode 100644 index 0000000..74a2fc9 --- /dev/null +++ b/addons/save_system/save_system_test/save_system_test_subresource.gd @@ -0,0 +1,7 @@ +class_name SaveSystemTestSubresource +extends Resource + + +var id : int +var name : String + diff --git a/addons/scene_manager/Dissolve2d.gdshader b/addons/scene_manager/Dissolve2d.gdshader new file mode 100644 index 0000000..1076041 --- /dev/null +++ b/addons/scene_manager/Dissolve2d.gdshader @@ -0,0 +1,19 @@ +shader_type canvas_item; + +uniform sampler2D dissolve_texture; +uniform float dissolve_amount : hint_range(0.0, 1.0) = 0.5; +uniform vec4 fade_color : source_color = vec4(1.0, 1.0, 1.0, 1.0); +uniform bool fade = false; +uniform bool inverted = false; + +void fragment() { + if (dissolve_amount < 0.0001 || dissolve_amount > 0.9999 || fade) { + COLOR = vec4(fade_color.rgb, dissolve_amount); + } else { + float sample = texture(dissolve_texture, UV).r; + if (inverted) { + sample = 1.0 - sample; + } + COLOR = vec4(fade_color.rgb, step(sample, dissolve_amount)); + } +} diff --git a/addons/scene_manager/LICENSE b/addons/scene_manager/LICENSE new file mode 100644 index 0000000..9665923 --- /dev/null +++ b/addons/scene_manager/LICENSE @@ -0,0 +1,9 @@ +The MIT License (MIT) + +Copyright © 2021 GlassBrick + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/addons/scene_manager/NodeFlagsInspectorPlugin.gd b/addons/scene_manager/NodeFlagsInspectorPlugin.gd new file mode 100644 index 0000000..b848eb2 --- /dev/null +++ b/addons/scene_manager/NodeFlagsInspectorPlugin.gd @@ -0,0 +1,13 @@ +extends EditorInspectorPlugin + +var SingletonCheckProperty = load('res://addons/scene_manager/SingletonCheckProperty.gd') +var SingletonNameProperty = load('res://addons/scene_manager/SingletonNameProperty.gd') + + +func _can_handle(object: Variant): + return object is Node + + +func _parse_begin(object: Object): + add_property_editor("singleton_check", SingletonCheckProperty.new()) + add_property_editor("singleton_name", SingletonNameProperty.new()) diff --git a/addons/scene_manager/README.md b/addons/scene_manager/README.md new file mode 100644 index 0000000..b99e74d --- /dev/null +++ b/addons/scene_manager/README.md @@ -0,0 +1,16 @@ +# Godot Scene Manager + +![Logo](/logo.png) + +Plugin for managing transitions and Node references between scenes. Expect more features to be added in the future! + +![Demonstration of Shader Fades](/scene_manager_demo.gif) + +--- + +All the README info has been moved to the new wiki! + +- [Wiki](https://github.com/glass-brick/Scene-Manager/wiki) + - [Getting Started](https://github.com/glass-brick/Scene-Manager/wiki/Getting-started) + - [Features](https://github.com/glass-brick/Scene-Manager/wiki/Features) + - [API docs]() diff --git a/addons/scene_manager/SceneManager.gd b/addons/scene_manager/SceneManager.gd new file mode 100644 index 0000000..df09009 --- /dev/null +++ b/addons/scene_manager/SceneManager.gd @@ -0,0 +1,172 @@ +extends Node2D + +signal fade_complete +signal scene_unloaded +signal scene_loaded +signal transition_finished + +var is_transitioning := false +@onready var _tree := get_tree() +@onready var _root := _tree.get_root() +@onready var _current_scene := _tree.current_scene +@onready var _animation_player : AnimationPlayer = $AnimationPlayer +@onready var _shader_blend_rect : ColorRect = $CanvasLayer/ColorRect + +var default_options := { + "speed": 2, + "color": Color("#000000"), + "pattern": "fade", + "wait_time": 0.5, + "invert": false, + "invert_on_leave": true, + "ease": 1.0, + "skip_scene_change": false, + "skip_fade_out": false, + "skip_fade_in": false, + "on_tree_enter": func(scene): null, + "on_ready": func(scene): null, + "on_fade_out": func(): null, + "on_fade_in": func(): null, +} +# extra_options = { +# "pattern_enter": DEFAULT_IMAGE, +# "pattern_leave": DEFAULT_IMAGE, +# "ease_enter": 1.0, +# "ease_leave": 1.0, +# } + +var singleton_entities := {} +var _previous_scene = null + +func _ready() -> void: + _set_singleton_entities() + scene_loaded.emit() + +func _set_singleton_entities() -> void: + singleton_entities = {} + var entities = _current_scene.get_tree().get_nodes_in_group( + SceneManagerConstants.SINGLETON_GROUP_NAME + ) + for entity in entities: + var has_entity_name : bool = entity.has_meta(SceneManagerConstants.SINGLETON_META_NAME) + assert(has_entity_name,"The node was set as a singleton entity, but no entity name was provided.") + var entity_name = entity.get_meta(SceneManagerConstants.SINGLETON_META_NAME) + assert(not singleton_entities.has(entity_name),"The entity name %s is already being used more than once! Please check that your entity name is unique within the scene.") + singleton_entities[entity_name] = entity + +func get_entity(entity_name: String) -> Node: + assert(singleton_entities.has(entity_name),"Entity is not set as a singleton entity. Please define it in the editor.") + return singleton_entities[entity_name] + +func _load_pattern(pattern) -> Texture: + assert(pattern is Texture or pattern is String, "Pattern is not a valid Texture, absolute path, or built-in texture.") + if pattern is String: + if pattern.is_absolute_path(): + return load(pattern) + elif pattern == 'fade': + return null + return load("res://addons/scene_manager/shader_patterns/%s.png" % pattern) + return pattern + +func _get_final_options(initial_options: Dictionary) -> Dictionary: + var options = initial_options.duplicate() + + for key in default_options.keys(): + if not options.has(key): + options[key] = default_options[key] + + for pattern_key in ["pattern_enter", "pattern_leave"]: + options[pattern_key] = ( + _load_pattern(options[pattern_key]) + if pattern_key in options + else _load_pattern(options["pattern"]) + ) + + for ease_key in ["ease_enter", "ease_leave"]: + if not ease_key in options: + options[ease_key] = options["ease"] + + return options + +func _process(_delta: float) -> void: + if not is_instance_valid(_previous_scene) and _tree.current_scene: + _previous_scene = _tree.current_scene + _current_scene = _tree.current_scene + _set_singleton_entities() + scene_loaded.emit() + if _tree.current_scene != _previous_scene: + _previous_scene = _tree.current_scene + +func change_scene(path: Variant, setted_options: Dictionary = {}) -> void: + assert(path == null or path is String, 'Path must be a string') + var options = _get_final_options(setted_options) + if not options["skip_fade_out"]: + await fade_out(setted_options) + if not options["skip_scene_change"]: + if path == null: + _reload_scene() + else: + _replace_scene(path, options) + await _tree.create_timer(options["wait_time"]).timeout + if not options["skip_fade_in"]: + await fade_in(setted_options) + +func reload_scene(setted_options: Dictionary = {}) -> void: + await change_scene(null, setted_options) + +func _reload_scene() -> void: + _tree.reload_current_scene() + await _tree.create_timer(0.0).timeout + _current_scene = _tree.current_scene + +func fade_in_place(setted_options: Dictionary = {}) -> void: + setted_options["no_scene_change"] = true + await change_scene(null, setted_options) + +func _replace_scene(path: String, options: Dictionary) -> void: + _current_scene.queue_free() + scene_unloaded.emit() + var following_scene: PackedScene = ResourceLoader.load(path, "PackedScene", 0) + _current_scene = following_scene.instantiate() + _current_scene.tree_entered.connect(options["on_tree_enter"].bind(_current_scene)) + _current_scene.ready.connect(options["on_ready"].bind(_current_scene)) + await _tree.create_timer(0.0).timeout + _root.add_child(_current_scene) + _tree.set_current_scene(_current_scene) + +func fade_out(setted_options: Dictionary= {}) -> void: + var options = _get_final_options(setted_options) + is_transitioning = true + _animation_player.speed_scale = options["speed"] + + _shader_blend_rect.material.set_shader_parameter( + "dissolve_texture", options["pattern_enter"] + ) + _shader_blend_rect.material.set_shader_parameter("fade", !options["pattern_enter"]) + _shader_blend_rect.material.set_shader_parameter("fade_color", options["color"]) + _shader_blend_rect.material.set_shader_parameter("inverted", false) + var animation = _animation_player.get_animation("ShaderFade") + animation.track_set_key_transition(0, 0, options["ease_enter"]) + _animation_player.play("ShaderFade") + + await _animation_player.animation_finished + fade_complete.emit() + options["on_fade_out"].call() + +func fade_in(setted_options: Dictionary = {}) -> void: + var options = _get_final_options(setted_options) + _animation_player.speed_scale = options["speed"] + _shader_blend_rect.material.set_shader_parameter( + "dissolve_texture", options["pattern_leave"] + ) + _shader_blend_rect.material.set_shader_parameter("fade", !options["pattern_leave"]) + _shader_blend_rect.material.set_shader_parameter("fade_color", options["color"]) + _shader_blend_rect.material.set_shader_parameter("inverted", options["invert_on_leave"]) + var animation = _animation_player.get_animation("ShaderFade") + animation.track_set_key_transition(0, 0, options["ease_leave"]) + _animation_player.play_backwards("ShaderFade") + + await _animation_player.animation_finished + is_transitioning = false + transition_finished.emit() + options["on_fade_in"].call() diff --git a/addons/scene_manager/SceneManager.tscn b/addons/scene_manager/SceneManager.tscn new file mode 100644 index 0000000..9a96c7b --- /dev/null +++ b/addons/scene_manager/SceneManager.tscn @@ -0,0 +1,27 @@ +[gd_scene load_steps=5 format=3 uid="uid://j20v4cg7v8m1"] + +[ext_resource type="Script" path="res://addons/scene_manager/SceneManager.gd" id="1_22br8"] +[ext_resource type="Shader" path="res://addons/scene_manager/Dissolve2d.gdshader" id="2_853wq"] +[ext_resource type="Animation" uid="uid://dxr1r78uxitcq" path="res://addons/scene_manager/ShaderFade.tres" id="5_anecj"] + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_0imdi"] +shader = ExtResource( "2_853wq" ) +shader_parameter/dissolve_amount = 0.0 +shader_parameter/fade_color = Color(0, 0, 0, 1) +shader_parameter/fade = null +shader_parameter/inverted = null + +[node name="SceneManager" type="Node2D"] +script = ExtResource( "1_22br8" ) + +[node name="CanvasLayer" type="CanvasLayer" parent="."] +layer = 3 + +[node name="ColorRect" type="ColorRect" parent="CanvasLayer"] +material = SubResource( "ShaderMaterial_0imdi" ) +anchor_right = 1.0 +anchor_bottom = 1.0 +mouse_filter = 2 + +[node name="AnimationPlayer" type="AnimationPlayer" parent="."] +anims/ShaderFade = ExtResource( "5_anecj" ) diff --git a/addons/scene_manager/SceneManagerConstants.gd b/addons/scene_manager/SceneManagerConstants.gd new file mode 100644 index 0000000..1e11a57 --- /dev/null +++ b/addons/scene_manager/SceneManagerConstants.gd @@ -0,0 +1,4 @@ +class_name SceneManagerConstants extends Object + +const SINGLETON_GROUP_NAME = "scene_manager_entity_nodes" +const SINGLETON_META_NAME = "entity_name" diff --git a/addons/scene_manager/SceneManagerPlugin.gd b/addons/scene_manager/SceneManagerPlugin.gd new file mode 100644 index 0000000..9c616e5 --- /dev/null +++ b/addons/scene_manager/SceneManagerPlugin.gd @@ -0,0 +1,13 @@ +@tool +extends EditorPlugin +var _inspector_plugin + +func _enter_tree(): + add_autoload_singleton("SceneManager", "res://addons/scene_manager/SceneManager.tscn") + _inspector_plugin = load("res://addons/scene_manager/NodeFlagsInspectorPlugin.gd").new() + add_inspector_plugin(_inspector_plugin) + + +func _exit_tree(): + remove_autoload_singleton("SceneManager") + remove_inspector_plugin(_inspector_plugin) diff --git a/addons/scene_manager/ShaderFade.tres b/addons/scene_manager/ShaderFade.tres new file mode 100644 index 0000000..abe3db4 --- /dev/null +++ b/addons/scene_manager/ShaderFade.tres @@ -0,0 +1,16 @@ +[gd_resource type="Animation" format=3 uid="uid://dxr1r78uxitcq"] + +[resource] +resource_name = "ShaderFade" +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("CanvasLayer/ColorRect:material:shader_parameter/dissolve_amount") +tracks/0/interp = 2 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 1), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 1.0] +} diff --git a/addons/scene_manager/SingletonCheckProperty.gd b/addons/scene_manager/SingletonCheckProperty.gd new file mode 100644 index 0000000..1960485 --- /dev/null +++ b/addons/scene_manager/SingletonCheckProperty.gd @@ -0,0 +1,32 @@ +extends EditorProperty + +var checkbox := CheckBox.new() +var edited_control = null +var group_name = SceneManagerConstants.SINGLETON_GROUP_NAME + +func _ready(): + edited_control = get_edited_object() + + label = "Singleton entity" + + checkbox.connect("toggled", Callable(self, "_on_checkbox_checked")) + add_child(checkbox) + + +func _physics_process(_delta): + if not edited_control and get_edited_object(): + edited_control = get_edited_object() + checkbox.set_pressed_no_signal(edited_control.is_in_group(group_name)) + checkbox.text = "Yes" if checkbox.pressed else "No" + + +func _on_checkbox_checked(is_checked): + var new_groups = edited_control.get_groups() + if is_checked: + new_groups.append(group_name) + edited_control.add_to_group(group_name, true) + else: + var index = new_groups.find(group_name) + new_groups.remove(index) + edited_control.remove_from_group(group_name) + emit_changed('groups', new_groups) diff --git a/addons/scene_manager/SingletonNameProperty.gd b/addons/scene_manager/SingletonNameProperty.gd new file mode 100644 index 0000000..63ede31 --- /dev/null +++ b/addons/scene_manager/SingletonNameProperty.gd @@ -0,0 +1,34 @@ +extends EditorProperty + +var line_edit = LineEdit.new() +var edited_control = null +var meta_name = SceneManagerConstants.SINGLETON_META_NAME +var group_name = SceneManagerConstants.SINGLETON_GROUP_NAME + +func _ready(): + label = "Entity name" + + line_edit.connect("text_changed", Callable(self, "_on_text_changed")) + add_child(line_edit) + + +func _physics_process(_delta): + if not edited_control and get_edited_object(): + edited_control = get_edited_object() + if edited_control.has_meta(meta_name): + line_edit.text = edited_control.get_meta(meta_name) + if edited_control: + pass +# XXX +# draw_red = ( +# not edited_control.has_meta(meta_name) +# and edited_control.is_in_group(group_name) +# ) + + +func _on_text_changed(new_text: String): + if new_text == "": + edited_control.set_meta(meta_name, null) + else: + edited_control.set_meta(meta_name, new_text) + emit_changed("meta", new_text, meta_name) diff --git a/addons/scene_manager/icon.png b/addons/scene_manager/icon.png new file mode 100644 index 0000000..41fb36c Binary files /dev/null and b/addons/scene_manager/icon.png differ diff --git a/addons/scene_manager/icon.png.import b/addons/scene_manager/icon.png.import new file mode 100644 index 0000000..b3772de --- /dev/null +++ b/addons/scene_manager/icon.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://b7x3qxooitt0l" +path="res://.godot/imported/icon.png-1ae74eb651b355b4baf5d77f5493a2f8.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://addons/scene_manager/icon.png" +dest_files=["res://.godot/imported/icon.png-1ae74eb651b355b4baf5d77f5493a2f8.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/addons/scene_manager/plugin.cfg b/addons/scene_manager/plugin.cfg new file mode 100644 index 0000000..28388cc --- /dev/null +++ b/addons/scene_manager/plugin.cfg @@ -0,0 +1,7 @@ +[plugin] + +name="Scene Manager" +description="Scene Manager" +author="GlassBrick" +version="1.0.1" +script="SceneManagerPlugin.gd" diff --git a/addons/scene_manager/shader_patterns/circle.png b/addons/scene_manager/shader_patterns/circle.png new file mode 100644 index 0000000..7e3eb48 Binary files /dev/null and b/addons/scene_manager/shader_patterns/circle.png differ diff --git a/addons/scene_manager/shader_patterns/circle.png.import b/addons/scene_manager/shader_patterns/circle.png.import new file mode 100644 index 0000000..c30fa93 --- /dev/null +++ b/addons/scene_manager/shader_patterns/circle.png.import @@ -0,0 +1,35 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bpskbib6w4gdp" +path.s3tc="res://.godot/imported/circle.png-49deb66a2171d4476d4de5b40b7c62d8.s3tc.ctex" +metadata={ +"imported_formats": ["s3tc_bptc"], +"vram_texture": true +} + +[deps] + +source_file="res://addons/scene_manager/shader_patterns/circle.png" +dest_files=["res://.godot/imported/circle.png-49deb66a2171d4476d4de5b40b7c62d8.s3tc.ctex"] + +[params] + +compress/mode=2 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=true +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=0 diff --git a/addons/scene_manager/shader_patterns/curtains.png b/addons/scene_manager/shader_patterns/curtains.png new file mode 100644 index 0000000..c9f096e Binary files /dev/null and b/addons/scene_manager/shader_patterns/curtains.png differ diff --git a/addons/scene_manager/shader_patterns/curtains.png.import b/addons/scene_manager/shader_patterns/curtains.png.import new file mode 100644 index 0000000..ec5e7e4 --- /dev/null +++ b/addons/scene_manager/shader_patterns/curtains.png.import @@ -0,0 +1,35 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://nglientb4rxo" +path.s3tc="res://.godot/imported/curtains.png-f5a25cbc897d336641cfbab203b5832e.s3tc.ctex" +metadata={ +"imported_formats": ["s3tc_bptc"], +"vram_texture": true +} + +[deps] + +source_file="res://addons/scene_manager/shader_patterns/curtains.png" +dest_files=["res://.godot/imported/curtains.png-f5a25cbc897d336641cfbab203b5832e.s3tc.ctex"] + +[params] + +compress/mode=2 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=true +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=0 diff --git a/addons/scene_manager/shader_patterns/diagonal.png b/addons/scene_manager/shader_patterns/diagonal.png new file mode 100644 index 0000000..30ce2f9 Binary files /dev/null and b/addons/scene_manager/shader_patterns/diagonal.png differ diff --git a/addons/scene_manager/shader_patterns/diagonal.png.import b/addons/scene_manager/shader_patterns/diagonal.png.import new file mode 100644 index 0000000..fee571c --- /dev/null +++ b/addons/scene_manager/shader_patterns/diagonal.png.import @@ -0,0 +1,35 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cgmfhc32g6va6" +path.s3tc="res://.godot/imported/diagonal.png-fda70de082e7ad6bc449e3580ab09c7f.s3tc.ctex" +metadata={ +"imported_formats": ["s3tc_bptc"], +"vram_texture": true +} + +[deps] + +source_file="res://addons/scene_manager/shader_patterns/diagonal.png" +dest_files=["res://.godot/imported/diagonal.png-fda70de082e7ad6bc449e3580ab09c7f.s3tc.ctex"] + +[params] + +compress/mode=2 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=true +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=0 diff --git a/addons/scene_manager/shader_patterns/horizontal.png b/addons/scene_manager/shader_patterns/horizontal.png new file mode 100644 index 0000000..6dc32d5 Binary files /dev/null and b/addons/scene_manager/shader_patterns/horizontal.png differ diff --git a/addons/scene_manager/shader_patterns/horizontal.png.import b/addons/scene_manager/shader_patterns/horizontal.png.import new file mode 100644 index 0000000..a688c8d --- /dev/null +++ b/addons/scene_manager/shader_patterns/horizontal.png.import @@ -0,0 +1,35 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://7ypismovx1sv" +path.s3tc="res://.godot/imported/horizontal.png-350a31fe557936e31f870194c26cef69.s3tc.ctex" +metadata={ +"imported_formats": ["s3tc_bptc"], +"vram_texture": true +} + +[deps] + +source_file="res://addons/scene_manager/shader_patterns/horizontal.png" +dest_files=["res://.godot/imported/horizontal.png-350a31fe557936e31f870194c26cef69.s3tc.ctex"] + +[params] + +compress/mode=2 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=true +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=0 diff --git a/addons/scene_manager/shader_patterns/radial.png b/addons/scene_manager/shader_patterns/radial.png new file mode 100644 index 0000000..926330b Binary files /dev/null and b/addons/scene_manager/shader_patterns/radial.png differ diff --git a/addons/scene_manager/shader_patterns/radial.png.import b/addons/scene_manager/shader_patterns/radial.png.import new file mode 100644 index 0000000..4e240ba --- /dev/null +++ b/addons/scene_manager/shader_patterns/radial.png.import @@ -0,0 +1,35 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dpipc6av3p107" +path.s3tc="res://.godot/imported/radial.png-45b81257cf212bc197b861ea33052002.s3tc.ctex" +metadata={ +"imported_formats": ["s3tc_bptc"], +"vram_texture": true +} + +[deps] + +source_file="res://addons/scene_manager/shader_patterns/radial.png" +dest_files=["res://.godot/imported/radial.png-45b81257cf212bc197b861ea33052002.s3tc.ctex"] + +[params] + +compress/mode=2 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=true +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=0 diff --git a/addons/scene_manager/shader_patterns/scribbles.png b/addons/scene_manager/shader_patterns/scribbles.png new file mode 100644 index 0000000..428b956 Binary files /dev/null and b/addons/scene_manager/shader_patterns/scribbles.png differ diff --git a/addons/scene_manager/shader_patterns/scribbles.png.import b/addons/scene_manager/shader_patterns/scribbles.png.import new file mode 100644 index 0000000..4b84f71 --- /dev/null +++ b/addons/scene_manager/shader_patterns/scribbles.png.import @@ -0,0 +1,35 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bgcid7fyjtd30" +path.s3tc="res://.godot/imported/scribbles.png-430a0f7331a442eb053961f8e9bb82f0.s3tc.ctex" +metadata={ +"imported_formats": ["s3tc_bptc"], +"vram_texture": true +} + +[deps] + +source_file="res://addons/scene_manager/shader_patterns/scribbles.png" +dest_files=["res://.godot/imported/scribbles.png-430a0f7331a442eb053961f8e9bb82f0.s3tc.ctex"] + +[params] + +compress/mode=2 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=true +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=0 diff --git a/addons/scene_manager/shader_patterns/squares.png b/addons/scene_manager/shader_patterns/squares.png new file mode 100644 index 0000000..d471ef7 Binary files /dev/null and b/addons/scene_manager/shader_patterns/squares.png differ diff --git a/addons/scene_manager/shader_patterns/squares.png.import b/addons/scene_manager/shader_patterns/squares.png.import new file mode 100644 index 0000000..4f97374 --- /dev/null +++ b/addons/scene_manager/shader_patterns/squares.png.import @@ -0,0 +1,35 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://b45fitoojqhxe" +path.s3tc="res://.godot/imported/squares.png-a8c8144d665aa3e0d712474304ad6e6f.s3tc.ctex" +metadata={ +"imported_formats": ["s3tc_bptc"], +"vram_texture": true +} + +[deps] + +source_file="res://addons/scene_manager/shader_patterns/squares.png" +dest_files=["res://.godot/imported/squares.png-a8c8144d665aa3e0d712474304ad6e6f.s3tc.ctex"] + +[params] + +compress/mode=2 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=true +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=0 diff --git a/addons/scene_manager/shader_patterns/vertical.png b/addons/scene_manager/shader_patterns/vertical.png new file mode 100644 index 0000000..394ca1e Binary files /dev/null and b/addons/scene_manager/shader_patterns/vertical.png differ diff --git a/addons/scene_manager/shader_patterns/vertical.png.import b/addons/scene_manager/shader_patterns/vertical.png.import new file mode 100644 index 0000000..3ec5293 --- /dev/null +++ b/addons/scene_manager/shader_patterns/vertical.png.import @@ -0,0 +1,35 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cwci7g18k0mgh" +path.s3tc="res://.godot/imported/vertical.png-5d237b9ea3cdd66e653ef032da0bd507.s3tc.ctex" +metadata={ +"imported_formats": ["s3tc_bptc"], +"vram_texture": true +} + +[deps] + +source_file="res://addons/scene_manager/shader_patterns/vertical.png" +dest_files=["res://.godot/imported/vertical.png-5d237b9ea3cdd66e653ef032da0bd507.s3tc.ctex"] + +[params] + +compress/mode=2 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=true +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=0 diff --git a/addons/script-tabs/LICENSE b/addons/script-tabs/LICENSE new file mode 100644 index 0000000..ca61fab --- /dev/null +++ b/addons/script-tabs/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2023 Maxim Kovkel + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/addons/script-tabs/plugin.cfg b/addons/script-tabs/plugin.cfg new file mode 100644 index 0000000..13217ed --- /dev/null +++ b/addons/script-tabs/plugin.cfg @@ -0,0 +1,7 @@ +[plugin] + +name="script-tabs" +description="Move scripts list to tabs." +author="kovkel" +version="1.0.0" +script="plugin.gd" diff --git a/addons/script-tabs/plugin.gd b/addons/script-tabs/plugin.gd new file mode 100644 index 0000000..13e472a --- /dev/null +++ b/addons/script-tabs/plugin.gd @@ -0,0 +1,213 @@ +@tool +extends EditorPlugin + +const HIDE_NATIVE_LIST = true + +var _scripts_tab_container: TabContainer +var _scripts_tab_bar: TabBar +var _scripts_item_list: ItemList +var _prev_state := TabContainerState.new() +var _last_tab_selected = -1 +var _last_tab_hovered = -1 + + +func _enter_tree() -> void: + var script_editor = get_editor_interface().get_script_editor() + _scripts_tab_container = first_or_null(script_editor.find_children( + "*", "TabContainer", true, false + ) + ) + _scripts_item_list = first_or_null(script_editor.find_children( + "*", "ItemList", true, false + )) + if _scripts_tab_container: + _scripts_tab_bar = get_tab_bar_of(_scripts_tab_container) + _prev_state.save(_scripts_tab_container, _scripts_tab_bar) + _scripts_tab_container.tabs_visible = true + _scripts_tab_container.drag_to_rearrange_enabled = true + _scripts_tab_container.sort_children.connect(_update_tabs) + if _scripts_tab_bar: + _scripts_tab_bar.tab_close_display_policy = TabBar.CLOSE_BUTTON_SHOW_ACTIVE_ONLY + _scripts_tab_bar.select_with_rmb = true + _scripts_tab_bar.drag_to_rearrange_enabled = true + _scripts_tab_bar.tab_close_pressed.connect(_on_tab_close) + _scripts_tab_bar.tab_rmb_clicked.connect(_on_tab_rmb) + _scripts_tab_bar.tab_selected.connect(_on_tab_selected) + _scripts_tab_bar.tab_hovered.connect(_on_tab_hovered) + _scripts_tab_bar.mouse_exited.connect(_on_tab_bar_mouse_exited) + _scripts_tab_bar.active_tab_rearranged.connect(_on_active_tab_rearranged) + _scripts_tab_bar.gui_input.connect(_on_scripts_tab_bar_gui_input) + if _scripts_item_list: + if HIDE_NATIVE_LIST: + _scripts_item_list.get_parent().visible = false + _scripts_item_list.property_list_changed.connect(_on_item_list_property_list_changed) + _update_tabs() + + +func _exit_tree() -> void: + if _scripts_tab_container: + _scripts_tab_bar = get_tab_bar_of(_scripts_tab_container) + _prev_state.restore(_scripts_tab_container, _scripts_tab_bar) + _scripts_tab_container.sort_children.disconnect(_update_tabs) + if _scripts_item_list: + if HIDE_NATIVE_LIST: + _scripts_item_list.get_parent().visible = true + _scripts_item_list.property_list_changed.disconnect(_on_item_list_property_list_changed) + if _scripts_tab_bar: + _scripts_tab_bar.mouse_exited.disconnect(_on_tab_bar_mouse_exited) + _scripts_tab_bar.gui_input.disconnect(_on_scripts_tab_bar_gui_input) + _scripts_tab_bar.tab_close_pressed.disconnect(_on_tab_close) + _scripts_tab_bar.tab_rmb_clicked.disconnect(_on_tab_rmb) + _scripts_tab_bar.tab_selected.disconnect(_on_tab_selected) + _scripts_tab_bar.tab_hovered.disconnect(_on_tab_hovered) + _scripts_tab_bar.active_tab_rearranged.disconnect(_on_active_tab_rearranged) + + +func _on_tab_bar_mouse_exited(): + _last_tab_hovered = -1 + + +func _on_tab_hovered(idx): + _last_tab_hovered = idx + + +func _on_scripts_tab_bar_gui_input(event: InputEvent): + if event is InputEventMouseMotion: + var tab_control = _scripts_tab_container.get_tab_control(_last_tab_hovered) + var path = '' + if tab_control: + path = tab_control.get("metadata/_edit_res_path") + _scripts_tab_bar.tooltip_text = '' if path == null else path + if _last_tab_hovered == -1: return + if event is InputEventMouseButton: + if event.is_pressed() and event.button_index == MOUSE_BUTTON_MIDDLE: + _simulate_item_clicked(_last_tab_hovered, MOUSE_BUTTON_MIDDLE) + + +func _on_active_tab_rearranged(_idx_to): + var control = _scripts_tab_container.get_tab_control(_last_tab_selected) + if not control: + return + _scripts_tab_container.move_child(control, _idx_to) + _scripts_tab_container.current_tab = _scripts_tab_container.current_tab + _trigger_script_editor_update_script_names() + + +func _on_tab_selected(tab_idx): + _last_tab_selected = tab_idx + var item_idx = _find_list_item_idx_by_tab_idx(tab_idx) + if item_idx != -1: + if not _scripts_item_list.is_selected(item_idx): + var select_scripts_item = func(): + _scripts_item_list.select(item_idx) + _scripts_item_list.item_selected.emit(item_idx) + select_scripts_item.call_deferred() + + +func _on_tab_rmb(tab_idx): + _simulate_item_clicked(tab_idx, MOUSE_BUTTON_RIGHT) + + +func _on_tab_close(tab_idx): + _simulate_item_clicked(tab_idx, MOUSE_BUTTON_MIDDLE) + + +func _on_item_list_property_list_changed(): + _update_tabs.call_deferred() + + +func _simulate_item_clicked(tab_idx, mouse_idx): + if _scripts_item_list: + var item_idx = _find_list_item_idx_by_tab_idx(tab_idx) + if item_idx != -1: + _scripts_item_list.item_clicked.emit( + item_idx, + _scripts_item_list.get_local_mouse_position(), + mouse_idx + ) + + +func _update_tabs(): + _update_tab_names() + _update_tab_icons() + + +func _update_tab_names(): + if not _scripts_tab_container or not _scripts_item_list: + return + + for item_idx in _scripts_item_list.item_count: + var tab_idx = _get_item_list_tab_idx(item_idx) + if tab_idx != -1: + _scripts_tab_container.set_tab_title( + tab_idx, _scripts_item_list.get_item_text(item_idx) + ) + + +func _update_tab_icons(): + if not _scripts_tab_container or not _scripts_item_list: + return + + for item_idx in _scripts_item_list.item_count: + var tab_idx = _get_item_list_tab_idx(item_idx) + if tab_idx != -1: + _scripts_tab_container.set_tab_icon( + tab_idx, _scripts_item_list.get_item_icon(item_idx) + ) + + +func _get_item_list_tab_idx(item_idx) -> int: + var metadata = _scripts_item_list.get_item_metadata(item_idx) + if not metadata is int: + return -1 + else: + return metadata + + +func _find_list_item_idx_by_tab_idx(tab_idx) -> int: + for i in _scripts_item_list.item_count: + if _scripts_item_list.get_item_metadata(i) == tab_idx: + return i + return -1 + + +func _trigger_script_editor_update_script_names(): + var script_editor = get_editor_interface().get_script_editor() + # for now it is the only way to trigger script_edtior._update_script_names + script_editor.notification(Control.NOTIFICATION_THEME_CHANGED) + + +static func first_or_null(arr): + if len(arr) == 0: + return null + return arr[0] + + +static func get_tab_bar_of(src) -> TabBar: + for c in src.get_children(true): + if c is TabBar: + return c + return null + + +class TabContainerState: + var _tabs_visible + var _drag_to_rearrange_enabled + var _tab_close_display_policy + var _select_with_rmb + + func save(src: TabContainer, tab_bar: TabBar): + if src: + _tabs_visible = src.tabs_visible + if tab_bar: + _drag_to_rearrange_enabled = tab_bar.drag_to_rearrange_enabled + _tab_close_display_policy = tab_bar.tab_close_display_policy + _select_with_rmb = tab_bar.select_with_rmb + + func restore(src: TabContainer, tab_bar: TabBar): + if src: + src.tabs_visible = _tabs_visible + if tab_bar: + tab_bar.drag_to_rearrange_enabled = _drag_to_rearrange_enabled + tab_bar.tab_close_display_policy = _tab_close_display_policy + tab_bar.select_with_rmb = _select_with_rmb diff --git a/assets/animations/player_animation.tres b/assets/animations/player_animation.tres new file mode 100644 index 0000000..938ca26 --- /dev/null +++ b/assets/animations/player_animation.tres @@ -0,0 +1,129 @@ +[gd_resource type="SpriteFrames" load_steps=16 format=3 uid="uid://dum0mxk5oajvu"] + +[ext_resource type="Texture2D" uid="uid://bieln87fe7533" path="res://assets/textures/character.png" id="1_06o7x"] + +[sub_resource type="AtlasTexture" id="AtlasTexture_m52mq"] +atlas = ExtResource("1_06o7x") +region = Rect2(0, 0, 16, 36) + +[sub_resource type="AtlasTexture" id="AtlasTexture_4nxqo"] +atlas = ExtResource("1_06o7x") +region = Rect2(216, 0, 16, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_6lthj"] +atlas = ExtResource("1_06o7x") +region = Rect2(0, 64, 16, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_0bexk"] +atlas = ExtResource("1_06o7x") +region = Rect2(16, 64, 16, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_oehvp"] +atlas = ExtResource("1_06o7x") +region = Rect2(32, 64, 16, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_65p5i"] +atlas = ExtResource("1_06o7x") +region = Rect2(48, 64, 16, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_lir7y"] +atlas = ExtResource("1_06o7x") +region = Rect2(0, 0, 16, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_qctxi"] +atlas = ExtResource("1_06o7x") +region = Rect2(16, 0, 16, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_3se7e"] +atlas = ExtResource("1_06o7x") +region = Rect2(32, 0, 16, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_2ixv7"] +atlas = ExtResource("1_06o7x") +region = Rect2(48, 0, 16, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_cpgi2"] +atlas = ExtResource("1_06o7x") +region = Rect2(0, 32, 16, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_22k82"] +atlas = ExtResource("1_06o7x") +region = Rect2(16, 32, 16, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_xitbn"] +atlas = ExtResource("1_06o7x") +region = Rect2(32, 32, 16, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_ntwlo"] +atlas = ExtResource("1_06o7x") +region = Rect2(48, 32, 16, 32) + +[resource] +animations = [{ +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_m52mq") +}], +"loop": true, +"name": &"idle", +"speed": 1.0 +}, { +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_4nxqo") +}], +"loop": true, +"name": &"pick_item", +"speed": 1.0 +}, { +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_6lthj") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_0bexk") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_oehvp") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_65p5i") +}], +"loop": true, +"name": &"walk_back", +"speed": 7.0 +}, { +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_lir7y") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_qctxi") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_3se7e") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_2ixv7") +}], +"loop": true, +"name": &"walk_front", +"speed": 7.0 +}, { +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_cpgi2") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_22k82") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_xitbn") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_ntwlo") +}], +"loop": true, +"name": &"walk_side", +"speed": 7.0 +}] diff --git a/assets/resources/save_resource.gd b/assets/resources/save_resource.gd new file mode 100644 index 0000000..c287c6a --- /dev/null +++ b/assets/resources/save_resource.gd @@ -0,0 +1,4 @@ +class_name SaveResource extends Resource + +var scene: Constants.LEVELS_NAMES +var player_position: Vector2 diff --git a/assets/resources/save_resource.tres b/assets/resources/save_resource.tres new file mode 100644 index 0000000..0e4e2d0 --- /dev/null +++ b/assets/resources/save_resource.tres @@ -0,0 +1,6 @@ +[gd_resource type="Resource" script_class="SaveResource" load_steps=2 format=3 uid="uid://ci0v1u7i67vvu"] + +[ext_resource type="Script" path="res://assets/resources/save_resource.gd" id="1_ohq41"] + +[resource] +script = ExtResource("1_ohq41") diff --git a/assets/shaders/water.gdshader b/assets/shaders/water.gdshader new file mode 100644 index 0000000..022d090 --- /dev/null +++ b/assets/shaders/water.gdshader @@ -0,0 +1,134 @@ +// source: https://godotshaders.com/shader/pixel-art-water/ +shader_type canvas_item; + +uniform float aspectRatio = 1.0f; +uniform float pixelization = 2048.0f; + +uniform sampler2D waterDepthGradient : hint_default_black; + +uniform vec4 causticColor = vec4(0.455f, 0.773f, 0.765f, 1.0f); +uniform vec4 causticHighlightColor = vec4(0.741f, 0.894f, 0.898f, 1.0f); +uniform sampler2D causticTexture : hint_default_white, repeat_enable; +uniform sampler2D causticHighlightTexture : hint_default_white, repeat_enable; +uniform sampler2D causticNoiseTexture : hint_default_white, repeat_enable; +uniform sampler2D causticFadeNoiseTexture : hint_default_white, repeat_enable; +uniform float causticScale = 12.0f; +uniform float causticSpeed = 0.005f; +uniform float causticMovementAmount = 0.15f; +uniform float causticFaderMultiplier = 1.45f; + +uniform vec4 specularColor = vec4(1.0f, 1.0f, 1.0f, 1.0f); +uniform sampler2D specularNoiseTexture : hint_default_white, repeat_enable; +uniform sampler2D specularMovementLeftNoiseTexture : hint_default_white, repeat_enable; +uniform sampler2D specularMovementRightNoiseTexture : hint_default_white, repeat_enable; +uniform float specularThreshold = 0.35f; +uniform float specularSpeed = 0.025f; +uniform float specularScale = 15.0f; + +uniform vec4 foamColor = vec4(1.0f, 1.0f, 1.0f, 1.0f); +uniform sampler2D foamTexture : hint_default_white, repeat_enable; +uniform float foamIntensity = 0.2f; +uniform float foamScale = 15.0f; + +uniform vec4 outlineColor = vec4(0.675f, 0.86f, 1.0f, 1.0f); +uniform float generalTransparency = 1.0f; + + +// ------------------------------------------------------------------------------------ +// Helper functions + +// Blends two vec2's by subtracting them. Compare this to Photoshop blend mode "Subtract". +// Source: +// https://docs.unity3d.com/Packages/com.unity.shadergraph@6.9/manual/Blend-Node.html +vec2 blendSubtract_vec2(vec2 base, vec2 blend, float opacity) +{ + vec2 result = base - blend; + return mix(base, result, opacity); +} + +// Blends two floats by subtracting them. Compare this to Photoshop blend mode "Subtract". +// Source: +// https://docs.unity3d.com/Packages/com.unity.shadergraph@6.9/manual/Blend-Node.html +float blendSubtract_float(float base, float blend, float opacity) +{ + float result = base - blend; + return mix(base, result, opacity); +} + +// Blends two vec2's by overlaying them. Compare this to Photoshop blend mode "Overlay". +// Source: +// https://docs.unity3d.com/Packages/com.unity.shadergraph@6.9/manual/Blend-Node.html +float blendOverlay_float(float base, float blend, float opacity) +{ + float result1 = 1.0f - 2.0f * (1.0f - base) * (1.0f - blend); + float result2 = 2.0f * base * blend; + float zeroOrOne = step(0.5f, base); + float res = result2 * zeroOrOne + (1.0 - zeroOrOne) * result1; + return mix(base, res, opacity); +} + +// Pixelizes the given coordinate. +vec2 pixelizeCoordinates(vec2 coordinates) +{ + return floor(coordinates * pixelization) / pixelization; +} + +// Applies the aspect ratio to the coordinates. +vec2 applyAspectRatio(vec2 coordinates) +{ + return vec2(coordinates.x, coordinates.y * aspectRatio); +} + +// ------------------------------------------------------------------------------------ +// Shader layers + +vec4 caustics(vec2 pixelizedCoordinates) +{ + vec4 causticNoise = texture(causticNoiseTexture, TIME * causticSpeed + pixelizedCoordinates); + vec2 noiseCoordinates = blendSubtract_vec2(pixelizedCoordinates * causticScale, causticNoise.rg, causticMovementAmount); + vec4 causticHighlight = texture(causticHighlightTexture, noiseCoordinates) * causticHighlightColor; + vec4 caustic = texture(causticTexture, noiseCoordinates) * causticColor; + vec4 interpolatedCaustics = mix(caustic, causticHighlight, causticHighlight.a); + float fadeNoise = texture(causticFadeNoiseTexture, noiseCoordinates).r * causticFaderMultiplier; + return vec4(interpolatedCaustics.r, interpolatedCaustics.g, interpolatedCaustics.b, clamp(interpolatedCaustics.a - fadeNoise, 0.0, 1.0)); +} + +vec4 specular(vec2 pixelizedCoordinates) +{ + vec2 scaledCoordinates = pixelizedCoordinates * specularScale; + float specularNoise = texture(specularNoiseTexture, scaledCoordinates).r; + float leftScrollingNoise = texture(specularMovementLeftNoiseTexture, scaledCoordinates + vec2(TIME * specularSpeed, 0.0f)).r; + float rightScrollingNoise = texture(specularMovementRightNoiseTexture, scaledCoordinates + vec2(TIME * specularSpeed * -1.0f, 0.0f)).r; + return step(specularThreshold, blendSubtract_float(blendOverlay_float(leftScrollingNoise, rightScrollingNoise, 1.0f), specularNoise, 1.0f)) * specularColor; +} + +vec4 foam(vec2 pixelizedCoordinates, vec4 mainTexColor) +{ + vec4 colorizedFoam = texture(foamTexture, pixelizedCoordinates * foamScale) * foamColor; + float intensity = clamp(mainTexColor.g * mainTexColor.a - foamIntensity, 0.0f, 1.0f); + return vec4(colorizedFoam.r, colorizedFoam.g, colorizedFoam.b, colorizedFoam.a * intensity); +} + +// ------------------------------------------------------------------------------------ +// Fragment Shader code + +void fragment() +{ + vec2 pixelizedCoordinates = pixelizeCoordinates(applyAspectRatio(UV)); + vec4 mainTex = texture(TEXTURE, UV); + vec4 depthBasedWaterColor = texture(waterDepthGradient, vec2(1.0f - mainTex.b, 1.0f)); + + vec4 finalCaustics = caustics(pixelizedCoordinates); + vec4 finalSpecular = specular(pixelizedCoordinates); + vec4 finalFoam = foam(pixelizedCoordinates, mainTex); + + vec4 waterWithCausticLayer = mix(depthBasedWaterColor, finalCaustics, finalCaustics.a); + vec4 waterWithCausticAndSpecularLayer = mix(waterWithCausticLayer, finalSpecular, ceil(finalCaustics.a) * finalSpecular.a); + vec4 waterWithCausticAndSpecularAndFoamLayer = mix(waterWithCausticAndSpecularLayer, finalFoam, finalFoam.a); + + float outline = mainTex.a * mainTex.r; + vec4 finalOutlineColor = outline * outlineColor; + + vec4 finalRGBColor = mix(waterWithCausticAndSpecularAndFoamLayer, finalOutlineColor, outline); + COLOR = vec4(finalRGBColor.r, finalRGBColor.g, finalRGBColor.b, mainTex.b * generalTransparency); +} \ No newline at end of file diff --git a/assets/textures/Inner.png b/assets/textures/Inner.png new file mode 100644 index 0000000..a07be97 Binary files /dev/null and b/assets/textures/Inner.png differ diff --git a/assets/textures/Inner.png.import b/assets/textures/Inner.png.import new file mode 100644 index 0000000..d8b61f4 --- /dev/null +++ b/assets/textures/Inner.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://d4j4ulftsvn5c" +path="res://.godot/imported/Inner.png-8dae7d1b6be963567fa029c7fbda5eac.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/textures/Inner.png" +dest_files=["res://.godot/imported/Inner.png-8dae7d1b6be963567fa029c7fbda5eac.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/textures/NPC_test.png b/assets/textures/NPC_test.png new file mode 100644 index 0000000..4e3c1c9 Binary files /dev/null and b/assets/textures/NPC_test.png differ diff --git a/assets/textures/NPC_test.png.import b/assets/textures/NPC_test.png.import new file mode 100644 index 0000000..b428e8e --- /dev/null +++ b/assets/textures/NPC_test.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cb0hu1gyv0wg" +path="res://.godot/imported/NPC_test.png-a07e6bba6829e6d0cf0f0ac2c7f0dfdf.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/textures/NPC_test.png" +dest_files=["res://.godot/imported/NPC_test.png-a07e6bba6829e6d0cf0f0ac2c7f0dfdf.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/textures/Overworld.png b/assets/textures/Overworld.png new file mode 100644 index 0000000..c03c380 Binary files /dev/null and b/assets/textures/Overworld.png differ diff --git a/assets/textures/Overworld.png.import b/assets/textures/Overworld.png.import new file mode 100644 index 0000000..33f10f4 --- /dev/null +++ b/assets/textures/Overworld.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bj3fteudhyal6" +path="res://.godot/imported/Overworld.png-e315fbbcf5bdc25194885c8807eb08a7.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/textures/Overworld.png" +dest_files=["res://.godot/imported/Overworld.png-e315fbbcf5bdc25194885c8807eb08a7.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/textures/cave.png b/assets/textures/cave.png new file mode 100644 index 0000000..1df7b3e Binary files /dev/null and b/assets/textures/cave.png differ diff --git a/assets/textures/cave.png.import b/assets/textures/cave.png.import new file mode 100644 index 0000000..3b93a1f --- /dev/null +++ b/assets/textures/cave.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://b4uxpn3r3muim" +path="res://.godot/imported/cave.png-f8be29d1f2c7bcc38711ae73d96021ca.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/textures/cave.png" +dest_files=["res://.godot/imported/cave.png-f8be29d1f2c7bcc38711ae73d96021ca.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/textures/character.png b/assets/textures/character.png new file mode 100644 index 0000000..a50ceb0 Binary files /dev/null and b/assets/textures/character.png differ diff --git a/assets/textures/character.png.import b/assets/textures/character.png.import new file mode 100644 index 0000000..980dbab --- /dev/null +++ b/assets/textures/character.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bieln87fe7533" +path="res://.godot/imported/character.png-eb7682b625186be15380dfb417abf04b.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/textures/character.png" +dest_files=["res://.godot/imported/character.png-eb7682b625186be15380dfb417abf04b.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/textures/font.png b/assets/textures/font.png new file mode 100644 index 0000000..0128151 Binary files /dev/null and b/assets/textures/font.png differ diff --git a/assets/textures/font.png.import b/assets/textures/font.png.import new file mode 100644 index 0000000..2dd331b --- /dev/null +++ b/assets/textures/font.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dullrv8en6u01" +path="res://.godot/imported/font.png-de8fd18f5403d270eb35a6d0e08b006f.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/textures/font.png" +dest_files=["res://.godot/imported/font.png-de8fd18f5403d270eb35a6d0e08b006f.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/textures/log.png b/assets/textures/log.png new file mode 100644 index 0000000..b952a9a Binary files /dev/null and b/assets/textures/log.png differ diff --git a/assets/textures/log.png.import b/assets/textures/log.png.import new file mode 100644 index 0000000..8703b69 --- /dev/null +++ b/assets/textures/log.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bdmfufth6l6ib" +path="res://.godot/imported/log.png-60efc52c78f0cf441c4603014cef1389.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/textures/log.png" +dest_files=["res://.godot/imported/log.png-60efc52c78f0cf441c4603014cef1389.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/textures/objects.png b/assets/textures/objects.png new file mode 100644 index 0000000..f76813f Binary files /dev/null and b/assets/textures/objects.png differ diff --git a/assets/textures/objects.png.import b/assets/textures/objects.png.import new file mode 100644 index 0000000..0a871e0 --- /dev/null +++ b/assets/textures/objects.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bpwdgjw2mw2xc" +path="res://.godot/imported/objects.png-b847ac66b4012096f361a4c6b05392d3.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/textures/objects.png" +dest_files=["res://.godot/imported/objects.png-b847ac66b4012096f361a4c6b05392d3.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/icon.svg b/icon.svg new file mode 100644 index 0000000..3fe4f4a --- /dev/null +++ b/icon.svg @@ -0,0 +1 @@ + diff --git a/icon.svg.import b/icon.svg.import new file mode 100644 index 0000000..ed747e2 --- /dev/null +++ b/icon.svg.import @@ -0,0 +1,37 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cuvqgno4i1wuh" +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/project.godot b/project.godot new file mode 100644 index 0000000..08e08f4 --- /dev/null +++ b/project.godot @@ -0,0 +1,67 @@ +; 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="RPG template" +run/main_scene="res://scenes/main_level.tscn" +config/features=PackedStringArray("4.3", "Forward Plus") +config/icon="res://icon.svg" + +[autoload] + +Constants="*res://scripts/constants.gd" +SaveSystem="*res://addons/save_system/save_system.gd" +SceneManager="*res://addons/scene_manager/SceneManager.tscn" +PhantomCameraManager="*res://addons/phantom_camera/scripts/managers/phantom_camera_manager.gd" +Globals="*res://scripts/globals.gd" + +[editor_plugins] + +enabled=PackedStringArray("res://addons/label_font_auto_sizer/plugin.cfg", "res://addons/phantom_camera/plugin.cfg", "res://addons/save_system/plugin.cfg", "res://addons/scene_manager/plugin.cfg", "res://addons/script-tabs/plugin.cfg") + +[input] + +ui_left={ +"deadzone": 0.5, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194319,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) +, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":13,"pressure":0.0,"pressed":false,"script":null) +, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":0,"axis_value":-1.0,"script":null) +, 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":65,"key_label":0,"unicode":97,"location":0,"echo":false,"script":null) +] +} +ui_right={ +"deadzone": 0.5, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194321,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) +, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":14,"pressure":0.0,"pressed":false,"script":null) +, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":0,"axis_value":1.0,"script":null) +, 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":68,"key_label":0,"unicode":100,"location":0,"echo":false,"script":null) +] +} +ui_up={ +"deadzone": 0.5, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194320,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) +, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":11,"pressure":0.0,"pressed":false,"script":null) +, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":1,"axis_value":-1.0,"script":null) +, 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":87,"key_label":0,"unicode":119,"location":0,"echo":false,"script":null) +] +} +ui_down={ +"deadzone": 0.5, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194322,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) +, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":12,"pressure":0.0,"pressed":false,"script":null) +, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":1,"axis_value":1.0,"script":null) +, 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":83,"key_label":0,"unicode":115,"location":0,"echo":false,"script":null) +] +} + +[rendering] + +textures/canvas_textures/default_texture_filter=0 diff --git a/scenes/elements/door_scene_manager.tscn b/scenes/elements/door_scene_manager.tscn new file mode 100644 index 0000000..929c15d --- /dev/null +++ b/scenes/elements/door_scene_manager.tscn @@ -0,0 +1,29 @@ +[gd_scene load_steps=3 format=3 uid="uid://da1uex028xkv1"] + +[ext_resource type="Script" path="res://scripts/door_scene_manager.gd" id="1_ph76m"] + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_sglud"] +size = Vector2(14, 20) + +[node name="DoorSceneManager" type="Node2D"] +script = ExtResource("1_ph76m") + +[node name="Area2D" type="Area2D" parent="."] + +[node name="CollisionShape2D" type="CollisionShape2D" parent="Area2D"] +shape = SubResource("RectangleShape2D_sglud") + +[node name="editor_icon" type="Line2D" parent="."] +z_index = 4096 +z_as_relative = false +position = Vector2(0, 0.937227) +scale = Vector2(1, 1.11715) +points = PackedVector2Array(-7, 7.5, -2, 7.21725, -2, -0.838942, -6, -0.838942, 0, -9, 6, -0.838942, 2, -0.838942, 2, 7.21725, 7, 7.5) +closed = true +width = 1.0 +default_color = Color(1, 0, 0.360784, 1) +sharp_limit = 3.0 +round_precision = 1 + +[connection signal="body_entered" from="Area2D" to="." method="_on_area_2d_body_entered"] +[connection signal="body_exited" from="Area2D" to="." method="_on_area_2d_body_exited"] diff --git a/scenes/elements/player.tscn b/scenes/elements/player.tscn new file mode 100644 index 0000000..c83d6c0 --- /dev/null +++ b/scenes/elements/player.tscn @@ -0,0 +1,21 @@ +[gd_scene load_steps=4 format=3 uid="uid://k76535tjepm3"] + +[ext_resource type="Script" path="res://scripts/player.gd" id="1_1webx"] +[ext_resource type="SpriteFrames" uid="uid://dum0mxk5oajvu" path="res://assets/animations/player_animation.tres" id="1_qf5ok"] + +[sub_resource type="CapsuleShape2D" id="CapsuleShape2D_geqid"] +radius = 6.0 +height = 18.0 + +[node name="Player" type="CharacterBody2D"] +script = ExtResource("1_1webx") + +[node name="CollisionShape2D" type="CollisionShape2D" parent="."] +position = Vector2(0, -9) +shape = SubResource("CapsuleShape2D_geqid") + +[node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="."] +position = Vector2(0, -8) +sprite_frames = ExtResource("1_qf5ok") +animation = &"idle" +frame_progress = 0.577081 diff --git a/scenes/house_template.tscn b/scenes/house_template.tscn new file mode 100644 index 0000000..14fa3ed --- /dev/null +++ b/scenes/house_template.tscn @@ -0,0 +1,486 @@ +[gd_scene load_steps=6 format=4 uid="uid://bk4h1frr4r8tq"] + +[ext_resource type="Texture2D" uid="uid://d4j4ulftsvn5c" path="res://assets/textures/Inner.png" id="1_w2ggh"] +[ext_resource type="PackedScene" uid="uid://k76535tjepm3" path="res://scenes/elements/player.tscn" id="2_07rl6"] +[ext_resource type="PackedScene" uid="uid://da1uex028xkv1" path="res://scenes/elements/door_scene_manager.tscn" id="3_3eu8f"] + +[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_q4fiy"] +texture = ExtResource("1_w2ggh") +0:0/0 = 0 +1:0/0 = 0 +1:0/0/z_index = -1 +2:0/0 = 0 +2:0/0/z_index = -1 +3:0/0 = 0 +3:0/0/z_index = -1 +4:0/0 = 0 +4:0/0/z_index = -1 +5:0/0 = 0 +5:0/0/z_index = -1 +6:0/0 = 0 +6:0/0/z_index = -1 +7:0/0 = 0 +7:0/0/z_index = -1 +8:0/0 = 0 +8:0/0/z_index = -1 +9:0/0 = 0 +10:0/0 = 0 +11:0/0 = 0 +12:0/0 = 0 +12:0/0/z_index = 1 +13:0/0 = 0 +13:0/0/z_index = 1 +14:0/0 = 0 +14:0/0/z_index = 1 +15:0/0 = 0 +15:0/0/z_index = 1 +16:0/0 = 0 +16:0/0/z_index = 1 +17:0/0 = 0 +17:0/0/z_index = 1 +0:1/0 = 0 +0:1/0/z_index = -1 +1:1/0 = 0 +1:1/0/z_index = -1 +2:1/0 = 0 +2:1/0/z_index = -1 +3:1/0 = 0 +3:1/0/z_index = -1 +4:1/0 = 0 +4:1/0/z_index = -1 +5:1/0 = 0 +5:1/0/z_index = -1 +6:1/0 = 0 +6:1/0/z_index = -1 +7:1/0 = 0 +7:1/0/z_index = -1 +8:1/0 = 0 +8:1/0/z_index = -1 +9:1/0 = 0 +16:1/0 = 0 +16:1/0/z_index = 1 +17:1/0 = 0 +17:1/0/z_index = 1 +18:1/0 = 0 +18:1/0/z_index = 1 +19:1/0 = 0 +19:1/0/z_index = 1 +20:1/0 = 0 +20:1/0/z_index = 1 +21:1/0 = 0 +21:1/0/z_index = 1 +0:2/0 = 0 +0:2/0/z_index = -1 +1:2/0 = 0 +1:2/0/z_index = -1 +2:2/0 = 0 +2:2/0/z_index = -1 +3:2/0 = 0 +3:2/0/z_index = -1 +4:2/0 = 0 +5:2/0 = 0 +5:2/0/z_index = -1 +6:2/0 = 0 +6:2/0/z_index = -1 +7:2/0 = 0 +7:2/0/z_index = -1 +8:2/0 = 0 +8:2/0/z_index = -1 +9:2/0 = 0 +9:2/0/z_index = -1 +16:2/0 = 0 +16:2/0/z_index = 1 +17:2/0 = 0 +17:2/0/z_index = 1 +18:2/0 = 0 +18:2/0/z_index = 1 +19:2/0 = 0 +19:2/0/z_index = 1 +20:2/0 = 0 +20:2/0/z_index = 1 +21:2/0 = 0 +21:2/0/z_index = 1 +0:3/0 = 0 +0:3/0/z_index = -1 +1:3/0 = 0 +1:3/0/z_index = -1 +2:3/0 = 0 +2:3/0/z_index = -1 +3:3/0 = 0 +3:3/0/z_index = -1 +4:3/0 = 0 +5:3/0 = 0 +5:3/0/z_index = -1 +6:3/0 = 0 +6:3/0/z_index = -1 +7:3/0 = 0 +7:3/0/z_index = -1 +8:3/0 = 0 +8:3/0/z_index = -1 +9:3/0 = 0 +9:3/0/z_index = -1 +16:3/0 = 0 +16:3/0/z_index = 1 +17:3/0 = 0 +17:3/0/z_index = 1 +18:3/0 = 0 +18:3/0/z_index = 1 +19:3/0 = 0 +19:3/0/z_index = 1 +20:3/0 = 0 +20:3/0/z_index = 1 +21:3/0 = 0 +21:3/0/z_index = 1 +0:4/0 = 0 +0:4/0/z_index = -1 +1:4/0 = 0 +1:4/0/z_index = -1 +2:4/0 = 0 +2:4/0/z_index = -1 +3:4/0 = 0 +3:4/0/z_index = -1 +4:4/0 = 0 +5:4/0 = 0 +5:4/0/z_index = -1 +6:4/0 = 0 +6:4/0/z_index = -1 +7:4/0 = 0 +8:4/0 = 0 +9:4/0 = 0 +9:4/0/z_index = 1 +10:4/0 = 0 +10:4/0/z_index = 1 +11:4/0 = 0 +11:4/0/z_index = 1 +12:4/0 = 0 +12:4/0/z_index = 1 +13:4/0 = 0 +13:4/0/z_index = 1 +14:4/0 = 0 +14:4/0/z_index = 1 +0:5/0 = 0 +0:5/0/z_index = -1 +1:5/0 = 0 +1:5/0/z_index = -1 +2:5/0 = 0 +2:5/0/z_index = -1 +3:5/0 = 0 +3:5/0/z_index = -1 +4:5/0 = 0 +5:5/0 = 0 +5:5/0/z_index = -1 +6:5/0 = 0 +6:5/0/z_index = -1 +7:5/0 = 0 +8:5/0 = 0 +9:5/0 = 0 +9:5/0/z_index = 1 +10:5/0 = 0 +10:5/0/z_index = 1 +11:5/0 = 0 +11:5/0/z_index = 1 +12:5/0 = 0 +12:5/0/z_index = 1 +13:5/0 = 0 +13:5/0/z_index = 1 +14:5/0 = 0 +14:5/0/z_index = 1 +0: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 +10:6/0/z_index = 1 +11:6/0 = 0 +11:6/0/z_index = 1 +12:6/0 = 0 +12:6/0/z_index = 1 +13:6/0 = 0 +13:6/0/z_index = 1 +14:6/0 = 0 +14:6/0/z_index = 1 +0:7/0 = 0 +0:7/0/z_index = 1 +1:7/0 = 0 +1:7/0/z_index = 1 +2:7/0 = 0 +2:7/0/z_index = 1 +3:7/0 = 0 +3:7/0/z_index = 1 +4:7/0 = 0 +4:7/0/z_index = 1 +5:7/0 = 0 +5:7/0/z_index = 1 +6:7/0 = 0 +6:7/0/z_index = 1 +7:7/0 = 0 +7:7/0/z_index = 1 +8:7/0 = 0 +8:7/0/z_index = 1 +9:7/0 = 0 +9:7/0/z_index = 1 +10:7/0 = 0 +10:7/0/z_index = 1 +11:7/0 = 0 +11:7/0/z_index = 1 +12:7/0 = 0 +12:7/0/z_index = 1 +13:7/0 = 0 +13:7/0/z_index = 1 +14:7/0 = 0 +14:7/0/z_index = 1 +15:7/0 = 0 +15:7/0/z_index = 1 +16:7/0 = 0 +16:7/0/z_index = 1 +0:8/0 = 0 +0:8/0/z_index = 1 +1:8/0 = 0 +1:8/0/z_index = 1 +2:8/0 = 0 +2:8/0/z_index = 1 +3:8/0 = 0 +3:8/0/z_index = 1 +4:8/0 = 0 +4:8/0/z_index = 1 +5:8/0 = 0 +5:8/0/z_index = 1 +6:8/0 = 0 +6:8/0/z_index = 1 +7:8/0 = 0 +7:8/0/z_index = 1 +8:8/0 = 0 +8:8/0/z_index = 1 +9:8/0 = 0 +9:8/0/z_index = 1 +10:8/0 = 0 +10:8/0/z_index = 1 +11:8/0 = 0 +11:8/0/z_index = 1 +12:8/0 = 0 +12:8/0/z_index = 1 +13:8/0 = 0 +13:8/0/z_index = 1 +14:8/0 = 0 +14:8/0/z_index = 1 +15:8/0 = 0 +15:8/0/z_index = 1 +16:8/0 = 0 +0:9/0 = 0 +0:9/0/z_index = 1 +1:9/0 = 0 +1:9/0/z_index = 1 +2:9/0 = 0 +2:9/0/z_index = 1 +3:9/0 = 0 +3:9/0/z_index = 1 +4:9/0 = 0 +4:9/0/z_index = 1 +5:9/0 = 0 +5:9/0/z_index = 1 +6:9/0 = 0 +6:9/0/z_index = 1 +7:9/0 = 0 +7:9/0/z_index = 1 +8:9/0 = 0 +8:9/0/z_index = 1 +9:9/0 = 0 +10:9/0 = 0 +10:9/0/z_index = 1 +11:9/0 = 0 +12:9/0 = 0 +12:9/0/z_index = 1 +13:9/0 = 0 +13:9/0/z_index = 1 +14:9/0 = 0 +14:9/0/z_index = 1 +15:9/0 = 0 +15:9/0/z_index = 1 +16:9/0 = 0 +16:9/0/z_index = 1 +0:10/0 = 0 +0:10/0/z_index = 1 +1:10/0 = 0 +1:10/0/z_index = 1 +2:10/0 = 0 +2:10/0/z_index = 1 +3:10/0 = 0 +3:10/0/z_index = 1 +4:10/0 = 0 +4:10/0/z_index = 1 +5:10/0 = 0 +5:10/0/z_index = 1 +6:10/0 = 0 +6:10/0/z_index = 1 +7:10/0 = 0 +7:10/0/z_index = 1 +8:10/0 = 0 +8:10/0/z_index = 1 +9:10/0 = 0 +9:10/0/z_index = 1 +10:10/0 = 0 +10:10/0/z_index = 1 +11:10/0 = 0 +12:10/0 = 0 +12:10/0/z_index = 1 +13:10/0 = 0 +13:10/0/z_index = 1 +0:11/0 = 0 +0:11/0/z_index = 1 +1:11/0 = 0 +1:11/0/z_index = 1 +2:11/0 = 0 +2:11/0/z_index = 1 +3:11/0 = 0 +3:11/0/z_index = 1 +4:11/0 = 0 +4:11/0/z_index = 1 +5:11/0 = 0 +5:11/0/z_index = 1 +6:11/0 = 0 +6:11/0/z_index = 1 +7:11/0 = 0 +7:11/0/z_index = 1 +8:11/0 = 0 +8:11/0/z_index = 1 +9:11/0 = 0 +9:11/0/z_index = 1 +10:11/0 = 0 +10:11/0/z_index = 1 +11:11/0 = 0 +11:11/0/z_index = 1 +12:11/0 = 0 +12:11/0/z_index = 1 +13:11/0 = 0 +13:11/0/z_index = 1 +0:12/0 = 0 +0:12/0/z_index = 1 +1:12/0 = 0 +1:12/0/z_index = 1 +2:12/0 = 0 +2:12/0/z_index = 1 +3:12/0 = 0 +3:12/0/z_index = 1 +4:12/0 = 0 +4:12/0/z_index = 1 +5:12/0 = 0 +5:12/0/z_index = 1 +6:12/0 = 0 +6:12/0/z_index = 1 +7:12/0 = 0 +7:12/0/z_index = 1 +8:12/0 = 0 +8:12/0/z_index = 1 +9:12/0 = 0 +9:12/0/z_index = 1 +10:12/0 = 0 +10:12/0/z_index = 1 +11:12/0 = 0 +11:12/0/z_index = 1 +12:12/0 = 0 +12:12/0/z_index = 1 +13:12/0 = 0 +13:12/0/z_index = 1 +0:13/0 = 0 +0:13/0/z_index = 1 +1:13/0 = 0 +1:13/0/z_index = 1 +2:13/0 = 0 +2:13/0/z_index = 1 +3:13/0 = 0 +3:13/0/z_index = 1 +4:13/0 = 0 +4:13/0/z_index = 1 +5:13/0 = 0 +5:13/0/z_index = 1 +6:13/0 = 0 +6:13/0/z_index = 1 +7:13/0 = 0 +7:13/0/z_index = 1 +8:13/0 = 0 +8:13/0/z_index = 1 +0:14/0 = 0 +0:14/0/z_index = 1 +1:14/0 = 0 +1:14/0/z_index = 1 +2:14/0 = 0 +2:14/0/z_index = 1 +3:14/0 = 0 +3:14/0/z_index = 1 +4:14/0 = 0 +4:14/0/z_index = 1 +6:14/0 = 0 +6:14/0/z_index = 1 +7:14/0 = 0 +7:14/0/z_index = 1 +0:15/0 = 0 +1:15/0 = 0 +1:15/0/z_index = 1 +2:15/0 = 0 +2:15/0/z_index = 1 +3:15/0 = 0 +3:15/0/z_index = 1 +4:15/0 = 0 +4:15/0/z_index = 1 +6:15/0 = 0 +6:15/0/z_index = 1 +7:15/0 = 0 +7:15/0/z_index = 1 +0:16/0 = 0 +0:16/0/z_index = 1 +1:16/0 = 0 +1:16/0/z_index = 1 +2:16/0 = 0 +2:16/0/z_index = 1 +3:16/0 = 0 +3:16/0/z_index = 1 +4:16/0 = 0 +4:16/0/z_index = 1 +2:17/0 = 0 +2:17/0/z_index = 1 +3:17/0 = 0 +3:17/0/z_index = 1 +10:1/size_in_atlas = Vector2i(3, 3) +10:1/0 = 0 +13:1/size_in_atlas = Vector2i(3, 3) +13:1/0 = 0 +16:4/size_in_atlas = Vector2i(1, 3) +16:4/0 = 0 +15:4/size_in_atlas = Vector2i(1, 3) +15:4/0 = 0 +17:4/size_in_atlas = Vector2i(1, 3) +17:4/0 = 0 +18:4/size_in_atlas = Vector2i(1, 3) +18:4/0 = 0 + +[sub_resource type="TileSet" id="TileSet_5bd38"] +physics_layer_0/collision_layer = 1 +navigation_layer_0/layers = 1 +sources/0 = SubResource("TileSetAtlasSource_q4fiy") + +[node name="HouseTemplate" type="Node2D"] + +[node name="TileMapLayer" type="TileMapLayer" parent="."] +rotation = -0.000322629 +tile_map_data = PackedByteArray("AAAIAAIAAAACAAEAAAAIAAMAAAACAAEAAAAIAAQAAAACAAEAAAAIAAUAAAACAAEAAAAIAAYAAAACAAEAAAAIAAcAAAACAAEAAAAIAAgAAAACAAEAAAAIAAkAAAACAAEAAAAJAAoAAAACAAEAAAAJAAsAAAACAAEAAAAJAAwAAAACAAEAAAAKAA0AAAACAAEAAAALAA4AAAACAAEAAAAMAA8AAAACAAEAAAANAA8AAAACAAEAAAANABAAAAACAAEAAAAOABAAAAACAAEAAAAPABAAAAACAAEAAAAQABAAAAACAAEAAAARABAAAAACAAEAAAASABAAAAACAAEAAAATABAAAAACAAEAAAAUABAAAAACAAEAAAAVABAAAAACAAEAAAAWABAAAAACAAEAAAAWAA8AAAACAAEAAAAWAAwAAAACAAEAAAAWAAsAAAACAAEAAAAVAAoAAAACAAEAAAAUAAoAAAACAAEAAAATAAkAAAACAAEAAAASAAkAAAACAAEAAAARAAgAAAACAAEAAAAQAAgAAAACAAEAAAAPAAgAAAACAAEAAAAOAAgAAAACAAEAAAANAAcAAAACAAEAAAAMAAcAAAACAAEAAAALAAcAAAACAAEAAAAKAAcAAAACAAEAAAAJAAcAAAACAAEAAAAHAAkAAAACAAEAAAAHAAoAAAACAAEAAAAHAAsAAAACAAEAAAAHAAwAAAACAAEAAAAHAA0AAAACAAEAAAAHAA4AAAACAAEAAAAHAA8AAAACAAEAAAAIABAAAAACAAEAAAAJABAAAAACAAEAAAAKABEAAAACAAEAAAALABIAAAACAAEAAAAMABMAAAACAAEAAAANABMAAAACAAEAAAAOABMAAAACAAEAAAAPABMAAAACAAEAAAAQABQAAAACAAEAAAARABQAAAACAAEAAAASABQAAAACAAEAAAATABQAAAACAAEAAAAUABQAAAACAAEAAAAVABQAAAACAAEAAAAWABQAAAACAAEAAAAVAAwAAAACAAEAAAAUAA0AAAACAAEAAAAUAA4AAAACAAEAAAATAA8AAAACAAEAAAATABEAAAACAAEAAAATABIAAAACAAEAAAAUABMAAAACAAEAAAAWABUAAAACAAEAAAAAAAAAAAACAAEAAAAAAAEAAAACAAEAAAAAAAIAAAACAAEAAAAAAAMAAAACAAEAAAAAAAQAAAACAAEAAAAAAAUAAAACAAEAAAAAAAYAAAACAAEAAAAAAAcAAAACAAEAAAAAAAgAAAACAAEAAAAAAAkAAAACAAEAAAAAAAoAAAACAAEAAAAAAAsAAAACAAEAAAAAAAwAAAACAAEAAAAAAA0AAAACAAEAAAAAAA4AAAACAAEAAAAAAA8AAAACAAEAAAAAABAAAAACAAEAAAAAABEAAAACAAEAAAAAABIAAAACAAEAAAAAABMAAAACAAEAAAAAABQAAAACAAEAAAAAABUAAAACAAEAAAAAABYAAAACAAEAAAAAABcAAAACAAEAAAAAABgAAAACAAEAAAAAABkAAAACAAEAAAAAABoAAAACAAEAAAAAABsAAAACAAEAAAAAABwAAAACAAEAAAAAAB0AAAACAAEAAAAAAB4AAAACAAEAAAAAAB8AAAACAAEAAAAAACAAAAACAAEAAAAAACEAAAACAAEAAAAAACIAAAACAAEAAAAAACMAAAACAAEAAAAAACQAAAACAAEAAAAAACUAAAACAAEAAAAAACYAAAACAAEAAAAAACcAAAACAAEAAAAAACgAAAACAAEAAAABAAAAAAACAAEAAAABAAEAAAACAAEAAAABAAIAAAACAAEAAAABAAMAAAACAAEAAAABAAQAAAACAAEAAAABAAUAAAACAAEAAAABAAYAAAACAAEAAAABAAcAAAACAAEAAAABAAgAAAACAAEAAAABAAkAAAACAAEAAAABAAoAAAACAAEAAAABAAsAAAACAAEAAAABAAwAAAACAAEAAAABAA0AAAACAAEAAAABAA4AAAACAAEAAAABAA8AAAACAAEAAAABABAAAAACAAEAAAABABEAAAACAAEAAAABABIAAAACAAEAAAABABMAAAACAAEAAAABABQAAAACAAEAAAABABUAAAACAAEAAAABABYAAAACAAEAAAABABcAAAACAAEAAAABABgAAAACAAEAAAABABkAAAACAAEAAAABABoAAAACAAEAAAABABsAAAACAAEAAAABABwAAAACAAEAAAABAB0AAAACAAEAAAABAB4AAAACAAEAAAABAB8AAAACAAEAAAABACAAAAACAAEAAAABACEAAAACAAEAAAABACIAAAACAAEAAAABACMAAAACAAEAAAABACQAAAACAAEAAAABACUAAAACAAEAAAABACYAAAACAAEAAAABACcAAAACAAEAAAABACgAAAACAAEAAAACAAAAAAACAAEAAAACAAEAAAACAAEAAAACAAIAAAACAAEAAAACAAMAAAACAAEAAAACAAQAAAACAAEAAAACAAUAAAACAAEAAAACAAYAAAACAAEAAAACAAcAAAACAAEAAAACAAgAAAACAAEAAAACAAkAAAACAAEAAAACAAoAAAACAAEAAAACAAsAAAACAAEAAAACAAwAAAACAAEAAAACAA0AAAACAAEAAAACAA4AAAACAAEAAAACAA8AAAACAAEAAAACABAAAAACAAEAAAACABEAAAACAAEAAAACABIAAAACAAEAAAACABMAAAACAAEAAAACABQAAAACAAEAAAACABUAAAACAAEAAAACABYAAAACAAEAAAACABcAAAACAAEAAAACABgAAAACAAEAAAACABkAAAACAAEAAAACABoAAAACAAEAAAACABsAAAACAAEAAAACABwAAAACAAEAAAACAB0AAAACAAEAAAACAB4AAAACAAEAAAACAB8AAAACAAEAAAACACAAAAACAAEAAAACACEAAAACAAEAAAACACIAAAACAAEAAAACACMAAAACAAEAAAACACQAAAACAAEAAAACACUAAAACAAEAAAACACYAAAACAAEAAAACACcAAAACAAEAAAACACgAAAACAAEAAAADAAAAAAACAAEAAAADAAEAAAACAAEAAAADAAIAAAACAAEAAAADAAMAAAACAAEAAAADAAQAAAACAAEAAAADAAUAAAACAAEAAAADAAYAAAACAAEAAAADAAcAAAACAAEAAAADAAgAAAACAAEAAAADAAkAAAACAAEAAAADAAoAAAACAAEAAAADAAsAAAACAAEAAAADAAwAAAACAAEAAAADAA0AAAACAAEAAAADAA4AAAACAAEAAAADAA8AAAACAAEAAAADABAAAAACAAEAAAADABEAAAACAAEAAAADABIAAAACAAEAAAADABMAAAACAAEAAAADABQAAAACAAEAAAADABUAAAACAAEAAAADABYAAAACAAEAAAADABcAAAACAAEAAAADABgAAAACAAEAAAADABkAAAACAAEAAAADABoAAAACAAEAAAADABsAAAACAAEAAAADABwAAAACAAEAAAADAB0AAAACAAEAAAADAB4AAAACAAEAAAADAB8AAAACAAEAAAADACAAAAACAAEAAAADACEAAAACAAEAAAADACIAAAACAAEAAAADACMAAAACAAEAAAADACQAAAACAAEAAAADACUAAAACAAEAAAADACYAAAACAAEAAAADACcAAAACAAEAAAADACgAAAACAAEAAAAEAAAAAAACAAEAAAAEAAEAAAACAAEAAAAEAAIAAAACAAEAAAAEAAMAAAACAAEAAAAEAAQAAAACAAEAAAAEAAUAAAACAAEAAAAEAAYAAAACAAEAAAAEAAcAAAACAAEAAAAEAAgAAAACAAEAAAAEAAkAAAACAAEAAAAEAAoAAAACAAEAAAAEAAsAAAACAAEAAAAEAAwAAAACAAEAAAAEAA0AAAACAAEAAAAEAA4AAAACAAEAAAAEAA8AAAACAAEAAAAEABAAAAACAAEAAAAEABEAAAACAAEAAAAEABIAAAACAAEAAAAEABMAAAACAAEAAAAEABQAAAACAAEAAAAEABUAAAACAAEAAAAEABYAAAACAAEAAAAEABcAAAACAAEAAAAEABgAAAACAAEAAAAEABkAAAACAAEAAAAEABoAAAACAAEAAAAEABsAAAACAAEAAAAEABwAAAACAAEAAAAEAB0AAAACAAEAAAAEAB4AAAACAAEAAAAEAB8AAAACAAEAAAAEACAAAAACAAEAAAAEACEAAAACAAEAAAAEACIAAAACAAEAAAAEACMAAAACAAEAAAAEACQAAAACAAEAAAAEACUAAAACAAEAAAAEACYAAAACAAEAAAAEACcAAAACAAEAAAAEACgAAAACAAEAAAAFAAAAAAACAAEAAAAFAAEAAAACAAEAAAAFAAIAAAACAAEAAAAFAAMAAAACAAEAAAAFAAQAAAACAAEAAAAFAAUAAAACAAEAAAAFAAYAAAACAAEAAAAFAAcAAAACAAEAAAAFAAgAAAACAAEAAAAFAAkAAAACAAEAAAAFAAoAAAACAAEAAAAFAAsAAAACAAEAAAAFAAwAAAACAAEAAAAFAA0AAAACAAEAAAAFAA4AAAACAAEAAAAFAA8AAAACAAEAAAAFABAAAAACAAEAAAAFABEAAAACAAEAAAAFABIAAAACAAEAAAAFABMAAAACAAEAAAAFABQAAAACAAEAAAAFABUAAAACAAEAAAAFABYAAAACAAEAAAAFABcAAAACAAEAAAAFABgAAAACAAEAAAAFABkAAAACAAEAAAAFABoAAAACAAEAAAAFABsAAAACAAEAAAAFABwAAAACAAEAAAAFAB0AAAACAAEAAAAFAB4AAAACAAEAAAAFAB8AAAACAAEAAAAFACAAAAACAAEAAAAFACEAAAACAAEAAAAFACIAAAACAAEAAAAFACMAAAACAAEAAAAFACQAAAACAAEAAAAFACUAAAACAAEAAAAFACYAAAACAAEAAAAFACcAAAACAAEAAAAFACgAAAACAAEAAAAGAAAAAAACAAEAAAAGAAEAAAACAAEAAAAGAAIAAAACAAEAAAAGAAMAAAACAAEAAAAGAAQAAAACAAEAAAAGAAUAAAACAAEAAAAGAAYAAAACAAEAAAAGAAcAAAACAAEAAAAGAAgAAAACAAEAAAAGAAkAAAACAAEAAAAGAAoAAAACAAEAAAAGAAsAAAACAAEAAAAGAAwAAAACAAEAAAAGAA0AAAACAAEAAAAGAA4AAAACAAEAAAAGAA8AAAACAAEAAAAGABAAAAACAAEAAAAGABEAAAACAAEAAAAGABIAAAACAAEAAAAGABMAAAACAAEAAAAGABQAAAACAAEAAAAGABUAAAACAAEAAAAGABYAAAACAAEAAAAGABcAAAACAAEAAAAGABgAAAACAAEAAAAGABkAAAACAAEAAAAGABoAAAACAAEAAAAGABsAAAACAAEAAAAGABwAAAACAAEAAAAGAB0AAAACAAEAAAAGAB4AAAACAAEAAAAGAB8AAAACAAEAAAAGACAAAAACAAEAAAAGACEAAAACAAEAAAAGACIAAAACAAEAAAAGACMAAAACAAEAAAAGACQAAAACAAEAAAAGACUAAAACAAEAAAAGACYAAAACAAEAAAAGACcAAAACAAEAAAAGACgAAAACAAEAAAAHAAAAAAACAAEAAAAHAAEAAAACAAEAAAAHAAIAAAACAAEAAAAHAAMAAAACAAEAAAAHAAQAAAACAAEAAAAHAAUAAAACAAEAAAAHAAYAAAACAAEAAAAHAAcAAAACAAEAAAAHAAgAAAACAAEAAAAHABAAAAACAAEAAAAHABEAAAACAAEAAAAHABIAAAACAAEAAAAHABMAAAACAAEAAAAHABQAAAACAAEAAAAHABUAAAACAAEAAAAHABYAAAACAAEAAAAHABcAAAACAAEAAAAHABgAAAACAAEAAAAHABkAAAACAAEAAAAHABoAAAACAAEAAAAHABsAAAACAAEAAAAHABwAAAACAAEAAAAHAB0AAAACAAEAAAAHAB4AAAACAAEAAAAHAB8AAAACAAEAAAAHACAAAAACAAEAAAAHACEAAAACAAEAAAAHACIAAAACAAEAAAAHACMAAAACAAEAAAAHACQAAAACAAEAAAAHACUAAAACAAEAAAAHACYAAAACAAEAAAAHACcAAAACAAEAAAAHACgAAAACAAEAAAAIAAAAAAACAAEAAAAIAAEAAAACAAEAAAAIAAoAAAACAAEAAAAIAAsAAAACAAEAAAAIAAwAAAACAAEAAAAIAA0AAAACAAEAAAAIAA4AAAACAAEAAAAIAA8AAAACAAEAAAAIABEAAAACAAEAAAAIABIAAAACAAEAAAAIABMAAAACAAEAAAAIABQAAAACAAEAAAAIABUAAAACAAEAAAAIABYAAAACAAEAAAAIABcAAAACAAEAAAAIABgAAAACAAEAAAAIABkAAAACAAEAAAAIABoAAAACAAEAAAAIABsAAAACAAEAAAAIABwAAAACAAEAAAAIAB0AAAACAAEAAAAIAB4AAAACAAEAAAAIAB8AAAACAAEAAAAIACAAAAACAAEAAAAIACEAAAACAAEAAAAIACIAAAACAAEAAAAIACMAAAACAAEAAAAIACQAAAACAAEAAAAIACUAAAACAAEAAAAIACYAAAACAAEAAAAIACcAAAACAAEAAAAIACgAAAACAAEAAAAJAAAAAAACAAEAAAAJAAEAAAACAAEAAAAJAAIAAAACAAEAAAAJAAMAAAACAAEAAAAJAAQAAAACAAEAAAAJAAUAAAACAAEAAAAJAAYAAAACAAEAAAAJAAgAAAACAAEAAAAJAAkAAAACAAEAAAAJAA0AAAACAAEAAAAJAA4AAAACAAEAAAAJAA8AAAACAAEAAAAJABEAAAACAAEAAAAJABIAAAACAAEAAAAJABMAAAACAAEAAAAJABQAAAACAAEAAAAJABUAAAACAAEAAAAJABYAAAACAAEAAAAJABcAAAACAAEAAAAJABgAAAACAAEAAAAJABkAAAACAAEAAAAJABoAAAACAAEAAAAJABsAAAACAAEAAAAJABwAAAACAAEAAAAJAB0AAAACAAEAAAAJAB4AAAACAAEAAAAJAB8AAAACAAEAAAAJACAAAAACAAEAAAAJACEAAAACAAEAAAAJACIAAAACAAEAAAAJACMAAAACAAEAAAAJACQAAAACAAEAAAAJACUAAAACAAEAAAAJACYAAAACAAEAAAAJACcAAAACAAEAAAAJACgAAAACAAEAAAAKAAAAAAACAAEAAAAKAAEAAAACAAEAAAAKAAIAAAACAAEAAAAKAAMAAAACAAEAAAAKAAQAAAACAAEAAAAKAAUAAAACAAEAAAAKAAYAAAACAAEAAAAKAAgAAAACAAEAAAAKAAkAAAACAAEAAAAKAAoAAAACAAEAAAAKAAsAAAACAAEAAAAKAAwAAAACAAEAAAAKAA4AAAACAAEAAAAKAA8AAAACAAEAAAAKABAAAAACAAEAAAAKABIAAAACAAEAAAAKABMAAAACAAEAAAAKABQAAAACAAEAAAAKABUAAAACAAEAAAAKABYAAAACAAEAAAAKABcAAAACAAEAAAAKABgAAAACAAEAAAAKABkAAAACAAEAAAAKABoAAAACAAEAAAAKABsAAAACAAEAAAAKABwAAAACAAEAAAAKAB0AAAACAAEAAAAKAB4AAAACAAEAAAAKAB8AAAACAAEAAAAKACAAAAACAAEAAAAKACEAAAACAAEAAAAKACIAAAACAAEAAAAKACMAAAACAAEAAAAKACQAAAACAAEAAAAKACUAAAACAAEAAAAKACYAAAACAAEAAAAKACcAAAACAAEAAAAKACgAAAACAAEAAAALAAAAAAACAAEAAAALAAEAAAACAAEAAAALAAIAAAACAAEAAAALAAMAAAACAAEAAAALAAQAAAACAAEAAAALAAUAAAACAAEAAAALAAYAAAACAAEAAAALAAgAAAACAAEAAAALAAkAAAACAAEAAAALAAoAAAACAAEAAAALAAsAAAACAAEAAAALAAwAAAACAAEAAAALAA0AAAACAAEAAAALAA8AAAACAAEAAAALABAAAAACAAEAAAALABEAAAACAAEAAAALABMAAAACAAEAAAALABQAAAACAAEAAAALABUAAAACAAEAAAALABYAAAACAAEAAAALABcAAAACAAEAAAALABgAAAACAAEAAAALABkAAAACAAEAAAALABoAAAACAAEAAAALABsAAAACAAEAAAALABwAAAACAAEAAAALAB0AAAACAAEAAAALAB4AAAACAAEAAAALAB8AAAACAAEAAAALACAAAAACAAEAAAALACEAAAACAAEAAAALACIAAAACAAEAAAALACMAAAACAAEAAAALACQAAAACAAEAAAALACUAAAACAAEAAAALACYAAAACAAEAAAALACcAAAACAAEAAAALACgAAAACAAEAAAAMAAAAAAACAAEAAAAMAAEAAAACAAEAAAAMAAIAAAACAAEAAAAMAAMAAAACAAEAAAAMAAQAAAACAAEAAAAMAAUAAAACAAEAAAAMAAYAAAACAAEAAAAMAAgAAAACAAEAAAAMAAkAAAACAAEAAAAMAAoAAAACAAEAAAAMAAsAAAACAAEAAAAMAAwAAAACAAEAAAAMAA0AAAACAAEAAAAMAA4AAAACAAEAAAAMABAAAAACAAEAAAAMABEAAAACAAEAAAAMABIAAAACAAEAAAAMABQAAAACAAEAAAAMABUAAAACAAEAAAAMABYAAAACAAEAAAAMABcAAAACAAEAAAAMABgAAAACAAEAAAAMABkAAAACAAEAAAAMABoAAAACAAEAAAAMABsAAAACAAEAAAAMABwAAAACAAEAAAAMAB0AAAACAAEAAAAMAB4AAAACAAEAAAAMAB8AAAACAAEAAAAMACAAAAACAAEAAAAMACEAAAACAAEAAAAMACIAAAACAAEAAAAMACMAAAACAAEAAAAMACQAAAACAAEAAAAMACUAAAACAAEAAAAMACYAAAACAAEAAAAMACcAAAACAAEAAAAMACgAAAACAAEAAAANAAAAAAACAAEAAAANAAEAAAACAAEAAAANAAIAAAACAAEAAAANAAMAAAACAAEAAAANAAQAAAACAAEAAAANAAUAAAACAAEAAAANAAYAAAACAAEAAAANAAgAAAACAAEAAAANAAkAAAACAAEAAAANAAoAAAACAAEAAAANAAsAAAACAAEAAAANAAwAAAACAAEAAAANAA0AAAACAAEAAAANAA4AAAACAAEAAAANABEAAAACAAEAAAANABIAAAACAAEAAAANABQAAAACAAEAAAANABUAAAACAAEAAAANABYAAAACAAEAAAANABcAAAACAAEAAAANABgAAAACAAEAAAANABkAAAACAAEAAAANABoAAAACAAEAAAANABsAAAACAAEAAAANABwAAAACAAEAAAANAB0AAAACAAEAAAANAB4AAAACAAEAAAANAB8AAAACAAEAAAANACAAAAACAAEAAAANACEAAAACAAEAAAANACIAAAACAAEAAAANACMAAAACAAEAAAANACQAAAACAAEAAAANACUAAAACAAEAAAANACYAAAACAAEAAAANACcAAAACAAEAAAANACgAAAACAAEAAAAOAAAAAAACAAEAAAAOAAEAAAACAAEAAAAOAAIAAAACAAEAAAAOAAMAAAACAAEAAAAOAAQAAAACAAEAAAAOAAUAAAACAAEAAAAOAAYAAAACAAEAAAAOAAcAAAACAAEAAAAOAAkAAAACAAEAAAAOAAoAAAACAAEAAAAOAAsAAAACAAEAAAAOAAwAAAACAAEAAAAOAA0AAAACAAEAAAAOAA4AAAACAAEAAAAOAA8AAAACAAEAAAAOABEAAAACAAEAAAAOABIAAAACAAEAAAAOABQAAAACAAEAAAAOABUAAAACAAEAAAAOABYAAAACAAEAAAAOABcAAAACAAEAAAAOABgAAAACAAEAAAAOABkAAAACAAEAAAAOABoAAAACAAEAAAAOABsAAAACAAEAAAAOABwAAAACAAEAAAAOAB0AAAACAAEAAAAOAB4AAAACAAEAAAAOAB8AAAACAAEAAAAOACAAAAACAAEAAAAOACEAAAACAAEAAAAOACIAAAACAAEAAAAOACMAAAACAAEAAAAOACQAAAACAAEAAAAOACUAAAACAAEAAAAOACYAAAACAAEAAAAOACcAAAACAAEAAAAOACgAAAACAAEAAAAPAAAAAAACAAEAAAAPAAEAAAACAAEAAAAPAAIAAAACAAEAAAAPAAMAAAACAAEAAAAPAAQAAAACAAEAAAAPAAUAAAACAAEAAAAPAAYAAAACAAEAAAAPAAcAAAACAAEAAAAPAAkAAAACAAEAAAAPAAoAAAACAAEAAAAPAAsAAAACAAEAAAAPAAwAAAACAAEAAAAPAA0AAAACAAEAAAAPAA4AAAACAAEAAAAPAA8AAAACAAEAAAAPABEAAAACAAEAAAAPABIAAAACAAEAAAAPABQAAAACAAEAAAAPABUAAAACAAEAAAAPABYAAAACAAEAAAAPABcAAAACAAEAAAAPABgAAAACAAEAAAAPABkAAAACAAEAAAAPABoAAAACAAEAAAAPABsAAAACAAEAAAAPABwAAAACAAEAAAAPAB0AAAACAAEAAAAPAB4AAAACAAEAAAAPAB8AAAACAAEAAAAPACAAAAACAAEAAAAPACEAAAACAAEAAAAPACIAAAACAAEAAAAPACMAAAACAAEAAAAPACQAAAACAAEAAAAPACUAAAACAAEAAAAPACYAAAACAAEAAAAPACcAAAACAAEAAAAPACgAAAACAAEAAAAQAAAAAAACAAEAAAAQAAEAAAACAAEAAAAQAAIAAAACAAEAAAAQAAMAAAACAAEAAAAQAAQAAAACAAEAAAAQAAUAAAACAAEAAAAQAAYAAAACAAEAAAAQAAcAAAACAAEAAAAQAAkAAAACAAEAAAAQAAoAAAACAAEAAAAQAAsAAAACAAEAAAAQAAwAAAACAAEAAAAQAA0AAAACAAEAAAAQAA4AAAACAAEAAAAQAA8AAAACAAEAAAAQABEAAAACAAEAAAAQABIAAAACAAEAAAAQABMAAAACAAEAAAAQABUAAAACAAEAAAAQABYAAAACAAEAAAAQABcAAAACAAEAAAAQABgAAAACAAEAAAAQABkAAAACAAEAAAAQABoAAAACAAEAAAAQABsAAAACAAEAAAAQABwAAAACAAEAAAAQAB0AAAACAAEAAAAQAB4AAAACAAEAAAAQAB8AAAACAAEAAAAQACAAAAACAAEAAAAQACEAAAACAAEAAAAQACIAAAACAAEAAAAQACMAAAACAAEAAAAQACQAAAACAAEAAAAQACUAAAACAAEAAAAQACYAAAACAAEAAAAQACcAAAACAAEAAAAQACgAAAACAAEAAAARAAAAAAACAAEAAAARAAEAAAACAAEAAAARAAIAAAACAAEAAAARAAMAAAACAAEAAAARAAQAAAACAAEAAAARAAUAAAACAAEAAAARAAYAAAACAAEAAAARAAcAAAACAAEAAAARAAkAAAACAAEAAAARAAoAAAACAAEAAAARAAsAAAACAAEAAAARAAwAAAACAAEAAAARAA0AAAACAAEAAAARAA4AAAACAAEAAAARAA8AAAACAAEAAAARABEAAAACAAEAAAARABIAAAACAAEAAAARABMAAAACAAEAAAARABUAAAACAAEAAAARABYAAAACAAEAAAARABcAAAACAAEAAAARABgAAAACAAEAAAARABkAAAACAAEAAAARABoAAAACAAEAAAARABsAAAACAAEAAAARABwAAAACAAEAAAARAB0AAAACAAEAAAARAB4AAAACAAEAAAARAB8AAAACAAEAAAARACAAAAACAAEAAAARACEAAAACAAEAAAARACIAAAACAAEAAAARACMAAAACAAEAAAARACQAAAACAAEAAAARACUAAAACAAEAAAARACYAAAACAAEAAAARACcAAAACAAEAAAARACgAAAACAAEAAAASAAAAAAACAAEAAAASAAEAAAACAAEAAAASAAIAAAACAAEAAAASAAMAAAACAAEAAAASAAQAAAACAAEAAAASAAUAAAACAAEAAAASAAYAAAACAAEAAAASAAcAAAACAAEAAAASAAgAAAACAAEAAAASAAoAAAACAAEAAAASAAsAAAACAAEAAAASAAwAAAACAAEAAAASAA0AAAACAAEAAAASAA4AAAACAAEAAAASAA8AAAACAAEAAAASABEAAAACAAEAAAASABIAAAACAAEAAAASABMAAAACAAEAAAASABUAAAACAAEAAAASABYAAAACAAEAAAASABcAAAACAAEAAAASABgAAAACAAEAAAASABkAAAACAAEAAAASABoAAAACAAEAAAASABsAAAACAAEAAAASABwAAAACAAEAAAASAB0AAAACAAEAAAASAB4AAAACAAEAAAASAB8AAAACAAEAAAASACAAAAACAAEAAAASACEAAAACAAEAAAASACIAAAACAAEAAAASACMAAAACAAEAAAASACQAAAACAAEAAAASACUAAAACAAEAAAASACYAAAACAAEAAAASACcAAAACAAEAAAASACgAAAACAAEAAAATAAAAAAACAAEAAAATAAEAAAACAAEAAAATAAIAAAACAAEAAAATAAMAAAACAAEAAAATAAQAAAACAAEAAAATAAUAAAACAAEAAAATAAYAAAACAAEAAAATAAcAAAACAAEAAAATAAgAAAACAAEAAAATAAoAAAACAAEAAAATAAsAAAACAAEAAAATAAwAAAACAAEAAAATAA0AAAACAAEAAAATAA4AAAACAAEAAAATABMAAAACAAEAAAATABUAAAACAAEAAAATABYAAAACAAEAAAATABcAAAACAAEAAAATABgAAAACAAEAAAATABkAAAACAAEAAAATABoAAAACAAEAAAATABsAAAACAAEAAAATABwAAAACAAEAAAATAB0AAAACAAEAAAATAB4AAAACAAEAAAATAB8AAAACAAEAAAATACAAAAACAAEAAAATACEAAAACAAEAAAATACIAAAACAAEAAAATACMAAAACAAEAAAATACQAAAACAAEAAAATACUAAAACAAEAAAATACYAAAACAAEAAAATACcAAAACAAEAAAATACgAAAACAAEAAAAUAAAAAAACAAEAAAAUAAEAAAACAAEAAAAUAAIAAAACAAEAAAAUAAMAAAACAAEAAAAUAAQAAAACAAEAAAAUAAUAAAACAAEAAAAUAAYAAAACAAEAAAAUAAcAAAACAAEAAAAUAAgAAAACAAEAAAAUAAkAAAACAAEAAAAUAAsAAAACAAEAAAAUAAwAAAACAAEAAAAUAA8AAAACAAEAAAAUABEAAAACAAEAAAAUABIAAAACAAEAAAAUABUAAAACAAEAAAAUABYAAAACAAEAAAAUABcAAAACAAEAAAAUABgAAAACAAEAAAAUABkAAAACAAEAAAAUABoAAAACAAEAAAAUABsAAAACAAEAAAAUABwAAAACAAEAAAAUAB0AAAACAAEAAAAUAB4AAAACAAEAAAAUAB8AAAACAAEAAAAUACAAAAACAAEAAAAUACEAAAACAAEAAAAUACIAAAACAAEAAAAUACMAAAACAAEAAAAUACQAAAACAAEAAAAUACUAAAACAAEAAAAUACYAAAACAAEAAAAUACcAAAACAAEAAAAUACgAAAACAAEAAAAVAAAAAAACAAEAAAAVAAEAAAACAAEAAAAVAAIAAAACAAEAAAAVAAMAAAACAAEAAAAVAAQAAAACAAEAAAAVAAUAAAACAAEAAAAVAAYAAAACAAEAAAAVAAcAAAACAAEAAAAVAAgAAAACAAEAAAAVAAkAAAACAAEAAAAVAAsAAAACAAEAAAAVAA0AAAACAAEAAAAVAA4AAAACAAEAAAAVAA8AAAACAAEAAAAVABEAAAACAAEAAAAVABIAAAACAAEAAAAVABMAAAACAAEAAAAVABUAAAACAAEAAAAVABYAAAACAAEAAAAVABcAAAACAAEAAAAVABgAAAACAAEAAAAVABkAAAACAAEAAAAVABoAAAACAAEAAAAVABsAAAACAAEAAAAVABwAAAACAAEAAAAVAB0AAAACAAEAAAAVAB4AAAACAAEAAAAVAB8AAAACAAEAAAAVACAAAAACAAEAAAAVACEAAAACAAEAAAAVACIAAAACAAEAAAAVACMAAAACAAEAAAAVACQAAAACAAEAAAAVACUAAAACAAEAAAAVACYAAAACAAEAAAAVACcAAAACAAEAAAAVACgAAAACAAEAAAAWAAAAAAACAAEAAAAWAAEAAAACAAEAAAAWAAIAAAACAAEAAAAWAAMAAAACAAEAAAAWAAQAAAACAAEAAAAWAAUAAAACAAEAAAAWAAYAAAACAAEAAAAWAAcAAAACAAEAAAAWAAgAAAACAAEAAAAWAAkAAAACAAEAAAAWAAoAAAACAAEAAAAWAA0AAAACAAEAAAAWAA4AAAACAAEAAAAWABEAAAACAAEAAAAWABIAAAACAAEAAAAWABMAAAACAAEAAAAWABYAAAACAAEAAAAWABcAAAACAAEAAAAWABgAAAACAAEAAAAWABkAAAACAAEAAAAWABoAAAACAAEAAAAWABsAAAACAAEAAAAWABwAAAACAAEAAAAWAB0AAAACAAEAAAAWAB4AAAACAAEAAAAWAB8AAAACAAEAAAAWACAAAAACAAEAAAAWACEAAAACAAEAAAAWACIAAAACAAEAAAAWACMAAAACAAEAAAAWACQAAAACAAEAAAAWACUAAAACAAEAAAAWACYAAAACAAEAAAAWACcAAAACAAEAAAAWACgAAAACAAEAAAAXAAAAAAACAAEAAAAXAAEAAAACAAEAAAAXAAIAAAACAAEAAAAXAAMAAAACAAEAAAAXAAQAAAACAAEAAAAXAAUAAAACAAEAAAAXABkAAAACAAEAAAAXABoAAAACAAEAAAAXABsAAAACAAEAAAAXABwAAAACAAEAAAAXAB0AAAACAAEAAAAXAB4AAAACAAEAAAAXAB8AAAACAAEAAAAXACAAAAACAAEAAAAXACEAAAACAAEAAAAXACIAAAACAAEAAAAXACMAAAACAAEAAAAXACQAAAACAAEAAAAXACUAAAACAAEAAAAXACYAAAACAAEAAAAXACcAAAACAAEAAAAXACgAAAACAAEAAAAYAAAAAAACAAEAAAAYAAEAAAACAAEAAAAYAAIAAAACAAEAAAAYAAMAAAACAAEAAAAYAAQAAAACAAEAAAAYAAUAAAACAAEAAAAYABkAAAACAAEAAAAYABoAAAACAAEAAAAYABsAAAACAAEAAAAYABwAAAACAAEAAAAYAB0AAAACAAEAAAAYAB4AAAACAAEAAAAYAB8AAAACAAEAAAAYACAAAAACAAEAAAAYACEAAAACAAEAAAAYACIAAAACAAEAAAAYACMAAAACAAEAAAAYACQAAAACAAEAAAAYACUAAAACAAEAAAAYACYAAAACAAEAAAAYACcAAAACAAEAAAAYACgAAAACAAEAAAAZAAAAAAACAAEAAAAZAAEAAAACAAEAAAAZAAIAAAACAAEAAAAZAAMAAAACAAEAAAAZAAQAAAACAAEAAAAZAAUAAAACAAEAAAAZABkAAAACAAEAAAAZABoAAAACAAEAAAAZABsAAAACAAEAAAAZABwAAAACAAEAAAAZAB0AAAACAAEAAAAZAB4AAAACAAEAAAAZAB8AAAACAAEAAAAZACAAAAACAAEAAAAZACEAAAACAAEAAAAZACIAAAACAAEAAAAZACMAAAACAAEAAAAZACQAAAACAAEAAAAZACUAAAACAAEAAAAZACYAAAACAAEAAAAZACcAAAACAAEAAAAZACgAAAACAAEAAAAaAAAAAAACAAEAAAAaAAEAAAACAAEAAAAaAAIAAAACAAEAAAAaAAMAAAACAAEAAAAaAAQAAAACAAEAAAAaAAUAAAACAAEAAAAaABkAAAACAAEAAAAaABoAAAACAAEAAAAaABsAAAACAAEAAAAaABwAAAACAAEAAAAaAB0AAAACAAEAAAAaAB4AAAACAAEAAAAaAB8AAAACAAEAAAAaACAAAAACAAEAAAAaACEAAAACAAEAAAAaACIAAAACAAEAAAAaACMAAAACAAEAAAAaACQAAAACAAEAAAAaACUAAAACAAEAAAAaACYAAAACAAEAAAAaACcAAAACAAEAAAAaACgAAAACAAEAAAAbAAAAAAACAAEAAAAbAAEAAAACAAEAAAAbAAIAAAACAAEAAAAbAAMAAAACAAEAAAAbAAQAAAACAAEAAAAbAAUAAAACAAEAAAAbABkAAAACAAEAAAAbABoAAAACAAEAAAAbABsAAAACAAEAAAAbABwAAAACAAEAAAAbAB0AAAACAAEAAAAbAB4AAAACAAEAAAAbAB8AAAACAAEAAAAbACAAAAACAAEAAAAbACEAAAACAAEAAAAbACIAAAACAAEAAAAbACMAAAACAAEAAAAbACQAAAACAAEAAAAbACUAAAACAAEAAAAbACYAAAACAAEAAAAbACcAAAACAAEAAAAbACgAAAACAAEAAAAcAAAAAAACAAEAAAAcAAEAAAACAAEAAAAcAAIAAAACAAEAAAAcAAMAAAACAAEAAAAcAAQAAAACAAEAAAAcAAUAAAACAAEAAAAcABkAAAABAAEAAAAcABoAAAABAAEAAAAcABsAAAABAAEAAAAcABwAAAABAAIAAAAcAB0AAAACAAEAAAAcAB4AAAACAAEAAAAcAB8AAAACAAEAAAAcACAAAAACAAEAAAAcACEAAAACAAEAAAAcACIAAAACAAEAAAAcACMAAAACAAEAAAAcACQAAAACAAEAAAAcACUAAAACAAEAAAAcACYAAAACAAEAAAAcACcAAAACAAEAAAAcACgAAAACAAEAAAAdAAAAAAACAAEAAAAdAAEAAAACAAEAAAAdAAIAAAACAAEAAAAdAAMAAAACAAEAAAAdAAQAAAACAAEAAAAdAAUAAAACAAEAAAAdABkAAAAAAAIAAAAdABoAAAAAAAIAAAAdABsAAAAAAAIAAAAdABwAAAACAAIAAAAdAB0AAAACAAEAAAAdAB4AAAACAAEAAAAdAB8AAAACAAEAAAAdACAAAAACAAEAAAAdACEAAAACAAEAAAAdACIAAAACAAEAAAAdACMAAAACAAEAAAAdACQAAAACAAEAAAAdACUAAAACAAEAAAAdACYAAAACAAEAAAAdACcAAAACAAEAAAAdACgAAAACAAEAAAAeAAAAAAACAAEAAAAeAAEAAAACAAEAAAAeAAIAAAACAAEAAAAeAAMAAAACAAEAAAAeAAQAAAACAAEAAAAeAAUAAAACAAEAAAAeABkAAAAAAAIAAAAeABoAAAAAAAIAAAAeABsAAAAAAAIAAAAeABwAAAACAAIAAAAeAB0AAAACAAEAAAAeAB4AAAACAAEAAAAeAB8AAAACAAEAAAAeACAAAAACAAEAAAAeACEAAAACAAEAAAAeACIAAAACAAEAAAAeACMAAAACAAEAAAAeACQAAAACAAEAAAAeACUAAAACAAEAAAAeACYAAAACAAEAAAAeACcAAAACAAEAAAAeACgAAAACAAEAAAAfAAAAAAACAAEAAAAfAAEAAAACAAEAAAAfAAIAAAACAAEAAAAfAAMAAAACAAEAAAAfAAQAAAACAAEAAAAfAAUAAAACAAEAAAAfABkAAAAAAAIAAAAfABoAAAAAAAIAAAAfABsAAAAAAAIAAAAfABwAAAACAAIAAAAfAB0AAAACAAEAAAAfAB4AAAACAAEAAAAfAB8AAAACAAEAAAAfACAAAAACAAEAAAAfACEAAAACAAEAAAAfACIAAAACAAEAAAAfACMAAAACAAEAAAAfACQAAAACAAEAAAAfACUAAAACAAEAAAAfACYAAAACAAEAAAAfACcAAAACAAEAAAAfACgAAAACAAEAAAAgAAAAAAACAAEAAAAgAAEAAAACAAEAAAAgAAIAAAACAAEAAAAgAAMAAAACAAEAAAAgAAQAAAACAAEAAAAgAAUAAAACAAEAAAAgABkAAAAAAAIAAAAgABoAAAAAAAIAAAAgABsAAAAAAAIAAAAgABwAAAACAAIAAAAgAB0AAAACAAEAAAAgAB4AAAACAAEAAAAgAB8AAAACAAEAAAAgACAAAAACAAEAAAAgACEAAAACAAEAAAAgACIAAAACAAEAAAAgACMAAAACAAEAAAAgACQAAAACAAEAAAAgACUAAAACAAEAAAAgACYAAAACAAEAAAAgACcAAAACAAEAAAAgACgAAAACAAEAAAAhAAAAAAACAAEAAAAhAAEAAAACAAEAAAAhAAIAAAACAAEAAAAhAAMAAAACAAEAAAAhAAQAAAACAAEAAAAhAAUAAAACAAEAAAAhABkAAAAAAAIAAAAhABoAAAAAAAIAAAAhABsAAAAAAAIAAAAhABwAAAACAAIAAAAhAB0AAAACAAEAAAAhAB4AAAACAAEAAAAhAB8AAAACAAEAAAAhACAAAAACAAEAAAAhACEAAAACAAEAAAAhACIAAAACAAEAAAAhACMAAAACAAEAAAAhACQAAAACAAEAAAAhACUAAAACAAEAAAAhACYAAAACAAEAAAAhACcAAAACAAEAAAAhACgAAAACAAEAAAAiAAAAAAACAAEAAAAiAAEAAAACAAEAAAAiAAIAAAACAAEAAAAiAAMAAAACAAEAAAAiAAQAAAACAAEAAAAiAAUAAAACAAEAAAAiABkAAAAAAAIAAAAiABoAAAAAAAIAAAAiABsAAAAAAAIAAAAiABwAAAACAAIAAAAiAB0AAAACAAEAAAAiAB4AAAACAAEAAAAiAB8AAAACAAEAAAAiACAAAAACAAEAAAAiACEAAAACAAEAAAAiACIAAAACAAEAAAAiACMAAAACAAEAAAAiACQAAAACAAEAAAAiACUAAAACAAEAAAAiACYAAAACAAEAAAAiACcAAAACAAEAAAAiACgAAAACAAEAAAAjAAAAAAACAAEAAAAjAAEAAAACAAEAAAAjAAIAAAACAAEAAAAjAAMAAAACAAEAAAAjAAQAAAACAAEAAAAjAAUAAAACAAEAAAAjABkAAAAAAAIAAAAjABoAAAAAAAIAAAAjABsAAAAAAAIAAAAjABwAAAAAAAAAAAAjAB0AAAACAAEAAAAjAB4AAAACAAEAAAAjAB8AAAACAAEAAAAjACAAAAACAAEAAAAjACEAAAACAAEAAAAjACIAAAACAAEAAAAjACMAAAACAAEAAAAjACQAAAACAAEAAAAjACUAAAACAAEAAAAjACYAAAACAAEAAAAjACcAAAACAAEAAAAjACgAAAACAAEAAAAkAAAAAAACAAEAAAAkAAEAAAACAAEAAAAkAAIAAAACAAEAAAAkAAMAAAACAAEAAAAkAAQAAAACAAEAAAAkAAUAAAACAAEAAAAkABkAAAAAAAIAAAAkABoAAAAAAAIAAAAkABsAAAAAAAIAAAAkABwAAAAAAAAAAAAkAB0AAAACAAEAAAAkAB4AAAACAAEAAAAkAB8AAAACAAEAAAAkACAAAAACAAEAAAAkACEAAAACAAEAAAAkACIAAAACAAEAAAAkACMAAAACAAEAAAAkACQAAAACAAEAAAAkACUAAAACAAEAAAAkACYAAAACAAEAAAAkACcAAAACAAEAAAAkACgAAAACAAEAAAAlAAAAAAACAAEAAAAlAAEAAAACAAEAAAAlAAIAAAACAAEAAAAlAAMAAAACAAEAAAAlAAQAAAACAAEAAAAlAAUAAAACAAEAAAAlABkAAAAAAAIAAAAlABoAAAAAAAIAAAAlABsAAAAAAAIAAAAlABwAAAAAAAAAAAAlAB0AAAACAAEAAAAlAB4AAAACAAEAAAAlAB8AAAACAAEAAAAlACAAAAACAAEAAAAlACEAAAACAAEAAAAlACIAAAACAAEAAAAlACMAAAACAAEAAAAlACQAAAACAAEAAAAlACUAAAACAAEAAAAlACYAAAACAAEAAAAlACcAAAACAAEAAAAlACgAAAACAAEAAAAmAAAAAAACAAEAAAAmAAEAAAACAAEAAAAmAAIAAAACAAEAAAAmAAMAAAACAAEAAAAmAAQAAAACAAEAAAAmAAUAAAACAAEAAAAmABkAAAAAAAIAAAAmABoAAAAAAAIAAAAmABsAAAAAAAIAAAAmABwAAAACAAIAAAAmAB0AAAACAAEAAAAmAB4AAAACAAEAAAAmAB8AAAACAAEAAAAmACAAAAACAAEAAAAmACEAAAACAAEAAAAmACIAAAACAAEAAAAmACMAAAACAAEAAAAmACQAAAACAAEAAAAmACUAAAACAAEAAAAmACYAAAACAAEAAAAmACcAAAACAAEAAAAmACgAAAACAAEAAAAnAAAAAAACAAEAAAAnAAEAAAACAAEAAAAnAAIAAAACAAEAAAAnAAMAAAACAAEAAAAnAAQAAAACAAEAAAAnAAUAAAACAAEAAAAnABkAAAAAAAIAAAAnABoAAAAAAAIAAAAnABsAAAAAAAIAAAAnABwAAAACAAIAAAAnAB0AAAACAAEAAAAnAB4AAAACAAEAAAAnAB8AAAACAAEAAAAnACAAAAACAAEAAAAnACEAAAACAAEAAAAnACIAAAACAAEAAAAnACMAAAACAAEAAAAnACQAAAACAAEAAAAnACUAAAACAAEAAAAnACYAAAACAAEAAAAnACcAAAACAAEAAAAnACgAAAACAAEAAAAoAAAAAAACAAEAAAAoAAEAAAACAAEAAAAoAAIAAAACAAEAAAAoAAMAAAACAAEAAAAoAAQAAAACAAEAAAAoAAUAAAACAAEAAAAoABkAAAAAAAIAAAAoABoAAAAAAAIAAAAoABsAAAAAAAIAAAAoABwAAAACAAIAAAAoAB0AAAACAAEAAAAoAB4AAAACAAEAAAAoAB8AAAACAAEAAAAoACAAAAACAAEAAAAoACEAAAACAAEAAAAoACIAAAACAAEAAAAoACMAAAACAAEAAAAoACQAAAACAAEAAAAoACUAAAACAAEAAAAoACYAAAACAAEAAAAoACcAAAACAAEAAAAoACgAAAACAAEAAAApAAAAAAACAAEAAAApAAEAAAACAAEAAAApAAIAAAACAAEAAAApAAMAAAACAAEAAAApAAQAAAACAAEAAAApAAUAAAACAAEAAAApABkAAAAAAAIAAAApABoAAAAAAAIAAAApABsAAAAAAAIAAAApABwAAAACAAIAAAApAB0AAAACAAEAAAApAB4AAAACAAEAAAApAB8AAAACAAEAAAApACAAAAACAAEAAAApACEAAAACAAEAAAApACIAAAACAAEAAAApACMAAAACAAEAAAApACQAAAACAAEAAAApACUAAAACAAEAAAApACYAAAACAAEAAAApACcAAAACAAEAAAApACgAAAACAAEAAAAqAAAAAAACAAEAAAAqAAEAAAACAAEAAAAqAAIAAAACAAEAAAAqAAMAAAACAAEAAAAqAAQAAAACAAEAAAAqAAUAAAACAAEAAAAqAAYAAAACAAEAAAAqAAcAAAACAAEAAAAqAAgAAAACAAEAAAAqAAkAAAACAAEAAAAqAAoAAAACAAEAAAAqAAsAAAACAAEAAAAqAAwAAAACAAMAAAAqAA0AAAACAAQAAAAqAA4AAAACAAUAAAAqAA8AAAAAAAIAAAAqABAAAAAAAAIAAAAqABEAAAAAAAIAAAAqABIAAAAAAAIAAAAqABMAAAAAAAIAAAAqABQAAAAAAAIAAAAqABUAAAAAAAIAAAAqABYAAAAAAAIAAAAqABcAAAAAAAIAAAAqABgAAAAAAAIAAAAqABkAAAAAAAIAAAAqABoAAAAAAAIAAAAqABsAAAAAAAIAAAAqABwAAAACAAIAAAAqAB0AAAACAAEAAAAqAB4AAAACAAEAAAAqAB8AAAACAAEAAAAqACAAAAACAAEAAAAqACEAAAACAAEAAAAqACIAAAACAAEAAAAqACMAAAACAAEAAAAqACQAAAACAAEAAAAqACUAAAACAAEAAAAqACYAAAACAAEAAAAqACcAAAACAAEAAAAqACgAAAACAAEAAAArAAAAAAACAAEAAAArAAEAAAACAAEAAAArAAIAAAACAAEAAAArAAMAAAACAAEAAAArAAQAAAACAAEAAAArAAUAAAACAAEAAAArAAYAAAACAAEAAAArAAcAAAACAAEAAAArAAgAAAACAAEAAAArAAkAAAACAAEAAAArAAoAAAACAAEAAAArAAsAAAACAAEAAAArAAwAAAADAAMAAAArAA0AAAADAAQAAAArAA4AAAADAAUAAAArAA8AAAAAAAIAAAArABAAAAAAAAIAAAArABEAAAAAAAIAAAArABIAAAAAAAIAAAArABMAAAAAAAIAAAArABQAAAAAAAIAAAArABYAAAAAAAIAAAArABcAAAAAAAIAAAArABgAAAAAAAIAAAArABkAAAAAAAIAAAArABoAAAAAAAIAAAArABsAAAAAAAIAAAArABwAAAACAAIAAAArAB0AAAACAAEAAAArAB4AAAACAAEAAAArAB8AAAACAAEAAAArACAAAAACAAEAAAArACEAAAACAAEAAAArACIAAAACAAEAAAArACMAAAACAAEAAAArACQAAAACAAEAAAArACUAAAACAAEAAAArACYAAAACAAEAAAArACcAAAACAAEAAAArACgAAAACAAEAAAAsAAAAAAACAAEAAAAsAAEAAAACAAEAAAAsAAIAAAACAAEAAAAsAAMAAAACAAEAAAAsAAQAAAACAAEAAAAsAAUAAAACAAEAAAAsAAYAAAACAAEAAAAsAAcAAAACAAEAAAAsAAgAAAACAAEAAAAsAAkAAAACAAEAAAAsAAoAAAACAAEAAAAsAAsAAAACAAEAAAAsAAwAAAACAAEAAAAsAA0AAAACAAEAAAAsAA4AAAADAAAAAAAsABAAAAADAAEAAAAsABEAAAADAAEAAAAsABIAAAADAAEAAAAsABMAAAADAAEAAAAsABQAAAADAAEAAAAsABUAAAADAAEAAAAsABYAAAADAAEAAAAsABcAAAADAAEAAAAsABgAAAADAAEAAAAsABkAAAADAAEAAAAsABoAAAADAAEAAAAsABsAAAADAAEAAAAsABwAAAADAAIAAAAsAB0AAAACAAEAAAAsAB4AAAACAAEAAAAsAB8AAAACAAEAAAAsACAAAAACAAEAAAAsACEAAAACAAEAAAAsACIAAAACAAEAAAAsACMAAAACAAEAAAAsACQAAAACAAEAAAAsACUAAAACAAEAAAAsACYAAAACAAEAAAAsACcAAAACAAEAAAAsACgAAAACAAEAAAAtAAAAAAACAAEAAAAtAAEAAAACAAEAAAAtAAIAAAACAAEAAAAtAAMAAAACAAEAAAAtAAQAAAACAAEAAAAtAAUAAAACAAEAAAAtAAYAAAACAAEAAAAtAAcAAAACAAEAAAAtAAgAAAACAAEAAAAtAAkAAAACAAEAAAAtAAoAAAACAAEAAAAtAAsAAAACAAEAAAAtAAwAAAACAAEAAAAtAA0AAAACAAEAAAAtAA4AAAACAAEAAAAtAA8AAAACAAEAAAAtABAAAAACAAEAAAAtABEAAAACAAEAAAAtABIAAAACAAEAAAAtABMAAAACAAEAAAAtABQAAAACAAEAAAAtABUAAAACAAEAAAAtABYAAAACAAEAAAAtABcAAAACAAEAAAAtABgAAAACAAEAAAAtABkAAAACAAEAAAAtABoAAAACAAEAAAAtABsAAAACAAEAAAAtABwAAAACAAEAAAAtAB0AAAACAAEAAAAtAB4AAAACAAEAAAAtAB8AAAACAAEAAAAtACAAAAACAAEAAAAtACEAAAACAAEAAAAtACIAAAACAAEAAAAtACMAAAACAAEAAAAtACQAAAACAAEAAAAtACUAAAACAAEAAAAtACYAAAACAAEAAAAtACcAAAACAAEAAAAtACgAAAACAAEAAAAuAAAAAAACAAEAAAAuAAEAAAACAAEAAAAuAAIAAAACAAEAAAAuAAMAAAACAAEAAAAuAAQAAAACAAEAAAAuAAUAAAACAAEAAAAuAAYAAAACAAEAAAAuAAcAAAACAAEAAAAuAAgAAAACAAEAAAAuAAkAAAACAAEAAAAuAAoAAAACAAEAAAAuAAsAAAACAAEAAAAuAAwAAAACAAEAAAAuAA0AAAACAAEAAAAuAA4AAAACAAEAAAAuAA8AAAACAAEAAAAuABAAAAACAAEAAAAuABEAAAACAAEAAAAuABIAAAACAAEAAAAuABMAAAACAAEAAAAuABQAAAACAAEAAAAuABUAAAACAAEAAAAuABYAAAACAAEAAAAuABcAAAACAAEAAAAuABgAAAACAAEAAAAuABkAAAACAAEAAAAuABoAAAACAAEAAAAuABsAAAACAAEAAAAuABwAAAACAAEAAAAuAB0AAAACAAEAAAAuAB4AAAACAAEAAAAuAB8AAAACAAEAAAAuACAAAAACAAEAAAAuACEAAAACAAEAAAAuACIAAAACAAEAAAAuACMAAAACAAEAAAAuACQAAAACAAEAAAAuACUAAAACAAEAAAAuACYAAAACAAEAAAAuACcAAAACAAEAAAAuACgAAAACAAEAAAAvAAAAAAACAAEAAAAvAAEAAAACAAEAAAAvAAIAAAACAAEAAAAvAAMAAAACAAEAAAAvAAQAAAACAAEAAAAvAAUAAAACAAEAAAAvAAYAAAACAAEAAAAvAAcAAAACAAEAAAAvAAgAAAACAAEAAAAvAAkAAAACAAEAAAAvAAoAAAACAAEAAAAvAAsAAAACAAEAAAAvAAwAAAACAAEAAAAvAA0AAAACAAEAAAAvAA4AAAACAAEAAAAvAA8AAAACAAEAAAAvABAAAAACAAEAAAAvABEAAAACAAEAAAAvABIAAAACAAEAAAAvABMAAAACAAEAAAAvABQAAAACAAEAAAAvABUAAAACAAEAAAAvABYAAAACAAEAAAAvABcAAAACAAEAAAAvABgAAAACAAEAAAAvABkAAAACAAEAAAAvABoAAAACAAEAAAAvABsAAAACAAEAAAAvABwAAAACAAEAAAAvAB0AAAACAAEAAAAvAB4AAAACAAEAAAAvAB8AAAACAAEAAAAvACAAAAACAAEAAAAvACEAAAACAAEAAAAvACIAAAACAAEAAAAvACMAAAACAAEAAAAvACQAAAACAAEAAAAvACUAAAACAAEAAAAvACYAAAACAAEAAAAvACcAAAACAAEAAAAvACgAAAACAAEAAAAwAAAAAAACAAEAAAAwAAEAAAACAAEAAAAwAAIAAAACAAEAAAAwAAMAAAACAAEAAAAwAAQAAAACAAEAAAAwAAUAAAACAAEAAAAwAAYAAAACAAEAAAAwAAcAAAACAAEAAAAwAAgAAAACAAEAAAAwAAkAAAACAAEAAAAwAAoAAAACAAEAAAAwAAsAAAACAAEAAAAwAAwAAAACAAEAAAAwAA0AAAACAAEAAAAwAA4AAAACAAEAAAAwAA8AAAACAAEAAAAwABAAAAACAAEAAAAwABEAAAACAAEAAAAwABIAAAACAAEAAAAwABMAAAACAAEAAAAwABQAAAACAAEAAAAwABUAAAACAAEAAAAwABYAAAACAAEAAAAwABcAAAACAAEAAAAwABgAAAACAAEAAAAwABkAAAACAAEAAAAwABoAAAACAAEAAAAwABsAAAACAAEAAAAwABwAAAACAAEAAAAwAB0AAAACAAEAAAAwAB4AAAACAAEAAAAwAB8AAAACAAEAAAAwACAAAAACAAEAAAAwACEAAAACAAEAAAAwACIAAAACAAEAAAAwACMAAAACAAEAAAAwACQAAAACAAEAAAAwACUAAAACAAEAAAAwACYAAAACAAEAAAAwACcAAAACAAEAAAAwACgAAAACAAEAAAAxAAAAAAACAAEAAAAxAAEAAAACAAEAAAAxAAIAAAACAAEAAAAxAAMAAAACAAEAAAAxAAQAAAACAAEAAAAxAAUAAAACAAEAAAAxAAYAAAACAAEAAAAxAAcAAAACAAEAAAAxAAgAAAACAAEAAAAxAAkAAAACAAEAAAAxAAoAAAACAAEAAAAxAAsAAAACAAEAAAAxAAwAAAACAAEAAAAxAA0AAAACAAEAAAAxAA4AAAACAAEAAAAxAA8AAAACAAEAAAAxABAAAAACAAEAAAAxABEAAAACAAEAAAAxABIAAAACAAEAAAAxABMAAAACAAEAAAAxABQAAAACAAEAAAAxABUAAAACAAEAAAAxABYAAAACAAEAAAAxABcAAAACAAEAAAAxABgAAAACAAEAAAAxABkAAAACAAEAAAAxABoAAAACAAEAAAAxABsAAAACAAEAAAAxABwAAAACAAEAAAAxAB0AAAACAAEAAAAxAB4AAAACAAEAAAAxAB8AAAACAAEAAAAxACAAAAACAAEAAAAxACEAAAACAAEAAAAxACIAAAACAAEAAAAxACMAAAACAAEAAAAxACQAAAACAAEAAAAxACUAAAACAAEAAAAxACYAAAACAAEAAAAxACcAAAACAAEAAAAxACgAAAACAAEAAAAyAAAAAAACAAEAAAAyAAEAAAACAAEAAAAyAAIAAAACAAEAAAAyAAMAAAACAAEAAAAyAAQAAAACAAEAAAAyAAUAAAACAAEAAAAyAAYAAAACAAEAAAAyAAcAAAACAAEAAAAyAAgAAAACAAEAAAAyAAkAAAACAAEAAAAyAAoAAAACAAEAAAAyAAsAAAACAAEAAAAyAAwAAAACAAEAAAAyAA0AAAACAAEAAAAyAA4AAAACAAEAAAAyAA8AAAACAAEAAAAyABAAAAACAAEAAAAyABEAAAACAAEAAAAyABIAAAACAAEAAAAyABMAAAACAAEAAAAyABQAAAACAAEAAAAyABUAAAACAAEAAAAyABYAAAACAAEAAAAyABcAAAACAAEAAAAyABgAAAACAAEAAAAyABkAAAACAAEAAAAyABoAAAACAAEAAAAyABsAAAACAAEAAAAyABwAAAACAAEAAAAyAB0AAAACAAEAAAAyAB4AAAACAAEAAAAyAB8AAAACAAEAAAAyACAAAAACAAEAAAAyACEAAAACAAEAAAAyACIAAAACAAEAAAAyACMAAAACAAEAAAAyACQAAAACAAEAAAAyACUAAAACAAEAAAAyACYAAAACAAEAAAAyACcAAAACAAEAAAAyACgAAAACAAEAAAAzAAAAAAACAAEAAAAzAAEAAAACAAEAAAAzAAIAAAACAAEAAAAzAAMAAAACAAEAAAAzAAQAAAACAAEAAAAzAAUAAAACAAEAAAAzAAYAAAACAAEAAAAzAAcAAAACAAEAAAAzAAgAAAACAAEAAAAzAAkAAAACAAEAAAAzAAoAAAACAAEAAAAzAAsAAAACAAEAAAAzAAwAAAACAAEAAAAzAA0AAAACAAEAAAAzAA4AAAACAAEAAAAzAA8AAAACAAEAAAAzABAAAAACAAEAAAAzABEAAAACAAEAAAAzABIAAAACAAEAAAAzABMAAAACAAEAAAAzABQAAAACAAEAAAAzABUAAAACAAEAAAAzABYAAAACAAEAAAAzABcAAAACAAEAAAAzABgAAAACAAEAAAAzABkAAAACAAEAAAAzABoAAAACAAEAAAAzABsAAAACAAEAAAAzABwAAAACAAEAAAAzAB0AAAACAAEAAAAzAB4AAAACAAEAAAAzAB8AAAACAAEAAAAzACAAAAACAAEAAAAzACEAAAACAAEAAAAzACIAAAACAAEAAAAzACMAAAACAAEAAAAzACQAAAACAAEAAAAzACUAAAACAAEAAAAzACYAAAACAAEAAAAzACcAAAACAAEAAAAzACgAAAACAAEAAAA0AAAAAAACAAEAAAA0AAEAAAACAAEAAAA0AAIAAAACAAEAAAA0AAMAAAACAAEAAAA0AAQAAAACAAEAAAA0AAUAAAACAAEAAAA0AAYAAAACAAEAAAA0AAcAAAACAAEAAAA0AAgAAAACAAEAAAA0AAkAAAACAAEAAAA0AAoAAAACAAEAAAA0AAsAAAACAAEAAAA0AAwAAAACAAEAAAA0AA0AAAACAAEAAAA0AA4AAAACAAEAAAA0AA8AAAACAAEAAAA0ABAAAAACAAEAAAA0ABEAAAACAAEAAAA0ABIAAAACAAEAAAA0ABMAAAACAAEAAAA0ABQAAAACAAEAAAA0ABUAAAACAAEAAAA0ABYAAAACAAEAAAA0ABcAAAACAAEAAAA0ABgAAAACAAEAAAA0ABkAAAACAAEAAAA0ABoAAAACAAEAAAA0ABsAAAACAAEAAAA0ABwAAAACAAEAAAA0AB0AAAACAAEAAAA0AB4AAAACAAEAAAA0AB8AAAACAAEAAAA0ACAAAAACAAEAAAA0ACEAAAACAAEAAAA0ACIAAAACAAEAAAA0ACMAAAACAAEAAAA0ACQAAAACAAEAAAA0ACUAAAACAAEAAAA0ACYAAAACAAEAAAA0ACcAAAACAAEAAAA0ACgAAAACAAEAAAA1AAAAAAACAAEAAAA1AAEAAAACAAEAAAA1AAIAAAACAAEAAAA1AAMAAAACAAEAAAA1AAQAAAACAAEAAAA1AAUAAAACAAEAAAA1AAYAAAACAAEAAAA1AAcAAAACAAEAAAA1AAgAAAACAAEAAAA1AAkAAAACAAEAAAA1AAoAAAACAAEAAAA1AAsAAAACAAEAAAA1AAwAAAACAAEAAAA1AA0AAAACAAEAAAA1AA4AAAACAAEAAAA1AA8AAAACAAEAAAA1ABAAAAACAAEAAAA1ABEAAAACAAEAAAA1ABIAAAACAAEAAAA1ABMAAAACAAEAAAA1ABQAAAACAAEAAAA1ABUAAAACAAEAAAA1ABYAAAACAAEAAAA1ABcAAAACAAEAAAA1ABgAAAACAAEAAAA1ABkAAAACAAEAAAA1ABoAAAACAAEAAAA1ABsAAAACAAEAAAA1ABwAAAACAAEAAAA1AB0AAAACAAEAAAA1AB4AAAACAAEAAAA1AB8AAAACAAEAAAA1ACAAAAACAAEAAAA1ACEAAAACAAEAAAA1ACIAAAACAAEAAAA1ACMAAAACAAEAAAA1ACQAAAACAAEAAAA1ACUAAAACAAEAAAA1ACYAAAACAAEAAAA1ACcAAAACAAEAAAA1ACgAAAACAAEAAAA2AAAAAAACAAEAAAA2AAEAAAACAAEAAAA2AAIAAAACAAEAAAA2AAMAAAACAAEAAAA2AAQAAAACAAEAAAA2AAUAAAACAAEAAAA2AAYAAAACAAEAAAA2AAcAAAACAAEAAAA2AAgAAAACAAEAAAA2AAkAAAACAAEAAAA2AAoAAAACAAEAAAA2AAsAAAACAAEAAAA2AAwAAAACAAEAAAA2AA0AAAACAAEAAAA2AA4AAAACAAEAAAA2AA8AAAACAAEAAAA2ABAAAAACAAEAAAA2ABEAAAACAAEAAAA2ABIAAAACAAEAAAA2ABMAAAACAAEAAAA2ABQAAAACAAEAAAA2ABUAAAACAAEAAAA2ABYAAAACAAEAAAA2ABcAAAACAAEAAAA2ABgAAAACAAEAAAA2ABkAAAACAAEAAAA2ABoAAAACAAEAAAA2ABsAAAACAAEAAAA2ABwAAAACAAEAAAA2AB0AAAACAAEAAAA2AB4AAAACAAEAAAA2AB8AAAACAAEAAAA2ACAAAAACAAEAAAA2ACEAAAACAAEAAAA2ACIAAAACAAEAAAA2ACMAAAACAAEAAAA2ACQAAAACAAEAAAA2ACUAAAACAAEAAAA2ACYAAAACAAEAAAA2ACcAAAACAAEAAAA2ACgAAAACAAEAAAA3AAAAAAACAAEAAAA3AAEAAAACAAEAAAA3AAIAAAACAAEAAAA3AAMAAAACAAEAAAA3AAQAAAACAAEAAAA3AAUAAAACAAEAAAA3AAYAAAACAAEAAAA3AAcAAAACAAEAAAA3AAgAAAACAAEAAAA3AAkAAAACAAEAAAA3AAoAAAACAAEAAAA3AAsAAAACAAEAAAA3AAwAAAACAAEAAAA3AA0AAAACAAEAAAA3AA4AAAACAAEAAAA3AA8AAAACAAEAAAA3ABAAAAACAAEAAAA3ABEAAAACAAEAAAA3ABIAAAACAAEAAAA3ABMAAAACAAEAAAA3ABQAAAACAAEAAAA3ABUAAAACAAEAAAA3ABYAAAACAAEAAAA3ABcAAAACAAEAAAA3ABgAAAACAAEAAAA3ABkAAAACAAEAAAA3ABoAAAACAAEAAAA3ABsAAAACAAEAAAA3ABwAAAACAAEAAAA3AB0AAAACAAEAAAA3AB4AAAACAAEAAAA3AB8AAAACAAEAAAA3ACAAAAACAAEAAAA3ACEAAAACAAEAAAA3ACIAAAACAAEAAAA3ACMAAAACAAEAAAA3ACQAAAACAAEAAAA3ACUAAAACAAEAAAA3ACYAAAACAAEAAAA3ACcAAAACAAEAAAA3ACgAAAACAAEAAAA4AAAAAAACAAEAAAA4AAEAAAACAAEAAAA4AAIAAAACAAEAAAA4AAMAAAACAAEAAAA4AAQAAAACAAEAAAA4AAUAAAACAAEAAAA4AAYAAAACAAEAAAA4AAcAAAACAAEAAAA4AAgAAAACAAEAAAA4AAkAAAACAAEAAAA4AAoAAAACAAEAAAA4AAsAAAACAAEAAAA4AAwAAAACAAEAAAA4AA0AAAACAAEAAAA4AA4AAAACAAEAAAA4AA8AAAACAAEAAAA4ABAAAAACAAEAAAA4ABEAAAACAAEAAAA4ABIAAAACAAEAAAA4ABMAAAACAAEAAAA4ABQAAAACAAEAAAA4ABUAAAACAAEAAAA4ABYAAAACAAEAAAA4ABcAAAACAAEAAAA4ABgAAAACAAEAAAA4ABkAAAACAAEAAAA4ABoAAAACAAEAAAA4ABsAAAACAAEAAAA4ABwAAAACAAEAAAA4AB0AAAACAAEAAAA4AB4AAAACAAEAAAA4AB8AAAACAAEAAAA4ACAAAAACAAEAAAA4ACEAAAACAAEAAAA4ACIAAAACAAEAAAA4ACMAAAACAAEAAAA4ACQAAAACAAEAAAA4ACUAAAACAAEAAAA4ACYAAAACAAEAAAA4ACcAAAACAAEAAAA4ACgAAAACAAEAAAA5AAAAAAACAAEAAAA5AAEAAAACAAEAAAA5AAIAAAACAAEAAAA5AAMAAAACAAEAAAA5AAQAAAACAAEAAAA5AAUAAAACAAEAAAA5AAYAAAACAAEAAAA5AAcAAAACAAEAAAA5AAgAAAACAAEAAAA5AAkAAAACAAEAAAA5AAoAAAACAAEAAAA5AAsAAAACAAEAAAA5AAwAAAACAAEAAAA5AA0AAAACAAEAAAA5AA4AAAACAAEAAAA5AA8AAAACAAEAAAA5ABAAAAACAAEAAAA5ABEAAAACAAEAAAA5ABIAAAACAAEAAAA5ABMAAAACAAEAAAA5ABQAAAACAAEAAAA5ABUAAAACAAEAAAA5ABYAAAACAAEAAAA5ABcAAAACAAEAAAA5ABgAAAACAAEAAAA5ABkAAAACAAEAAAA5ABoAAAACAAEAAAA5ABsAAAACAAEAAAA5ABwAAAACAAEAAAA5AB0AAAACAAEAAAA5AB4AAAACAAEAAAA5AB8AAAACAAEAAAA5ACAAAAACAAEAAAA5ACEAAAACAAEAAAA5ACIAAAACAAEAAAA5ACMAAAACAAEAAAA5ACQAAAACAAEAAAA5ACUAAAACAAEAAAA5ACYAAAACAAEAAAA5ACcAAAACAAEAAAA5ACgAAAACAAEAAAA6AAAAAAACAAEAAAA6AAEAAAACAAEAAAA6AAIAAAACAAEAAAA6AAMAAAACAAEAAAA6AAQAAAACAAEAAAA6AAUAAAACAAEAAAA6AAYAAAACAAEAAAA6AAcAAAACAAEAAAA6AAgAAAACAAEAAAA6AAkAAAACAAEAAAA6AAoAAAACAAEAAAA6AAsAAAACAAEAAAA6AAwAAAACAAEAAAA6AA0AAAACAAEAAAA6AA4AAAACAAEAAAA6AA8AAAACAAEAAAA6ABAAAAACAAEAAAA6ABEAAAACAAEAAAA6ABIAAAACAAEAAAA6ABMAAAACAAEAAAA6ABQAAAACAAEAAAA6ABUAAAACAAEAAAA6ABYAAAACAAEAAAA6ABcAAAACAAEAAAA6ABgAAAACAAEAAAA6ABkAAAACAAEAAAA6ABoAAAACAAEAAAA6ABsAAAACAAEAAAA6ABwAAAACAAEAAAA6AB0AAAACAAEAAAA6AB4AAAACAAEAAAA6AB8AAAACAAEAAAA6ACAAAAACAAEAAAA6ACEAAAACAAEAAAA6ACIAAAACAAEAAAA6ACMAAAACAAEAAAA6ACQAAAACAAEAAAA6ACUAAAACAAEAAAA6ACYAAAACAAEAAAA6ACcAAAACAAEAAAA6ACgAAAACAAEAAAA7AAAAAAACAAEAAAA7AAEAAAACAAEAAAA7AAIAAAACAAEAAAA7AAMAAAACAAEAAAA7AAQAAAACAAEAAAA7AAUAAAACAAEAAAA7AAYAAAACAAEAAAA7AAcAAAACAAEAAAA7AAgAAAACAAEAAAA7AAkAAAACAAEAAAA7AAoAAAACAAEAAAA7AAsAAAACAAEAAAA7AAwAAAACAAEAAAA7AA0AAAACAAEAAAA7AA4AAAACAAEAAAA7AA8AAAACAAEAAAA7ABAAAAACAAEAAAA7ABEAAAACAAEAAAA7ABIAAAACAAEAAAA7ABMAAAACAAEAAAA7ABQAAAACAAEAAAA7ABUAAAACAAEAAAA7ABYAAAACAAEAAAA7ABcAAAACAAEAAAA7ABgAAAACAAEAAAA7ABkAAAACAAEAAAA7ABoAAAACAAEAAAA7ABsAAAACAAEAAAA7ABwAAAACAAEAAAA7AB0AAAACAAEAAAA7AB4AAAACAAEAAAA7AB8AAAACAAEAAAA7ACAAAAACAAEAAAA7ACEAAAACAAEAAAA7ACIAAAACAAEAAAA7ACMAAAACAAEAAAA7ACQAAAACAAEAAAA7ACUAAAACAAEAAAA7ACYAAAACAAEAAAA7ACcAAAACAAEAAAA7ACgAAAACAAEAAAA8AAAAAAACAAEAAAA8AAEAAAACAAEAAAA8AAIAAAACAAEAAAA8AAMAAAACAAEAAAA8AAQAAAACAAEAAAA8AAUAAAACAAEAAAA8AAYAAAACAAEAAAA8AAcAAAACAAEAAAA8AAgAAAACAAEAAAA8AAkAAAACAAEAAAA8AAoAAAACAAEAAAA8AAsAAAACAAEAAAA8AAwAAAACAAEAAAA8AA0AAAACAAEAAAA8AA4AAAACAAEAAAA8AA8AAAACAAEAAAA8ABAAAAACAAEAAAA8ABEAAAACAAEAAAA8ABIAAAACAAEAAAA8ABMAAAACAAEAAAA8ABQAAAACAAEAAAA8ABUAAAACAAEAAAA8ABYAAAACAAEAAAA8ABcAAAACAAEAAAA8ABgAAAACAAEAAAA8ABkAAAACAAEAAAA8ABoAAAACAAEAAAA8ABsAAAACAAEAAAA8ABwAAAACAAEAAAA8AB0AAAACAAEAAAA8AB4AAAACAAEAAAA8AB8AAAACAAEAAAA8ACAAAAACAAEAAAA8ACEAAAACAAEAAAA8ACIAAAACAAEAAAA8ACMAAAACAAEAAAA8ACQAAAACAAEAAAA8ACUAAAACAAEAAAA8ACYAAAACAAEAAAA8ACcAAAACAAEAAAA8ACgAAAACAAEAAAA9AAAAAAACAAEAAAA9AAEAAAACAAEAAAA9AAIAAAACAAEAAAA9AAMAAAACAAEAAAA9AAQAAAACAAEAAAA9AAUAAAACAAEAAAA9AAYAAAACAAEAAAA9AAcAAAACAAEAAAA9AAgAAAACAAEAAAA9AAkAAAACAAEAAAA9AAoAAAACAAEAAAA9AAsAAAACAAEAAAA9AAwAAAACAAEAAAA9AA0AAAACAAEAAAA9AA4AAAACAAEAAAA9AA8AAAACAAEAAAA9ABAAAAACAAEAAAA9ABEAAAACAAEAAAA9ABIAAAACAAEAAAA9ABMAAAACAAEAAAA9ABQAAAACAAEAAAA9ABUAAAACAAEAAAA9ABYAAAACAAEAAAA9ABcAAAACAAEAAAA9ABgAAAACAAEAAAA9ABkAAAACAAEAAAA9ABoAAAACAAEAAAA9ABsAAAACAAEAAAA9ABwAAAACAAEAAAA9AB0AAAACAAEAAAA9AB4AAAACAAEAAAA9AB8AAAACAAEAAAA9ACAAAAACAAEAAAA9ACEAAAACAAEAAAA9ACIAAAACAAEAAAA9ACMAAAACAAEAAAA9ACQAAAACAAEAAAA9ACUAAAACAAEAAAA9ACYAAAACAAEAAAA9ACcAAAACAAEAAAA9ACgAAAACAAEAAAA+AAAAAAACAAEAAAA+AAEAAAACAAEAAAA+AAIAAAACAAEAAAA+AAMAAAACAAEAAAA+AAQAAAACAAEAAAA+AAUAAAACAAEAAAA+AAYAAAACAAEAAAA+AAcAAAACAAEAAAA+AAgAAAACAAEAAAA+AAkAAAACAAEAAAA+AAoAAAACAAEAAAA+AAsAAAACAAEAAAA+AAwAAAACAAEAAAA+AA0AAAACAAEAAAA+AA4AAAACAAEAAAA+AA8AAAACAAEAAAA+ABAAAAACAAEAAAA+ABEAAAACAAEAAAA+ABIAAAACAAEAAAA+ABMAAAACAAEAAAA+ABQAAAACAAEAAAA+ABUAAAACAAEAAAA+ABYAAAACAAEAAAA+ABcAAAACAAEAAAA+ABgAAAACAAEAAAA+ABkAAAACAAEAAAA+ABoAAAACAAEAAAA+ABsAAAACAAEAAAA+ABwAAAACAAEAAAA+AB0AAAACAAEAAAA+AB4AAAACAAEAAAA+AB8AAAACAAEAAAA+ACAAAAACAAEAAAA+ACEAAAACAAEAAAA+ACIAAAACAAEAAAA+ACMAAAACAAEAAAA+ACQAAAACAAEAAAA+ACUAAAACAAEAAAA+ACYAAAACAAEAAAA+ACcAAAACAAEAAAA+ACgAAAACAAEAAAA/AAAAAAACAAEAAAA/AAEAAAACAAEAAAA/AAIAAAACAAEAAAA/AAMAAAACAAEAAAA/AAQAAAACAAEAAAA/AAUAAAACAAEAAAA/AAYAAAACAAEAAAA/AAcAAAACAAEAAAA/AAgAAAACAAEAAAA/AAkAAAACAAEAAAA/AAoAAAACAAEAAAA/AAsAAAACAAEAAAA/AAwAAAACAAEAAAA/AA0AAAACAAEAAAA/AA4AAAACAAEAAAA/AA8AAAACAAEAAAA/ABAAAAACAAEAAAA/ABEAAAACAAEAAAA/ABIAAAACAAEAAAA/ABMAAAACAAEAAAA/ABQAAAACAAEAAAA/ABUAAAACAAEAAAA/ABYAAAACAAEAAAA/ABcAAAACAAEAAAA/ABgAAAACAAEAAAA/ABkAAAACAAEAAAA/ABoAAAACAAEAAAA/ABsAAAACAAEAAAA/ABwAAAACAAEAAAA/AB0AAAACAAEAAAA/AB4AAAACAAEAAAA/AB8AAAACAAEAAAA/ACAAAAACAAEAAAA/ACEAAAACAAEAAAA/ACIAAAACAAEAAAA/ACMAAAACAAEAAAA/ACQAAAACAAEAAAA/ACUAAAACAAEAAAA/ACYAAAACAAEAAAA/ACcAAAACAAEAAAA/ACgAAAACAAEAAABAAAAAAAACAAEAAABAAAEAAAACAAEAAABAAAIAAAACAAEAAABAAAMAAAACAAEAAABAAAQAAAACAAEAAABAAAUAAAACAAEAAABAAAYAAAACAAEAAABAAAcAAAACAAEAAABAAAgAAAACAAEAAABAAAkAAAACAAEAAABAAAoAAAACAAEAAABAAAsAAAACAAEAAABAAAwAAAACAAEAAABAAA0AAAACAAEAAABAAA4AAAACAAEAAABAAA8AAAACAAEAAABAABAAAAACAAEAAABAABEAAAACAAEAAABAABIAAAACAAEAAABAABMAAAACAAEAAABAABQAAAACAAEAAABAABUAAAACAAEAAABAABYAAAACAAEAAABAABcAAAACAAEAAABAABgAAAACAAEAAABAABkAAAACAAEAAABAABoAAAACAAEAAABAABsAAAACAAEAAABAABwAAAACAAEAAABAAB0AAAACAAEAAABAAB4AAAACAAEAAABAAB8AAAACAAEAAABAACAAAAACAAEAAABAACEAAAACAAEAAABAACIAAAACAAEAAABAACMAAAACAAEAAABAACQAAAACAAEAAABAACUAAAACAAEAAABAACYAAAACAAEAAABAACcAAAACAAEAAABAACgAAAACAAEAAABBAAAAAAACAAEAAABBAAEAAAACAAEAAABBAAIAAAACAAEAAABBAAMAAAACAAEAAABBAAQAAAACAAEAAABBAAUAAAACAAEAAABBAAYAAAACAAEAAABBAAcAAAACAAEAAABBAAgAAAACAAEAAABBAAkAAAACAAEAAABBAAoAAAACAAEAAABBAAsAAAACAAEAAABBAAwAAAACAAEAAABBAA0AAAACAAEAAABBAA4AAAACAAEAAABBAA8AAAACAAEAAABBABAAAAACAAEAAABBABEAAAACAAEAAABBABIAAAACAAEAAABBABMAAAACAAEAAABBABQAAAACAAEAAABBABUAAAACAAEAAABBABYAAAACAAEAAABBABcAAAACAAEAAABBABgAAAACAAEAAABBABkAAAACAAEAAABBABoAAAACAAEAAABBABsAAAACAAEAAABBABwAAAACAAEAAABBAB0AAAACAAEAAABBAB4AAAACAAEAAABBAB8AAAACAAEAAABBACAAAAACAAEAAABBACEAAAACAAEAAABBACIAAAACAAEAAABBACMAAAACAAEAAABBACQAAAACAAEAAABBACUAAAACAAEAAABBACYAAAACAAEAAABBACcAAAACAAEAAABBACgAAAACAAEAAABCAAAAAAACAAEAAABCAAEAAAACAAEAAABCAAIAAAACAAEAAABCAAMAAAACAAEAAABCAAQAAAACAAEAAABCAAUAAAACAAEAAABCAAYAAAACAAEAAABCAAcAAAACAAEAAABCAAgAAAACAAEAAABCAAkAAAACAAEAAABCAAoAAAACAAEAAABCAAsAAAACAAEAAABCAAwAAAACAAEAAABCAA0AAAACAAEAAABCAA4AAAACAAEAAABCAA8AAAACAAEAAABCABAAAAACAAEAAABCABEAAAACAAEAAABCABIAAAACAAEAAABCABMAAAACAAEAAABCABQAAAACAAEAAABCABUAAAACAAEAAABCABYAAAACAAEAAABCABcAAAACAAEAAABCABgAAAACAAEAAABCABkAAAACAAEAAABCABoAAAACAAEAAABCABsAAAACAAEAAABCABwAAAACAAEAAABCAB0AAAACAAEAAABCAB4AAAACAAEAAABCAB8AAAACAAEAAABCACAAAAACAAEAAABCACEAAAACAAEAAABCACIAAAACAAEAAABCACMAAAACAAEAAABCACQAAAACAAEAAABCACUAAAACAAEAAABCACYAAAACAAEAAABCACcAAAACAAEAAABCACgAAAACAAEAAABDAAAAAAACAAEAAABDAAEAAAACAAEAAABDAAIAAAACAAEAAABDAAMAAAACAAEAAABDAAQAAAACAAEAAABDAAUAAAACAAEAAABDAAYAAAACAAEAAABDAAcAAAACAAEAAABDAAgAAAACAAEAAABDAAkAAAACAAEAAABDAAoAAAACAAEAAABDAAsAAAACAAEAAABDAAwAAAACAAEAAABDAA0AAAACAAEAAABDAA4AAAACAAEAAABDAA8AAAACAAEAAABDABAAAAACAAEAAABDABEAAAACAAEAAABDABIAAAACAAEAAABDABMAAAACAAEAAABDABQAAAACAAEAAABDABUAAAACAAEAAABDABYAAAACAAEAAABDABcAAAACAAEAAABDABgAAAACAAEAAABDABkAAAACAAEAAABDABoAAAACAAEAAABDABsAAAACAAEAAABDABwAAAACAAEAAABDAB0AAAACAAEAAABDAB4AAAACAAEAAABDAB8AAAACAAEAAABDACAAAAACAAEAAABDACEAAAACAAEAAABDACIAAAACAAEAAABDACMAAAACAAEAAABDACQAAAACAAEAAABDACUAAAACAAEAAABDACYAAAACAAEAAABDACcAAAACAAEAAABDACgAAAACAAEAAABEAAAAAAACAAEAAABEAAEAAAACAAEAAABEAAIAAAACAAEAAABEAAMAAAACAAEAAABEAAQAAAACAAEAAABEAAUAAAACAAEAAABEAAYAAAACAAEAAABEAAcAAAACAAEAAABEAAgAAAACAAEAAABEAAkAAAACAAEAAABEAAoAAAACAAEAAABEAAsAAAACAAEAAABEAAwAAAACAAEAAABEAA0AAAACAAEAAABEAA4AAAACAAEAAABEAA8AAAACAAEAAABEABAAAAACAAEAAABEABEAAAACAAEAAABEABIAAAACAAEAAABEABMAAAACAAEAAABEABQAAAACAAEAAABEABUAAAACAAEAAABEABYAAAACAAEAAABEABcAAAACAAEAAABEABgAAAACAAEAAABEABkAAAACAAEAAABEABoAAAACAAEAAABEABsAAAACAAEAAABEABwAAAACAAEAAABEAB0AAAACAAEAAABEAB4AAAACAAEAAABEAB8AAAACAAEAAABEACAAAAACAAEAAABEACEAAAACAAEAAABEACIAAAACAAEAAABEACMAAAACAAEAAABEACQAAAACAAEAAABEACUAAAACAAEAAABEACYAAAACAAEAAABEACcAAAACAAEAAABEACgAAAACAAEAAABFAAAAAAACAAEAAABFAAEAAAACAAEAAABFAAIAAAACAAEAAABFAAMAAAACAAEAAABFAAQAAAACAAEAAABFAAUAAAACAAEAAABFAAYAAAACAAEAAABFAAcAAAACAAEAAABFAAgAAAACAAEAAABFAAkAAAACAAEAAABFAAoAAAACAAEAAABFAAsAAAACAAEAAABFAAwAAAACAAEAAABFAA0AAAACAAEAAABFAA4AAAACAAEAAABFAA8AAAACAAEAAABFABAAAAACAAEAAABFABEAAAACAAEAAABFABIAAAACAAEAAABFABMAAAACAAEAAABFABQAAAACAAEAAABFABUAAAACAAEAAABFABYAAAACAAEAAABFABcAAAACAAEAAABFABgAAAACAAEAAABFABkAAAACAAEAAABFABoAAAACAAEAAABFABsAAAACAAEAAABFABwAAAACAAEAAABFAB0AAAACAAEAAABFAB4AAAACAAEAAABFAB8AAAACAAEAAABFACAAAAACAAEAAABFACEAAAACAAEAAABFACIAAAACAAEAAABFACMAAAACAAEAAABFACQAAAACAAEAAABFACUAAAACAAEAAABFACYAAAACAAEAAABFACcAAAACAAEAAABFACgAAAACAAEAAABGAAAAAAACAAEAAABGAAEAAAACAAEAAABGAAIAAAACAAEAAABGAAMAAAACAAEAAABGAAQAAAACAAEAAABGAAUAAAACAAEAAABGAAYAAAACAAEAAABGAAcAAAACAAEAAABGAAgAAAACAAEAAABGAAkAAAACAAEAAABGAAoAAAACAAEAAABGAAsAAAACAAEAAABGAAwAAAACAAEAAABGAA0AAAACAAEAAABGAA4AAAACAAEAAABGAA8AAAACAAEAAABGABAAAAACAAEAAABGABEAAAACAAEAAABGABIAAAACAAEAAABGABMAAAACAAEAAABGABQAAAACAAEAAABGABUAAAACAAEAAABGABYAAAACAAEAAABGABcAAAACAAEAAABGABgAAAACAAEAAABGABkAAAACAAEAAABGABoAAAACAAEAAABGABsAAAACAAEAAABGABwAAAACAAEAAABGAB0AAAACAAEAAABGAB4AAAACAAEAAABGAB8AAAACAAEAAABGACAAAAACAAEAAABGACEAAAACAAEAAABGACIAAAACAAEAAABGACMAAAACAAEAAABGACQAAAACAAEAAABGACUAAAACAAEAAABGACYAAAACAAEAAABGACcAAAACAAEAAABGACgAAAACAAEAAABHAAAAAAACAAEAAABHAAEAAAACAAEAAABHAAIAAAACAAEAAABHAAMAAAACAAEAAABHAAQAAAACAAEAAABHAAUAAAACAAEAAABHAAYAAAACAAEAAABHAAcAAAACAAEAAABHAAgAAAACAAEAAABHAAkAAAACAAEAAABHAAoAAAACAAEAAABHAAsAAAACAAEAAABHAAwAAAACAAEAAABHAA0AAAACAAEAAABHAA4AAAACAAEAAABHAA8AAAACAAEAAABHABAAAAACAAEAAABHABEAAAACAAEAAABHABIAAAACAAEAAABHABMAAAACAAEAAABHABQAAAACAAEAAABHABUAAAACAAEAAABHABYAAAACAAEAAABHABcAAAACAAEAAABHABgAAAACAAEAAABHABkAAAACAAEAAABHABoAAAACAAEAAABHABsAAAACAAEAAABHABwAAAACAAEAAABHAB0AAAACAAEAAABHAB4AAAACAAEAAABHAB8AAAACAAEAAABHACAAAAACAAEAAABHACEAAAACAAEAAABHACIAAAACAAEAAABHACMAAAACAAEAAABHACQAAAACAAEAAABHACUAAAACAAEAAABHACYAAAACAAEAAABHACcAAAACAAEAAABHACgAAAACAAEAAAAsAA8AAAADAAEAAAArABUAAAAAAAIAAAAbAAsAAAACAAEAAAAbAAwAAAACAAEAAAAbAA0AAAACAAEAAAAbAA4AAAACAAEAAAAbAA8AAAACAAEAAAAbABAAAAACAAEAAAAbABEAAAACAAEAAAAbABIAAAACAAEAAAAbABMAAAACAAEAAAAbABQAAAACAAEAAAAbABUAAAACAAEAAAAbABYAAAACAAEAAAAbABcAAAACAAEAAAAbABgAAAACAAEAAAAcAAsAAAACAAEAAAAcAAwAAAACAAEAAAAcAA0AAAACAAEAAAAcAA4AAAABAAAAAAAcAA8AAAABAAEAAAAcABAAAAABAAEAAAAcABEAAAABAAEAAAAcABIAAAABAAEAAAAcABMAAAABAAEAAAAcABQAAAABAAEAAAAcABUAAAABAAEAAAAcABYAAAABAAEAAAAcABcAAAABAAEAAAAcABgAAAABAAEAAAAdAAsAAAACAAEAAAAdAAwAAAABAAMAAAAdAA0AAAABAAQAAAAdAA4AAAABAAUAAAAdAA8AAAAAAAIAAAAdABAAAAAAAAIAAAAdABEAAAAAAAIAAAAdABIAAAAAAAIAAAAdABMAAAAAAAIAAAAdABQAAAAAAAIAAAAdABUAAAAAAAIAAAAdABYAAAAAAAIAAAAdABcAAAAAAAIAAAAdABgAAAAAAAIAAAAeAAsAAAACAAEAAAAeAAwAAAACAAMAAAAeAA0AAAAMAAAAAAAeAA4AAAACAAUAAAAeAA8AAAAAAAIAAAAeABAAAAAAAAIAAAAeABEAAAAAAAIAAAAeABIAAAAAAAIAAAAeABMAAAAAAAIAAAAeABQAAAAAAAIAAAAeABUAAAAAAAIAAAAeABYAAAAAAAIAAAAeABcAAAAAAAIAAAAeABgAAAAAAAIAAAAfAAsAAAACAAEAAAAfAAwAAAADAAMAAAAfAA0AAAANAAAAAAAfAA4AAAADAAUAAAAfAA8AAAAAAAIAAAAfABAAAAAAAAIAAAAfABEAAAAAAAIAAAAfABIAAAAAAAIAAAAfABMAAAAAAAIAAAAfABQAAAAAAAIAAAAfABUAAAAAAAIAAAAfABYAAAAAAAIAAAAfABcAAAAAAAIAAAAfABgAAAAAAAIAAAAgAAsAAAACAAEAAAAgAAwAAAABAAMAAAAgAA0AAAACAAQAAAAgAA4AAAABAAUAAAAgAA8AAAAAAAIAAAAgABAAAAAAAAIAAAAgABEAAAAAAAIAAAAgABIAAAAAAAIAAAAgABMAAAAAAAIAAAAgABQAAAAAAAIAAAAgABUAAAAAAAIAAAAgABYAAAAAAAIAAAAgABcAAAAAAAIAAAAgABgAAAAAAAIAAAAhAAsAAAACAAEAAAAhAAwAAAACAAMAAAAhAA0AAAACAAQAAAAhAA4AAAACAAUAAAAhAA8AAAAAAAIAAAAhABAAAAAAAAIAAAAhABEAAAAAAAIAAAAhABIAAAAAAAIAAAAhABMAAAAAAAIAAAAhABQAAAAAAAIAAAAhABUAAAAAAAIAAAAhABYAAAAAAAIAAAAhABcAAAAAAAIAAAAhABgAAAAAAAIAAAAiAAsAAAACAAEAAAAiAAwAAAADAAMAAAAiAA0AAAAMAAoAAAAiAA4AAAAMAAsAAAAiAA8AAAAMAAwAAAAiABAAAAAAAAIAAAAiABEAAAAAAAIAAAAiABIAAAAAAAIAAAAiABMAAAAAAAIAAAAiABQAAAAAAAIAAAAiABUAAAAAAAIAAAAiABYAAAAAAAIAAAAiABcAAAAQAAQAAAAiABgAAAAAAAIAAAAjAAsAAAACAAEAAAAjAAwAAAACAAMAAAAjAA0AAAANAAoAAAAjAA4AAAANAAsAAAAjAA8AAAANAAwAAAAjABAAAAAAAAIAAAAjABEAAAAAAAIAAAAjABIAAAAAAAIAAAAjABMAAAAAAAIAAAAjABQAAAAAAAIAAAAjABUAAAAAAAIAAAAjABYAAAAAAAIAAAAjABcAAAAAAAIAAAAjABgAAAAAAAIAAAAkAAsAAAACAAEAAAAkAAwAAAACAAMAAAAkAA0AAAACAAQAAAAkAA4AAAACAAUAAAAkAA8AAAAAAAIAAAAkABAAAAAAAAIAAAAkABEAAAAAAAIAAAAkABIAAAAAAAIAAAAkABMAAAAAAAIAAAAkABQAAAAAAAIAAAAkABUAAAAPAAQAAAAkABYAAAAAAAIAAAAkABcAAAANAAEAAAAkABgAAAARAAQAAAAlAAsAAAACAAEAAAAlAAwAAAADAAMAAAAlAA0AAAADAAQAAAAlAA4AAAADAAUAAAAlAA8AAAAAAAIAAAAlABAAAAAAAAIAAAAlABEAAAAAAAIAAAAlABIAAAAAAAIAAAAlABMAAAAAAAIAAAAlABQAAAAAAAIAAAAlABUAAAAAAAIAAAAlABYAAAAAAAIAAAAlABcAAAAAAAIAAAAlABgAAAAAAAIAAAAmAAsAAAACAAEAAAAmAAwAAAABAAMAAAAmAA0AAAABAAQAAAAmAA4AAAABAAUAAAAmAA8AAAAAAAIAAAAmABAAAAAAAAIAAAAmABEAAAAAAAcAAAAmABIAAAAAAAgAAAAmABMAAAAAAAkAAAAmABQAAAAAAAIAAAAmABUAAAAAAAIAAAAmABYAAAAAAAIAAAAmABcAAAASAAQAAAAmABgAAAAAAAIAAAAnAAsAAAACAAEAAAAnAAwAAAACAAMAAAAnAA0AAAACAAQAAAAnAA4AAAACAAUAAAAnAA8AAAAAAAIAAAAnABAAAAAAAAIAAAAnABEAAAABAAcAAAAnABIAAAABAAgAAAAnABMAAAABAAkAAAAnABQAAAAAAAIAAAAnABUAAAAAAAIAAAAnABYAAAAAAAIAAAAnABcAAAAAAAIAAAAnABgAAAAAAAIAAAAoAAsAAAACAAEAAAAoAAwAAAADAAMAAAAoAA0AAAADAAQAAAAoAA4AAAADAAUAAAAoAA8AAAAAAAIAAAAoABAAAAAAAAIAAAAoABEAAAACAAcAAAAoABIAAAACAAgAAAAoABMAAAACAAkAAAAoABQAAAAAAAIAAAAoABUAAAAAAAIAAAAoABYAAAAAAAIAAAAoABcAAAAAAAIAAAAoABgAAAAAAAIAAAApAAsAAAACAAEAAAApAAwAAAABAAMAAAApAA0AAAABAAQAAAApAA4AAAABAAUAAAApAA8AAAATAAEAAAApABAAAAATAAIAAAApABEAAAATAAMAAAApABIAAAAAAAIAAAApABMAAAAAAAIAAAApABQAAAAAAAIAAAApABUAAAAAAAIAAAApABYAAAAAAAIAAAApABcAAAAAAAIAAAApABgAAAAAAAIAAAAXAAYAAAACAAEAAAAXAAcAAAACAAEAAAAXAAgAAAACAAEAAAAXAAkAAAACAAEAAAAXAAoAAAACAAEAAAAXAAsAAAACAAEAAAAXAAwAAAACAAEAAAAXAA0AAAACAAEAAAAXAA4AAAACAAEAAAAXAA8AAAACAAEAAAAXABAAAAACAAEAAAAXABEAAAACAAEAAAAXABIAAAACAAEAAAAYAAYAAAACAAEAAAAYAAcAAAACAAEAAAAYAAgAAAACAAEAAAAYAAkAAAACAAEAAAAYAAoAAAACAAEAAAAYAAsAAAACAAEAAAAYAAwAAAACAAEAAAAYAA0AAAACAAEAAAAYAA4AAAACAAEAAAAYAA8AAAACAAEAAAAYABAAAAACAAEAAAAYABEAAAACAAEAAAAYABIAAAACAAEAAAAZAAYAAAACAAEAAAAZAAcAAAACAAEAAAAZAAgAAAACAAEAAAAZAAkAAAACAAEAAAAZAAoAAAACAAEAAAAZAAsAAAACAAEAAAAZAAwAAAACAAEAAAAZAA0AAAACAAEAAAAZAA4AAAACAAEAAAAZAA8AAAACAAEAAAAZABAAAAACAAEAAAAZABEAAAACAAEAAAAZABIAAAACAAEAAAAaAAYAAAACAAEAAAAaAAcAAAACAAEAAAAaAAgAAAACAAEAAAAaAAkAAAACAAEAAAAaAAoAAAACAAEAAAAaAAsAAAACAAEAAAAaAAwAAAACAAEAAAAaAA0AAAACAAEAAAAaAA4AAAACAAEAAAAaAA8AAAACAAEAAAAaABAAAAACAAEAAAAaABEAAAACAAEAAAAaABIAAAACAAEAAAAbAAYAAAACAAEAAAAbAAcAAAACAAEAAAAbAAgAAAACAAEAAAAbAAkAAAACAAEAAAAbAAoAAAACAAEAAAAXABMAAAACAAEAAAAXABQAAAACAAEAAAAXABUAAAACAAEAAAAXABYAAAACAAEAAAAXABcAAAACAAEAAAAXABgAAAACAAEAAAAYABMAAAACAAEAAAAYABQAAAACAAEAAAAYABUAAAACAAEAAAAYABYAAAACAAEAAAAYABcAAAACAAEAAAAYABgAAAACAAEAAAAZABMAAAACAAEAAAAZABQAAAACAAEAAAAZABUAAAACAAEAAAAZABYAAAACAAEAAAAZABcAAAACAAEAAAAZABgAAAACAAEAAAAaABMAAAACAAEAAAAaABQAAAACAAEAAAAaABUAAAACAAEAAAAaABYAAAACAAEAAAAaABcAAAACAAEAAAAaABgAAAACAAEAAAAcAAYAAAACAAEAAAAcAAcAAAACAAEAAAAcAAgAAAACAAEAAAAcAAkAAAACAAEAAAAcAAoAAAACAAEAAAAdAAYAAAACAAEAAAAdAAcAAAACAAEAAAAdAAgAAAACAAEAAAAdAAkAAAACAAEAAAAdAAoAAAACAAEAAAAeAAYAAAACAAEAAAAeAAcAAAACAAEAAAAeAAgAAAACAAEAAAAeAAkAAAACAAEAAAAeAAoAAAACAAEAAAAfAAYAAAACAAEAAAAfAAcAAAACAAEAAAAfAAgAAAACAAEAAAAfAAkAAAACAAEAAAAfAAoAAAACAAEAAAAgAAYAAAACAAEAAAAgAAcAAAACAAEAAAAgAAgAAAACAAEAAAAgAAkAAAACAAEAAAAgAAoAAAACAAEAAAAhAAYAAAACAAEAAAAhAAcAAAACAAEAAAAhAAgAAAACAAEAAAAhAAkAAAACAAEAAAAhAAoAAAACAAEAAAAiAAYAAAACAAEAAAAiAAcAAAACAAEAAAAiAAgAAAACAAEAAAAiAAkAAAACAAEAAAAiAAoAAAACAAEAAAAjAAYAAAACAAEAAAAjAAcAAAACAAEAAAAjAAgAAAACAAEAAAAjAAkAAAACAAEAAAAjAAoAAAACAAEAAAAkAAYAAAACAAEAAAAkAAcAAAACAAEAAAAkAAgAAAACAAEAAAAkAAkAAAACAAEAAAAkAAoAAAACAAEAAAAlAAYAAAACAAEAAAAlAAcAAAACAAEAAAAlAAgAAAACAAEAAAAlAAkAAAACAAEAAAAlAAoAAAACAAEAAAAmAAYAAAACAAEAAAAmAAcAAAACAAEAAAAmAAgAAAACAAEAAAAmAAkAAAACAAEAAAAmAAoAAAACAAEAAAAnAAYAAAACAAEAAAAnAAcAAAACAAEAAAAnAAgAAAACAAEAAAAnAAkAAAACAAEAAAAnAAoAAAACAAEAAAAoAAYAAAACAAEAAAAoAAcAAAACAAEAAAAoAAgAAAACAAEAAAAoAAkAAAACAAEAAAAoAAoAAAACAAEAAAApAAYAAAACAAEAAAApAAcAAAACAAEAAAApAAgAAAACAAEAAAApAAkAAAACAAEAAAApAAoAAAACAAEAAAD0////AAACAAEAAAD1////AAACAAEAAAD1/wAAAAACAAEAAAD2/wAAAAACAAEAAAD2/wEAAAACAAEAAAD3/wIAAAACAAEAAAD4/wMAAAACAAEAAAD4/wQAAAACAAEAAAD5/wUAAAACAAEAAAD6/wYAAAACAAEAAAD6/wcAAAACAAEAAAD7/wgAAAACAAEAAAD8/wkAAAACAAEAAAD9/woAAAACAAEAAAD+/wsAAAACAAEAAAD+/wwAAAACAAEAAAD//w0AAAACAAEAAADl//T/AAACAAEAAADl//X/AAACAAEAAADl//b/AAACAAEAAADl//f/AAACAAEAAADl//j/AAACAAEAAADl//n/AAACAAEAAADl//r/AAACAAEAAADl//v/AAACAAEAAADl//z/AAACAAEAAADl//3/AAACAAEAAADl//7/AAACAAEAAADl////AAACAAEAAADl/wAAAAACAAEAAADl/wEAAAACAAEAAADl/wIAAAACAAEAAADl/wMAAAACAAEAAADl/wQAAAACAAEAAADl/wUAAAACAAEAAADl/wYAAAACAAEAAADl/wcAAAACAAEAAADl/wgAAAACAAEAAADl/wkAAAACAAEAAADl/woAAAACAAEAAADl/wsAAAACAAEAAADl/wwAAAACAAEAAADl/w0AAAACAAEAAADl/w4AAAACAAEAAADl/w8AAAACAAEAAADl/xAAAAACAAEAAADl/xEAAAACAAEAAADl/xIAAAACAAEAAADl/xMAAAACAAEAAADl/xQAAAACAAEAAADl/xUAAAACAAEAAADl/xYAAAACAAEAAADl/xcAAAACAAEAAADl/xgAAAACAAEAAADl/xkAAAACAAEAAADl/xoAAAACAAEAAADl/xsAAAACAAEAAADl/xwAAAACAAEAAADl/x0AAAACAAEAAADl/x4AAAACAAEAAADl/x8AAAACAAEAAADl/yAAAAACAAEAAADl/yEAAAACAAEAAADl/yIAAAACAAEAAADl/yMAAAACAAEAAADl/yQAAAACAAEAAADl/yUAAAACAAEAAADl/yYAAAACAAEAAADl/ycAAAACAAEAAADl/ygAAAACAAEAAADl/ykAAAACAAEAAADl/yoAAAACAAEAAADl/ysAAAACAAEAAADl/ywAAAACAAEAAADl/y0AAAACAAEAAADl/y4AAAACAAEAAADl/y8AAAACAAEAAADl/zAAAAACAAEAAADl/zEAAAACAAEAAADl/zIAAAACAAEAAADl/zMAAAACAAEAAADl/zQAAAACAAEAAADl/zUAAAACAAEAAADl/zYAAAACAAEAAADl/zcAAAACAAEAAADl/zgAAAACAAEAAADm//T/AAACAAEAAADm//X/AAACAAEAAADm//b/AAACAAEAAADm//f/AAACAAEAAADm//j/AAACAAEAAADm//n/AAACAAEAAADm//r/AAACAAEAAADm//v/AAACAAEAAADm//z/AAACAAEAAADm//3/AAACAAEAAADm//7/AAACAAEAAADm////AAACAAEAAADm/wAAAAACAAEAAADm/wEAAAACAAEAAADm/wIAAAACAAEAAADm/wMAAAACAAEAAADm/wQAAAACAAEAAADm/wUAAAACAAEAAADm/wYAAAACAAEAAADm/wcAAAACAAEAAADm/wgAAAACAAEAAADm/wkAAAACAAEAAADm/woAAAACAAEAAADm/wsAAAACAAEAAADm/wwAAAACAAEAAADm/w0AAAACAAEAAADm/w4AAAACAAEAAADm/w8AAAACAAEAAADm/xAAAAACAAEAAADm/xEAAAACAAEAAADm/xIAAAACAAEAAADm/xMAAAACAAEAAADm/xQAAAACAAEAAADm/xUAAAACAAEAAADm/xYAAAACAAEAAADm/xcAAAACAAEAAADm/xgAAAACAAEAAADm/xkAAAACAAEAAADm/xoAAAACAAEAAADm/xsAAAACAAEAAADm/xwAAAACAAEAAADm/x0AAAACAAEAAADm/x4AAAACAAEAAADm/x8AAAACAAEAAADm/yAAAAACAAEAAADm/yEAAAACAAEAAADm/yIAAAACAAEAAADm/yMAAAACAAEAAADm/yQAAAACAAEAAADm/yUAAAACAAEAAADm/yYAAAACAAEAAADm/ycAAAACAAEAAADm/ygAAAACAAEAAADm/ykAAAACAAEAAADm/yoAAAACAAEAAADm/ysAAAACAAEAAADm/ywAAAACAAEAAADm/y0AAAACAAEAAADm/y4AAAACAAEAAADm/y8AAAACAAEAAADm/zAAAAACAAEAAADm/zEAAAACAAEAAADm/zIAAAACAAEAAADm/zMAAAACAAEAAADm/zQAAAACAAEAAADm/zUAAAACAAEAAADm/zYAAAACAAEAAADm/zcAAAACAAEAAADm/zgAAAACAAEAAADn//T/AAACAAEAAADn//X/AAACAAEAAADn//b/AAACAAEAAADn//f/AAACAAEAAADn//j/AAACAAEAAADn//n/AAACAAEAAADn//r/AAACAAEAAADn//v/AAACAAEAAADn//z/AAACAAEAAADn//3/AAACAAEAAADn//7/AAACAAEAAADn////AAACAAEAAADn/wAAAAACAAEAAADn/wEAAAACAAEAAADn/wIAAAACAAEAAADn/wMAAAACAAEAAADn/wQAAAACAAEAAADn/wUAAAACAAEAAADn/wYAAAACAAEAAADn/wcAAAACAAEAAADn/wgAAAACAAEAAADn/wkAAAACAAEAAADn/woAAAACAAEAAADn/wsAAAACAAEAAADn/wwAAAACAAEAAADn/w0AAAACAAEAAADn/w4AAAACAAEAAADn/w8AAAACAAEAAADn/xAAAAACAAEAAADn/xEAAAACAAEAAADn/xIAAAACAAEAAADn/xMAAAACAAEAAADn/xQAAAACAAEAAADn/xUAAAACAAEAAADn/xYAAAACAAEAAADn/xcAAAACAAEAAADn/xgAAAACAAEAAADn/xkAAAACAAEAAADn/xoAAAACAAEAAADn/xsAAAACAAEAAADn/xwAAAACAAEAAADn/x0AAAACAAEAAADn/x4AAAACAAEAAADn/x8AAAACAAEAAADn/yAAAAACAAEAAADn/yEAAAACAAEAAADn/yIAAAACAAEAAADn/yMAAAACAAEAAADn/yQAAAACAAEAAADn/yUAAAACAAEAAADn/yYAAAACAAEAAADn/ycAAAACAAEAAADn/ygAAAACAAEAAADn/ykAAAACAAEAAADn/yoAAAACAAEAAADn/ysAAAACAAEAAADn/ywAAAACAAEAAADn/y0AAAACAAEAAADn/y4AAAACAAEAAADn/y8AAAACAAEAAADn/zAAAAACAAEAAADn/zEAAAACAAEAAADn/zIAAAACAAEAAADn/zMAAAACAAEAAADn/zQAAAACAAEAAADn/zUAAAACAAEAAADn/zYAAAACAAEAAADn/zcAAAACAAEAAADn/zgAAAACAAEAAADo//T/AAACAAEAAADo//X/AAACAAEAAADo//b/AAACAAEAAADo//f/AAACAAEAAADo//j/AAACAAEAAADo//n/AAACAAEAAADo//r/AAACAAEAAADo//v/AAACAAEAAADo//z/AAACAAEAAADo//3/AAACAAEAAADo//7/AAACAAEAAADo////AAACAAEAAADo/wAAAAACAAEAAADo/wEAAAACAAEAAADo/wIAAAACAAEAAADo/wMAAAACAAEAAADo/wQAAAACAAEAAADo/wUAAAACAAEAAADo/wYAAAACAAEAAADo/wcAAAACAAEAAADo/wgAAAACAAEAAADo/wkAAAACAAEAAADo/woAAAACAAEAAADo/wsAAAACAAEAAADo/wwAAAACAAEAAADo/w0AAAACAAEAAADo/w4AAAACAAEAAADo/w8AAAACAAEAAADo/xAAAAACAAEAAADo/xEAAAACAAEAAADo/xIAAAACAAEAAADo/xMAAAACAAEAAADo/xQAAAACAAEAAADo/xUAAAACAAEAAADo/xYAAAACAAEAAADo/xcAAAACAAEAAADo/xgAAAACAAEAAADo/xkAAAACAAEAAADo/xoAAAACAAEAAADo/xsAAAACAAEAAADo/xwAAAACAAEAAADo/x0AAAACAAEAAADo/x4AAAACAAEAAADo/x8AAAACAAEAAADo/yAAAAACAAEAAADo/yEAAAACAAEAAADo/yIAAAACAAEAAADo/yMAAAACAAEAAADo/yQAAAACAAEAAADo/yUAAAACAAEAAADo/yYAAAACAAEAAADo/ycAAAACAAEAAADo/ygAAAACAAEAAADo/ykAAAACAAEAAADo/yoAAAACAAEAAADo/ysAAAACAAEAAADo/ywAAAACAAEAAADo/y0AAAACAAEAAADo/y4AAAACAAEAAADo/y8AAAACAAEAAADo/zAAAAACAAEAAADo/zEAAAACAAEAAADo/zIAAAACAAEAAADo/zMAAAACAAEAAADo/zQAAAACAAEAAADo/zUAAAACAAEAAADo/zYAAAACAAEAAADo/zcAAAACAAEAAADo/zgAAAACAAEAAADp//T/AAACAAEAAADp//X/AAACAAEAAADp//b/AAACAAEAAADp//f/AAACAAEAAADp//j/AAACAAEAAADp//n/AAACAAEAAADp//r/AAACAAEAAADp//v/AAACAAEAAADp//z/AAACAAEAAADp//3/AAACAAEAAADp//7/AAACAAEAAADp////AAACAAEAAADp/wAAAAACAAEAAADp/wEAAAACAAEAAADp/wIAAAACAAEAAADp/wMAAAACAAEAAADp/wQAAAACAAEAAADp/wUAAAACAAEAAADp/wYAAAACAAEAAADp/wcAAAACAAEAAADp/wgAAAACAAEAAADp/wkAAAACAAEAAADp/woAAAACAAEAAADp/wsAAAACAAEAAADp/wwAAAACAAEAAADp/w0AAAACAAEAAADp/w4AAAACAAEAAADp/w8AAAACAAEAAADp/xAAAAACAAEAAADp/xEAAAACAAEAAADp/xIAAAACAAEAAADp/xMAAAACAAEAAADp/xQAAAACAAEAAADp/xUAAAACAAEAAADp/xYAAAACAAEAAADp/xcAAAACAAEAAADp/xgAAAACAAEAAADp/xkAAAACAAEAAADp/xoAAAACAAEAAADp/xsAAAACAAEAAADp/xwAAAACAAEAAADp/x0AAAACAAEAAADp/x4AAAACAAEAAADp/x8AAAACAAEAAADp/yAAAAACAAEAAADp/yEAAAACAAEAAADp/yIAAAACAAEAAADp/yMAAAACAAEAAADp/yQAAAACAAEAAADp/yUAAAACAAEAAADp/yYAAAACAAEAAADp/ycAAAACAAEAAADp/ygAAAACAAEAAADp/ykAAAACAAEAAADp/yoAAAACAAEAAADp/ysAAAACAAEAAADp/ywAAAACAAEAAADp/y0AAAACAAEAAADp/y4AAAACAAEAAADp/y8AAAACAAEAAADp/zAAAAACAAEAAADp/zEAAAACAAEAAADp/zIAAAACAAEAAADp/zMAAAACAAEAAADp/zQAAAACAAEAAADp/zUAAAACAAEAAADp/zYAAAACAAEAAADp/zcAAAACAAEAAADp/zgAAAACAAEAAADq//T/AAACAAEAAADq//X/AAACAAEAAADq//b/AAACAAEAAADq//f/AAACAAEAAADq//j/AAACAAEAAADq//n/AAACAAEAAADq//r/AAACAAEAAADq//v/AAACAAEAAADq//z/AAACAAEAAADq//3/AAACAAEAAADq//7/AAACAAEAAADq////AAACAAEAAADq/wAAAAACAAEAAADq/wEAAAACAAEAAADq/wIAAAACAAEAAADq/wMAAAACAAEAAADq/wQAAAACAAEAAADq/wUAAAACAAEAAADq/wYAAAACAAEAAADq/wcAAAACAAEAAADq/wgAAAACAAEAAADq/wkAAAACAAEAAADq/woAAAACAAEAAADq/wsAAAACAAEAAADq/wwAAAACAAEAAADq/w0AAAACAAEAAADq/w4AAAACAAEAAADq/w8AAAACAAEAAADq/xAAAAACAAEAAADq/xEAAAACAAEAAADq/xIAAAACAAEAAADq/xMAAAACAAEAAADq/xQAAAACAAEAAADq/xUAAAACAAEAAADq/xYAAAACAAEAAADq/xcAAAACAAEAAADq/xgAAAACAAEAAADq/xkAAAACAAEAAADq/xoAAAACAAEAAADq/xsAAAACAAEAAADq/xwAAAACAAEAAADq/x0AAAACAAEAAADq/x4AAAACAAEAAADq/x8AAAACAAEAAADq/yAAAAACAAEAAADq/yEAAAACAAEAAADq/yIAAAACAAEAAADq/yMAAAACAAEAAADq/yQAAAACAAEAAADq/yUAAAACAAEAAADq/yYAAAACAAEAAADq/ycAAAACAAEAAADq/ygAAAACAAEAAADq/ykAAAACAAEAAADq/yoAAAACAAEAAADq/ysAAAACAAEAAADq/ywAAAACAAEAAADq/y0AAAACAAEAAADq/y4AAAACAAEAAADq/y8AAAACAAEAAADq/zAAAAACAAEAAADq/zEAAAACAAEAAADq/zIAAAACAAEAAADq/zMAAAACAAEAAADq/zQAAAACAAEAAADq/zUAAAACAAEAAADq/zYAAAACAAEAAADq/zcAAAACAAEAAADq/zgAAAACAAEAAADr//T/AAACAAEAAADr//X/AAACAAEAAADr//b/AAACAAEAAADr//f/AAACAAEAAADr//j/AAACAAEAAADr//n/AAACAAEAAADr//r/AAACAAEAAADr//v/AAACAAEAAADr//z/AAACAAEAAADr//3/AAACAAEAAADr//7/AAACAAEAAADr////AAACAAEAAADr/wAAAAACAAEAAADr/wEAAAACAAEAAADr/wIAAAACAAEAAADr/wMAAAACAAEAAADr/wQAAAACAAEAAADr/wUAAAACAAEAAADr/wYAAAACAAEAAADr/wcAAAACAAEAAADr/wgAAAACAAEAAADr/wkAAAACAAEAAADr/woAAAACAAEAAADr/wsAAAACAAEAAADr/wwAAAACAAEAAADr/w0AAAACAAEAAADr/w4AAAACAAEAAADr/w8AAAACAAEAAADr/xAAAAACAAEAAADr/xEAAAACAAEAAADr/xIAAAACAAEAAADr/xMAAAACAAEAAADr/xQAAAACAAEAAADr/xUAAAACAAEAAADr/xYAAAACAAEAAADr/xcAAAACAAEAAADr/xgAAAACAAEAAADr/xkAAAACAAEAAADr/xoAAAACAAEAAADr/xsAAAACAAEAAADr/xwAAAACAAEAAADr/x0AAAACAAEAAADr/x4AAAACAAEAAADr/x8AAAACAAEAAADr/yAAAAACAAEAAADr/yEAAAACAAEAAADr/yIAAAACAAEAAADr/yMAAAACAAEAAADr/yQAAAACAAEAAADr/yUAAAACAAEAAADr/yYAAAACAAEAAADr/ycAAAACAAEAAADr/ygAAAACAAEAAADr/ykAAAACAAEAAADr/yoAAAACAAEAAADr/ysAAAACAAEAAADr/ywAAAACAAEAAADr/y0AAAACAAEAAADr/y4AAAACAAEAAADr/y8AAAACAAEAAADr/zAAAAACAAEAAADr/zEAAAACAAEAAADr/zIAAAACAAEAAADr/zMAAAACAAEAAADr/zQAAAACAAEAAADr/zUAAAACAAEAAADr/zYAAAACAAEAAADr/zcAAAACAAEAAADr/zgAAAACAAEAAADs//T/AAACAAEAAADs//X/AAACAAEAAADs//b/AAACAAEAAADs//f/AAACAAEAAADs//j/AAACAAEAAADs//n/AAACAAEAAADs//r/AAACAAEAAADs//v/AAACAAEAAADs//z/AAACAAEAAADs//3/AAACAAEAAADs//7/AAACAAEAAADs////AAACAAEAAADs/wAAAAACAAEAAADs/wEAAAACAAEAAADs/wIAAAACAAEAAADs/wMAAAACAAEAAADs/wQAAAACAAEAAADs/wUAAAACAAEAAADs/wYAAAACAAEAAADs/wcAAAACAAEAAADs/wgAAAACAAEAAADs/wkAAAACAAEAAADs/woAAAACAAEAAADs/wsAAAACAAEAAADs/wwAAAACAAEAAADs/w0AAAACAAEAAADs/w4AAAACAAEAAADs/w8AAAACAAEAAADs/xAAAAACAAEAAADs/xEAAAACAAEAAADs/xIAAAACAAEAAADs/xMAAAACAAEAAADs/xQAAAACAAEAAADs/xUAAAACAAEAAADs/xYAAAACAAEAAADs/xcAAAACAAEAAADs/xgAAAACAAEAAADs/xkAAAACAAEAAADs/xoAAAACAAEAAADs/xsAAAACAAEAAADs/xwAAAACAAEAAADs/x0AAAACAAEAAADs/x4AAAACAAEAAADs/x8AAAACAAEAAADs/yAAAAACAAEAAADs/yEAAAACAAEAAADs/yIAAAACAAEAAADs/yMAAAACAAEAAADs/yQAAAACAAEAAADs/yUAAAACAAEAAADs/yYAAAACAAEAAADs/ycAAAACAAEAAADs/ygAAAACAAEAAADs/ykAAAACAAEAAADs/yoAAAACAAEAAADs/ysAAAACAAEAAADs/ywAAAACAAEAAADs/y0AAAACAAEAAADs/y4AAAACAAEAAADs/y8AAAACAAEAAADs/zAAAAACAAEAAADs/zEAAAACAAEAAADs/zIAAAACAAEAAADs/zMAAAACAAEAAADs/zQAAAACAAEAAADs/zUAAAACAAEAAADs/zYAAAACAAEAAADs/zcAAAACAAEAAADs/zgAAAACAAEAAADt//T/AAACAAEAAADt//X/AAACAAEAAADt//b/AAACAAEAAADt//f/AAACAAEAAADt//j/AAACAAEAAADt//n/AAACAAEAAADt//r/AAACAAEAAADt//v/AAACAAEAAADt//z/AAACAAEAAADt//3/AAACAAEAAADt//7/AAACAAEAAADt////AAACAAEAAADt/wAAAAACAAEAAADt/wEAAAACAAEAAADt/wIAAAACAAEAAADt/wMAAAACAAEAAADt/wQAAAACAAEAAADt/wUAAAACAAEAAADt/wYAAAACAAEAAADt/wcAAAACAAEAAADt/wgAAAACAAEAAADt/wkAAAACAAEAAADt/woAAAACAAEAAADt/wsAAAACAAEAAADt/wwAAAACAAEAAADt/w0AAAACAAEAAADt/w4AAAACAAEAAADt/w8AAAACAAEAAADt/xAAAAACAAEAAADt/xEAAAACAAEAAADt/xIAAAACAAEAAADt/xMAAAACAAEAAADt/xQAAAACAAEAAADt/xUAAAACAAEAAADt/xYAAAACAAEAAADt/xcAAAACAAEAAADt/xgAAAACAAEAAADt/xkAAAACAAEAAADt/xoAAAACAAEAAADt/xsAAAACAAEAAADt/xwAAAACAAEAAADt/x0AAAACAAEAAADt/x4AAAACAAEAAADt/x8AAAACAAEAAADt/yAAAAACAAEAAADt/yEAAAACAAEAAADt/yIAAAACAAEAAADt/yMAAAACAAEAAADt/yQAAAACAAEAAADt/yUAAAACAAEAAADt/yYAAAACAAEAAADt/ycAAAACAAEAAADt/ygAAAACAAEAAADt/ykAAAACAAEAAADt/yoAAAACAAEAAADt/ysAAAACAAEAAADt/ywAAAACAAEAAADt/y0AAAACAAEAAADt/y4AAAACAAEAAADt/y8AAAACAAEAAADt/zAAAAACAAEAAADt/zEAAAACAAEAAADt/zIAAAACAAEAAADt/zMAAAACAAEAAADt/zQAAAACAAEAAADt/zUAAAACAAEAAADt/zYAAAACAAEAAADt/zcAAAACAAEAAADt/zgAAAACAAEAAADu//T/AAACAAEAAADu//X/AAACAAEAAADu//b/AAACAAEAAADu//f/AAACAAEAAADu//j/AAACAAEAAADu//n/AAACAAEAAADu//r/AAACAAEAAADu//v/AAACAAEAAADu//z/AAACAAEAAADu//3/AAACAAEAAADu//7/AAACAAEAAADu////AAACAAEAAADu/wAAAAACAAEAAADu/wEAAAACAAEAAADu/wIAAAACAAEAAADu/wMAAAACAAEAAADu/wQAAAACAAEAAADu/wUAAAACAAEAAADu/wYAAAACAAEAAADu/wcAAAACAAEAAADu/wgAAAACAAEAAADu/wkAAAACAAEAAADu/woAAAACAAEAAADu/wsAAAACAAEAAADu/wwAAAACAAEAAADu/w0AAAACAAEAAADu/w4AAAACAAEAAADu/w8AAAACAAEAAADu/xAAAAACAAEAAADu/xEAAAACAAEAAADu/xIAAAACAAEAAADu/xMAAAACAAEAAADu/xQAAAACAAEAAADu/xUAAAACAAEAAADu/xYAAAACAAEAAADu/xcAAAACAAEAAADu/xgAAAACAAEAAADu/xkAAAACAAEAAADu/xoAAAACAAEAAADu/xsAAAACAAEAAADu/xwAAAACAAEAAADu/x0AAAACAAEAAADu/x4AAAACAAEAAADu/x8AAAACAAEAAADu/yAAAAACAAEAAADu/yEAAAACAAEAAADu/yIAAAACAAEAAADu/yMAAAACAAEAAADu/yQAAAACAAEAAADu/yUAAAACAAEAAADu/yYAAAACAAEAAADu/ycAAAACAAEAAADu/ygAAAACAAEAAADu/ykAAAACAAEAAADu/yoAAAACAAEAAADu/ysAAAACAAEAAADu/ywAAAACAAEAAADu/y0AAAACAAEAAADu/y4AAAACAAEAAADu/y8AAAACAAEAAADu/zAAAAACAAEAAADu/zEAAAACAAEAAADu/zIAAAACAAEAAADu/zMAAAACAAEAAADu/zQAAAACAAEAAADu/zUAAAACAAEAAADu/zYAAAACAAEAAADu/zcAAAACAAEAAADu/zgAAAACAAEAAADv//T/AAACAAEAAADv//X/AAACAAEAAADv//b/AAACAAEAAADv//f/AAACAAEAAADv//j/AAACAAEAAADv//n/AAACAAEAAADv//r/AAACAAEAAADv//v/AAACAAEAAADv//z/AAACAAEAAADv//3/AAACAAEAAADv//7/AAACAAEAAADv////AAACAAEAAADv/wAAAAACAAEAAADv/wEAAAACAAEAAADv/wIAAAACAAEAAADv/wMAAAACAAEAAADv/wQAAAACAAEAAADv/wUAAAACAAEAAADv/wYAAAACAAEAAADv/wcAAAACAAEAAADv/wgAAAACAAEAAADv/wkAAAACAAEAAADv/woAAAACAAEAAADv/wsAAAACAAEAAADv/wwAAAACAAEAAADv/w0AAAACAAEAAADv/w4AAAACAAEAAADv/w8AAAACAAEAAADv/xAAAAACAAEAAADv/xEAAAACAAEAAADv/xIAAAACAAEAAADv/xMAAAACAAEAAADv/xQAAAACAAEAAADv/xUAAAACAAEAAADv/xYAAAACAAEAAADv/xcAAAACAAEAAADv/xgAAAACAAEAAADv/xkAAAACAAEAAADv/xoAAAACAAEAAADv/xsAAAACAAEAAADv/xwAAAACAAEAAADv/x0AAAACAAEAAADv/x4AAAACAAEAAADv/x8AAAACAAEAAADv/yAAAAACAAEAAADv/yEAAAACAAEAAADv/yIAAAACAAEAAADv/yMAAAACAAEAAADv/yQAAAACAAEAAADv/yUAAAACAAEAAADv/yYAAAACAAEAAADv/ycAAAACAAEAAADv/ygAAAACAAEAAADv/ykAAAACAAEAAADv/yoAAAACAAEAAADv/ysAAAACAAEAAADv/ywAAAACAAEAAADv/y0AAAACAAEAAADv/y4AAAACAAEAAADv/y8AAAACAAEAAADv/zAAAAACAAEAAADv/zEAAAACAAEAAADv/zIAAAACAAEAAADv/zMAAAACAAEAAADv/zQAAAACAAEAAADv/zUAAAACAAEAAADv/zYAAAACAAEAAADv/zcAAAACAAEAAADv/zgAAAACAAEAAADw//T/AAACAAEAAADw//X/AAACAAEAAADw//b/AAACAAEAAADw//f/AAACAAEAAADw//j/AAACAAEAAADw//n/AAACAAEAAADw//r/AAACAAEAAADw//v/AAACAAEAAADw//z/AAACAAEAAADw//3/AAACAAEAAADw//7/AAACAAEAAADw////AAACAAEAAADw/wAAAAACAAEAAADw/wEAAAACAAEAAADw/wIAAAACAAEAAADw/wMAAAACAAEAAADw/wQAAAACAAEAAADw/wUAAAACAAEAAADw/wYAAAACAAEAAADw/wcAAAACAAEAAADw/wgAAAACAAEAAADw/wkAAAACAAEAAADw/woAAAACAAEAAADw/wsAAAACAAEAAADw/wwAAAACAAEAAADw/w0AAAACAAEAAADw/w4AAAACAAEAAADw/w8AAAACAAEAAADw/xAAAAACAAEAAADw/xEAAAACAAEAAADw/xIAAAACAAEAAADw/xMAAAACAAEAAADw/xQAAAACAAEAAADw/xUAAAACAAEAAADw/xYAAAACAAEAAADw/xcAAAACAAEAAADw/xgAAAACAAEAAADw/xkAAAACAAEAAADw/xoAAAACAAEAAADw/xsAAAACAAEAAADw/xwAAAACAAEAAADw/x0AAAACAAEAAADw/x4AAAACAAEAAADw/x8AAAACAAEAAADw/yAAAAACAAEAAADw/yEAAAACAAEAAADw/yIAAAACAAEAAADw/yMAAAACAAEAAADw/yQAAAACAAEAAADw/yUAAAACAAEAAADw/yYAAAACAAEAAADw/ycAAAACAAEAAADw/ygAAAACAAEAAADw/ykAAAACAAEAAADw/yoAAAACAAEAAADw/ysAAAACAAEAAADw/ywAAAACAAEAAADw/y0AAAACAAEAAADw/y4AAAACAAEAAADw/y8AAAACAAEAAADw/zAAAAACAAEAAADw/zEAAAACAAEAAADw/zIAAAACAAEAAADw/zMAAAACAAEAAADw/zQAAAACAAEAAADw/zUAAAACAAEAAADw/zYAAAACAAEAAADw/zcAAAACAAEAAADw/zgAAAACAAEAAADx//T/AAACAAEAAADx//X/AAACAAEAAADx//b/AAACAAEAAADx//f/AAACAAEAAADx//j/AAACAAEAAADx//n/AAACAAEAAADx//r/AAACAAEAAADx//v/AAACAAEAAADx//z/AAACAAEAAADx//3/AAACAAEAAADx//7/AAACAAEAAADx////AAACAAEAAADx/wAAAAACAAEAAADx/wEAAAACAAEAAADx/wIAAAACAAEAAADx/wMAAAACAAEAAADx/wQAAAACAAEAAADx/wUAAAACAAEAAADx/wYAAAACAAEAAADx/wcAAAACAAEAAADx/wgAAAACAAEAAADx/wkAAAACAAEAAADx/woAAAACAAEAAADx/wsAAAACAAEAAADx/wwAAAACAAEAAADx/w0AAAACAAEAAADx/w4AAAACAAEAAADx/w8AAAACAAEAAADx/xAAAAACAAEAAADx/xEAAAACAAEAAADx/xIAAAACAAEAAADx/xMAAAACAAEAAADx/xQAAAACAAEAAADx/xUAAAACAAEAAADx/xYAAAACAAEAAADx/xcAAAACAAEAAADx/xgAAAACAAEAAADx/xkAAAACAAEAAADx/xoAAAACAAEAAADx/xsAAAACAAEAAADx/xwAAAACAAEAAADx/x0AAAACAAEAAADx/x4AAAACAAEAAADx/x8AAAACAAEAAADx/yAAAAACAAEAAADx/yEAAAACAAEAAADx/yIAAAACAAEAAADx/yMAAAACAAEAAADx/yQAAAACAAEAAADx/yUAAAACAAEAAADx/yYAAAACAAEAAADx/ycAAAACAAEAAADx/ygAAAACAAEAAADx/ykAAAACAAEAAADx/yoAAAACAAEAAADx/ysAAAACAAEAAADx/ywAAAACAAEAAADx/y0AAAACAAEAAADx/y4AAAACAAEAAADx/y8AAAACAAEAAADx/zAAAAACAAEAAADx/zEAAAACAAEAAADx/zIAAAACAAEAAADx/zMAAAACAAEAAADx/zQAAAACAAEAAADx/zUAAAACAAEAAADx/zYAAAACAAEAAADx/zcAAAACAAEAAADx/zgAAAACAAEAAADy//T/AAACAAEAAADy//X/AAACAAEAAADy//b/AAACAAEAAADy//f/AAACAAEAAADy//j/AAACAAEAAADy//n/AAACAAEAAADy//r/AAACAAEAAADy//v/AAACAAEAAADy//z/AAACAAEAAADy//3/AAACAAEAAADy//7/AAACAAEAAADy////AAACAAEAAADy/wAAAAACAAEAAADy/wEAAAACAAEAAADy/wIAAAACAAEAAADy/wMAAAACAAEAAADy/wQAAAACAAEAAADy/wUAAAACAAEAAADy/wYAAAACAAEAAADy/wcAAAACAAEAAADy/wgAAAACAAEAAADy/wkAAAACAAEAAADy/woAAAACAAEAAADy/wsAAAACAAEAAADy/wwAAAACAAEAAADy/w0AAAACAAEAAADy/w4AAAACAAEAAADy/w8AAAACAAEAAADy/xAAAAACAAEAAADy/xEAAAACAAEAAADy/xIAAAACAAEAAADy/xMAAAACAAEAAADy/xQAAAACAAEAAADy/xUAAAACAAEAAADy/xYAAAACAAEAAADy/xcAAAACAAEAAADy/xgAAAACAAEAAADy/xkAAAACAAEAAADy/xoAAAACAAEAAADy/xsAAAACAAEAAADy/xwAAAACAAEAAADy/x0AAAACAAEAAADy/x4AAAACAAEAAADy/x8AAAACAAEAAADy/yAAAAACAAEAAADy/yEAAAACAAEAAADy/yIAAAACAAEAAADy/yMAAAACAAEAAADy/yQAAAACAAEAAADy/yUAAAACAAEAAADy/yYAAAACAAEAAADy/ycAAAACAAEAAADy/ygAAAACAAEAAADy/ykAAAACAAEAAADy/yoAAAACAAEAAADy/ysAAAACAAEAAADy/ywAAAACAAEAAADy/y0AAAACAAEAAADy/y4AAAACAAEAAADy/y8AAAACAAEAAADy/zAAAAACAAEAAADy/zEAAAACAAEAAADy/zIAAAACAAEAAADy/zMAAAACAAEAAADy/zQAAAACAAEAAADy/zUAAAACAAEAAADy/zYAAAACAAEAAADy/zcAAAACAAEAAADy/zgAAAACAAEAAADz//T/AAACAAEAAADz//X/AAACAAEAAADz//b/AAACAAEAAADz//f/AAACAAEAAADz//j/AAACAAEAAADz//n/AAACAAEAAADz//r/AAACAAEAAADz//v/AAACAAEAAADz//z/AAACAAEAAADz//3/AAACAAEAAADz//7/AAACAAEAAADz////AAACAAEAAADz/wAAAAACAAEAAADz/wEAAAACAAEAAADz/wIAAAACAAEAAADz/wMAAAACAAEAAADz/wQAAAACAAEAAADz/wUAAAACAAEAAADz/wYAAAACAAEAAADz/wcAAAACAAEAAADz/wgAAAACAAEAAADz/wkAAAACAAEAAADz/woAAAACAAEAAADz/wsAAAACAAEAAADz/wwAAAACAAEAAADz/w0AAAACAAEAAADz/w4AAAACAAEAAADz/w8AAAACAAEAAADz/xAAAAACAAEAAADz/xEAAAACAAEAAADz/xIAAAACAAEAAADz/xMAAAACAAEAAADz/xQAAAACAAEAAADz/xUAAAACAAEAAADz/xYAAAACAAEAAADz/xcAAAACAAEAAADz/xgAAAACAAEAAADz/xkAAAACAAEAAADz/xoAAAACAAEAAADz/xsAAAACAAEAAADz/xwAAAACAAEAAADz/x0AAAACAAEAAADz/x4AAAACAAEAAADz/x8AAAACAAEAAADz/yAAAAACAAEAAADz/yEAAAACAAEAAADz/yIAAAACAAEAAADz/yMAAAACAAEAAADz/yQAAAACAAEAAADz/yUAAAACAAEAAADz/yYAAAACAAEAAADz/ycAAAACAAEAAADz/ygAAAACAAEAAADz/ykAAAACAAEAAADz/yoAAAACAAEAAADz/ysAAAACAAEAAADz/ywAAAACAAEAAADz/y0AAAACAAEAAADz/y4AAAACAAEAAADz/y8AAAACAAEAAADz/zAAAAACAAEAAADz/zEAAAACAAEAAADz/zIAAAACAAEAAADz/zMAAAACAAEAAADz/zQAAAACAAEAAADz/zUAAAACAAEAAADz/zYAAAACAAEAAADz/zcAAAACAAEAAADz/zgAAAACAAEAAAD0//T/AAACAAEAAAD0//X/AAACAAEAAAD0//b/AAACAAEAAAD0//f/AAACAAEAAAD0//j/AAACAAEAAAD0//n/AAACAAEAAAD0//r/AAACAAEAAAD0//v/AAACAAEAAAD0//z/AAACAAEAAAD0//3/AAACAAEAAAD0//7/AAACAAEAAAD0/wAAAAACAAEAAAD0/wEAAAACAAEAAAD0/wIAAAACAAEAAAD0/wMAAAACAAEAAAD0/wQAAAACAAEAAAD0/wUAAAACAAEAAAD0/wYAAAACAAEAAAD0/wcAAAACAAEAAAD0/wgAAAACAAEAAAD0/wkAAAACAAEAAAD0/woAAAACAAEAAAD0/wsAAAACAAEAAAD0/wwAAAACAAEAAAD0/w0AAAACAAEAAAD0/w4AAAACAAEAAAD0/w8AAAACAAEAAAD0/xAAAAACAAEAAAD0/xEAAAACAAEAAAD0/xIAAAACAAEAAAD0/xMAAAACAAEAAAD0/xQAAAACAAEAAAD0/xUAAAACAAEAAAD0/xYAAAACAAEAAAD0/xcAAAACAAEAAAD0/xgAAAACAAEAAAD0/xkAAAACAAEAAAD0/xoAAAACAAEAAAD0/xsAAAACAAEAAAD0/xwAAAACAAEAAAD0/x0AAAACAAEAAAD0/x4AAAACAAEAAAD0/x8AAAACAAEAAAD0/yAAAAACAAEAAAD0/yEAAAACAAEAAAD0/yIAAAACAAEAAAD0/yMAAAACAAEAAAD0/yQAAAACAAEAAAD0/yUAAAACAAEAAAD0/yYAAAACAAEAAAD0/ycAAAACAAEAAAD0/ygAAAACAAEAAAD0/ykAAAACAAEAAAD0/yoAAAACAAEAAAD0/ysAAAACAAEAAAD0/ywAAAACAAEAAAD0/y0AAAACAAEAAAD0/y4AAAACAAEAAAD0/y8AAAACAAEAAAD0/zAAAAACAAEAAAD0/zEAAAACAAEAAAD0/zIAAAACAAEAAAD0/zMAAAACAAEAAAD0/zQAAAACAAEAAAD0/zUAAAACAAEAAAD0/zYAAAACAAEAAAD0/zcAAAACAAEAAAD0/zgAAAACAAEAAAD1//T/AAACAAEAAAD1//X/AAACAAEAAAD1//b/AAACAAEAAAD1//f/AAACAAEAAAD1//j/AAACAAEAAAD1//n/AAACAAEAAAD1//r/AAACAAEAAAD1//v/AAACAAEAAAD1//z/AAACAAEAAAD1//3/AAACAAEAAAD1//7/AAACAAEAAAD1/wEAAAACAAEAAAD1/wIAAAACAAEAAAD1/wMAAAACAAEAAAD1/wQAAAACAAEAAAD1/wUAAAACAAEAAAD1/wYAAAACAAEAAAD1/wcAAAACAAEAAAD1/wgAAAACAAEAAAD1/wkAAAACAAEAAAD1/woAAAACAAEAAAD1/wsAAAACAAEAAAD1/wwAAAACAAEAAAD1/w0AAAACAAEAAAD1/w4AAAACAAEAAAD1/w8AAAACAAEAAAD1/xAAAAACAAEAAAD1/xEAAAACAAEAAAD1/xIAAAACAAEAAAD1/xMAAAACAAEAAAD1/xQAAAACAAEAAAD1/xUAAAACAAEAAAD1/xYAAAACAAEAAAD1/xcAAAACAAEAAAD1/xgAAAACAAEAAAD1/xkAAAACAAEAAAD1/xoAAAACAAEAAAD1/xsAAAACAAEAAAD1/xwAAAACAAEAAAD1/x0AAAACAAEAAAD1/x4AAAACAAEAAAD1/x8AAAACAAEAAAD1/yAAAAACAAEAAAD1/yEAAAACAAEAAAD1/yIAAAACAAEAAAD1/yMAAAACAAEAAAD1/yQAAAACAAEAAAD1/yUAAAACAAEAAAD1/yYAAAACAAEAAAD1/ycAAAACAAEAAAD1/ygAAAACAAEAAAD1/ykAAAACAAEAAAD1/yoAAAACAAEAAAD1/ysAAAACAAEAAAD1/ywAAAACAAEAAAD1/y0AAAACAAEAAAD1/y4AAAACAAEAAAD1/y8AAAACAAEAAAD1/zAAAAACAAEAAAD1/zEAAAACAAEAAAD1/zIAAAACAAEAAAD1/zMAAAACAAEAAAD1/zQAAAACAAEAAAD1/zUAAAACAAEAAAD1/zYAAAACAAEAAAD1/zcAAAACAAEAAAD1/zgAAAACAAEAAAD2//T/AAACAAEAAAD2//X/AAACAAEAAAD2//b/AAACAAEAAAD2//f/AAACAAEAAAD2//j/AAACAAEAAAD2//n/AAACAAEAAAD2//r/AAACAAEAAAD2//v/AAACAAEAAAD2//z/AAACAAEAAAD2//3/AAACAAEAAAD2//7/AAACAAEAAAD2////AAACAAEAAAD2/wIAAAACAAEAAAD2/wMAAAACAAEAAAD2/wQAAAACAAEAAAD2/wUAAAACAAEAAAD2/wYAAAACAAEAAAD2/wcAAAACAAEAAAD2/wgAAAACAAEAAAD2/wkAAAACAAEAAAD2/woAAAACAAEAAAD2/wsAAAACAAEAAAD2/wwAAAACAAEAAAD2/w0AAAACAAEAAAD2/w4AAAACAAEAAAD2/w8AAAACAAEAAAD2/xAAAAACAAEAAAD2/xEAAAACAAEAAAD2/xIAAAACAAEAAAD2/xMAAAACAAEAAAD2/xQAAAACAAEAAAD2/xUAAAACAAEAAAD2/xYAAAACAAEAAAD2/xcAAAACAAEAAAD2/xgAAAACAAEAAAD2/xkAAAACAAEAAAD2/xoAAAACAAEAAAD2/xsAAAACAAEAAAD2/xwAAAACAAEAAAD2/x0AAAACAAEAAAD2/x4AAAACAAEAAAD2/x8AAAACAAEAAAD2/yAAAAACAAEAAAD2/yEAAAACAAEAAAD2/yIAAAACAAEAAAD2/yMAAAACAAEAAAD2/yQAAAACAAEAAAD2/yUAAAACAAEAAAD2/yYAAAACAAEAAAD2/ycAAAACAAEAAAD2/ygAAAACAAEAAAD2/ykAAAACAAEAAAD2/yoAAAACAAEAAAD2/ysAAAACAAEAAAD2/ywAAAACAAEAAAD2/y0AAAACAAEAAAD2/y4AAAACAAEAAAD2/y8AAAACAAEAAAD2/zAAAAACAAEAAAD2/zEAAAACAAEAAAD2/zIAAAACAAEAAAD2/zMAAAACAAEAAAD2/zQAAAACAAEAAAD2/zUAAAACAAEAAAD2/zYAAAACAAEAAAD2/zcAAAACAAEAAAD2/zgAAAACAAEAAAD3//T/AAACAAEAAAD3//X/AAACAAEAAAD3//b/AAACAAEAAAD3//f/AAACAAEAAAD3//j/AAACAAEAAAD3//n/AAACAAEAAAD3//r/AAACAAEAAAD3//v/AAACAAEAAAD3//z/AAACAAEAAAD3//3/AAACAAEAAAD3//7/AAACAAEAAAD3////AAACAAEAAAD3/wAAAAACAAEAAAD3/wEAAAACAAEAAAD3/wMAAAACAAEAAAD3/wQAAAACAAEAAAD3/wUAAAACAAEAAAD3/wYAAAACAAEAAAD3/wcAAAACAAEAAAD3/wgAAAACAAEAAAD3/wkAAAACAAEAAAD3/woAAAACAAEAAAD3/wsAAAACAAEAAAD3/wwAAAACAAEAAAD3/w0AAAACAAEAAAD3/w4AAAACAAEAAAD3/w8AAAACAAEAAAD3/xAAAAACAAEAAAD3/xEAAAACAAEAAAD3/xIAAAACAAEAAAD3/xMAAAACAAEAAAD3/xQAAAACAAEAAAD3/xUAAAACAAEAAAD3/xYAAAACAAEAAAD3/xcAAAACAAEAAAD3/xgAAAACAAEAAAD3/xkAAAACAAEAAAD3/xoAAAACAAEAAAD3/xsAAAACAAEAAAD3/xwAAAACAAEAAAD3/x0AAAACAAEAAAD3/x4AAAACAAEAAAD3/x8AAAACAAEAAAD3/yAAAAACAAEAAAD3/yEAAAACAAEAAAD3/yIAAAACAAEAAAD3/yMAAAACAAEAAAD3/yQAAAACAAEAAAD3/yUAAAACAAEAAAD3/yYAAAACAAEAAAD3/ycAAAACAAEAAAD3/ygAAAACAAEAAAD3/ykAAAACAAEAAAD3/yoAAAACAAEAAAD3/ysAAAACAAEAAAD3/ywAAAACAAEAAAD3/y0AAAACAAEAAAD3/y4AAAACAAEAAAD3/y8AAAACAAEAAAD3/zAAAAACAAEAAAD3/zEAAAACAAEAAAD3/zIAAAACAAEAAAD3/zMAAAACAAEAAAD3/zQAAAACAAEAAAD3/zUAAAACAAEAAAD3/zYAAAACAAEAAAD3/zcAAAACAAEAAAD3/zgAAAACAAEAAAD4//T/AAACAAEAAAD4//X/AAACAAEAAAD4//b/AAACAAEAAAD4//f/AAACAAEAAAD4//j/AAACAAEAAAD4//n/AAACAAEAAAD4//r/AAACAAEAAAD4//v/AAACAAEAAAD4//z/AAACAAEAAAD4//3/AAACAAEAAAD4//7/AAACAAEAAAD4////AAACAAEAAAD4/wAAAAACAAEAAAD4/wEAAAACAAEAAAD4/wIAAAACAAEAAAD4/wUAAAACAAEAAAD4/wYAAAACAAEAAAD4/wcAAAACAAEAAAD4/wgAAAACAAEAAAD4/wkAAAACAAEAAAD4/woAAAACAAEAAAD4/wsAAAACAAEAAAD4/wwAAAACAAEAAAD4/w0AAAACAAEAAAD4/w4AAAACAAEAAAD4/w8AAAACAAEAAAD4/xAAAAACAAEAAAD4/xEAAAACAAEAAAD4/xIAAAACAAEAAAD4/xMAAAACAAEAAAD4/xQAAAACAAEAAAD4/xUAAAACAAEAAAD4/xYAAAACAAEAAAD4/xcAAAACAAEAAAD4/xgAAAACAAEAAAD4/xkAAAACAAEAAAD4/xoAAAACAAEAAAD4/xsAAAACAAEAAAD4/xwAAAACAAEAAAD4/x0AAAACAAEAAAD4/x4AAAACAAEAAAD4/x8AAAACAAEAAAD4/yAAAAACAAEAAAD4/yEAAAACAAEAAAD4/yIAAAACAAEAAAD4/yMAAAACAAEAAAD4/yQAAAACAAEAAAD4/yUAAAACAAEAAAD4/yYAAAACAAEAAAD4/ycAAAACAAEAAAD4/ygAAAACAAEAAAD4/ykAAAACAAEAAAD4/yoAAAACAAEAAAD4/ysAAAACAAEAAAD4/ywAAAACAAEAAAD4/y0AAAACAAEAAAD4/y4AAAACAAEAAAD4/y8AAAACAAEAAAD4/zAAAAACAAEAAAD4/zEAAAACAAEAAAD4/zIAAAACAAEAAAD4/zMAAAACAAEAAAD4/zQAAAACAAEAAAD4/zUAAAACAAEAAAD4/zYAAAACAAEAAAD4/zcAAAACAAEAAAD4/zgAAAACAAEAAAD5//T/AAACAAEAAAD5//X/AAACAAEAAAD5//b/AAACAAEAAAD5//f/AAACAAEAAAD5//j/AAACAAEAAAD5//n/AAACAAEAAAD5//r/AAACAAEAAAD5//v/AAACAAEAAAD5//z/AAACAAEAAAD5//3/AAACAAEAAAD5//7/AAACAAEAAAD5////AAACAAEAAAD5/wAAAAACAAEAAAD5/wEAAAACAAEAAAD5/wIAAAACAAEAAAD5/wMAAAACAAEAAAD5/wQAAAACAAEAAAD5/wYAAAACAAEAAAD5/wcAAAACAAEAAAD5/wgAAAACAAEAAAD5/wkAAAACAAEAAAD5/woAAAACAAEAAAD5/wsAAAACAAEAAAD5/wwAAAACAAEAAAD5/w0AAAACAAEAAAD5/w4AAAACAAEAAAD5/w8AAAACAAEAAAD5/xAAAAACAAEAAAD5/xEAAAACAAEAAAD5/xIAAAACAAEAAAD5/xMAAAACAAEAAAD5/xQAAAACAAEAAAD5/xUAAAACAAEAAAD5/xYAAAACAAEAAAD5/xcAAAACAAEAAAD5/xgAAAACAAEAAAD5/xkAAAACAAEAAAD5/xoAAAACAAEAAAD5/xsAAAACAAEAAAD5/xwAAAACAAEAAAD5/x0AAAACAAEAAAD5/x4AAAACAAEAAAD5/x8AAAACAAEAAAD5/yAAAAACAAEAAAD5/yEAAAACAAEAAAD5/yIAAAACAAEAAAD5/yMAAAACAAEAAAD5/yQAAAACAAEAAAD5/yUAAAACAAEAAAD5/yYAAAACAAEAAAD5/ycAAAACAAEAAAD5/ygAAAACAAEAAAD5/ykAAAACAAEAAAD5/yoAAAACAAEAAAD5/ysAAAACAAEAAAD5/ywAAAACAAEAAAD5/y0AAAACAAEAAAD5/y4AAAACAAEAAAD5/y8AAAACAAEAAAD5/zAAAAACAAEAAAD5/zEAAAACAAEAAAD5/zIAAAACAAEAAAD5/zMAAAACAAEAAAD5/zQAAAACAAEAAAD5/zUAAAACAAEAAAD5/zYAAAACAAEAAAD5/zcAAAACAAEAAAD5/zgAAAACAAEAAAD6//T/AAACAAEAAAD6//X/AAACAAEAAAD6//b/AAACAAEAAAD6//f/AAACAAEAAAD6//j/AAACAAEAAAD6//n/AAACAAEAAAD6//r/AAACAAEAAAD6//v/AAACAAEAAAD6//z/AAACAAEAAAD6//3/AAACAAEAAAD6//7/AAACAAEAAAD6////AAACAAEAAAD6/wAAAAACAAEAAAD6/wEAAAACAAEAAAD6/wIAAAACAAEAAAD6/wMAAAACAAEAAAD6/wQAAAACAAEAAAD6/wUAAAACAAEAAAD6/wgAAAACAAEAAAD6/wkAAAACAAEAAAD6/woAAAACAAEAAAD6/wsAAAACAAEAAAD6/wwAAAACAAEAAAD6/w0AAAACAAEAAAD6/w4AAAACAAEAAAD6/w8AAAACAAEAAAD6/xAAAAACAAEAAAD6/xEAAAACAAEAAAD6/xIAAAACAAEAAAD6/xMAAAACAAEAAAD6/xQAAAACAAEAAAD6/xUAAAACAAEAAAD6/xYAAAACAAEAAAD6/xcAAAACAAEAAAD6/xgAAAACAAEAAAD6/xkAAAACAAEAAAD6/xoAAAACAAEAAAD6/xsAAAACAAEAAAD6/xwAAAACAAEAAAD6/x0AAAACAAEAAAD6/x4AAAACAAEAAAD6/x8AAAACAAEAAAD6/yAAAAACAAEAAAD6/yEAAAACAAEAAAD6/yIAAAACAAEAAAD6/yMAAAACAAEAAAD6/yQAAAACAAEAAAD6/yUAAAACAAEAAAD6/yYAAAACAAEAAAD6/ycAAAACAAEAAAD6/ygAAAACAAEAAAD6/ykAAAACAAEAAAD6/yoAAAACAAEAAAD6/ysAAAACAAEAAAD6/ywAAAACAAEAAAD6/y0AAAACAAEAAAD6/y4AAAACAAEAAAD6/y8AAAACAAEAAAD6/zAAAAACAAEAAAD6/zEAAAACAAEAAAD6/zIAAAACAAEAAAD6/zMAAAACAAEAAAD6/zQAAAACAAEAAAD6/zUAAAACAAEAAAD6/zYAAAACAAEAAAD6/zcAAAACAAEAAAD6/zgAAAACAAEAAAD7//T/AAACAAEAAAD7//X/AAACAAEAAAD7//b/AAACAAEAAAD7//f/AAACAAEAAAD7//j/AAACAAEAAAD7//n/AAACAAEAAAD7//r/AAACAAEAAAD7//v/AAACAAEAAAD7//z/AAACAAEAAAD7//3/AAACAAEAAAD7//7/AAACAAEAAAD7////AAACAAEAAAD7/wAAAAACAAEAAAD7/wEAAAACAAEAAAD7/wIAAAACAAEAAAD7/wMAAAACAAEAAAD7/wQAAAACAAEAAAD7/wUAAAACAAEAAAD7/wYAAAACAAEAAAD7/wcAAAACAAEAAAD7/wkAAAACAAEAAAD7/woAAAACAAEAAAD7/wsAAAACAAEAAAD7/wwAAAACAAEAAAD7/w0AAAACAAEAAAD7/w4AAAACAAEAAAD7/w8AAAACAAEAAAD7/xAAAAACAAEAAAD7/xEAAAACAAEAAAD7/xIAAAACAAEAAAD7/xMAAAACAAEAAAD7/xQAAAACAAEAAAD7/xUAAAACAAEAAAD7/xYAAAACAAEAAAD7/xcAAAACAAEAAAD7/xgAAAACAAEAAAD7/xkAAAACAAEAAAD7/xoAAAACAAEAAAD7/xsAAAACAAEAAAD7/xwAAAACAAEAAAD7/x0AAAACAAEAAAD7/x4AAAACAAEAAAD7/x8AAAACAAEAAAD7/yAAAAACAAEAAAD7/yEAAAACAAEAAAD7/yIAAAACAAEAAAD7/yMAAAACAAEAAAD7/yQAAAACAAEAAAD7/yUAAAACAAEAAAD7/yYAAAACAAEAAAD7/ycAAAACAAEAAAD7/ygAAAACAAEAAAD7/ykAAAACAAEAAAD7/yoAAAACAAEAAAD7/ysAAAACAAEAAAD7/ywAAAACAAEAAAD7/y0AAAACAAEAAAD7/y4AAAACAAEAAAD7/y8AAAACAAEAAAD7/zAAAAACAAEAAAD7/zEAAAACAAEAAAD7/zIAAAACAAEAAAD7/zMAAAACAAEAAAD7/zQAAAACAAEAAAD7/zUAAAACAAEAAAD7/zYAAAACAAEAAAD7/zcAAAACAAEAAAD7/zgAAAACAAEAAAD8//T/AAACAAEAAAD8//X/AAACAAEAAAD8//b/AAACAAEAAAD8//f/AAACAAEAAAD8//j/AAACAAEAAAD8//n/AAACAAEAAAD8//r/AAACAAEAAAD8//v/AAACAAEAAAD8//z/AAACAAEAAAD8//3/AAACAAEAAAD8//7/AAACAAEAAAD8////AAACAAEAAAD8/wAAAAACAAEAAAD8/wEAAAACAAEAAAD8/wIAAAACAAEAAAD8/wMAAAACAAEAAAD8/wQAAAACAAEAAAD8/wUAAAACAAEAAAD8/wYAAAACAAEAAAD8/wcAAAACAAEAAAD8/wgAAAACAAEAAAD8/woAAAACAAEAAAD8/wsAAAACAAEAAAD8/wwAAAACAAEAAAD8/w0AAAACAAEAAAD8/w4AAAACAAEAAAD8/w8AAAACAAEAAAD8/xAAAAACAAEAAAD8/xEAAAACAAEAAAD8/xIAAAACAAEAAAD8/xMAAAACAAEAAAD8/xQAAAACAAEAAAD8/xUAAAACAAEAAAD8/xYAAAACAAEAAAD8/xcAAAACAAEAAAD8/xgAAAACAAEAAAD8/xkAAAACAAEAAAD8/xoAAAACAAEAAAD8/xsAAAACAAEAAAD8/xwAAAACAAEAAAD8/x0AAAACAAEAAAD8/x4AAAACAAEAAAD8/x8AAAACAAEAAAD8/yAAAAACAAEAAAD8/yEAAAACAAEAAAD8/yIAAAACAAEAAAD8/yMAAAACAAEAAAD8/yQAAAACAAEAAAD8/yUAAAACAAEAAAD8/yYAAAACAAEAAAD8/ycAAAACAAEAAAD8/ygAAAACAAEAAAD8/ykAAAACAAEAAAD8/yoAAAACAAEAAAD8/ysAAAACAAEAAAD8/ywAAAACAAEAAAD8/y0AAAACAAEAAAD8/y4AAAACAAEAAAD8/y8AAAACAAEAAAD8/zAAAAACAAEAAAD8/zEAAAACAAEAAAD8/zIAAAACAAEAAAD8/zMAAAACAAEAAAD8/zQAAAACAAEAAAD8/zUAAAACAAEAAAD8/zYAAAACAAEAAAD8/zcAAAACAAEAAAD8/zgAAAACAAEAAAD9//T/AAACAAEAAAD9//X/AAACAAEAAAD9//b/AAACAAEAAAD9//f/AAACAAEAAAD9//j/AAACAAEAAAD9//n/AAACAAEAAAD9//r/AAACAAEAAAD9//v/AAACAAEAAAD9//z/AAACAAEAAAD9//3/AAACAAEAAAD9//7/AAACAAEAAAD9////AAACAAEAAAD9/wAAAAACAAEAAAD9/wEAAAACAAEAAAD9/wIAAAACAAEAAAD9/wMAAAACAAEAAAD9/wQAAAACAAEAAAD9/wUAAAACAAEAAAD9/wYAAAACAAEAAAD9/wcAAAACAAEAAAD9/wgAAAACAAEAAAD9/wkAAAACAAEAAAD9/wsAAAACAAEAAAD9/wwAAAACAAEAAAD9/w0AAAACAAEAAAD9/w4AAAACAAEAAAD9/w8AAAACAAEAAAD9/xAAAAACAAEAAAD9/xEAAAACAAEAAAD9/xIAAAACAAEAAAD9/xMAAAACAAEAAAD9/xQAAAACAAEAAAD9/xUAAAACAAEAAAD9/xYAAAACAAEAAAD9/xcAAAACAAEAAAD9/xgAAAACAAEAAAD9/xkAAAACAAEAAAD9/xoAAAACAAEAAAD9/xsAAAACAAEAAAD9/xwAAAACAAEAAAD9/x0AAAACAAEAAAD9/x4AAAACAAEAAAD9/x8AAAACAAEAAAD9/yAAAAACAAEAAAD9/yEAAAACAAEAAAD9/yIAAAACAAEAAAD9/yMAAAACAAEAAAD9/yQAAAACAAEAAAD9/yUAAAACAAEAAAD9/yYAAAACAAEAAAD9/ycAAAACAAEAAAD9/ygAAAACAAEAAAD9/ykAAAACAAEAAAD9/yoAAAACAAEAAAD9/ysAAAACAAEAAAD9/ywAAAACAAEAAAD9/y0AAAACAAEAAAD9/y4AAAACAAEAAAD9/y8AAAACAAEAAAD9/zAAAAACAAEAAAD9/zEAAAACAAEAAAD9/zIAAAACAAEAAAD9/zMAAAACAAEAAAD9/zQAAAACAAEAAAD9/zUAAAACAAEAAAD9/zYAAAACAAEAAAD9/zcAAAACAAEAAAD9/zgAAAACAAEAAAD+//T/AAACAAEAAAD+//X/AAACAAEAAAD+//b/AAACAAEAAAD+//f/AAACAAEAAAD+//j/AAACAAEAAAD+//n/AAACAAEAAAD+//r/AAACAAEAAAD+//v/AAACAAEAAAD+//z/AAACAAEAAAD+//3/AAACAAEAAAD+//7/AAACAAEAAAD+////AAACAAEAAAD+/wAAAAACAAEAAAD+/wEAAAACAAEAAAD+/wIAAAACAAEAAAD+/wMAAAACAAEAAAD+/wQAAAACAAEAAAD+/wUAAAACAAEAAAD+/wYAAAACAAEAAAD+/wcAAAACAAEAAAD+/wgAAAACAAEAAAD+/wkAAAACAAEAAAD+/woAAAACAAEAAAD+/w0AAAACAAEAAAD+/w4AAAACAAEAAAD+/w8AAAACAAEAAAD+/xAAAAACAAEAAAD+/xEAAAACAAEAAAD+/xIAAAACAAEAAAD+/xMAAAACAAEAAAD+/xQAAAACAAEAAAD+/xUAAAACAAEAAAD+/xYAAAACAAEAAAD+/xcAAAACAAEAAAD+/xgAAAACAAEAAAD+/xkAAAACAAEAAAD+/xoAAAACAAEAAAD+/xsAAAACAAEAAAD+/xwAAAACAAEAAAD+/x0AAAACAAEAAAD+/x4AAAACAAEAAAD+/x8AAAACAAEAAAD+/yAAAAACAAEAAAD+/yEAAAACAAEAAAD+/yIAAAACAAEAAAD+/yMAAAACAAEAAAD+/yQAAAACAAEAAAD+/yUAAAACAAEAAAD+/yYAAAACAAEAAAD+/ycAAAACAAEAAAD+/ygAAAACAAEAAAD+/ykAAAACAAEAAAD+/yoAAAACAAEAAAD+/ysAAAACAAEAAAD+/ywAAAACAAEAAAD+/y0AAAACAAEAAAD+/y4AAAACAAEAAAD+/y8AAAACAAEAAAD+/zAAAAACAAEAAAD+/zEAAAACAAEAAAD+/zIAAAACAAEAAAD+/zMAAAACAAEAAAD+/zQAAAACAAEAAAD+/zUAAAACAAEAAAD+/zYAAAACAAEAAAD+/zcAAAACAAEAAAD+/zgAAAACAAEAAAD///T/AAACAAEAAAD///X/AAACAAEAAAD///b/AAACAAEAAAD///f/AAACAAEAAAD///j/AAACAAEAAAD///n/AAACAAEAAAD///r/AAACAAEAAAD///v/AAACAAEAAAD///z/AAACAAEAAAD///3/AAACAAEAAAD///7/AAACAAEAAAD/////AAACAAEAAAD//wAAAAACAAEAAAD//wEAAAACAAEAAAD//wIAAAACAAEAAAD//wMAAAACAAEAAAD//wQAAAACAAEAAAD//wUAAAACAAEAAAD//wYAAAACAAEAAAD//wcAAAACAAEAAAD//wgAAAACAAEAAAD//wkAAAACAAEAAAD//woAAAACAAEAAAD//wsAAAACAAEAAAD//wwAAAACAAEAAAD//w4AAAACAAEAAAD//w8AAAACAAEAAAD//xAAAAACAAEAAAD//xEAAAACAAEAAAD//xIAAAACAAEAAAD//xMAAAACAAEAAAD//xQAAAACAAEAAAD//xUAAAACAAEAAAD//xYAAAACAAEAAAD//xcAAAACAAEAAAD//xgAAAACAAEAAAD//xkAAAACAAEAAAD//xoAAAACAAEAAAD//xsAAAACAAEAAAD//xwAAAACAAEAAAD//x0AAAACAAEAAAD//x4AAAACAAEAAAD//x8AAAACAAEAAAD//yAAAAACAAEAAAD//yEAAAACAAEAAAD//yIAAAACAAEAAAD//yMAAAACAAEAAAD//yQAAAACAAEAAAD//yUAAAACAAEAAAD//yYAAAACAAEAAAD//ycAAAACAAEAAAD//ygAAAACAAEAAAD//ykAAAACAAEAAAD//yoAAAACAAEAAAD//ysAAAACAAEAAAD//ywAAAACAAEAAAD//y0AAAACAAEAAAD//y4AAAACAAEAAAD//y8AAAACAAEAAAD//zAAAAACAAEAAAD//zEAAAACAAEAAAD//zIAAAACAAEAAAD//zMAAAACAAEAAAD//zQAAAACAAEAAAD//zUAAAACAAEAAAD//zYAAAACAAEAAAD//zcAAAACAAEAAAD//zgAAAACAAEAAAAAAPT/AAACAAEAAAAAAPX/AAACAAEAAAAAAPb/AAACAAEAAAAAAPf/AAACAAEAAAAAAPj/AAACAAEAAAAAAPn/AAACAAEAAAAAAPr/AAACAAEAAAAAAPv/AAACAAEAAAAAAPz/AAACAAEAAAAAAP3/AAACAAEAAAAAAP7/AAACAAEAAAAAAP//AAACAAEAAAAAACkAAAACAAEAAAAAACoAAAACAAEAAAAAACsAAAACAAEAAAAAACwAAAACAAEAAAAAAC0AAAACAAEAAAAAAC4AAAACAAEAAAAAAC8AAAACAAEAAAAAADAAAAACAAEAAAAAADEAAAACAAEAAAAAADIAAAACAAEAAAAAADMAAAACAAEAAAAAADQAAAACAAEAAAAAADUAAAACAAEAAAAAADYAAAACAAEAAAAAADcAAAACAAEAAAAAADgAAAACAAEAAAABAPT/AAACAAEAAAABAPX/AAACAAEAAAABAPb/AAACAAEAAAABAPf/AAACAAEAAAABAPj/AAACAAEAAAABAPn/AAACAAEAAAABAPr/AAACAAEAAAABAPv/AAACAAEAAAABAPz/AAACAAEAAAABAP3/AAACAAEAAAABAP7/AAACAAEAAAABAP//AAACAAEAAAABACkAAAACAAEAAAABACoAAAACAAEAAAABACsAAAACAAEAAAABACwAAAACAAEAAAABAC0AAAACAAEAAAABAC4AAAACAAEAAAABAC8AAAACAAEAAAABADAAAAACAAEAAAABADEAAAACAAEAAAABADIAAAACAAEAAAABADMAAAACAAEAAAABADQAAAACAAEAAAABADUAAAACAAEAAAABADYAAAACAAEAAAABADcAAAACAAEAAAABADgAAAACAAEAAAACAPT/AAACAAEAAAACAPX/AAACAAEAAAACAPb/AAACAAEAAAACAPf/AAACAAEAAAACAPj/AAACAAEAAAACAPn/AAACAAEAAAACAPr/AAACAAEAAAACAPv/AAACAAEAAAACAPz/AAACAAEAAAACAP3/AAACAAEAAAACAP7/AAACAAEAAAACAP//AAACAAEAAAACACkAAAACAAEAAAACACoAAAACAAEAAAACACsAAAACAAEAAAACACwAAAACAAEAAAACAC0AAAACAAEAAAACAC4AAAACAAEAAAACAC8AAAACAAEAAAACADAAAAACAAEAAAACADEAAAACAAEAAAACADIAAAACAAEAAAACADMAAAACAAEAAAACADQAAAACAAEAAAACADUAAAACAAEAAAACADYAAAACAAEAAAACADcAAAACAAEAAAACADgAAAACAAEAAAADAPT/AAACAAEAAAADAPX/AAACAAEAAAADAPb/AAACAAEAAAADAPf/AAACAAEAAAADAPj/AAACAAEAAAADAPn/AAACAAEAAAADAPr/AAACAAEAAAADAPv/AAACAAEAAAADAPz/AAACAAEAAAADAP3/AAACAAEAAAADAP7/AAACAAEAAAADAP//AAACAAEAAAADACkAAAACAAEAAAADACoAAAACAAEAAAADACsAAAACAAEAAAADACwAAAACAAEAAAADAC0AAAACAAEAAAADAC4AAAACAAEAAAADAC8AAAACAAEAAAADADAAAAACAAEAAAADADEAAAACAAEAAAADADIAAAACAAEAAAADADMAAAACAAEAAAADADQAAAACAAEAAAADADUAAAACAAEAAAADADYAAAACAAEAAAADADcAAAACAAEAAAADADgAAAACAAEAAAAEAPT/AAACAAEAAAAEAPX/AAACAAEAAAAEAPb/AAACAAEAAAAEAPf/AAACAAEAAAAEAPj/AAACAAEAAAAEAPn/AAACAAEAAAAEAPr/AAACAAEAAAAEAPv/AAACAAEAAAAEAPz/AAACAAEAAAAEAP3/AAACAAEAAAAEAP7/AAACAAEAAAAEAP//AAACAAEAAAAEACkAAAACAAEAAAAEACoAAAACAAEAAAAEACsAAAACAAEAAAAEACwAAAACAAEAAAAEAC0AAAACAAEAAAAEAC4AAAACAAEAAAAEAC8AAAACAAEAAAAEADAAAAACAAEAAAAEADEAAAACAAEAAAAEADIAAAACAAEAAAAEADMAAAACAAEAAAAEADQAAAACAAEAAAAEADUAAAACAAEAAAAEADYAAAACAAEAAAAEADcAAAACAAEAAAAEADgAAAACAAEAAAAFAPT/AAACAAEAAAAFAPX/AAACAAEAAAAFAPb/AAACAAEAAAAFAPf/AAACAAEAAAAFAPj/AAACAAEAAAAFAPn/AAACAAEAAAAFAPr/AAACAAEAAAAFAPv/AAACAAEAAAAFAPz/AAACAAEAAAAFAP3/AAACAAEAAAAFAP7/AAACAAEAAAAFAP//AAACAAEAAAAFACkAAAACAAEAAAAFACoAAAACAAEAAAAFACsAAAACAAEAAAAFACwAAAACAAEAAAAFAC0AAAACAAEAAAAFAC4AAAACAAEAAAAFAC8AAAACAAEAAAAFADAAAAACAAEAAAAFADEAAAACAAEAAAAFADIAAAACAAEAAAAFADMAAAACAAEAAAAFADQAAAACAAEAAAAFADUAAAACAAEAAAAFADYAAAACAAEAAAAFADcAAAACAAEAAAAFADgAAAACAAEAAAAGAPT/AAACAAEAAAAGAPX/AAACAAEAAAAGAPb/AAACAAEAAAAGAPf/AAACAAEAAAAGAPj/AAACAAEAAAAGAPn/AAACAAEAAAAGAPr/AAACAAEAAAAGAPv/AAACAAEAAAAGAPz/AAACAAEAAAAGAP3/AAACAAEAAAAGAP7/AAACAAEAAAAGAP//AAACAAEAAAAGACkAAAACAAEAAAAGACoAAAACAAEAAAAGACsAAAACAAEAAAAGACwAAAACAAEAAAAGAC0AAAACAAEAAAAGAC4AAAACAAEAAAAGAC8AAAACAAEAAAAGADAAAAACAAEAAAAGADEAAAACAAEAAAAGADIAAAACAAEAAAAGADMAAAACAAEAAAAGADQAAAACAAEAAAAGADUAAAACAAEAAAAGADYAAAACAAEAAAAGADcAAAACAAEAAAAGADgAAAACAAEAAAAHAPT/AAACAAEAAAAHAPX/AAACAAEAAAAHAPb/AAACAAEAAAAHAPf/AAACAAEAAAAHAPj/AAACAAEAAAAHAPn/AAACAAEAAAAHAPr/AAACAAEAAAAHAPv/AAACAAEAAAAHAPz/AAACAAEAAAAHAP3/AAACAAEAAAAHAP7/AAACAAEAAAAHAP//AAACAAEAAAAHACkAAAACAAEAAAAHACoAAAACAAEAAAAHACsAAAACAAEAAAAHACwAAAACAAEAAAAHAC0AAAACAAEAAAAHAC4AAAACAAEAAAAHAC8AAAACAAEAAAAHADAAAAACAAEAAAAHADEAAAACAAEAAAAHADIAAAACAAEAAAAHADMAAAACAAEAAAAHADQAAAACAAEAAAAHADUAAAACAAEAAAAHADYAAAACAAEAAAAHADcAAAACAAEAAAAHADgAAAACAAEAAAAIACkAAAACAAEAAAAIACoAAAACAAEAAAAIACsAAAACAAEAAAAIACwAAAACAAEAAAAIAC0AAAACAAEAAAAIAC4AAAACAAEAAAAIAC8AAAACAAEAAAAIADAAAAACAAEAAAAIADEAAAACAAEAAAAIADIAAAACAAEAAAAIADMAAAACAAEAAAAIADQAAAACAAEAAAAIADUAAAACAAEAAAAIADYAAAACAAEAAAAIADcAAAACAAEAAAAIADgAAAACAAEAAAAJACkAAAACAAEAAAAJACoAAAACAAEAAAAJACsAAAACAAEAAAAJACwAAAACAAEAAAAJAC0AAAACAAEAAAAJAC4AAAACAAEAAAAJAC8AAAACAAEAAAAJADAAAAACAAEAAAAJADEAAAACAAEAAAAJADIAAAACAAEAAAAJADMAAAACAAEAAAAJADQAAAACAAEAAAAJADUAAAACAAEAAAAJADYAAAACAAEAAAAJADcAAAACAAEAAAAJADgAAAACAAEAAAAKACkAAAACAAEAAAAKACoAAAACAAEAAAAKACsAAAACAAEAAAAKACwAAAACAAEAAAAKAC0AAAACAAEAAAAKAC4AAAACAAEAAAAKAC8AAAACAAEAAAAKADAAAAACAAEAAAAKADEAAAACAAEAAAAKADIAAAACAAEAAAAKADMAAAACAAEAAAAKADQAAAACAAEAAAAKADUAAAACAAEAAAAKADYAAAACAAEAAAAKADcAAAACAAEAAAAKADgAAAACAAEAAAALACkAAAACAAEAAAALACoAAAACAAEAAAALACsAAAACAAEAAAALACwAAAACAAEAAAALAC0AAAACAAEAAAALAC4AAAACAAEAAAALAC8AAAACAAEAAAALADAAAAACAAEAAAALADEAAAACAAEAAAALADIAAAACAAEAAAALADMAAAACAAEAAAALADQAAAACAAEAAAALADUAAAACAAEAAAALADYAAAACAAEAAAALADcAAAACAAEAAAALADgAAAACAAEAAAAMACkAAAACAAEAAAAMACoAAAACAAEAAAAMACsAAAACAAEAAAAMACwAAAACAAEAAAAMAC0AAAACAAEAAAAMAC4AAAACAAEAAAAMAC8AAAACAAEAAAAMADAAAAACAAEAAAAMADEAAAACAAEAAAAMADIAAAACAAEAAAAMADMAAAACAAEAAAAMADQAAAACAAEAAAAMADUAAAACAAEAAAAMADYAAAACAAEAAAAMADcAAAACAAEAAAAMADgAAAACAAEAAAANACkAAAACAAEAAAANACoAAAACAAEAAAANACsAAAACAAEAAAANACwAAAACAAEAAAANAC0AAAACAAEAAAANAC4AAAACAAEAAAANAC8AAAACAAEAAAANADAAAAACAAEAAAANADEAAAACAAEAAAANADIAAAACAAEAAAANADMAAAACAAEAAAANADQAAAACAAEAAAANADUAAAACAAEAAAANADYAAAACAAEAAAANADcAAAACAAEAAAANADgAAAACAAEAAAAOACkAAAACAAEAAAAOACoAAAACAAEAAAAOACsAAAACAAEAAAAOACwAAAACAAEAAAAOAC0AAAACAAEAAAAOAC4AAAACAAEAAAAOAC8AAAACAAEAAAAOADAAAAACAAEAAAAOADEAAAACAAEAAAAOADIAAAACAAEAAAAOADMAAAACAAEAAAAOADQAAAACAAEAAAAOADUAAAACAAEAAAAOADYAAAACAAEAAAAOADcAAAACAAEAAAAOADgAAAACAAEAAAAPACkAAAACAAEAAAAPACoAAAACAAEAAAAPACsAAAACAAEAAAAPACwAAAACAAEAAAAPAC0AAAACAAEAAAAPAC4AAAACAAEAAAAPAC8AAAACAAEAAAAPADAAAAACAAEAAAAPADEAAAACAAEAAAAPADIAAAACAAEAAAAPADMAAAACAAEAAAAPADQAAAACAAEAAAAPADUAAAACAAEAAAAPADYAAAACAAEAAAAPADcAAAACAAEAAAAPADgAAAACAAEAAAAQACkAAAACAAEAAAAQACoAAAACAAEAAAAQACsAAAACAAEAAAAQACwAAAACAAEAAAAQAC0AAAACAAEAAAAQAC4AAAACAAEAAAAQAC8AAAACAAEAAAAQADAAAAACAAEAAAAQADEAAAACAAEAAAAQADIAAAACAAEAAAAQADMAAAACAAEAAAAQADQAAAACAAEAAAAQADUAAAACAAEAAAAQADYAAAACAAEAAAAQADcAAAACAAEAAAAQADgAAAACAAEAAAARACkAAAACAAEAAAARACoAAAACAAEAAAARACsAAAACAAEAAAARACwAAAACAAEAAAARAC0AAAACAAEAAAARAC4AAAACAAEAAAARAC8AAAACAAEAAAARADAAAAACAAEAAAARADEAAAACAAEAAAARADIAAAACAAEAAAARADMAAAACAAEAAAARADQAAAACAAEAAAARADUAAAACAAEAAAARADYAAAACAAEAAAARADcAAAACAAEAAAARADgAAAACAAEAAAASACkAAAACAAEAAAASACoAAAACAAEAAAASACsAAAACAAEAAAASACwAAAACAAEAAAASAC0AAAACAAEAAAASAC4AAAACAAEAAAASAC8AAAACAAEAAAASADAAAAACAAEAAAASADEAAAACAAEAAAASADIAAAACAAEAAAASADMAAAACAAEAAAASADQAAAACAAEAAAASADUAAAACAAEAAAASADYAAAACAAEAAAASADcAAAACAAEAAAASADgAAAACAAEAAAATACkAAAACAAEAAAATACoAAAACAAEAAAATACsAAAACAAEAAAATACwAAAACAAEAAAATAC0AAAACAAEAAAATAC4AAAACAAEAAAATAC8AAAACAAEAAAATADAAAAACAAEAAAATADEAAAACAAEAAAATADIAAAACAAEAAAATADMAAAACAAEAAAATADQAAAACAAEAAAATADUAAAACAAEAAAATADYAAAACAAEAAAATADcAAAACAAEAAAATADgAAAACAAEAAAAUACkAAAACAAEAAAAUACoAAAACAAEAAAAUACsAAAACAAEAAAAUACwAAAACAAEAAAAUAC0AAAACAAEAAAAUAC4AAAACAAEAAAAUAC8AAAACAAEAAAAUADAAAAACAAEAAAAUADEAAAACAAEAAAAUADIAAAACAAEAAAAUADMAAAACAAEAAAAUADQAAAACAAEAAAAUADUAAAACAAEAAAAUADYAAAACAAEAAAAUADcAAAACAAEAAAAUADgAAAACAAEAAAAVACkAAAACAAEAAAAVACoAAAACAAEAAAAVACsAAAACAAEAAAAVACwAAAACAAEAAAAVAC0AAAACAAEAAAAVAC4AAAACAAEAAAAVAC8AAAACAAEAAAAVADAAAAACAAEAAAAVADEAAAACAAEAAAAVADIAAAACAAEAAAAVADMAAAACAAEAAAAVADQAAAACAAEAAAAVADUAAAACAAEAAAAVADYAAAACAAEAAAAVADcAAAACAAEAAAAVADgAAAACAAEAAAAWACkAAAACAAEAAAAWACoAAAACAAEAAAAWACsAAAACAAEAAAAWACwAAAACAAEAAAAWAC0AAAACAAEAAAAWAC4AAAACAAEAAAAWAC8AAAACAAEAAAAWADAAAAACAAEAAAAWADEAAAACAAEAAAAWADIAAAACAAEAAAAWADMAAAACAAEAAAAWADQAAAACAAEAAAAWADUAAAACAAEAAAAWADYAAAACAAEAAAAWADcAAAACAAEAAAAWADgAAAACAAEAAAAXACkAAAACAAEAAAAXACoAAAACAAEAAAAXACsAAAACAAEAAAAXACwAAAACAAEAAAAXAC0AAAACAAEAAAAXAC4AAAACAAEAAAAXAC8AAAACAAEAAAAXADAAAAACAAEAAAAXADEAAAACAAEAAAAXADIAAAACAAEAAAAXADMAAAACAAEAAAAXADQAAAACAAEAAAAXADUAAAACAAEAAAAXADYAAAACAAEAAAAXADcAAAACAAEAAAAXADgAAAACAAEAAAAYACkAAAACAAEAAAAYACoAAAACAAEAAAAYACsAAAACAAEAAAAYACwAAAACAAEAAAAYAC0AAAACAAEAAAAYAC4AAAACAAEAAAAYAC8AAAACAAEAAAAYADAAAAACAAEAAAAYADEAAAACAAEAAAAYADIAAAACAAEAAAAYADMAAAACAAEAAAAYADQAAAACAAEAAAAYADUAAAACAAEAAAAYADYAAAACAAEAAAAYADcAAAACAAEAAAAYADgAAAACAAEAAAAZACkAAAACAAEAAAAZACoAAAACAAEAAAAZACsAAAACAAEAAAAZACwAAAACAAEAAAAZAC0AAAACAAEAAAAZAC4AAAACAAEAAAAZAC8AAAACAAEAAAAZADAAAAACAAEAAAAZADEAAAACAAEAAAAZADIAAAACAAEAAAAZADMAAAACAAEAAAAZADQAAAACAAEAAAAZADUAAAACAAEAAAAZADYAAAACAAEAAAAZADcAAAACAAEAAAAZADgAAAACAAEAAAAaACkAAAACAAEAAAAaACoAAAACAAEAAAAaACsAAAACAAEAAAAaACwAAAACAAEAAAAaAC0AAAACAAEAAAAaAC4AAAACAAEAAAAaAC8AAAACAAEAAAAaADAAAAACAAEAAAAaADEAAAACAAEAAAAaADIAAAACAAEAAAAaADMAAAACAAEAAAAaADQAAAACAAEAAAAaADUAAAACAAEAAAAaADYAAAACAAEAAAAaADcAAAACAAEAAAAaADgAAAACAAEAAAAbACkAAAACAAEAAAAbACoAAAACAAEAAAAbACsAAAACAAEAAAAbACwAAAACAAEAAAAbAC0AAAACAAEAAAAbAC4AAAACAAEAAAAbAC8AAAACAAEAAAAbADAAAAACAAEAAAAbADEAAAACAAEAAAAbADIAAAACAAEAAAAbADMAAAACAAEAAAAbADQAAAACAAEAAAAbADUAAAACAAEAAAAbADYAAAACAAEAAAAbADcAAAACAAEAAAAbADgAAAACAAEAAAAcACkAAAACAAEAAAAcACoAAAACAAEAAAAcACsAAAACAAEAAAAcACwAAAACAAEAAAAcAC0AAAACAAEAAAAcAC4AAAACAAEAAAAcAC8AAAACAAEAAAAcADAAAAACAAEAAAAcADEAAAACAAEAAAAcADIAAAACAAEAAAAcADMAAAACAAEAAAAcADQAAAACAAEAAAAcADUAAAACAAEAAAAcADYAAAACAAEAAAAcADcAAAACAAEAAAAcADgAAAACAAEAAAAdACkAAAACAAEAAAAdACoAAAACAAEAAAAdACsAAAACAAEAAAAdACwAAAACAAEAAAAdAC0AAAACAAEAAAAdAC4AAAACAAEAAAAdAC8AAAACAAEAAAAdADAAAAACAAEAAAAdADEAAAACAAEAAAAdADIAAAACAAEAAAAdADMAAAACAAEAAAAdADQAAAACAAEAAAAdADUAAAACAAEAAAAdADYAAAACAAEAAAAdADcAAAACAAEAAAAdADgAAAACAAEAAAAeACkAAAACAAEAAAAeACoAAAACAAEAAAAeACsAAAACAAEAAAAeACwAAAACAAEAAAAeAC0AAAACAAEAAAAeAC4AAAACAAEAAAAeAC8AAAACAAEAAAAeADAAAAACAAEAAAAeADEAAAACAAEAAAAeADIAAAACAAEAAAAeADMAAAACAAEAAAAeADQAAAACAAEAAAAeADUAAAACAAEAAAAeADYAAAACAAEAAAAeADcAAAACAAEAAAAeADgAAAACAAEAAAAfACkAAAACAAEAAAAfACoAAAACAAEAAAAfACsAAAACAAEAAAAfACwAAAACAAEAAAAfAC0AAAACAAEAAAAfAC4AAAACAAEAAAAfAC8AAAACAAEAAAAfADAAAAACAAEAAAAfADEAAAACAAEAAAAfADIAAAACAAEAAAAfADMAAAACAAEAAAAfADQAAAACAAEAAAAfADUAAAACAAEAAAAfADYAAAACAAEAAAAfADcAAAACAAEAAAAfADgAAAACAAEAAAAgACkAAAACAAEAAAAgACoAAAACAAEAAAAgACsAAAACAAEAAAAgACwAAAACAAEAAAAgAC0AAAACAAEAAAAgAC4AAAACAAEAAAAgAC8AAAACAAEAAAAgADAAAAACAAEAAAAgADEAAAACAAEAAAAgADIAAAACAAEAAAAgADMAAAACAAEAAAAgADQAAAACAAEAAAAgADUAAAACAAEAAAAgADYAAAACAAEAAAAgADcAAAACAAEAAAAgADgAAAACAAEAAAAhACkAAAACAAEAAAAhACoAAAACAAEAAAAhACsAAAACAAEAAAAhACwAAAACAAEAAAAhAC0AAAACAAEAAAAhAC4AAAACAAEAAAAhAC8AAAACAAEAAAAhADAAAAACAAEAAAAhADEAAAACAAEAAAAhADIAAAACAAEAAAAhADMAAAACAAEAAAAhADQAAAACAAEAAAAhADUAAAACAAEAAAAhADYAAAACAAEAAAAhADcAAAACAAEAAAAhADgAAAACAAEAAAAiACkAAAACAAEAAAAiACoAAAACAAEAAAAiACsAAAACAAEAAAAiACwAAAACAAEAAAAiAC0AAAACAAEAAAAiAC4AAAACAAEAAAAiAC8AAAACAAEAAAAiADAAAAACAAEAAAAiADEAAAACAAEAAAAiADIAAAACAAEAAAAiADMAAAACAAEAAAAiADQAAAACAAEAAAAiADUAAAACAAEAAAAiADYAAAACAAEAAAAiADcAAAACAAEAAAAiADgAAAACAAEAAAAjACkAAAACAAEAAAAjACoAAAACAAEAAAAjACsAAAACAAEAAAAjACwAAAACAAEAAAAjAC0AAAACAAEAAAAjAC4AAAACAAEAAAAjAC8AAAACAAEAAAAjADAAAAACAAEAAAAjADEAAAACAAEAAAAjADIAAAACAAEAAAAjADMAAAACAAEAAAAjADQAAAACAAEAAAAjADUAAAACAAEAAAAjADYAAAACAAEAAAAjADcAAAACAAEAAAAjADgAAAACAAEAAAAkACkAAAACAAEAAAAkACoAAAACAAEAAAAkACsAAAACAAEAAAAkACwAAAACAAEAAAAkAC0AAAACAAEAAAAkAC4AAAACAAEAAAAkAC8AAAACAAEAAAAkADAAAAACAAEAAAAkADEAAAACAAEAAAAkADIAAAACAAEAAAAkADMAAAACAAEAAAAkADQAAAACAAEAAAAkADUAAAACAAEAAAAkADYAAAACAAEAAAAkADcAAAACAAEAAAAkADgAAAACAAEAAAAlACkAAAACAAEAAAAlACoAAAACAAEAAAAlACsAAAACAAEAAAAlACwAAAACAAEAAAAlAC0AAAACAAEAAAAlAC4AAAACAAEAAAAlAC8AAAACAAEAAAAlADAAAAACAAEAAAAlADEAAAACAAEAAAAlADIAAAACAAEAAAAlADMAAAACAAEAAAAlADQAAAACAAEAAAAlADUAAAACAAEAAAAlADYAAAACAAEAAAAlADcAAAACAAEAAAAlADgAAAACAAEAAAAmACkAAAACAAEAAAAmACoAAAACAAEAAAAmACsAAAACAAEAAAAmACwAAAACAAEAAAAmAC0AAAACAAEAAAAmAC4AAAACAAEAAAAmAC8AAAACAAEAAAAmADAAAAACAAEAAAAmADEAAAACAAEAAAAmADIAAAACAAEAAAAmADMAAAACAAEAAAAmADQAAAACAAEAAAAmADUAAAACAAEAAAAmADYAAAACAAEAAAAmADcAAAACAAEAAAAmADgAAAACAAEAAAAnACkAAAACAAEAAAAnACoAAAACAAEAAAAnACsAAAACAAEAAAAnACwAAAACAAEAAAAnAC0AAAACAAEAAAAnAC4AAAACAAEAAAAnAC8AAAACAAEAAAAnADAAAAACAAEAAAAnADEAAAACAAEAAAAnADIAAAACAAEAAAAnADMAAAACAAEAAAAnADQAAAACAAEAAAAnADUAAAACAAEAAAAnADYAAAACAAEAAAAnADcAAAACAAEAAAAnADgAAAACAAEAAAAoACkAAAACAAEAAAAoACoAAAACAAEAAAAoACsAAAACAAEAAAAoACwAAAACAAEAAAAoAC0AAAACAAEAAAAoAC4AAAACAAEAAAAoAC8AAAACAAEAAAAoADAAAAACAAEAAAAoADEAAAACAAEAAAAoADIAAAACAAEAAAAoADMAAAACAAEAAAAoADQAAAACAAEAAAAoADUAAAACAAEAAAAoADYAAAACAAEAAAAoADcAAAACAAEAAAAoADgAAAACAAEAAAApACkAAAACAAEAAAApACoAAAACAAEAAAApACsAAAACAAEAAAApACwAAAACAAEAAAApAC0AAAACAAEAAAApAC4AAAACAAEAAAApAC8AAAACAAEAAAApADAAAAACAAEAAAApADEAAAACAAEAAAApADIAAAACAAEAAAApADMAAAACAAEAAAApADQAAAACAAEAAAApADUAAAACAAEAAAApADYAAAACAAEAAAApADcAAAACAAEAAAApADgAAAACAAEAAAAqACkAAAACAAEAAAAqACoAAAACAAEAAAAqACsAAAACAAEAAAAqACwAAAACAAEAAAAqAC0AAAACAAEAAAAqAC4AAAACAAEAAAAqAC8AAAACAAEAAAAqADAAAAACAAEAAAAqADEAAAACAAEAAAAqADIAAAACAAEAAAAqADMAAAACAAEAAAAqADQAAAACAAEAAAAqADUAAAACAAEAAAAqADYAAAACAAEAAAAqADcAAAACAAEAAAAqADgAAAACAAEAAAArACkAAAACAAEAAAArACoAAAACAAEAAAArACsAAAACAAEAAAArACwAAAACAAEAAAArAC0AAAACAAEAAAArAC4AAAACAAEAAAArAC8AAAACAAEAAAArADAAAAACAAEAAAArADEAAAACAAEAAAArADIAAAACAAEAAAArADMAAAACAAEAAAArADQAAAACAAEAAAArADUAAAACAAEAAAArADYAAAACAAEAAAArADcAAAACAAEAAAArADgAAAACAAEAAAAsACkAAAACAAEAAAAsACoAAAACAAEAAAAsACsAAAACAAEAAAAsACwAAAACAAEAAAAsAC0AAAACAAEAAAAsAC4AAAACAAEAAAAsAC8AAAACAAEAAAAsADAAAAACAAEAAAAsADEAAAACAAEAAAAsADIAAAACAAEAAAAsADMAAAACAAEAAAAsADQAAAACAAEAAAAsADUAAAACAAEAAAAsADYAAAACAAEAAAAsADcAAAACAAEAAAAsADgAAAACAAEAAAAtACkAAAACAAEAAAAtACoAAAACAAEAAAAtACsAAAACAAEAAAAtACwAAAACAAEAAAAtAC0AAAACAAEAAAAtAC4AAAACAAEAAAAtAC8AAAACAAEAAAAtADAAAAACAAEAAAAtADEAAAACAAEAAAAtADIAAAACAAEAAAAtADMAAAACAAEAAAAtADQAAAACAAEAAAAtADUAAAACAAEAAAAtADYAAAACAAEAAAAtADcAAAACAAEAAAAtADgAAAACAAEAAAAuACkAAAACAAEAAAAuACoAAAACAAEAAAAuACsAAAACAAEAAAAuACwAAAACAAEAAAAuAC0AAAACAAEAAAAuAC4AAAACAAEAAAAuAC8AAAACAAEAAAAuADAAAAACAAEAAAAuADEAAAACAAEAAAAuADIAAAACAAEAAAAuADMAAAACAAEAAAAuADQAAAACAAEAAAAuADUAAAACAAEAAAAuADYAAAACAAEAAAAuADcAAAACAAEAAAAuADgAAAACAAEAAAAvACkAAAACAAEAAAAvACoAAAACAAEAAAAvACsAAAACAAEAAAAvACwAAAACAAEAAAAvAC0AAAACAAEAAAAvAC4AAAACAAEAAAAvAC8AAAACAAEAAAAvADAAAAACAAEAAAAvADEAAAACAAEAAAAvADIAAAACAAEAAAAvADMAAAACAAEAAAAvADQAAAACAAEAAAAvADUAAAACAAEAAAAvADYAAAACAAEAAAAvADcAAAACAAEAAAAvADgAAAACAAEAAAAwACkAAAACAAEAAAAwACoAAAACAAEAAAAwACsAAAACAAEAAAAwACwAAAACAAEAAAAwAC0AAAACAAEAAAAwAC4AAAACAAEAAAAwAC8AAAACAAEAAAAwADAAAAACAAEAAAAwADEAAAACAAEAAAAwADIAAAACAAEAAAAwADMAAAACAAEAAAAwADQAAAACAAEAAAAwADUAAAACAAEAAAAwADYAAAACAAEAAAAwADcAAAACAAEAAAAwADgAAAACAAEAAAAxACkAAAACAAEAAAAxACoAAAACAAEAAAAxACsAAAACAAEAAAAxACwAAAACAAEAAAAxAC0AAAACAAEAAAAxAC4AAAACAAEAAAAxAC8AAAACAAEAAAAxADAAAAACAAEAAAAxADEAAAACAAEAAAAxADIAAAACAAEAAAAxADMAAAACAAEAAAAxADQAAAACAAEAAAAxADUAAAACAAEAAAAxADYAAAACAAEAAAAxADcAAAACAAEAAAAxADgAAAACAAEAAAAyACkAAAACAAEAAAAyACoAAAACAAEAAAAyACsAAAACAAEAAAAyACwAAAACAAEAAAAyAC0AAAACAAEAAAAyAC4AAAACAAEAAAAyAC8AAAACAAEAAAAyADAAAAACAAEAAAAyADEAAAACAAEAAAAyADIAAAACAAEAAAAyADMAAAACAAEAAAAyADQAAAACAAEAAAAyADUAAAACAAEAAAAyADYAAAACAAEAAAAyADcAAAACAAEAAAAyADgAAAACAAEAAAAzACkAAAACAAEAAAAzACoAAAACAAEAAAAzACsAAAACAAEAAAAzACwAAAACAAEAAAAzAC0AAAACAAEAAAAzAC4AAAACAAEAAAAzAC8AAAACAAEAAAAzADAAAAACAAEAAAAzADEAAAACAAEAAAAzADIAAAACAAEAAAAzADMAAAACAAEAAAAzADQAAAACAAEAAAAzADUAAAACAAEAAAAzADYAAAACAAEAAAAzADcAAAACAAEAAAAzADgAAAACAAEAAAA0ACkAAAACAAEAAAA0ACoAAAACAAEAAAA0ACsAAAACAAEAAAA0ACwAAAACAAEAAAA0AC0AAAACAAEAAAA0AC4AAAACAAEAAAA0AC8AAAACAAEAAAA0ADAAAAACAAEAAAA0ADEAAAACAAEAAAA0ADIAAAACAAEAAAA0ADMAAAACAAEAAAA0ADQAAAACAAEAAAA0ADUAAAACAAEAAAA0ADYAAAACAAEAAAA0ADcAAAACAAEAAAA0ADgAAAACAAEAAAA1ACkAAAACAAEAAAA1ACoAAAACAAEAAAA1ACsAAAACAAEAAAA1ACwAAAACAAEAAAA1AC0AAAACAAEAAAA1AC4AAAACAAEAAAA1AC8AAAACAAEAAAA1ADAAAAACAAEAAAA1ADEAAAACAAEAAAA1ADIAAAACAAEAAAA1ADMAAAACAAEAAAA1ADQAAAACAAEAAAA1ADUAAAACAAEAAAA1ADYAAAACAAEAAAA1ADcAAAACAAEAAAA1ADgAAAACAAEAAAA2ACkAAAACAAEAAAA2ACoAAAACAAEAAAA2ACsAAAACAAEAAAA2ACwAAAACAAEAAAA2AC0AAAACAAEAAAA2AC4AAAACAAEAAAA2AC8AAAACAAEAAAA2ADAAAAACAAEAAAA2ADEAAAACAAEAAAA2ADIAAAACAAEAAAA2ADMAAAACAAEAAAA2ADQAAAACAAEAAAA2ADUAAAACAAEAAAA2ADYAAAACAAEAAAA2ADcAAAACAAEAAAA2ADgAAAACAAEAAAA3ACkAAAACAAEAAAA3ACoAAAACAAEAAAA3ACsAAAACAAEAAAA3ACwAAAACAAEAAAA3AC0AAAACAAEAAAA3AC4AAAACAAEAAAA3AC8AAAACAAEAAAA3ADAAAAACAAEAAAA3ADEAAAACAAEAAAA3ADIAAAACAAEAAAA3ADMAAAACAAEAAAA3ADQAAAACAAEAAAA3ADUAAAACAAEAAAA3ADYAAAACAAEAAAA3ADcAAAACAAEAAAA3ADgAAAACAAEAAAA4ACkAAAACAAEAAAA4ACoAAAACAAEAAAA4ACsAAAACAAEAAAA4ACwAAAACAAEAAAA4AC0AAAACAAEAAAA4AC4AAAACAAEAAAA4AC8AAAACAAEAAAA4ADAAAAACAAEAAAA4ADEAAAACAAEAAAA4ADIAAAACAAEAAAA4ADMAAAACAAEAAAA4ADQAAAACAAEAAAA4ADUAAAACAAEAAAA4ADYAAAACAAEAAAA4ADcAAAACAAEAAAA4ADgAAAACAAEAAAA5ACkAAAACAAEAAAA5ACoAAAACAAEAAAA5ACsAAAACAAEAAAA5ACwAAAACAAEAAAA5AC0AAAACAAEAAAA5AC4AAAACAAEAAAA5AC8AAAACAAEAAAA5ADAAAAACAAEAAAA5ADEAAAACAAEAAAA5ADIAAAACAAEAAAA5ADMAAAACAAEAAAA5ADQAAAACAAEAAAA5ADUAAAACAAEAAAA5ADYAAAACAAEAAAA5ADcAAAACAAEAAAA5ADgAAAACAAEAAAA6ACkAAAACAAEAAAA6ACoAAAACAAEAAAA6ACsAAAACAAEAAAA6ACwAAAACAAEAAAA6AC0AAAACAAEAAAA6AC4AAAACAAEAAAA6AC8AAAACAAEAAAA6ADAAAAACAAEAAAA6ADEAAAACAAEAAAA6ADIAAAACAAEAAAA6ADMAAAACAAEAAAA6ADQAAAACAAEAAAA6ADUAAAACAAEAAAA6ADYAAAACAAEAAAA6ADcAAAACAAEAAAA6ADgAAAACAAEAAAA7ACkAAAACAAEAAAA7ACoAAAACAAEAAAA7ACsAAAACAAEAAAA7ACwAAAACAAEAAAA7AC0AAAACAAEAAAA7AC4AAAACAAEAAAA7AC8AAAACAAEAAAA7ADAAAAACAAEAAAA7ADEAAAACAAEAAAA7ADIAAAACAAEAAAA7ADMAAAACAAEAAAA7ADQAAAACAAEAAAA7ADUAAAACAAEAAAA7ADYAAAACAAEAAAA7ADcAAAACAAEAAAA7ADgAAAACAAEAAAA8ACkAAAACAAEAAAA8ACoAAAACAAEAAAA8ACsAAAACAAEAAAA8ACwAAAACAAEAAAA8AC0AAAACAAEAAAA8AC4AAAACAAEAAAA8AC8AAAACAAEAAAA8ADAAAAACAAEAAAA8ADEAAAACAAEAAAA8ADIAAAACAAEAAAA8ADMAAAACAAEAAAA8ADQAAAACAAEAAAA8ADUAAAACAAEAAAA8ADYAAAACAAEAAAA8ADcAAAACAAEAAAA8ADgAAAACAAEAAAA9ACkAAAACAAEAAAA9ACoAAAACAAEAAAA9ACsAAAACAAEAAAA9ACwAAAACAAEAAAA9AC0AAAACAAEAAAA9AC4AAAACAAEAAAA9AC8AAAACAAEAAAA9ADAAAAACAAEAAAA9ADEAAAACAAEAAAA9ADIAAAACAAEAAAA9ADMAAAACAAEAAAA9ADQAAAACAAEAAAA9ADUAAAACAAEAAAA9ADYAAAACAAEAAAA9ADcAAAACAAEAAAA9ADgAAAACAAEAAAA+ACkAAAACAAEAAAA+ACoAAAACAAEAAAA+ACsAAAACAAEAAAA+ACwAAAACAAEAAAA+AC0AAAACAAEAAAA+AC4AAAACAAEAAAA+AC8AAAACAAEAAAA+ADAAAAACAAEAAAA+ADEAAAACAAEAAAA+ADIAAAACAAEAAAA+ADMAAAACAAEAAAA+ADQAAAACAAEAAAA+ADUAAAACAAEAAAA+ADYAAAACAAEAAAA+ADcAAAACAAEAAAA+ADgAAAACAAEAAAA/ACkAAAACAAEAAAA/ACoAAAACAAEAAAA/ACsAAAACAAEAAAA/ACwAAAACAAEAAAA/AC0AAAACAAEAAAA/AC4AAAACAAEAAAA/AC8AAAACAAEAAAA/ADAAAAACAAEAAAA/ADEAAAACAAEAAAA/ADIAAAACAAEAAAA/ADMAAAACAAEAAAA/ADQAAAACAAEAAAA/ADUAAAACAAEAAAA/ADYAAAACAAEAAAA/ADcAAAACAAEAAAA/ADgAAAACAAEAAABAACkAAAACAAEAAABAACoAAAACAAEAAABAACsAAAACAAEAAABAACwAAAACAAEAAABAAC0AAAACAAEAAABAAC4AAAACAAEAAABAAC8AAAACAAEAAABAADAAAAACAAEAAABAADEAAAACAAEAAABAADIAAAACAAEAAABAADMAAAACAAEAAABAADQAAAACAAEAAABAADUAAAACAAEAAABAADYAAAACAAEAAABAADcAAAACAAEAAABAADgAAAACAAEAAABBACkAAAACAAEAAABBACoAAAACAAEAAABBACsAAAACAAEAAABBACwAAAACAAEAAABBAC0AAAACAAEAAABBAC4AAAACAAEAAABBAC8AAAACAAEAAABBADAAAAACAAEAAABBADEAAAACAAEAAABBADIAAAACAAEAAABBADMAAAACAAEAAABBADQAAAACAAEAAABBADUAAAACAAEAAABBADYAAAACAAEAAABBADcAAAACAAEAAABBADgAAAACAAEAAABCACkAAAACAAEAAABCACoAAAACAAEAAABCACsAAAACAAEAAABCACwAAAACAAEAAABCAC0AAAACAAEAAABCAC4AAAACAAEAAABCAC8AAAACAAEAAABCADAAAAACAAEAAABCADEAAAACAAEAAABCADIAAAACAAEAAABCADMAAAACAAEAAABCADQAAAACAAEAAABCADUAAAACAAEAAABCADYAAAACAAEAAABCADcAAAACAAEAAABCADgAAAACAAEAAABDACkAAAACAAEAAABDACoAAAACAAEAAABDACsAAAACAAEAAABDACwAAAACAAEAAABDAC0AAAACAAEAAABDAC4AAAACAAEAAABDAC8AAAACAAEAAABDADAAAAACAAEAAABDADEAAAACAAEAAABDADIAAAACAAEAAABDADMAAAACAAEAAABDADQAAAACAAEAAABDADUAAAACAAEAAABDADYAAAACAAEAAABDADcAAAACAAEAAABDADgAAAACAAEAAABEACkAAAACAAEAAABEACoAAAACAAEAAABEACsAAAACAAEAAABEACwAAAACAAEAAABEAC0AAAACAAEAAABEAC4AAAACAAEAAABEAC8AAAACAAEAAABEADAAAAACAAEAAABEADEAAAACAAEAAABEADIAAAACAAEAAABEADMAAAACAAEAAABEADQAAAACAAEAAABEADUAAAACAAEAAABEADYAAAACAAEAAABEADcAAAACAAEAAABEADgAAAACAAEAAABFACkAAAACAAEAAABFACoAAAACAAEAAABFACsAAAACAAEAAABFACwAAAACAAEAAABFAC0AAAACAAEAAABFAC4AAAACAAEAAABFAC8AAAACAAEAAABFADAAAAACAAEAAABFADEAAAACAAEAAABFADIAAAACAAEAAABFADMAAAACAAEAAABFADQAAAACAAEAAABFADUAAAACAAEAAABFADYAAAACAAEAAABFADcAAAACAAEAAABFADgAAAACAAEAAABGACkAAAACAAEAAABGACoAAAACAAEAAABGACsAAAACAAEAAABGACwAAAACAAEAAABGAC0AAAACAAEAAABGAC4AAAACAAEAAABGAC8AAAACAAEAAABGADAAAAACAAEAAABGADEAAAACAAEAAABGADIAAAACAAEAAABGADMAAAACAAEAAABGADQAAAACAAEAAABGADUAAAACAAEAAABGADYAAAACAAEAAABGADcAAAACAAEAAABGADgAAAACAAEAAABHACkAAAACAAEAAABHACoAAAACAAEAAABHACsAAAACAAEAAABHACwAAAACAAEAAABHAC0AAAACAAEAAABHAC4AAAACAAEAAABHAC8AAAACAAEAAABHADAAAAACAAEAAABHADEAAAACAAEAAABHADIAAAACAAEAAABHADMAAAACAAEAAABHADQAAAACAAEAAABHADUAAAACAAEAAABHADYAAAACAAEAAABHADcAAAACAAEAAABHADgAAAACAAEAAABIACYAAAACAAEAAABIACcAAAACAAEAAABIACgAAAACAAEAAABIACkAAAACAAEAAABIACoAAAACAAEAAABIACsAAAACAAEAAABIACwAAAACAAEAAABIAC0AAAACAAEAAABIAC4AAAACAAEAAABIAC8AAAACAAEAAABIADAAAAACAAEAAABIADEAAAACAAEAAABIADIAAAACAAEAAABIADMAAAACAAEAAABIADQAAAACAAEAAABIADUAAAACAAEAAABIADYAAAACAAEAAABIADcAAAACAAEAAABIADgAAAACAAEAAABJACYAAAACAAEAAABJACcAAAACAAEAAABJACgAAAACAAEAAABJACkAAAACAAEAAABJACoAAAACAAEAAABJACsAAAACAAEAAABJACwAAAACAAEAAABJAC0AAAACAAEAAABJAC4AAAACAAEAAABJAC8AAAACAAEAAABJADAAAAACAAEAAABJADEAAAACAAEAAABJADIAAAACAAEAAABJADMAAAACAAEAAABJADQAAAACAAEAAABJADUAAAACAAEAAABJADYAAAACAAEAAABJADcAAAACAAEAAABJADgAAAACAAEAAABKACYAAAACAAEAAABKACcAAAACAAEAAABKACgAAAACAAEAAABKACkAAAACAAEAAABKACoAAAACAAEAAABKACsAAAACAAEAAABKACwAAAACAAEAAABKAC0AAAACAAEAAABKAC4AAAACAAEAAABKAC8AAAACAAEAAABKADAAAAACAAEAAABKADEAAAACAAEAAABKADIAAAACAAEAAABKADMAAAACAAEAAABKADQAAAACAAEAAABKADUAAAACAAEAAABKADYAAAACAAEAAABKADcAAAACAAEAAABKADgAAAACAAEAAABLACYAAAACAAEAAABLACcAAAACAAEAAABLACgAAAACAAEAAABLACkAAAACAAEAAABLACoAAAACAAEAAABLACsAAAACAAEAAABLACwAAAACAAEAAABLAC0AAAACAAEAAABLAC4AAAACAAEAAABLAC8AAAACAAEAAABLADAAAAACAAEAAABLADEAAAACAAEAAABLADIAAAACAAEAAABLADMAAAACAAEAAABLADQAAAACAAEAAABLADUAAAACAAEAAABLADYAAAACAAEAAABLADcAAAACAAEAAABLADgAAAACAAEAAABMACYAAAACAAEAAABMACcAAAACAAEAAABMACgAAAACAAEAAABMACkAAAACAAEAAABMACoAAAACAAEAAABMACsAAAACAAEAAABMACwAAAACAAEAAABMAC0AAAACAAEAAABMAC4AAAACAAEAAABMAC8AAAACAAEAAABMADAAAAACAAEAAABMADEAAAACAAEAAABMADIAAAACAAEAAABMADMAAAACAAEAAABMADQAAAACAAEAAABMADUAAAACAAEAAABMADYAAAACAAEAAABMADcAAAACAAEAAABMADgAAAACAAEAAABNACYAAAACAAEAAABNACcAAAACAAEAAABNACgAAAACAAEAAABNACkAAAACAAEAAABNACoAAAACAAEAAABNACsAAAACAAEAAABNACwAAAACAAEAAABNAC0AAAACAAEAAABNAC4AAAACAAEAAABNAC8AAAACAAEAAABNADAAAAACAAEAAABNADEAAAACAAEAAABNADIAAAACAAEAAABNADMAAAACAAEAAABNADQAAAACAAEAAABNADUAAAACAAEAAABNADYAAAACAAEAAABNADcAAAACAAEAAABNADgAAAACAAEAAABOACYAAAACAAEAAABOACcAAAACAAEAAABOACgAAAACAAEAAABOACkAAAACAAEAAABOACoAAAACAAEAAABOACsAAAACAAEAAABOACwAAAACAAEAAABOAC0AAAACAAEAAABOAC4AAAACAAEAAABOAC8AAAACAAEAAABOADAAAAACAAEAAABOADEAAAACAAEAAABOADIAAAACAAEAAABOADMAAAACAAEAAABOADQAAAACAAEAAABOADUAAAACAAEAAABOADYAAAACAAEAAABOADcAAAACAAEAAABOADgAAAACAAEAAABPACYAAAACAAEAAABPACcAAAACAAEAAABPACgAAAACAAEAAABPACkAAAACAAEAAABPACoAAAACAAEAAABPACsAAAACAAEAAABPACwAAAACAAEAAABPAC0AAAACAAEAAABPAC4AAAACAAEAAABPAC8AAAACAAEAAABPADAAAAACAAEAAABPADEAAAACAAEAAABPADIAAAACAAEAAABPADMAAAACAAEAAABPADQAAAACAAEAAABPADUAAAACAAEAAABPADYAAAACAAEAAABPADcAAAACAAEAAABPADgAAAACAAEAAABQACYAAAACAAEAAABQACcAAAACAAEAAABQACgAAAACAAEAAABQACkAAAACAAEAAABQACoAAAACAAEAAABQACsAAAACAAEAAABQACwAAAACAAEAAABQAC0AAAACAAEAAABQAC4AAAACAAEAAABQAC8AAAACAAEAAABQADAAAAACAAEAAABQADEAAAACAAEAAABQADIAAAACAAEAAABQADMAAAACAAEAAABQADQAAAACAAEAAABQADUAAAACAAEAAABQADYAAAACAAEAAABQADcAAAACAAEAAABQADgAAAACAAEAAABRACYAAAACAAEAAABRACcAAAACAAEAAABRACgAAAACAAEAAABRACkAAAACAAEAAABRACoAAAACAAEAAABRACsAAAACAAEAAABRACwAAAACAAEAAABRAC0AAAACAAEAAABRAC4AAAACAAEAAABRAC8AAAACAAEAAABRADAAAAACAAEAAABRADEAAAACAAEAAABRADIAAAACAAEAAABRADMAAAACAAEAAABRADQAAAACAAEAAABRADUAAAACAAEAAABRADYAAAACAAEAAABRADcAAAACAAEAAABRADgAAAACAAEAAABSACYAAAACAAEAAABSACcAAAACAAEAAABSACgAAAACAAEAAABSACkAAAACAAEAAABSACoAAAACAAEAAABSACsAAAACAAEAAABSACwAAAACAAEAAABSAC0AAAACAAEAAABSAC4AAAACAAEAAABSAC8AAAACAAEAAABSADAAAAACAAEAAABSADEAAAACAAEAAABSADIAAAACAAEAAABSADMAAAACAAEAAABSADQAAAACAAEAAABSADUAAAACAAEAAABSADYAAAACAAEAAABSADcAAAACAAEAAABSADgAAAACAAEAAABTACYAAAACAAEAAABTACcAAAACAAEAAABTACgAAAACAAEAAABTACkAAAACAAEAAABTACoAAAACAAEAAABTACsAAAACAAEAAABTACwAAAACAAEAAABTAC0AAAACAAEAAABTAC4AAAACAAEAAABTAC8AAAACAAEAAABTADAAAAACAAEAAABTADEAAAACAAEAAABTADIAAAACAAEAAABTADMAAAACAAEAAABTADQAAAACAAEAAABTADUAAAACAAEAAABTADYAAAACAAEAAABTADcAAAACAAEAAABTADgAAAACAAEAAABUACYAAAACAAEAAABUACcAAAACAAEAAABUACgAAAACAAEAAABUACkAAAACAAEAAABUACoAAAACAAEAAABUACsAAAACAAEAAABUACwAAAACAAEAAABUAC0AAAACAAEAAABUAC4AAAACAAEAAABUAC8AAAACAAEAAABUADAAAAACAAEAAABUADEAAAACAAEAAABUADIAAAACAAEAAABUADMAAAACAAEAAABUADQAAAACAAEAAABUADUAAAACAAEAAABUADYAAAACAAEAAABUADcAAAACAAEAAABUADgAAAACAAEAAABVACYAAAACAAEAAABVACcAAAACAAEAAABVACgAAAACAAEAAABVACkAAAACAAEAAABVACoAAAACAAEAAABVACsAAAACAAEAAABVACwAAAACAAEAAABVAC0AAAACAAEAAABVAC4AAAACAAEAAABVAC8AAAACAAEAAABVADAAAAACAAEAAABVADEAAAACAAEAAABVADIAAAACAAEAAABVADMAAAACAAEAAABVADQAAAACAAEAAABVADUAAAACAAEAAABVADYAAAACAAEAAABVADcAAAACAAEAAABVADgAAAACAAEAAABWACYAAAACAAEAAABWACcAAAACAAEAAABWACgAAAACAAEAAABWACkAAAACAAEAAABWACoAAAACAAEAAABWACsAAAACAAEAAABWACwAAAACAAEAAABWAC0AAAACAAEAAABWAC4AAAACAAEAAABWAC8AAAACAAEAAABWADAAAAACAAEAAABWADEAAAACAAEAAABWADIAAAACAAEAAABWADMAAAACAAEAAABWADQAAAACAAEAAABWADUAAAACAAEAAABWADYAAAACAAEAAABWADcAAAACAAEAAABWADgAAAACAAEAAABXACYAAAACAAEAAABXACcAAAACAAEAAABXACgAAAACAAEAAABXACkAAAACAAEAAABXACoAAAACAAEAAABXACsAAAACAAEAAABXACwAAAACAAEAAABXAC0AAAACAAEAAABXAC4AAAACAAEAAABXAC8AAAACAAEAAABXADAAAAACAAEAAABXADEAAAACAAEAAABXADIAAAACAAEAAABXADMAAAACAAEAAABXADQAAAACAAEAAABXADUAAAACAAEAAABXADYAAAACAAEAAABXADcAAAACAAEAAABXADgAAAACAAEAAABYACYAAAACAAEAAABYACcAAAACAAEAAABYACgAAAACAAEAAABYACkAAAACAAEAAABYACoAAAACAAEAAABYACsAAAACAAEAAABYACwAAAACAAEAAABYAC0AAAACAAEAAABYAC4AAAACAAEAAABYAC8AAAACAAEAAABYADAAAAACAAEAAABYADEAAAACAAEAAABYADIAAAACAAEAAABYADMAAAACAAEAAABYADQAAAACAAEAAABYADUAAAACAAEAAABYADYAAAACAAEAAABYADcAAAACAAEAAABYADgAAAACAAEAAABZACYAAAACAAEAAABZACcAAAACAAEAAABZACgAAAACAAEAAABZACkAAAACAAEAAABZACoAAAACAAEAAABZACsAAAACAAEAAABZACwAAAACAAEAAABZAC0AAAACAAEAAABZAC4AAAACAAEAAABZAC8AAAACAAEAAABZADAAAAACAAEAAABZADEAAAACAAEAAABZADIAAAACAAEAAABZADMAAAACAAEAAABZADQAAAACAAEAAABZADUAAAACAAEAAABZADYAAAACAAEAAABZADcAAAACAAEAAABZADgAAAACAAEAAABaACYAAAACAAEAAABaACcAAAACAAEAAABaACgAAAACAAEAAABaACkAAAACAAEAAABaACoAAAACAAEAAABaACsAAAACAAEAAABaACwAAAACAAEAAABaAC0AAAACAAEAAABaAC4AAAACAAEAAABaAC8AAAACAAEAAABaADAAAAACAAEAAABaADEAAAACAAEAAABaADIAAAACAAEAAABaADMAAAACAAEAAABaADQAAAACAAEAAABaADUAAAACAAEAAABaADYAAAACAAEAAABaADcAAAACAAEAAABaADgAAAACAAEAAABbACYAAAACAAEAAABbACcAAAACAAEAAABbACgAAAACAAEAAABbACkAAAACAAEAAABbACoAAAACAAEAAABbACsAAAACAAEAAABbACwAAAACAAEAAABbAC0AAAACAAEAAABbAC4AAAACAAEAAABbAC8AAAACAAEAAABbADAAAAACAAEAAABbADEAAAACAAEAAABbADIAAAACAAEAAABbADMAAAACAAEAAABbADQAAAACAAEAAABbADUAAAACAAEAAABbADYAAAACAAEAAABbADcAAAACAAEAAABbADgAAAACAAEAAABcACYAAAACAAEAAABcACcAAAACAAEAAABcACgAAAACAAEAAABcACkAAAACAAEAAABcACoAAAACAAEAAABcACsAAAACAAEAAABcACwAAAACAAEAAABcAC0AAAACAAEAAABcAC4AAAACAAEAAABcAC8AAAACAAEAAABcADAAAAACAAEAAABcADEAAAACAAEAAABcADIAAAACAAEAAABcADMAAAACAAEAAABcADQAAAACAAEAAABcADUAAAACAAEAAABcADYAAAACAAEAAABcADcAAAACAAEAAABcADgAAAACAAEAAABdACYAAAACAAEAAABdACcAAAACAAEAAABdACgAAAACAAEAAABdACkAAAACAAEAAABdACoAAAACAAEAAABdACsAAAACAAEAAABdACwAAAACAAEAAABdAC0AAAACAAEAAABdAC4AAAACAAEAAABdAC8AAAACAAEAAABdADAAAAACAAEAAABdADEAAAACAAEAAABdADIAAAACAAEAAABdADMAAAACAAEAAABdADQAAAACAAEAAABdADUAAAACAAEAAABdADYAAAACAAEAAABdADcAAAACAAEAAABdADgAAAACAAEAAABeACYAAAACAAEAAABeACcAAAACAAEAAABeACgAAAACAAEAAABeACkAAAACAAEAAABeACoAAAACAAEAAABeACsAAAACAAEAAABeACwAAAACAAEAAABeAC0AAAACAAEAAABeAC4AAAACAAEAAABeAC8AAAACAAEAAABeADAAAAACAAEAAABeADEAAAACAAEAAABeADIAAAACAAEAAABeADMAAAACAAEAAABeADQAAAACAAEAAABeADUAAAACAAEAAABeADYAAAACAAEAAABeADcAAAACAAEAAABeADgAAAACAAEAAABfACYAAAACAAEAAABfACcAAAACAAEAAABfACgAAAACAAEAAABfACkAAAACAAEAAABfACoAAAACAAEAAABfACsAAAACAAEAAABfACwAAAACAAEAAABfAC0AAAACAAEAAABfAC4AAAACAAEAAABfAC8AAAACAAEAAABfADAAAAACAAEAAABfADEAAAACAAEAAABfADIAAAACAAEAAABfADMAAAACAAEAAABfADQAAAACAAEAAABfADUAAAACAAEAAABfADYAAAACAAEAAABfADcAAAACAAEAAABfADgAAAACAAEAAABgACYAAAACAAEAAABgACcAAAACAAEAAABgACgAAAACAAEAAABgACkAAAACAAEAAABgACoAAAACAAEAAABgACsAAAACAAEAAABgACwAAAACAAEAAABgAC0AAAACAAEAAABgAC4AAAACAAEAAABgAC8AAAACAAEAAABgADAAAAACAAEAAABgADEAAAACAAEAAABgADIAAAACAAEAAABgADMAAAACAAEAAABgADQAAAACAAEAAABgADUAAAACAAEAAABgADYAAAACAAEAAABgADcAAAACAAEAAABgADgAAAACAAEAAABhACYAAAACAAEAAABhACcAAAACAAEAAABhACgAAAACAAEAAABhACkAAAACAAEAAABhACoAAAACAAEAAABhACsAAAACAAEAAABhACwAAAACAAEAAABhAC0AAAACAAEAAABhAC4AAAACAAEAAABhAC8AAAACAAEAAABhADAAAAACAAEAAABhADEAAAACAAEAAABhADIAAAACAAEAAABhADMAAAACAAEAAABhADQAAAACAAEAAABhADUAAAACAAEAAABhADYAAAACAAEAAABhADcAAAACAAEAAABhADgAAAACAAEAAABiACYAAAACAAEAAABiACcAAAACAAEAAABiACgAAAACAAEAAABiACkAAAACAAEAAABiACoAAAACAAEAAABiACsAAAACAAEAAABiACwAAAACAAEAAABiAC0AAAACAAEAAABiAC4AAAACAAEAAABiAC8AAAACAAEAAABiADAAAAACAAEAAABiADEAAAACAAEAAABiADIAAAACAAEAAABiADMAAAACAAEAAABiADQAAAACAAEAAABiADUAAAACAAEAAABiADYAAAACAAEAAABiADcAAAACAAEAAABiADgAAAACAAEAAABjACYAAAACAAEAAABjACcAAAACAAEAAABjACgAAAACAAEAAABjACkAAAACAAEAAABjACoAAAACAAEAAABjACsAAAACAAEAAABjACwAAAACAAEAAABjAC0AAAACAAEAAABjAC4AAAACAAEAAABjAC8AAAACAAEAAABjADAAAAACAAEAAABjADEAAAACAAEAAABjADIAAAACAAEAAABjADMAAAACAAEAAABjADQAAAACAAEAAABjADUAAAACAAEAAABjADYAAAACAAEAAABjADcAAAACAAEAAABjADgAAAACAAEAAABkACYAAAACAAEAAABkACcAAAACAAEAAABkACgAAAACAAEAAABkACkAAAACAAEAAABkACoAAAACAAEAAABkACsAAAACAAEAAABkACwAAAACAAEAAABkAC0AAAACAAEAAABkAC4AAAACAAEAAABkAC8AAAACAAEAAABkADAAAAACAAEAAABkADEAAAACAAEAAABkADIAAAACAAEAAABkADMAAAACAAEAAABkADQAAAACAAEAAABkADUAAAACAAEAAABkADYAAAACAAEAAABkADcAAAACAAEAAABkADgAAAACAAEAAABlACYAAAACAAEAAABlACcAAAACAAEAAABlACgAAAACAAEAAABlACkAAAACAAEAAABlACoAAAACAAEAAABlACsAAAACAAEAAABlACwAAAACAAEAAABlAC0AAAACAAEAAABlAC4AAAACAAEAAABlAC8AAAACAAEAAABlADAAAAACAAEAAABlADEAAAACAAEAAABlADIAAAACAAEAAABlADMAAAACAAEAAABlADQAAAACAAEAAABlADUAAAACAAEAAABlADYAAAACAAEAAABlADcAAAACAAEAAABlADgAAAACAAEAAABmACYAAAACAAEAAABmACcAAAACAAEAAABmACgAAAACAAEAAABmACkAAAACAAEAAABmACoAAAACAAEAAABmACsAAAACAAEAAABmACwAAAACAAEAAABmAC0AAAACAAEAAABmAC4AAAACAAEAAABmAC8AAAACAAEAAABmADAAAAACAAEAAABmADEAAAACAAEAAABmADIAAAACAAEAAABmADMAAAACAAEAAABmADQAAAACAAEAAABmADUAAAACAAEAAABmADYAAAACAAEAAABmADcAAAACAAEAAABmADgAAAACAAEAAABGAPL/AAACAAEAAABGAPP/AAACAAEAAABGAPT/AAACAAEAAABGAPX/AAACAAEAAABGAPb/AAACAAEAAABGAPf/AAACAAEAAABGAPj/AAACAAEAAABGAPn/AAACAAEAAABGAPr/AAACAAEAAABGAPv/AAACAAEAAABGAPz/AAACAAEAAABGAP3/AAACAAEAAABGAP7/AAACAAEAAABGAP//AAACAAEAAABHAPL/AAACAAEAAABHAPP/AAACAAEAAABHAPT/AAACAAEAAABHAPX/AAACAAEAAABHAPb/AAACAAEAAABHAPf/AAACAAEAAABHAPj/AAACAAEAAABHAPn/AAACAAEAAABHAPr/AAACAAEAAABHAPv/AAACAAEAAABHAPz/AAACAAEAAABHAP3/AAACAAEAAABHAP7/AAACAAEAAABHAP//AAACAAEAAABIAPL/AAACAAEAAABIAPP/AAACAAEAAABIAPT/AAACAAEAAABIAPX/AAACAAEAAABIAPb/AAACAAEAAABIAPf/AAACAAEAAABIAPj/AAACAAEAAABIAPn/AAACAAEAAABIAPr/AAACAAEAAABIAPv/AAACAAEAAABIAPz/AAACAAEAAABIAP3/AAACAAEAAABIAP7/AAACAAEAAABIAP//AAACAAEAAABIAAAAAAACAAEAAABIAAEAAAACAAEAAABIAAIAAAACAAEAAABIAAMAAAACAAEAAABIAAQAAAACAAEAAABIAAUAAAACAAEAAABIAAYAAAACAAEAAABIAAcAAAACAAEAAABIAAgAAAACAAEAAABIAAkAAAACAAEAAABIAAoAAAACAAEAAABIAAsAAAACAAEAAABIAAwAAAACAAEAAABIAA0AAAACAAEAAABIAA4AAAACAAEAAABIAA8AAAACAAEAAABIABAAAAACAAEAAABIABEAAAACAAEAAABIABIAAAACAAEAAABIABMAAAACAAEAAABIABQAAAACAAEAAABIABUAAAACAAEAAABIABYAAAACAAEAAABIABcAAAACAAEAAABIABgAAAACAAEAAABIABkAAAACAAEAAABIABoAAAACAAEAAABIABsAAAACAAEAAABIABwAAAACAAEAAABIAB0AAAACAAEAAABIAB4AAAACAAEAAABIAB8AAAACAAEAAABIACAAAAACAAEAAABIACEAAAACAAEAAABIACIAAAACAAEAAABIACMAAAACAAEAAABIACQAAAACAAEAAABIACUAAAACAAEAAABJAPL/AAACAAEAAABJAPP/AAACAAEAAABJAPT/AAACAAEAAABJAPX/AAACAAEAAABJAPb/AAACAAEAAABJAPf/AAACAAEAAABJAPj/AAACAAEAAABJAPn/AAACAAEAAABJAPr/AAACAAEAAABJAPv/AAACAAEAAABJAPz/AAACAAEAAABJAP3/AAACAAEAAABJAP7/AAACAAEAAABJAP//AAACAAEAAABJAAAAAAACAAEAAABJAAEAAAACAAEAAABJAAIAAAACAAEAAABJAAMAAAACAAEAAABJAAQAAAACAAEAAABJAAUAAAACAAEAAABJAAYAAAACAAEAAABJAAcAAAACAAEAAABJAAgAAAACAAEAAABJAAkAAAACAAEAAABJAAoAAAACAAEAAABJAAsAAAACAAEAAABJAAwAAAACAAEAAABJAA0AAAACAAEAAABJAA4AAAACAAEAAABJAA8AAAACAAEAAABJABAAAAACAAEAAABJABEAAAACAAEAAABJABIAAAACAAEAAABJABMAAAACAAEAAABJABQAAAACAAEAAABJABUAAAACAAEAAABJABYAAAACAAEAAABJABcAAAACAAEAAABJABgAAAACAAEAAABJABkAAAACAAEAAABJABoAAAACAAEAAABJABsAAAACAAEAAABJABwAAAACAAEAAABJAB0AAAACAAEAAABJAB4AAAACAAEAAABJAB8AAAACAAEAAABJACAAAAACAAEAAABJACEAAAACAAEAAABJACIAAAACAAEAAABJACMAAAACAAEAAABJACQAAAACAAEAAABJACUAAAACAAEAAABKAPL/AAACAAEAAABKAPP/AAACAAEAAABKAPT/AAACAAEAAABKAPX/AAACAAEAAABKAPb/AAACAAEAAABKAPf/AAACAAEAAABKAPj/AAACAAEAAABKAPn/AAACAAEAAABKAPr/AAACAAEAAABKAPv/AAACAAEAAABKAPz/AAACAAEAAABKAP3/AAACAAEAAABKAP7/AAACAAEAAABKAP//AAACAAEAAABKAAAAAAACAAEAAABKAAEAAAACAAEAAABKAAIAAAACAAEAAABKAAMAAAACAAEAAABKAAQAAAACAAEAAABKAAUAAAACAAEAAABKAAYAAAACAAEAAABKAAcAAAACAAEAAABKAAgAAAACAAEAAABKAAkAAAACAAEAAABKAAoAAAACAAEAAABKAAsAAAACAAEAAABKAAwAAAACAAEAAABKAA0AAAACAAEAAABKAA4AAAACAAEAAABKAA8AAAACAAEAAABKABAAAAACAAEAAABKABEAAAACAAEAAABKABIAAAACAAEAAABKABMAAAACAAEAAABKABQAAAACAAEAAABKABUAAAACAAEAAABKABYAAAACAAEAAABKABcAAAACAAEAAABKABgAAAACAAEAAABKABkAAAACAAEAAABKABoAAAACAAEAAABKABsAAAACAAEAAABKABwAAAACAAEAAABKAB0AAAACAAEAAABKAB4AAAACAAEAAABKAB8AAAACAAEAAABKACAAAAACAAEAAABKACEAAAACAAEAAABKACIAAAACAAEAAABKACMAAAACAAEAAABKACQAAAACAAEAAABKACUAAAACAAEAAABLAPL/AAACAAEAAABLAPP/AAACAAEAAABLAPT/AAACAAEAAABLAPX/AAACAAEAAABLAPb/AAACAAEAAABLAPf/AAACAAEAAABLAPj/AAACAAEAAABLAPn/AAACAAEAAABLAPr/AAACAAEAAABLAPv/AAACAAEAAABLAPz/AAACAAEAAABLAP3/AAACAAEAAABLAP7/AAACAAEAAABLAP//AAACAAEAAABLAAAAAAACAAEAAABLAAEAAAACAAEAAABLAAIAAAACAAEAAABLAAMAAAACAAEAAABLAAQAAAACAAEAAABLAAUAAAACAAEAAABLAAYAAAACAAEAAABLAAcAAAACAAEAAABLAAgAAAACAAEAAABLAAkAAAACAAEAAABLAAoAAAACAAEAAABLAAsAAAACAAEAAABLAAwAAAACAAEAAABLAA0AAAACAAEAAABLAA4AAAACAAEAAABLAA8AAAACAAEAAABLABAAAAACAAEAAABLABEAAAACAAEAAABLABIAAAACAAEAAABLABMAAAACAAEAAABLABQAAAACAAEAAABLABUAAAACAAEAAABLABYAAAACAAEAAABLABcAAAACAAEAAABLABgAAAACAAEAAABLABkAAAACAAEAAABLABoAAAACAAEAAABLABsAAAACAAEAAABLABwAAAACAAEAAABLAB0AAAACAAEAAABLAB4AAAACAAEAAABLAB8AAAACAAEAAABLACAAAAACAAEAAABLACEAAAACAAEAAABLACIAAAACAAEAAABLACMAAAACAAEAAABLACQAAAACAAEAAABLACUAAAACAAEAAABMAPL/AAACAAEAAABMAPP/AAACAAEAAABMAPT/AAACAAEAAABMAPX/AAACAAEAAABMAPb/AAACAAEAAABMAPf/AAACAAEAAABMAPj/AAACAAEAAABMAPn/AAACAAEAAABMAPr/AAACAAEAAABMAPv/AAACAAEAAABMAPz/AAACAAEAAABMAP3/AAACAAEAAABMAP7/AAACAAEAAABMAP//AAACAAEAAABMAAAAAAACAAEAAABMAAEAAAACAAEAAABMAAIAAAACAAEAAABMAAMAAAACAAEAAABMAAQAAAACAAEAAABMAAUAAAACAAEAAABMAAYAAAACAAEAAABMAAcAAAACAAEAAABMAAgAAAACAAEAAABMAAkAAAACAAEAAABMAAoAAAACAAEAAABMAAsAAAACAAEAAABMAAwAAAACAAEAAABMAA0AAAACAAEAAABMAA4AAAACAAEAAABMAA8AAAACAAEAAABMABAAAAACAAEAAABMABEAAAACAAEAAABMABIAAAACAAEAAABMABMAAAACAAEAAABMABQAAAACAAEAAABMABUAAAACAAEAAABMABYAAAACAAEAAABMABcAAAACAAEAAABMABgAAAACAAEAAABMABkAAAACAAEAAABMABoAAAACAAEAAABMABsAAAACAAEAAABMABwAAAACAAEAAABMAB0AAAACAAEAAABMAB4AAAACAAEAAABMAB8AAAACAAEAAABMACAAAAACAAEAAABMACEAAAACAAEAAABMACIAAAACAAEAAABMACMAAAACAAEAAABMACQAAAACAAEAAABMACUAAAACAAEAAABNAPL/AAACAAEAAABNAPP/AAACAAEAAABNAPT/AAACAAEAAABNAPX/AAACAAEAAABNAPb/AAACAAEAAABNAPf/AAACAAEAAABNAPj/AAACAAEAAABNAPn/AAACAAEAAABNAPr/AAACAAEAAABNAPv/AAACAAEAAABNAPz/AAACAAEAAABNAP3/AAACAAEAAABNAP7/AAACAAEAAABNAP//AAACAAEAAABNAAAAAAACAAEAAABNAAEAAAACAAEAAABNAAIAAAACAAEAAABNAAMAAAACAAEAAABNAAQAAAACAAEAAABNAAUAAAACAAEAAABNAAYAAAACAAEAAABNAAcAAAACAAEAAABNAAgAAAACAAEAAABNAAkAAAACAAEAAABNAAoAAAACAAEAAABNAAsAAAACAAEAAABNAAwAAAACAAEAAABNAA0AAAACAAEAAABNAA4AAAACAAEAAABNAA8AAAACAAEAAABNABAAAAACAAEAAABNABEAAAACAAEAAABNABIAAAACAAEAAABNABMAAAACAAEAAABNABQAAAACAAEAAABNABUAAAACAAEAAABNABYAAAACAAEAAABNABcAAAACAAEAAABNABgAAAACAAEAAABNABkAAAACAAEAAABNABoAAAACAAEAAABNABsAAAACAAEAAABNABwAAAACAAEAAABNAB0AAAACAAEAAABNAB4AAAACAAEAAABNAB8AAAACAAEAAABNACAAAAACAAEAAABNACEAAAACAAEAAABNACIAAAACAAEAAABNACMAAAACAAEAAABNACQAAAACAAEAAABNACUAAAACAAEAAABOAPL/AAACAAEAAABOAPP/AAACAAEAAABOAPT/AAACAAEAAABOAPX/AAACAAEAAABOAPb/AAACAAEAAABOAPf/AAACAAEAAABOAPj/AAACAAEAAABOAPn/AAACAAEAAABOAPr/AAACAAEAAABOAPv/AAACAAEAAABOAPz/AAACAAEAAABOAP3/AAACAAEAAABOAP7/AAACAAEAAABOAP//AAACAAEAAABOAAAAAAACAAEAAABOAAEAAAACAAEAAABOAAIAAAACAAEAAABOAAMAAAACAAEAAABOAAQAAAACAAEAAABOAAUAAAACAAEAAABOAAYAAAACAAEAAABOAAcAAAACAAEAAABOAAgAAAACAAEAAABOAAkAAAACAAEAAABOAAoAAAACAAEAAABOAAsAAAACAAEAAABOAAwAAAACAAEAAABOAA0AAAACAAEAAABOAA4AAAACAAEAAABOAA8AAAACAAEAAABOABAAAAACAAEAAABOABEAAAACAAEAAABOABIAAAACAAEAAABOABMAAAACAAEAAABOABQAAAACAAEAAABOABUAAAACAAEAAABOABYAAAACAAEAAABOABcAAAACAAEAAABOABgAAAACAAEAAABOABkAAAACAAEAAABOABoAAAACAAEAAABOABsAAAACAAEAAABOABwAAAACAAEAAABOAB0AAAACAAEAAABOAB4AAAACAAEAAABOAB8AAAACAAEAAABOACAAAAACAAEAAABOACEAAAACAAEAAABOACIAAAACAAEAAABOACMAAAACAAEAAABOACQAAAACAAEAAABOACUAAAACAAEAAABPAPL/AAACAAEAAABPAPP/AAACAAEAAABPAPT/AAACAAEAAABPAPX/AAACAAEAAABPAPb/AAACAAEAAABPAPf/AAACAAEAAABPAPj/AAACAAEAAABPAPn/AAACAAEAAABPAPr/AAACAAEAAABPAPv/AAACAAEAAABPAPz/AAACAAEAAABPAP3/AAACAAEAAABPAP7/AAACAAEAAABPAP//AAACAAEAAABPAAAAAAACAAEAAABPAAEAAAACAAEAAABPAAIAAAACAAEAAABPAAMAAAACAAEAAABPAAQAAAACAAEAAABPAAUAAAACAAEAAABPAAYAAAACAAEAAABPAAcAAAACAAEAAABPAAgAAAACAAEAAABPAAkAAAACAAEAAABPAAoAAAACAAEAAABPAAsAAAACAAEAAABPAAwAAAACAAEAAABPAA0AAAACAAEAAABPAA4AAAACAAEAAABPAA8AAAACAAEAAABPABAAAAACAAEAAABPABEAAAACAAEAAABPABIAAAACAAEAAABPABMAAAACAAEAAABPABQAAAACAAEAAABPABUAAAACAAEAAABPABYAAAACAAEAAABPABcAAAACAAEAAABPABgAAAACAAEAAABPABkAAAACAAEAAABPABoAAAACAAEAAABPABsAAAACAAEAAABPABwAAAACAAEAAABPAB0AAAACAAEAAABPAB4AAAACAAEAAABPAB8AAAACAAEAAABPACAAAAACAAEAAABPACEAAAACAAEAAABPACIAAAACAAEAAABPACMAAAACAAEAAABPACQAAAACAAEAAABPACUAAAACAAEAAABQAPL/AAACAAEAAABQAPP/AAACAAEAAABQAPT/AAACAAEAAABQAPX/AAACAAEAAABQAPb/AAACAAEAAABQAPf/AAACAAEAAABQAPj/AAACAAEAAABQAPn/AAACAAEAAABQAPr/AAACAAEAAABQAPv/AAACAAEAAABQAPz/AAACAAEAAABQAP3/AAACAAEAAABQAP7/AAACAAEAAABQAP//AAACAAEAAABQAAAAAAACAAEAAABQAAEAAAACAAEAAABQAAIAAAACAAEAAABQAAMAAAACAAEAAABQAAQAAAACAAEAAABQAAUAAAACAAEAAABQAAYAAAACAAEAAABQAAcAAAACAAEAAABQAAgAAAACAAEAAABQAAkAAAACAAEAAABQAAoAAAACAAEAAABQAAsAAAACAAEAAABQAAwAAAACAAEAAABQAA0AAAACAAEAAABQAA4AAAACAAEAAABQAA8AAAACAAEAAABQABAAAAACAAEAAABQABEAAAACAAEAAABQABIAAAACAAEAAABQABMAAAACAAEAAABQABQAAAACAAEAAABQABUAAAACAAEAAABQABYAAAACAAEAAABQABcAAAACAAEAAABQABgAAAACAAEAAABQABkAAAACAAEAAABQABoAAAACAAEAAABQABsAAAACAAEAAABQABwAAAACAAEAAABQAB0AAAACAAEAAABQAB4AAAACAAEAAABQAB8AAAACAAEAAABQACAAAAACAAEAAABQACEAAAACAAEAAABQACIAAAACAAEAAABQACMAAAACAAEAAABQACQAAAACAAEAAABQACUAAAACAAEAAABRAPL/AAACAAEAAABRAPP/AAACAAEAAABRAPT/AAACAAEAAABRAPX/AAACAAEAAABRAPb/AAACAAEAAABRAPf/AAACAAEAAABRAPj/AAACAAEAAABRAPn/AAACAAEAAABRAPr/AAACAAEAAABRAPv/AAACAAEAAABRAPz/AAACAAEAAABRAP3/AAACAAEAAABRAP7/AAACAAEAAABRAP//AAACAAEAAABRAAAAAAACAAEAAABRAAEAAAACAAEAAABRAAIAAAACAAEAAABRAAMAAAACAAEAAABRAAQAAAACAAEAAABRAAUAAAACAAEAAABRAAYAAAACAAEAAABRAAcAAAACAAEAAABRAAgAAAACAAEAAABRAAkAAAACAAEAAABRAAoAAAACAAEAAABRAAsAAAACAAEAAABRAAwAAAACAAEAAABRAA0AAAACAAEAAABRAA4AAAACAAEAAABRAA8AAAACAAEAAABRABAAAAACAAEAAABRABEAAAACAAEAAABRABIAAAACAAEAAABRABMAAAACAAEAAABRABQAAAACAAEAAABRABUAAAACAAEAAABRABYAAAACAAEAAABRABcAAAACAAEAAABRABgAAAACAAEAAABRABkAAAACAAEAAABRABoAAAACAAEAAABRABsAAAACAAEAAABRABwAAAACAAEAAABRAB0AAAACAAEAAABRAB4AAAACAAEAAABRAB8AAAACAAEAAABRACAAAAACAAEAAABRACEAAAACAAEAAABRACIAAAACAAEAAABRACMAAAACAAEAAABRACQAAAACAAEAAABRACUAAAACAAEAAABSAPL/AAACAAEAAABSAPP/AAACAAEAAABSAPT/AAACAAEAAABSAPX/AAACAAEAAABSAPb/AAACAAEAAABSAPf/AAACAAEAAABSAPj/AAACAAEAAABSAPn/AAACAAEAAABSAPr/AAACAAEAAABSAPv/AAACAAEAAABSAPz/AAACAAEAAABSAP3/AAACAAEAAABSAP7/AAACAAEAAABSAP//AAACAAEAAABSAAAAAAACAAEAAABSAAEAAAACAAEAAABSAAIAAAACAAEAAABSAAMAAAACAAEAAABSAAQAAAACAAEAAABSAAUAAAACAAEAAABSAAYAAAACAAEAAABSAAcAAAACAAEAAABSAAgAAAACAAEAAABSAAkAAAACAAEAAABSAAoAAAACAAEAAABSAAsAAAACAAEAAABSAAwAAAACAAEAAABSAA0AAAACAAEAAABSAA4AAAACAAEAAABSAA8AAAACAAEAAABSABAAAAACAAEAAABSABEAAAACAAEAAABSABIAAAACAAEAAABSABMAAAACAAEAAABSABQAAAACAAEAAABSABUAAAACAAEAAABSABYAAAACAAEAAABSABcAAAACAAEAAABSABgAAAACAAEAAABSABkAAAACAAEAAABSABoAAAACAAEAAABSABsAAAACAAEAAABSABwAAAACAAEAAABSAB0AAAACAAEAAABSAB4AAAACAAEAAABSAB8AAAACAAEAAABSACAAAAACAAEAAABSACEAAAACAAEAAABSACIAAAACAAEAAABSACMAAAACAAEAAABSACQAAAACAAEAAABSACUAAAACAAEAAABTAPL/AAACAAEAAABTAPP/AAACAAEAAABTAPT/AAACAAEAAABTAPX/AAACAAEAAABTAPb/AAACAAEAAABTAPf/AAACAAEAAABTAPj/AAACAAEAAABTAPn/AAACAAEAAABTAPr/AAACAAEAAABTAPv/AAACAAEAAABTAPz/AAACAAEAAABTAP3/AAACAAEAAABTAP7/AAACAAEAAABTAP//AAACAAEAAABTAAAAAAACAAEAAABTAAEAAAACAAEAAABTAAIAAAACAAEAAABTAAMAAAACAAEAAABTAAQAAAACAAEAAABTAAUAAAACAAEAAABTAAYAAAACAAEAAABTAAcAAAACAAEAAABTAAgAAAACAAEAAABTAAkAAAACAAEAAABTAAoAAAACAAEAAABTAAsAAAACAAEAAABTAAwAAAACAAEAAABTAA0AAAACAAEAAABTAA4AAAACAAEAAABTAA8AAAACAAEAAABTABAAAAACAAEAAABTABEAAAACAAEAAABTABIAAAACAAEAAABTABMAAAACAAEAAABTABQAAAACAAEAAABTABUAAAACAAEAAABTABYAAAACAAEAAABTABcAAAACAAEAAABTABgAAAACAAEAAABTABkAAAACAAEAAABTABoAAAACAAEAAABTABsAAAACAAEAAABTABwAAAACAAEAAABTAB0AAAACAAEAAABTAB4AAAACAAEAAABTAB8AAAACAAEAAABTACAAAAACAAEAAABTACEAAAACAAEAAABTACIAAAACAAEAAABTACMAAAACAAEAAABTACQAAAACAAEAAABTACUAAAACAAEAAABUAPL/AAACAAEAAABUAPP/AAACAAEAAABUAPT/AAACAAEAAABUAPX/AAACAAEAAABUAPb/AAACAAEAAABUAPf/AAACAAEAAABUAPj/AAACAAEAAABUAPn/AAACAAEAAABUAPr/AAACAAEAAABUAPv/AAACAAEAAABUAPz/AAACAAEAAABUAP3/AAACAAEAAABUAP7/AAACAAEAAABUAP//AAACAAEAAABUAAAAAAACAAEAAABUAAEAAAACAAEAAABUAAIAAAACAAEAAABUAAMAAAACAAEAAABUAAQAAAACAAEAAABUAAUAAAACAAEAAABUAAYAAAACAAEAAABUAAcAAAACAAEAAABUAAgAAAACAAEAAABUAAkAAAACAAEAAABUAAoAAAACAAEAAABUAAsAAAACAAEAAABUAAwAAAACAAEAAABUAA0AAAACAAEAAABUAA4AAAACAAEAAABUAA8AAAACAAEAAABUABAAAAACAAEAAABUABEAAAACAAEAAABUABIAAAACAAEAAABUABMAAAACAAEAAABUABQAAAACAAEAAABUABUAAAACAAEAAABUABYAAAACAAEAAABUABcAAAACAAEAAABUABgAAAACAAEAAABUABkAAAACAAEAAABUABoAAAACAAEAAABUABsAAAACAAEAAABUABwAAAACAAEAAABUAB0AAAACAAEAAABUAB4AAAACAAEAAABUAB8AAAACAAEAAABUACAAAAACAAEAAABUACEAAAACAAEAAABUACIAAAACAAEAAABUACMAAAACAAEAAABUACQAAAACAAEAAABUACUAAAACAAEAAABVAPL/AAACAAEAAABVAPP/AAACAAEAAABVAPT/AAACAAEAAABVAPX/AAACAAEAAABVAPb/AAACAAEAAABVAPf/AAACAAEAAABVAPj/AAACAAEAAABVAPn/AAACAAEAAABVAPr/AAACAAEAAABVAPv/AAACAAEAAABVAPz/AAACAAEAAABVAP3/AAACAAEAAABVAP7/AAACAAEAAABVAP//AAACAAEAAABVAAAAAAACAAEAAABVAAEAAAACAAEAAABVAAIAAAACAAEAAABVAAMAAAACAAEAAABVAAQAAAACAAEAAABVAAUAAAACAAEAAABVAAYAAAACAAEAAABVAAcAAAACAAEAAABVAAgAAAACAAEAAABVAAkAAAACAAEAAABVAAoAAAACAAEAAABVAAsAAAACAAEAAABVAAwAAAACAAEAAABVAA0AAAACAAEAAABVAA4AAAACAAEAAABVAA8AAAACAAEAAABVABAAAAACAAEAAABVABEAAAACAAEAAABVABIAAAACAAEAAABVABMAAAACAAEAAABVABQAAAACAAEAAABVABUAAAACAAEAAABVABYAAAACAAEAAABVABcAAAACAAEAAABVABgAAAACAAEAAABVABkAAAACAAEAAABVABoAAAACAAEAAABVABsAAAACAAEAAABVABwAAAACAAEAAABVAB0AAAACAAEAAABVAB4AAAACAAEAAABVAB8AAAACAAEAAABVACAAAAACAAEAAABVACEAAAACAAEAAABVACIAAAACAAEAAABVACMAAAACAAEAAABVACQAAAACAAEAAABVACUAAAACAAEAAABWAPL/AAACAAEAAABWAPP/AAACAAEAAABWAPT/AAACAAEAAABWAPX/AAACAAEAAABWAPb/AAACAAEAAABWAPf/AAACAAEAAABWAPj/AAACAAEAAABWAPn/AAACAAEAAABWAPr/AAACAAEAAABWAPv/AAACAAEAAABWAPz/AAACAAEAAABWAP3/AAACAAEAAABWAP7/AAACAAEAAABWAP//AAACAAEAAABWAAAAAAACAAEAAABWAAEAAAACAAEAAABWAAIAAAACAAEAAABWAAMAAAACAAEAAABWAAQAAAACAAEAAABWAAUAAAACAAEAAABWAAYAAAACAAEAAABWAAcAAAACAAEAAABWAAgAAAACAAEAAABWAAkAAAACAAEAAABWAAoAAAACAAEAAABWAAsAAAACAAEAAABWAAwAAAACAAEAAABWAA0AAAACAAEAAABWAA4AAAACAAEAAABWAA8AAAACAAEAAABWABAAAAACAAEAAABWABEAAAACAAEAAABWABIAAAACAAEAAABWABMAAAACAAEAAABWABQAAAACAAEAAABWABUAAAACAAEAAABWABYAAAACAAEAAABWABcAAAACAAEAAABWABgAAAACAAEAAABWABkAAAACAAEAAABWABoAAAACAAEAAABWABsAAAACAAEAAABWABwAAAACAAEAAABWAB0AAAACAAEAAABWAB4AAAACAAEAAABWAB8AAAACAAEAAABWACAAAAACAAEAAABWACEAAAACAAEAAABWACIAAAACAAEAAABWACMAAAACAAEAAABWACQAAAACAAEAAABWACUAAAACAAEAAABXAPL/AAACAAEAAABXAPP/AAACAAEAAABXAPT/AAACAAEAAABXAPX/AAACAAEAAABXAPb/AAACAAEAAABXAPf/AAACAAEAAABXAPj/AAACAAEAAABXAPn/AAACAAEAAABXAPr/AAACAAEAAABXAPv/AAACAAEAAABXAPz/AAACAAEAAABXAP3/AAACAAEAAABXAP7/AAACAAEAAABXAP//AAACAAEAAABXAAAAAAACAAEAAABXAAEAAAACAAEAAABXAAIAAAACAAEAAABXAAMAAAACAAEAAABXAAQAAAACAAEAAABXAAUAAAACAAEAAABXAAYAAAACAAEAAABXAAcAAAACAAEAAABXAAgAAAACAAEAAABXAAkAAAACAAEAAABXAAoAAAACAAEAAABXAAsAAAACAAEAAABXAAwAAAACAAEAAABXAA0AAAACAAEAAABXAA4AAAACAAEAAABXAA8AAAACAAEAAABXABAAAAACAAEAAABXABEAAAACAAEAAABXABIAAAACAAEAAABXABMAAAACAAEAAABXABQAAAACAAEAAABXABUAAAACAAEAAABXABYAAAACAAEAAABXABcAAAACAAEAAABXABgAAAACAAEAAABXABkAAAACAAEAAABXABoAAAACAAEAAABXABsAAAACAAEAAABXABwAAAACAAEAAABXAB0AAAACAAEAAABXAB4AAAACAAEAAABXAB8AAAACAAEAAABXACAAAAACAAEAAABXACEAAAACAAEAAABXACIAAAACAAEAAABXACMAAAACAAEAAABXACQAAAACAAEAAABXACUAAAACAAEAAABYAPL/AAACAAEAAABYAPP/AAACAAEAAABYAPT/AAACAAEAAABYAPX/AAACAAEAAABYAPb/AAACAAEAAABYAPf/AAACAAEAAABYAPj/AAACAAEAAABYAPn/AAACAAEAAABYAPr/AAACAAEAAABYAPv/AAACAAEAAABYAPz/AAACAAEAAABYAP3/AAACAAEAAABYAP7/AAACAAEAAABYAP//AAACAAEAAABYAAAAAAACAAEAAABYAAEAAAACAAEAAABYAAIAAAACAAEAAABYAAMAAAACAAEAAABYAAQAAAACAAEAAABYAAUAAAACAAEAAABYAAYAAAACAAEAAABYAAcAAAACAAEAAABYAAgAAAACAAEAAABYAAkAAAACAAEAAABYAAoAAAACAAEAAABYAAsAAAACAAEAAABYAAwAAAACAAEAAABYAA0AAAACAAEAAABYAA4AAAACAAEAAABYAA8AAAACAAEAAABYABAAAAACAAEAAABYABEAAAACAAEAAABYABIAAAACAAEAAABYABMAAAACAAEAAABYABQAAAACAAEAAABYABUAAAACAAEAAABYABYAAAACAAEAAABYABcAAAACAAEAAABYABgAAAACAAEAAABYABkAAAACAAEAAABYABoAAAACAAEAAABYABsAAAACAAEAAABYABwAAAACAAEAAABYAB0AAAACAAEAAABYAB4AAAACAAEAAABYAB8AAAACAAEAAABYACAAAAACAAEAAABYACEAAAACAAEAAABYACIAAAACAAEAAABYACMAAAACAAEAAABYACQAAAACAAEAAABYACUAAAACAAEAAABZAPL/AAACAAEAAABZAPP/AAACAAEAAABZAPT/AAACAAEAAABZAPX/AAACAAEAAABZAPb/AAACAAEAAABZAPf/AAACAAEAAABZAPj/AAACAAEAAABZAPn/AAACAAEAAABZAPr/AAACAAEAAABZAPv/AAACAAEAAABZAPz/AAACAAEAAABZAP3/AAACAAEAAABZAP7/AAACAAEAAABZAP//AAACAAEAAABZAAAAAAACAAEAAABZAAEAAAACAAEAAABZAAIAAAACAAEAAABZAAMAAAACAAEAAABZAAQAAAACAAEAAABZAAUAAAACAAEAAABZAAYAAAACAAEAAABZAAcAAAACAAEAAABZAAgAAAACAAEAAABZAAkAAAACAAEAAABZAAoAAAACAAEAAABZAAsAAAACAAEAAABZAAwAAAACAAEAAABZAA0AAAACAAEAAABZAA4AAAACAAEAAABZAA8AAAACAAEAAABZABAAAAACAAEAAABZABEAAAACAAEAAABZABIAAAACAAEAAABZABMAAAACAAEAAABZABQAAAACAAEAAABZABUAAAACAAEAAABZABYAAAACAAEAAABZABcAAAACAAEAAABZABgAAAACAAEAAABZABkAAAACAAEAAABZABoAAAACAAEAAABZABsAAAACAAEAAABZABwAAAACAAEAAABZAB0AAAACAAEAAABZAB4AAAACAAEAAABZAB8AAAACAAEAAABZACAAAAACAAEAAABZACEAAAACAAEAAABZACIAAAACAAEAAABZACMAAAACAAEAAABZACQAAAACAAEAAABZACUAAAACAAEAAABaAPL/AAACAAEAAABaAPP/AAACAAEAAABaAPT/AAACAAEAAABaAPX/AAACAAEAAABaAPb/AAACAAEAAABaAPf/AAACAAEAAABaAPj/AAACAAEAAABaAPn/AAACAAEAAABaAPr/AAACAAEAAABaAPv/AAACAAEAAABaAPz/AAACAAEAAABaAP3/AAACAAEAAABaAP7/AAACAAEAAABaAP//AAACAAEAAABaAAAAAAACAAEAAABaAAEAAAACAAEAAABaAAIAAAACAAEAAABaAAMAAAACAAEAAABaAAQAAAACAAEAAABaAAUAAAACAAEAAABaAAYAAAACAAEAAABaAAcAAAACAAEAAABaAAgAAAACAAEAAABaAAkAAAACAAEAAABaAAoAAAACAAEAAABaAAsAAAACAAEAAABaAAwAAAACAAEAAABaAA0AAAACAAEAAABaAA4AAAACAAEAAABaAA8AAAACAAEAAABaABAAAAACAAEAAABaABEAAAACAAEAAABaABIAAAACAAEAAABaABMAAAACAAEAAABaABQAAAACAAEAAABaABUAAAACAAEAAABaABYAAAACAAEAAABaABcAAAACAAEAAABaABgAAAACAAEAAABaABkAAAACAAEAAABaABoAAAACAAEAAABaABsAAAACAAEAAABaABwAAAACAAEAAABaAB0AAAACAAEAAABaAB4AAAACAAEAAABaAB8AAAACAAEAAABaACAAAAACAAEAAABaACEAAAACAAEAAABaACIAAAACAAEAAABaACMAAAACAAEAAABaACQAAAACAAEAAABaACUAAAACAAEAAABbAPL/AAACAAEAAABbAPP/AAACAAEAAABbAPT/AAACAAEAAABbAPX/AAACAAEAAABbAPb/AAACAAEAAABbAPf/AAACAAEAAABbAPj/AAACAAEAAABbAPn/AAACAAEAAABbAPr/AAACAAEAAABbAPv/AAACAAEAAABbAPz/AAACAAEAAABbAP3/AAACAAEAAABbAP7/AAACAAEAAABbAP//AAACAAEAAABbAAAAAAACAAEAAABbAAEAAAACAAEAAABbAAIAAAACAAEAAABbAAMAAAACAAEAAABbAAQAAAACAAEAAABbAAUAAAACAAEAAABbAAYAAAACAAEAAABbAAcAAAACAAEAAABbAAgAAAACAAEAAABbAAkAAAACAAEAAABbAAoAAAACAAEAAABbAAsAAAACAAEAAABbAAwAAAACAAEAAABbAA0AAAACAAEAAABbAA4AAAACAAEAAABbAA8AAAACAAEAAABbABAAAAACAAEAAABbABEAAAACAAEAAABbABIAAAACAAEAAABbABMAAAACAAEAAABbABQAAAACAAEAAABbABUAAAACAAEAAABbABYAAAACAAEAAABbABcAAAACAAEAAABbABgAAAACAAEAAABbABkAAAACAAEAAABbABoAAAACAAEAAABbABsAAAACAAEAAABbABwAAAACAAEAAABbAB0AAAACAAEAAABbAB4AAAACAAEAAABbAB8AAAACAAEAAABbACAAAAACAAEAAABbACEAAAACAAEAAABbACIAAAACAAEAAABbACMAAAACAAEAAABbACQAAAACAAEAAABbACUAAAACAAEAAABcAPL/AAACAAEAAABcAPP/AAACAAEAAABcAPT/AAACAAEAAABcAPX/AAACAAEAAABcAPb/AAACAAEAAABcAPf/AAACAAEAAABcAPj/AAACAAEAAABcAPn/AAACAAEAAABcAPr/AAACAAEAAABcAPv/AAACAAEAAABcAPz/AAACAAEAAABcAP3/AAACAAEAAABcAP7/AAACAAEAAABcAP//AAACAAEAAABcAAAAAAACAAEAAABcAAEAAAACAAEAAABcAAIAAAACAAEAAABcAAMAAAACAAEAAABcAAQAAAACAAEAAABcAAUAAAACAAEAAABcAAYAAAACAAEAAABcAAcAAAACAAEAAABcAAgAAAACAAEAAABcAAkAAAACAAEAAABcAAoAAAACAAEAAABcAAsAAAACAAEAAABcAAwAAAACAAEAAABcAA0AAAACAAEAAABcAA4AAAACAAEAAABcAA8AAAACAAEAAABcABAAAAACAAEAAABcABEAAAACAAEAAABcABIAAAACAAEAAABcABMAAAACAAEAAABcABQAAAACAAEAAABcABUAAAACAAEAAABcABYAAAACAAEAAABcABcAAAACAAEAAABcABgAAAACAAEAAABcABkAAAACAAEAAABcABoAAAACAAEAAABcABsAAAACAAEAAABcABwAAAACAAEAAABcAB0AAAACAAEAAABcAB4AAAACAAEAAABcAB8AAAACAAEAAABcACAAAAACAAEAAABcACEAAAACAAEAAABcACIAAAACAAEAAABcACMAAAACAAEAAABcACQAAAACAAEAAABcACUAAAACAAEAAABdAPL/AAACAAEAAABdAPP/AAACAAEAAABdAPT/AAACAAEAAABdAPX/AAACAAEAAABdAPb/AAACAAEAAABdAPf/AAACAAEAAABdAPj/AAACAAEAAABdAPn/AAACAAEAAABdAPr/AAACAAEAAABdAPv/AAACAAEAAABdAPz/AAACAAEAAABdAP3/AAACAAEAAABdAP7/AAACAAEAAABdAP//AAACAAEAAABdAAAAAAACAAEAAABdAAEAAAACAAEAAABdAAIAAAACAAEAAABdAAMAAAACAAEAAABdAAQAAAACAAEAAABdAAUAAAACAAEAAABdAAYAAAACAAEAAABdAAcAAAACAAEAAABdAAgAAAACAAEAAABdAAkAAAACAAEAAABdAAoAAAACAAEAAABdAAsAAAACAAEAAABdAAwAAAACAAEAAABdAA0AAAACAAEAAABdAA4AAAACAAEAAABdAA8AAAACAAEAAABdABAAAAACAAEAAABdABEAAAACAAEAAABdABIAAAACAAEAAABdABMAAAACAAEAAABdABQAAAACAAEAAABdABUAAAACAAEAAABdABYAAAACAAEAAABdABcAAAACAAEAAABdABgAAAACAAEAAABdABkAAAACAAEAAABdABoAAAACAAEAAABdABsAAAACAAEAAABdABwAAAACAAEAAABdAB0AAAACAAEAAABdAB4AAAACAAEAAABdAB8AAAACAAEAAABdACAAAAACAAEAAABdACEAAAACAAEAAABdACIAAAACAAEAAABdACMAAAACAAEAAABdACQAAAACAAEAAABdACUAAAACAAEAAABeAPL/AAACAAEAAABeAPP/AAACAAEAAABeAPT/AAACAAEAAABeAPX/AAACAAEAAABeAPb/AAACAAEAAABeAPf/AAACAAEAAABeAPj/AAACAAEAAABeAPn/AAACAAEAAABeAPr/AAACAAEAAABeAPv/AAACAAEAAABeAPz/AAACAAEAAABeAP3/AAACAAEAAABeAP7/AAACAAEAAABeAP//AAACAAEAAABeAAAAAAACAAEAAABeAAEAAAACAAEAAABeAAIAAAACAAEAAABeAAMAAAACAAEAAABeAAQAAAACAAEAAABeAAUAAAACAAEAAABeAAYAAAACAAEAAABeAAcAAAACAAEAAABeAAgAAAACAAEAAABeAAkAAAACAAEAAABeAAoAAAACAAEAAABeAAsAAAACAAEAAABeAAwAAAACAAEAAABeAA0AAAACAAEAAABeAA4AAAACAAEAAABeAA8AAAACAAEAAABeABAAAAACAAEAAABeABEAAAACAAEAAABeABIAAAACAAEAAABeABMAAAACAAEAAABeABQAAAACAAEAAABeABUAAAACAAEAAABeABYAAAACAAEAAABeABcAAAACAAEAAABeABgAAAACAAEAAABeABkAAAACAAEAAABeABoAAAACAAEAAABeABsAAAACAAEAAABeABwAAAACAAEAAABeAB0AAAACAAEAAABeAB4AAAACAAEAAABeAB8AAAACAAEAAABeACAAAAACAAEAAABeACEAAAACAAEAAABeACIAAAACAAEAAABeACMAAAACAAEAAABeACQAAAACAAEAAABeACUAAAACAAEAAABfAPL/AAACAAEAAABfAPP/AAACAAEAAABfAPT/AAACAAEAAABfAPX/AAACAAEAAABfAPb/AAACAAEAAABfAPf/AAACAAEAAABfAPj/AAACAAEAAABfAPn/AAACAAEAAABfAPr/AAACAAEAAABfAPv/AAACAAEAAABfAPz/AAACAAEAAABfAP3/AAACAAEAAABfAP7/AAACAAEAAABfAP//AAACAAEAAABfAAAAAAACAAEAAABfAAEAAAACAAEAAABfAAIAAAACAAEAAABfAAMAAAACAAEAAABfAAQAAAACAAEAAABfAAUAAAACAAEAAABfAAYAAAACAAEAAABfAAcAAAACAAEAAABfAAgAAAACAAEAAABfAAkAAAACAAEAAABfAAoAAAACAAEAAABfAAsAAAACAAEAAABfAAwAAAACAAEAAABfAA0AAAACAAEAAABfAA4AAAACAAEAAABfAA8AAAACAAEAAABfABAAAAACAAEAAABfABEAAAACAAEAAABfABIAAAACAAEAAABfABMAAAACAAEAAABfABQAAAACAAEAAABfABUAAAACAAEAAABfABYAAAACAAEAAABfABcAAAACAAEAAABfABgAAAACAAEAAABfABkAAAACAAEAAABfABoAAAACAAEAAABfABsAAAACAAEAAABfABwAAAACAAEAAABfAB0AAAACAAEAAABfAB4AAAACAAEAAABfAB8AAAACAAEAAABfACAAAAACAAEAAABfACEAAAACAAEAAABfACIAAAACAAEAAABfACMAAAACAAEAAABfACQAAAACAAEAAABfACUAAAACAAEAAABgAPL/AAACAAEAAABgAPP/AAACAAEAAABgAPT/AAACAAEAAABgAPX/AAACAAEAAABgAPb/AAACAAEAAABgAPf/AAACAAEAAABgAPj/AAACAAEAAABgAPn/AAACAAEAAABgAPr/AAACAAEAAABgAPv/AAACAAEAAABgAPz/AAACAAEAAABgAP3/AAACAAEAAABgAP7/AAACAAEAAABgAP//AAACAAEAAABgAAAAAAACAAEAAABgAAEAAAACAAEAAABgAAIAAAACAAEAAABgAAMAAAACAAEAAABgAAQAAAACAAEAAABgAAUAAAACAAEAAABgAAYAAAACAAEAAABgAAcAAAACAAEAAABgAAgAAAACAAEAAABgAAkAAAACAAEAAABgAAoAAAACAAEAAABgAAsAAAACAAEAAABgAAwAAAACAAEAAABgAA0AAAACAAEAAABgAA4AAAACAAEAAABgAA8AAAACAAEAAABgABAAAAACAAEAAABgABEAAAACAAEAAABgABIAAAACAAEAAABgABMAAAACAAEAAABgABQAAAACAAEAAABgABUAAAACAAEAAABgABYAAAACAAEAAABgABcAAAACAAEAAABgABgAAAACAAEAAABgABkAAAACAAEAAABgABoAAAACAAEAAABgABsAAAACAAEAAABgABwAAAACAAEAAABgAB0AAAACAAEAAABgAB4AAAACAAEAAABgAB8AAAACAAEAAABgACAAAAACAAEAAABgACEAAAACAAEAAABgACIAAAACAAEAAABgACMAAAACAAEAAABgACQAAAACAAEAAABgACUAAAACAAEAAABhAPL/AAACAAEAAABhAPP/AAACAAEAAABhAPT/AAACAAEAAABhAPX/AAACAAEAAABhAPb/AAACAAEAAABhAPf/AAACAAEAAABhAPj/AAACAAEAAABhAPn/AAACAAEAAABhAPr/AAACAAEAAABhAPv/AAACAAEAAABhAPz/AAACAAEAAABhAP3/AAACAAEAAABhAP7/AAACAAEAAABhAP//AAACAAEAAABhAAAAAAACAAEAAABhAAEAAAACAAEAAABhAAIAAAACAAEAAABhAAMAAAACAAEAAABhAAQAAAACAAEAAABhAAUAAAACAAEAAABhAAYAAAACAAEAAABhAAcAAAACAAEAAABhAAgAAAACAAEAAABhAAkAAAACAAEAAABhAAoAAAACAAEAAABhAAsAAAACAAEAAABhAAwAAAACAAEAAABhAA0AAAACAAEAAABhAA4AAAACAAEAAABhAA8AAAACAAEAAABhABAAAAACAAEAAABhABEAAAACAAEAAABhABIAAAACAAEAAABhABMAAAACAAEAAABhABQAAAACAAEAAABhABUAAAACAAEAAABhABYAAAACAAEAAABhABcAAAACAAEAAABhABgAAAACAAEAAABhABkAAAACAAEAAABhABoAAAACAAEAAABhABsAAAACAAEAAABhABwAAAACAAEAAABhAB0AAAACAAEAAABhAB4AAAACAAEAAABhAB8AAAACAAEAAABhACAAAAACAAEAAABhACEAAAACAAEAAABhACIAAAACAAEAAABhACMAAAACAAEAAABhACQAAAACAAEAAABhACUAAAACAAEAAABiAPL/AAACAAEAAABiAPP/AAACAAEAAABiAPT/AAACAAEAAABiAPX/AAACAAEAAABiAPb/AAACAAEAAABiAPf/AAACAAEAAABiAPj/AAACAAEAAABiAPn/AAACAAEAAABiAPr/AAACAAEAAABiAPv/AAACAAEAAABiAPz/AAACAAEAAABiAP3/AAACAAEAAABiAP7/AAACAAEAAABiAP//AAACAAEAAABiAAAAAAACAAEAAABiAAEAAAACAAEAAABiAAIAAAACAAEAAABiAAMAAAACAAEAAABiAAQAAAACAAEAAABiAAUAAAACAAEAAABiAAYAAAACAAEAAABiAAcAAAACAAEAAABiAAgAAAACAAEAAABiAAkAAAACAAEAAABiAAoAAAACAAEAAABiAAsAAAACAAEAAABiAAwAAAACAAEAAABiAA0AAAACAAEAAABiAA4AAAACAAEAAABiAA8AAAACAAEAAABiABAAAAACAAEAAABiABEAAAACAAEAAABiABIAAAACAAEAAABiABMAAAACAAEAAABiABQAAAACAAEAAABiABUAAAACAAEAAABiABYAAAACAAEAAABiABcAAAACAAEAAABiABgAAAACAAEAAABiABkAAAACAAEAAABiABoAAAACAAEAAABiABsAAAACAAEAAABiABwAAAACAAEAAABiAB0AAAACAAEAAABiAB4AAAACAAEAAABiAB8AAAACAAEAAABiACAAAAACAAEAAABiACEAAAACAAEAAABiACIAAAACAAEAAABiACMAAAACAAEAAABiACQAAAACAAEAAABiACUAAAACAAEAAABjAPL/AAACAAEAAABjAPP/AAACAAEAAABjAPT/AAACAAEAAABjAPX/AAACAAEAAABjAPb/AAACAAEAAABjAPf/AAACAAEAAABjAPj/AAACAAEAAABjAPn/AAACAAEAAABjAPr/AAACAAEAAABjAPv/AAACAAEAAABjAPz/AAACAAEAAABjAP3/AAACAAEAAABjAP7/AAACAAEAAABjAP//AAACAAEAAABjAAAAAAACAAEAAABjAAEAAAACAAEAAABjAAIAAAACAAEAAABjAAMAAAACAAEAAABjAAQAAAACAAEAAABjAAUAAAACAAEAAABjAAYAAAACAAEAAABjAAcAAAACAAEAAABjAAgAAAACAAEAAABjAAkAAAACAAEAAABjAAoAAAACAAEAAABjAAsAAAACAAEAAABjAAwAAAACAAEAAABjAA0AAAACAAEAAABjAA4AAAACAAEAAABjAA8AAAACAAEAAABjABAAAAACAAEAAABjABEAAAACAAEAAABjABIAAAACAAEAAABjABMAAAACAAEAAABjABQAAAACAAEAAABjABUAAAACAAEAAABjABYAAAACAAEAAABjABcAAAACAAEAAABjABgAAAACAAEAAABjABkAAAACAAEAAABjABoAAAACAAEAAABjABsAAAACAAEAAABjABwAAAACAAEAAABjAB0AAAACAAEAAABjAB4AAAACAAEAAABjAB8AAAACAAEAAABjACAAAAACAAEAAABjACEAAAACAAEAAABjACIAAAACAAEAAABjACMAAAACAAEAAABjACQAAAACAAEAAABjACUAAAACAAEAAABkAPL/AAACAAEAAABkAPP/AAACAAEAAABkAPT/AAACAAEAAABkAPX/AAACAAEAAABkAPb/AAACAAEAAABkAPf/AAACAAEAAABkAPj/AAACAAEAAABkAPn/AAACAAEAAABkAPr/AAACAAEAAABkAPv/AAACAAEAAABkAPz/AAACAAEAAABkAP3/AAACAAEAAABkAP7/AAACAAEAAABkAP//AAACAAEAAABkAAAAAAACAAEAAABkAAEAAAACAAEAAABkAAIAAAACAAEAAABkAAMAAAACAAEAAABkAAQAAAACAAEAAABkAAUAAAACAAEAAABkAAYAAAACAAEAAABkAAcAAAACAAEAAABkAAgAAAACAAEAAABkAAkAAAACAAEAAABkAAoAAAACAAEAAABkAAsAAAACAAEAAABkAAwAAAACAAEAAABkAA0AAAACAAEAAABkAA4AAAACAAEAAABkAA8AAAACAAEAAABkABAAAAACAAEAAABkABEAAAACAAEAAABkABIAAAACAAEAAABkABMAAAACAAEAAABkABQAAAACAAEAAABkABUAAAACAAEAAABkABYAAAACAAEAAABkABcAAAACAAEAAABkABgAAAACAAEAAABkABkAAAACAAEAAABkABoAAAACAAEAAABkABsAAAACAAEAAABkABwAAAACAAEAAABkAB0AAAACAAEAAABkAB4AAAACAAEAAABkAB8AAAACAAEAAABkACAAAAACAAEAAABkACEAAAACAAEAAABkACIAAAACAAEAAABkACMAAAACAAEAAABkACQAAAACAAEAAABkACUAAAACAAEAAABlAPL/AAACAAEAAABlAPP/AAACAAEAAABlAPT/AAACAAEAAABlAPX/AAACAAEAAABlAPb/AAACAAEAAABlAPf/AAACAAEAAABlAPj/AAACAAEAAABlAPn/AAACAAEAAABlAPr/AAACAAEAAABlAPv/AAACAAEAAABlAPz/AAACAAEAAABlAP3/AAACAAEAAABlAP7/AAACAAEAAABlAP//AAACAAEAAABlAAAAAAACAAEAAABlAAEAAAACAAEAAABlAAIAAAACAAEAAABlAAMAAAACAAEAAABlAAQAAAACAAEAAABlAAUAAAACAAEAAABlAAYAAAACAAEAAABlAAcAAAACAAEAAABlAAgAAAACAAEAAABlAAkAAAACAAEAAABlAAoAAAACAAEAAABlAAsAAAACAAEAAABlAAwAAAACAAEAAABlAA0AAAACAAEAAABlAA4AAAACAAEAAABlAA8AAAACAAEAAABlABAAAAACAAEAAABlABEAAAACAAEAAABlABIAAAACAAEAAABlABMAAAACAAEAAABlABQAAAACAAEAAABlABUAAAACAAEAAABlABYAAAACAAEAAABlABcAAAACAAEAAABlABgAAAACAAEAAABlABkAAAACAAEAAABlABoAAAACAAEAAABlABsAAAACAAEAAABlABwAAAACAAEAAABlAB0AAAACAAEAAABlAB4AAAACAAEAAABlAB8AAAACAAEAAABlACAAAAACAAEAAABlACEAAAACAAEAAABlACIAAAACAAEAAABlACMAAAACAAEAAABlACQAAAACAAEAAABlACUAAAACAAEAAABmAPL/AAACAAEAAABmAPP/AAACAAEAAABmAPT/AAACAAEAAABmAPX/AAACAAEAAABmAPb/AAACAAEAAABmAPf/AAACAAEAAABmAPj/AAACAAEAAABmAPn/AAACAAEAAABmAPr/AAACAAEAAABmAPv/AAACAAEAAABmAPz/AAACAAEAAABmAP3/AAACAAEAAABmAP7/AAACAAEAAABmAP//AAACAAEAAABmAAAAAAACAAEAAABmAAEAAAACAAEAAABmAAIAAAACAAEAAABmAAMAAAACAAEAAABmAAQAAAACAAEAAABmAAUAAAACAAEAAABmAAYAAAACAAEAAABmAAcAAAACAAEAAABmAAgAAAACAAEAAABmAAkAAAACAAEAAABmAAoAAAACAAEAAABmAAsAAAACAAEAAABmAAwAAAACAAEAAABmAA0AAAACAAEAAABmAA4AAAACAAEAAABmAA8AAAACAAEAAABmABAAAAACAAEAAABmABEAAAACAAEAAABmABIAAAACAAEAAABmABMAAAACAAEAAABmABQAAAACAAEAAABmABUAAAACAAEAAABmABYAAAACAAEAAABmABcAAAACAAEAAABmABgAAAACAAEAAABmABkAAAACAAEAAABmABoAAAACAAEAAABmABsAAAACAAEAAABmABwAAAACAAEAAABmAB0AAAACAAEAAABmAB4AAAACAAEAAABmAB8AAAACAAEAAABmACAAAAACAAEAAABmACEAAAACAAEAAABmACIAAAACAAEAAABmACMAAAACAAEAAABmACQAAAACAAEAAABmACUAAAACAAEAAADl//L/AAACAAEAAADl//P/AAACAAEAAADm//L/AAACAAEAAADm//P/AAACAAEAAADn//L/AAACAAEAAADn//P/AAACAAEAAADo//L/AAACAAEAAADo//P/AAACAAEAAADp//L/AAACAAEAAADp//P/AAACAAEAAADq//L/AAACAAEAAADq//P/AAACAAEAAADr//L/AAACAAEAAADr//P/AAACAAEAAADs//L/AAACAAEAAADs//P/AAACAAEAAADt//L/AAACAAEAAADt//P/AAACAAEAAADu//L/AAACAAEAAADu//P/AAACAAEAAADv//L/AAACAAEAAADv//P/AAACAAEAAADw//L/AAACAAEAAADw//P/AAACAAEAAADx//L/AAACAAEAAADx//P/AAACAAEAAADy//L/AAACAAEAAADy//P/AAACAAEAAADz//L/AAACAAEAAADz//P/AAACAAEAAAD0//L/AAACAAEAAAD0//P/AAACAAEAAAD1//L/AAACAAEAAAD1//P/AAACAAEAAAD2//L/AAACAAEAAAD2//P/AAACAAEAAAD3//L/AAACAAEAAAD3//P/AAACAAEAAAD4//L/AAACAAEAAAD4//P/AAACAAEAAAD5//L/AAACAAEAAAD5//P/AAACAAEAAAD6//L/AAACAAEAAAD6//P/AAACAAEAAAD7//L/AAACAAEAAAD7//P/AAACAAEAAAD8//L/AAACAAEAAAD8//P/AAACAAEAAAD9//L/AAACAAEAAAD9//P/AAACAAEAAAD+//L/AAACAAEAAAD+//P/AAACAAEAAAD///L/AAACAAEAAAD///P/AAACAAEAAAAAAPL/AAACAAEAAAAAAPP/AAACAAEAAAABAPL/AAACAAEAAAABAPP/AAACAAEAAAACAPL/AAACAAEAAAACAPP/AAACAAEAAAADAPL/AAACAAEAAAADAPP/AAACAAEAAAAEAPL/AAACAAEAAAAEAPP/AAACAAEAAAAFAPL/AAACAAEAAAAFAPP/AAACAAEAAAAGAPL/AAACAAEAAAAGAPP/AAACAAEAAAAHAPL/AAACAAEAAAAHAPP/AAACAAEAAAAIAPL/AAACAAEAAAAIAPP/AAACAAEAAAAIAPT/AAACAAEAAAAIAPX/AAACAAEAAAAIAPb/AAACAAEAAAAIAPf/AAACAAEAAAAIAPj/AAACAAEAAAAIAPn/AAACAAEAAAAIAPr/AAACAAEAAAAIAPv/AAACAAEAAAAIAPz/AAACAAEAAAAIAP3/AAACAAEAAAAIAP7/AAACAAEAAAAIAP//AAACAAEAAAAJAPL/AAACAAEAAAAJAPP/AAACAAEAAAAJAPT/AAACAAEAAAAJAPX/AAACAAEAAAAJAPb/AAACAAEAAAAJAPf/AAACAAEAAAAJAPj/AAACAAEAAAAJAPn/AAACAAEAAAAJAPr/AAACAAEAAAAJAPv/AAACAAEAAAAJAPz/AAACAAEAAAAJAP3/AAACAAEAAAAJAP7/AAACAAEAAAAJAP//AAACAAEAAAAKAPL/AAACAAEAAAAKAPP/AAACAAEAAAAKAPT/AAACAAEAAAAKAPX/AAACAAEAAAAKAPb/AAACAAEAAAAKAPf/AAACAAEAAAAKAPj/AAACAAEAAAAKAPn/AAACAAEAAAAKAPr/AAACAAEAAAAKAPv/AAACAAEAAAAKAPz/AAACAAEAAAAKAP3/AAACAAEAAAAKAP7/AAACAAEAAAAKAP//AAACAAEAAAALAPL/AAACAAEAAAALAPP/AAACAAEAAAALAPT/AAACAAEAAAALAPX/AAACAAEAAAALAPb/AAACAAEAAAALAPf/AAACAAEAAAALAPj/AAACAAEAAAALAPn/AAACAAEAAAALAPr/AAACAAEAAAALAPv/AAACAAEAAAALAPz/AAACAAEAAAALAP3/AAACAAEAAAALAP7/AAACAAEAAAALAP//AAACAAEAAAAMAPL/AAACAAEAAAAMAPP/AAACAAEAAAAMAPT/AAACAAEAAAAMAPX/AAACAAEAAAAMAPb/AAACAAEAAAAMAPf/AAACAAEAAAAMAPj/AAACAAEAAAAMAPn/AAACAAEAAAAMAPr/AAACAAEAAAAMAPv/AAACAAEAAAAMAPz/AAACAAEAAAAMAP3/AAACAAEAAAAMAP7/AAACAAEAAAAMAP//AAACAAEAAAANAPL/AAACAAEAAAANAPP/AAACAAEAAAANAPT/AAACAAEAAAANAPX/AAACAAEAAAANAPb/AAACAAEAAAANAPf/AAACAAEAAAANAPj/AAACAAEAAAANAPn/AAACAAEAAAANAPr/AAACAAEAAAANAPv/AAACAAEAAAANAPz/AAACAAEAAAANAP3/AAACAAEAAAANAP7/AAACAAEAAAANAP//AAACAAEAAAAOAPL/AAACAAEAAAAOAPP/AAACAAEAAAAOAPT/AAACAAEAAAAOAPX/AAACAAEAAAAOAPb/AAACAAEAAAAOAPf/AAACAAEAAAAOAPj/AAACAAEAAAAOAPn/AAACAAEAAAAOAPr/AAACAAEAAAAOAPv/AAACAAEAAAAOAPz/AAACAAEAAAAOAP3/AAACAAEAAAAOAP7/AAACAAEAAAAOAP//AAACAAEAAAAPAPL/AAACAAEAAAAPAPP/AAACAAEAAAAPAPT/AAACAAEAAAAPAPX/AAACAAEAAAAPAPb/AAACAAEAAAAPAPf/AAACAAEAAAAPAPj/AAACAAEAAAAPAPn/AAACAAEAAAAPAPr/AAACAAEAAAAPAPv/AAACAAEAAAAPAPz/AAACAAEAAAAPAP3/AAACAAEAAAAPAP7/AAACAAEAAAAPAP//AAACAAEAAAAQAPL/AAACAAEAAAAQAPP/AAACAAEAAAAQAPT/AAACAAEAAAAQAPX/AAACAAEAAAAQAPb/AAACAAEAAAAQAPf/AAACAAEAAAAQAPj/AAACAAEAAAAQAPn/AAACAAEAAAAQAPr/AAACAAEAAAAQAPv/AAACAAEAAAAQAPz/AAACAAEAAAAQAP3/AAACAAEAAAAQAP7/AAACAAEAAAAQAP//AAACAAEAAAARAPL/AAACAAEAAAARAPP/AAACAAEAAAARAPT/AAACAAEAAAARAPX/AAACAAEAAAARAPb/AAACAAEAAAARAPf/AAACAAEAAAARAPj/AAACAAEAAAARAPn/AAACAAEAAAARAPr/AAACAAEAAAARAPv/AAACAAEAAAARAPz/AAACAAEAAAARAP3/AAACAAEAAAARAP7/AAACAAEAAAARAP//AAACAAEAAAASAPL/AAACAAEAAAASAPP/AAACAAEAAAASAPT/AAACAAEAAAASAPX/AAACAAEAAAASAPb/AAACAAEAAAASAPf/AAACAAEAAAASAPj/AAACAAEAAAASAPn/AAACAAEAAAASAPr/AAACAAEAAAASAPv/AAACAAEAAAASAPz/AAACAAEAAAASAP3/AAACAAEAAAASAP7/AAACAAEAAAASAP//AAACAAEAAAATAPL/AAACAAEAAAATAPP/AAACAAEAAAATAPT/AAACAAEAAAATAPX/AAACAAEAAAATAPb/AAACAAEAAAATAPf/AAACAAEAAAATAPj/AAACAAEAAAATAPn/AAACAAEAAAATAPr/AAACAAEAAAATAPv/AAACAAEAAAATAPz/AAACAAEAAAATAP3/AAACAAEAAAATAP7/AAACAAEAAAATAP//AAACAAEAAAAUAPL/AAACAAEAAAAUAPP/AAACAAEAAAAUAPT/AAACAAEAAAAUAPX/AAACAAEAAAAUAPb/AAACAAEAAAAUAPf/AAACAAEAAAAUAPj/AAACAAEAAAAUAPn/AAACAAEAAAAUAPr/AAACAAEAAAAUAPv/AAACAAEAAAAUAPz/AAACAAEAAAAUAP3/AAACAAEAAAAUAP7/AAACAAEAAAAUAP//AAACAAEAAAAVAPL/AAACAAEAAAAVAPP/AAACAAEAAAAVAPT/AAACAAEAAAAVAPX/AAACAAEAAAAVAPb/AAACAAEAAAAVAPf/AAACAAEAAAAVAPj/AAACAAEAAAAVAPn/AAACAAEAAAAVAPr/AAACAAEAAAAVAPv/AAACAAEAAAAVAPz/AAACAAEAAAAVAP3/AAACAAEAAAAVAP7/AAACAAEAAAAVAP//AAACAAEAAAAWAPL/AAACAAEAAAAWAPP/AAACAAEAAAAWAPT/AAACAAEAAAAWAPX/AAACAAEAAAAWAPb/AAACAAEAAAAWAPf/AAACAAEAAAAWAPj/AAACAAEAAAAWAPn/AAACAAEAAAAWAPr/AAACAAEAAAAWAPv/AAACAAEAAAAWAPz/AAACAAEAAAAWAP3/AAACAAEAAAAWAP7/AAACAAEAAAAWAP//AAACAAEAAAAXAPL/AAACAAEAAAAXAPP/AAACAAEAAAAXAPT/AAACAAEAAAAXAPX/AAACAAEAAAAXAPb/AAACAAEAAAAXAPf/AAACAAEAAAAXAPj/AAACAAEAAAAXAPn/AAACAAEAAAAXAPr/AAACAAEAAAAXAPv/AAACAAEAAAAXAPz/AAACAAEAAAAXAP3/AAACAAEAAAAXAP7/AAACAAEAAAAXAP//AAACAAEAAAAYAPL/AAACAAEAAAAYAPP/AAACAAEAAAAYAPT/AAACAAEAAAAYAPX/AAACAAEAAAAYAPb/AAACAAEAAAAYAPf/AAACAAEAAAAYAPj/AAACAAEAAAAYAPn/AAACAAEAAAAYAPr/AAACAAEAAAAYAPv/AAACAAEAAAAYAPz/AAACAAEAAAAYAP3/AAACAAEAAAAYAP7/AAACAAEAAAAYAP//AAACAAEAAAAZAPL/AAACAAEAAAAZAPP/AAACAAEAAAAZAPT/AAACAAEAAAAZAPX/AAACAAEAAAAZAPb/AAACAAEAAAAZAPf/AAACAAEAAAAZAPj/AAACAAEAAAAZAPn/AAACAAEAAAAZAPr/AAACAAEAAAAZAPv/AAACAAEAAAAZAPz/AAACAAEAAAAZAP3/AAACAAEAAAAZAP7/AAACAAEAAAAZAP//AAACAAEAAAAaAPL/AAACAAEAAAAaAPP/AAACAAEAAAAaAPT/AAACAAEAAAAaAPX/AAACAAEAAAAaAPb/AAACAAEAAAAaAPf/AAACAAEAAAAaAPj/AAACAAEAAAAaAPn/AAACAAEAAAAaAPr/AAACAAEAAAAaAPv/AAACAAEAAAAaAPz/AAACAAEAAAAaAP3/AAACAAEAAAAaAP7/AAACAAEAAAAaAP//AAACAAEAAAAbAPL/AAACAAEAAAAbAPP/AAACAAEAAAAbAPT/AAACAAEAAAAbAPX/AAACAAEAAAAbAPb/AAACAAEAAAAbAPf/AAACAAEAAAAbAPj/AAACAAEAAAAbAPn/AAACAAEAAAAbAPr/AAACAAEAAAAbAPv/AAACAAEAAAAbAPz/AAACAAEAAAAbAP3/AAACAAEAAAAbAP7/AAACAAEAAAAbAP//AAACAAEAAAAcAPL/AAACAAEAAAAcAPP/AAACAAEAAAAcAPT/AAACAAEAAAAcAPX/AAACAAEAAAAcAPb/AAACAAEAAAAcAPf/AAACAAEAAAAcAPj/AAACAAEAAAAcAPn/AAACAAEAAAAcAPr/AAACAAEAAAAcAPv/AAACAAEAAAAcAPz/AAACAAEAAAAcAP3/AAACAAEAAAAcAP7/AAACAAEAAAAcAP//AAACAAEAAAAdAPL/AAACAAEAAAAdAPP/AAACAAEAAAAdAPT/AAACAAEAAAAdAPX/AAACAAEAAAAdAPb/AAACAAEAAAAdAPf/AAACAAEAAAAdAPj/AAACAAEAAAAdAPn/AAACAAEAAAAdAPr/AAACAAEAAAAdAPv/AAACAAEAAAAdAPz/AAACAAEAAAAdAP3/AAACAAEAAAAdAP7/AAACAAEAAAAdAP//AAACAAEAAAAeAPL/AAACAAEAAAAeAPP/AAACAAEAAAAeAPT/AAACAAEAAAAeAPX/AAACAAEAAAAeAPb/AAACAAEAAAAeAPf/AAACAAEAAAAeAPj/AAACAAEAAAAeAPn/AAACAAEAAAAeAPr/AAACAAEAAAAeAPv/AAACAAEAAAAeAPz/AAACAAEAAAAeAP3/AAACAAEAAAAeAP7/AAACAAEAAAAeAP//AAACAAEAAAAfAPL/AAACAAEAAAAfAPP/AAACAAEAAAAfAPT/AAACAAEAAAAfAPX/AAACAAEAAAAfAPb/AAACAAEAAAAfAPf/AAACAAEAAAAfAPj/AAACAAEAAAAfAPn/AAACAAEAAAAfAPr/AAACAAEAAAAfAPv/AAACAAEAAAAfAPz/AAACAAEAAAAfAP3/AAACAAEAAAAfAP7/AAACAAEAAAAfAP//AAACAAEAAAAgAPL/AAACAAEAAAAgAPP/AAACAAEAAAAgAPT/AAACAAEAAAAgAPX/AAACAAEAAAAgAPb/AAACAAEAAAAgAPf/AAACAAEAAAAgAPj/AAACAAEAAAAgAPn/AAACAAEAAAAgAPr/AAACAAEAAAAgAPv/AAACAAEAAAAgAPz/AAACAAEAAAAgAP3/AAACAAEAAAAgAP7/AAACAAEAAAAgAP//AAACAAEAAAAhAPL/AAACAAEAAAAhAPP/AAACAAEAAAAhAPT/AAACAAEAAAAhAPX/AAACAAEAAAAhAPb/AAACAAEAAAAhAPf/AAACAAEAAAAhAPj/AAACAAEAAAAhAPn/AAACAAEAAAAhAPr/AAACAAEAAAAhAPv/AAACAAEAAAAhAPz/AAACAAEAAAAhAP3/AAACAAEAAAAhAP7/AAACAAEAAAAhAP//AAACAAEAAAAiAPL/AAACAAEAAAAiAPP/AAACAAEAAAAiAPT/AAACAAEAAAAiAPX/AAACAAEAAAAiAPb/AAACAAEAAAAiAPf/AAACAAEAAAAiAPj/AAACAAEAAAAiAPn/AAACAAEAAAAiAPr/AAACAAEAAAAiAPv/AAACAAEAAAAiAPz/AAACAAEAAAAiAP3/AAACAAEAAAAiAP7/AAACAAEAAAAiAP//AAACAAEAAAAjAPL/AAACAAEAAAAjAPP/AAACAAEAAAAjAPT/AAACAAEAAAAjAPX/AAACAAEAAAAjAPb/AAACAAEAAAAjAPf/AAACAAEAAAAjAPj/AAACAAEAAAAjAPn/AAACAAEAAAAjAPr/AAACAAEAAAAjAPv/AAACAAEAAAAjAPz/AAACAAEAAAAjAP3/AAACAAEAAAAjAP7/AAACAAEAAAAjAP//AAACAAEAAAAkAPL/AAACAAEAAAAkAPP/AAACAAEAAAAkAPT/AAACAAEAAAAkAPX/AAACAAEAAAAkAPb/AAACAAEAAAAkAPf/AAACAAEAAAAkAPj/AAACAAEAAAAkAPn/AAACAAEAAAAkAPr/AAACAAEAAAAkAPv/AAACAAEAAAAkAPz/AAACAAEAAAAkAP3/AAACAAEAAAAkAP7/AAACAAEAAAAkAP//AAACAAEAAAAlAPL/AAACAAEAAAAlAPP/AAACAAEAAAAlAPT/AAACAAEAAAAlAPX/AAACAAEAAAAlAPb/AAACAAEAAAAlAPf/AAACAAEAAAAlAPj/AAACAAEAAAAlAPn/AAACAAEAAAAlAPr/AAACAAEAAAAlAPv/AAACAAEAAAAlAPz/AAACAAEAAAAlAP3/AAACAAEAAAAlAP7/AAACAAEAAAAlAP//AAACAAEAAAAmAPL/AAACAAEAAAAmAPP/AAACAAEAAAAmAPT/AAACAAEAAAAmAPX/AAACAAEAAAAmAPb/AAACAAEAAAAmAPf/AAACAAEAAAAmAPj/AAACAAEAAAAmAPn/AAACAAEAAAAmAPr/AAACAAEAAAAmAPv/AAACAAEAAAAmAPz/AAACAAEAAAAmAP3/AAACAAEAAAAmAP7/AAACAAEAAAAmAP//AAACAAEAAAAnAPL/AAACAAEAAAAnAPP/AAACAAEAAAAnAPT/AAACAAEAAAAnAPX/AAACAAEAAAAnAPb/AAACAAEAAAAnAPf/AAACAAEAAAAnAPj/AAACAAEAAAAnAPn/AAACAAEAAAAnAPr/AAACAAEAAAAnAPv/AAACAAEAAAAnAPz/AAACAAEAAAAnAP3/AAACAAEAAAAnAP7/AAACAAEAAAAnAP//AAACAAEAAAAoAPL/AAACAAEAAAAoAPP/AAACAAEAAAAoAPT/AAACAAEAAAAoAPX/AAACAAEAAAAoAPb/AAACAAEAAAAoAPf/AAACAAEAAAAoAPj/AAACAAEAAAAoAPn/AAACAAEAAAAoAPr/AAACAAEAAAAoAPv/AAACAAEAAAAoAPz/AAACAAEAAAAoAP3/AAACAAEAAAAoAP7/AAACAAEAAAAoAP//AAACAAEAAAApAPL/AAACAAEAAAApAPP/AAACAAEAAAApAPT/AAACAAEAAAApAPX/AAACAAEAAAApAPb/AAACAAEAAAApAPf/AAACAAEAAAApAPj/AAACAAEAAAApAPn/AAACAAEAAAApAPr/AAACAAEAAAApAPv/AAACAAEAAAApAPz/AAACAAEAAAApAP3/AAACAAEAAAApAP7/AAACAAEAAAApAP//AAACAAEAAAAqAPL/AAACAAEAAAAqAPP/AAACAAEAAAAqAPT/AAACAAEAAAAqAPX/AAACAAEAAAAqAPb/AAACAAEAAAAqAPf/AAACAAEAAAAqAPj/AAACAAEAAAAqAPn/AAACAAEAAAAqAPr/AAACAAEAAAAqAPv/AAACAAEAAAAqAPz/AAACAAEAAAAqAP3/AAACAAEAAAAqAP7/AAACAAEAAAAqAP//AAACAAEAAAArAPL/AAACAAEAAAArAPP/AAACAAEAAAArAPT/AAACAAEAAAArAPX/AAACAAEAAAArAPb/AAACAAEAAAArAPf/AAACAAEAAAArAPj/AAACAAEAAAArAPn/AAACAAEAAAArAPr/AAACAAEAAAArAPv/AAACAAEAAAArAPz/AAACAAEAAAArAP3/AAACAAEAAAArAP7/AAACAAEAAAArAP//AAACAAEAAAAsAPL/AAACAAEAAAAsAPP/AAACAAEAAAAsAPT/AAACAAEAAAAsAPX/AAACAAEAAAAsAPb/AAACAAEAAAAsAPf/AAACAAEAAAAsAPj/AAACAAEAAAAsAPn/AAACAAEAAAAsAPr/AAACAAEAAAAsAPv/AAACAAEAAAAsAPz/AAACAAEAAAAsAP3/AAACAAEAAAAsAP7/AAACAAEAAAAsAP//AAACAAEAAAAtAPL/AAACAAEAAAAtAPP/AAACAAEAAAAtAPT/AAACAAEAAAAtAPX/AAACAAEAAAAtAPb/AAACAAEAAAAtAPf/AAACAAEAAAAtAPj/AAACAAEAAAAtAPn/AAACAAEAAAAtAPr/AAACAAEAAAAtAPv/AAACAAEAAAAtAPz/AAACAAEAAAAtAP3/AAACAAEAAAAtAP7/AAACAAEAAAAtAP//AAACAAEAAAAuAPL/AAACAAEAAAAuAPP/AAACAAEAAAAuAPT/AAACAAEAAAAuAPX/AAACAAEAAAAuAPb/AAACAAEAAAAuAPf/AAACAAEAAAAuAPj/AAACAAEAAAAuAPn/AAACAAEAAAAuAPr/AAACAAEAAAAuAPv/AAACAAEAAAAuAPz/AAACAAEAAAAuAP3/AAACAAEAAAAuAP7/AAACAAEAAAAuAP//AAACAAEAAAAvAPL/AAACAAEAAAAvAPP/AAACAAEAAAAvAPT/AAACAAEAAAAvAPX/AAACAAEAAAAvAPb/AAACAAEAAAAvAPf/AAACAAEAAAAvAPj/AAACAAEAAAAvAPn/AAACAAEAAAAvAPr/AAACAAEAAAAvAPv/AAACAAEAAAAvAPz/AAACAAEAAAAvAP3/AAACAAEAAAAvAP7/AAACAAEAAAAvAP//AAACAAEAAAAwAPL/AAACAAEAAAAwAPP/AAACAAEAAAAwAPT/AAACAAEAAAAwAPX/AAACAAEAAAAwAPb/AAACAAEAAAAwAPf/AAACAAEAAAAwAPj/AAACAAEAAAAwAPn/AAACAAEAAAAwAPr/AAACAAEAAAAwAPv/AAACAAEAAAAwAPz/AAACAAEAAAAwAP3/AAACAAEAAAAwAP7/AAACAAEAAAAwAP//AAACAAEAAAAxAPL/AAACAAEAAAAxAPP/AAACAAEAAAAxAPT/AAACAAEAAAAxAPX/AAACAAEAAAAxAPb/AAACAAEAAAAxAPf/AAACAAEAAAAxAPj/AAACAAEAAAAxAPn/AAACAAEAAAAxAPr/AAACAAEAAAAxAPv/AAACAAEAAAAxAPz/AAACAAEAAAAxAP3/AAACAAEAAAAxAP7/AAACAAEAAAAxAP//AAACAAEAAAAyAPL/AAACAAEAAAAyAPP/AAACAAEAAAAyAPT/AAACAAEAAAAyAPX/AAACAAEAAAAyAPb/AAACAAEAAAAyAPf/AAACAAEAAAAyAPj/AAACAAEAAAAyAPn/AAACAAEAAAAyAPr/AAACAAEAAAAyAPv/AAACAAEAAAAyAPz/AAACAAEAAAAyAP3/AAACAAEAAAAyAP7/AAACAAEAAAAyAP//AAACAAEAAAAzAPL/AAACAAEAAAAzAPP/AAACAAEAAAAzAPT/AAACAAEAAAAzAPX/AAACAAEAAAAzAPb/AAACAAEAAAAzAPf/AAACAAEAAAAzAPj/AAACAAEAAAAzAPn/AAACAAEAAAAzAPr/AAACAAEAAAAzAPv/AAACAAEAAAAzAPz/AAACAAEAAAAzAP3/AAACAAEAAAAzAP7/AAACAAEAAAAzAP//AAACAAEAAAA0APL/AAACAAEAAAA0APP/AAACAAEAAAA0APT/AAACAAEAAAA0APX/AAACAAEAAAA0APb/AAACAAEAAAA0APf/AAACAAEAAAA0APj/AAACAAEAAAA0APn/AAACAAEAAAA0APr/AAACAAEAAAA0APv/AAACAAEAAAA0APz/AAACAAEAAAA0AP3/AAACAAEAAAA0AP7/AAACAAEAAAA0AP//AAACAAEAAAA1APL/AAACAAEAAAA1APP/AAACAAEAAAA1APT/AAACAAEAAAA1APX/AAACAAEAAAA1APb/AAACAAEAAAA1APf/AAACAAEAAAA1APj/AAACAAEAAAA1APn/AAACAAEAAAA1APr/AAACAAEAAAA1APv/AAACAAEAAAA1APz/AAACAAEAAAA1AP3/AAACAAEAAAA1AP7/AAACAAEAAAA1AP//AAACAAEAAAA2APL/AAACAAEAAAA2APP/AAACAAEAAAA2APT/AAACAAEAAAA2APX/AAACAAEAAAA2APb/AAACAAEAAAA2APf/AAACAAEAAAA2APj/AAACAAEAAAA2APn/AAACAAEAAAA2APr/AAACAAEAAAA2APv/AAACAAEAAAA2APz/AAACAAEAAAA2AP3/AAACAAEAAAA2AP7/AAACAAEAAAA2AP//AAACAAEAAAA3APL/AAACAAEAAAA3APP/AAACAAEAAAA3APT/AAACAAEAAAA3APX/AAACAAEAAAA3APb/AAACAAEAAAA3APf/AAACAAEAAAA3APj/AAACAAEAAAA3APn/AAACAAEAAAA3APr/AAACAAEAAAA3APv/AAACAAEAAAA3APz/AAACAAEAAAA3AP3/AAACAAEAAAA3AP7/AAACAAEAAAA3AP//AAACAAEAAAA4APL/AAACAAEAAAA4APP/AAACAAEAAAA4APT/AAACAAEAAAA4APX/AAACAAEAAAA4APb/AAACAAEAAAA4APf/AAACAAEAAAA4APj/AAACAAEAAAA4APn/AAACAAEAAAA4APr/AAACAAEAAAA4APv/AAACAAEAAAA4APz/AAACAAEAAAA4AP3/AAACAAEAAAA4AP7/AAACAAEAAAA4AP//AAACAAEAAAA5APL/AAACAAEAAAA5APP/AAACAAEAAAA5APT/AAACAAEAAAA5APX/AAACAAEAAAA5APb/AAACAAEAAAA5APf/AAACAAEAAAA5APj/AAACAAEAAAA5APn/AAACAAEAAAA5APr/AAACAAEAAAA5APv/AAACAAEAAAA5APz/AAACAAEAAAA5AP3/AAACAAEAAAA5AP7/AAACAAEAAAA5AP//AAACAAEAAAA6APL/AAACAAEAAAA6APP/AAACAAEAAAA6APT/AAACAAEAAAA6APX/AAACAAEAAAA6APb/AAACAAEAAAA6APf/AAACAAEAAAA6APj/AAACAAEAAAA6APn/AAACAAEAAAA6APr/AAACAAEAAAA6APv/AAACAAEAAAA6APz/AAACAAEAAAA6AP3/AAACAAEAAAA6AP7/AAACAAEAAAA6AP//AAACAAEAAAA7APL/AAACAAEAAAA7APP/AAACAAEAAAA7APT/AAACAAEAAAA7APX/AAACAAEAAAA7APb/AAACAAEAAAA7APf/AAACAAEAAAA7APj/AAACAAEAAAA7APn/AAACAAEAAAA7APr/AAACAAEAAAA7APv/AAACAAEAAAA7APz/AAACAAEAAAA7AP3/AAACAAEAAAA7AP7/AAACAAEAAAA7AP//AAACAAEAAAA8APL/AAACAAEAAAA8APP/AAACAAEAAAA8APT/AAACAAEAAAA8APX/AAACAAEAAAA8APb/AAACAAEAAAA8APf/AAACAAEAAAA8APj/AAACAAEAAAA8APn/AAACAAEAAAA8APr/AAACAAEAAAA8APv/AAACAAEAAAA8APz/AAACAAEAAAA8AP3/AAACAAEAAAA8AP7/AAACAAEAAAA8AP//AAACAAEAAAA9APL/AAACAAEAAAA9APP/AAACAAEAAAA9APT/AAACAAEAAAA9APX/AAACAAEAAAA9APb/AAACAAEAAAA9APf/AAACAAEAAAA9APj/AAACAAEAAAA9APn/AAACAAEAAAA9APr/AAACAAEAAAA9APv/AAACAAEAAAA9APz/AAACAAEAAAA9AP3/AAACAAEAAAA9AP7/AAACAAEAAAA9AP//AAACAAEAAAA+APL/AAACAAEAAAA+APP/AAACAAEAAAA+APT/AAACAAEAAAA+APX/AAACAAEAAAA+APb/AAACAAEAAAA+APf/AAACAAEAAAA+APj/AAACAAEAAAA+APn/AAACAAEAAAA+APr/AAACAAEAAAA+APv/AAACAAEAAAA+APz/AAACAAEAAAA+AP3/AAACAAEAAAA+AP7/AAACAAEAAAA+AP//AAACAAEAAAA/APL/AAACAAEAAAA/APP/AAACAAEAAAA/APT/AAACAAEAAAA/APX/AAACAAEAAAA/APb/AAACAAEAAAA/APf/AAACAAEAAAA/APj/AAACAAEAAAA/APn/AAACAAEAAAA/APr/AAACAAEAAAA/APv/AAACAAEAAAA/APz/AAACAAEAAAA/AP3/AAACAAEAAAA/AP7/AAACAAEAAAA/AP//AAACAAEAAABAAPL/AAACAAEAAABAAPP/AAACAAEAAABAAPT/AAACAAEAAABAAPX/AAACAAEAAABAAPb/AAACAAEAAABAAPf/AAACAAEAAABAAPj/AAACAAEAAABAAPn/AAACAAEAAABAAPr/AAACAAEAAABAAPv/AAACAAEAAABAAPz/AAACAAEAAABAAP3/AAACAAEAAABAAP7/AAACAAEAAABAAP//AAACAAEAAABBAPL/AAACAAEAAABBAPP/AAACAAEAAABBAPT/AAACAAEAAABBAPX/AAACAAEAAABBAPb/AAACAAEAAABBAPf/AAACAAEAAABBAPj/AAACAAEAAABBAPn/AAACAAEAAABBAPr/AAACAAEAAABBAPv/AAACAAEAAABBAPz/AAACAAEAAABBAP3/AAACAAEAAABBAP7/AAACAAEAAABBAP//AAACAAEAAABCAPL/AAACAAEAAABCAPP/AAACAAEAAABCAPT/AAACAAEAAABCAPX/AAACAAEAAABCAPb/AAACAAEAAABCAPf/AAACAAEAAABCAPj/AAACAAEAAABCAPn/AAACAAEAAABCAPr/AAACAAEAAABCAPv/AAACAAEAAABCAPz/AAACAAEAAABCAP3/AAACAAEAAABCAP7/AAACAAEAAABCAP//AAACAAEAAABDAPL/AAACAAEAAABDAPP/AAACAAEAAABDAPT/AAACAAEAAABDAPX/AAACAAEAAABDAPb/AAACAAEAAABDAPf/AAACAAEAAABDAPj/AAACAAEAAABDAPn/AAACAAEAAABDAPr/AAACAAEAAABDAPv/AAACAAEAAABDAPz/AAACAAEAAABDAP3/AAACAAEAAABDAP7/AAACAAEAAABDAP//AAACAAEAAABEAPL/AAACAAEAAABEAPP/AAACAAEAAABEAPT/AAACAAEAAABEAPX/AAACAAEAAABEAPb/AAACAAEAAABEAPf/AAACAAEAAABEAPj/AAACAAEAAABEAPn/AAACAAEAAABEAPr/AAACAAEAAABEAPv/AAACAAEAAABEAPz/AAACAAEAAABEAP3/AAACAAEAAABEAP7/AAACAAEAAABEAP//AAACAAEAAABFAPL/AAACAAEAAABFAPP/AAACAAEAAABFAPT/AAACAAEAAABFAPX/AAACAAEAAABFAPb/AAACAAEAAABFAPf/AAACAAEAAABFAPj/AAACAAEAAABFAPn/AAACAAEAAABFAPr/AAACAAEAAABFAPv/AAACAAEAAABFAPz/AAACAAEAAABFAP3/AAACAAEAAABFAP7/AAACAAEAAABFAP//AAACAAEAAAA=") +tile_set = SubResource("TileSet_5bd38") + +[node name="Player" parent="." instance=ExtResource("2_07rl6")] +position = Vector2(584, 442) + +[node name="DoorSceneManager" parent="." node_paths=PackedStringArray("player") instance=ExtResource("3_3eu8f")] +position = Vector2(584, 456) +scale = Vector2(3.44061, 0.770942) +player = NodePath("../Player") +current_scene = 1 +push_direction = 2 + +[node name="Camera2D" type="Camera2D" parent="."] +z_index = 4096 +position = Vector2(582, 328) +zoom = Vector2(2, 2) diff --git a/scenes/interfaces/pause_menu.tscn b/scenes/interfaces/pause_menu.tscn new file mode 100644 index 0000000..d7b0b57 --- /dev/null +++ b/scenes/interfaces/pause_menu.tscn @@ -0,0 +1,12 @@ +[gd_scene load_steps=2 format=3 uid="uid://d11oo2pxcah1g"] + +[ext_resource type="Script" path="res://scripts/pause_menu.gd" id="1_aq3as"] + +[node name="PauseMenu" type="Control"] +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +script = ExtResource("1_aq3as") diff --git a/scenes/interfaces/save_menu.tscn b/scenes/interfaces/save_menu.tscn new file mode 100644 index 0000000..d16b259 --- /dev/null +++ b/scenes/interfaces/save_menu.tscn @@ -0,0 +1,9 @@ +[gd_scene format=3 uid="uid://bsiy7irf1p5e1"] + +[node name="SaveMenu" 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/scenes/main_level.tscn b/scenes/main_level.tscn new file mode 100644 index 0000000..469592f --- /dev/null +++ b/scenes/main_level.tscn @@ -0,0 +1,1660 @@ +[gd_scene load_steps=7 format=4 uid="uid://ds1fjw3marbia"] + +[ext_resource type="PackedScene" uid="uid://k76535tjepm3" path="res://scenes/elements/player.tscn" id="1_6iuf6"] +[ext_resource type="Script" path="res://scripts/main_level.gd" id="1_fdviv"] +[ext_resource type="Texture2D" uid="uid://bj3fteudhyal6" path="res://assets/textures/Overworld.png" id="1_pt2os"] +[ext_resource type="PackedScene" uid="uid://da1uex028xkv1" path="res://scenes/elements/door_scene_manager.tscn" id="1_qqjfh"] + +[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_n0o3p"] +texture = ExtResource("1_pt2os") +0:0/0 = 0 +0:0/0/terrain_set = 0 +0:0/0/terrain = 0 +0:0/0/terrains_peering_bit/right_side = 0 +0:0/0/terrains_peering_bit/bottom_right_corner = 0 +0:0/0/terrains_peering_bit/bottom_side = 0 +0:0/0/terrains_peering_bit/bottom_left_corner = 0 +0:0/0/terrains_peering_bit/left_side = 0 +0:0/0/terrains_peering_bit/top_left_corner = 0 +0:0/0/terrains_peering_bit/top_side = 0 +0:0/0/terrains_peering_bit/top_right_corner = 0 +1:0/0 = 0 +2:0/0 = 0 +3:0/0 = 0 +4:0/0 = 0 +5:0/0 = 0 +25:0/0 = 0 +26:0/0 = 0 +27:0/0 = 0 +28:0/0 = 0 +29:0/0 = 0 +30:0/0 = 0 +31:0/0 = 0 +32:0/0 = 0 +33:0/0 = 0 +34:0/0 = 0 +35:0/0 = 0 +36:0/0 = 0 +37:0/0 = 0 +25:1/0 = 0 +26:1/0 = 0 +27:1/0 = 0 +28:1/0 = 0 +29:1/0 = 0 +30:1/0 = 0 +31:1/0 = 0 +32:1/0 = 0 +33:1/0 = 0 +34:1/0 = 0 +35:1/0 = 0 +36:1/0 = 0 +37:1/0 = 0 +38:1/0 = 0 +25:2/0 = 0 +26:2/0 = 0 +27:2/0 = 0 +28:2/0 = 0 +29:2/0 = 0 +30:2/0 = 0 +31:2/0 = 0 +32:2/0 = 0 +33:2/0 = 0 +34:2/0 = 0 +35:2/0 = 0 +36:2/0 = 0 +37:2/0 = 0 +38:2/0 = 0 +3:3/0 = 0 +4:3/0 = 0 +5:3/0 = 0 +25:3/0 = 0 +26:3/0 = 0 +27:3/0 = 0 +28:3/0 = 0 +29:3/0 = 0 +30:3/0 = 0 +31:3/0 = 0 +32:3/0 = 0 +33:3/0 = 0 +34:3/0 = 0 +35:3/0 = 0 +36:3/0 = 0 +37:3/0 = 0 +38:3/0 = 0 +3:4/0 = 0 +4:4/0 = 0 +5:4/0 = 0 +21:4/0 = 0 +25:4/0 = 0 +26:4/0 = 0 +27:4/0 = 0 +28:4/0 = 0 +29:4/0 = 0 +30:4/0 = 0 +31:4/0 = 0 +32:4/0 = 0 +33:4/0 = 0 +34:4/0 = 0 +35:4/0 = 0 +36:4/0 = 0 +37:4/0 = 0 +38:4/0 = 0 +6:5/0 = 0 +7:5/0 = 0 +8:5/0 = 0 +9:5/0 = 0 +10:5/0 = 0 +21:5/0 = 0 +25:5/0 = 0 +26:5/0 = 0 +27:5/0 = 0 +28:5/0 = 0 +29:5/0 = 0 +30:5/0 = 0 +31:5/0 = 0 +32:5/0 = 0 +33:5/0 = 0 +34:5/0 = 0 +35:5/0 = 0 +36:5/0 = 0 +37:5/0 = 0 +38:5/0 = 0 +39:5/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 +15:6/0 = 0 +15:6/0/terrain_set = 0 +15:6/0/terrain = 2 +15:6/0/terrains_peering_bit/right_side = 2 +15:6/0/terrains_peering_bit/bottom_right_corner = 1 +15:6/0/terrains_peering_bit/bottom_side = 2 +15:6/0/terrains_peering_bit/bottom_left_corner = 2 +15:6/0/terrains_peering_bit/left_side = 2 +15:6/0/terrains_peering_bit/top_left_corner = 2 +15:6/0/terrains_peering_bit/top_side = 2 +15:6/0/terrains_peering_bit/top_right_corner = 2 +16:6/0 = 0 +16:6/0/terrain_set = 0 +16:6/0/terrain = 2 +16:6/0/terrains_peering_bit/right_side = 2 +16:6/0/terrains_peering_bit/bottom_right_corner = 1 +16:6/0/terrains_peering_bit/bottom_side = 1 +16:6/0/terrains_peering_bit/bottom_left_corner = 1 +16:6/0/terrains_peering_bit/left_side = 2 +16:6/0/terrains_peering_bit/top_left_corner = 2 +16:6/0/terrains_peering_bit/top_side = 2 +16:6/0/terrains_peering_bit/top_right_corner = 2 +17:6/0 = 0 +17:6/0/terrain_set = 0 +17:6/0/terrain = 2 +17:6/0/terrains_peering_bit/right_side = 2 +17:6/0/terrains_peering_bit/bottom_right_corner = 2 +17:6/0/terrains_peering_bit/bottom_side = 2 +17:6/0/terrains_peering_bit/bottom_left_corner = 1 +17:6/0/terrains_peering_bit/left_side = 2 +17:6/0/terrains_peering_bit/top_left_corner = 2 +17:6/0/terrains_peering_bit/top_side = 2 +17:6/0/terrains_peering_bit/top_right_corner = 2 +18:6/0 = 0 +18:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +19:6/0 = 0 +19:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +20:6/0 = 0 +20:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +21:6/0 = 0 +22:6/0 = 0 +23:6/0 = 0 +24:6/0 = 0 +25:6/0 = 0 +26:6/0 = 0 +27:6/0 = 0 +28:6/0 = 0 +29:6/0 = 0 +30:6/0 = 0 +31:6/0 = 0 +32:6/0 = 0 +33:6/0 = 0 +34:6/0 = 0 +35:6/0 = 0 +36:6/0 = 0 +37:6/0 = 0 +38:6/0 = 0 +39:6/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 +12:7/0 = 0 +15:7/0 = 0 +15:7/0/terrain_set = 0 +15:7/0/terrain = 2 +15:7/0/terrains_peering_bit/right_side = 1 +15:7/0/terrains_peering_bit/bottom_right_corner = 1 +15:7/0/terrains_peering_bit/bottom_side = 2 +15:7/0/terrains_peering_bit/bottom_left_corner = 2 +15:7/0/terrains_peering_bit/left_side = 2 +15:7/0/terrains_peering_bit/top_left_corner = 2 +15:7/0/terrains_peering_bit/top_side = 2 +15:7/0/terrains_peering_bit/top_right_corner = 1 +17:7/0 = 0 +17:7/0/terrain_set = 0 +17:7/0/terrain = 2 +17:7/0/terrains_peering_bit/right_side = 2 +17:7/0/terrains_peering_bit/bottom_right_corner = 2 +17:7/0/terrains_peering_bit/bottom_side = 2 +17:7/0/terrains_peering_bit/bottom_left_corner = 1 +17:7/0/terrains_peering_bit/left_side = 1 +17:7/0/terrains_peering_bit/top_left_corner = 1 +17:7/0/terrains_peering_bit/top_side = 2 +17:7/0/terrains_peering_bit/top_right_corner = 2 +18:7/0 = 0 +18:7/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +19:7/0 = 0 +19:7/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +20:7/0 = 0 +20:7/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +26:7/0 = 0 +27:7/0 = 0 +28:7/0 = 0 +29:7/0 = 0 +30:7/0 = 0 +35:7/0 = 0 +36:7/0 = 0 +37:7/0 = 0 +38:7/0 = 0 +39:7/0 = 0 +0:8/0 = 0 +1: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 +12:8/0 = 0 +13:8/0 = 0 +14:8/0 = 0 +15:8/0 = 0 +15:8/0/terrain_set = 0 +15:8/0/terrain = 2 +15:8/0/terrains_peering_bit/right_side = 2 +15:8/0/terrains_peering_bit/bottom_right_corner = 2 +15:8/0/terrains_peering_bit/bottom_side = 2 +15:8/0/terrains_peering_bit/bottom_left_corner = 2 +15:8/0/terrains_peering_bit/left_side = 2 +15:8/0/terrains_peering_bit/top_left_corner = 2 +15:8/0/terrains_peering_bit/top_side = 2 +15:8/0/terrains_peering_bit/top_right_corner = 1 +16:8/0 = 0 +16:8/0/terrain_set = 0 +16:8/0/terrain = 2 +16:8/0/terrains_peering_bit/right_side = 2 +16:8/0/terrains_peering_bit/bottom_right_corner = 2 +16:8/0/terrains_peering_bit/bottom_side = 2 +16:8/0/terrains_peering_bit/bottom_left_corner = 2 +16:8/0/terrains_peering_bit/left_side = 2 +16:8/0/terrains_peering_bit/top_left_corner = 1 +16:8/0/terrains_peering_bit/top_side = 1 +16:8/0/terrains_peering_bit/top_right_corner = 1 +17:8/0 = 0 +17:8/0/terrain_set = 0 +17:8/0/terrain = 2 +17:8/0/terrains_peering_bit/right_side = 2 +17:8/0/terrains_peering_bit/bottom_right_corner = 2 +17:8/0/terrains_peering_bit/bottom_side = 2 +17:8/0/terrains_peering_bit/bottom_left_corner = 2 +17:8/0/terrains_peering_bit/left_side = 2 +17:8/0/terrains_peering_bit/top_left_corner = 1 +17:8/0/terrains_peering_bit/top_side = 2 +17:8/0/terrains_peering_bit/top_right_corner = 2 +18:8/0 = 0 +18:8/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +19:8/0 = 0 +19:8/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +20:8/0 = 0 +20:8/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +26:8/0 = 0 +26:8/0/z_index = 1 +28:8/0 = 0 +28:8/0/z_index = 1 +29:8/0 = 0 +29:8/0/z_index = 1 +31:8/0 = 0 +32:8/0 = 0 +33:8/0 = 0 +35:8/0 = 0 +36:8/0 = 0 +37:8/0 = 0 +38:8/0 = 0 +39:8/0 = 0 +0:9/0 = 0 +0:9/0/terrain_set = 0 +0:9/0/terrain = 0 +0:9/0/terrains_peering_bit/right_side = 0 +0:9/0/terrains_peering_bit/bottom_side = 0 +0:9/0/terrains_peering_bit/bottom_left_corner = 0 +0:9/0/terrains_peering_bit/left_side = 0 +0:9/0/terrains_peering_bit/top_left_corner = 0 +0:9/0/terrains_peering_bit/top_side = 0 +0:9/0/terrains_peering_bit/top_right_corner = 0 +1:9/0 = 0 +1:9/0/terrain_set = 0 +1:9/0/terrain = 0 +1:9/0/terrains_peering_bit/right_side = 0 +1:9/0/terrains_peering_bit/bottom_right_corner = 0 +1:9/0/terrains_peering_bit/bottom_side = 0 +1:9/0/terrains_peering_bit/left_side = 0 +1:9/0/terrains_peering_bit/top_left_corner = 0 +1:9/0/terrains_peering_bit/top_side = 0 +1:9/0/terrains_peering_bit/top_right_corner = 0 +2:9/0 = 0 +2:9/0/terrain_set = 0 +2:9/0/terrain = 0 +2:9/0/terrains_peering_bit/right_side = 0 +2:9/0/terrains_peering_bit/bottom_right_corner = 0 +2:9/0/terrains_peering_bit/bottom_side = 0 +2:9/0/terrains_peering_bit/bottom_left_corner = 1 +2:9/0/terrains_peering_bit/left_side = 1 +2:9/0/terrains_peering_bit/top_left_corner = 1 +2:9/0/terrains_peering_bit/top_side = 1 +2:9/0/terrains_peering_bit/top_right_corner = 1 +3:9/0 = 0 +3:9/0/terrain_set = 0 +3:9/0/terrain = 0 +3:9/0/terrains_peering_bit/right_side = 1 +3:9/0/terrains_peering_bit/bottom_right_corner = 1 +3:9/0/terrains_peering_bit/bottom_side = 0 +3:9/0/terrains_peering_bit/bottom_left_corner = 0 +3:9/0/terrains_peering_bit/left_side = 0 +3:9/0/terrains_peering_bit/top_left_corner = 1 +3:9/0/terrains_peering_bit/top_side = 1 +3:9/0/terrains_peering_bit/top_right_corner = 1 +4:9/0 = 0 +5:9/0 = 0 +5:9/0/terrain_set = 0 +5:9/0/terrain = 0 +5:9/0/terrains_peering_bit/right_side = 0 +5:9/0/terrains_peering_bit/bottom_right_corner = 0 +5:9/0/terrains_peering_bit/bottom_side = 0 +5:9/0/terrains_peering_bit/bottom_left_corner = 0 +5:9/0/terrains_peering_bit/left_side = 0 +5:9/0/terrains_peering_bit/top_left_corner = 0 +5:9/0/terrains_peering_bit/top_side = 0 +5:9/0/terrains_peering_bit/top_right_corner = 0 +6:9/0 = 0 +7:9/0 = 0 +7:9/0/terrain_set = 0 +7:9/0/terrain = 0 +7:9/0/terrains_peering_bit/right_side = 0 +7:9/0/terrains_peering_bit/bottom_right_corner = 0 +7:9/0/terrains_peering_bit/bottom_side = 0 +7:9/0/terrains_peering_bit/bottom_left_corner = 0 +7:9/0/terrains_peering_bit/left_side = 0 +7:9/0/terrains_peering_bit/top_left_corner = 0 +7:9/0/terrains_peering_bit/top_side = 0 +7:9/0/terrains_peering_bit/top_right_corner = 0 +8:9/0 = 0 +8:9/0/terrain_set = 0 +8:9/0/terrain = 0 +8:9/0/terrains_peering_bit/right_side = 0 +8:9/0/terrains_peering_bit/bottom_right_corner = 0 +8:9/0/terrains_peering_bit/bottom_side = 0 +8:9/0/terrains_peering_bit/bottom_left_corner = 0 +8:9/0/terrains_peering_bit/left_side = 0 +8:9/0/terrains_peering_bit/top_left_corner = 0 +8:9/0/terrains_peering_bit/top_side = 0 +8:9/0/terrains_peering_bit/top_right_corner = 0 +10:9/0 = 0 +11:9/0 = 0 +12:9/0 = 0 +13:9/0 = 0 +14:9/0 = 0 +15:9/0 = 0 +15:9/0/terrain_set = 0 +15:9/0/terrain = 2 +15:9/0/terrains_peering_bit/right_side = 2 +15:9/0/terrains_peering_bit/bottom_right_corner = 2 +15:9/0/terrains_peering_bit/bottom_side = 2 +15:9/0/terrains_peering_bit/bottom_left_corner = 1 +15:9/0/terrains_peering_bit/left_side = 1 +15:9/0/terrains_peering_bit/top_left_corner = 1 +15:9/0/terrains_peering_bit/top_side = 1 +15:9/0/terrains_peering_bit/top_right_corner = 1 +16:9/0 = 0 +16:9/0/terrain_set = 0 +16:9/0/terrain = 2 +16:9/0/terrains_peering_bit/right_side = 1 +16:9/0/terrains_peering_bit/bottom_right_corner = 1 +16:9/0/terrains_peering_bit/bottom_side = 2 +16:9/0/terrains_peering_bit/bottom_left_corner = 2 +16:9/0/terrains_peering_bit/left_side = 2 +16:9/0/terrains_peering_bit/top_left_corner = 1 +16:9/0/terrains_peering_bit/top_side = 1 +16:9/0/terrains_peering_bit/top_right_corner = 1 +17:9/0 = 0 +18:9/0 = 0 +19:9/0 = 0 +32:9/0 = 0 +34:9/0 = 0 +35:9/0 = 0 +36:9/0 = 0 +37:9/0 = 0 +0:10/0 = 0 +0:10/0/terrain_set = 0 +0:10/0/terrain = 0 +0:10/0/terrains_peering_bit/right_side = 0 +0:10/0/terrains_peering_bit/bottom_right_corner = 0 +0:10/0/terrains_peering_bit/bottom_side = 0 +0:10/0/terrains_peering_bit/bottom_left_corner = 0 +0:10/0/terrains_peering_bit/left_side = 0 +0:10/0/terrains_peering_bit/top_left_corner = 0 +0:10/0/terrains_peering_bit/top_side = 0 +1:10/0 = 0 +1:10/0/terrain_set = 0 +1:10/0/terrain = 0 +1:10/0/terrains_peering_bit/right_side = 0 +1:10/0/terrains_peering_bit/bottom_right_corner = 0 +1:10/0/terrains_peering_bit/bottom_side = 0 +1:10/0/terrains_peering_bit/bottom_left_corner = 0 +1:10/0/terrains_peering_bit/left_side = 0 +1:10/0/terrains_peering_bit/top_side = 0 +1:10/0/terrains_peering_bit/top_right_corner = 0 +2:10/0 = 0 +2:10/0/terrain_set = 0 +2:10/0/terrain = 0 +2:10/0/terrains_peering_bit/right_side = 0 +2:10/0/terrains_peering_bit/bottom_right_corner = 1 +2:10/0/terrains_peering_bit/bottom_side = 1 +2:10/0/terrains_peering_bit/bottom_left_corner = 1 +2:10/0/terrains_peering_bit/left_side = 1 +2:10/0/terrains_peering_bit/top_left_corner = 1 +2:10/0/terrains_peering_bit/top_side = 0 +2:10/0/terrains_peering_bit/top_right_corner = 0 +3:10/0 = 0 +3:10/0/terrain_set = 0 +3:10/0/terrain = 0 +3:10/0/terrains_peering_bit/right_side = 1 +3:10/0/terrains_peering_bit/bottom_right_corner = 1 +3:10/0/terrains_peering_bit/bottom_side = 1 +3:10/0/terrains_peering_bit/bottom_left_corner = 1 +3:10/0/terrains_peering_bit/left_side = 0 +3:10/0/terrains_peering_bit/top_left_corner = 0 +3:10/0/terrains_peering_bit/top_side = 0 +3:10/0/terrains_peering_bit/top_right_corner = 1 +4:10/0 = 0 +5:10/0 = 0 +5:10/0/terrain_set = 0 +5:10/0/terrain = 0 +5:10/0/terrains_peering_bit/right_side = 0 +5:10/0/terrains_peering_bit/bottom_right_corner = 0 +5:10/0/terrains_peering_bit/bottom_side = 0 +5:10/0/terrains_peering_bit/bottom_left_corner = 0 +5:10/0/terrains_peering_bit/left_side = 0 +5:10/0/terrains_peering_bit/top_left_corner = 0 +5:10/0/terrains_peering_bit/top_side = 0 +5:10/0/terrains_peering_bit/top_right_corner = 0 +6:10/0 = 0 +7:10/0 = 0 +7:10/0/terrain_set = 0 +7:10/0/terrain = 0 +7:10/0/terrains_peering_bit/right_side = 0 +7:10/0/terrains_peering_bit/bottom_right_corner = 0 +7:10/0/terrains_peering_bit/bottom_side = 0 +7:10/0/terrains_peering_bit/bottom_left_corner = 0 +7:10/0/terrains_peering_bit/left_side = 0 +7:10/0/terrains_peering_bit/top_left_corner = 0 +7:10/0/terrains_peering_bit/top_side = 0 +7:10/0/terrains_peering_bit/top_right_corner = 0 +8:10/0 = 0 +8:10/0/terrain_set = 0 +8:10/0/terrain = 0 +8:10/0/terrains_peering_bit/right_side = 0 +8:10/0/terrains_peering_bit/bottom_right_corner = 0 +8:10/0/terrains_peering_bit/bottom_side = 0 +8:10/0/terrains_peering_bit/bottom_left_corner = 0 +8:10/0/terrains_peering_bit/left_side = 0 +8:10/0/terrains_peering_bit/top_left_corner = 0 +8:10/0/terrains_peering_bit/top_side = 0 +8:10/0/terrains_peering_bit/top_right_corner = 0 +9:10/0 = 0 +10:10/0 = 0 +11:10/0 = 0 +12:10/0 = 0 +13:10/0 = 0 +14:10/0 = 0 +15:10/0 = 0 +15:10/0/terrain_set = 0 +15:10/0/terrain = 2 +15:10/0/terrains_peering_bit/right_side = 2 +15:10/0/terrains_peering_bit/bottom_right_corner = 1 +15:10/0/terrains_peering_bit/bottom_side = 1 +15:10/0/terrains_peering_bit/bottom_left_corner = 1 +15:10/0/terrains_peering_bit/left_side = 1 +15:10/0/terrains_peering_bit/top_left_corner = 1 +15:10/0/terrains_peering_bit/top_side = 2 +15:10/0/terrains_peering_bit/top_right_corner = 2 +16:10/0 = 0 +16:10/0/terrain_set = 0 +16:10/0/terrain = 2 +16:10/0/terrains_peering_bit/right_side = 1 +16:10/0/terrains_peering_bit/bottom_right_corner = 1 +16:10/0/terrains_peering_bit/bottom_side = 1 +16:10/0/terrains_peering_bit/bottom_left_corner = 1 +16:10/0/terrains_peering_bit/left_side = 2 +16:10/0/terrains_peering_bit/top_left_corner = 2 +16:10/0/terrains_peering_bit/top_side = 2 +16:10/0/terrains_peering_bit/top_right_corner = 1 +17:10/0 = 0 +18:10/0 = 0 +19:10/0 = 0 +32:10/0 = 0 +33:10/0 = 0 +34:10/0 = 0 +35:10/0 = 0 +36:10/0 = 0 +37:10/0 = 0 +0:11/0 = 0 +0:11/0/terrain_set = 0 +0:11/0/terrain = 0 +0:11/0/terrains_peering_bit/right_side = 0 +0:11/0/terrains_peering_bit/bottom_right_corner = 0 +0:11/0/terrains_peering_bit/bottom_side = 0 +1:11/0 = 0 +1:11/0/terrain_set = 0 +1:11/0/terrain = 0 +1:11/0/terrains_peering_bit/right_side = 0 +1:11/0/terrains_peering_bit/bottom_right_corner = 0 +1:11/0/terrains_peering_bit/bottom_side = 0 +1:11/0/terrains_peering_bit/bottom_left_corner = 0 +1:11/0/terrains_peering_bit/left_side = 0 +2:11/0 = 0 +2:11/0/terrain_set = 0 +2:11/0/terrain = 0 +2:11/0/terrains_peering_bit/bottom_side = 0 +2:11/0/terrains_peering_bit/bottom_left_corner = 0 +2:11/0/terrains_peering_bit/left_side = 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 +12:11/0 = 0 +13:11/0 = 0 +14:11/0 = 0 +15:11/0 = 0 +16:11/0 = 0 +17:11/0 = 0 +18:11/0 = 0 +19:11/0 = 0 +20:11/0 = 0 +32:11/0 = 0 +34:11/0 = 0 +35:11/0 = 0 +36:11/0 = 0 +37:11/0 = 0 +0:12/0 = 0 +1:12/0 = 0 +2:12/0 = 0 +3:12/0 = 0 +4:12/0 = 0 +5:12/0 = 0 +6:12/0 = 0 +7:12/0 = 0 +9:12/0 = 0 +10:12/0 = 0 +11:12/0 = 0 +12:12/0 = 0 +13:12/0 = 0 +14:12/0 = 0 +15:12/0 = 0 +16:12/0 = 0 +17:12/0 = 0 +18:12/0 = 0 +19:12/0 = 0 +20:12/0 = 0 +22:12/0 = 0 +23:12/0 = 0 +25:12/0 = 0 +26:12/0 = 0 +27:12/0 = 0 +30:12/0 = 0 +32:12/0 = 0 +34:12/0 = 0 +35:12/0 = 0 +36:12/0 = 0 +37:12/0 = 0 +0:13/0 = 0 +1:13/0 = 0 +2:13/0 = 0 +3:13/0 = 0 +4:13/0 = 0 +5:13/0 = 0 +6:13/0 = 0 +7:13/0 = 0 +8:13/0 = 0 +8:13/0/terrain_set = 0 +8:13/0/terrain = 0 +8:13/0/terrains_peering_bit/right_side = 0 +8:13/0/terrains_peering_bit/bottom_right_corner = 0 +8:13/0/terrains_peering_bit/bottom_side = 0 +8:13/0/terrains_peering_bit/bottom_left_corner = 1 +8:13/0/terrains_peering_bit/left_side = 1 +8:13/0/terrains_peering_bit/top_left_corner = 1 +8:13/0/terrains_peering_bit/top_side = 2 +8:13/0/terrains_peering_bit/top_right_corner = 2 +9:13/0 = 0 +9:13/0/terrain_set = 0 +9:13/0/terrain = 0 +9:13/0/terrains_peering_bit/right_side = 1 +9:13/0/terrains_peering_bit/bottom_right_corner = 1 +9:13/0/terrains_peering_bit/bottom_side = 0 +9:13/0/terrains_peering_bit/bottom_left_corner = 0 +9:13/0/terrains_peering_bit/left_side = 0 +9:13/0/terrains_peering_bit/top_left_corner = 2 +9:13/0/terrains_peering_bit/top_side = 2 +9:13/0/terrains_peering_bit/top_right_corner = 1 +10:13/0 = 0 +10:13/0/terrain_set = 0 +10:13/0/terrain = 0 +10:13/0/terrains_peering_bit/right_side = 0 +10:13/0/terrains_peering_bit/bottom_right_corner = 0 +10:13/0/terrains_peering_bit/bottom_side = 0 +10:13/0/terrains_peering_bit/bottom_left_corner = 2 +10:13/0/terrains_peering_bit/left_side = 2 +10:13/0/terrains_peering_bit/top_left_corner = 1 +10:13/0/terrains_peering_bit/top_side = 1 +10:13/0/terrains_peering_bit/top_right_corner = 1 +11:13/0 = 0 +11:13/0/terrain_set = 0 +11:13/0/terrain = 0 +11:13/0/terrains_peering_bit/right_side = 2 +11:13/0/terrains_peering_bit/bottom_right_corner = 2 +11:13/0/terrains_peering_bit/bottom_side = 0 +11:13/0/terrains_peering_bit/bottom_left_corner = 0 +11:13/0/terrains_peering_bit/left_side = 0 +11:13/0/terrains_peering_bit/top_left_corner = 1 +11:13/0/terrains_peering_bit/top_side = 1 +11:13/0/terrains_peering_bit/top_right_corner = 1 +12:13/0 = 0 +13:13/0 = 0 +14:13/0 = 0 +15:13/0 = 0 +16:13/0 = 0 +17:13/0 = 0 +18:13/0 = 0 +19:13/0 = 0 +20:13/0 = 0 +23:13/0 = 0 +24:13/0 = 0 +25:13/0 = 0 +26:13/0 = 0 +27:13/0 = 0 +28:13/0 = 0 +29:13/0 = 0 +30:13/0 = 0 +32:13/0 = 0 +34:13/0 = 0 +35:13/0 = 0 +36:13/0 = 0 +0:14/0 = 0 +1:14/0 = 0 +2:14/0 = 0 +3:14/0 = 0 +4:14/0 = 0 +5:14/0 = 0 +6:14/0 = 0 +7:14/0 = 0 +8:14/0 = 0 +8:14/0/terrain_set = 0 +8:14/0/terrain = 0 +8:14/0/terrains_peering_bit/right_side = 0 +8:14/0/terrains_peering_bit/bottom_right_corner = 2 +8:14/0/terrains_peering_bit/bottom_side = 2 +8:14/0/terrains_peering_bit/bottom_left_corner = 1 +8:14/0/terrains_peering_bit/left_side = 1 +8:14/0/terrains_peering_bit/top_left_corner = 1 +8:14/0/terrains_peering_bit/top_side = 0 +8:14/0/terrains_peering_bit/top_right_corner = 0 +9:14/0 = 0 +9:14/0/terrain_set = 0 +9:14/0/terrain = 0 +9:14/0/terrains_peering_bit/right_side = 1 +9:14/0/terrains_peering_bit/bottom_right_corner = 1 +9:14/0/terrains_peering_bit/bottom_side = 2 +9:14/0/terrains_peering_bit/bottom_left_corner = 2 +9:14/0/terrains_peering_bit/left_side = 0 +9:14/0/terrains_peering_bit/top_left_corner = 0 +9:14/0/terrains_peering_bit/top_side = 0 +9:14/0/terrains_peering_bit/top_right_corner = 1 +10:14/0 = 0 +10:14/0/terrain_set = 0 +10:14/0/terrain = 0 +10:14/0/terrains_peering_bit/right_side = 0 +10:14/0/terrains_peering_bit/bottom_right_corner = 1 +10:14/0/terrains_peering_bit/bottom_side = 1 +10:14/0/terrains_peering_bit/bottom_left_corner = 1 +10:14/0/terrains_peering_bit/left_side = 2 +10:14/0/terrains_peering_bit/top_left_corner = 2 +10:14/0/terrains_peering_bit/top_side = 0 +10:14/0/terrains_peering_bit/top_right_corner = 0 +11:14/0 = 0 +11:14/0/terrain_set = 0 +11:14/0/terrain = 0 +11:14/0/terrains_peering_bit/right_side = 2 +11:14/0/terrains_peering_bit/bottom_right_corner = 1 +11:14/0/terrains_peering_bit/bottom_side = 1 +11:14/0/terrains_peering_bit/bottom_left_corner = 1 +11:14/0/terrains_peering_bit/left_side = 0 +11:14/0/terrains_peering_bit/top_left_corner = 0 +11:14/0/terrains_peering_bit/top_side = 0 +11:14/0/terrains_peering_bit/top_right_corner = 2 +12:14/0 = 0 +13:14/0 = 0 +14:14/0 = 0 +15:14/0 = 0 +16:14/0 = 0 +18:14/0 = 0 +19:14/0 = 0 +20:14/0 = 0 +21:14/0 = 0 +22:14/0 = 0 +23:14/0 = 0 +24:14/0 = 0 +25:14/0 = 0 +26:14/0 = 0 +27:14/0 = 0 +28:14/0 = 0 +29:14/0 = 0 +30:14/0 = 0 +32:14/0 = 0 +34:14/0 = 0 +35:14/0 = 0 +36:14/0 = 0 +0:15/0 = 0 +1:15/0 = 0 +2:15/0 = 0 +3:15/0 = 0 +4:15/0 = 0 +5:15/0 = 0 +6:15/0 = 0 +7:15/0 = 0 +8:15/0 = 0 +9:15/0 = 0 +11:15/0 = 0 +12:15/0 = 0 +13:15/0 = 0 +14:15/0 = 0 +15:15/0 = 0 +16:15/0 = 0 +17:15/0 = 0 +18:15/0 = 0 +23:15/0 = 0 +24:15/0 = 0 +25:15/0 = 0 +26:15/0 = 0 +27:15/0 = 0 +28:15/0 = 0 +29:15/0 = 0 +0:16/0 = 0 +1:16/0 = 0 +2:16/0 = 0 +3:16/0 = 0 +4:16/0 = 0 +5:16/0 = 0 +6:16/0 = 0 +7:16/0 = 0 +11:16/0 = 0 +12:16/0 = 0 +13:16/0 = 0 +14:16/0 = 0 +17:16/0 = 0 +18:16/0 = 0 +23:16/0 = 0 +24:16/0 = 0 +28:16/0 = 0 +29:16/0 = 0 +33:16/0 = 0 +0:17/0 = 0 +2:17/0 = 0 +3:17/0 = 0 +4:17/0 = 0 +5:17/0 = 0 +6:17/0 = 0 +7:17/0 = 0 +9:17/0 = 0 +10:17/0 = 0 +11:17/0 = 0 +12:17/0 = 0 +13:17/0 = 0 +14:17/0 = 0 +15:17/0 = 0 +16:17/0 = 0 +19:17/0 = 0 +20:17/0 = 0 +21:17/0 = 0 +22:17/0 = 0 +23:17/0 = 0 +24:17/0 = 0 +25:17/0 = 0 +27:17/0 = 0 +28:17/0 = 0 +29:17/0 = 0 +30:17/0 = 0 +31:17/0 = 0 +32:17/0 = 0 +33:17/0 = 0 +34:17/0 = 0 +35:17/0 = 0 +36:17/0 = 0 +37:17/0 = 0 +38:17/0 = 0 +39:17/0 = 0 +0:18/0 = 0 +2:18/0 = 0 +3:18/0 = 0 +4:18/0 = 0 +5:18/0 = 0 +6:18/0 = 0 +7:18/0 = 0 +8:18/0 = 0 +9:18/0 = 0 +10:18/0 = 0 +11:18/0 = 0 +12:18/0 = 0 +13:18/0 = 0 +14:18/0 = 0 +15:18/0 = 0 +16:18/0 = 0 +17:18/0 = 0 +18:18/0 = 0 +19:18/0 = 0 +20:18/0 = 0 +21:18/0 = 0 +22:18/0 = 0 +23:18/0 = 0 +24:18/0 = 0 +25:18/0 = 0 +27:18/0 = 0 +28:18/0 = 0 +29:18/0 = 0 +30:18/0 = 0 +31:18/0 = 0 +32:18/0 = 0 +33:18/0 = 0 +34:18/0 = 0 +35:18/0 = 0 +36:18/0 = 0 +37:18/0 = 0 +38:18/0 = 0 +39:18/0 = 0 +0:19/0 = 0 +1:19/0 = 0 +3:19/0 = 0 +4:19/0 = 0 +5:19/0 = 0 +6:19/0 = 0 +7:19/0 = 0 +8:19/0 = 0 +9:19/0 = 0 +10:19/0 = 0 +11:19/0 = 0 +12:19/0 = 0 +13:19/0 = 0 +14:19/0 = 0 +15:19/0 = 0 +16:19/0 = 0 +17:19/0 = 0 +18:19/0 = 0 +19:19/0 = 0 +20:19/0 = 0 +21:19/0 = 0 +22:19/0 = 0 +23:19/0 = 0 +24:19/0 = 0 +27:19/0 = 0 +28:19/0 = 0 +29:19/0 = 0 +30:19/0 = 0 +31:19/0 = 0 +32:19/0 = 0 +33:19/0 = 0 +34:19/0 = 0 +35:19/0 = 0 +36:19/0 = 0 +37:19/0 = 0 +38:19/0 = 0 +39:19/0 = 0 +0:20/0 = 0 +1:20/0 = 0 +2:20/0 = 0 +3:20/0 = 0 +4:20/0 = 0 +5:20/0 = 0 +6:20/0 = 0 +7:20/0 = 0 +9:20/0 = 0 +10:20/0 = 0 +11:20/0 = 0 +12:20/0 = 0 +13:20/0 = 0 +14:20/0 = 0 +15:20/0 = 0 +16:20/0 = 0 +17:20/0 = 0 +18:20/0 = 0 +19:20/0 = 0 +20:20/0 = 0 +21:20/0 = 0 +22:20/0 = 0 +23:20/0 = 0 +24:20/0 = 0 +25:20/0 = 0 +26:20/0 = 0 +27:20/0 = 0 +28:20/0 = 0 +29:20/0 = 0 +0:21/0 = 0 +1:21/0 = 0 +2:21/0 = 0 +3:21/0 = 0 +4:21/0 = 0 +5:21/0 = 0 +6:21/0 = 0 +7:21/0 = 0 +9:21/0 = 0 +10:21/0 = 0 +11:21/0 = 0 +12:21/0 = 0 +13:21/0 = 0 +14:21/0 = 0 +15:21/0 = 0 +16:21/0 = 0 +17:21/0 = 0 +18:21/0 = 0 +19:21/0 = 0 +20:21/0 = 0 +21:21/0 = 0 +22:21/0 = 0 +23:21/0 = 0 +24:21/0 = 0 +25:21/0 = 0 +26:21/0 = 0 +27:21/0 = 0 +28:21/0 = 0 +29:21/0 = 0 +0:22/0 = 0 +1:22/0 = 0 +2:22/0 = 0 +3:22/0 = 0 +4:22/0 = 0 +5:22/0 = 0 +6:22/0 = 0 +7:22/0 = 0 +8:22/0 = 0 +9:22/0 = 0 +10:22/0 = 0 +11:22/0 = 0 +12:22/0 = 0 +13:22/0 = 0 +15:22/0 = 0 +16:22/0 = 0 +17:22/0 = 0 +18:22/0 = 0 +19:22/0 = 0 +20:22/0 = 0 +21:22/0 = 0 +22:22/0 = 0 +23:22/0 = 0 +24:22/0 = 0 +25:22/0 = 0 +26:22/0 = 0 +28:22/0 = 0 +29:22/0 = 0 +0:23/0 = 0 +1:23/0 = 0 +2:23/0 = 0 +3:23/0 = 0 +4:23/0 = 0 +5:23/0 = 0 +6:23/0 = 0 +7:23/0 = 0 +8:23/0 = 0 +9:23/0 = 0 +10:23/0 = 0 +11:23/0 = 0 +12:23/0 = 0 +13:23/0 = 0 +15:23/0 = 0 +16:23/0 = 0 +18:23/0 = 0 +19:23/0 = 0 +20:23/0 = 0 +21:23/0 = 0 +22:23/0 = 0 +23:23/0 = 0 +24:23/0 = 0 +25:23/0 = 0 +26:23/0 = 0 +27:23/0 = 0 +28:23/0 = 0 +29:23/0 = 0 +0:24/0 = 0 +1:24/0 = 0 +2:24/0 = 0 +3:24/0 = 0 +4:24/0 = 0 +5:24/0 = 0 +8:24/0 = 0 +9:24/0 = 0 +10:24/0 = 0 +12:24/0 = 0 +13:24/0 = 0 +15:24/0 = 0 +16:24/0 = 0 +18:24/0 = 0 +19:24/0 = 0 +20:24/0 = 0 +21:24/0 = 0 +22:24/0 = 0 +25:24/0 = 0 +26:24/0 = 0 +27:24/0 = 0 +28:24/0 = 0 +29:24/0 = 0 +0:25/0 = 0 +1:25/0 = 0 +2:25/0 = 0 +3:25/0 = 0 +4:25/0 = 0 +5:25/0 = 0 +8:25/0 = 0 +9:25/0 = 0 +10:25/0 = 0 +11:25/0 = 0 +12:25/0 = 0 +13:25/0 = 0 +14:25/0 = 0 +15:25/0 = 0 +16:25/0 = 0 +17:25/0 = 0 +18:25/0 = 0 +19:25/0 = 0 +20:25/0 = 0 +21:25/0 = 0 +22:25/0 = 0 +25:25/0 = 0 +26:25/0 = 0 +27:25/0 = 0 +28:25/0 = 0 +29:25/0 = 0 +0:26/0 = 0 +1:26/0 = 0 +2:26/0 = 0 +3:26/0 = 0 +4:26/0 = 0 +5:26/0 = 0 +6:26/0 = 0 +7:26/0 = 0 +8:26/0 = 0 +9:26/0 = 0 +11:26/0 = 0 +12:26/0 = 0 +13:26/0 = 0 +14:26/0 = 0 +15:26/0 = 0 +16:26/0 = 0 +17:26/0 = 0 +18:26/0 = 0 +19:26/0 = 0 +20:26/0 = 0 +21:26/0 = 0 +22:26/0 = 0 +25:26/0 = 0 +26:26/0 = 0 +27:26/0 = 0 +28:26/0 = 0 +29:26/0 = 0 +0:27/0 = 0 +1:27/0 = 0 +2:27/0 = 0 +3:27/0 = 0 +4:27/0 = 0 +5:27/0 = 0 +6:27/0 = 0 +7:27/0 = 0 +8:27/0 = 0 +9:27/0 = 0 +10:27/0 = 0 +11:27/0 = 0 +12:27/0 = 0 +13:27/0 = 0 +14:27/0 = 0 +15:27/0 = 0 +16:27/0 = 0 +17:27/0 = 0 +18:27/0 = 0 +19:27/0 = 0 +20:27/0 = 0 +21:27/0 = 0 +22:27/0 = 0 +25:27/0 = 0 +26:27/0 = 0 +27:27/0 = 0 +28:27/0 = 0 +29:27/0 = 0 +0:28/0 = 0 +1:28/0 = 0 +2:28/0 = 0 +3:28/0 = 0 +4:28/0 = 0 +5:28/0 = 0 +6:28/0 = 0 +7:28/0 = 0 +8:28/0 = 0 +9:28/0 = 0 +10:28/0 = 0 +11:28/0 = 0 +12:28/0 = 0 +13:28/0 = 0 +14:28/0 = 0 +15:28/0 = 0 +16:28/0 = 0 +17:28/0 = 0 +19:28/0 = 0 +20:28/0 = 0 +21:28/0 = 0 +22:28/0 = 0 +23:28/0 = 0 +25:28/0 = 0 +26:28/0 = 0 +28:28/0 = 0 +29:28/0 = 0 +0:29/0 = 0 +1:29/0 = 0 +2:29/0 = 0 +3:29/0 = 0 +4:29/0 = 0 +5:29/0 = 0 +6:29/0 = 0 +7:29/0 = 0 +8:29/0 = 0 +9:29/0 = 0 +10:29/0 = 0 +11:29/0 = 0 +12:29/0 = 0 +14:29/0 = 0 +15:29/0 = 0 +16:29/0 = 0 +17:29/0 = 0 +18:29/0 = 0 +19:29/0 = 0 +20:29/0 = 0 +21:29/0 = 0 +22:29/0 = 0 +23:29/0 = 0 +0:30/0 = 0 +1:30/0 = 0 +2:30/0 = 0 +3:30/0 = 0 +4:30/0 = 0 +5:30/0 = 0 +6:30/0 = 0 +7:30/0 = 0 +8:30/0 = 0 +9:30/0 = 0 +10:30/0 = 0 +11:30/0 = 0 +12:30/0 = 0 +14:30/0 = 0 +15:30/0 = 0 +16:30/0 = 0 +17:30/0 = 0 +18:30/0 = 0 +19:30/0 = 0 +20:30/0 = 0 +21:30/0 = 0 +22:30/0 = 0 +23:30/0 = 0 +0:31/0 = 0 +1:31/0 = 0 +2:31/0 = 0 +3:31/0 = 0 +4:31/0 = 0 +5:31/0 = 0 +6:31/0 = 0 +7:31/0 = 0 +8:31/0 = 0 +9:31/0 = 0 +10:31/0 = 0 +11:31/0 = 0 +12:31/0 = 0 +13:31/0 = 0 +14:31/0 = 0 +15:31/0 = 0 +16:31/0 = 0 +19:31/0 = 0 +20:31/0 = 0 +21:31/0 = 0 +22:31/0 = 0 +23:31/0 = 0 +24:31/0 = 0 +25:31/0 = 0 +26:31/0 = 0 +27:31/0 = 0 +0:32/0 = 0 +1:32/0 = 0 +2:32/0 = 0 +3:32/0 = 0 +4:32/0 = 0 +5:32/0 = 0 +6:32/0 = 0 +7:32/0 = 0 +8:32/0 = 0 +9:32/0 = 0 +10:32/0 = 0 +11:32/0 = 0 +12:32/0 = 0 +13:32/0 = 0 +14:32/0 = 0 +15:32/0 = 0 +16:32/0 = 0 +17:32/0 = 0 +18:32/0 = 0 +19:32/0 = 0 +20:32/0 = 0 +21:32/0 = 0 +22:32/0 = 0 +23:32/0 = 0 +24:32/0 = 0 +27:32/0 = 0 +0:33/0 = 0 +1:33/0 = 0 +4:33/0 = 0 +5:33/0 = 0 +6:33/0 = 0 +7:33/0 = 0 +8:33/0 = 0 +9:33/0 = 0 +10:33/0 = 0 +11:33/0 = 0 +12:33/0 = 0 +13:33/0 = 0 +14:33/0 = 0 +15:33/0 = 0 +16:33/0 = 0 +17:33/0 = 0 +18:33/0 = 0 +24:33/0 = 0 +25:33/0 = 0 +26:33/0 = 0 +27:33/0 = 0 +0:34/0 = 0 +1:34/0 = 0 +4:34/0 = 0 +5:34/0 = 0 +6:34/0 = 0 +7:34/0 = 0 +0:35/0 = 0 +1:35/0 = 0 +6:0/size_in_atlas = Vector2i(5, 5) +6:0/0 = 0 +6:0/0/z_index = 1 +6:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-32, -24, 32, -24, 32, 12, 32, 24, -32, 24, -32, 12) +4:1/size_in_atlas = Vector2i(2, 2) +4:1/0 = 0 +4:1/0/z_index = 1 +16:0/size_in_atlas = Vector2i(2, 2) +16:0/0 = 0 +16:2/size_in_atlas = Vector2i(2, 2) +16:2/0 = 0 +18:2/size_in_atlas = Vector2i(2, 2) +18:2/0 = 0 +18:0/size_in_atlas = Vector2i(2, 2) +18:0/0 = 0 +20:0/size_in_atlas = Vector2i(2, 2) +20:0/0 = 0 +20:2/size_in_atlas = Vector2i(2, 2) +20:2/0 = 0 +22:0/size_in_atlas = Vector2i(3, 6) +22:0/0 = 0 +3:5/size_in_atlas = Vector2i(3, 1) +3:5/0 = 0 +11:5/size_in_atlas = Vector2i(2, 2) +11:5/0 = 0 +13:5/size_in_atlas = Vector2i(2, 3) +13:5/0 = 0 +13:5/0/z_index = 1 +22:9/size_in_atlas = Vector2i(3, 3) +22:9/0 = 0 +22:9/0/z_index = 1 +25:9/size_in_atlas = Vector2i(3, 3) +25:9/0 = 0 +25:9/0/z_index = 1 +28:9/size_in_atlas = Vector2i(3, 3) +28:9/0 = 0 +28:9/0/z_index = 1 +27:8/0 = 0 +27:8/0/z_index = 1 +21:7/size_in_atlas = Vector2i(1, 2) +21:7/0 = 0 +21:7/0/z_index = 1 +22:7/0 = 0 +22:7/0/z_index = 1 +22:8/0 = 0 +22:8/0/z_index = 1 +23:7/size_in_atlas = Vector2i(1, 2) +23:7/0 = 0 +23:7/0/z_index = 1 +24:7/size_in_atlas = Vector2i(1, 2) +24:7/0 = 0 +24:7/0/z_index = 1 +0:3/0 = 0 +0:3/0/terrain_set = 0 +0:3/0/terrain = 0 +0:3/0/terrains_peering_bit/right_side = 0 +0:3/0/terrains_peering_bit/bottom_right_corner = 2 +0:3/0/terrains_peering_bit/bottom_side = 0 +0:3/0/terrains_peering_bit/bottom_left_corner = 0 +0:3/0/terrains_peering_bit/left_side = 0 +0:3/0/terrains_peering_bit/top_left_corner = 0 +0:3/0/terrains_peering_bit/top_side = 0 +0:3/0/terrains_peering_bit/top_right_corner = 0 +1:3/0 = 0 +1:3/0/terrain_set = 0 +1:3/0/terrain = 0 +1:3/0/terrains_peering_bit/right_side = 0 +1:3/0/terrains_peering_bit/bottom_right_corner = 2 +1:3/0/terrains_peering_bit/bottom_side = 2 +1:3/0/terrains_peering_bit/bottom_left_corner = 2 +1:3/0/terrains_peering_bit/left_side = 0 +1:3/0/terrains_peering_bit/top_left_corner = 0 +1:3/0/terrains_peering_bit/top_side = 0 +1:3/0/terrains_peering_bit/top_right_corner = 0 +2:3/0 = 0 +2:3/0/terrain_set = 0 +2:3/0/terrain = 0 +2:3/0/terrains_peering_bit/right_side = 0 +2:3/0/terrains_peering_bit/bottom_right_corner = 0 +2:3/0/terrains_peering_bit/bottom_side = 0 +2:3/0/terrains_peering_bit/bottom_left_corner = 2 +2:3/0/terrains_peering_bit/left_side = 0 +2:3/0/terrains_peering_bit/top_left_corner = 0 +2:3/0/terrains_peering_bit/top_side = 0 +2:3/0/terrains_peering_bit/top_right_corner = 0 +2:4/0 = 0 +2:4/0/terrain_set = 0 +2:4/0/terrain = 0 +2:4/0/terrains_peering_bit/right_side = 0 +2:4/0/terrains_peering_bit/bottom_right_corner = 0 +2:4/0/terrains_peering_bit/bottom_side = 0 +2:4/0/terrains_peering_bit/bottom_left_corner = 2 +2:4/0/terrains_peering_bit/left_side = 2 +2:4/0/terrains_peering_bit/top_left_corner = 2 +2:4/0/terrains_peering_bit/top_side = 0 +2:4/0/terrains_peering_bit/top_right_corner = 0 +2:5/0 = 0 +2:5/0/terrain_set = 0 +2:5/0/terrain = 0 +2:5/0/terrains_peering_bit/right_side = 0 +2:5/0/terrains_peering_bit/bottom_right_corner = 0 +2:5/0/terrains_peering_bit/bottom_side = 0 +2:5/0/terrains_peering_bit/bottom_left_corner = 0 +2:5/0/terrains_peering_bit/left_side = 0 +2:5/0/terrains_peering_bit/top_left_corner = 2 +2:5/0/terrains_peering_bit/top_side = 0 +2:5/0/terrains_peering_bit/top_right_corner = 0 +1:5/0 = 0 +1:5/0/terrain_set = 0 +1:5/0/terrain = 0 +1:5/0/terrains_peering_bit/right_side = 0 +1:5/0/terrains_peering_bit/bottom_right_corner = 0 +1:5/0/terrains_peering_bit/bottom_side = 0 +1:5/0/terrains_peering_bit/bottom_left_corner = 0 +1:5/0/terrains_peering_bit/left_side = 0 +1:5/0/terrains_peering_bit/top_left_corner = 2 +1:5/0/terrains_peering_bit/top_side = 2 +1:5/0/terrains_peering_bit/top_right_corner = 2 +1:4/0 = 0 +1:4/0/terrain_set = 0 +1:4/0/terrain = 2 +1:4/0/terrains_peering_bit/right_side = 2 +1:4/0/terrains_peering_bit/bottom_right_corner = 2 +1:4/0/terrains_peering_bit/bottom_side = 2 +1:4/0/terrains_peering_bit/bottom_left_corner = 2 +1:4/0/terrains_peering_bit/left_side = 2 +1:4/0/terrains_peering_bit/top_left_corner = 2 +1:4/0/terrains_peering_bit/top_side = 2 +1:4/0/terrains_peering_bit/top_right_corner = 2 +0:4/0 = 0 +0:4/0/terrain_set = 0 +0:4/0/terrain = 0 +0:4/0/terrains_peering_bit/right_side = 2 +0:4/0/terrains_peering_bit/bottom_right_corner = 2 +0:4/0/terrains_peering_bit/bottom_side = 0 +0:4/0/terrains_peering_bit/bottom_left_corner = 0 +0:4/0/terrains_peering_bit/left_side = 0 +0:4/0/terrains_peering_bit/top_left_corner = 0 +0:4/0/terrains_peering_bit/top_side = 0 +0:4/0/terrains_peering_bit/top_right_corner = 2 +0:5/0 = 0 +0:5/0/terrain_set = 0 +0:5/0/terrain = 0 +0:5/0/terrains_peering_bit/right_side = 0 +0:5/0/terrains_peering_bit/bottom_right_corner = 0 +0:5/0/terrains_peering_bit/bottom_side = 0 +0:5/0/terrains_peering_bit/bottom_left_corner = 0 +0:5/0/terrains_peering_bit/left_side = 0 +0:5/0/terrains_peering_bit/top_left_corner = 0 +0:5/0/terrains_peering_bit/top_side = 0 +0:5/0/terrains_peering_bit/top_right_corner = 2 +1:6/0 = 0 +1:6/0/terrain_set = 0 +1:6/0/terrain = 0 +1:6/0/terrains_peering_bit/right_side = 2 +1:6/0/terrains_peering_bit/bottom_right_corner = 2 +1:6/0/terrains_peering_bit/bottom_side = 0 +1:6/0/terrains_peering_bit/bottom_left_corner = 0 +1:6/0/terrains_peering_bit/left_side = 0 +1:6/0/terrains_peering_bit/top_left_corner = 2 +1:6/0/terrains_peering_bit/top_side = 2 +1:6/0/terrains_peering_bit/top_right_corner = 2 +0:6/0 = 0 +0:6/0/terrain_set = 0 +0:6/0/terrain = 0 +0:6/0/terrains_peering_bit/right_side = 0 +0:6/0/terrains_peering_bit/bottom_right_corner = 0 +0:6/0/terrains_peering_bit/bottom_side = 0 +0:6/0/terrains_peering_bit/bottom_left_corner = 2 +0:6/0/terrains_peering_bit/left_side = 2 +0:6/0/terrains_peering_bit/top_left_corner = 2 +0:6/0/terrains_peering_bit/top_side = 2 +0:6/0/terrains_peering_bit/top_right_corner = 2 +0:7/0 = 0 +0:7/0/terrain_set = 0 +0:7/0/terrain = 0 +0:7/0/terrains_peering_bit/right_side = 0 +0:7/0/terrains_peering_bit/bottom_right_corner = 2 +0:7/0/terrains_peering_bit/bottom_side = 2 +0:7/0/terrains_peering_bit/bottom_left_corner = 2 +0:7/0/terrains_peering_bit/left_side = 2 +0:7/0/terrains_peering_bit/top_left_corner = 2 +0:7/0/terrains_peering_bit/top_side = 0 +0:7/0/terrains_peering_bit/top_right_corner = 0 +1:7/0 = 0 +1:7/0/terrain_set = 0 +1:7/0/terrain = 0 +1:7/0/terrains_peering_bit/right_side = 2 +1:7/0/terrains_peering_bit/bottom_right_corner = 2 +1:7/0/terrains_peering_bit/bottom_side = 2 +1:7/0/terrains_peering_bit/bottom_left_corner = 2 +1:7/0/terrains_peering_bit/left_side = 0 +1:7/0/terrains_peering_bit/top_left_corner = 0 +1:7/0/terrains_peering_bit/top_side = 0 +1:7/0/terrains_peering_bit/top_right_corner = 2 +2:6/0 = 0 +2:6/0/terrain_set = 0 +2:6/0/terrain = 0 +2:6/0/terrains_peering_bit/right_side = 0 +2:6/0/terrains_peering_bit/bottom_right_corner = 1 +2:6/0/terrains_peering_bit/bottom_side = 0 +2:6/0/terrains_peering_bit/bottom_left_corner = 0 +2:6/0/terrains_peering_bit/left_side = 0 +2:6/0/terrains_peering_bit/top_left_corner = 0 +2:6/0/terrains_peering_bit/top_side = 0 +2:6/0/terrains_peering_bit/top_right_corner = 0 +3:6/0 = 0 +3:6/0/terrain_set = 0 +3:6/0/terrain = 0 +3:6/0/terrains_peering_bit/right_side = 0 +3:6/0/terrains_peering_bit/bottom_right_corner = 1 +3:6/0/terrains_peering_bit/bottom_side = 1 +3:6/0/terrains_peering_bit/bottom_left_corner = 1 +3:6/0/terrains_peering_bit/left_side = 0 +3:6/0/terrains_peering_bit/top_left_corner = 0 +3:6/0/terrains_peering_bit/top_side = 0 +3:6/0/terrains_peering_bit/top_right_corner = 0 +4:6/0 = 0 +4:6/0/terrain_set = 0 +4:6/0/terrain = 0 +4:6/0/terrains_peering_bit/right_side = 0 +4:6/0/terrains_peering_bit/bottom_right_corner = 0 +4:6/0/terrains_peering_bit/bottom_side = 0 +4:6/0/terrains_peering_bit/bottom_left_corner = 1 +4:6/0/terrains_peering_bit/left_side = 0 +4:6/0/terrains_peering_bit/top_left_corner = 0 +4:6/0/terrains_peering_bit/top_side = 0 +4:6/0/terrains_peering_bit/top_right_corner = 0 +4:7/0 = 0 +4:7/0/terrain_set = 0 +4:7/0/terrain = 0 +4:7/0/terrains_peering_bit/right_side = 0 +4:7/0/terrains_peering_bit/bottom_right_corner = 0 +4:7/0/terrains_peering_bit/bottom_side = 0 +4:7/0/terrains_peering_bit/bottom_left_corner = 1 +4:7/0/terrains_peering_bit/left_side = 1 +4:7/0/terrains_peering_bit/top_left_corner = 1 +4:7/0/terrains_peering_bit/top_side = 0 +4:7/0/terrains_peering_bit/top_right_corner = 0 +3:7/0 = 0 +3:7/0/terrain_set = 0 +3:7/0/terrain = 1 +3:7/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +3:7/0/terrains_peering_bit/right_side = 1 +3:7/0/terrains_peering_bit/bottom_right_corner = 1 +3:7/0/terrains_peering_bit/bottom_side = 1 +3:7/0/terrains_peering_bit/bottom_left_corner = 1 +3:7/0/terrains_peering_bit/left_side = 1 +3:7/0/terrains_peering_bit/top_left_corner = 1 +3:7/0/terrains_peering_bit/top_side = 1 +3:7/0/terrains_peering_bit/top_right_corner = 1 +2:7/0 = 0 +2:7/0/terrain_set = 0 +2:7/0/terrain = 0 +2:7/0/terrains_peering_bit/right_side = 1 +2:7/0/terrains_peering_bit/bottom_right_corner = 1 +2:7/0/terrains_peering_bit/bottom_side = 0 +2:7/0/terrains_peering_bit/bottom_left_corner = 0 +2:7/0/terrains_peering_bit/left_side = 0 +2:7/0/terrains_peering_bit/top_left_corner = 0 +2:7/0/terrains_peering_bit/top_side = 0 +2:7/0/terrains_peering_bit/top_right_corner = 1 +2:8/0 = 0 +2:8/0/terrain_set = 0 +2:8/0/terrain = 0 +2:8/0/terrains_peering_bit/right_side = 0 +2:8/0/terrains_peering_bit/bottom_right_corner = 0 +2:8/0/terrains_peering_bit/bottom_side = 0 +2:8/0/terrains_peering_bit/bottom_left_corner = 0 +2:8/0/terrains_peering_bit/left_side = 0 +2:8/0/terrains_peering_bit/top_left_corner = 0 +2:8/0/terrains_peering_bit/top_side = 0 +2:8/0/terrains_peering_bit/top_right_corner = 1 +3:8/0 = 0 +3:8/0/terrain_set = 0 +3:8/0/terrain = 0 +3:8/0/terrains_peering_bit/right_side = 0 +3:8/0/terrains_peering_bit/bottom_right_corner = 0 +3:8/0/terrains_peering_bit/bottom_side = 0 +3:8/0/terrains_peering_bit/bottom_left_corner = 0 +3:8/0/terrains_peering_bit/left_side = 0 +3:8/0/terrains_peering_bit/top_left_corner = 1 +3:8/0/terrains_peering_bit/top_side = 1 +3:8/0/terrains_peering_bit/top_right_corner = 1 +4:8/0 = 0 +4:8/0/terrain_set = 0 +4:8/0/terrain = 0 +4:8/0/terrains_peering_bit/right_side = 0 +4:8/0/terrains_peering_bit/bottom_right_corner = 0 +4:8/0/terrains_peering_bit/bottom_side = 0 +4:8/0/terrains_peering_bit/bottom_left_corner = 0 +4:8/0/terrains_peering_bit/left_side = 0 +4:8/0/terrains_peering_bit/top_left_corner = 1 +4:8/0/terrains_peering_bit/top_side = 0 +4:8/0/terrains_peering_bit/top_right_corner = 0 +0:1/animation_columns = 4 +0:1/animation_mode = 1 +0:1/animation_frame_0/duration = 0.5 +0:1/animation_frame_1/duration = 0.5 +0:1/animation_frame_2/duration = 0.5 +0:1/animation_frame_3/duration = 0.5 +0:1/animation_frame_4/duration = 0.5 +0:1/animation_frame_5/duration = 0.5 +0:1/animation_frame_6/duration = 0.5 +0:1/animation_frame_7/duration = 0.5 +0:1/0 = 0 +0:1/0/terrain_set = 0 +0:1/0/terrain = 1 +0:1/0/probability = 0.3 +0:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +0:1/0/terrains_peering_bit/right_side = 1 +0:1/0/terrains_peering_bit/bottom_right_corner = 1 +0:1/0/terrains_peering_bit/bottom_side = 1 +0:1/0/terrains_peering_bit/bottom_left_corner = 1 +0:1/0/terrains_peering_bit/left_side = 1 +0:1/0/terrains_peering_bit/top_left_corner = 1 +0:1/0/terrains_peering_bit/top_side = 1 +0:1/0/terrains_peering_bit/top_right_corner = 1 +11:0/size_in_atlas = Vector2i(2, 2) +11:0/0 = 0 +11:0/0/texture_origin = Vector2i(8, 8) +11:0/0/z_index = 2 +14:0/size_in_atlas = Vector2i(2, 2) +14:0/0 = 0 +14:0/0/texture_origin = Vector2i(-8, 8) +14:0/0/z_index = 2 +11:2/size_in_atlas = Vector2i(5, 3) +11:2/0 = 0 +11:2/0/z_index = 1 +25:7/size_in_atlas = Vector2i(1, 2) +25:7/0 = 0 +25:7/0/z_index = 1 +16:4/size_in_atlas = Vector2i(1, 2) +16:4/0 = 0 +16:4/0/texture_origin = Vector2i(0, 8) +16:4/0/z_index = 1 +17:4/size_in_atlas = Vector2i(1, 2) +17:4/0 = 0 +17:4/0/texture_origin = Vector2i(0, 8) +17:4/0/z_index = 1 +18:4/size_in_atlas = Vector2i(1, 2) +18:4/0 = 0 +18:4/0/texture_origin = Vector2i(0, 8) +18:4/0/z_index = 1 +19:4/size_in_atlas = Vector2i(1, 2) +19:4/0 = 0 +19:4/0/texture_origin = Vector2i(0, 8) +19:4/0/z_index = 1 +20:4/size_in_atlas = Vector2i(1, 2) +20:4/0 = 0 +20:4/0/texture_origin = Vector2i(0, 8) +20:4/0/z_index = 1 + +[sub_resource type="TileSet" id="TileSet_snsnx"] +physics_layer_0/collision_layer = 1 +terrain_set_0/mode = 0 +terrain_set_0/terrain_0/name = "Grass" +terrain_set_0/terrain_0/color = Color(0.34902, 0.890196, 0.352941, 1) +terrain_set_0/terrain_1/name = "Water" +terrain_set_0/terrain_1/color = Color(0.223529, 0.6, 0.882353, 1) +terrain_set_0/terrain_2/name = "Grass Paths" +terrain_set_0/terrain_2/color = Color(0.588235, 0.713726, 0.239216, 1) +sources/0 = SubResource("TileSetAtlasSource_n0o3p") + +[node name="MainLevel" type="Node2D"] +script = ExtResource("1_fdviv") + +[node name="TileMapLayer" type="TileMapLayer" parent="."] +tile_map_data = PackedByteArray("AAAAAP//AAASACEAAAD/////AAARACEAAAD+////AAARACEAAAD9////AAARACEAAAD7////AAAQACEAAAD6////AAAHAAoAAAD5////AAAHAAkAAAD4////AAAHAAkAAAD5/wAAAAAFAAoAAAD6/wAAAAAAAAMAAAD7/wAAAAABAAMAAAD8/wAAAAABAAMAAAD9/wAAAAABAAMAAAD+/wAAAAABAAMAAAD//wAAAAABAAMAAAAAAAAAAAABAAMAAAABAAAAAAABAAMAAAACAAEAAAABAAQAAAADAAEAAAABAAQAAAAEAAEAAAABAAQAAAD4/wAAAAANABwAAAD3/wAAAAAIAAoAAAACAAAAAAABAAMAAAADAAAAAAABAAMAAAAEAAAAAAABAAMAAAAFAAAAAAABAAMAAAAGAAAAAAABAAcAAAAHAAAAAAABAAQAAAAIAAAAAAAAAAcAAAABAP//AAAIAAoAAAACAP//AAAIAAoAAAADAP//AAAFAAkAAAAEAP//AAAHAAoAAAAFAP//AAAFAAkAAAAGAP//AAAAAAMAAAD2/wAAAAAMABwAAAD1/wAAAAALABwAAAD9/wEAAAABAAQAAAD+/wEAAAABAAQAAAD//wEAAAABAAQAAAAAAAEAAAABAAQAAAABAAEAAAABAAQAAAAFAAEAAAABAAQAAAAGAAEAAAABAAQAAAAHAAEAAAABAAQAAAAIAAEAAAABAAQAAAAJAAEAAAABAAQAAAD8/wEAAAABAAQAAAD7/wEAAAABAAQAAAD6/wEAAAABAAcAAAD5/wEAAAABAAMAAAD4/wEAAAAAAAMAAAD3/wEAAAAHAAkAAAD2/wEAAAAFAAoAAAD1/wEAAAAFAAkAAAD0/wEAAAAHAAoAAAD5//7/AAAFAAkAAAD6//7/AAAIAAoAAAD7//7/AAAQACAAAAD8//7/AAARACAAAAD9//7/AAARACAAAAD+//7/AAARACAAAAD///7/AAARACAAAAAAAP7/AAASACAAAAABAP7/AAAFAAoAAAACAP7/AAAIAAoAAAADAP7/AAAFAAoAAAAFAP7/AAAFAAkAAAAGAP7/AAAAAAAAAAAIAP7/AAACAAMAAAAJAP7/AAAHAAkAAAALAP7/AAAFAAoAAAAMAP7/AAAAAAAAAAD4//7/AAAFAAoAAAD3//7/AAAAAAAAAAD3//3/AAANABwAAAD4//3/AAAHAAoAAAD5//3/AAAFAAoAAAD6//3/AAAHAAoAAAD7//3/AAAHAAoAAAD8//3/AAAIAAkAAAD9//3/AAAFAAkAAAD+//3/AAAAAAAAAAD///3/AAAIAAoAAAAAAP3/AAAIAAkAAAABAP3/AAAIAAoAAAACAP3/AAAHAAkAAAADAP3/AAANABwAAAAEAPz/AAAHAAkAAAAFAPz/AAAAAAAAAAAHAPz/AAAIAAoAAAADAPz/AAAFAAkAAAACAPz/AAAIAAoAAAABAPz/AAAIAAkAAAAAAPz/AAAHAAoAAAD///z/AAAHAAoAAAD+//z/AAAIAAoAAAD9//z/AAAFAAoAAAD8//z/AAAAAAAAAAD7//z/AAAFAAoAAAD6//z/AAAAAAAAAAD5//z/AAANABwAAAD4//z/AAAIAAkAAAD3//z/AAAFAAkAAAAEAP3/AAAAAAAAAAAFAP3/AAAFAAkAAAAGAP3/AAAAAAAAAAAIAP3/AAAFAAoAAAAJAP3/AAAHAAoAAAALAP3/AAAIAAkAAAAMAP3/AAAFAAoAAAANAP7/AAAHAAoAAAAJAPz/AAAHAAoAAAAKAPz/AAAIAAoAAAALAPz/AAAFAAoAAAD+//v/AAAHAAoAAAD9//v/AAAFAAkAAAD8//v/AAAHAAoAAAD7//v/AAAIAAoAAAD6//v/AAAAAAAAAAD5//v/AAAIAAkAAAD4//v/AAAFAAkAAAD3//v/AAAIAAkAAAD2//v/AAAAAAAAAAD///v/AAANABwAAAAAAPv/AAAHAAkAAAABAPv/AAAIAAkAAAACAPv/AAAHAAkAAAADAPv/AAAAAAAAAAAEAPv/AAAFAAoAAAAFAPv/AAAHAAoAAAAGAPv/AAAHAAoAAAAHAPv/AAAIAAoAAAAJAPv/AAAFAAkAAAAKAPv/AAAFAAoAAAALAPv/AAAFAAoAAAAMAPv/AAAAAAAAAAD1//v/AAAFAAkAAAD0//v/AAAIAAkAAADz//r/AAAFAAkAAADy//r/AAAFAAkAAADy//v/AAAHAAoAAADz//v/AAAAAAAAAAAAAPr/AAAFAAoAAAD///r/AAAFAAoAAAD+//r/AAAFAAoAAAD9//r/AAAHAAoAAAD8//r/AAAHAAkAAAD7//r/AAAAAAAAAAD6//r/AAAHAAoAAAD5//r/AAAAAAAAAAD4//r/AAAIAAkAAAD3//r/AAAHAAoAAAD2//r/AAAFAAkAAAD1//r/AAAIAAkAAAD0//r/AAAFAAkAAAABAPr/AAAIAAkAAAACAPr/AAAFAAoAAAADAPr/AAAHAAkAAAAEAPr/AAAFAAoAAAAFAPr/AAAIAAoAAAAGAPr/AAAIAAkAAAAHAPr/AAAIAAkAAAAIAPr/AAAFAAoAAAAJAPr/AAAFAAoAAAAKAPr/AAAIAAoAAAALAPr/AAAHAAkAAAD6//n/AAAHAAkAAAD5//n/AAAIAAkAAAD4//n/AAAAAAAAAAD3//n/AAAIAAkAAAD2//n/AAAFAAoAAAD1//n/AAAFAAoAAAD0//n/AAAHAAoAAAAMAPr/AAAFAAkAAAANAPr/AAAHAAoAAAAOAPr/AAAIAAoAAAAPAPr/AAAAAAAAAAAQAPr/AAAFAAkAAAAIAPn/AAAFAAkAAAAHAPn/AAAHAAkAAAAGAPn/AAAAAAAAAAAFAPn/AAAAAAAAAAAEAPn/AAAFAAkAAAADAPn/AAAFAAoAAAACAPn/AAAAAAAAAAABAPn/AAAFAAkAAAAAAPn/AAAIAAkAAAD///n/AAAHAAoAAAD+//n/AAAFAAkAAAD9//n/AAAHAAkAAAD8//n/AAAFAAkAAAD7//n/AAAFAAoAAAD2//j/AAAHAAoAAAD1//j/AAAHAAkAAAD0//j/AAAHAAoAAADz//j/AAAFAAoAAADy//j/AAAFAAkAAADx//j/AAAFAAoAAAAJAPn/AAAFAAkAAAD///j/AAAFAAkAAAD+//j/AAAIAAkAAAD9//j/AAAFAAkAAAD8//j/AAAIAAkAAAD7//j/AAAFAAoAAAD6//j/AAAFAAoAAAD5//j/AAAIAAoAAAD4//j/AAAIAAkAAAD3//j/AAAFAAkAAAAAAPj/AAAIAAoAAAABAPj/AAAHAAoAAAACAPj/AAAFAAoAAAADAPj/AAAHAAoAAAAEAPj/AAAIAAkAAAAFAPj/AAAHAAoAAAAGAPj/AAAAAAAAAAAHAPj/AAAIAAoAAAAIAPj/AAAHAAkAAAAJAPj/AAAFAAoAAAAKAPj/AAAAAAAAAAAEAPf/AAAHAAkAAAADAPf/AAAFAAkAAAACAPf/AAAHAAkAAAABAPf/AAAIAAoAAAAAAPf/AAAFAAkAAAD///f/AAAIAAoAAAD+//f/AAAHAAoAAAD9//f/AAAIAAoAAAD8//f/AAAIAAkAAAD7//f/AAAIAAoAAAD6//f/AAAIAAkAAAD5//f/AAAHAAoAAAD4//f/AAAIAAkAAAD3//f/AAAIAAoAAAD2//f/AAAIAAkAAAD1//f/AAAHAAkAAAD0//f/AAAFAAoAAADz//f/AAAFAAkAAAALAPj/AAAFAAoAAAAMAPj/AAAHAAoAAAANAPj/AAAFAAoAAAAOAPj/AAAHAAoAAAAPAPj/AAAHAAoAAAAQAPn/AAAIAAkAAAARAPn/AAAIAAkAAAASAPn/AAAFAAkAAAATAPn/AAAFAAoAAAAPAPn/AAAHAAoAAAAOAPn/AAAHAAoAAADx//7/AAADAAcAAADx//3/AAADAAcAAADx//z/AAADAAYAAADx//v/AAAFAAkAAADx//r/AAAFAAoAAADx//n/AAAAAAAAAADy//n/AAAFAAoAAADz//n/AAAAAAAAAADy//z/AAAEAAYAAADy//3/AAACAAoAAADy//7/AAAAAAEAAADy////AAADAAcAAADx////AAADAAcAAADx/wAAAAADAAcAAADx/wEAAAAAAAEAAADy/wEAAAACAAkAAADy/wAAAAADAAcAAADz/wAAAAACAAkAAADz////AAADAAcAAADz//7/AAADAAcAAADz//3/AAADAAYAAADz//z/AAAFAAoAAAD0//z/AAAIAAkAAAD0//3/AAAEAAYAAAD0//7/AAAEAAcAAAD0////AAAEAAcAAAD0/wAAAAAEAAgAAAD1////AAAAAAAAAAD1//7/AAAFAAoAAAD1//3/AAAFAAoAAAD1//z/AAAAAAAAAAD2//z/AAAIAAoAAAD2//3/AAAAAAAAAAD2//7/AAAHAAkAAAD2////AAAIAAkAAAD3////AAAHAAoAAADz/wEAAAAEAAgAAADy//f/AAAHAAoAAADx//f/AAAFAAoAAAAIAPf/AAAIAAoAAAAHAPf/AAAIAAoAAAAGAPf/AAAIAAkAAAAFAPf/AAAFAAkAAAAJAPf/AAAIAAoAAAAKAPf/AAAIAAkAAAALAPf/AAAHAAoAAAAMAPf/AAAHAAoAAAANAPf/AAAAAAAAAAAOAPf/AAAAAAAAAAAPAPf/AAAHAAkAAAAQAPf/AAAAAAAAAAAQAPj/AAAHAAkAAAARAPj/AAAHAAoAAAARAPf/AAAIAAkAAAASAPf/AAAAAAAAAAASAPj/AAAIAAoAAAATAPj/AAAFAAoAAAATAPf/AAAIAAoAAAAMAPn/AAAHAAkAAAALAPn/AAAIAAkAAAAKAPn/AAAFAAoAAAANAPn/AAAIAAkAAAASAPv/AAAFAAkAAAASAPr/AAAFAAoAAAARAPr/AAAHAAkAAAARAPv/AAAAAAAAAAAQAPv/AAAFAAkAAAAPAPv/AAAFAAkAAAAOAPv/AAAAAAAAAAANAPv/AAAAAAAAAAANAPz/AAAHAAkAAAAMAPz/AAAFAAkAAAANAP3/AAAFAAoAAAAOAP3/AAANABwAAAAOAPz/AAAAAAAAAAAPAPz/AAAFAAkAAAAPAP3/AAAFAAoAAAAPAP7/AAAHAAkAAAAOAP7/AAAIAAkAAAAOAP//AAAHAAkAAAANAP//AAAIAAoAAAAMAP//AAAIAAoAAAALAP//AAAHAAkAAAAKAP//AAAIAAoAAAAJAP//AAAAAAAAAAAIAP//AAACAAQAAAAJAAAAAAABAAMAAAAKAAAAAAABAAMAAAAKAAEAAAABAAQAAAALAAEAAAABAAQAAAALAAAAAAABAAMAAAAMAAAAAAABAAMAAAAMAAEAAAABAAQAAAANAAEAAAABAAQAAAANAAAAAAABAAMAAAAOAAAAAAABAAMAAAAOAAEAAAABAAQAAAAPAP//AAAIAAkAAAAQAP//AAAIAAoAAAAQAP7/AAAIAAoAAAAQAP3/AAAHAAkAAAAQAPz/AAAHAAoAAAARAPz/AAAIAAoAAAARAP3/AAAHAAoAAAARAP7/AAAAAAAAAAARAP//AAAAAAAAAAASAAEAAAABAAQAAAASAAAAAAABAAMAAAASAP//AAAFAAoAAAASAP7/AAAIAAkAAAASAP3/AAAAAAAAAAASAPz/AAAFAAoAAAATAPz/AAAAAAAAAAATAPv/AAAHAAoAAAATAPr/AAAIAAkAAAATAP3/AAAFAAoAAAATAP7/AAAAAAAAAAATAP//AAAHAAkAAAATAAAAAAABAAMAAAATAAEAAAABAAQAAADi//D/AAAAAAsAAADi//H/AAABAAoAAADi//L/AAABAAkAAADi//P/AAABAAoAAADi//T/AAABAAkAAADi//X/AAABAAoAAADi//b/AAABAAkAAADi//f/AAABAAoAAADi//j/AAABAAkAAADi//n/AAABAAoAAADi//r/AAABAAkAAADi//v/AAABAAoAAADi//z/AAABAAkAAADi//3/AAABAAkAAADi//7/AAABAAkAAADi////AAABAAkAAADi/wAAAAABAAMAAADi/wEAAAABAAQAAADi/wIAAAABAAUAAADi/wMAAAAHAAkAAADi/wQAAAABAAkAAADi/wUAAAABAAkAAADi/wYAAAABAAoAAADi/wcAAAABAAkAAADi/wgAAAABAAoAAADi/wkAAAABAAkAAADi/woAAAABAAoAAADi/wsAAAABAAkAAADi/wwAAAABAAoAAADi/w0AAAABAAkAAADi/w4AAAABAAoAAADi/w8AAAABAAkAAADi/xAAAAABAAoAAADi/xEAAAABAAkAAADi/xIAAAABAAoAAADi/xMAAAABAAkAAADi/xQAAAABAAoAAADi/xUAAAABAAkAAADi/xYAAAABAAoAAADi/xcAAAABAAkAAADi/xgAAAABAAoAAADi/xkAAAABAAkAAADi/xoAAAABAAoAAADi/xsAAAABAAkAAADi/xwAAAABAAoAAADi/x0AAAABAAkAAADi/x4AAAABAAoAAADi/x8AAAABAAkAAADi/yAAAAABAAoAAADi/yEAAAABAAkAAADi/yIAAAABAAoAAADi/yMAAAABAAkAAADi/yQAAAABAAoAAADi/yUAAAABAAkAAADi/yYAAAABAAoAAADi/ycAAAABAAkAAADi/ygAAAABAAoAAADi/ykAAAAIAA4AAADi/yoAAAARAAcAAADi/ysAAAABAAQAAADi/ywAAAABAAUAAADi/y0AAAABAAkAAADi/y4AAAABAAoAAADi/y8AAAABAAkAAADi/zAAAAABAAoAAADi/zEAAAABAAkAAADi/zIAAAABAAoAAADi/zMAAAABAAkAAADj//D/AAABAAsAAADj//H/AAAIAAoAAADj//L/AAAIAAoAAADj//P/AAAHAAoAAADj//T/AAAIAAkAAADj//X/AAAIAAoAAADj//b/AAAFAAkAAADj//f/AAAIAAoAAADj//j/AAAFAAkAAADj//n/AAAHAAoAAADj//r/AAAHAAkAAADj//v/AAAIAAkAAADj//z/AAAHAAkAAADj//3/AAAFAAoAAADj//7/AAAIAAoAAADj////AAAIAAoAAADj/wAAAAABAAMAAADj/wEAAAABAAQAAADj/wIAAAABAAUAAADj/wMAAAAHAAoAAADj/wQAAAAIAAoAAADj/wUAAAAAAAAAAADj/wYAAAAFAAoAAADj/wcAAAAFAAoAAADj/wgAAAAHAAoAAADj/wkAAAAAAAAAAADj/woAAAAFAAkAAADj/wsAAAAFAAoAAADj/wwAAAAFAAkAAADj/w0AAAAFAAoAAADj/w4AAAAHAAoAAADj/w8AAAAAAAAAAADj/xAAAAAHAAkAAADj/xEAAAAIAAoAAADj/xIAAAAAAAAAAADj/xMAAAAIAAoAAADj/xQAAAAFAAoAAADj/xUAAAAIAAkAAADj/xYAAAAFAAoAAADj/xcAAAAFAAoAAADj/xgAAAAAAAAAAADj/xkAAAAIAAkAAADj/xoAAAAIAAkAAADj/xsAAAAHAAoAAADj/xwAAAAHAAkAAADj/x0AAAAFAAkAAADj/x4AAAAHAAoAAADj/x8AAAAHAAoAAADj/yAAAAAHAAkAAADj/yEAAAAIAAoAAADj/yIAAAAIAAkAAADj/yMAAAAFAAkAAADj/yQAAAAHAAoAAADj/yUAAAAAAAAAAADj/yYAAAAFAAoAAADj/ycAAAAIAAoAAADj/ygAAAAFAAkAAADj/ykAAAABAAMAAADj/yoAAAABAAQAAADj/ysAAAABAAQAAADj/ywAAAABAAUAAADj/y0AAAAFAAkAAADj/y4AAAAIAAkAAADj/y8AAAAHAAoAAADj/zAAAAAIAAkAAADj/zEAAAAHAAkAAADj/zIAAAAIAAkAAADj/zMAAAAFAAkAAADk//D/AAABAAsAAADk//H/AAAHAAkAAADk//L/AAAHAAoAAADk//P/AAAIAAkAAADk//T/AAAFAAoAAADk//X/AAAIAAkAAADk//b/AAAHAAoAAADk//f/AAAFAAoAAADk//j/AAAIAAoAAADk//n/AAAHAAkAAADk//r/AAAIAAkAAADk//v/AAAFAAoAAADk//z/AAAFAAoAAADk//3/AAAIAAkAAADk//7/AAAIAAoAAADk////AAAAAAAAAADk/wAAAAABAAMAAADk/wEAAAABAAQAAADk/wIAAAABAAUAAADk/wMAAAAIAAkAAADk/wQAAAAAAAAAAADk/wUAAAAAAAAAAADk/wYAAAAIAAoAAADk/wcAAAAAAAAAAADk/wgAAAAAAAAAAADk/wkAAAAAAAAAAADk/woAAAAIAAkAAADk/wsAAAAHAAoAAADk/wwAAAAHAAoAAADk/w0AAAAFAAoAAADk/w4AAAAAAAAAAADk/w8AAAAAAAAAAADk/xAAAAAFAAoAAADk/xEAAAAFAAoAAADk/xIAAAAHAAoAAADk/xMAAAAAAAAAAADk/xQAAAAFAAoAAADk/xUAAAAIAAoAAADk/xYAAAAIAAoAAADk/xcAAAAFAAkAAADk/xgAAAAFAAoAAADk/xkAAAAAAAAAAADk/xoAAAAHAAoAAADk/xsAAAAHAAkAAADk/xwAAAAHAAkAAADk/x0AAAAFAAoAAADk/x4AAAAAAAAAAADk/x8AAAAFAAkAAADk/yAAAAAIAAkAAADk/yEAAAAHAAkAAADk/yIAAAAIAAoAAADk/yMAAAAFAAkAAADk/yQAAAAHAAkAAADk/yUAAAAIAAoAAADk/yYAAAAIAAoAAADk/ycAAAAFAAoAAADk/ygAAAAFAAoAAADk/ykAAAABAAMAAADk/yoAAAABAAQAAADk/ysAAAABAAQAAADk/ywAAAABAAUAAADk/y0AAAAHAAkAAADk/y4AAAAHAAoAAADk/y8AAAAHAAkAAADk/zAAAAAHAAkAAADk/zEAAAAHAAoAAADk/zIAAAAAAAAAAADk/zMAAAAHAAkAAADl//D/AAABAAsAAADl//H/AAAIAAkAAADl//L/AAAIAAoAAADl//P/AAAHAAkAAADl//T/AAAFAAoAAADl//X/AAAAAAAAAADl//b/AAAHAAoAAADl//f/AAAFAAoAAADl//j/AAAHAAoAAADl//n/AAAFAAkAAADl//r/AAAFAAkAAADl//v/AAAHAAkAAADl//z/AAAIAAkAAADl//3/AAAIAAoAAADl//7/AAAHAAoAAADl////AAAFAAoAAADl/wAAAAABAAMAAADl/wEAAAABAAQAAADl/wIAAAABAAUAAADl/wMAAAAFAAkAAADl/wQAAAAHAAoAAADl/wUAAAAHAAkAAADl/wYAAAAIAAoAAADl/wcAAAAIAAkAAADl/wgAAAAIAAoAAADl/wkAAAAIAAoAAADl/woAAAAHAAoAAADl/wsAAAAHAAkAAADl/wwAAAAIAAkAAADl/w0AAAAAAAAAAADl/w4AAAAIAAoAAADl/w8AAAAFAAoAAADl/xAAAAAIAAkAAADl/xEAAAAFAAoAAADl/xIAAAAFAAoAAADl/xMAAAAFAAoAAADl/xQAAAAFAAoAAADl/xUAAAAFAAkAAADl/xYAAAAHAAoAAADl/xcAAAAIAAkAAADl/xgAAAAIAAoAAADl/xkAAAAIAAoAAADl/xoAAAAFAAoAAADl/xsAAAAHAAkAAADl/xwAAAAHAAoAAADl/x0AAAAAAAAAAADl/x4AAAAIAAkAAADl/x8AAAAIAAoAAADl/yAAAAAIAAoAAADl/yEAAAAIAAkAAADl/yIAAAAHAAkAAADl/yMAAAAIAAoAAADl/yQAAAAFAAkAAADl/yUAAAAAAAAAAADl/yYAAAAHAAoAAADl/ycAAAAFAAkAAADl/ygAAAAAAAAAAADl/ykAAAABAAMAAADl/yoAAAABAAQAAADl/ysAAAABAAQAAADl/ywAAAABAAUAAADl/y0AAAAIAAkAAADl/y4AAAAAAAAAAADl/y8AAAAAAAAAAADl/zAAAAAHAAkAAADl/zEAAAAHAAkAAADl/zIAAAAFAAkAAADl/zMAAAAAAAAAAADm//D/AAABAAsAAADm//H/AAAIAAoAAADm//L/AAAFAAoAAADm//P/AAAHAAkAAADm//T/AAAIAAkAAADm//X/AAAHAAoAAADm//b/AAAFAAkAAADm//f/AAAFAAkAAADm//j/AAAHAAoAAADm//n/AAAHAAkAAADm//r/AAAAAAAAAADm//v/AAAHAAkAAADm//z/AAAAAAAAAADm//3/AAAIAAkAAADm//7/AAAAAAAAAADm////AAAIAAkAAADm/wAAAAABAAMAAADm/wEAAAABAAQAAADm/wIAAAABAAUAAADm/wMAAAAIAAkAAADm/wQAAAAHAAoAAADm/wUAAAAIAAoAAADm/wYAAAAHAAoAAADm/wcAAAAHAAkAAADm/wgAAAAIAAoAAADm/wkAAAAHAAoAAADm/woAAAAFAAoAAADm/wsAAAAIAAkAAADm/wwAAAAHAAkAAADm/w0AAAAIAAkAAADm/w4AAAAAAAAAAADm/w8AAAAIAAoAAADm/xAAAAAFAAkAAADm/xEAAAAFAAkAAADm/xIAAAAFAAoAAADm/xMAAAAIAAoAAADm/xQAAAAFAAkAAADm/xUAAAAFAAoAAADm/xYAAAAIAAoAAADm/xcAAAAFAAkAAADm/xgAAAAHAAoAAADm/xkAAAAIAAoAAADm/xoAAAAFAAkAAADm/xsAAAAFAAoAAADm/xwAAAAHAAoAAADm/x0AAAAIAAoAAADm/x4AAAAIAAoAAADm/x8AAAAIAAoAAADm/yAAAAAAAAAAAADm/yEAAAAFAAkAAADm/yIAAAAFAAoAAADm/yMAAAAHAAoAAADm/yQAAAAIAAoAAADm/yUAAAAFAAoAAADm/yYAAAAFAAoAAADm/ycAAAAAAAAAAADm/ygAAAAHAAkAAADm/ykAAAABAAMAAADm/yoAAAABAAQAAADm/ysAAAABAAQAAADm/ywAAAABAAYAAADm/y0AAAAAAAUAAADm/y4AAAAIAAoAAADm/y8AAAAIAAkAAADm/zAAAAAIAAoAAADm/zEAAAAHAAoAAADm/zIAAAAHAAkAAADm/zMAAAAIAAkAAADn//D/AAABAAsAAADn//H/AAAFAAoAAADn//L/AAAIAAoAAADn//P/AAAHAAkAAADn//T/AAAIAAkAAADn//X/AAAFAAoAAADn//b/AAAAAAAAAADn//f/AAAFAAoAAADn//j/AAAHAAkAAADn//n/AAAIAAkAAADn//r/AAAHAAoAAADn//v/AAAAAAAAAADn//z/AAAFAAkAAADn//3/AAAFAAkAAADn//7/AAAFAAoAAADn////AAAHAAoAAADn/wAAAAABAAMAAADn/wEAAAABAAQAAADn/wIAAAABAAUAAADn/wMAAAAFAAoAAADn/wQAAAAHAAoAAADn/wUAAAAHAAoAAADn/wYAAAAIAAoAAADn/wcAAAAAAAAAAADn/wgAAAAIAAoAAADn/wkAAAAHAAkAAADn/woAAAAHAAoAAADn/wsAAAAIAAoAAADn/wwAAAAHAAoAAADn/w0AAAAIAAoAAADn/w4AAAAFAAkAAADn/w8AAAAFAAoAAADn/xAAAAAFAAoAAADn/xEAAAAIAAoAAADn/xIAAAAHAAkAAADn/xMAAAAIAAoAAADn/xQAAAAAAAAAAADn/xUAAAAIAAkAAADn/xYAAAAFAAkAAADn/xcAAAAIAAoAAADn/xgAAAAHAAoAAADn/xkAAAAFAAkAAADn/xoAAAAHAAoAAADn/xsAAAAIAAkAAADn/xwAAAAFAAkAAADn/x0AAAAIAAoAAADn/x4AAAAHAAoAAADn/x8AAAAIAAoAAADn/yAAAAAHAAoAAADn/yEAAAAIAAoAAADn/yIAAAAIAAoAAADn/yMAAAAFAAoAAADn/yQAAAAIAAoAAADn/yUAAAAFAAoAAADn/yYAAAAHAAoAAADn/ycAAAAFAAoAAADn/ygAAAAIAAkAAADn/ykAAAABAAMAAADn/yoAAAABAAQAAADn/ysAAAABAAQAAADn/ywAAAABAAQAAADn/y0AAAABAAUAAADn/y4AAAAFAAkAAADn/y8AAAAHAAkAAADn/zAAAAAAAAAAAADn/zEAAAAFAAkAAADn/zIAAAAFAAoAAADn/zMAAAAFAAkAAADo//D/AAABAAsAAADo//H/AAAFAAkAAADo//L/AAAFAAkAAADo//P/AAAAAAAAAADo//T/AAAFAAoAAADo//X/AAAFAAoAAADo//b/AAAHAAkAAADo//f/AAAIAAkAAADo//j/AAAHAAkAAADo//n/AAAAAAAAAADo//r/AAAFAAkAAADo//v/AAAIAAkAAADo//z/AAAFAAkAAADo//3/AAAFAAoAAADo//7/AAAHAAkAAADo////AAAAAAAAAADo/wAAAAABAAMAAADo/wEAAAABAAQAAADo/wIAAAABAAYAAADo/wMAAAAAAAQAAADo/wQAAAAAAAQAAADo/wUAAAAAAAUAAADo/wYAAAAIAAkAAADo/wcAAAAFAAkAAADo/wgAAAAHAAkAAADo/wkAAAAFAAoAAADo/woAAAAHAAkAAADo/wsAAAAAAAAAAADo/wwAAAAFAAkAAADo/w0AAAAIAAoAAADo/w4AAAAIAAkAAADo/w8AAAAAAAAAAADo/xAAAAAAAAAAAADo/xEAAAAHAAoAAADo/xIAAAAHAAkAAADo/xMAAAAIAAoAAADo/xQAAAAFAAoAAADo/xUAAAAAAAAAAADo/xYAAAAIAAoAAADo/xcAAAAHAAkAAADo/xgAAAAFAAkAAADo/xkAAAAAAAAAAADo/xoAAAAFAAoAAADo/xsAAAAHAAoAAADo/xwAAAAAAAAAAADo/x0AAAAHAAoAAADo/x4AAAAFAAkAAADo/x8AAAAFAAkAAADo/yAAAAAIAAoAAADo/yEAAAAHAAoAAADo/yIAAAAFAAkAAADo/yMAAAAFAAkAAADo/yQAAAAIAAkAAADo/yUAAAAFAAoAAADo/yYAAAAAAAAAAADo/ycAAAAFAAkAAADo/ygAAAAHAAkAAADo/ykAAAABAAMAAADo/yoAAAABAAQAAADo/ysAAAABAAQAAADo/ywAAAABAAQAAADo/y0AAAABAAYAAADo/y4AAAAAAAUAAADo/y8AAAAHAAoAAADo/zAAAAAHAAoAAADo/zEAAAAAAAAAAADo/zIAAAAIAAoAAADo/zMAAAAAAAAAAADp//D/AAABAAsAAADp//H/AAAFAAoAAADp//L/AAAFAAkAAADp//P/AAAAAAAAAADp//T/AAAHAAkAAADp//X/AAAFAAoAAADp//b/AAAFAAoAAADp//f/AAAFAAkAAADp//j/AAAHAAoAAADp//n/AAAFAAkAAADp//r/AAAFAAoAAADp//v/AAAFAAoAAADp//z/AAAAAAAAAADp//3/AAAAAAAAAADp//7/AAAFAAkAAADp////AAAHAAoAAADp/wAAAAABAAMAAADp/wEAAAABAAQAAADp/wIAAAABAAQAAADp/wMAAAABAAQAAADp/wQAAAABAAQAAADp/wUAAAABAAYAAADp/wYAAAAAAAQAAADp/wcAAAAAAAUAAADp/wgAAAAFAAoAAADp/wkAAAAAAAAAAADp/woAAAAHAAkAAADp/wsAAAAFAAoAAADp/wwAAAAFAAoAAADp/w0AAAAFAAoAAADp/w4AAAAAAAAAAADp/w8AAAAIAAoAAADp/xAAAAAHAAoAAADp/xEAAAAFAAoAAADp/xIAAAAIAAkAAADp/xMAAAAFAAoAAADp/xQAAAAFAAkAAADp/xUAAAAFAAoAAADp/xYAAAAIAAoAAADp/xcAAAAHAAoAAADp/xgAAAAAAAAAAADp/xkAAAAFAAoAAADp/xoAAAAFAAkAAADp/xsAAAAAAAAAAADp/xwAAAAHAAkAAADp/x0AAAAFAAoAAADp/x4AAAAHAAkAAADp/x8AAAAIAAoAAADp/yAAAAAIAAkAAADp/yEAAAAAAAAAAADp/yIAAAAIAAkAAADp/yMAAAAIAAkAAADp/yQAAAAFAAoAAADp/yUAAAAAAAAAAADp/yYAAAAFAAkAAADp/ycAAAAIAAoAAADp/ygAAAAFAAoAAADp/ykAAAACAAMAAADp/yoAAAAAAAcAAADp/ysAAAABAAQAAADp/ywAAAABAAQAAADp/y0AAAABAAQAAADp/y4AAAABAAUAAADp/y8AAAAIAAoAAADp/zAAAAAFAAkAAADp/zEAAAAHAAkAAADp/zIAAAAFAAoAAADp/zMAAAAAAAAAAADq//D/AAABAAsAAADq//H/AAAFAAoAAADq//L/AAAIAAoAAADq//P/AAAAAAAAAADq//T/AAAIAAoAAADq//X/AAAHAAoAAADq//b/AAAFAAkAAADq//f/AAAHAAkAAADq//j/AAAAAAAAAADq//n/AAAHAAkAAADq//r/AAAAAAAAAADq//v/AAAFAAkAAADq//z/AAAFAAkAAADq//3/AAAFAAkAAADq//7/AAAFAAoAAADq////AAAIAAkAAADq/wAAAAACAAMAAADq/wEAAAACAAQAAADq/wIAAAACAAQAAADq/wMAAAACAAQAAADq/wQAAAAAAAcAAADq/wUAAAABAAQAAADq/wYAAAABAAQAAADq/wcAAAABAAYAAADq/wgAAAAAAAUAAADq/wkAAAAIAAoAAADq/woAAAAAAAAAAADq/wsAAAAIAAoAAADq/wwAAAAHAAoAAADq/w0AAAAIAAkAAADq/w4AAAAFAAoAAADq/w8AAAAIAAkAAADq/xAAAAAHAAoAAADq/xEAAAAHAAkAAADq/xIAAAAFAAkAAADq/xMAAAAHAAoAAADq/xQAAAAHAAoAAADq/xUAAAAFAAoAAADq/xYAAAAHAAoAAADq/xcAAAAIAAkAAADq/xgAAAAAAAAAAADq/xkAAAAHAAkAAADq/xoAAAAHAAkAAADq/xsAAAAHAAoAAADq/xwAAAAAAAAAAADq/x0AAAAHAAkAAADq/x4AAAAFAAoAAADq/x8AAAAIAAkAAADq/yAAAAAAAAAAAADq/yEAAAAAAAAAAADq/yIAAAAFAAoAAADq/yMAAAAIAAkAAADq/yQAAAAIAAkAAADq/yUAAAAIAAoAAADq/yYAAAAFAAkAAADq/ycAAAAIAAkAAADq/ygAAAAHAAoAAADq/ykAAAAFAAoAAADq/yoAAAACAAMAAADq/ysAAAAAAAcAAADq/ywAAAABAAQAAADq/y0AAAABAAQAAADq/y4AAAABAAYAAADq/y8AAAAAAAUAAADq/zAAAAAIAAoAAADq/zEAAAAHAAkAAADq/zIAAAAFAAkAAADq/zMAAAAAAAAAAADr//D/AAABAAsAAADr//H/AAAAAAAAAADr//L/AAAIAAkAAADr//P/AAAIAAkAAADr//T/AAAHAAoAAADr//X/AAAFAAkAAADr//b/AAAHAAkAAADr//f/AAAIAAoAAADr//j/AAAIAAkAAADr//n/AAAFAAoAAADr//r/AAAIAAkAAADr//v/AAAIAAoAAADr//z/AAAIAAoAAADr//3/AAAFAAkAAADr//7/AAAFAAkAAADr////AAAAAAAAAADr/wAAAAAHAAkAAADr/wEAAAAFAAoAAADr/wIAAAAIAAoAAADr/wMAAAAFAAoAAADr/wQAAAACAAMAAADr/wUAAAAAAAcAAADr/wYAAAABAAQAAADr/wcAAAABAAQAAADr/wgAAAABAAYAAADr/wkAAAAAAAUAAADr/woAAAAIAAoAAADr/wsAAAAIAAoAAADr/wwAAAAIAAkAAADr/w0AAAAFAAoAAADr/w4AAAAFAAoAAADr/w8AAAAIAAkAAADr/xAAAAAFAAkAAADr/xEAAAAFAAkAAADr/xIAAAAIAAoAAADr/xMAAAAFAAkAAADr/xQAAAAHAAoAAADr/xUAAAAHAAoAAADr/xYAAAAIAAkAAADr/xcAAAAIAAkAAADr/xgAAAAHAAoAAADr/xkAAAAIAAoAAADr/xoAAAAFAAoAAADr/xsAAAAIAAoAAADr/xwAAAAHAAkAAADr/x0AAAAAAAAAAADr/x4AAAAFAAoAAADr/x8AAAAAAAAAAADr/yAAAAAAAAAAAADr/yEAAAAHAAkAAADr/yIAAAAFAAkAAADr/yMAAAAAAAAAAADr/yQAAAAIAAkAAADr/yUAAAAIAAkAAADr/yYAAAAFAAkAAADr/ycAAAAAAAAAAADr/ygAAAAFAAkAAADr/ykAAAAHAAoAAADr/yoAAAAIAAoAAADr/ysAAAACAAMAAADr/ywAAAAAAAcAAADr/y0AAAABAAQAAADr/y4AAAABAAQAAADr/y8AAAABAAUAAADr/zAAAAAHAAoAAADr/zEAAAAFAAoAAADr/zIAAAAFAAoAAADr/zMAAAAAAAAAAADs//D/AAABAAsAAADs//H/AAAFAAkAAADs//L/AAAAAAAAAADs//P/AAAIAAkAAADs//T/AAAIAAoAAADs//X/AAAHAAoAAADs//b/AAAHAAoAAADs//f/AAAIAAoAAADs//j/AAAFAAkAAADs//n/AAAIAAoAAADs//r/AAAAAAAAAADs//v/AAAAAAAAAADs//z/AAAIAAkAAADs//3/AAAIAAkAAADs//7/AAAFAAkAAADs////AAAFAAkAAADs/wAAAAAFAAoAAADs/wEAAAAIAAoAAADs/wIAAAAIAAkAAADs/wMAAAAFAAoAAADs/wQAAAAIAAoAAADs/wUAAAACAAMAAADs/wYAAAAAAAcAAADs/wcAAAABAAQAAADs/wgAAAABAAQAAADs/wkAAAABAAYAAADs/woAAAAAAAUAAADs/wsAAAAFAAoAAADs/wwAAAAIAAoAAADs/w0AAAAIAAkAAADs/w4AAAAIAAoAAADs/w8AAAAHAAoAAADs/xAAAAAIAAoAAADs/xEAAAAHAAkAAADs/xIAAAAAAAAAAADs/xMAAAAHAAoAAADs/xQAAAAHAAkAAADs/xUAAAAHAAkAAADs/xYAAAAIAAkAAADs/xcAAAAAAAAAAADs/xgAAAAFAAoAAADs/xkAAAAHAAoAAADs/xoAAAAHAAkAAADs/xsAAAAHAAkAAADs/xwAAAAFAAoAAADs/x0AAAAHAAkAAADs/x4AAAAHAAoAAADs/x8AAAAHAAoAAADs/yAAAAAHAAkAAADs/yEAAAAIAAoAAADs/yIAAAAIAAoAAADs/yMAAAAFAAoAAADs/yQAAAAHAAkAAADs/yUAAAAHAAoAAADs/yYAAAAHAAkAAADs/ycAAAAIAAkAAADs/ygAAAAAAAAAAADs/ykAAAAIAAkAAADs/yoAAAAHAAoAAADs/ysAAAAHAAoAAADs/ywAAAABAAMAAADs/y0AAAABAAQAAADs/y4AAAABAAQAAADs/y8AAAABAAYAAADs/zAAAAAAAAUAAADs/zEAAAAIAAkAAADs/zIAAAAHAAkAAADs/zMAAAAIAAoAAADt//D/AAABAAsAAADt//H/AAAIAAoAAADt//L/AAAIAAoAAADt//P/AAAHAAoAAADt//T/AAAAAAAAAADt//X/AAAAAAAAAADt//b/AAAAAAAAAADt//f/AAAIAAkAAADt//j/AAAIAAkAAADt//n/AAAIAAkAAADt//r/AAAAAAAAAADt//v/AAAHAAoAAADt//z/AAAAAAAAAADt//3/AAAFAAkAAADt//7/AAAFAAkAAADt////AAAIAAoAAADt/wAAAAAFAAoAAADt/wEAAAAIAAoAAADt/wIAAAAIAAoAAADt/wMAAAAFAAoAAADt/wQAAAAIAAoAAADt/wUAAAAFAAoAAADt/wYAAAACAAMAAADt/wcAAAAAAAcAAADt/wgAAAABAAQAAADt/wkAAAABAAQAAADt/woAAAABAAYAAADt/wsAAAAAAAUAAADt/wwAAAAIAAoAAADt/w0AAAAIAAkAAADt/w4AAAAFAAoAAADt/w8AAAAIAAoAAADt/xAAAAAAAAAAAADt/xEAAAAHAAoAAADt/xIAAAAHAAkAAADt/xMAAAAFAAoAAADt/xQAAAAAAAAAAADt/xUAAAAFAAoAAADt/xYAAAAHAAoAAADt/xcAAAAAAAAAAADt/xgAAAAIAAoAAADt/xkAAAAIAAkAAADt/xoAAAAIAAoAAADt/xsAAAAHAAkAAADt/xwAAAAHAAkAAADt/x0AAAAHAAoAAADt/x4AAAAFAAoAAADt/x8AAAAAAAAAAADt/yAAAAAFAAoAAADt/yEAAAAHAAkAAADt/yIAAAAAAAAAAADt/yMAAAAIAAkAAADt/yQAAAAIAAoAAADt/yUAAAAFAAoAAADt/yYAAAAFAAoAAADt/ycAAAAFAAkAAADt/ygAAAAFAAoAAADt/ykAAAAFAAkAAADt/yoAAAAHAAkAAADt/ysAAAAIAAoAAADt/ywAAAABAAMAAADt/y0AAAABAAQAAADt/y4AAAABAAQAAADt/y8AAAABAAQAAADt/zAAAAABAAUAAADt/zEAAAAHAAoAAADt/zIAAAAIAAkAAADt/zMAAAAHAAoAAADu//D/AAABAAsAAADu//H/AAAIAAoAAADu//L/AAAIAAoAAADu//P/AAAFAAoAAADu//T/AAAHAAoAAADu//X/AAAIAAkAAADu//b/AAAIAAoAAADu//f/AAAFAAoAAADu//j/AAAFAAkAAADu//n/AAAHAAoAAADu//r/AAAFAAkAAADu//v/AAAHAAkAAADu//z/AAAIAAoAAADu//3/AAACAAYAAADu//7/AAACAAcAAADu////AAACAAcAAADu/wAAAAACAAgAAADu/wEAAAAAAAAAAADu/wIAAAAFAAkAAADu/wMAAAAIAAkAAADu/wQAAAAFAAkAAADu/wUAAAAFAAoAAADu/wYAAAAIAAoAAADu/wcAAAACAAMAAADu/wgAAAAAAAcAAADu/wkAAAABAAQAAADu/woAAAABAAQAAADu/wsAAAABAAUAAADu/wwAAAAFAAkAAADu/w0AAAAFAAkAAADu/w4AAAAIAAoAAADu/w8AAAAIAAoAAADu/xAAAAAHAAkAAADu/xEAAAAAAAAAAADu/xIAAAAAAAAAAADu/xMAAAAAAAAAAADu/xQAAAAFAAkAAADu/xUAAAAHAAkAAADu/xYAAAAHAAkAAADu/xcAAAAFAAkAAADu/xgAAAAIAAoAAADu/xkAAAAIAAoAAADu/xoAAAAFAAoAAADu/xsAAAAIAAkAAADu/xwAAAAHAAkAAADu/x0AAAAHAAkAAADu/x4AAAAFAAoAAADu/x8AAAAFAAkAAADu/yAAAAAFAAoAAADu/yEAAAAIAAoAAADu/yIAAAAAAAAAAADu/yMAAAAFAAoAAADu/yQAAAAFAAoAAADu/yUAAAAFAAoAAADu/yYAAAAFAAkAAADu/ycAAAAAAAAAAADu/ygAAAAHAAkAAADu/ykAAAAHAAoAAADu/yoAAAAIAAkAAADu/ysAAAAIAAkAAADu/ywAAAACAAMAAADu/y0AAAAAAAcAAADu/y4AAAABAAQAAADu/y8AAAABAAQAAADu/zAAAAABAAUAAADu/zEAAAAAAAAAAADu/zIAAAAAAAAAAADu/zMAAAAFAAoAAADv//D/AAABAAsAAADv//H/AAAFAAoAAADv//L/AAAHAAkAAADv//P/AAAIAAkAAADv//T/AAAIAAkAAADv//X/AAAAAAAAAADv//b/AAAFAAkAAADv//f/AAAHAAoAAADv//j/AAAFAAoAAADv//n/AAAIAAoAAADv//r/AAAAAAAAAADv//v/AAAFAAkAAADv//z/AAACAAYAAADv//3/AAADAAoAAADv//7/AAADAAcAAADv////AAAAAAEAAADv/wAAAAADAAkAAADv/wEAAAACAAgAAADv/wIAAAAIAAoAAADv/wMAAAAHAAkAAADv/wQAAAAFAAkAAADv/wUAAAAHAAoAAADv/wYAAAAFAAkAAADv/wcAAAAHAAoAAADv/wgAAAACAAMAAADv/wkAAAAAAAcAAADv/woAAAABAAQAAADv/wsAAAABAAYAAADv/wwAAAAAAAUAAADv/w0AAAAIAAkAAADv/w4AAAAFAAkAAADv/w8AAAAFAAoAAADv/xAAAAAFAAoAAADv/xEAAAAIAAoAAADv/xIAAAAAAAAAAADv/xMAAAAAAAAAAADv/xQAAAAFAAkAAADv/xUAAAAHAAoAAADv/xYAAAAHAAoAAADv/xcAAAAHAAkAAADv/xgAAAAHAAoAAADv/xkAAAAHAAoAAADv/xoAAAAFAAkAAADv/xsAAAAAAAAAAADv/xwAAAAFAAkAAADv/x0AAAAIAAkAAADv/x4AAAAHAAoAAADv/x8AAAAHAAoAAADv/yAAAAAIAAkAAADv/yEAAAAFAAkAAADv/yIAAAAAAAAAAADv/yMAAAAFAAoAAADv/yQAAAAAAAAAAADv/yUAAAAHAAoAAADv/yYAAAAIAAkAAADv/ycAAAAIAAoAAADv/ygAAAAHAAkAAADv/ykAAAAIAAkAAADv/yoAAAAFAAoAAADv/ysAAAAFAAoAAADv/ywAAAAAAAMAAADv/y0AAAABAAcAAADv/y4AAAABAAQAAADv/y8AAAABAAQAAADv/zAAAAABAAUAAADv/zEAAAAHAAoAAADv/zIAAAAIAAoAAADv/zMAAAAHAAoAAADw//D/AAABAAsAAADw//H/AAAIAAoAAADw//L/AAAHAAoAAADw//P/AAAHAAoAAADw//T/AAAHAAoAAADw//X/AAAIAAoAAADw//b/AAAHAAkAAADw//f/AAAFAAkAAADw//j/AAAAAAAAAADw//n/AAAHAAkAAADw//r/AAAIAAkAAADw//v/AAAIAAkAAADw//z/AAADAAYAAADw//3/AAAAAAEAAADw//7/AAADAAcAAADw////AAADAAcAAADw/wAAAAADAAcAAADw/wEAAAADAAkAAADw/wIAAAACAAgAAADw/wMAAAAHAAoAAADw/wQAAAAAAAAAAADw/wUAAAAHAAoAAADw/wYAAAAFAAkAAADw/wcAAAAHAAkAAADw/wgAAAAHAAkAAADw/wkAAAABAAMAAADw/woAAAABAAQAAADw/wsAAAABAAQAAADw/wwAAAABAAYAAADw/w0AAAAAAAQAAADw/w4AAAAAAAUAAADw/w8AAAAAAAAAAADw/xAAAAAFAAoAAADw/xEAAAAAAAAAAADw/xIAAAAAAAAAAADw/xMAAAAHAAoAAADw/xQAAAAFAAoAAADw/xUAAAAHAAkAAADw/xYAAAAFAAoAAADw/xcAAAAAAAAAAADw/xgAAAAIAAkAAADw/xkAAAAHAAkAAADw/xoAAAAAAAAAAADw/xsAAAAHAAoAAADw/xwAAAAAAAAAAADw/x0AAAAFAAkAAADw/x4AAAAIAAkAAADw/x8AAAAHAAoAAADw/yAAAAAIAAoAAADw/yEAAAAAAAAAAADw/yIAAAAFAAoAAADw/yMAAAAAAAAAAADw/yQAAAAHAAkAAADw/yUAAAAIAAkAAADw/yYAAAAFAAoAAADw/ycAAAAIAAoAAADw/ygAAAAIAAoAAADw/ykAAAAIAAkAAADw/yoAAAAHAAkAAADw/ysAAAAIAAkAAADw/ywAAAABAAMAAADw/y0AAAABAAQAAADw/y4AAAABAAQAAADw/y8AAAABAAQAAADw/zAAAAABAAUAAADw/zEAAAAIAAoAAADw/zIAAAAAAAAAAADw/zMAAAAIAAoAAADx//D/AAABAAsAAADx//H/AAAHAAkAAADx//L/AAAFAAkAAADx//P/AAAHAAoAAADx//T/AAAHAAkAAADx//X/AAAHAAkAAADx//b/AAAAAAAAAADx/wIAAAADAAgAAADx/wMAAAAIAAoAAADx/wQAAAAHAAoAAADx/wUAAAAHAAoAAADx/wYAAAAHAAkAAADx/wcAAAAHAAkAAADx/wgAAAAFAAkAAADx/wkAAAABAAMAAADx/woAAAABAAQAAADx/wsAAAABAAQAAADx/wwAAAABAAQAAADx/w0AAAABAAQAAADx/w4AAAABAAYAAADx/w8AAAAAAAQAAADx/xAAAAAAAAQAAADx/xEAAAAAAAUAAADx/xIAAAAIAAkAAADx/xMAAAAFAAkAAADx/xQAAAAIAAoAAADx/xUAAAAFAAkAAADx/xYAAAAIAAoAAADx/xcAAAAIAAkAAADx/xgAAAAAAAAAAADx/xkAAAAAAAAAAADx/xoAAAAAAAAAAADx/xsAAAAHAAkAAADx/xwAAAAIAAkAAADx/x0AAAAIAAkAAADx/x4AAAAIAAoAAADx/x8AAAAHAAkAAADx/yAAAAAIAAkAAADx/yEAAAAAAAAAAADx/yIAAAAIAAoAAADx/yMAAAAHAAoAAADx/yQAAAAIAAkAAADx/yUAAAAHAAoAAADx/yYAAAAIAAoAAADx/ycAAAAFAAkAAADx/ygAAAAHAAoAAADx/ykAAAAAAAAAAADx/yoAAAAFAAkAAADx/ysAAAAIAAoAAADx/ywAAAABAAMAAADx/y0AAAABAAQAAADx/y4AAAABAAQAAADx/y8AAAABAAQAAADx/zAAAAABAAUAAADx/zEAAAAIAAkAAADx/zIAAAAHAAoAAADx/zMAAAAAAAAAAADy//D/AAABAAsAAADy//H/AAAFAAoAAADy//L/AAAFAAkAAADy//P/AAAIAAkAAADy//T/AAAFAAoAAADy//X/AAAHAAkAAADy//b/AAAIAAkAAADy/wIAAAAEAAgAAADy/wMAAAAFAAoAAADy/wQAAAAIAAoAAADy/wUAAAAHAAoAAADy/wYAAAAHAAkAAADy/wcAAAAHAAoAAADy/wgAAAAAAAMAAADy/wkAAAABAAcAAADy/woAAAABAAQAAADy/wsAAAABAAQAAADy/wwAAAABAAQAAADy/w0AAAABAAQAAADy/w4AAAABAAQAAADy/w8AAAABAAQAAADy/xAAAAABAAQAAADy/xEAAAABAAYAAADy/xIAAAAAAAQAAADy/xMAAAAAAAQAAADy/xQAAAAAAAUAAADy/xUAAAAHAAkAAADy/xYAAAAHAAkAAADy/xcAAAAIAAkAAADy/xgAAAAIAAkAAADy/xkAAAAHAAkAAADy/xoAAAAIAAoAAADy/xsAAAAAAAAAAADy/xwAAAAFAAkAAADy/x0AAAAFAAkAAADy/x4AAAAAAAAAAADy/x8AAAAFAAoAAADy/yAAAAAFAAoAAADy/yEAAAAAAAAAAADy/yIAAAAFAAoAAADy/yMAAAAAAAAAAADy/yQAAAAIAAkAAADy/yUAAAAHAAoAAADy/yYAAAAAAAAAAADy/ycAAAAHAAkAAADy/ygAAAAIAAoAAADy/ykAAAAFAAkAAADy/yoAAAAIAAoAAADy/ysAAAAAAAAAAADy/ywAAAABAAMAAADy/y0AAAABAAQAAADy/y4AAAABAAQAAADy/y8AAAABAAQAAADy/zAAAAABAAUAAADy/zEAAAAIAAkAAADy/zIAAAAFAAoAAADy/zMAAAAIAAoAAADz//D/AAABAAsAAADz//H/AAAIAAoAAADz//L/AAAHAAoAAADz//P/AAAFAAkAAADz//T/AAAFAAoAAADz//X/AAAFAAoAAADz//b/AAAHAAoAAADz/wIAAAAAAAAAAADz/wMAAAAHAAoAAADz/wQAAAAIAAkAAADz/wUAAAAHAAkAAADz/wYAAAAIAAkAAADz/wcAAAAIAAkAAADz/wgAAAABAAMAAADz/wkAAAABAAQAAADz/woAAAABAAQAAADz/wsAAAAAAAYAAADz/wwAAAACAAQAAADz/w0AAAAAAAcAAADz/w4AAAABAAQAAADz/w8AAAABAAQAAADz/xAAAAABAAQAAADz/xEAAAABAAQAAADz/xIAAAABAAQAAADz/xMAAAABAAQAAADz/xQAAAABAAYAAADz/xUAAAAAAAQAAADz/xYAAAAAAAUAAADz/xcAAAAAAAAAAADz/xgAAAAHAAoAAADz/xkAAAAAAAAAAADz/xoAAAAFAAkAAADz/xsAAAAFAAkAAADz/xwAAAAHAAkAAADz/x0AAAAAAAAAAADz/x4AAAAFAAoAAADz/x8AAAAFAAkAAADz/yAAAAAIAAkAAADz/yEAAAAIAAkAAADz/yIAAAAAAAAAAADz/yMAAAAFAAoAAADz/yQAAAAFAAoAAADz/yUAAAAIAAkAAADz/yYAAAAIAAoAAADz/ycAAAAIAAkAAADz/ygAAAAIAAkAAADz/ykAAAAHAAoAAADz/yoAAAAIAAkAAADz/ysAAAAAAAMAAADz/ywAAAABAAcAAADz/y0AAAABAAQAAADz/y4AAAABAAQAAADz/y8AAAABAAQAAADz/zAAAAABAAUAAADz/zEAAAAHAAoAAADz/zIAAAAIAAkAAADz/zMAAAAHAAoAAAD0//D/AAABAAsAAAD0//H/AAAFAAoAAAD0//L/AAAFAAkAAAD0//P/AAAFAAkAAAD0//T/AAAAAAAAAAD0//X/AAAFAAkAAAD0//b/AAAHAAoAAAD0/wIAAAAFAAkAAAD0/wMAAAAHAAoAAAD0/wQAAAANABwAAAD0/wUAAAAHAAkAAAD0/wYAAAAFAAkAAAD0/wcAAAAAAAMAAAD0/wgAAAABAAcAAAD0/wkAAAABAAQAAAD0/woAAAAAAAYAAAD0/wsAAAACAAUAAAD0/wwAAAAHAAkAAAD0/w0AAAACAAMAAAD0/w4AAAACAAQAAAD0/w8AAAAAAAcAAAD0/xAAAAABAAQAAAD0/xEAAAABAAQAAAD0/xIAAAABAAQAAAD0/xMAAAABAAQAAAD0/xQAAAABAAQAAAD0/xUAAAABAAQAAAD0/xYAAAABAAYAAAD0/xcAAAAAAAQAAAD0/xgAAAAAAAUAAAD0/xkAAAAHAAkAAAD0/xoAAAAAAAAAAAD0/xsAAAAIAAkAAAD0/xwAAAAFAAoAAAD0/x0AAAAIAAoAAAD0/x4AAAAHAAkAAAD0/x8AAAAIAAkAAAD0/yAAAAAIAAkAAAD0/yEAAAAHAAoAAAD0/yIAAAAFAAkAAAD0/yMAAAAIAAkAAAD0/yQAAAAAAAAAAAD0/yUAAAAIAAoAAAD0/yYAAAAAAAAAAAD0/ycAAAAFAAkAAAD0/ygAAAAIAAoAAAD0/ykAAAAHAAkAAAD0/yoAAAAHAAoAAAD0/ysAAAABAAMAAAD0/ywAAAABAAQAAAD0/y0AAAABAAQAAAD0/y4AAAABAAQAAAD0/y8AAAAAAAYAAAD0/zAAAAACAAUAAAD0/zEAAAAFAAkAAAD0/zIAAAAIAAoAAAD0/zMAAAAIAAoAAAD1//D/AAABAAsAAAD1//H/AAAFAAkAAAD1//L/AAAIAAkAAAD1//P/AAAFAAkAAAD1//T/AAAHAAkAAAD1//X/AAAAAAAAAAD1//b/AAAHAAkAAAD1/wIAAAAFAAoAAAD1/wMAAAAHAAoAAAD1/wQAAAAFAAkAAAD1/wUAAAAIAAkAAAD1/wYAAAAAAAMAAAD1/wcAAAABAAcAAAD1/wgAAAABAAQAAAD1/wkAAAABAAQAAAD1/woAAAABAAUAAAD1/wsAAAAAAAAAAAD1/wwAAAAIAAoAAAD1/w0AAAAIAAoAAAD1/w4AAAAIAAoAAAD1/w8AAAACAAMAAAD1/xAAAAAAAAcAAAD1/xEAAAABAAQAAAD1/xIAAAABAAQAAAD1/xMAAAABAAQAAAD1/xQAAAABAAQAAAD1/xUAAAABAAQAAAD1/xYAAAABAAQAAAD1/xcAAAABAAQAAAD1/xgAAAABAAYAAAD1/xkAAAAAAAQAAAD1/xoAAAAAAAUAAAD1/xsAAAAFAAkAAAD1/xwAAAAFAAoAAAD1/x0AAAAFAAkAAAD1/x4AAAAIAAkAAAD1/x8AAAAAAAAAAAD1/yAAAAAHAAoAAAD1/yEAAAAAAAAAAAD1/yIAAAAIAAoAAAD1/yMAAAAIAAkAAAD1/yQAAAAFAAoAAAD1/yUAAAAFAAkAAAD1/yYAAAAHAAoAAAD1/ycAAAAAAAAAAAD1/ygAAAAIAAkAAAD1/ykAAAAFAAkAAAD1/yoAAAAAAAMAAAD1/ysAAAABAAcAAAD1/ywAAAABAAQAAAD1/y0AAAABAAQAAAD1/y4AAAAAAAYAAAD1/y8AAAACAAUAAAD1/zAAAAAAAAAAAAD1/zEAAAAHAAoAAAD1/zIAAAAFAAoAAAD1/zMAAAAHAAoAAAD2//D/AAABAAsAAAD2//H/AAAAAAAAAAD2//L/AAAHAAoAAAD2//P/AAAAAAAAAAD2//T/AAAAAAAAAAD2//X/AAAHAAoAAAD2//b/AAAAAAAAAAD2/wIAAAAAAAAAAAD2/wMAAAAAAAAAAAD2/wQAAAAAAAMAAAD2/wUAAAAAAAQAAAD2/wYAAAABAAcAAAD2/wcAAAABAAQAAAD2/wgAAAABAAQAAAD2/wkAAAAAAAYAAAD2/woAAAACAAUAAAD2/wsAAAAAAAAAAAD2/wwAAAAIAAkAAAD2/w0AAAAFAAoAAAD2/w4AAAAFAAoAAAD2/w8AAAAFAAoAAAD2/xAAAAACAAMAAAD2/xEAAAACAAQAAAD2/xIAAAACAAQAAAD2/xMAAAACAAQAAAD2/xQAAAAAAAcAAAD2/xUAAAABAAQAAAD2/xYAAAABAAQAAAD2/xcAAAABAAQAAAD2/xgAAAABAAQAAAD2/xkAAAABAAQAAAD2/xoAAAABAAYAAAD2/xsAAAAAAAUAAAD2/xwAAAAFAAkAAAD2/x0AAAAFAAkAAAD2/x4AAAAHAAkAAAD2/x8AAAAFAAkAAAD2/yAAAAAFAAkAAAD2/yEAAAAFAAkAAAD2/yIAAAAIAAkAAAD2/yMAAAAFAAkAAAD2/yQAAAAFAAkAAAD2/yUAAAAFAAkAAAD2/yYAAAAAAAAAAAD2/ycAAAAIAAkAAAD2/ygAAAAHAAoAAAD2/ykAAAAAAAMAAAD2/yoAAAABAAcAAAD2/ysAAAABAAQAAAD2/ywAAAABAAQAAAD2/y0AAAAAAAYAAAD2/y4AAAACAAUAAAD2/y8AAAAFAAoAAAD2/zAAAAAFAAkAAAD2/zEAAAAFAAoAAAD2/zIAAAAFAAkAAAD2/zMAAAAHAAkAAAD3//D/AAABAAsAAAD3//H/AAAFAAoAAAD3//L/AAAFAAkAAAD3//P/AAAFAAkAAAD3//T/AAAIAAoAAAD3//X/AAAIAAoAAAD3//b/AAAIAAkAAAD3/wIAAAAAAAMAAAD3/wMAAAAAAAQAAAD3/wQAAAABAAcAAAD3/wUAAAABAAQAAAD3/wYAAAABAAQAAAD3/wcAAAABAAQAAAD3/wgAAAAAAAYAAAD3/wkAAAACAAUAAAD3/woAAAAHAAkAAAD3/wsAAAAIAAkAAAD3/wwAAAAIAAkAAAD3/w0AAAAIAAkAAAD3/w4AAAAHAAkAAAD3/w8AAAAHAAoAAAD3/xAAAAAIAAkAAAD3/xEAAAAIAAkAAAD3/xIAAAAAAAAAAAD3/xMAAAAHAAoAAAD3/xQAAAACAAMAAAD3/xUAAAACAAQAAAD3/xYAAAAAAAcAAAD3/xcAAAABAAQAAAD3/xgAAAABAAQAAAD3/xkAAAABAAQAAAD3/xoAAAABAAQAAAD3/xsAAAABAAYAAAD3/xwAAAAAAAUAAAD3/x0AAAAHAAoAAAD3/x4AAAAHAAkAAAD3/x8AAAAHAAoAAAD3/yAAAAAFAAoAAAD3/yEAAAAFAAoAAAD3/yIAAAAIAAkAAAD3/yMAAAAHAAkAAAD3/yQAAAAFAAkAAAD3/yUAAAAFAAkAAAD3/yYAAAAHAAoAAAD3/ycAAAAHAAkAAAD3/ygAAAAHAAoAAAD3/ykAAAABAAMAAAD3/yoAAAABAAQAAAD3/ysAAAABAAQAAAD3/ywAAAABAAQAAAD3/y0AAAABAAUAAAD3/y4AAAAHAAkAAAD3/y8AAAAFAAkAAAD3/zAAAAAHAAoAAAD3/zEAAAAIAAoAAAD3/zIAAAAIAAkAAAD3/zMAAAAAAAAAAAD4//D/AAABAAsAAAD4//H/AAAIAAoAAAD4//L/AAAIAAkAAAD4//P/AAAFAAkAAAD4//T/AAAFAAoAAAD4//X/AAAFAAkAAAD4//b/AAAHAAoAAAD4/wIAAAABAAcAAAD4/wMAAAABAAQAAAD4/wQAAAABAAQAAAD4/wUAAAAAAAYAAAD4/wYAAAACAAQAAAD4/wcAAAACAAQAAAD4/wgAAAACAAUAAAD4/wkAAAAHAAoAAAD4/woAAAAHAAkAAAD4/wsAAAAHAAoAAAD4/wwAAAAIAAkAAAD4/w0AAAAIAAkAAAD4/w4AAAAHAAkAAAD4/w8AAAAHAAoAAAD4/xAAAAAAAAAAAAD4/xEAAAAHAAkAAAD4/xIAAAAAAAAAAAD4/xMAAAAIAAkAAAD4/xQAAAAAAAAAAAD4/xUAAAAIAAkAAAD4/xYAAAACAAMAAAD4/xcAAAACAAQAAAD4/xgAAAAAAAcAAAD4/xkAAAABAAQAAAD4/xoAAAABAAQAAAD4/xsAAAABAAQAAAD4/xwAAAABAAYAAAD4/x0AAAAAAAUAAAD4/x4AAAAFAAkAAAD4/x8AAAAFAAkAAAD4/yAAAAAHAAkAAAD4/yEAAAAHAAkAAAD4/yIAAAAIAAkAAAD4/yMAAAAHAAkAAAD4/yQAAAAHAAkAAAD4/yUAAAAFAAkAAAD4/yYAAAAHAAoAAAD4/ycAAAAIAAkAAAD4/ygAAAAAAAMAAAD4/ykAAAABAAcAAAD4/yoAAAABAAQAAAD4/ysAAAABAAQAAAD4/ywAAAABAAQAAAD4/y0AAAABAAUAAAD4/y4AAAAIAAoAAAD4/y8AAAAIAAoAAAD4/zAAAAAHAAkAAAD4/zEAAAAFAAoAAAD4/zIAAAAFAAoAAAD4/zMAAAAAAAAAAAD5//D/AAABAAsAAAD5//H/AAAIAAkAAAD5//L/AAAFAAoAAAD5//P/AAAIAAkAAAD5//T/AAAFAAoAAAD5//X/AAAFAAkAAAD5//b/AAAFAAoAAAD5/wIAAAABAAQAAAD5/wMAAAAAAAYAAAD5/wQAAAACAAQAAAD5/wUAAAACAAUAAAD5/wYAAAAFAAkAAAD5/wcAAAAHAAkAAAD5/wgAAAAFAAkAAAD5/wkAAAAFAAkAAAD5/woAAAAIAAoAAAD5/wsAAAAFAAkAAAD5/wwAAAAFAAoAAAD5/w0AAAAHAAkAAAD5/w4AAAAHAAoAAAD5/w8AAAAAAAAAAAD5/xAAAAAIAAoAAAD5/xEAAAAIAAoAAAD5/xIAAAAHAAkAAAD5/xMAAAAHAAoAAAD5/xQAAAAFAAkAAAD5/xUAAAAHAAoAAAD5/xYAAAAIAAkAAAD5/xcAAAAIAAoAAAD5/xgAAAACAAMAAAD5/xkAAAAAAAcAAAD5/xoAAAABAAQAAAD5/xsAAAABAAQAAAD5/xwAAAABAAQAAAD5/x0AAAABAAYAAAD5/x4AAAAAAAUAAAD5/x8AAAAFAAkAAAD5/yAAAAAFAAkAAAD5/yEAAAAHAAkAAAD5/yIAAAAHAAoAAAD5/yMAAAAHAAkAAAD5/yQAAAAHAAkAAAD5/yUAAAAHAAoAAAD5/yYAAAAAAAAAAAD5/ycAAAAFAAkAAAD5/ygAAAABAAMAAAD5/ykAAAABAAQAAAD5/yoAAAABAAQAAAD5/ysAAAABAAQAAAD5/ywAAAAAAAYAAAD5/y0AAAACAAUAAAD5/y4AAAAHAAkAAAD5/y8AAAAHAAoAAAD5/zAAAAAFAAkAAAD5/zEAAAAAAAAAAAD5/zIAAAAFAAkAAAD5/zMAAAAHAAkAAAD6//D/AAABAAsAAAD6//H/AAAHAAoAAAD6//L/AAAIAAoAAAD6//P/AAAFAAkAAAD6//T/AAAHAAkAAAD6//X/AAAIAAoAAAD6//b/AAAIAAkAAAD6/wIAAAABAAQAAAD6/wMAAAABAAUAAAD6/wQAAAAIAAoAAAD6/wUAAAAIAAoAAAD6/wYAAAAFAAkAAAD6/wcAAAAIAAoAAAD6/wgAAAAHAAkAAAD6/wkAAAAFAAoAAAD6/woAAAAHAAoAAAD6/wsAAAAHAAkAAAD6/wwAAAAIAAoAAAD6/w0AAAAHAAoAAAD6/w4AAAAFAAoAAAD6/w8AAAAHAAkAAAD6/xAAAAAHAAoAAAD6/xEAAAAFAAkAAAD6/xIAAAAFAAkAAAD6/xMAAAAHAAkAAAD6/xQAAAAIAAkAAAD6/xUAAAAHAAkAAAD6/xYAAAAIAAoAAAD6/xcAAAAHAAkAAAD6/xgAAAAIAAkAAAD6/xkAAAACAAMAAAD6/xoAAAAAAAcAAAD6/xsAAAABAAQAAAD6/xwAAAABAAQAAAD6/x0AAAABAAQAAAD6/x4AAAABAAYAAAD6/x8AAAAAAAUAAAD6/yAAAAAIAAkAAAD6/yEAAAAFAAoAAAD6/yIAAAAIAAkAAAD6/yMAAAAHAAkAAAD6/yQAAAAFAAkAAAD6/yUAAAAFAAkAAAD6/yYAAAAAAAMAAAD6/ycAAAAAAAQAAAD6/ygAAAABAAcAAAD6/ykAAAABAAQAAAD6/yoAAAABAAQAAAD6/ysAAAAAAAYAAAD6/ywAAAACAAUAAAD6/y0AAAAFAAkAAAD6/y4AAAAIAAoAAAD6/y8AAAAHAAkAAAD6/zAAAAAIAAoAAAD6/zEAAAAIAAoAAAD6/zIAAAAIAAoAAAD6/zMAAAAHAAkAAAD7//D/AAABAAsAAAD7//H/AAAIAAkAAAD7//L/AAAFAAoAAAD7//P/AAAFAAkAAAD7//T/AAAFAAoAAAD7//X/AAAFAAkAAAD7//b/AAAIAAoAAAD7/wIAAAABAAQAAAD7/wMAAAABAAUAAAD7/wQAAAAHAAkAAAD7/wUAAAAFAAoAAAD7/wYAAAAIAAoAAAD7/wcAAAAAAAAAAAD7/wgAAAAHAAoAAAD7/wkAAAAIAAkAAAD7/woAAAAIAAkAAAD7/wsAAAAIAAoAAAD7/wwAAAAIAAkAAAD7/w0AAAAAAAAAAAD7/w4AAAAAAAAAAAD7/w8AAAAFAAkAAAD7/xAAAAAIAAkAAAD7/xEAAAAFAAoAAAD7/xIAAAAAAAAAAAD7/xMAAAAIAAoAAAD7/xQAAAAAAAAAAAD7/xUAAAAIAAoAAAD7/xYAAAAHAAoAAAD7/xcAAAAAAAAAAAD7/xgAAAAIAAkAAAD7/xkAAAAFAAkAAAD7/xoAAAACAAMAAAD7/xsAAAAAAAcAAAD7/xwAAAABAAQAAAD7/x0AAAABAAQAAAD7/x4AAAABAAQAAAD7/x8AAAABAAUAAAD7/yAAAAAFAAoAAAD7/yEAAAAFAAkAAAD7/yIAAAAIAAoAAAD7/yMAAAAFAAoAAAD7/yQAAAAHAAkAAAD7/yUAAAAAAAMAAAD7/yYAAAABAAcAAAD7/ycAAAABAAQAAAD7/ygAAAABAAQAAAD7/ykAAAABAAQAAAD7/yoAAAAAAAYAAAD7/ysAAAACAAUAAAD7/ywAAAAIAAkAAAD7/y0AAAAIAAkAAAD7/y4AAAAHAAoAAAD7/y8AAAAIAAoAAAD7/zAAAAAFAAoAAAD7/zEAAAAHAAkAAAD7/zIAAAAHAAkAAAD7/zMAAAAHAAoAAAD8//D/AAABAAsAAAD8//H/AAAHAAoAAAD8//L/AAAHAAoAAAD8//P/AAAFAAkAAAD8//T/AAAFAAkAAAD8//X/AAAIAAkAAAD8//b/AAAAAAAAAAD8/wIAAAAAAAYAAAD8/wMAAAACAAUAAAD8/wQAAAANABwAAAD8/wUAAAAFAAkAAAD8/wYAAAAFAAkAAAD8/wcAAAAIAAoAAAD8/wgAAAAHAAoAAAD8/wkAAAAHAAoAAAD8/woAAAAAAAAAAAD8/wsAAAAHAAkAAAD8/wwAAAAAAAAAAAD8/w0AAAAIAAkAAAD8/w4AAAAHAAkAAAD8/w8AAAAAAAAAAAD8/xAAAAAFAAkAAAD8/xEAAAAFAAkAAAD8/xIAAAAFAAoAAAD8/xMAAAAHAAoAAAD8/xQAAAAFAAkAAAD8/xUAAAAFAAkAAAD8/xYAAAAIAAkAAAD8/xcAAAAIAAkAAAD8/xgAAAAIAAoAAAD8/xkAAAAHAAoAAAD8/xoAAAAIAAkAAAD8/xsAAAABAAMAAAD8/xwAAAABAAQAAAD8/x0AAAABAAQAAAD8/x4AAAABAAQAAAD8/x8AAAABAAYAAAD8/yAAAAAAAAUAAAD8/yEAAAAFAAoAAAD8/yIAAAAFAAoAAAD8/yMAAAAFAAkAAAD8/yQAAAAAAAMAAAD8/yUAAAABAAcAAAD8/yYAAAABAAQAAAD8/ycAAAABAAQAAAD8/ygAAAABAAQAAAD8/ykAAAAAAAYAAAD8/yoAAAACAAUAAAD8/ysAAAAHAAkAAAD8/ywAAAAAAAAAAAD8/y0AAAAFAAoAAAD8/y4AAAAAAAAAAAD8/y8AAAAIAAkAAAD8/zAAAAAHAAoAAAD8/zEAAAAIAAkAAAD8/zIAAAAHAAkAAAD8/zMAAAAFAAoAAAD9//D/AAABAAsAAAD9//H/AAAIAAoAAAD9//L/AAAIAAkAAAD9//P/AAAAAAAAAAD9//T/AAAAAAAAAAD9//X/AAAIAAkAAAD9//b/AAAAAAAAAAD9/wIAAAABAAUAAAD9/wMAAAAAAAAAAAD9/wQAAAAHAAoAAAD9/wUAAAAHAAkAAAD9/wYAAAALABwAAAD9/wcAAAAIAAkAAAD9/wgAAAAIAAoAAAD9/wkAAAAIAAoAAAD9/woAAAAIAAoAAAD9/wsAAAAHAAoAAAD9/wwAAAAFAAkAAAD9/w0AAAAFAAoAAAD9/w4AAAAAAAAAAAD9/w8AAAAIAAkAAAD9/xAAAAAIAAoAAAD9/xEAAAAFAAkAAAD9/xIAAAAAAAAAAAD9/xMAAAAFAAkAAAD9/xQAAAAFAAkAAAD9/xUAAAAHAAkAAAD9/xYAAAAFAAoAAAD9/xcAAAAFAAoAAAD9/xgAAAAHAAkAAAD9/xkAAAAFAAoAAAD9/xoAAAAAAAAAAAD9/xsAAAACAAMAAAD9/xwAAAAAAAcAAAD9/x0AAAABAAQAAAD9/x4AAAABAAQAAAD9/x8AAAABAAQAAAD9/yAAAAABAAUAAAD9/yEAAAAHAAoAAAD9/yIAAAAFAAkAAAD9/yMAAAAIAAoAAAD9/yQAAAABAAMAAAD9/yUAAAABAAQAAAD9/yYAAAABAAQAAAD9/ycAAAABAAQAAAD9/ygAAAABAAQAAAD9/ykAAAABAAUAAAD9/yoAAAAIAAoAAAD9/ysAAAAHAAoAAAD9/ywAAAAHAAoAAAD9/y0AAAAHAAkAAAD9/y4AAAAHAAkAAAD9/y8AAAAAAAAAAAD9/zAAAAAIAAoAAAD9/zEAAAAIAAkAAAD9/zIAAAAAAAAAAAD9/zMAAAAFAAkAAAD+//D/AAABAAsAAAD+//H/AAAHAAoAAAD+//L/AAAHAAoAAAD+//P/AAAIAAkAAAD+//T/AAAFAAkAAAD+//X/AAAIAAkAAAD+//b/AAAIAAoAAAD+/wIAAAABAAUAAAD+/wMAAAANABwAAAD+/wQAAAAFAAkAAAD+/wUAAAAIAAkAAAD+/wYAAAAMABwAAAD+/wgAAAAHAAkAAAD+/wkAAAAIAAoAAAD+/woAAAAHAAoAAAD+/wsAAAAHAAkAAAD+/wwAAAAHAAoAAAD+/w0AAAAFAAoAAAD+/w4AAAAIAAoAAAD+/w8AAAAIAAkAAAD+/xAAAAAIAAkAAAD+/xEAAAAHAAkAAAD+/xIAAAAFAAoAAAD+/xMAAAAAAAAAAAD+/xQAAAAFAAoAAAD+/xUAAAAIAAkAAAD+/xYAAAAHAAkAAAD+/xcAAAAHAAkAAAD+/xgAAAAIAAkAAAD+/xkAAAAAAAAAAAD+/xoAAAAHAAkAAAD+/xsAAAAAAAAAAAD+/xwAAAABAAMAAAD+/x0AAAABAAQAAAD+/x4AAAABAAQAAAD+/x8AAAABAAQAAAD+/yAAAAABAAUAAAD+/yEAAAAAAAAAAAD+/yIAAAAFAAkAAAD+/yMAAAAAAAMAAAD+/yQAAAABAAcAAAD+/yUAAAABAAQAAAD+/yYAAAABAAQAAAD+/ycAAAAAAAYAAAD+/ygAAAACAAQAAAD+/ykAAAACAAUAAAD+/yoAAAAHAAoAAAD+/ysAAAAIAAoAAAD+/ywAAAAIAAkAAAD+/y0AAAAHAAkAAAD+/y4AAAAFAAoAAAD+/y8AAAAIAAoAAAD+/zAAAAAHAAkAAAD+/zEAAAAHAAkAAAD+/zIAAAAHAAkAAAD+/zMAAAAFAAoAAAD///D/AAABAAsAAAD///H/AAAFAAkAAAD///L/AAAFAAoAAAD///P/AAAIAAoAAAD///T/AAAAAAAAAAD///X/AAAIAAkAAAD///b/AAAHAAkAAAD//wIAAAABAAUAAAD//wMAAAAIAAoAAAD//wQAAAAIAAkAAAD//wUAAAAFAAoAAAD//wYAAAAHAAoAAAD//wcAAAAIAAoAAAD//wgAAAAFAAkAAAD//wkAAAAHAAoAAAD//woAAAAAAAAAAAD//wsAAAAHAAkAAAD//wwAAAAFAAkAAAD//w0AAAAIAAkAAAD//w4AAAAHAAkAAAD//w8AAAAFAAkAAAD//xAAAAAHAAoAAAD//xEAAAAHAAoAAAD//xIAAAAIAAkAAAD//xMAAAAFAAkAAAD//xQAAAAIAAoAAAD//xUAAAAAAAAAAAD//xYAAAAFAAkAAAD//xcAAAAAAAAAAAD//xgAAAAIAAoAAAD//xkAAAAHAAkAAAD//xoAAAAFAAoAAAD//xsAAAAFAAkAAAD//xwAAAACAAMAAAD//x0AAAACAAQAAAD//x4AAAAAAAcAAAD//x8AAAABAAQAAAD//yAAAAABAAYAAAD//yEAAAAAAAQAAAD//yIAAAAAAAQAAAD//yMAAAABAAcAAAD//yQAAAABAAQAAAD//yUAAAABAAQAAAD//yYAAAAAAAYAAAD//ycAAAACAAUAAAD//ygAAAAFAAkAAAD//ykAAAAAAAAAAAD//yoAAAAHAAoAAAD//ysAAAAAAAAAAAD//ywAAAAHAAkAAAD//y0AAAAFAAoAAAD//y4AAAAFAAoAAAD//y8AAAAIAAoAAAD//zAAAAAIAAkAAAD//zEAAAAIAAkAAAD//zIAAAAIAAkAAAD//zMAAAAHAAoAAAAAAPD/AAABAAsAAAAAAPH/AAAIAAoAAAAAAPL/AAAIAAkAAAAAAPP/AAAHAAoAAAAAAPT/AAAIAAoAAAAAAPX/AAAAAAAAAAAAAPb/AAAIAAoAAAAAAAIAAAABAAUAAAAAAAMAAAAHAAoAAAAAAAQAAAALABwAAAAAAAUAAAAIAAkAAAAAAAYAAAANABwAAAAAAAcAAAAAAAAAAAAAAAgAAAAHAAkAAAAAAAkAAAAAAAAAAAAAAAoAAAAFAAkAAAAAAAsAAAAHAAkAAAAAAAwAAAAIAAoAAAAAAA0AAAAIAAkAAAAAAA4AAAAIAAkAAAAAAA8AAAAFAAoAAAAAABAAAAAHAAkAAAAAABEAAAAIAAkAAAAAABIAAAAHAAoAAAAAABMAAAAFAAoAAAAAABQAAAAAAAAAAAAAABUAAAAHAAkAAAAAABYAAAAAAAAAAAAAABcAAAAFAAkAAAAAABgAAAAIAAkAAAAAABkAAAAIAAoAAAAAABoAAAAIAAkAAAAAABsAAAAFAAoAAAAAABwAAAAIAAoAAAAAAB0AAAAFAAkAAAAAAB4AAAABAAMAAAAAAB8AAAABAAQAAAAAACAAAAABAAQAAAAAACEAAAABAAQAAAAAACIAAAABAAQAAAAAACMAAAABAAQAAAAAACQAAAABAAQAAAAAACUAAAABAAQAAAAAACYAAAABAAUAAAAAACcAAAAFAAoAAAAAACgAAAAFAAoAAAAAACkAAAAIAAoAAAAAACoAAAAFAAkAAAAAACsAAAAIAAkAAAAAACwAAAAFAAkAAAAAAC0AAAAAAAAAAAAAAC4AAAAAAAAAAAAAAC8AAAAIAAkAAAAAADAAAAAHAAkAAAAAADEAAAAIAAoAAAAAADIAAAAAAAAAAAAAADMAAAAFAAkAAAABAPD/AAABAAsAAAABAPH/AAAFAAkAAAABAPL/AAAHAAoAAAABAPP/AAAAAAAAAAABAPT/AAAAAAAAAAABAPX/AAAHAAkAAAABAPb/AAAFAAkAAAABAAIAAAABAAUAAAABAAMAAAAAAAAAAAABAAQAAAAMABwAAAABAAUAAAAAAAAAAAABAAYAAAAFAAoAAAABAAcAAAAHAAoAAAABAAgAAAAAAAAAAAABAAkAAAAHAAoAAAABAAoAAAAIAAoAAAABAAsAAAAIAAkAAAABAAwAAAAIAAkAAAABAA0AAAAIAAoAAAABAA4AAAAHAAkAAAABAA8AAAAIAAoAAAABABAAAAAIAAkAAAABABEAAAAAAAAAAAABABIAAAAFAAkAAAABABMAAAAAAAAAAAABABQAAAAHAAoAAAABABUAAAAFAAkAAAABABYAAAAFAAkAAAABABcAAAAHAAkAAAABABgAAAAAAAAAAAABABkAAAAFAAoAAAABABoAAAAFAAkAAAABABsAAAAIAAoAAAABABwAAAAHAAkAAAABAB0AAAAIAAoAAAABAB4AAAABAAMAAAABAB8AAAABAAQAAAABACAAAAABAAQAAAABACEAAAABAAQAAAABACIAAAABAAQAAAABACMAAAABAAQAAAABACQAAAAAAAYAAAABACUAAAACAAQAAAABACYAAAACAAUAAAABACcAAAAFAAkAAAABACgAAAAIAAkAAAABACkAAAAIAAoAAAABACoAAAAFAAoAAAABACsAAAAFAAkAAAABACwAAAAFAAoAAAABAC0AAAAHAAoAAAABAC4AAAAFAAoAAAABAC8AAAAFAAoAAAABADAAAAAIAAoAAAABADEAAAAIAAkAAAABADIAAAAAAAAAAAABADMAAAAFAAoAAAACAPD/AAABAAsAAAACAPH/AAAAAAAAAAACAPL/AAAFAAkAAAACAPP/AAAIAAoAAAACAPT/AAAFAAoAAAACAPX/AAAFAAoAAAACAPb/AAAFAAkAAAACAAIAAAABAAUAAAACAAMAAAAIAAoAAAACAAQAAAAFAAoAAAACAAUAAAAIAAkAAAACAAYAAAAFAAkAAAACAAcAAAAIAAoAAAACAAgAAAAAAAAAAAACAAkAAAAIAAkAAAACAAoAAAAFAAkAAAACAAsAAAAIAAkAAAACAAwAAAAAAAAAAAACAA0AAAAFAAkAAAACAA4AAAAFAAkAAAACAA8AAAAFAAkAAAACABAAAAAFAAkAAAACABEAAAAIAAoAAAACABIAAAAAAAAAAAACABMAAAAHAAoAAAACABQAAAAAAAAAAAACABUAAAAFAAoAAAACABYAAAAIAAoAAAACABcAAAAHAAoAAAACABgAAAAFAAoAAAACABkAAAAHAAoAAAACABoAAAAFAAkAAAACABsAAAAIAAkAAAACABwAAAAIAAkAAAACAB0AAAAHAAkAAAACAB4AAAACAAMAAAACAB8AAAAAAAcAAAACACAAAAABAAQAAAACACEAAAABAAQAAAACACIAAAABAAQAAAACACMAAAAAAAYAAAACACQAAAACAAUAAAACACUAAAAFAAkAAAACACYAAAAHAAkAAAACACcAAAAAAAAAAAACACgAAAAFAAoAAAACACkAAAAIAAkAAAACACoAAAAFAAoAAAACACsAAAAAAAAAAAACACwAAAAAAAAAAAACAC0AAAAFAAkAAAACAC4AAAAHAAkAAAACAC8AAAAIAAoAAAACADAAAAAFAAoAAAACADEAAAAAAAAAAAACADIAAAAHAAkAAAACADMAAAAFAAkAAAADAPD/AAABAAsAAAADAPH/AAAFAAkAAAADAPL/AAAHAAoAAAADAPP/AAAFAAoAAAADAPT/AAAAAAAAAAADAPX/AAAIAAkAAAADAPb/AAAIAAkAAAADAAIAAAABAAUAAAADAAMAAAAFAAkAAAADAAQAAAANABwAAAADAAUAAAAFAAkAAAADAAYAAAAIAAkAAAADAAcAAAANABwAAAADAAgAAAAFAAoAAAADAAkAAAAFAAoAAAADAAoAAAAIAAoAAAADAAsAAAAHAAkAAAADAAwAAAAHAAoAAAADAA0AAAAFAAoAAAADAA4AAAAFAAoAAAADAA8AAAAFAAoAAAADABAAAAAIAAoAAAADABEAAAAHAAkAAAADABIAAAAAAAAAAAADABMAAAAHAAkAAAADABQAAAAIAAoAAAADABUAAAAIAAoAAAADABYAAAAFAAoAAAADABcAAAAFAAoAAAADABgAAAAHAAkAAAADABkAAAAIAAoAAAADABoAAAAFAAkAAAADABsAAAAFAAoAAAADABwAAAAHAAoAAAADAB0AAAAAAAAAAAADAB4AAAAAAAAAAAADAB8AAAABAAMAAAADACAAAAABAAQAAAADACEAAAABAAQAAAADACIAAAAAAAYAAAADACMAAAACAAUAAAADACQAAAAAAAAAAAADACUAAAAHAAoAAAADACYAAAAAAAAAAAADACcAAAAHAAoAAAADACgAAAAIAAkAAAADACkAAAAHAAkAAAADACoAAAAIAAkAAAADACsAAAAHAAoAAAADACwAAAAIAAkAAAADAC0AAAAHAAkAAAADAC4AAAAHAAoAAAADAC8AAAAHAAoAAAADADAAAAAIAAkAAAADADEAAAAIAAoAAAADADIAAAAHAAkAAAADADMAAAAFAAkAAAAEAPD/AAABAAsAAAAEAPH/AAAAAAAAAAAEAPL/AAAHAAkAAAAEAPP/AAAFAAoAAAAEAPT/AAAFAAoAAAAEAPX/AAAIAAkAAAAEAPb/AAAFAAoAAAAEAAIAAAABAAUAAAAEAAMAAAAHAAoAAAAEAAQAAAAIAAkAAAAEAAUAAAAAAAAAAAAEAAYAAAAFAAoAAAAEAAcAAAAHAAkAAAAEAAgAAAAFAAoAAAAEAAkAAAAIAAkAAAAEAAoAAAAAAAAAAAAEAAsAAAAAAAAAAAAEAAwAAAAAAAAAAAAEAA0AAAAAAAAAAAAEAA4AAAAFAAkAAAAEAA8AAAAIAAkAAAAEABAAAAAFAAoAAAAEABEAAAAIAAkAAAAEABIAAAAIAAoAAAAEABMAAAAIAAoAAAAEABQAAAAFAAoAAAAEABUAAAAFAAkAAAAEABYAAAAHAAoAAAAEABcAAAAHAAoAAAAEABgAAAAFAAoAAAAEABkAAAAAAAAAAAAEABoAAAAHAAkAAAAEABsAAAAIAAoAAAAEABwAAAAFAAoAAAAEAB0AAAAFAAoAAAAEAB4AAAAFAAkAAAAEAB8AAAABAAMAAAAEACAAAAABAAQAAAAEACEAAAABAAQAAAAEACIAAAABAAUAAAAEACMAAAAHAAoAAAAEACQAAAAFAAkAAAAEACUAAAAAAAAAAAAEACYAAAAFAAoAAAAEACcAAAAIAAoAAAAEACgAAAAHAAkAAAAEACkAAAAHAAoAAAAEACoAAAAIAAkAAAAEACsAAAAFAAoAAAAEACwAAAAFAAkAAAAEAC0AAAAHAAkAAAAEAC4AAAAHAAkAAAAEAC8AAAAIAAkAAAAEADAAAAAFAAoAAAAEADEAAAAFAAoAAAAEADIAAAAFAAkAAAAEADMAAAAHAAkAAAAFAPD/AAABAAsAAAAFAPH/AAAHAAkAAAAFAPL/AAAHAAoAAAAFAPP/AAAFAAkAAAAFAPT/AAAIAAoAAAAFAPX/AAAHAAkAAAAFAPb/AAAFAAkAAAAFAAIAAAABAAUAAAAFAAMAAAAHAAoAAAAFAAQAAAAIAAoAAAAFAAUAAAAIAAoAAAAFAAYAAAAHAAoAAAAFAAcAAAAFAAoAAAAFAAgAAAAHAAkAAAAFAAkAAAAFAAkAAAAFAAoAAAAAAAAAAAAFAAsAAAAHAAkAAAAFAAwAAAAHAAoAAAAFAA0AAAAHAAkAAAAFAA4AAAAFAAoAAAAFAA8AAAAHAAkAAAAFABAAAAAHAAoAAAAFABEAAAAAAAAAAAAFABIAAAAAAAAAAAAFABMAAAAHAAkAAAAFABQAAAAHAAkAAAAFABUAAAAIAAkAAAAFABYAAAAHAAkAAAAFABcAAAAHAAkAAAAFABgAAAAIAAoAAAAFABkAAAAIAAkAAAAFABoAAAAHAAkAAAAFABsAAAAFAAoAAAAFABwAAAAFAAoAAAAFAB0AAAAIAAoAAAAFAB4AAAAHAAoAAAAFAB8AAAABAAMAAAAFACAAAAABAAQAAAAFACEAAAABAAQAAAAFACIAAAABAAUAAAAFACMAAAAIAAoAAAAFACQAAAAIAAkAAAAFACUAAAAHAAoAAAAFACYAAAAFAAoAAAAFACcAAAAFAAoAAAAFACgAAAAIAAoAAAAFACkAAAAFAAoAAAAFACoAAAAAAAAAAAAFACsAAAAFAAoAAAAFACwAAAAFAAkAAAAFAC0AAAAIAAkAAAAFAC4AAAAAAAAAAAAFAC8AAAAIAAoAAAAFADAAAAAAAAAAAAAFADEAAAAFAAkAAAAFADIAAAAAAAAAAAAFADMAAAAIAAoAAAAGAPD/AAABAAsAAAAGAPH/AAAIAAoAAAAGAPL/AAAHAAkAAAAGAPP/AAAFAAoAAAAGAPT/AAAFAAkAAAAGAPX/AAAHAAoAAAAGAPb/AAAFAAkAAAAGAAIAAAABAAYAAAAGAAQAAAAAAAUAAAAGAAUAAAAAAAAAAAAGAAYAAAAHAAoAAAAGAAcAAAAIAAoAAAAGAAgAAAAHAAkAAAAGAAkAAAAFAAoAAAAGAAoAAAAIAAkAAAAGAAsAAAAAAAAAAAAGAAwAAAAHAAoAAAAGAA0AAAAHAAkAAAAGAA4AAAAHAAoAAAAGAA8AAAAHAAkAAAAGABAAAAAHAAkAAAAGABEAAAAFAAkAAAAGABIAAAAHAAoAAAAGABMAAAAIAAoAAAAGABQAAAAFAAoAAAAGABUAAAAAAAAAAAAGABYAAAAFAAkAAAAGABcAAAAFAAoAAAAGABgAAAAIAAkAAAAGABkAAAAFAAoAAAAGABoAAAAHAAoAAAAGABsAAAAIAAoAAAAGABwAAAAFAAoAAAAGAB0AAAAHAAkAAAAGAB4AAAAIAAoAAAAGAB8AAAABAAMAAAAGACAAAAABAAQAAAAGACEAAAABAAQAAAAGACIAAAABAAUAAAAGACMAAAAIAAkAAAAGACQAAAAHAAkAAAAGACUAAAAFAAoAAAAGACYAAAAIAAoAAAAGACcAAAAFAAoAAAAGACgAAAAIAAkAAAAGACkAAAAFAAkAAAAGACoAAAAAAAAAAAAGACsAAAAIAAkAAAAGACwAAAAIAAoAAAAGAC0AAAAFAAkAAAAGAC4AAAAHAAoAAAAGAC8AAAAFAAoAAAAGADAAAAAHAAoAAAAGADEAAAAHAAkAAAAGADIAAAAAAAAAAAAGADMAAAAAAAAAAAAHAPD/AAABAAsAAAAHAPH/AAAHAAkAAAAHAPL/AAAHAAkAAAAHAPP/AAAAAAAAAAAHAPT/AAAHAAkAAAAHAPX/AAAHAAkAAAAHAPb/AAAHAAkAAAAHAAIAAAABAAQAAAAHAAMAAAABAAQAAAAHAAQAAAAGAAAAAAAHAAUAAAALAAIAAAAHAAYAAAAHAAoAAAAHAAcAAAAIAAoAAAAHAAgAAAAHAAkAAAAHAAkAAAAFAAoAAAAHAAoAAAAFAAoAAAAHAAsAAAAAAAAAAAAHAAwAAAAHAAoAAAAHAA0AAAAAAAAAAAAHAA4AAAAAAAAAAAAHAA8AAAAIAAkAAAAHABAAAAAIAAkAAAAHABEAAAAHAAkAAAAHABIAAAAHAAoAAAAHABMAAAAIAAkAAAAHABQAAAAIAAkAAAAHABUAAAAFAAoAAAAHABYAAAAIAAoAAAAHABcAAAAFAAkAAAAHABgAAAAAAAMAAAAHABkAAAAAAAQAAAAHABoAAAAAAAQAAAAHABsAAAAAAAQAAAAHABwAAAAAAAQAAAAHAB0AAAAAAAUAAAAHAB4AAAAHAAoAAAAHAB8AAAABAAMAAAAHACAAAAABAAQAAAAHACEAAAABAAQAAAAHACIAAAABAAUAAAAHACMAAAAIAAkAAAAHACQAAAAIAAkAAAAHACUAAAAHAAkAAAAHACYAAAAFAAoAAAAHACcAAAAIAAoAAAAHACgAAAAIAAoAAAAHACkAAAAAAAAAAAAHACoAAAAIAAkAAAAHACsAAAAHAAkAAAAHACwAAAAFAAoAAAAHAC0AAAAFAAkAAAAHAC4AAAAHAAkAAAAHAC8AAAAIAAkAAAAHADAAAAAAAAAAAAAHADEAAAAAAAAAAAAHADIAAAAHAAkAAAAHADMAAAAFAAkAAAAIAPD/AAABAAsAAAAIAPH/AAAIAAkAAAAIAPL/AAAFAAkAAAAIAPP/AAAIAAoAAAAIAPT/AAAIAAoAAAAIAPX/AAAAAAAAAAAIAPb/AAAFAAoAAAAIAAIAAAAAAAYAAAAIAAMAAAACAAQAAAAIAAQAAAABAAkAAAAIAAUAAAABAAoAAAAIAAYAAAAIAAoAAAAIAAcAAAAIAAoAAAAIAAgAAAAIAAkAAAAIAAkAAAAHAAoAAAAIAAoAAAAFAAkAAAAIAAsAAAAAAAAAAAAIAAwAAAAAAAAAAAAIAA0AAAAAAAAAAAAIAA4AAAAAAAAAAAAIAA8AAAAIAAkAAAAIABAAAAAHAAoAAAAIABEAAAAFAAkAAAAIABIAAAAFAAkAAAAIABMAAAAFAAoAAAAIABUAAAAHAAkAAAAIABYAAAAFAAoAAAAIABcAAAAAAAMAAAAIABgAAAABAAcAAAAIABkAAAABAAQAAAAIABoAAAABAAQAAAAIABsAAAABAAQAAAAIABwAAAABAAQAAAAIAB0AAAABAAYAAAAIAB4AAAAAAAQAAAAIAB8AAAABAAcAAAAIACAAAAABAAQAAAAIACEAAAABAAQAAAAIACIAAAABAAUAAAAIACMAAAAIAAoAAAAIACQAAAAAAAAAAAAIACUAAAAIAAoAAAAIACYAAAAHAAkAAAAIACcAAAAAAAAAAAAIACgAAAAFAAkAAAAIACkAAAAFAAoAAAAIACoAAAAIAAoAAAAIACsAAAAHAAoAAAAIACwAAAAIAAoAAAAIAC0AAAAHAAkAAAAIAC4AAAAIAAkAAAAIAC8AAAAAAAAAAAAIADAAAAAAAAAAAAAIADEAAAAAAAAAAAAIADIAAAAHAAoAAAAIADMAAAAHAAoAAAAJAPD/AAABAAsAAAAJAPH/AAAIAAoAAAAJAPL/AAAAAAAAAAAJAPP/AAAFAAoAAAAJAPT/AAAFAAkAAAAJAPX/AAAHAAoAAAAJAPb/AAAIAAkAAAAJAAIAAAABAAUAAAAJAAMAAAAFAAkAAAAJAAQAAAAHAAkAAAAJAAUAAAAAAAAAAAAJAAYAAAAIAAoAAAAJAAcAAAAFAAoAAAAJAAgAAAAIAAoAAAAJAAkAAAAIAAkAAAAJAAoAAAAIAAkAAAAJAAsAAAAHAAkAAAAJAAwAAAAFAAkAAAAJAA0AAAAFAAoAAAAJAA4AAAAIAAkAAAAJAA8AAAAFAAkAAAAJABAAAAAIAAoAAAAJABEAAAAIAAkAAAAJABIAAAAFAAoAAAAJABMAAAAHAAkAAAAJABQAAAAAAAAAAAAJABUAAAAIAAkAAAAJABYAAAAAAAMAAAAJABcAAAABAAcAAAAJABgAAAABAAQAAAAJABkAAAABAAQAAAAJABoAAAAAAAYAAAAJABsAAAAAAAcAAAAJABwAAAABAAQAAAAJAB0AAAABAAQAAAAJAB4AAAABAAQAAAAJAB8AAAABAAQAAAAJACAAAAABAAQAAAAJACEAAAABAAQAAAAJACIAAAABAAUAAAAJACMAAAAAAAAAAAAJACQAAAAFAAkAAAAJACUAAAAIAAoAAAAJACYAAAAIAAoAAAAJACcAAAAHAAkAAAAJACgAAAAHAAoAAAAJACkAAAAFAAoAAAAJACoAAAAIAAkAAAAJACsAAAAFAAkAAAAJACwAAAAFAAoAAAAJAC0AAAAFAAoAAAAJAC4AAAAFAAkAAAAJAC8AAAAHAAoAAAAJADAAAAAIAAoAAAAJADEAAAAHAAoAAAAJADIAAAAIAAkAAAAJADMAAAAFAAkAAAAKAPD/AAABAAsAAAAKAPH/AAAIAAkAAAAKAPL/AAAHAAoAAAAKAPP/AAAIAAoAAAAKAPT/AAAIAAkAAAAKAPX/AAAFAAoAAAAKAPb/AAAIAAkAAAAKAAIAAAABAAUAAAAKAAMAAAAIAAkAAAAKAAQAAAAFAAoAAAAKAAUAAAAHAAoAAAAKAAYAAAAIAAkAAAAKAAcAAAAFAAoAAAAKAAgAAAAIAAoAAAAKAAkAAAAIAAoAAAAKAAoAAAAIAAkAAAAKAAsAAAAIAAoAAAAKAAwAAAAIAAkAAAAKAA0AAAAIAAoAAAAKAA4AAAAHAAoAAAAKAA8AAAAFAAkAAAAKABAAAAAIAAkAAAAKABEAAAAFAAoAAAAKABIAAAAHAAoAAAAKABMAAAAIAAoAAAAKABQAAAAHAAkAAAAKABUAAAAAAAMAAAAKABYAAAABAAcAAAAKABcAAAABAAQAAAAKABgAAAABAAQAAAAKABkAAAAAAAYAAAAKABoAAAACAAUAAAAKABsAAAACAAMAAAAKABwAAAACAAQAAAAKAB0AAAACAAQAAAAKAB4AAAACAAQAAAAKAB8AAAAAAAcAAAAKACAAAAABAAQAAAAKACEAAAABAAQAAAAKACIAAAABAAUAAAAKACMAAAAHAAoAAAAKACQAAAAAAAAAAAAKACUAAAAAAAAAAAAKACYAAAAHAAoAAAAKACcAAAAHAAkAAAAKACgAAAAHAAkAAAAKACkAAAAIAAoAAAAKACoAAAAFAAoAAAAKACsAAAAHAAkAAAAKACwAAAAAAAAAAAAKAC0AAAAHAAkAAAAKAC4AAAAIAAkAAAAKAC8AAAAHAAoAAAAKADAAAAAIAAkAAAAKADEAAAAHAAoAAAAKADIAAAAHAAoAAAAKADMAAAAIAAoAAAALAPD/AAABAAsAAAALAPH/AAAIAAkAAAALAPL/AAAHAAoAAAALAPP/AAAHAAkAAAALAPT/AAAIAAoAAAALAPX/AAAHAAkAAAALAPb/AAAAAAAAAAALAAIAAAABAAUAAAALAAMAAAAIAAoAAAALAAQAAAAAAAAAAAALAAUAAAAFAAkAAAALAAYAAAAHAAkAAAALAAcAAAAHAAoAAAALAAgAAAAFAAkAAAALAAkAAAAIAAoAAAALAAoAAAAIAAoAAAALAAsAAAAFAAoAAAALAAwAAAAIAAoAAAALAA0AAAAIAAkAAAALAA4AAAAFAAkAAAALAA8AAAAIAAkAAAALABAAAAAIAAkAAAALABEAAAAFAAkAAAALABIAAAAIAAkAAAALABMAAAAIAAoAAAALABQAAAAAAAMAAAALABUAAAABAAcAAAALABYAAAABAAQAAAALABcAAAAAAAYAAAALABgAAAACAAQAAAALABkAAAACAAUAAAALABoAAAAHAAoAAAALABsAAAAAAAAAAAALABwAAAAAAAAAAAALAB0AAAAFAAkAAAALAB4AAAAFAAkAAAALAB8AAAABAAMAAAALACAAAAABAAQAAAALACEAAAABAAQAAAALACIAAAABAAUAAAALACMAAAAFAAoAAAALACQAAAAHAAoAAAALACUAAAAHAAkAAAALACYAAAAHAAkAAAALACcAAAAAAAAAAAALACgAAAAFAAkAAAALACkAAAAIAAkAAAALACoAAAAFAAoAAAALACsAAAAAAAAAAAALACwAAAAHAAoAAAALAC0AAAAIAAkAAAALAC4AAAAAAAAAAAALAC8AAAAHAAkAAAALADAAAAAIAAoAAAALADEAAAAHAAoAAAALADIAAAAIAAoAAAALADMAAAAFAAoAAAAMAPD/AAABAAsAAAAMAPH/AAAFAAoAAAAMAPL/AAAIAAkAAAAMAPP/AAAAAAAAAAAMAPT/AAAIAAkAAAAMAPX/AAAHAAoAAAAMAPb/AAAAAAAAAAAMAAIAAAABAAUAAAAMAAMAAAAIAAoAAAAMAAQAAAAIAAkAAAAMAAUAAAAIAAkAAAAMAAcAAAAAAAAAAAAMAAgAAAAIAAoAAAAMAAkAAAAIAAkAAAAMAAoAAAAAAAAAAAAMAAsAAAAIAAoAAAAMAAwAAAAAAAAAAAAMAA0AAAAAAAAAAAAMAA4AAAAAAAAAAAAMAA8AAAAHAAoAAAAMABAAAAAAAAAAAAAMABEAAAAFAAkAAAAMABIAAAAFAAkAAAAMABMAAAAFAAkAAAAMABQAAAABAAMAAAAMABUAAAABAAQAAAAMABYAAAABAAQAAAAMABcAAAABAAUAAAAMABgAAAAHAAkAAAAMABkAAAAIAAoAAAAMABoAAAAFAAoAAAAMABsAAAAAAAAAAAAMABwAAAAHAAkAAAAMAB0AAAAIAAoAAAAMAB4AAAAIAAkAAAAMAB8AAAABAAMAAAAMACAAAAABAAQAAAAMACEAAAABAAQAAAAMACIAAAABAAUAAAAMACMAAAAIAAoAAAAMACQAAAAIAAkAAAAMACUAAAAAAAAAAAAMACYAAAAHAAoAAAAMACcAAAAFAAkAAAAMACgAAAAIAAoAAAAMACkAAAAFAAoAAAAMACoAAAAFAAkAAAAMACsAAAAIAAoAAAAMACwAAAAAAAAAAAAMAC0AAAAFAAoAAAAMAC4AAAAHAAoAAAAMAC8AAAAAAAAAAAAMADAAAAAHAAkAAAAMADEAAAAFAAkAAAAMADIAAAAIAAkAAAAMADMAAAAFAAkAAAANAPD/AAABAAsAAAANAPH/AAAFAAkAAAANAPL/AAAFAAoAAAANAPP/AAAAAAAAAAANAPT/AAAIAAoAAAANAPX/AAAIAAoAAAANAPb/AAAAAAAAAAANAAIAAAABAAUAAAANAAMAAAAFAAkAAAANAAQAAAAHAAkAAAANAAUAAAAIAAoAAAANAAYAAAAAAAAAAAANAAcAAAAHAAkAAAANAAgAAAAAAAAAAAANAAkAAAAIAAkAAAANAAoAAAAIAAoAAAANAAsAAAAHAAoAAAANAAwAAAAAAAAAAAANAA0AAAAFAAkAAAANAA4AAAAHAAoAAAANAA8AAAAHAAoAAAANABAAAAAAAAAAAAANABEAAAAAAAAAAAANABIAAAAAAAAAAAANABMAAAAAAAMAAAANABQAAAABAAcAAAANABUAAAABAAQAAAANABYAAAAAAAYAAAANABcAAAACAAUAAAANABgAAAAFAAoAAAANABkAAAAIAAkAAAANABoAAAAIAAkAAAANABsAAAAAAAAAAAANABwAAAAIAAkAAAANAB0AAAAAAAAAAAANAB4AAAAHAAoAAAANAB8AAAABAAMAAAANACAAAAABAAQAAAANACEAAAABAAQAAAANACIAAAABAAUAAAANACMAAAAFAAoAAAANACQAAAAIAAkAAAANACUAAAAIAAkAAAANACYAAAAFAAoAAAANACcAAAAIAAkAAAANACgAAAAHAAoAAAANACkAAAAIAAkAAAANACoAAAAHAAoAAAANACsAAAAHAAkAAAANACwAAAAAAAAAAAANAC0AAAAIAAkAAAANAC4AAAAHAAoAAAANAC8AAAAHAAoAAAANADAAAAAHAAoAAAANADEAAAAFAAoAAAANADIAAAAAAAAAAAANADMAAAAHAAoAAAAOAPD/AAABAAsAAAAOAPH/AAAHAAkAAAAOAPL/AAAIAAkAAAAOAPP/AAAHAAkAAAAOAPT/AAAFAAkAAAAOAPX/AAAAAAAAAAAOAPb/AAAFAAkAAAAOAAIAAAABAAUAAAAOAAMAAAAAAAAAAAAOAAQAAAAHAAoAAAAOAAUAAAAIAAoAAAAOAAcAAAAFAAoAAAAOAAgAAAAIAAoAAAAOAAkAAAAFAAkAAAAOAAoAAAAFAAoAAAAOAAsAAAAFAAkAAAAOAAwAAAAFAAoAAAAOAA0AAAAIAAoAAAAOAA4AAAAFAAkAAAAOAA8AAAAIAAoAAAAOABAAAAAIAAoAAAAOABEAAAAGAAAAAAAOABIAAAAAAAAAAAAOABMAAAABAAQAAAAOABQAAAABAAQAAAAOABUAAAABAAQAAAAOABYAAAABAAUAAAAOABcAAAAFAAkAAAAOABgAAAAHAAkAAAAOABkAAAAHAAoAAAAOABoAAAAFAAoAAAAOABsAAAAIAAkAAAAOABwAAAAHAAkAAAAOAB0AAAAAAAAAAAAOAB4AAAAAAAAAAAAOAB8AAAABAAMAAAAOACAAAAABAAQAAAAOACEAAAABAAQAAAAOACIAAAABAAUAAAAOACMAAAAHAAkAAAAOACQAAAAFAAkAAAAOACUAAAAIAAoAAAAOACYAAAAFAAoAAAAOACcAAAAHAAoAAAAOACgAAAAHAAkAAAAOACkAAAAIAAoAAAAOACoAAAAIAAkAAAAOACsAAAAFAAkAAAAOACwAAAAHAAoAAAAOAC0AAAAIAAkAAAAOAC4AAAAAAAAAAAAOAC8AAAAIAAkAAAAOADAAAAAIAAkAAAAOADEAAAAHAAoAAAAOADIAAAAAAAAAAAAOADMAAAAAAAAAAAAPAPD/AAABAAsAAAAPAPH/AAAFAAkAAAAPAPL/AAAFAAoAAAAPAPP/AAAHAAkAAAAPAPT/AAAFAAoAAAAPAPX/AAAHAAoAAAAPAPb/AAAAAAAAAAAPAAMAAAAIAAkAAAAPAAQAAAAIAAoAAAAPAAUAAAAHAAkAAAAPAAYAAAAFAAkAAAAPAAcAAAAFAAoAAAAPAAgAAAAFAAkAAAAPAAkAAAAFAAoAAAAPAAoAAAAFAAkAAAAPAAsAAAAIAAoAAAAPAAwAAAAIAAkAAAAPAA0AAAAAAAAAAAAPAA4AAAAIAAoAAAAPAA8AAAAIAAkAAAAPABAAAAAOAAAAAAAPABEAAAAFAAoAAAAPABIAAAACAAMAAAAPABMAAAACAAQAAAAPABQAAAAAAAcAAAAPABUAAAABAAQAAAAPABYAAAABAAUAAAAPABcAAAAHAAkAAAAPABgAAAAFAAkAAAAPABkAAAAFAAoAAAAPABoAAAAAAAAAAAAPABsAAAAFAAoAAAAPABwAAAAFAAoAAAAPAB0AAAAIAAkAAAAPAB4AAAAFAAoAAAAPAB8AAAABAAMAAAAPACAAAAABAAQAAAAPACEAAAABAAQAAAAPACIAAAABAAUAAAAPACMAAAAFAAkAAAAPACQAAAAFAAoAAAAPACUAAAAHAAkAAAAPACYAAAAIAAkAAAAPACcAAAAHAAkAAAAPACgAAAAHAAkAAAAPACkAAAAFAAoAAAAPACoAAAAFAAkAAAAPACsAAAAFAAoAAAAPACwAAAAHAAoAAAAPAC0AAAAHAAoAAAAPAC4AAAAHAAoAAAAPAC8AAAAIAAoAAAAPADAAAAAHAAkAAAAPADEAAAAIAAoAAAAPADIAAAAFAAoAAAAPADMAAAAFAAoAAAAQAPD/AAABAAsAAAAQAPH/AAAIAAoAAAAQAPL/AAAFAAkAAAAQAPP/AAAIAAkAAAAQAPT/AAAIAAkAAAAQAPX/AAAAAAAAAAAQAPb/AAAFAAoAAAAQAAMAAAAAAAAAAAAQAAQAAAAHAAkAAAAQAAUAAAAHAAoAAAAQAAYAAAAFAAkAAAAQAAcAAAAIAAoAAAAQAAgAAAAAAAAAAAAQAAkAAAAHAAoAAAAQAAoAAAAAAAAAAAAQAAsAAAAAAAAAAAAQAAwAAAAHAAoAAAAQAA0AAAAIAAoAAAAQAA4AAAAFAAoAAAAQAA8AAAAFAAkAAAAQABAAAAAHAAoAAAAQABEAAAAHAAoAAAAQABIAAAAHAAkAAAAQABMAAAAAAAAAAAAQABQAAAABAAMAAAAQABUAAAABAAQAAAAQABYAAAABAAYAAAAQABcAAAAAAAUAAAAQABgAAAAIAAoAAAAQABkAAAAAAAAAAAAQABoAAAAHAAkAAAAQABsAAAAFAAkAAAAQABwAAAAFAAoAAAAQAB0AAAAIAAkAAAAQAB4AAAAHAAoAAAAQAB8AAAABAAMAAAAQACAAAAABAAQAAAAQACEAAAABAAQAAAAQACIAAAABAAUAAAAQACMAAAAFAAkAAAAQACQAAAAAAAAAAAAQACUAAAAHAAoAAAAQACYAAAAIAAoAAAAQACcAAAAAAAAAAAAQACgAAAAFAAoAAAAQACkAAAAFAAoAAAAQACoAAAAAAAAAAAAQACsAAAAHAAkAAAAQACwAAAAFAAkAAAAQAC0AAAAFAAoAAAAQAC4AAAAIAAkAAAAQAC8AAAAHAAkAAAAQADAAAAAFAAkAAAAQADEAAAAFAAoAAAAQADIAAAAAAAAAAAAQADMAAAAHAAoAAAARAPD/AAABAAsAAAARAPH/AAAIAAoAAAARAPL/AAAFAAoAAAARAPP/AAAIAAkAAAARAPT/AAAAAAAAAAARAPX/AAAAAAAAAAARAPb/AAAIAAoAAAARAAMAAAAAAAAAAAARAAQAAAAAAAAAAAARAAUAAAAFAAoAAAARAAYAAAAAAAAAAAARAAcAAAAAAAAAAAARAAgAAAAHAAkAAAARAAkAAAAAAAAAAAARAAoAAAAHAAkAAAARAAsAAAACAAYAAAARAAwAAAACAAcAAAARAA0AAAACAAgAAAARAA4AAAAAAAAAAAARAA8AAAAAAAAAAAARABAAAAAIAAkAAAARABEAAAAIAAoAAAARABIAAAAAAAAAAAARABMAAAAFAAoAAAARABQAAAABAAMAAAARABUAAAABAAQAAAARABYAAAABAAQAAAARABcAAAABAAYAAAARABgAAAAAAAUAAAARABkAAAAHAAkAAAARABoAAAAAAAAAAAARABsAAAAIAAoAAAARABwAAAAIAAoAAAARAB0AAAAHAAoAAAARAB4AAAAFAAoAAAARAB8AAAABAAMAAAARACAAAAABAAQAAAARACEAAAABAAQAAAARACIAAAABAAUAAAARACMAAAAIAAoAAAARACQAAAAIAAkAAAARACUAAAAFAAoAAAARACYAAAAIAAkAAAARACcAAAAIAAoAAAARACgAAAAIAAoAAAARACkAAAAHAAoAAAARACoAAAAFAAkAAAARACsAAAAFAAoAAAARACwAAAAFAAoAAAARAC0AAAAIAAoAAAARAC4AAAAAAAAAAAARAC8AAAAAAAAAAAARADAAAAAAAAAAAAARADEAAAAFAAoAAAARADIAAAAHAAkAAAARADMAAAAIAAoAAAASAPD/AAABAAsAAAASAPH/AAAHAAoAAAASAPL/AAAHAAoAAAASAPP/AAAFAAoAAAASAPT/AAAFAAoAAAASAPX/AAAFAAkAAAASAPb/AAAIAAkAAAASAAIAAAABAAUAAAASAAMAAAAFAAoAAAASAAQAAAAHAAoAAAASAAUAAAAFAAoAAAASAAYAAAAHAAkAAAASAAcAAAAFAAoAAAASAAgAAAAHAAkAAAASAAkAAAAIAAoAAAASAAoAAAACAAYAAAASAAsAAAADAAoAAAASAAwAAAADAAcAAAASAA0AAAADAAkAAAASAA4AAAACAAcAAAASAA8AAAACAAgAAAASABAAAAAHAAkAAAASABEAAAAFAAkAAAASABIAAAAAAAAAAAASABMAAAAHAAoAAAASABQAAAACAAMAAAASABUAAAAAAAcAAAASABYAAAABAAQAAAASABcAAAABAAQAAAASABgAAAABAAYAAAASABkAAAAAAAUAAAASABoAAAAFAAoAAAASABsAAAAIAAoAAAASABwAAAAFAAoAAAASAB0AAAAFAAkAAAASAB4AAAAFAAkAAAASAB8AAAABAAMAAAASACAAAAABAAQAAAASACEAAAABAAQAAAASACIAAAABAAUAAAASACMAAAAIAAoAAAASACQAAAAFAAoAAAASACUAAAAHAAkAAAASACYAAAAAAAAAAAASACcAAAAIAAkAAAASACgAAAAHAAkAAAASACkAAAAIAAkAAAASACoAAAAHAAkAAAASACsAAAAAAAAAAAASACwAAAAIAAkAAAASAC0AAAAIAAkAAAASAC4AAAAFAAoAAAASAC8AAAAAAAAAAAASADAAAAAAAAAAAAASADEAAAAIAAoAAAASADIAAAAHAAoAAAASADMAAAAIAAkAAAATAPD/AAABAAsAAAATAPH/AAAAAAAAAAATAPL/AAAHAAoAAAATAPP/AAAHAAoAAAATAPT/AAAIAAkAAAATAPX/AAAIAAoAAAATAPb/AAAFAAkAAAATAAIAAAABAAYAAAATAAMAAAAAAAUAAAATAAQAAAAHAAoAAAATAAUAAAAFAAkAAAATAAYAAAAFAAoAAAATAAcAAAAFAAoAAAATAAgAAAAHAAoAAAATAAkAAAACAAYAAAATAAoAAAADAAoAAAATAAsAAAADAAcAAAATAAwAAAAAAAEAAAATAA0AAAADAAcAAAATAA4AAAAAAAEAAAATAA8AAAADAAkAAAATABAAAAACAAgAAAATABEAAAAIAAkAAAATABIAAAAIAAkAAAATABMAAAAAAAAAAAATABQAAAAIAAkAAAATABUAAAACAAMAAAATABYAAAAAAAcAAAATABcAAAABAAQAAAATABgAAAABAAQAAAATABkAAAABAAYAAAATABoAAAAAAAUAAAATABsAAAAFAAoAAAATABwAAAAHAAoAAAATAB0AAAAIAAoAAAATAB4AAAAIAAoAAAATAB8AAAABAAMAAAATACAAAAABAAQAAAATACEAAAABAAQAAAATACIAAAABAAUAAAATACMAAAAAAAAAAAATACQAAAAIAAoAAAATACUAAAAAAAAAAAATACYAAAAHAAoAAAATACcAAAAIAAkAAAATACgAAAAHAAoAAAATACkAAAAAAAAAAAATACoAAAAFAAkAAAATACsAAAAHAAkAAAATACwAAAAHAAoAAAATAC0AAAAIAAkAAAATAC4AAAAAAAAAAAATAC8AAAAAAAAAAAATADAAAAAHAAoAAAATADEAAAAAAAAAAAATADIAAAAAAAAAAAATADMAAAAHAAkAAAAUAPD/AAABAAsAAAAUAPH/AAAAAAAAAAAUAPL/AAAFAAoAAAAUAPP/AAAIAAkAAAAUAPT/AAAFAAoAAAAUAPX/AAAIAAkAAAAUAPb/AAACAAYAAAAUAPf/AAACAAcAAAAUAPj/AAACAAcAAAAUAPn/AAACAAcAAAAUAPr/AAACAAgAAAAUAPv/AAAIAAoAAAAUAPz/AAAHAAkAAAAUAP3/AAAFAAkAAAAUAP7/AAAIAAoAAAAUAP//AAAFAAoAAAAUAAAAAAACAAMAAAAUAAEAAAAAAAcAAAAUAAIAAAABAAQAAAAUAAMAAAABAAYAAAAUAAQAAAAAAAUAAAAUAAUAAAAFAAkAAAAUAAYAAAAHAAoAAAAUAAcAAAAAAAAAAAAUAAgAAAAFAAoAAAAUAAkAAAADAAYAAAAUAAoAAAADAAcAAAAUAAsAAAADAAcAAAAUAAwAAAADAAcAAAAUAA0AAAADAAcAAAAUAA4AAAADAAcAAAAUAA8AAAADAAcAAAAUABAAAAADAAkAAAAUABEAAAACAAgAAAAUABIAAAAFAAoAAAAUABMAAAAHAAkAAAAUABQAAAAAAAAAAAAUABUAAAAHAAoAAAAUABYAAAACAAMAAAAUABcAAAAAAAcAAAAUABgAAAABAAQAAAAUABkAAAABAAQAAAAUABoAAAABAAYAAAAUABsAAAAAAAUAAAAUABwAAAAAAAAAAAAUAB0AAAAFAAkAAAAUAB4AAAAFAAkAAAAUAB8AAAABAAMAAAAUACAAAAABAAQAAAAUACEAAAABAAQAAAAUACIAAAABAAUAAAAUACMAAAAHAAkAAAAUACQAAAAHAAoAAAAUACUAAAAHAAkAAAAUACYAAAAHAAkAAAAUACcAAAAFAAoAAAAUACgAAAAFAAoAAAAUACkAAAAAAAAAAAAUACoAAAAAAAAAAAAUACsAAAAFAAkAAAAUACwAAAAHAAoAAAAUAC0AAAAFAAoAAAAUAC4AAAAIAAkAAAAUAC8AAAAFAAoAAAAUADAAAAAHAAoAAAAUADEAAAAHAAoAAAAUADIAAAAHAAkAAAAUADMAAAAIAAoAAAAVAPD/AAABAAsAAAAVAPH/AAAHAAkAAAAVAPL/AAAIAAoAAAAVAPP/AAAIAAkAAAAVAPT/AAAFAAoAAAAVAPX/AAACAAYAAAAVAPb/AAADAAoAAAAVAPf/AAAAAAEAAAAVAPj/AAAAAAEAAAAVAPn/AAAAAAEAAAAVAPr/AAADAAkAAAAVAPv/AAACAAgAAAAVAPz/AAAHAAoAAAAVAP3/AAAIAAkAAAAVAP7/AAAFAAoAAAAVAP//AAAFAAkAAAAVAAAAAAAHAAoAAAAVAAEAAAACAAMAAAAVAAIAAAAAAAcAAAAVAAMAAAABAAQAAAAVAAQAAAABAAYAAAAVAAUAAAAAAAUAAAAVAAYAAAAFAAoAAAAVAAcAAAAHAAkAAAAVAAgAAAAFAAkAAAAVAAkAAAADAAYAAAAVAAoAAAADAAcAAAAVAAsAAAADAAcAAAAVAAwAAAACAAkAAAAVAA0AAAAEAAcAAAAVAA4AAAACAAoAAAAVAA8AAAADAAcAAAAVABAAAAADAAcAAAAVABEAAAADAAgAAAAVABIAAAAHAAkAAAAVABMAAAAHAAkAAAAVABQAAAAIAAkAAAAVABUAAAAFAAkAAAAVABYAAAAIAAkAAAAVABcAAAACAAMAAAAVABgAAAAAAAcAAAAVABkAAAABAAQAAAAVABoAAAABAAQAAAAVABsAAAABAAYAAAAVABwAAAAAAAUAAAAVAB0AAAAHAAkAAAAVAB4AAAAAAAAAAAAVAB8AAAABAAMAAAAVACAAAAABAAQAAAAVACEAAAABAAQAAAAVACIAAAABAAUAAAAVACMAAAAAAAAAAAAVACQAAAAFAAoAAAAVACUAAAAIAAoAAAAVACYAAAAFAAoAAAAVACcAAAAFAAkAAAAVACgAAAAIAAoAAAAVACkAAAAHAAoAAAAVACoAAAAIAAkAAAAVACsAAAAHAAoAAAAVACwAAAAAAAAAAAAVAC0AAAAIAAoAAAAVAC4AAAAAAAAAAAAVAC8AAAAIAAoAAAAVADAAAAAIAAoAAAAVADEAAAAHAAkAAAAVADIAAAAHAAkAAAAVADMAAAAFAAkAAAAWAPD/AAABAAsAAAAWAPH/AAAHAAoAAAAWAPL/AAAAAAAAAAAWAPP/AAAFAAkAAAAWAPT/AAACAAYAAAAWAPX/AAADAAoAAAAWAPb/AAAAAAEAAAAWAPf/AAADAAcAAAAWAPj/AAAAAAEAAAAWAPn/AAADAAcAAAAWAPr/AAAAAAEAAAAWAPv/AAADAAgAAAAWAPz/AAAIAAkAAAAWAP3/AAAFAAkAAAAWAP7/AAAHAAoAAAAWAP//AAAIAAkAAAAWAAAAAAAIAAkAAAAWAAEAAAAFAAkAAAAWAAIAAAABAAMAAAAWAAMAAAABAAQAAAAWAAQAAAABAAQAAAAWAAUAAAABAAYAAAAWAAYAAAAAAAQAAAAWAAcAAAAAAAUAAAAWAAgAAAAAAAMAAAAWAAkAAAABAAcAAAAWAAoAAAAPAAoAAAAWAAsAAAAAAAEAAAAWAA0AAAACAAcAAAAWAA4AAAADAAoAAAAWAA8AAAADAAcAAAAWABAAAAAAAAEAAAAWABEAAAADAAgAAAAWABIAAAAFAAoAAAAWABMAAAAFAAoAAAAWABQAAAAAAAAAAAAWABUAAAAHAAoAAAAWABYAAAAIAAoAAAAWABcAAAAFAAkAAAAWABgAAAACAAMAAAAWABkAAAAAAAcAAAAWABoAAAABAAQAAAAWABsAAAABAAQAAAAWABwAAAABAAYAAAAWAB0AAAAAAAUAAAAWAB4AAAAFAAkAAAAWAB8AAAABAAMAAAAWACAAAAABAAQAAAAWACEAAAABAAQAAAAWACIAAAABAAUAAAAWACMAAAAIAAoAAAAWACQAAAAHAAkAAAAWACUAAAAAAAAAAAAWACYAAAAFAAkAAAAWACcAAAAAAAAAAAAWACgAAAAHAAoAAAAWACkAAAAHAAkAAAAWACoAAAAFAAoAAAAWACsAAAAIAAkAAAAWACwAAAAFAAkAAAAWAC0AAAAIAAkAAAAWAC4AAAAHAAkAAAAWAC8AAAAAAAAAAAAWADAAAAAIAAkAAAAWADEAAAAIAAkAAAAWADIAAAAHAAkAAAAWADMAAAAFAAkAAAAXAPD/AAABAAsAAAAXAPH/AAAHAAkAAAAXAPL/AAACAAYAAAAXAPP/AAACAAcAAAAXAPT/AAADAAoAAAAXAPX/AAADAAcAAAAXAPb/AAADAAcAAAAXAPf/AAADAAcAAAAXAPj/AAAAAAEAAAAXAPn/AAADAAcAAAAXAPr/AAAAAAEAAAAXAPv/AAADAAkAAAAXAPz/AAACAAgAAAAXAP3/AAAFAAkAAAAXAP7/AAAAAAAAAAAXAP//AAAHAAoAAAAXAAAAAAAHAAkAAAAXAAEAAAAIAAkAAAAXAAIAAAACAAMAAAAXAAMAAAAAAAcAAAAXAAQAAAABAAQAAAAXAAUAAAABAAQAAAAXAAYAAAABAAQAAAAXAAcAAAABAAYAAAAXAAgAAAABAAcAAAAXAAkAAAABAAQAAAAXAAoAAAAQAAYAAAAXAAsAAAADAAcAAAAXAAwAAAADAAcAAAAXAA0AAAAAAAEAAAAXAA4AAAAAAAEAAAAXAA8AAAADAAcAAAAXABAAAAAAAAEAAAAXABEAAAADAAgAAAAXABIAAAAIAAkAAAAXABMAAAAIAAoAAAAXABQAAAAFAAoAAAAXABUAAAAIAAkAAAAXABYAAAAHAAoAAAAXABcAAAAFAAoAAAAXABgAAAAAAAAAAAAXABkAAAACAAMAAAAXABoAAAAAAAcAAAAXABsAAAABAAQAAAAXABwAAAABAAQAAAAXAB0AAAABAAYAAAAXAB4AAAAAAAUAAAAXAB8AAAABAAMAAAAXACAAAAABAAQAAAAXACEAAAABAAQAAAAXACIAAAABAAUAAAAXACMAAAAFAAkAAAAXACQAAAAFAAoAAAAXACUAAAAAAAAAAAAXACYAAAAIAAoAAAAXACcAAAAIAAoAAAAXACgAAAAAAAAAAAAXACkAAAAFAAkAAAAXACoAAAAHAAkAAAAXACsAAAAIAAoAAAAXACwAAAAIAAkAAAAXAC0AAAAHAAkAAAAXAC4AAAAHAAoAAAAXAC8AAAAHAAkAAAAXADAAAAAIAAkAAAAXADEAAAAHAAoAAAAXADIAAAAHAAoAAAAXADMAAAAHAAkAAAAYAPD/AAABAAsAAAAYAPH/AAAIAAkAAAAYAPL/AAADAAYAAAAYAPP/AAADAAcAAAAYAPT/AAADAAcAAAAYAPX/AAADAAcAAAAYAPb/AAADAAcAAAAYAPf/AAADAAcAAAAYAPn/AAADAAcAAAAYAPr/AAADAAcAAAAYAPv/AAADAAcAAAAYAPz/AAADAAgAAAAYAP3/AAAFAAkAAAAYAP7/AAAIAAkAAAAYAP//AAAFAAoAAAAYAAAAAAAIAAoAAAAYAAEAAAAIAAoAAAAYAAIAAAAFAAoAAAAYAAMAAAACAAMAAAAYAAQAAAACAAQAAAAYAAUAAAAAAAcAAAAYAAYAAAABAAQAAAAYAAcAAAABAAQAAAAYAAgAAAABAAQAAAAYAAkAAAABAAQAAAAYAAoAAAARAAYAAAAYAAsAAAAIAA0AAAAYAAwAAAAEAAcAAAAYAA0AAAAEAAcAAAAYAA4AAAACAAoAAAAYAA8AAAADAAcAAAAYABAAAAADAAcAAAAYABEAAAADAAkAAAAYABIAAAACAAgAAAAYABMAAAAFAAoAAAAYABQAAAAHAAoAAAAYABUAAAAFAAoAAAAYABYAAAAHAAoAAAAYABcAAAAFAAkAAAAYABgAAAAHAAkAAAAYABkAAAAHAAoAAAAYABoAAAACAAMAAAAYABsAAAAAAAcAAAAYABwAAAABAAQAAAAYAB0AAAABAAQAAAAYAB4AAAABAAUAAAAYAB8AAAABAAMAAAAYACAAAAABAAQAAAAYACEAAAABAAQAAAAYACIAAAABAAUAAAAYACMAAAAHAAkAAAAYACQAAAAIAAkAAAAYACUAAAAIAAoAAAAYACYAAAAIAAoAAAAYACcAAAAHAAoAAAAYACgAAAAIAAoAAAAYACkAAAAFAAoAAAAYACoAAAAFAAoAAAAYACsAAAAIAAkAAAAYACwAAAAHAAoAAAAYAC0AAAAHAAoAAAAYAC4AAAAIAAkAAAAYAC8AAAAAAAAAAAAYADAAAAAAAAAAAAAYADEAAAAFAAoAAAAYADIAAAAIAAoAAAAYADMAAAAFAAoAAAAZAPD/AAACAAYAAAAZAPH/AAACAAcAAAAZAPL/AAADAAoAAAAZAPP/AAADAAcAAAAZAPT/AAADAAcAAAAZAPX/AAAAAAEAAAAZAPb/AAADAAcAAAAZAPf/AAADAAcAAAAZAPj/AAADAAcAAAAZAPn/AAADAAcAAAAZAPr/AAADAAcAAAAZAPv/AAADAAcAAAAZAPz/AAADAAgAAAAZAP3/AAAIAAkAAAAZAP7/AAAAAAAAAAAZAP//AAAFAAoAAAAZAAAAAAAFAAkAAAAZAAEAAAAAAAAAAAAZAAIAAAAFAAkAAAAZAAMAAAAFAAkAAAAZAAQAAAAHAAoAAAAZAAUAAAACAAMAAAAZAAYAAAACAAQAAAAZAAcAAAACAAQAAAAZAAgAAAAAAAcAAAAZAAkAAAABAAQAAAAZAAoAAAABAAQAAAAZAAsAAAABAAUAAAAZAAwAAAAAAAAAAAAZAA0AAAAAAAAAAAAZAA4AAAADAAYAAAAZAA8AAAADAAcAAAAZABAAAAADAAcAAAAZABEAAAADAAcAAAAZABIAAAADAAgAAAAZABMAAAAHAAoAAAAZABQAAAAHAAoAAAAZABUAAAAIAAoAAAAZABYAAAAHAAoAAAAZABcAAAAIAAoAAAAZABgAAAAAAAAAAAAZABkAAAAIAAkAAAAZABoAAAAIAAoAAAAZABsAAAACAAMAAAAZABwAAAAAAAcAAAAZAB0AAAABAAQAAAAZAB4AAAABAAUAAAAZAB8AAAABAAMAAAAZACAAAAABAAQAAAAZACEAAAABAAQAAAAZACIAAAABAAUAAAAZACMAAAAHAAkAAAAZACQAAAAIAAkAAAAZACUAAAAAAAAAAAAZACYAAAAAAAAAAAAZACcAAAAHAAoAAAAZACgAAAAIAAkAAAAZACkAAAAAAAAAAAAZACoAAAAIAAkAAAAZACsAAAAIAAoAAAAZACwAAAAIAAkAAAAZAC0AAAAIAAoAAAAZAC4AAAAHAAoAAAAZAC8AAAAIAAoAAAAZADAAAAAAAAAAAAAZADEAAAAIAAkAAAAZADIAAAAIAAkAAAAZADMAAAAFAAoAAAAaAPD/AAADAAYAAAAaAPH/AAAAAAEAAAAaAPL/AAADAAcAAAAaAPP/AAADAAcAAAAaAPT/AAADAAcAAAAaAPX/AAAAAAEAAAAaAPb/AAADAAcAAAAaAPf/AAAAAAEAAAAaAPj/AAAAAAEAAAAaAPn/AAAAAAEAAAAaAPr/AAADAAcAAAAaAPv/AAAAAAEAAAAaAPz/AAADAAkAAAAaAP3/AAACAAcAAAAaAP7/AAACAAcAAAAaAP//AAACAAgAAAAaAAAAAAAIAAoAAAAaAAEAAAAHAAoAAAAaAAIAAAAIAAkAAAAaAAMAAAAHAAkAAAAaAAQAAAAIAAkAAAAaAAUAAAAHAAkAAAAaAAYAAAAAAAAAAAAaAAcAAAAFAAoAAAAaAAgAAAABAAMAAAAaAAkAAAABAAQAAAAaAAoAAAAAAAYAAAAaAAsAAAACAAUAAAAaAAwAAAAAAAAAAAAaAA0AAAAAAAAAAAAaAA4AAAAEAAYAAAAaAA8AAAACAAoAAAAaABAAAAAAAAEAAAAaABEAAAADAAcAAAAaABIAAAADAAgAAAAaABMAAAAHAAkAAAAaABQAAAAHAAkAAAAaABUAAAAFAAkAAAAaABYAAAAAAAAAAAAaABcAAAAIAAoAAAAaABgAAAAIAAoAAAAaABkAAAAHAAkAAAAaABoAAAAFAAoAAAAaABsAAAAAAAMAAAAaABwAAAABAAcAAAAaAB0AAAABAAQAAAAaAB4AAAABAAUAAAAaAB8AAAABAAMAAAAaACAAAAABAAQAAAAaACEAAAABAAQAAAAaACIAAAABAAUAAAAaACMAAAAIAAkAAAAaACQAAAAHAAoAAAAaACUAAAAHAAkAAAAaACYAAAAFAAoAAAAaACcAAAAIAAoAAAAaACgAAAAHAAoAAAAaACkAAAAFAAoAAAAaACoAAAAIAAoAAAAaACsAAAAFAAkAAAAaACwAAAAFAAoAAAAaAC0AAAAAAAAAAAAaAC4AAAAHAAkAAAAaAC8AAAAHAAoAAAAaADAAAAAFAAkAAAAaADEAAAAIAAoAAAAaADIAAAAFAAkAAAAaADMAAAAFAAkAAAAbAPD/AAADAAoAAAAbAPH/AAAAAAEAAAAbAPL/AAADAAcAAAAbAPP/AAADAAcAAAAbAPT/AAAAAAEAAAAbAPX/AAADAAcAAAAbAPb/AAADAAcAAAAbAPf/AAADAAcAAAAbAPj/AAADAAcAAAAbAPn/AAADAAcAAAAbAPr/AAADAAcAAAAbAPv/AAADAAcAAAAbAPz/AAAAAAEAAAAbAP3/AAADAAcAAAAbAP7/AAADAAcAAAAbAP//AAADAAkAAAAbAAAAAAACAAgAAAAbAAEAAAAFAAoAAAAbAAIAAAAIAAoAAAAbAAMAAAAHAAoAAAAbAAQAAAAAAAAAAAAbAAUAAAAFAAkAAAAbAAYAAAAAAAMAAAAbAAcAAAAAAAQAAAAbAAgAAAABAAcAAAAbAAkAAAABAAQAAAAbAAoAAAABAAUAAAAbAAsAAAAAAAAAAAAbAAwAAAAAAAAAAAAbAA0AAAAAAAAAAAAbAA4AAAACAAYAAAAbAA8AAAADAAoAAAAbABAAAAADAAcAAAAbABEAAAACAAkAAAAbABIAAAAEAAgAAAAbABMAAAAIAAkAAAAbABQAAAAIAAoAAAAbABUAAAAHAAkAAAAbABYAAAAIAAkAAAAbABcAAAAFAAkAAAAbABgAAAAIAAoAAAAbABkAAAAAAAAAAAAbABoAAAAAAAAAAAAbABsAAAABAAMAAAAbABwAAAABAAQAAAAbAB0AAAAAAAYAAAAbAB4AAAACAAUAAAAbAB8AAAABAAMAAAAbACAAAAABAAQAAAAbACEAAAABAAQAAAAbACIAAAABAAUAAAAbACMAAAAHAAoAAAAbACQAAAAFAAkAAAAbACUAAAAHAAkAAAAbACYAAAAHAAoAAAAbACcAAAAFAAkAAAAbACgAAAAHAAkAAAAbACkAAAAFAAoAAAAbACoAAAAAAAAAAAAbACsAAAAIAAoAAAAbACwAAAAIAAoAAAAbAC0AAAAHAAkAAAAbAC4AAAAIAAkAAAAbAC8AAAAAAAAAAAAbADAAAAAFAAoAAAAbADEAAAAFAAkAAAAbADIAAAAFAAoAAAAbADMAAAAIAAkAAAAcAPD/AAADAAcAAAAcAPH/AAADAAcAAAAcAPL/AAADAAcAAAAcAPP/AAADAAcAAAAcAPT/AAADAAcAAAAcAPX/AAAAAAEAAAAcAPb/AAADAAcAAAAcAPf/AAADAAcAAAAcAPj/AAADAAcAAAAcAPn/AAADAAcAAAAcAPr/AAADAAcAAAAcAPv/AAADAAcAAAAcAPz/AAADAAcAAAAcAP3/AAADAAcAAAAcAP7/AAADAAcAAAAcAP//AAAAAAEAAAAcAAAAAAADAAkAAAAcAAEAAAACAAgAAAAcAAIAAAAFAAoAAAAcAAMAAAAAAAAAAAAcAAQAAAAFAAkAAAAcAAUAAAAIAAkAAAAcAAYAAAABAAMAAAAcAAcAAAABAAQAAAAcAAgAAAABAAQAAAAcAAkAAAAAAAYAAAAcAAoAAAACAAUAAAAcAAsAAAAAAAAAAAAcAAwAAAAAAAAAAAAcAA0AAAACAAYAAAAcAA4AAAADAAoAAAAcAA8AAAADAAcAAAAcABAAAAADAAcAAAAcABEAAAADAAgAAAAcABIAAAAFAAoAAAAcABMAAAAIAAoAAAAcABQAAAAFAAoAAAAcABUAAAAFAAkAAAAcABYAAAAHAAoAAAAcABcAAAAHAAkAAAAcABgAAAAIAAkAAAAcABkAAAAIAAkAAAAcABoAAAAAAAMAAAAcABsAAAABAAcAAAAcABwAAAABAAQAAAAcAB0AAAABAAUAAAAcAB4AAAAFAAoAAAAcAB8AAAABAAMAAAAcACAAAAABAAQAAAAcACEAAAABAAQAAAAcACIAAAABAAUAAAAcACMAAAAFAAkAAAAcACQAAAAIAAkAAAAcACUAAAAIAAkAAAAcACYAAAAHAAkAAAAcACcAAAAIAAkAAAAcACgAAAAIAAkAAAAcACkAAAAHAAkAAAAcACoAAAAAAAAAAAAcACsAAAAHAAkAAAAcACwAAAAFAAkAAAAcAC0AAAAAAAAAAAAcAC4AAAAIAAoAAAAcAC8AAAAHAAkAAAAcADAAAAAHAAoAAAAcADEAAAAIAAoAAAAcADIAAAAHAAoAAAAcADMAAAAIAAoAAAAdAPD/AAADAAcAAAAdAPH/AAADAAcAAAAdAPL/AAAAAAEAAAAdAPP/AAAAAAEAAAAdAPT/AAADAAcAAAAdAPX/AAADAAcAAAAdAPb/AAADAAcAAAAdAPf/AAAAAAEAAAAdAPj/AAAAAAEAAAAdAPn/AAADAAcAAAAdAPr/AAADAAcAAAAdAPv/AAAAAAEAAAAdAPz/AAADAAcAAAAdAP3/AAADAAcAAAAdAP7/AAADAAcAAAAdAP//AAADAAcAAAAdAAAAAAADAAcAAAAdAAEAAAADAAgAAAAdAAIAAAAHAAoAAAAdAAMAAAAHAAkAAAAdAAQAAAAHAAoAAAAdAAUAAAAFAAoAAAAdAAYAAAABAAMAAAAdAAcAAAABAAQAAAAdAAgAAAAAAAYAAAAdAAkAAAACAAUAAAAdAAoAAAAAAAAAAAAdAAsAAAAAAAAAAAAdAAwAAAAAAAAAAAAdAA0AAAADAAYAAAAdAA4AAAADAAcAAAAdAA8AAAADAAcAAAAdABAAAAACAAkAAAAdABEAAAAEAAgAAAAdABIAAAAHAAkAAAAdABMAAAAHAAkAAAAdABQAAAAFAAoAAAAdABUAAAAHAAkAAAAdABYAAAAHAAoAAAAdABcAAAAIAAkAAAAdABgAAAAHAAkAAAAdABkAAAAAAAMAAAAdABoAAAABAAcAAAAdABsAAAABAAQAAAAdABwAAAABAAQAAAAdAB0AAAABAAUAAAAdAB4AAAAAAAAAAAAdAB8AAAABAAMAAAAdACAAAAABAAQAAAAdACEAAAABAAQAAAAdACIAAAABAAUAAAAdACMAAAAFAAkAAAAdACQAAAAIAAkAAAAdACUAAAAAAAAAAAAdACYAAAAHAAoAAAAdACcAAAAFAAkAAAAdACgAAAAIAAoAAAAdACkAAAAHAAoAAAAdACoAAAAFAAoAAAAdACsAAAAHAAoAAAAdACwAAAAIAAoAAAAdAC0AAAAAAAAAAAAdAC4AAAAIAAoAAAAdAC8AAAAHAAoAAAAdADAAAAAHAAkAAAAdADEAAAAIAAkAAAAdADIAAAAIAAoAAAAdADMAAAAFAAoAAAAeAPD/AAAAAAEAAAAeAPH/AAAAAAEAAAAeAPL/AAADAAcAAAAeAPP/AAADAAcAAAAeAPT/AAADAAcAAAAeAPX/AAAAAAEAAAAeAPb/AAADAAcAAAAeAPf/AAAAAAEAAAAeAPj/AAAAAAEAAAAeAPn/AAAAAAEAAAAeAPr/AAADAAcAAAAeAPv/AAADAAcAAAAeAPz/AAAAAAEAAAAeAP3/AAADAAcAAAAeAP7/AAAAAAEAAAAeAP//AAADAAcAAAAeAAAAAAADAAcAAAAeAAEAAAADAAgAAAAeAAIAAAAHAAkAAAAeAAMAAAAHAAkAAAAeAAQAAAAIAAoAAAAeAAUAAAAHAAkAAAAeAAYAAAABAAMAAAAeAAcAAAABAAQAAAAeAAgAAAABAAUAAAAeAAkAAAAAAAAAAAAeAAoAAAAAAAAAAAAeAAsAAAAAAAAAAAAeAAwAAAACAAYAAAAeAA0AAAADAAoAAAAeAA4AAAADAAcAAAAeAA8AAAACAAkAAAAeABAAAAAEAAgAAAAeABEAAAAFAAoAAAAeABIAAAAHAAoAAAAeABMAAAAIAAoAAAAeABQAAAAFAAkAAAAeABUAAAAAAAAAAAAeABYAAAAIAAkAAAAeABcAAAAIAAkAAAAeABgAAAAAAAMAAAAeABkAAAABAAcAAAAeABoAAAABAAQAAAAeABsAAAABAAQAAAAeABwAAAAAAAYAAAAeAB0AAAACAAUAAAAeAB4AAAAFAAoAAAAeAB8AAAABAAMAAAAeACAAAAABAAQAAAAeACEAAAABAAQAAAAeACIAAAABAAUAAAAeACMAAAAFAAkAAAAeACQAAAAIAAoAAAAeACUAAAAIAAkAAAAeACYAAAAHAAkAAAAeACcAAAAIAAoAAAAeACgAAAAHAAkAAAAeACkAAAAFAAkAAAAeACoAAAAFAAkAAAAeACsAAAAHAAkAAAAeACwAAAAHAAoAAAAeAC0AAAAIAAkAAAAeAC4AAAAAAAAAAAAeAC8AAAAHAAoAAAAeADAAAAAFAAkAAAAeADEAAAAIAAoAAAAeADIAAAAIAAoAAAAeADMAAAAHAAkAAAAfAPD/AAADAAcAAAAfAPH/AAAAAAEAAAAfAPL/AAADAAcAAAAfAPP/AAADAAcAAAAfAPT/AAADAAcAAAAfAPX/AAAAAAEAAAAfAPb/AAADAAcAAAAfAPf/AAAAAAEAAAAfAPj/AAADAAcAAAAfAPn/AAAAAAEAAAAfAPr/AAADAAcAAAAfAPv/AAADAAcAAAAfAPz/AAADAAcAAAAfAP3/AAADAAcAAAAfAP7/AAADAAcAAAAfAP//AAAAAAEAAAAfAAAAAAADAAcAAAAfAAEAAAADAAgAAAAfAAIAAAAFAAoAAAAfAAMAAAAFAAoAAAAfAAQAAAAIAAoAAAAfAAUAAAAHAAkAAAAfAAYAAAABAAMAAAAfAAcAAAABAAQAAAAfAAgAAAABAAUAAAAfAAkAAAAAAAAAAAAfAAoAAAAAAAAAAAAfAAsAAAAAAAAAAAAfAAwAAAADAAYAAAAfAA0AAAADAAcAAAAfAA4AAAADAAcAAAAfAA8AAAADAAgAAAAfABAAAAAFAAkAAAAfABEAAAAFAAkAAAAfABIAAAAIAAkAAAAfABMAAAAHAAkAAAAfABQAAAAAAAAAAAAfABUAAAAAAAAAAAAfABYAAAAIAAkAAAAfABcAAAAAAAAAAAAfABgAAAABAAMAAAAfABkAAAABAAQAAAAfABoAAAABAAQAAAAfABsAAAAAAAYAAAAfABwAAAACAAUAAAAfAB0AAAAAAAAAAAAfAB4AAAAFAAoAAAAfAB8AAAABAAMAAAAfACAAAAABAAQAAAAfACEAAAABAAQAAAAfACIAAAABAAUAAAAfACMAAAAFAAkAAAAfACQAAAAAAAAAAAAfACUAAAAAAAAAAAAfACYAAAAHAAkAAAAfACcAAAAHAAoAAAAfACgAAAAIAAkAAAAfACkAAAAIAAoAAAAfACoAAAAIAAoAAAAfACsAAAAHAAkAAAAfACwAAAAHAAoAAAAfAC0AAAAFAAoAAAAfAC4AAAAHAAoAAAAfAC8AAAAIAAkAAAAfADAAAAAIAAoAAAAfADEAAAAHAAkAAAAfADIAAAAFAAkAAAAfADMAAAAHAAkAAAAgAPD/AAADAAcAAAAgAPH/AAAAAAEAAAAgAPL/AAADAAcAAAAgAPP/AAADAAcAAAAgAPT/AAADAAcAAAAgAPX/AAAAAAEAAAAgAPb/AAADAAcAAAAgAPf/AAADAAcAAAAgAPj/AAADAAcAAAAgAPn/AAAAAAEAAAAgAPr/AAAAAAEAAAAgAPv/AAADAAcAAAAgAPz/AAAAAAEAAAAgAP3/AAADAAcAAAAgAP7/AAADAAcAAAAgAP//AAAAAAEAAAAgAAAAAAADAAcAAAAgAAEAAAADAAgAAAAgAAIAAAAFAAkAAAAgAAMAAAAFAAkAAAAgAAQAAAAIAAkAAAAgAAUAAAAIAAkAAAAgAAYAAAABAAMAAAAgAAcAAAABAAQAAAAgAAgAAAABAAYAAAAgAAkAAAAAAAUAAAAgAAoAAAAAAAAAAAAgAAsAAAAAAAAAAAAgAAwAAAADAAYAAAAgAA0AAAADAAcAAAAgAA4AAAACAAkAAAAgAA8AAAAEAAgAAAAgABAAAAAFAAoAAAAgABEAAAAAAAAAAAAgABIAAAAHAAkAAAAgABMAAAAIAAoAAAAgABQAAAAIAAoAAAAgABUAAAAFAAoAAAAgABYAAAAAAAAAAAAgABcAAAAAAAMAAAAgABgAAAABAAcAAAAgABkAAAABAAQAAAAgABoAAAAAAAYAAAAgABsAAAACAAUAAAAgABwAAAAFAAkAAAAgAB0AAAAFAAoAAAAgAB4AAAAHAAoAAAAgAB8AAAABAAMAAAAgACAAAAABAAQAAAAgACEAAAABAAQAAAAgACIAAAABAAUAAAAgACMAAAAHAAkAAAAgACQAAAAIAAkAAAAgACUAAAAFAAkAAAAgACYAAAAFAAkAAAAgACcAAAAFAAoAAAAgACgAAAAHAAoAAAAgACkAAAAHAAoAAAAgACoAAAAFAAkAAAAgACsAAAAIAAkAAAAgACwAAAAFAAkAAAAgAC0AAAAAAAAAAAAgAC4AAAAIAAoAAAAgAC8AAAAIAAoAAAAgADAAAAAFAAkAAAAgADEAAAAFAAoAAAAgADIAAAAIAAoAAAAgADMAAAAFAAoAAAAhAPD/AAADAAcAAAAhAPH/AAADAAcAAAAhAPL/AAADAAcAAAAhAPP/AAAAAAEAAAAhAPT/AAADAAcAAAAhAPX/AAAAAAEAAAAhAPb/AAADAAcAAAAhAPf/AAAAAAEAAAAhAPj/AAADAAcAAAAhAPn/AAADAAcAAAAhAPr/AAADAAcAAAAhAPv/AAADAAcAAAAhAPz/AAADAAcAAAAhAP3/AAADAAcAAAAhAP7/AAADAAcAAAAhAP//AAADAAcAAAAhAAAAAAADAAcAAAAhAAEAAAADAAgAAAAhAAIAAAAFAAkAAAAhAAMAAAAIAAoAAAAhAAQAAAAHAAoAAAAhAAUAAAAAAAAAAAAhAAYAAAABAAMAAAAhAAcAAAABAAQAAAAhAAgAAAABAAQAAAAhAAkAAAABAAUAAAAhAAoAAAAAAAAAAAAhAAsAAAAAAAAAAAAhAAwAAAADAAYAAAAhAA0AAAADAAcAAAAhAA4AAAADAAgAAAAhAA8AAAAIAAoAAAAhABAAAAAHAAkAAAAhABEAAAAIAAoAAAAhABIAAAAHAAoAAAAhABMAAAAFAAoAAAAhABQAAAAHAAoAAAAhABUAAAAFAAkAAAAhABYAAAAAAAMAAAAhABcAAAABAAcAAAAhABgAAAABAAQAAAAhABkAAAAAAAYAAAAhABoAAAACAAUAAAAhABsAAAAIAAkAAAAhABwAAAAIAAoAAAAhAB0AAAAIAAkAAAAhAB4AAAAIAAoAAAAhAB8AAAABAAMAAAAhACAAAAABAAQAAAAhACEAAAABAAQAAAAhACIAAAABAAUAAAAhACMAAAAIAAkAAAAhACQAAAAFAAoAAAAhACUAAAAFAAoAAAAhACYAAAAFAAoAAAAhACcAAAAHAAoAAAAhACgAAAAAAAAAAAAhACkAAAAHAAkAAAAhACoAAAAHAAoAAAAhACsAAAAAAAAAAAAhACwAAAAIAAoAAAAhAC0AAAAHAAoAAAAhAC4AAAAHAAkAAAAhAC8AAAAAAAAAAAAhADAAAAAHAAoAAAAhADEAAAAFAAkAAAAhADIAAAAFAAkAAAAhADMAAAAIAAoAAAAiAPD/AAADAAcAAAAiAPH/AAADAAcAAAAiAPL/AAADAAcAAAAiAPP/AAADAAcAAAAiAPT/AAAAAAEAAAAiAPX/AAADAAcAAAAiAPb/AAADAAcAAAAiAPf/AAAAAAEAAAAiAPj/AAADAAcAAAAiAPn/AAADAAcAAAAiAPr/AAAAAAEAAAAiAPv/AAADAAcAAAAiAPz/AAADAAcAAAAiAP3/AAADAAcAAAAiAP7/AAADAAcAAAAiAP//AAADAAcAAAAiAAAAAAAAAAEAAAAiAAEAAAADAAgAAAAiAAIAAAAIAAoAAAAiAAMAAAAAAAAAAAAiAAQAAAAIAAkAAAAiAAUAAAAFAAoAAAAiAAYAAAABAAMAAAAiAAcAAAABAAQAAAAiAAgAAAABAAQAAAAiAAkAAAABAAUAAAAiAAoAAAAAAAAAAAAiAAsAAAACAAYAAAAiAAwAAAADAAoAAAAiAA0AAAADAAcAAAAiAA4AAAADAAgAAAAiAA8AAAAFAAkAAAAiABAAAAAHAAoAAAAiABEAAAAFAAkAAAAiABIAAAAIAAkAAAAiABMAAAAIAAoAAAAiABQAAAAHAAkAAAAiABUAAAAAAAAAAAAiABYAAAABAAMAAAAiABcAAAABAAQAAAAiABgAAAABAAQAAAAiABkAAAABAAUAAAAiABoAAAAHAAkAAAAiABsAAAAFAAoAAAAiABwAAAAFAAkAAAAiAB0AAAAFAAoAAAAiAB4AAAAIAAoAAAAiAB8AAAABAAMAAAAiACAAAAABAAQAAAAiACEAAAABAAQAAAAiACIAAAABAAUAAAAiACMAAAAHAAoAAAAiACQAAAAHAAoAAAAiACUAAAAHAAoAAAAiACYAAAAFAAoAAAAiACcAAAAFAAkAAAAiACgAAAAIAAoAAAAiACkAAAAFAAkAAAAiACoAAAAAAAAAAAAiACsAAAAIAAoAAAAiACwAAAAAAAAAAAAiAC0AAAAHAAoAAAAiAC4AAAAFAAkAAAAiAC8AAAAFAAoAAAAiADAAAAAFAAkAAAAiADEAAAAHAAkAAAAiADIAAAAFAAoAAAAiADMAAAAFAAkAAAAjAPD/AAADAAcAAAAjAPH/AAADAAcAAAAjAPL/AAAAAAEAAAAjAPP/AAADAAcAAAAjAPT/AAAAAAEAAAAjAPX/AAAAAAEAAAAjAPb/AAADAAcAAAAjAPf/AAADAAcAAAAjAPj/AAADAAcAAAAjAPn/AAADAAcAAAAjAPr/AAADAAcAAAAjAPv/AAAAAAEAAAAjAPz/AAADAAcAAAAjAP3/AAADAAcAAAAjAP7/AAADAAcAAAAjAP//AAADAAcAAAAjAAAAAAADAAcAAAAjAAEAAAADAAgAAAAjAAIAAAAHAAoAAAAjAAMAAAAHAAkAAAAjAAQAAAAIAAkAAAAjAAUAAAAIAAkAAAAjAAYAAAACAAMAAAAjAAcAAAAAAAcAAAAjAAgAAAABAAQAAAAjAAkAAAABAAUAAAAjAAoAAAACAAcAAAAjAAsAAAADAAoAAAAjAAwAAAADAAcAAAAjAA0AAAADAAcAAAAjAA4AAAALAA0AAAAjAA8AAAAAAAQAAAAjABAAAAAAAAQAAAAjABEAAAAAAAUAAAAjABIAAAAFAAkAAAAjABMAAAAIAAkAAAAjABQAAAAIAAkAAAAjABUAAAAHAAkAAAAjABYAAAABAAMAAAAjABcAAAABAAQAAAAjABgAAAAAAAYAAAAjABkAAAACAAUAAAAjABoAAAAFAAkAAAAjABsAAAAHAAkAAAAjABwAAAAFAAkAAAAjAB0AAAAHAAoAAAAjAB4AAAAIAAoAAAAjAB8AAAABAAMAAAAjACAAAAABAAQAAAAjACEAAAABAAQAAAAjACIAAAABAAUAAAAjACMAAAAAAAAAAAAjACQAAAAAAAAAAAAjACUAAAAHAAkAAAAjACYAAAAAAAAAAAAjACcAAAAFAAoAAAAjACgAAAAHAAoAAAAjACkAAAAFAAoAAAAjACoAAAAIAAoAAAAjACsAAAAIAAoAAAAjACwAAAAFAAoAAAAjAC0AAAAFAAkAAAAjAC4AAAAHAAoAAAAjAC8AAAAFAAoAAAAjADAAAAAHAAoAAAAjADEAAAAIAAoAAAAjADIAAAAIAAkAAAAjADMAAAAFAAkAAAAkAPD/AAADAAcAAAAkAPH/AAADAAcAAAAkAPL/AAADAAcAAAAkAPP/AAAAAAEAAAAkAPT/AAAAAAEAAAAkAPX/AAADAAcAAAAkAPb/AAADAAcAAAAkAPf/AAAAAAEAAAAkAPj/AAADAAcAAAAkAPn/AAADAAcAAAAkAPr/AAADAAcAAAAkAPv/AAADAAcAAAAkAPz/AAADAAcAAAAkAP3/AAADAAcAAAAkAP7/AAADAAcAAAAkAP//AAADAAcAAAAkAAAAAAADAAcAAAAkAAEAAAADAAgAAAAkAAIAAAAHAAkAAAAkAAMAAAAAAAAAAAAkAAQAAAAIAAkAAAAkAAUAAAAIAAoAAAAkAAYAAAAIAAkAAAAkAAcAAAABAAMAAAAkAAgAAAABAAQAAAAkAAkAAAAQAAYAAAAkAAwAAAAAAAEAAAAkAA0AAAAAAAEAAAAkAA4AAAAQAAgAAAAkAA8AAAABAAQAAAAkABAAAAABAAQAAAAkABEAAAABAAYAAAAkABIAAAAAAAUAAAAkABMAAAAFAAoAAAAkABQAAAAFAAoAAAAkABUAAAAIAAkAAAAkABYAAAABAAMAAAAkABcAAAABAAQAAAAkABgAAAABAAUAAAAkABkAAAAFAAkAAAAkABoAAAAAAAAAAAAkABsAAAAHAAkAAAAkABwAAAAFAAoAAAAkAB0AAAAIAAoAAAAkAB4AAAAHAAoAAAAkAB8AAAABAAMAAAAkACAAAAABAAQAAAAkACEAAAABAAQAAAAkACIAAAABAAUAAAAkACMAAAAHAAkAAAAkACQAAAAHAAkAAAAkACUAAAAAAAAAAAAkACYAAAAIAAkAAAAkACcAAAAIAAoAAAAkACgAAAAHAAoAAAAkACkAAAAFAAoAAAAkACoAAAAHAAoAAAAkACsAAAAFAAoAAAAkACwAAAAHAAoAAAAkAC0AAAAHAAkAAAAkAC4AAAAFAAkAAAAkAC8AAAAIAAoAAAAkADAAAAAIAAoAAAAkADEAAAAHAAkAAAAkADIAAAAFAAoAAAAkADMAAAAIAAoAAAAlAPD/AAADAAcAAAAlAPH/AAADAAcAAAAlAPL/AAADAAcAAAAlAPP/AAAAAAEAAAAlAPT/AAADAAcAAAAlAPX/AAADAAcAAAAlAPb/AAADAAcAAAAlAPf/AAADAAcAAAAlAPj/AAADAAcAAAAlAPn/AAADAAcAAAAlAPr/AAADAAcAAAAlAPv/AAADAAcAAAAlAPz/AAADAAcAAAAlAP3/AAADAAcAAAAlAP7/AAADAAcAAAAlAP//AAADAAcAAAAlAAAAAAACAAkAAAAlAAEAAAAEAAgAAAAlAAIAAAAHAAoAAAAlAAMAAAAIAAkAAAAlAAQAAAAFAAoAAAAlAAUAAAAFAAkAAAAlAAYAAAAAAAAAAAAlAAcAAAABAAMAAAAlAAgAAAABAAQAAAAlAAkAAAAQAAYAAAAlAA0AAAADAAcAAAAlAA4AAAAQAAgAAAAlAA8AAAABAAQAAAAlABAAAAABAAQAAAAlABEAAAABAAQAAAAlABIAAAABAAYAAAAlABMAAAAAAAQAAAAlABQAAAAAAAUAAAAlABUAAAAAAAMAAAAlABYAAAABAAcAAAAlABcAAAABAAQAAAAlABgAAAABAAUAAAAlABkAAAAHAAkAAAAlABoAAAAFAAoAAAAlABsAAAAIAAoAAAAlABwAAAAIAAkAAAAlAB0AAAAIAAkAAAAlAB4AAAAHAAkAAAAlAB8AAAABAAMAAAAlACAAAAABAAQAAAAlACEAAAABAAQAAAAlACIAAAABAAUAAAAlACMAAAAHAAoAAAAlACQAAAAIAAkAAAAlACUAAAAHAAkAAAAlACYAAAAIAAoAAAAlACcAAAAFAAoAAAAlACgAAAAFAAoAAAAlACkAAAAFAAoAAAAlACoAAAAIAAkAAAAlACsAAAAHAAkAAAAlACwAAAAHAAoAAAAlAC0AAAAFAAoAAAAlAC4AAAAIAAkAAAAlAC8AAAAHAAoAAAAlADAAAAAIAAkAAAAlADEAAAAHAAkAAAAlADIAAAAIAAkAAAAlADMAAAAFAAkAAAAmAPD/AAADAAcAAAAmAPH/AAADAAcAAAAmAPL/AAADAAcAAAAmAPP/AAADAAcAAAAmAPT/AAAAAAEAAAAmAPX/AAADAAcAAAAmAPb/AAAAAAEAAAAmAPf/AAADAAcAAAAmAPj/AAADAAcAAAAmAPn/AAAAAAEAAAAmAPr/AAAAAAEAAAAmAPv/AAADAAcAAAAmAPz/AAADAAcAAAAmAP3/AAADAAcAAAAmAP7/AAADAAcAAAAmAP//AAACAAkAAAAmAAAAAAAEAAgAAAAmAAEAAAAFAAoAAAAmAAIAAAAFAAkAAAAmAAMAAAAFAAkAAAAmAAQAAAAIAAkAAAAmAAUAAAAIAAkAAAAmAAYAAAAHAAkAAAAmAAcAAAABAAMAAAAmAAgAAAABAAQAAAAmAAkAAAAQAAYAAAAmAA0AAAADAAcAAAAmAA4AAAAKAA0AAAAmAA8AAAACAAQAAAAmABAAAAAAAAcAAAAmABEAAAABAAQAAAAmABIAAAABAAQAAAAmABMAAAABAAQAAAAmABQAAAABAAYAAAAmABUAAAABAAcAAAAmABYAAAABAAQAAAAmABcAAAABAAQAAAAmABgAAAABAAUAAAAmABkAAAAFAAoAAAAmABoAAAAHAAkAAAAmABsAAAAIAAoAAAAmABwAAAAFAAoAAAAmAB0AAAAFAAkAAAAmAB4AAAAAAAAAAAAmAB8AAAABAAMAAAAmACAAAAABAAQAAAAmACEAAAABAAQAAAAmACIAAAABAAUAAAAmACMAAAAIAAoAAAAmACQAAAAIAAoAAAAmACUAAAAFAAoAAAAmACYAAAAFAAoAAAAmACcAAAAIAAoAAAAmACgAAAAIAAoAAAAmACkAAAAAAAAAAAAmACoAAAAHAAkAAAAmACsAAAAHAAoAAAAmACwAAAAAAAAAAAAmAC0AAAAFAAkAAAAmAC4AAAAFAAoAAAAmAC8AAAAFAAkAAAAmADAAAAAHAAkAAAAmADEAAAAHAAoAAAAmADIAAAAHAAkAAAAmADMAAAAIAAkAAAAnAPD/AAADAAcAAAAnAPH/AAADAAcAAAAnAPL/AAADAAcAAAAnAPP/AAAAAAEAAAAnAPT/AAAAAAEAAAAnAPX/AAADAAcAAAAnAPb/AAADAAcAAAAnAPf/AAADAAcAAAAnAPj/AAADAAcAAAAnAPn/AAADAAcAAAAnAPr/AAADAAcAAAAnAPv/AAADAAcAAAAnAPz/AAADAAcAAAAnAP3/AAADAAcAAAAnAP7/AAADAAcAAAAnAP//AAADAAgAAAAnAAAAAAAAAAAAAAAnAAEAAAAHAAkAAAAnAAIAAAAAAAAAAAAnAAMAAAAIAAkAAAAnAAQAAAAHAAoAAAAnAAUAAAAAAAAAAAAnAAYAAAAAAAMAAAAnAAcAAAABAAcAAAAnAAgAAAABAAQAAAAnAAkAAAAQAAYAAAAnAAwAAAAAAAEAAAAnAA0AAAACAAkAAAAnAA4AAAAEAAgAAAAnAA8AAAAAAAAAAAAnABAAAAACAAMAAAAnABEAAAACAAQAAAAnABIAAAAAAAcAAAAnABMAAAABAAQAAAAnABQAAAABAAQAAAAnABUAAAABAAQAAAAnABYAAAABAAQAAAAnABcAAAAAAAYAAAAnABgAAAACAAUAAAAnABkAAAAFAAkAAAAnABoAAAAIAAkAAAAnABsAAAAFAAkAAAAnABwAAAAHAAoAAAAnAB0AAAAFAAoAAAAnAB4AAAAIAAkAAAAnAB8AAAABAAMAAAAnACAAAAABAAQAAAAnACEAAAABAAQAAAAnACIAAAABAAUAAAAnACMAAAAAAAAAAAAnACQAAAAHAAkAAAAnACUAAAAFAAoAAAAnACYAAAAHAAkAAAAnACcAAAAAAAAAAAAnACgAAAAFAAkAAAAnACkAAAAFAAoAAAAnACoAAAAHAAkAAAAnACsAAAAIAAoAAAAnACwAAAAAAAAAAAAnAC0AAAAIAAkAAAAnAC4AAAAAAAAAAAAnAC8AAAAIAAkAAAAnADAAAAAIAAkAAAAnADEAAAAFAAoAAAAnADIAAAAHAAoAAAAnADMAAAAAAAAAAAAoAPD/AAADAAcAAAAoAPH/AAAAAAEAAAAoAPL/AAADAAcAAAAoAPP/AAADAAcAAAAoAPT/AAADAAcAAAAoAPX/AAADAAcAAAAoAPb/AAADAAcAAAAoAPf/AAADAAcAAAAoAPj/AAAAAAEAAAAoAPn/AAAAAAEAAAAoAPr/AAAAAAEAAAAoAPv/AAADAAcAAAAoAPz/AAADAAcAAAAoAP3/AAAAAAEAAAAoAP7/AAADAAcAAAAoAP//AAADAAgAAAAoAAAAAAAIAAoAAAAoAAEAAAAHAAkAAAAoAAIAAAAFAAkAAAAoAAMAAAAAAAMAAAAoAAQAAAAAAAQAAAAoAAUAAAAAAAQAAAAoAAYAAAABAAcAAAAoAAcAAAABAAQAAAAoAAgAAAAPAAYAAAAoAAkAAAAQAAoAAAAoAAoAAAAAAAEAAAAoAAwAAAADAAcAAAAoAA0AAAADAAgAAAAoAA4AAAAHAAkAAAAoAA8AAAAFAAkAAAAoABAAAAAFAAoAAAAoABEAAAAFAAoAAAAoABIAAAACAAMAAAAoABMAAAACAAQAAAAoABQAAAACAAQAAAAoABUAAAACAAQAAAAoABYAAAACAAQAAAAoABcAAAACAAUAAAAoABgAAAAFAAkAAAAoABkAAAAIAAkAAAAoABoAAAAFAAkAAAAoABsAAAAFAAkAAAAoABwAAAAIAAoAAAAoAB0AAAAIAAkAAAAoAB4AAAAIAAkAAAAoAB8AAAABAAMAAAAoACAAAAABAAQAAAAoACEAAAABAAQAAAAoACIAAAABAAUAAAAoACMAAAAIAAkAAAAoACQAAAAFAAkAAAAoACUAAAAFAAkAAAAoACYAAAAIAAkAAAAoACcAAAAHAAoAAAAoACgAAAAAAAAAAAAoACkAAAAHAAoAAAAoACoAAAAIAAoAAAAoACsAAAAFAAoAAAAoACwAAAAHAAkAAAAoAC0AAAAIAAkAAAAoAC4AAAAHAAoAAAAoAC8AAAAFAAkAAAAoADAAAAAHAAkAAAAoADEAAAAHAAkAAAAoADIAAAAFAAoAAAAoADMAAAAFAAkAAAApAPD/AAAAAAEAAAApAPH/AAAAAAEAAAApAPL/AAADAAcAAAApAPP/AAADAAcAAAApAPT/AAADAAcAAAApAPX/AAADAAcAAAApAPb/AAADAAcAAAApAPf/AAADAAcAAAApAPr/AAADAAcAAAApAPv/AAADAAcAAAApAPz/AAADAAcAAAApAP3/AAADAAcAAAApAP7/AAADAAcAAAApAP//AAADAAkAAAApAAAAAAACAAgAAAApAAEAAAAFAAoAAAApAAIAAAAAAAAAAAApAAMAAAABAAMAAAApAAQAAAABAAQAAAApAAUAAAABAAQAAAApAAYAAAABAAQAAAApAAcAAAABAAQAAAApAAgAAAAQAAYAAAApAAkAAAAAAAEAAAApAAoAAAADAAcAAAApAAsAAAACAAkAAAApAAwAAAAEAAcAAAApAA0AAAAEAAgAAAApAA4AAAAIAAkAAAApAA8AAAAIAAoAAAApABAAAAAAAAAAAAApABEAAAAIAAkAAAApABIAAAAFAAoAAAApABMAAAAAAAAAAAApABQAAAAIAAkAAAApABUAAAAIAAoAAAApABYAAAAIAAkAAAApABcAAAAIAAoAAAApABgAAAAAAAAAAAApABkAAAAFAAoAAAApABoAAAAIAAkAAAApABsAAAAHAAoAAAApABwAAAAAAAAAAAApAB0AAAAHAAkAAAApAB4AAAAFAAoAAAApAB8AAAABAAMAAAApACAAAAABAAQAAAApACEAAAABAAQAAAApACIAAAABAAUAAAApACMAAAAIAAoAAAApACQAAAAIAAoAAAApACUAAAAFAAkAAAApACYAAAAIAAoAAAApACcAAAAFAAoAAAApACgAAAAHAAoAAAApACkAAAAFAAoAAAApACoAAAAHAAoAAAApACsAAAAHAAkAAAApACwAAAAIAAoAAAApAC0AAAAIAAkAAAApAC4AAAAHAAkAAAApAC8AAAAIAAkAAAApADAAAAAHAAoAAAApADEAAAAIAAoAAAApADIAAAAHAAkAAAApADMAAAAAAAAAAAAqAPD/AAADAAcAAAAqAPH/AAADAAcAAAAqAPL/AAADAAcAAAAqAPP/AAAAAAEAAAAqAPT/AAADAAcAAAAqAPX/AAADAAcAAAAqAPb/AAADAAcAAAAqAPf/AAADAAcAAAAqAPr/AAAAAAEAAAAqAPv/AAADAAcAAAAqAPz/AAADAAcAAAAqAP3/AAADAAcAAAAqAP7/AAADAAcAAAAqAP//AAAAAAEAAAAqAAAAAAADAAgAAAAqAAEAAAAFAAkAAAAqAAIAAAAFAAoAAAAqAAMAAAABAAMAAAAqAAQAAAABAAQAAAAqAAUAAAAAAAYAAAAqAAYAAAAAAAcAAAAqAAcAAAABAAQAAAAqAAgAAAAQAAYAAAAqAAkAAAADAAcAAAAqAAoAAAADAAcAAAAqAAsAAAADAAgAAAAqAAwAAAAAAAAAAAAqAA0AAAAFAAoAAAAqAA4AAAAHAAoAAAAqAA8AAAAFAAoAAAAqABAAAAAHAAoAAAAqABEAAAAAAAAAAAAqABIAAAAHAAkAAAAqABMAAAAIAAkAAAAqABQAAAAIAAkAAAAqABUAAAAFAAkAAAAqABYAAAAAAAAAAAAqABcAAAAHAAoAAAAqABgAAAAIAAkAAAAqABkAAAAHAAkAAAAqABoAAAAFAAkAAAAqABsAAAAFAAoAAAAqABwAAAAHAAkAAAAqAB0AAAAAAAAAAAAqAB4AAAAIAAoAAAAqAB8AAAABAAMAAAAqACAAAAABAAQAAAAqACEAAAABAAQAAAAqACIAAAABAAUAAAAqACMAAAAFAAoAAAAqACQAAAAIAAoAAAAqACUAAAAFAAkAAAAqACYAAAAAAAAAAAAqACcAAAAFAAkAAAAqACgAAAAIAAkAAAAqACkAAAAHAAoAAAAqACoAAAAFAAoAAAAqACsAAAAFAAoAAAAqACwAAAAFAAkAAAAqAC0AAAAHAAkAAAAqAC4AAAAIAAkAAAAqAC8AAAAFAAoAAAAqADAAAAAIAAoAAAAqADEAAAAAAAAAAAAqADIAAAAHAAkAAAAqADMAAAAIAAoAAAArAPD/AAADAAcAAAArAPH/AAADAAcAAAArAPL/AAADAAcAAAArAPP/AAADAAcAAAArAPT/AAAAAAEAAAArAPX/AAADAAcAAAArAPb/AAAAAAEAAAArAPf/AAADAAcAAAArAPj/AAAAAAEAAAArAPn/AAAAAAEAAAArAPr/AAADAAcAAAArAPv/AAAAAAEAAAArAPz/AAADAAcAAAArAP3/AAAAAAEAAAArAP7/AAADAAcAAAArAP//AAADAAcAAAArAAAAAAADAAkAAAArAAEAAAACAAgAAAArAAIAAAAIAAkAAAArAAMAAAABAAMAAAArAAQAAAABAAQAAAArAAUAAAABAAYAAAArAAYAAAABAAcAAAArAAcAAAAPAAYAAAArAAgAAAAQAAoAAAArAAkAAAADAAcAAAArAAoAAAACAAkAAAArAAsAAAAEAAgAAAArAAwAAAAHAAoAAAArAA0AAAAHAAoAAAArAA4AAAAFAAoAAAArAA8AAAAFAAoAAAArABAAAAAHAAkAAAArABEAAAAIAAkAAAArABIAAAAAAAAAAAArABMAAAAAAAAAAAArABQAAAAIAAkAAAArABUAAAAAAAAAAAArABYAAAAAAAAAAAArABcAAAAHAAoAAAArABgAAAAAAAAAAAArABkAAAAHAAkAAAArABoAAAAAAAAAAAArABsAAAAHAAoAAAArABwAAAAFAAkAAAArAB0AAAAFAAoAAAArAB4AAAAIAAkAAAArAB8AAAABAAMAAAArACAAAAABAAQAAAArACEAAAABAAQAAAArACIAAAABAAUAAAArACMAAAAFAAoAAAArACQAAAAFAAoAAAArACUAAAAIAAoAAAArACYAAAAIAAoAAAArACcAAAAHAAkAAAArACgAAAAIAAoAAAArACkAAAAIAAkAAAArACoAAAAFAAoAAAArACsAAAAIAAkAAAArACwAAAAFAAoAAAArAC0AAAAFAAkAAAArAC4AAAAHAAoAAAArAC8AAAAHAAkAAAArADAAAAAHAAkAAAArADEAAAAFAAkAAAArADIAAAAFAAkAAAArADMAAAAFAAoAAAAsAPD/AAADAAcAAAAsAPH/AAADAAcAAAAsAPL/AAADAAcAAAAsAPP/AAAAAAEAAAAsAPT/AAADAAcAAAAsAPX/AAADAAcAAAAsAPb/AAADAAcAAAAsAPf/AAADAAcAAAAsAPj/AAADAAcAAAAsAPn/AAADAAcAAAAsAPr/AAAAAAEAAAAsAPv/AAADAAcAAAAsAPz/AAADAAcAAAAsAP3/AAADAAcAAAAsAP7/AAAAAAEAAAAsAP//AAAAAAEAAAAsAAAAAAADAAcAAAAsAAEAAAADAAgAAAAsAAIAAAAIAAoAAAAsAAMAAAABAAMAAAAsAAQAAAABAAQAAAAsAAUAAAABAAQAAAAsAAYAAAAPAAYAAAAsAAcAAAAQAAoAAAAsAAgAAAADAAcAAAAsAAkAAAADAAcAAAAsAAoAAAADAAgAAAAsAAsAAAAFAAoAAAAsAAwAAAAHAAkAAAAsAA0AAAAFAAkAAAAsAA4AAAAIAAkAAAAsAA8AAAAIAAkAAAAsABAAAAAFAAoAAAAsABEAAAAFAAoAAAAsABIAAAAAAAAAAAAsABMAAAAFAAkAAAAsABQAAAAFAAoAAAAsABUAAAAHAAkAAAAsABYAAAAHAAoAAAAsABcAAAAIAAoAAAAsABgAAAAFAAoAAAAsABkAAAAAAAAAAAAsABoAAAAIAAoAAAAsABsAAAAFAAkAAAAsABwAAAAFAAkAAAAsAB0AAAAHAAoAAAAsAB4AAAAAAAAAAAAsAB8AAAABAAMAAAAsACAAAAABAAQAAAAsACEAAAABAAQAAAAsACIAAAABAAUAAAAsACMAAAAAAAAAAAAsACQAAAAIAAoAAAAsACUAAAAHAAkAAAAsACYAAAAFAAoAAAAsACcAAAAFAAkAAAAsACgAAAAFAAkAAAAsACkAAAAFAAkAAAAsACoAAAAAAAAAAAAsACsAAAAFAAoAAAAsACwAAAAFAAoAAAAsAC0AAAAHAAoAAAAsAC4AAAAIAAoAAAAsAC8AAAAHAAoAAAAsADAAAAAFAAoAAAAsADEAAAAFAAkAAAAsADIAAAAHAAkAAAAsADMAAAAIAAkAAAAtAPD/AAADAAcAAAAtAPH/AAADAAcAAAAtAPL/AAADAAcAAAAtAPP/AAADAAcAAAAtAPT/AAADAAcAAAAtAPX/AAADAAcAAAAtAPb/AAADAAcAAAAtAPf/AAADAAcAAAAtAPj/AAADAAcAAAAtAPn/AAADAAcAAAAtAPr/AAADAAcAAAAtAPv/AAADAAcAAAAtAPz/AAADAAcAAAAtAP3/AAAAAAEAAAAtAP7/AAADAAcAAAAtAP//AAADAAcAAAAtAAAAAAADAAcAAAAtAAEAAAADAAgAAAAtAAIAAAAHAAkAAAAtAAMAAAACAAMAAAAtAAQAAAACAAQAAAAtAAUAAAAAAAcAAAAtAAYAAAAQAAoAAAAtAAcAAAADAAcAAAAtAAgAAAADAAcAAAAtAAkAAAACAAkAAAAtAAoAAAAEAAgAAAAtAAsAAAAIAAkAAAAtAAwAAAAHAAkAAAAtAA0AAAAFAAkAAAAtAA4AAAAIAAoAAAAtAA8AAAAIAAkAAAAtABAAAAAFAAoAAAAtABEAAAAFAAoAAAAtABIAAAAHAAoAAAAtABMAAAAFAAkAAAAtABQAAAAHAAkAAAAtABUAAAAIAAkAAAAtABYAAAAHAAoAAAAtABcAAAAHAAkAAAAtABgAAAAAAAAAAAAtABkAAAAAAAAAAAAtABoAAAAHAAkAAAAtABsAAAAHAAkAAAAtABwAAAAAAAAAAAAtAB0AAAAFAAoAAAAtAB4AAAAHAAkAAAAtAB8AAAABAAMAAAAtACAAAAABAAQAAAAtACEAAAABAAQAAAAtACIAAAABAAUAAAAtACMAAAAFAAkAAAAtACQAAAAIAAkAAAAtACUAAAAFAAoAAAAtACYAAAAHAAoAAAAtACcAAAAFAAoAAAAtACgAAAAIAAoAAAAtACkAAAAHAAoAAAAtACoAAAAHAAoAAAAtACsAAAAAAAAAAAAtACwAAAAFAAkAAAAtAC0AAAAHAAoAAAAtAC4AAAAHAAoAAAAtAC8AAAAHAAkAAAAtADAAAAAFAAkAAAAtADEAAAAIAAoAAAAtADIAAAAIAAoAAAAtADMAAAAIAAkAAAAuAPD/AAADAAcAAAAuAPH/AAADAAcAAAAuAPL/AAADAAcAAAAuAPP/AAADAAcAAAAuAPT/AAAAAAEAAAAuAPX/AAADAAcAAAAuAPb/AAAAAAEAAAAuAPf/AAADAAcAAAAuAPj/AAADAAcAAAAuAPn/AAAAAAEAAAAuAPr/AAADAAcAAAAuAPv/AAAAAAEAAAAuAPz/AAADAAcAAAAuAP3/AAADAAcAAAAuAP7/AAADAAcAAAAuAP//AAADAAcAAAAuAAAAAAADAAcAAAAuAAEAAAADAAgAAAAuAAIAAAAIAAoAAAAuAAMAAAACAAYAAAAuAAQAAAACAAcAAAAuAAUAAAAAAAEAAAAuAAYAAAADAAcAAAAuAAcAAAADAAcAAAAuAAgAAAACAAkAAAAuAAkAAAAEAAgAAAAuAAoAAAAIAAoAAAAuAAsAAAAIAAkAAAAuAAwAAAAFAAoAAAAuAA0AAAAHAAoAAAAuAA4AAAAHAAoAAAAuAA8AAAAIAAoAAAAuABAAAAAFAAkAAAAuABEAAAAIAAoAAAAuABIAAAAIAAoAAAAuABMAAAAFAAkAAAAuABQAAAAIAAkAAAAuABUAAAAIAAkAAAAuABYAAAAIAAoAAAAuABcAAAAHAAkAAAAuABgAAAAFAAoAAAAuABkAAAAIAAoAAAAuABoAAAAAAAAAAAAuABsAAAAFAAkAAAAuABwAAAAIAAoAAAAuAB0AAAAHAAoAAAAuAB4AAAAFAAkAAAAuAB8AAAABAAMAAAAuACAAAAABAAQAAAAuACEAAAABAAQAAAAuACIAAAABAAYAAAAuACMAAAAAAAQAAAAuACQAAAAAAAQAAAAuACUAAAAAAAQAAAAuACYAAAAAAAQAAAAuACcAAAAAAAQAAAAuACgAAAAAAAQAAAAuACkAAAAAAAQAAAAuACoAAAAAAAQAAAAuACsAAAAAAAQAAAAuACwAAAAAAAQAAAAuAC0AAAAAAAQAAAAuAC4AAAAAAAQAAAAuAC8AAAAAAAQAAAAuADAAAAAAAAQAAAAuADEAAAAAAAQAAAAuADIAAAAAAAQAAAAuADMAAAALAA4AAAAvAPD/AAADAAcAAAAvAPH/AAADAAcAAAAvAPL/AAAAAAEAAAAvAPP/AAAAAAEAAAAvAPT/AAADAAcAAAAvAPX/AAADAAcAAAAvAPb/AAADAAcAAAAvAPf/AAADAAcAAAAvAPj/AAADAAcAAAAvAPn/AAADAAcAAAAvAPr/AAADAAcAAAAvAPv/AAAAAAEAAAAvAPz/AAAAAAEAAAAvAP3/AAADAAcAAAAvAP7/AAADAAcAAAAvAP//AAADAAcAAAAvAAAAAAAAAAEAAAAvAAEAAAADAAkAAAAvAAIAAAACAAcAAAAvAAMAAAADAAoAAAAvAAQAAAADAAcAAAAvAAUAAAADAAcAAAAvAAYAAAACAAkAAAAvAAcAAAAEAAcAAAAvAAgAAAAEAAgAAAAvAAkAAAAFAAkAAAAvAAoAAAAHAAkAAAAvAAsAAAAIAAkAAAAvAAwAAAAIAAoAAAAvAA0AAAAAAAAAAAAvAA4AAAAFAAkAAAAvAA8AAAAFAAkAAAAvABAAAAAFAAkAAAAvABEAAAAFAAoAAAAvABIAAAAHAAoAAAAvABMAAAAHAAoAAAAvABQAAAAFAAkAAAAvABUAAAAIAAkAAAAvABYAAAAIAAkAAAAvABcAAAAFAAoAAAAvABgAAAAFAAoAAAAvABkAAAAHAAkAAAAvABoAAAAIAAoAAAAvABsAAAAIAAkAAAAvABwAAAAHAAkAAAAvAB0AAAAIAAkAAAAvAB4AAAAIAAoAAAAvAB8AAAABAAMAAAAvACAAAAABAAQAAAAvACEAAAABAAQAAAAvACIAAAABAAQAAAAvACMAAAABAAQAAAAvACQAAAABAAQAAAAvACUAAAABAAQAAAAvACYAAAABAAQAAAAvACcAAAABAAQAAAAvACgAAAABAAQAAAAvACkAAAABAAQAAAAvACoAAAABAAQAAAAvACsAAAABAAQAAAAvACwAAAABAAQAAAAvAC0AAAABAAQAAAAvAC4AAAABAAQAAAAvAC8AAAABAAQAAAAvADAAAAABAAQAAAAvADEAAAABAAQAAAAvADIAAAABAAQAAAAvADMAAAAQAAYAAAAwAPD/AAADAAcAAAAwAPH/AAADAAcAAAAwAPL/AAAAAAEAAAAwAPP/AAAAAAEAAAAwAPT/AAAAAAEAAAAwAPX/AAADAAcAAAAwAPb/AAADAAcAAAAwAPf/AAADAAcAAAAwAPj/AAADAAcAAAAwAPn/AAAAAAEAAAAwAPr/AAADAAcAAAAwAPv/AAAAAAEAAAAwAPz/AAAAAAEAAAAwAP3/AAADAAcAAAAwAP7/AAADAAcAAAAwAP//AAADAAcAAAAwAAAAAAADAAcAAAAwAAEAAAADAAcAAAAwAAIAAAAAAAEAAAAwAAMAAAADAAcAAAAwAAQAAAADAAcAAAAwAAUAAAACAAkAAAAwAAYAAAAEAAgAAAAwAAcAAAAIAAoAAAAwAAgAAAAFAAoAAAAwAAkAAAAAAAAAAAAwAAoAAAAIAAkAAAAwAAsAAAAIAAkAAAAwAAwAAAAIAAoAAAAwAA0AAAAHAAoAAAAwAA4AAAAFAAkAAAAwAA8AAAAIAAkAAAAwABAAAAAIAAkAAAAwABEAAAAFAAkAAAAwABIAAAAFAAkAAAAwABMAAAAHAAkAAAAwABQAAAAIAAkAAAAwABUAAAAFAAkAAAAwABYAAAAFAAoAAAAwABcAAAAHAAoAAAAwABgAAAAIAAoAAAAwABkAAAAAAAAAAAAwABoAAAAHAAkAAAAwABsAAAAFAAoAAAAwABwAAAAAAAAAAAAwAB0AAAAIAAoAAAAwAB4AAAAIAAkAAAAwAB8AAAABAAMAAAAwACAAAAABAAQAAAAwACEAAAABAAQAAAAwACIAAAABAAQAAAAwACMAAAABAAQAAAAwACQAAAABAAQAAAAwACUAAAABAAQAAAAwACYAAAABAAQAAAAwACcAAAABAAQAAAAwACgAAAABAAQAAAAwACkAAAABAAQAAAAwACoAAAABAAQAAAAwACsAAAABAAQAAAAwACwAAAABAAQAAAAwAC0AAAABAAQAAAAwAC4AAAABAAQAAAAwAC8AAAABAAQAAAAwADAAAAABAAQAAAAwADEAAAABAAQAAAAwADIAAAABAAQAAAAwADMAAAAQAAYAAAAxAPD/AAADAAcAAAAxAPH/AAADAAcAAAAxAPL/AAADAAcAAAAxAPP/AAADAAcAAAAxAPT/AAADAAcAAAAxAPX/AAADAAcAAAAxAPb/AAADAAcAAAAxAPf/AAADAAcAAAAxAPj/AAADAAcAAAAxAPn/AAADAAcAAAAxAPr/AAADAAcAAAAxAPv/AAADAAcAAAAxAPz/AAADAAcAAAAxAP3/AAADAAcAAAAxAP7/AAADAAcAAAAxAP//AAAAAAEAAAAxAAAAAAAAAAEAAAAxAAEAAAADAAcAAAAxAAIAAAAAAAEAAAAxAAMAAAADAAcAAAAxAAQAAAACAAkAAAAxAAUAAAAEAAgAAAAxAAYAAAAFAAoAAAAxAAcAAAAIAAoAAAAxAAgAAAAFAAoAAAAxAAkAAAAAAAAAAAAxAAoAAAAAAAAAAAAxAAsAAAAAAAAAAAAxAAwAAAAIAAoAAAAxAA0AAAAIAAkAAAAxAA4AAAAIAAkAAAAxAA8AAAAIAAkAAAAxABAAAAAFAAoAAAAxABEAAAAAAAAAAAAxABIAAAAFAAkAAAAxABMAAAAFAAoAAAAxABQAAAAFAAkAAAAxABUAAAAFAAoAAAAxABYAAAAHAAkAAAAxABcAAAAFAAoAAAAxABgAAAAFAAoAAAAxABkAAAAFAAoAAAAxABoAAAAHAAkAAAAxABsAAAAIAAoAAAAxABwAAAAIAAoAAAAxAB0AAAAIAAkAAAAxAB4AAAAFAAoAAAAxAB8AAAABAAMAAAAxACAAAAABAAQAAAAxACEAAAABAAQAAAAxACIAAAABAAQAAAAxACMAAAABAAQAAAAxACQAAAABAAQAAAAxACUAAAABAAQAAAAxACYAAAABAAQAAAAxACcAAAABAAQAAAAxACgAAAABAAQAAAAxACkAAAABAAQAAAAxACoAAAABAAQAAAAxACsAAAABAAQAAAAxACwAAAABAAQAAAAxAC0AAAABAAQAAAAxAC4AAAABAAQAAAAxAC8AAAABAAQAAAAxADAAAAABAAQAAAAxADEAAAABAAQAAAAxADIAAAABAAQAAAAxADMAAAAQAAYAAAAyAPD/AAADAAcAAAAyAPH/AAADAAcAAAAyAPL/AAAAAAEAAAAyAPP/AAAAAAEAAAAyAPT/AAADAAcAAAAyAPX/AAADAAcAAAAyAPb/AAADAAcAAAAyAPf/AAADAAcAAAAyAPj/AAAAAAEAAAAyAPn/AAAAAAEAAAAyAPr/AAAAAAEAAAAyAPv/AAAAAAEAAAAyAPz/AAADAAcAAAAyAP3/AAADAAcAAAAyAP7/AAADAAcAAAAyAP//AAADAAcAAAAyAAAAAAADAAcAAAAyAAEAAAADAAcAAAAyAAIAAAADAAcAAAAyAAMAAAACAAkAAAAyAAQAAAAEAAgAAAAyAAUAAAAAAAAAAAAyAAYAAAAFAAoAAAAyAAcAAAAIAAoAAAAyAAgAAAAIAAkAAAAyAAkAAAAIAAoAAAAyAAoAAAAIAAoAAAAyAAsAAAAIAAkAAAAyAAwAAAAFAAkAAAAyAA0AAAAAAAAAAAAyAA4AAAAHAAoAAAAyAA8AAAAIAAkAAAAyABAAAAAFAAkAAAAyABEAAAAHAAoAAAAyABIAAAAHAAoAAAAyABMAAAAFAAkAAAAyABQAAAAAAAAAAAAyABUAAAAIAAoAAAAyABYAAAAHAAoAAAAyABcAAAAAAAAAAAAyABgAAAAHAAoAAAAyABkAAAAAAAAAAAAyABoAAAAHAAoAAAAyABsAAAAHAAoAAAAyABwAAAAHAAkAAAAyAB0AAAAFAAkAAAAyAB4AAAAAAAMAAAAyAB8AAAABAAcAAAAyACAAAAABAAQAAAAyACEAAAABAAQAAAAyACIAAAABAAQAAAAyACMAAAAAAAYAAAAyACQAAAACAAQAAAAyACUAAAACAAQAAAAyACYAAAACAAQAAAAyACcAAAACAAQAAAAyACgAAAACAAQAAAAyACkAAAACAAQAAAAyACoAAAACAAQAAAAyACsAAAACAAQAAAAyACwAAAACAAQAAAAyAC0AAAACAAQAAAAyAC4AAAACAAQAAAAyAC8AAAACAAQAAAAyADAAAAACAAQAAAAyADEAAAACAAQAAAAyADIAAAACAAQAAAAyADMAAAAKAA4AAAAzAPD/AAADAAcAAAAzAPH/AAADAAcAAAAzAPL/AAAAAAEAAAAzAPP/AAADAAcAAAAzAPT/AAADAAcAAAAzAPX/AAAAAAEAAAAzAPb/AAAAAAEAAAAzAPf/AAADAAcAAAAzAPj/AAAAAAEAAAAzAPn/AAADAAcAAAAzAPr/AAADAAcAAAAzAPv/AAADAAcAAAAzAPz/AAADAAcAAAAzAP3/AAADAAcAAAAzAP7/AAADAAcAAAAzAP//AAADAAcAAAAzAAAAAAADAAcAAAAzAAEAAAAAAAEAAAAzAAIAAAACAAkAAAAzAAMAAAAEAAgAAAAzAAQAAAAIAAkAAAAzAAUAAAAFAAkAAAAzAAYAAAAHAAkAAAAzAAcAAAAHAAoAAAAzAAgAAAAFAAoAAAAzAAkAAAAHAAoAAAAzAAoAAAAHAAoAAAAzAAsAAAAFAAoAAAAzAAwAAAAFAAoAAAAzAA0AAAAIAAoAAAAzAA4AAAAHAAoAAAAzAA8AAAAHAAkAAAAzABAAAAAFAAkAAAAzABEAAAAHAAoAAAAzABIAAAAIAAoAAAAzABMAAAAFAAoAAAAzABQAAAAFAAkAAAAzABUAAAAHAAoAAAAzABYAAAAHAAkAAAAzABcAAAAIAAkAAAAzABgAAAAIAAkAAAAzABkAAAAIAAoAAAAzABoAAAAIAAoAAAAzABsAAAAFAAoAAAAzABwAAAAIAAoAAAAzAB0AAAAAAAMAAAAzAB4AAAABAAcAAAAzAB8AAAABAAQAAAAzACAAAAABAAQAAAAzACEAAAABAAQAAAAzACIAAAABAAQAAAAzACMAAAABAAUAAAAzACQAAAAIAAkAAAAzACUAAAAAAAAAAAAzACYAAAAIAAkAAAAzACcAAAAIAAoAAAAzACgAAAAHAAoAAAAzACkAAAAHAAoAAAAzACoAAAAAAAAAAAAzACsAAAAIAAoAAAAzACwAAAAHAAkAAAAzAC0AAAAIAAoAAAAzAC4AAAAIAAkAAAAzAC8AAAAFAAkAAAAzADAAAAAHAAoAAAAzADEAAAAIAAkAAAAzADIAAAAIAAkAAAAzADMAAAAAAAAAAAA0APD/AAADAAcAAAA0APH/AAADAAcAAAA0APL/AAADAAcAAAA0APP/AAADAAcAAAA0APT/AAADAAcAAAA0APX/AAAAAAEAAAA0APb/AAADAAcAAAA0APf/AAADAAcAAAA0APj/AAADAAcAAAA0APn/AAADAAcAAAA0APr/AAAAAAEAAAA0APv/AAADAAcAAAA0APz/AAADAAcAAAA0AP3/AAADAAcAAAA0AP7/AAADAAcAAAA0AP//AAADAAcAAAA0AAAAAAADAAcAAAA0AAEAAAADAAcAAAA0AAIAAAADAAgAAAA0AAMAAAAFAAoAAAA0AAQAAAAHAAoAAAA0AAUAAAAAAAAAAAA0AAYAAAAHAAkAAAA0AAcAAAAHAAoAAAA0AAgAAAAIAAkAAAA0AAkAAAAFAAoAAAA0AAoAAAAFAAkAAAA0AAsAAAAHAAoAAAA0AAwAAAAFAAoAAAA0AA0AAAAFAAkAAAA0AA4AAAAHAAkAAAA0AA8AAAAHAAkAAAA0ABAAAAAHAAoAAAA0ABEAAAAIAAoAAAA0ABIAAAAHAAoAAAA0ABMAAAAHAAoAAAA0ABQAAAAHAAoAAAA0ABUAAAAFAAoAAAA0ABYAAAAIAAkAAAA0ABcAAAAFAAkAAAA0ABgAAAAHAAoAAAA0ABkAAAAIAAoAAAA0ABoAAAAFAAoAAAA0ABsAAAAFAAkAAAA0ABwAAAAHAAoAAAA0AB0AAAABAAMAAAA0AB4AAAABAAQAAAA0AB8AAAABAAQAAAA0ACAAAAABAAQAAAA0ACEAAAABAAQAAAA0ACIAAAABAAQAAAA0ACMAAAABAAUAAAA0ACQAAAAFAAkAAAA0ACUAAAAIAAoAAAA0ACYAAAAAAAAAAAA0ACcAAAAIAAkAAAA0ACgAAAAHAAkAAAA0ACkAAAAHAAkAAAA0ACoAAAAHAAkAAAA0ACsAAAAIAAoAAAA0ACwAAAAIAAkAAAA0AC0AAAAFAAoAAAA0AC4AAAAFAAkAAAA0AC8AAAAHAAoAAAA0ADAAAAAHAAkAAAA0ADEAAAAIAAkAAAA0ADIAAAAIAAoAAAA0ADMAAAAAAAAAAAA1APD/AAADAAcAAAA1APH/AAADAAcAAAA1APL/AAADAAcAAAA1APP/AAADAAcAAAA1APT/AAAAAAEAAAA1APX/AAADAAcAAAA1APb/AAAAAAEAAAA1APf/AAAAAAEAAAA1APj/AAADAAcAAAA1APn/AAADAAcAAAA1APr/AAADAAcAAAA1APv/AAAAAAEAAAA1APz/AAADAAcAAAA1AP3/AAADAAcAAAA1AP7/AAADAAcAAAA1AP//AAAAAAEAAAA1AAAAAAAAAAEAAAA1AAEAAAADAAcAAAA1AAIAAAADAAgAAAA1AAMAAAAFAAoAAAA1AAQAAAAFAAkAAAA1AAUAAAAFAAoAAAA1AAYAAAAIAAoAAAA1AAcAAAAHAAoAAAA1AAgAAAAIAAoAAAA1AAkAAAAFAAkAAAA1AAoAAAAHAAkAAAA1AAsAAAAIAAkAAAA1AAwAAAAFAAkAAAA1AA0AAAAIAAkAAAA1AA4AAAAIAAkAAAA1AA8AAAAIAAoAAAA1ABAAAAAHAAoAAAA1ABEAAAAHAAkAAAA1ABIAAAAIAAkAAAA1ABMAAAAHAAoAAAA1ABQAAAAHAAoAAAA1ABUAAAAIAAkAAAA1ABYAAAAIAAkAAAA1ABcAAAAIAAoAAAA1ABgAAAAAAAAAAAA1ABkAAAAIAAkAAAA1ABoAAAAFAAkAAAA1ABsAAAAHAAoAAAA1ABwAAAAAAAMAAAA1AB0AAAABAAcAAAA1AB4AAAABAAQAAAA1AB8AAAABAAQAAAA1ACAAAAAAAAYAAAA1ACEAAAABAAQAAAA1ACIAAAABAAQAAAA1ACMAAAABAAUAAAA1ACQAAAAFAAkAAAA1ACUAAAAHAAkAAAA1ACYAAAAIAAkAAAA1ACcAAAAIAAoAAAA1ACgAAAAFAAkAAAA1ACkAAAAIAAkAAAA1ACoAAAAHAAkAAAA1ACsAAAAHAAkAAAA1ACwAAAAFAAkAAAA1AC0AAAAFAAkAAAA1AC4AAAAFAAoAAAA1AC8AAAAFAAkAAAA1ADAAAAAFAAkAAAA1ADEAAAAFAAkAAAA1ADIAAAAFAAkAAAA1ADMAAAAHAAkAAAA2APD/AAADAAcAAAA2APH/AAADAAcAAAA2APL/AAADAAcAAAA2APP/AAADAAcAAAA2APT/AAADAAcAAAA2APX/AAAAAAEAAAA2APb/AAADAAcAAAA2APf/AAAAAAEAAAA2APj/AAADAAcAAAA2APn/AAADAAcAAAA2APr/AAADAAcAAAA2APv/AAADAAcAAAA2APz/AAAAAAEAAAA2AP3/AAADAAcAAAA2AP7/AAADAAcAAAA2AP//AAADAAcAAAA2AAAAAAADAAcAAAA2AAEAAAADAAcAAAA2AAIAAAADAAgAAAA2AAMAAAAHAAoAAAA2AAQAAAAIAAkAAAA2AAUAAAAFAAoAAAA2AAYAAAAHAAoAAAA2AAcAAAAIAAoAAAA2AAgAAAAIAAoAAAA2AAkAAAAFAAkAAAA2AAoAAAAHAAoAAAA2AAsAAAAHAAoAAAA2AAwAAAAIAAoAAAA2AA0AAAAHAAoAAAA2AA4AAAAIAAoAAAA2AA8AAAAHAAoAAAA2ABAAAAAIAAkAAAA2ABEAAAAHAAkAAAA2ABIAAAAIAAkAAAA2ABMAAAAHAAkAAAA2ABQAAAAIAAkAAAA2ABUAAAAHAAkAAAA2ABYAAAAFAAoAAAA2ABcAAAAFAAoAAAA2ABgAAAAHAAkAAAA2ABkAAAAHAAoAAAA2ABoAAAAHAAkAAAA2ABsAAAAAAAMAAAA2ABwAAAABAAcAAAA2AB0AAAABAAQAAAA2AB4AAAABAAQAAAA2AB8AAAABAAQAAAA2ACAAAAABAAUAAAA2ACEAAAABAAQAAAA2ACIAAAABAAQAAAA2ACMAAAABAAUAAAA2ACQAAAAIAAoAAAA2ACUAAAAHAAkAAAA2ACYAAAAIAAkAAAA2ACcAAAAAAAAAAAA2ACgAAAAFAAoAAAA2ACkAAAAIAAoAAAA2ACoAAAAFAAkAAAA2ACsAAAAFAAkAAAA2ACwAAAAIAAoAAAA2AC0AAAAFAAoAAAA2AC4AAAAHAAkAAAA2AC8AAAAFAAkAAAA2ADAAAAAHAAoAAAA2ADEAAAAHAAoAAAA2ADIAAAAFAAoAAAA2ADMAAAAFAAoAAAA3APD/AAADAAcAAAA3APH/AAADAAcAAAA3APL/AAADAAcAAAA3APP/AAADAAcAAAA3APT/AAADAAcAAAA3APX/AAAAAAEAAAA3APb/AAADAAcAAAA3APf/AAADAAcAAAA3APj/AAADAAcAAAA3APn/AAADAAcAAAA3APr/AAADAAcAAAA3APv/AAAAAAEAAAA3APz/AAADAAcAAAA3AP3/AAADAAcAAAA3AP7/AAADAAcAAAA3AP//AAADAAcAAAA3AAAAAAADAAcAAAA3AAEAAAACAAkAAAA3AAIAAAAEAAgAAAA3AAMAAAAHAAoAAAA3AAQAAAAIAAkAAAA3AAUAAAAHAAkAAAA3AAYAAAAIAAkAAAA3AAcAAAAIAAkAAAA3AAgAAAAAAAAAAAA3AAkAAAAFAAoAAAA3AAoAAAAAAAAAAAA3AAsAAAAHAAkAAAA3AAwAAAAFAAkAAAA3AA0AAAAIAAkAAAA3AA4AAAAAAAAAAAA3AA8AAAAIAAoAAAA3ABAAAAAHAAkAAAA3ABEAAAAFAAoAAAA3ABIAAAAAAAAAAAA3ABMAAAAHAAoAAAA3ABQAAAAAAAAAAAA3ABUAAAAHAAoAAAA3ABYAAAAHAAkAAAA3ABcAAAAIAAkAAAA3ABgAAAAAAAAAAAA3ABkAAAAFAAkAAAA3ABoAAAAHAAkAAAA3ABsAAAABAAMAAAA3ABwAAAABAAQAAAA3AB0AAAABAAQAAAA3AB4AAAABAAQAAAA3AB8AAAAAAAYAAAA3ACAAAAACAAUAAAA3ACEAAAABAAQAAAA3ACIAAAABAAQAAAA3ACMAAAABAAUAAAA3ACQAAAAFAAoAAAA3ACUAAAAIAAkAAAA3ACYAAAAIAAkAAAA3ACcAAAAHAAkAAAA3ACgAAAAIAAoAAAA3ACkAAAAFAAkAAAA3ACoAAAAHAAkAAAA3ACsAAAAFAAoAAAA3ACwAAAAIAAkAAAA3AC0AAAAAAAAAAAA3AC4AAAAHAAkAAAA3AC8AAAAAAAAAAAA3ADAAAAAFAAkAAAA3ADEAAAAFAAkAAAA3ADIAAAAAAAAAAAA3ADMAAAAFAAkAAAA4APD/AAADAAcAAAA4APH/AAADAAcAAAA4APL/AAAAAAEAAAA4APP/AAAAAAEAAAA4APT/AAADAAcAAAA4APX/AAACAAkAAAA4APb/AAAEAAcAAAA4APf/AAAEAAcAAAA4APj/AAAEAAcAAAA4APn/AAAEAAcAAAA4APr/AAACAAoAAAA4APv/AAADAAcAAAA4APz/AAADAAcAAAA4AP3/AAADAAcAAAA4AP7/AAAAAAEAAAA4AP//AAACAAkAAAA4AAAAAAAEAAcAAAA4AAEAAAAEAAgAAAA4AAIAAAAFAAoAAAA4AAMAAAAIAAkAAAA4AAQAAAAFAAkAAAA4AAUAAAAFAAoAAAA4AAYAAAAIAAoAAAA4AAcAAAAHAAkAAAA4AAgAAAAHAAkAAAA4AAkAAAAFAAkAAAA4AAoAAAAFAAoAAAA4AAsAAAAFAAkAAAA4AAwAAAAIAAoAAAA4AA0AAAAIAAkAAAA4AA4AAAAFAAoAAAA4AA8AAAAFAAoAAAA4ABAAAAAHAAoAAAA4ABEAAAAIAAkAAAA4ABIAAAAIAAoAAAA4ABMAAAAIAAkAAAA4ABQAAAAAAAAAAAA4ABUAAAAHAAkAAAA4ABYAAAAAAAAAAAA4ABcAAAAHAAkAAAA4ABgAAAAIAAkAAAA4ABkAAAAIAAoAAAA4ABoAAAAAAAMAAAA4ABsAAAABAAcAAAA4ABwAAAABAAQAAAA4AB0AAAABAAQAAAA4AB4AAAAAAAYAAAA4AB8AAAACAAUAAAA4ACAAAAABAAMAAAA4ACEAAAABAAQAAAA4ACIAAAABAAQAAAA4ACMAAAABAAUAAAA4ACQAAAAHAAkAAAA4ACUAAAAIAAoAAAA4ACYAAAAFAAoAAAA4ACcAAAAHAAoAAAA4ACgAAAAHAAkAAAA4ACkAAAAFAAkAAAA4ACoAAAAFAAoAAAA4ACsAAAAAAAAAAAA4ACwAAAAIAAkAAAA4AC0AAAAIAAoAAAA4AC4AAAAIAAkAAAA4AC8AAAAFAAkAAAA4ADAAAAAFAAkAAAA4ADEAAAAHAAkAAAA4ADIAAAAHAAoAAAA4ADMAAAAFAAkAAAA5APD/AAADAAcAAAA5APH/AAADAAcAAAA5APL/AAADAAcAAAA5APP/AAADAAcAAAA5APT/AAACAAkAAAA5APX/AAAEAAgAAAA5APb/AAAFAAkAAAA5APf/AAAAAAAAAAA5APj/AAAIAAkAAAA5APn/AAAFAAkAAAA5APr/AAAEAAYAAAA5APv/AAAEAAcAAAA5APz/AAAEAAcAAAA5AP3/AAAEAAcAAAA5AP7/AAAEAAcAAAA5AP//AAAEAAgAAAA5AAAAAAAIAAkAAAA5AAEAAAAFAAkAAAA5AAIAAAAHAAkAAAA5AAMAAAAFAAkAAAA5AAQAAAAFAAkAAAA5AAUAAAAFAAoAAAA5AAYAAAAIAAoAAAA5AAcAAAAHAAoAAAA5AAgAAAAFAAoAAAA5AAkAAAAIAAoAAAA5AAoAAAAFAAkAAAA5AAsAAAAFAAoAAAA5AAwAAAAFAAkAAAA5AA0AAAAIAAoAAAA5AA4AAAAFAAkAAAA5AA8AAAAIAAoAAAA5ABAAAAAFAAoAAAA5ABEAAAAFAAkAAAA5ABIAAAAAAAAAAAA5ABMAAAAHAAoAAAA5ABQAAAAAAAAAAAA5ABUAAAAIAAoAAAA5ABYAAAAIAAoAAAA5ABcAAAAHAAkAAAA5ABgAAAAHAAkAAAA5ABkAAAAHAAkAAAA5ABoAAAABAAMAAAA5ABsAAAABAAQAAAA5ABwAAAABAAQAAAA5AB0AAAABAAQAAAA5AB4AAAABAAUAAAA5AB8AAAAIAAkAAAA5ACAAAAABAAMAAAA5ACEAAAABAAQAAAA5ACIAAAABAAQAAAA5ACMAAAABAAUAAAA5ACQAAAAAAAAAAAA5ACUAAAAFAAoAAAA5ACYAAAAFAAoAAAA5ACcAAAAIAAoAAAA5ACgAAAAIAAoAAAA5ACkAAAAHAAoAAAA5ACoAAAAFAAkAAAA5ACsAAAAHAAoAAAA5ACwAAAAFAAoAAAA5AC0AAAAHAAoAAAA5AC4AAAAIAAkAAAA5AC8AAAAFAAoAAAA5ADAAAAAFAAkAAAA5ADEAAAAFAAoAAAA5ADIAAAAHAAoAAAA5ADMAAAAIAAkAAAA6APD/AAAAAAEAAAA6APH/AAADAAcAAAA6APL/AAACAAkAAAA6APP/AAAEAAcAAAA6APT/AAAEAAgAAAA6APX/AAAHAAkAAAA6APb/AAAIAAoAAAA6APf/AAAIAAoAAAA6APj/AAAFAAkAAAA6APn/AAAAAAAAAAA6APr/AAAHAAkAAAA6APv/AAAHAAkAAAA6APz/AAAFAAoAAAA6AP3/AAAIAAoAAAA6AP7/AAAAAAAAAAA6AP//AAAIAAkAAAA6AAAAAAAHAAoAAAA6AAEAAAAFAAoAAAA6AAIAAAAHAAoAAAA6AAMAAAAAAAAAAAA6AAQAAAAHAAkAAAA6AAUAAAAIAAoAAAA6AAYAAAAFAAoAAAA6AAcAAAAHAAkAAAA6AAgAAAAFAAkAAAA6AAkAAAAHAAoAAAA6AAoAAAAHAAoAAAA6AAsAAAAIAAoAAAA6AAwAAAAAAAAAAAA6AA0AAAAIAAoAAAA6AA4AAAAFAAkAAAA6AA8AAAAIAAoAAAA6ABAAAAAAAAAAAAA6ABEAAAAIAAoAAAA6ABIAAAAHAAkAAAA6ABMAAAAFAAkAAAA6ABQAAAAFAAkAAAA6ABUAAAAIAAkAAAA6ABYAAAAIAAkAAAA6ABcAAAAIAAkAAAA6ABgAAAAHAAkAAAA6ABkAAAAAAAMAAAA6ABoAAAABAAcAAAA6ABsAAAABAAQAAAA6ABwAAAABAAQAAAA6AB0AAAAAAAYAAAA6AB4AAAACAAUAAAA6AB8AAAAIAAkAAAA6ACAAAAABAAMAAAA6ACEAAAABAAQAAAA6ACIAAAABAAQAAAA6ACMAAAABAAUAAAA6ACQAAAAIAAoAAAA6ACUAAAAIAAoAAAA6ACYAAAAIAAoAAAA6ACcAAAAAAAAAAAA6ACgAAAAIAAkAAAA6ACkAAAAFAAkAAAA6ACoAAAAAAAAAAAA6ACsAAAAHAAoAAAA6ACwAAAAIAAkAAAA6AC0AAAAIAAoAAAA6AC4AAAAHAAoAAAA6AC8AAAAFAAoAAAA6ADAAAAAIAAoAAAA6ADEAAAAAAAAAAAA6ADIAAAAAAAAAAAA6ADMAAAAFAAkAAAA7APD/AAAEAAcAAAA7APH/AAAEAAcAAAA7APL/AAAEAAgAAAA7APP/AAAHAAkAAAA7APT/AAAHAAoAAAA7APX/AAAIAAoAAAA7APb/AAAHAAoAAAA7APf/AAAHAAoAAAA7APj/AAAHAAoAAAA7APn/AAAAAAAAAAA7APr/AAAAAAAAAAA7APv/AAAFAAoAAAA7APz/AAAAAAAAAAA7AP3/AAAFAAoAAAA7AP7/AAAIAAkAAAA7AP//AAAFAAkAAAA7AAAAAAAIAAoAAAA7AAEAAAAIAAoAAAA7AAIAAAAIAAkAAAA7AAMAAAAFAAkAAAA7AAQAAAAAAAAAAAA7AAUAAAAHAAkAAAA7AAYAAAAFAAoAAAA7AAcAAAAFAAkAAAA7AAgAAAAIAAkAAAA7AAkAAAAFAAoAAAA7AAoAAAAHAAkAAAA7AAsAAAAHAAkAAAA7AAwAAAAHAAoAAAA7AA0AAAAHAAkAAAA7AA4AAAAHAAkAAAA7AA8AAAAHAAkAAAA7ABAAAAAHAAoAAAA7ABEAAAAFAAkAAAA7ABIAAAAIAAkAAAA7ABMAAAAFAAoAAAA7ABQAAAAIAAoAAAA7ABUAAAAAAAAAAAA7ABYAAAAFAAoAAAA7ABcAAAAIAAoAAAA7ABgAAAAAAAMAAAA7ABkAAAABAAcAAAA7ABoAAAABAAQAAAA7ABsAAAABAAQAAAA7ABwAAAAAAAYAAAA7AB0AAAACAAUAAAA7AB4AAAAIAAoAAAA7AB8AAAAIAAkAAAA7ACAAAAABAAMAAAA7ACEAAAABAAQAAAA7ACIAAAABAAQAAAA7ACMAAAABAAUAAAA7ACQAAAAFAAkAAAA7ACUAAAAIAAoAAAA7ACYAAAAFAAkAAAA7ACcAAAAHAAoAAAA7ACgAAAAHAAoAAAA7ACkAAAAHAAoAAAA7ACoAAAAAAAAAAAA7ACsAAAAAAAAAAAA7ACwAAAAFAAkAAAA7AC0AAAAIAAoAAAA7AC4AAAAHAAoAAAA7AC8AAAAAAAAAAAA7ADAAAAAFAAkAAAA7ADEAAAAHAAoAAAA7ADIAAAAHAAoAAAA7ADMAAAAAAAkAAAA8APD/AAABAAsAAAA8APH/AAAFAAoAAAA8APL/AAAHAAoAAAA8APP/AAAFAAkAAAA8APT/AAAFAAoAAAA8APX/AAAHAAoAAAA8APb/AAAAAAAAAAA8APf/AAAFAAkAAAA8APj/AAAHAAkAAAA8APn/AAAHAAoAAAA8APr/AAAFAAkAAAA8APv/AAAIAAoAAAA8APz/AAAIAAkAAAA8AP3/AAAFAAkAAAA8AP7/AAAIAAkAAAA8AP//AAAHAAoAAAA8AAAAAAAIAAoAAAA8AAEAAAAIAAkAAAA8AAIAAAAIAAoAAAA8AAMAAAAIAAkAAAA8AAQAAAAAAAAAAAA8AAUAAAAHAAkAAAA8AAYAAAAFAAoAAAA8AAcAAAAHAAoAAAA8AAgAAAAAAAAAAAA8AAkAAAAIAAkAAAA8AAoAAAAHAAoAAAA8AAsAAAAFAAoAAAA8AAwAAAAAAAAAAAA8AA0AAAAHAAoAAAA8AA4AAAAIAAkAAAA8AA8AAAAIAAoAAAA8ABAAAAAAAAAAAAA8ABEAAAAHAAkAAAA8ABIAAAAHAAoAAAA8ABMAAAAHAAoAAAA8ABQAAAAAAAAAAAA8ABUAAAAFAAkAAAA8ABYAAAAHAAoAAAA8ABcAAAAAAAMAAAA8ABgAAAABAAcAAAA8ABkAAAABAAQAAAA8ABoAAAABAAQAAAA8ABsAAAAAAAYAAAA8ABwAAAACAAUAAAA8AB0AAAAFAAkAAAA8AB4AAAAIAAkAAAA8AB8AAAAIAAkAAAA8ACAAAAABAAMAAAA8ACEAAAABAAQAAAA8ACIAAAABAAQAAAA8ACMAAAABAAUAAAA8ACQAAAAFAAoAAAA8ACUAAAAAAAAAAAA8ACYAAAAHAAoAAAA8ACcAAAAFAAoAAAA8ACgAAAAFAAoAAAA8ACkAAAAFAAkAAAA8ACoAAAAIAAoAAAA8ACsAAAAIAAkAAAA8ACwAAAAIAAoAAAA8AC0AAAAFAAoAAAA8AC4AAAAFAAoAAAA8AC8AAAAFAAkAAAA8ADAAAAAFAAoAAAA8ADEAAAAFAAoAAAA8ADIAAAAHAAoAAAA8ADMAAAABAAkAAAA9APD/AAABAAsAAAA9APH/AAAFAAkAAAA9APL/AAAIAAkAAAA9APP/AAAIAAkAAAA9APT/AAAHAAoAAAA9APX/AAAHAAkAAAA9APb/AAAFAAoAAAA9APf/AAAIAAkAAAA9APj/AAAHAAoAAAA9APn/AAAHAAkAAAA9APr/AAAFAAkAAAA9APv/AAAHAAoAAAA9APz/AAAAAAAAAAA9AP3/AAAHAAkAAAA9AP7/AAAFAAoAAAA9AP//AAAAAAAAAAA9AAAAAAAHAAkAAAA9AAEAAAAAAAAAAAA9AAIAAAAAAAAAAAA9AAMAAAAFAAkAAAA9AAQAAAAIAAkAAAA9AAUAAAAFAAkAAAA9AAYAAAAHAAkAAAA9AAcAAAAFAAoAAAA9AAgAAAAAAAAAAAA9AAkAAAAHAAkAAAA9AAoAAAAHAAkAAAA9AAsAAAAFAAoAAAA9AAwAAAAFAAoAAAA9AA0AAAAAAAAAAAA9AA4AAAAIAAoAAAA9AA8AAAAIAAkAAAA9ABAAAAAFAAkAAAA9ABEAAAAHAAoAAAA9ABIAAAAIAAoAAAA9ABMAAAAHAAkAAAA9ABQAAAAHAAoAAAA9ABUAAAAHAAkAAAA9ABYAAAAAAAMAAAA9ABcAAAABAAcAAAA9ABgAAAABAAQAAAA9ABkAAAABAAQAAAA9ABoAAAAAAAYAAAA9ABsAAAACAAUAAAA9ABwAAAAFAAoAAAA9AB0AAAAFAAkAAAA9AB4AAAAFAAoAAAA9AB8AAAAIAAoAAAA9ACAAAAABAAMAAAA9ACEAAAABAAQAAAA9ACIAAAABAAQAAAA9ACMAAAABAAUAAAA9ACQAAAAIAAkAAAA9ACUAAAAFAAkAAAA9ACYAAAAHAAkAAAA9ACcAAAAAAAAAAAA9ACgAAAAHAAkAAAA9ACkAAAAHAAoAAAA9ACoAAAAIAAkAAAA9ACsAAAAAAAAAAAA9ACwAAAAFAAoAAAA9AC0AAAAIAAkAAAA9AC4AAAAHAAkAAAA9AC8AAAAFAAoAAAA9ADAAAAAIAAoAAAA9ADEAAAAIAAoAAAA9ADIAAAAAAAAAAAA9ADMAAAAHAAoAAAA+APD/AAABAAsAAAA+APH/AAAAAAAAAAA+APL/AAAAAAAAAAA+APP/AAAFAAoAAAA+APT/AAAFAAkAAAA+APX/AAAAAAAAAAA+APb/AAAAAAAAAAA+APf/AAAFAAoAAAA+APj/AAAHAAoAAAA+APn/AAAIAAkAAAA+APr/AAAHAAkAAAA+APv/AAAFAAoAAAA+APz/AAAIAAoAAAA+AP3/AAAHAAkAAAA+AP7/AAAIAAoAAAA+AP//AAAAAAAAAAA+AAAAAAAHAAoAAAA+AAEAAAAFAAkAAAA+AAIAAAAIAAkAAAA+AAMAAAAHAAoAAAA+AAQAAAAFAAkAAAA+AAUAAAAIAAkAAAA+AAYAAAAHAAoAAAA+AAcAAAAFAAoAAAA+AAgAAAAIAAkAAAA+AAkAAAAAAAAAAAA+AAoAAAAIAAoAAAA+AAsAAAAAAAAAAAA+AAwAAAAAAAAAAAA+AA0AAAAHAAoAAAA+AA4AAAAHAAkAAAA+AA8AAAAFAAoAAAA+ABAAAAAAAAAAAAA+ABEAAAAFAAkAAAA+ABIAAAAAAAAAAAA+ABMAAAAHAAoAAAA+ABQAAAAAAAAAAAA+ABUAAAAAAAMAAAA+ABYAAAABAAcAAAA+ABcAAAABAAQAAAA+ABgAAAABAAQAAAA+ABkAAAAAAAYAAAA+ABoAAAACAAUAAAA+ABsAAAAHAAkAAAA+ABwAAAAHAAoAAAA+AB0AAAAHAAoAAAA+AB4AAAAIAAoAAAA+AB8AAAAFAAkAAAA+ACAAAAABAAMAAAA+ACEAAAABAAQAAAA+ACIAAAABAAQAAAA+ACMAAAABAAUAAAA+ACQAAAAHAAoAAAA+ACUAAAAFAAkAAAA+ACYAAAAHAAoAAAA+ACcAAAAHAAkAAAA+ACgAAAAIAAkAAAA+ACkAAAAIAAkAAAA+ACoAAAAIAAoAAAA+ACsAAAAFAAoAAAA+ACwAAAAFAAkAAAA+AC0AAAAFAAoAAAA+AC4AAAAFAAoAAAA+AC8AAAAHAAkAAAA+ADAAAAAFAAkAAAA+ADEAAAAHAAkAAAA+ADIAAAAIAAkAAAA+ADMAAAAAAAAAAAA/APD/AAABAAsAAAA/APH/AAAFAAkAAAA/APL/AAAIAAkAAAA/APP/AAAIAAkAAAA/APT/AAAHAAoAAAA/APX/AAAFAAoAAAA/APb/AAAHAAkAAAA/APf/AAAHAAoAAAA/APj/AAAFAAkAAAA/APn/AAAHAAkAAAA/APr/AAAFAAkAAAA/APv/AAAFAAoAAAA/APz/AAAIAAoAAAA/AP3/AAAFAAkAAAA/AP7/AAAAAAAAAAA/AP//AAAIAAkAAAA/AAAAAAAFAAoAAAA/AAEAAAAHAAkAAAA/AAIAAAAFAAkAAAA/AAMAAAAAAAAAAAA/AAQAAAAFAAoAAAA/AAUAAAAFAAkAAAA/AAYAAAAAAAAAAAA/AAcAAAAAAAAAAAA/AAgAAAAIAAoAAAA/AAkAAAAHAAoAAAA/AAoAAAAHAAoAAAA/AAsAAAAHAAkAAAA/AAwAAAAIAAoAAAA/AA0AAAAFAAkAAAA/AA4AAAAHAAkAAAA/AA8AAAAFAAkAAAA/ABAAAAAHAAoAAAA/ABEAAAAIAAkAAAA/ABIAAAAIAAoAAAA/ABMAAAAHAAkAAAA/ABQAAAAIAAkAAAA/ABUAAAABAAMAAAA/ABYAAAABAAQAAAA/ABcAAAABAAQAAAA/ABgAAAAAAAYAAAA/ABkAAAACAAUAAAA/ABoAAAAFAAoAAAA/ABsAAAAIAAoAAAA/ABwAAAAIAAoAAAA/AB0AAAAHAAkAAAA/AB4AAAAAAAAAAAA/AB8AAAAIAAkAAAA/ACAAAAABAAMAAAA/ACEAAAABAAQAAAA/ACIAAAABAAQAAAA/ACMAAAABAAUAAAA/ACQAAAAIAAkAAAA/ACUAAAAIAAoAAAA/ACYAAAAAAAAAAAA/ACcAAAAIAAkAAAA/ACgAAAAIAAoAAAA/ACkAAAAIAAoAAAA/ACoAAAAIAAoAAAA/ACsAAAAHAAkAAAA/ACwAAAAIAAoAAAA/AC0AAAAHAAoAAAA/AC4AAAAHAAkAAAA/AC8AAAAFAAkAAAA/ADAAAAAFAAoAAAA/ADEAAAAHAAoAAAA/ADIAAAAFAAkAAAA/ADMAAAAFAAkAAABAAPD/AAABAAsAAABAAPH/AAAIAAkAAABAAPL/AAAFAAkAAABAAPP/AAAHAAkAAABAAPT/AAAAAAAAAABAAPX/AAAFAAkAAABAAPb/AAAIAAoAAABAAPf/AAAIAAoAAABAAPj/AAAHAAkAAABAAPn/AAAAAAAAAABAAPr/AAAFAAkAAABAAPv/AAAIAAkAAABAAPz/AAAHAAkAAABAAP3/AAAHAAoAAABAAP7/AAAAAAAAAABAAP//AAAIAAkAAABAAAAAAAAFAAoAAABAAAEAAAAIAAoAAABAAAIAAAAAAAAAAABAAAMAAAAHAAkAAABAAAQAAAAIAAoAAABAAAUAAAAAAAAAAABAAAYAAAAFAAoAAABAAAcAAAAIAAkAAABAAAgAAAAHAAoAAABAAAkAAAAAAAAAAABAAAoAAAAHAAkAAABAAAsAAAAAAAAAAABAAAwAAAAHAAkAAABAAA0AAAAIAAkAAABAAA4AAAAIAAoAAABAAA8AAAAFAAkAAABAABAAAAAHAAkAAABAABEAAAAIAAoAAABAABIAAAAHAAkAAABAABMAAAAIAAkAAABAABQAAAAAAAMAAABAABUAAAABAAcAAABAABYAAAABAAQAAABAABcAAAABAAQAAABAABgAAAABAAUAAABAABkAAAAHAAoAAABAABoAAAAIAAoAAABAABsAAAAFAAkAAABAABwAAAAAAAAAAABAAB0AAAAIAAoAAABAAB4AAAAAAAAAAABAAB8AAAAHAAkAAABAACAAAAABAAMAAABAACEAAAABAAQAAABAACIAAAABAAQAAABAACMAAAABAAUAAABAACQAAAAHAAkAAABAACUAAAAIAAoAAABAACYAAAAHAAoAAABAACcAAAAHAAoAAABAACgAAAAIAAkAAABAACkAAAAFAAoAAABAACoAAAAIAAkAAABAACsAAAAIAAoAAABAACwAAAAIAAkAAABAAC0AAAAIAAoAAABAAC4AAAAAAAAAAABAAC8AAAAFAAkAAABAADAAAAAHAAoAAABAADEAAAAHAAoAAABAADIAAAAFAAkAAABAADMAAAAFAAoAAABBAPD/AAABAAsAAABBAPH/AAAFAAoAAABBAPL/AAAIAAoAAABBAPP/AAAHAAkAAABBAPT/AAAIAAkAAABBAPX/AAAAAAAAAABBAPb/AAAIAAkAAABBAPf/AAAAAAAAAABBAPj/AAAAAAAAAABBAPn/AAAFAAkAAABBAPr/AAAFAAkAAABBAPv/AAAFAAoAAABBAPz/AAAIAAoAAABBAP3/AAAIAAoAAABBAP7/AAAIAAoAAABBAP//AAAFAAoAAABBAAAAAAAFAAkAAABBAAEAAAAHAAkAAABBAAIAAAAFAAkAAABBAAMAAAAHAAkAAABBAAQAAAAIAAkAAABBAAUAAAAIAAoAAABBAAYAAAAHAAoAAABBAAcAAAAHAAkAAABBAAgAAAAFAAkAAABBAAkAAAAFAAoAAABBAAoAAAAIAAkAAABBAAsAAAAFAAoAAABBAAwAAAAHAAoAAABBAA0AAAAHAAoAAABBAA4AAAAFAAkAAABBAA8AAAAFAAoAAABBABAAAAAFAAkAAABBABEAAAAHAAoAAABBABIAAAAFAAkAAABBABMAAAAAAAMAAABBABQAAAABAAcAAABBABUAAAABAAQAAABBABYAAAABAAQAAABBABcAAAAAAAYAAABBABgAAAACAAUAAABBABkAAAAHAAoAAABBABoAAAAHAAkAAABBABsAAAAFAAoAAABBABwAAAAIAAkAAABBAB0AAAAIAAoAAABBAB4AAAAAAAAAAABBAB8AAAAHAAkAAABBACAAAAABAAMAAABBACEAAAABAAQAAABBACIAAAABAAQAAABBACMAAAABAAUAAABBACQAAAAFAAkAAABBACUAAAAFAAoAAABBACYAAAAAAAAAAABBACcAAAAIAAkAAABBACgAAAAAAAAAAABBACkAAAAHAAkAAABBACoAAAAFAAoAAABBACsAAAAAAAAAAABBACwAAAAFAAoAAABBAC0AAAAAAAAAAABBAC4AAAAIAAkAAABBAC8AAAAFAAkAAABBADAAAAAAAAAAAABBADEAAAAHAAoAAABBADIAAAAAAAAAAABBADMAAAAIAAkAAABCAPD/AAACAAsAAABCAPH/AAAAAAQAAABCAPL/AAAAAAUAAABCAPP/AAAIAAoAAABCAPT/AAAIAAkAAABCAPX/AAAHAAoAAABCAPb/AAAFAAoAAABCAPf/AAAIAAoAAABCAPj/AAAFAAoAAABCAPn/AAAAAAAAAABCAPr/AAAFAAoAAABCAPv/AAAHAAkAAABCAPz/AAAFAAoAAABCAP3/AAAHAAkAAABCAP7/AAAHAAkAAABCAP//AAAAAAAAAABCAAAAAAAFAAkAAABCAAEAAAAAAAAAAABCAAIAAAAAAAAAAABCAAMAAAAFAAkAAABCAAQAAAAIAAoAAABCAAUAAAAFAAkAAABCAAYAAAAFAAoAAABCAAcAAAAHAAkAAABCAAgAAAAFAAoAAABCAAkAAAAFAAkAAABCAAoAAAAHAAkAAABCAAsAAAAFAAoAAABCAAwAAAAIAAoAAABCAA0AAAAIAAoAAABCAA4AAAAIAAkAAABCAA8AAAAIAAkAAABCABAAAAAHAAkAAABCABEAAAAIAAoAAABCABIAAAAAAAMAAABCABMAAAABAAcAAABCABQAAAABAAQAAABCABUAAAABAAQAAABCABYAAAAAAAYAAABCABcAAAACAAUAAABCABgAAAAIAAoAAABCABkAAAAFAAkAAABCABoAAAAFAAkAAABCABsAAAAIAAoAAABCABwAAAAHAAkAAABCAB0AAAAHAAoAAABCAB4AAAAFAAkAAABCAB8AAAAAAAAAAABCACAAAAABAAMAAABCACEAAAABAAQAAABCACIAAAABAAQAAABCACMAAAABAAUAAABCACQAAAAHAAoAAABCACUAAAAFAAkAAABCACYAAAAHAAoAAABCACcAAAAAAAAAAABCACgAAAAIAAkAAABCACkAAAAIAAkAAABCACoAAAAHAAkAAABCACsAAAAFAAkAAABCACwAAAAIAAkAAABCAC0AAAAHAAkAAABCAC4AAAAFAAoAAABCAC8AAAAHAAoAAABCADAAAAAAAAAAAABCADEAAAAIAAoAAABCADIAAAAFAAkAAABCADMAAAAIAAkAAABDAPD/AAARAAcAAABDAPH/AAABAAQAAABDAPL/AAABAAYAAABDAPP/AAAAAAUAAABDAPT/AAAFAAkAAABDAPX/AAAIAAkAAABDAPb/AAAFAAkAAABDAPf/AAAIAAkAAABDAPj/AAAFAAkAAABDAPn/AAAAAAAAAABDAPr/AAAHAAkAAABDAPv/AAAHAAkAAABDAPz/AAAHAAkAAABDAP3/AAAFAAkAAABDAP7/AAAHAAkAAABDAP//AAAIAAkAAABDAAAAAAAIAAoAAABDAAEAAAAAAAAAAABDAAIAAAAIAAoAAABDAAMAAAAIAAkAAABDAAQAAAAHAAoAAABDAAUAAAAIAAkAAABDAAYAAAAHAAkAAABDAAcAAAAFAAkAAABDAAgAAAAHAAkAAABDAAkAAAAIAAoAAABDAAoAAAAHAAoAAABDAAsAAAAFAAkAAABDAAwAAAAFAAoAAABDAA0AAAAAAAAAAABDAA4AAAAFAAkAAABDAA8AAAAIAAoAAABDABAAAAAHAAoAAABDABEAAAAAAAMAAABDABIAAAABAAcAAABDABMAAAABAAQAAABDABQAAAABAAQAAABDABUAAAAAAAYAAABDABYAAAACAAUAAABDABcAAAAIAAkAAABDABgAAAAHAAoAAABDABkAAAAAAAAAAABDABoAAAAIAAkAAABDABsAAAAAAAAAAABDABwAAAAIAAoAAABDAB0AAAAHAAkAAABDAB4AAAAFAAoAAABDAB8AAAAAAAAAAABDACAAAAABAAMAAABDACEAAAABAAQAAABDACIAAAABAAQAAABDACMAAAABAAUAAABDACQAAAAFAAkAAABDACUAAAAHAAkAAABDACYAAAAFAAoAAABDACcAAAAFAAoAAABDACgAAAAIAAkAAABDACkAAAAHAAoAAABDACoAAAAIAAoAAABDACsAAAAHAAoAAABDACwAAAAIAAoAAABDAC0AAAAAAAAAAABDAC4AAAAFAAoAAABDAC8AAAAIAAkAAABDADAAAAAAAAAAAABDADEAAAAHAAkAAABDADIAAAAIAAkAAABDADMAAAAFAAoAAABEAPD/AAABAAQAAABEAPH/AAABAAQAAABEAPL/AAABAAQAAABEAPP/AAABAAYAAABEAPT/AAAAAAQAAABEAPX/AAAAAAUAAABEAPb/AAAFAAoAAABEAPf/AAAHAAkAAABEAPj/AAAIAAoAAABEAPn/AAAIAAoAAABEAPr/AAAAAAAAAABEAPv/AAAIAAkAAABEAPz/AAAFAAoAAABEAP3/AAAAAAAAAABEAP7/AAAIAAkAAABEAP//AAAFAAoAAABEAAAAAAAIAAoAAABEAAEAAAAIAAoAAABEAAIAAAAFAAkAAABEAAMAAAAIAAkAAABEAAQAAAAAAAAAAABEAAUAAAAHAAkAAABEAAYAAAAIAAkAAABEAAcAAAAHAAoAAABEAAgAAAAFAAoAAABEAAkAAAAIAAkAAABEAAoAAAAFAAoAAABEAAsAAAAAAAAAAABEAAwAAAAAAAAAAABEAA0AAAAFAAkAAABEAA4AAAAHAAoAAABEAA8AAAAAAAMAAABEABAAAAAAAAQAAABEABEAAAABAAcAAABEABIAAAABAAQAAABEABMAAAABAAQAAABEABQAAAAAAAYAAABEABUAAAACAAUAAABEABYAAAAFAAkAAABEABcAAAAAAAAAAABEABgAAAAAAAAAAABEABkAAAAFAAoAAABEABoAAAAHAAkAAABEABsAAAAFAAkAAABEABwAAAAHAAkAAABEAB0AAAAIAAoAAABEAB4AAAAHAAoAAABEAB8AAAAHAAkAAABEACAAAAABAAMAAABEACEAAAABAAQAAABEACIAAAABAAQAAABEACMAAAABAAUAAABEACQAAAAIAAkAAABEACUAAAAFAAoAAABEACYAAAAIAAkAAABEACcAAAAAAAAAAABEACgAAAAFAAoAAABEACkAAAAFAAkAAABEACoAAAAAAAAAAABEACsAAAAHAAoAAABEACwAAAAIAAkAAABEAC0AAAAIAAoAAABEAC4AAAAAAAAAAABEAC8AAAAIAAkAAABEADAAAAAIAAkAAABEADEAAAAFAAkAAABEADIAAAAFAAkAAABEADMAAAAHAAoAAABFAPD/AAABAAQAAABFAPH/AAABAAQAAABFAPL/AAABAAQAAABFAPP/AAABAAQAAABFAPT/AAABAAQAAABFAPX/AAABAAYAAABFAPb/AAAAAAUAAABFAPf/AAAIAAoAAABFAPj/AAAAAAAAAABFAPn/AAAHAAoAAABFAPr/AAAAAAAAAABFAPv/AAAHAAkAAABFAPz/AAAIAAkAAABFAP3/AAAIAAoAAABFAP7/AAAFAAkAAABFAP//AAAAAAAAAABFAAAAAAAHAAkAAABFAAEAAAAFAAkAAABFAAIAAAAIAAoAAABFAAMAAAAAAAAAAABFAAQAAAAFAAkAAABFAAUAAAAFAAoAAABFAAYAAAAFAAoAAABFAAcAAAAFAAoAAABFAAgAAAAIAAkAAABFAAkAAAAAAAAAAABFAAoAAAAHAAkAAABFAAsAAAAIAAoAAABFAAwAAAAIAAkAAABFAA0AAAAHAAoAAABFAA4AAAAAAAMAAABFAA8AAAABAAcAAABFABAAAAABAAQAAABFABEAAAABAAQAAABFABIAAAABAAQAAABFABMAAAABAAQAAABFABQAAAABAAUAAABFABUAAAAFAAkAAABFABYAAAAFAAoAAABFABcAAAAIAAkAAABFABgAAAAAAAAAAABFABkAAAAHAAkAAABFABoAAAAIAAkAAABFABsAAAAAAAAAAABFABwAAAAFAAkAAABFAB0AAAAAAAAAAABFAB4AAAAAAAAAAABFAB8AAAAAAAAAAABFACAAAAABAAMAAABFACEAAAABAAQAAABFACIAAAABAAQAAABFACMAAAABAAUAAABFACQAAAAIAAkAAABFACUAAAAHAAoAAABFACYAAAAHAAoAAABFACcAAAAIAAkAAABFACgAAAAHAAoAAABFACkAAAAHAAoAAABFACoAAAAAAAAAAABFACsAAAAFAAkAAABFACwAAAAFAAkAAABFAC0AAAAAAAAAAABFAC4AAAAFAAoAAABFAC8AAAAHAAoAAABFADAAAAAFAAoAAABFADEAAAAFAAkAAABFADIAAAAAAAAAAABFADMAAAAHAAkAAABGAPD/AAAAAAsAAABGAPH/AAACAAQAAABGAPL/AAAAAAcAAABGAPP/AAABAAQAAABGAPT/AAABAAQAAABGAPX/AAABAAQAAABGAPb/AAABAAYAAABGAPf/AAAAAAUAAABGAPj/AAAHAAoAAABGAPn/AAAFAAoAAABGAPr/AAAIAAoAAABGAPv/AAAHAAkAAABGAPz/AAAHAAoAAABGAP3/AAAFAAkAAABGAP7/AAAIAAoAAABGAP//AAAAAAAAAABGAAAAAAAHAAoAAABGAAEAAAAFAAkAAABGAAIAAAAAAAAAAABGAAMAAAAFAAoAAABGAAQAAAAIAAoAAABGAAUAAAAFAAoAAABGAAYAAAAAAAAAAABGAAcAAAAAAAAAAABGAAgAAAAIAAoAAABGAAkAAAAIAAkAAABGAAoAAAAIAAkAAABGAAsAAAAAAAAAAABGAAwAAAAAAAAAAABGAA0AAAAAAAMAAABGAA4AAAABAAcAAABGAA8AAAABAAQAAABGABAAAAABAAQAAABGABEAAAABAAQAAABGABIAAAABAAQAAABGABMAAAAAAAYAAABGABQAAAACAAUAAABGABUAAAAHAAkAAABGABYAAAAHAAoAAABGABcAAAAFAAoAAABGABgAAAAAAAAAAABGABkAAAAAAAAAAABGABoAAAAIAAkAAABGABsAAAAIAAkAAABGABwAAAAHAAoAAABGAB0AAAAHAAkAAABGAB4AAAAAAAAAAABGAB8AAAAFAAkAAABGACAAAAABAAMAAABGACEAAAABAAQAAABGACIAAAABAAQAAABGACMAAAABAAUAAABGACQAAAAIAAkAAABGACUAAAAAAAAAAABGACYAAAAAAAAAAABGACcAAAAFAAkAAABGACgAAAAFAAoAAABGACkAAAAIAAkAAABGACoAAAAFAAoAAABGACsAAAAIAAoAAABGACwAAAAFAAoAAABGAC0AAAAIAAoAAABGAC4AAAAFAAkAAABGAC8AAAAFAAkAAABGADAAAAAAAAAAAABGADEAAAAIAAoAAABGADIAAAAIAAkAAABGADMAAAAIAAkAAABHAPD/AAABAAsAAABHAPH/AAAAAAAAAABHAPL/AAACAAMAAABHAPP/AAACAAQAAABHAPT/AAAAAAcAAABHAPX/AAABAAQAAABHAPb/AAABAAQAAABHAPf/AAABAAYAAABHAPj/AAAAAAUAAABHAPn/AAAIAAoAAABHAPr/AAAFAAkAAABHAPv/AAAHAAoAAABHAPz/AAAIAAkAAABHAP3/AAAFAAkAAABHAP7/AAAIAAkAAABHAP//AAAFAAkAAABHAAAAAAAAAAAAAABHAAEAAAAIAAkAAABHAAIAAAAHAAoAAABHAAMAAAAFAAkAAABHAAQAAAAIAAkAAABHAAUAAAAAAAAAAABHAAYAAAAIAAkAAABHAAcAAAAHAAoAAABHAAgAAAAFAAkAAABHAAkAAAAFAAkAAABHAAoAAAAIAAoAAABHAAsAAAAIAAkAAABHAAwAAAAAAAMAAABHAA0AAAABAAcAAABHAA4AAAABAAQAAABHAA8AAAABAAQAAABHABAAAAABAAQAAABHABEAAAAAAAYAAABHABIAAAACAAQAAABHABMAAAACAAUAAABHABQAAAAIAAoAAABHABUAAAAHAAkAAABHABYAAAAFAAkAAABHABcAAAAIAAoAAABHABgAAAAIAAoAAABHABkAAAAHAAkAAABHABoAAAAHAAoAAABHABsAAAAFAAoAAABHABwAAAAHAAoAAABHAB0AAAAHAAoAAABHAB4AAAAHAAoAAABHAB8AAAAHAAkAAABHACAAAAABAAMAAABHACEAAAABAAQAAABHACIAAAABAAQAAABHACMAAAABAAUAAABHACQAAAAIAAkAAABHACUAAAAFAAkAAABHACYAAAAFAAoAAABHACcAAAAHAAoAAABHACgAAAAFAAoAAABHACkAAAAAAAAAAABHACoAAAAAAAAAAABHACsAAAAHAAoAAABHACwAAAAIAAkAAABHAC0AAAAFAAoAAABHAC4AAAAFAAkAAABHAC8AAAAHAAkAAABHADAAAAAIAAkAAABHADEAAAAHAAkAAABHADIAAAAFAAoAAABHADMAAAAHAAkAAABIAPD/AAABAAsAAABIAPH/AAAIAAkAAABIAPL/AAAIAAoAAABIAPP/AAAAAAAAAABIAPT/AAACAAMAAABIAPX/AAAAAAcAAABIAPb/AAABAAQAAABIAPf/AAABAAQAAABIAPj/AAABAAYAAABIAPn/AAAAAAQAAABIAPr/AAAAAAUAAABIAPv/AAAHAAkAAABIAPz/AAAHAAkAAABIAP3/AAAHAAoAAABIAP7/AAAFAAkAAABIAP//AAAFAAoAAABIAAAAAAAHAAkAAABIAAEAAAAHAAkAAABIAAIAAAAIAAkAAABIAAMAAAAIAAoAAABIAAQAAAAHAAkAAABIAAUAAAAFAAoAAABIAAYAAAAIAAkAAABIAAcAAAAIAAoAAABIAAgAAAAAAAAAAABIAAkAAAAHAAkAAABIAAoAAAAAAAMAAABIAAsAAAAAAAQAAABIAAwAAAABAAcAAABIAA0AAAABAAQAAABIAA4AAAABAAQAAABIAA8AAAABAAQAAABIABAAAAAAAAYAAABIABEAAAACAAUAAABIABIAAAAHAAoAAABIABMAAAAIAAkAAABIABQAAAAFAAkAAABIABUAAAAIAAkAAABIABYAAAAHAAkAAABIABcAAAAFAAkAAABIABgAAAAIAAkAAABIABkAAAAFAAkAAABIABoAAAAIAAoAAABIABsAAAAFAAoAAABIABwAAAAFAAoAAABIAB0AAAAAAAAAAABIAB4AAAAIAAoAAABIAB8AAAAIAAoAAABIACAAAAABAAMAAABIACEAAAABAAQAAABIACIAAAABAAQAAABIACMAAAABAAUAAABIACQAAAAHAAkAAABIACUAAAAHAAoAAABIACYAAAAIAAkAAABIACcAAAAHAAoAAABIACgAAAAHAAkAAABIACkAAAAHAAkAAABIACoAAAAFAAkAAABIACsAAAAIAAkAAABIACwAAAAIAAkAAABIAC0AAAAHAAkAAABIAC4AAAAIAAoAAABIAC8AAAAFAAkAAABIADAAAAAFAAoAAABIADEAAAAHAAkAAABIADIAAAAAAAAAAABIADMAAAAHAAoAAABJAPD/AAABAAsAAABJAPH/AAAFAAoAAABJAPL/AAAIAAkAAABJAPP/AAAFAAoAAABJAPT/AAAIAAkAAABJAPX/AAABAAMAAABJAPb/AAABAAQAAABJAPf/AAABAAQAAABJAPj/AAABAAQAAABJAPn/AAABAAQAAABJAPr/AAABAAUAAABJAPv/AAAAAAAAAABJAPz/AAAIAAkAAABJAP3/AAAIAAkAAABJAP7/AAAFAAoAAABJAP//AAAHAAoAAABJAAAAAAAHAAkAAABJAAEAAAAFAAkAAABJAAIAAAAHAAkAAABJAAMAAAAAAAAAAABJAAQAAAAAAAAAAABJAAUAAAAHAAkAAABJAAYAAAAIAAoAAABJAAcAAAAFAAkAAABJAAgAAAAIAAkAAABJAAkAAAAAAAMAAABJAAoAAAABAAcAAABJAAsAAAABAAQAAABJAAwAAAABAAQAAABJAA0AAAABAAQAAABJAA4AAAABAAQAAABJAA8AAAAAAAYAAABJABAAAAACAAUAAABJABEAAAAFAAkAAABJABIAAAAIAAkAAABJABMAAAAIAAkAAABJABQAAAAHAAkAAABJABUAAAAFAAoAAABJABYAAAAFAAkAAABJABcAAAAAAAAAAABJABgAAAAAAAAAAABJABkAAAAHAAkAAABJABoAAAAAAAAAAABJABsAAAAHAAkAAABJABwAAAAFAAoAAABJAB0AAAAHAAoAAABJAB4AAAAHAAkAAABJAB8AAAAHAAoAAABJACAAAAABAAMAAABJACEAAAABAAQAAABJACIAAAABAAQAAABJACMAAAABAAUAAABJACQAAAAIAAkAAABJACUAAAAAAAAAAABJACYAAAAIAAkAAABJACcAAAAIAAkAAABJACgAAAAFAAkAAABJACkAAAAHAAkAAABJACoAAAAIAAkAAABJACsAAAAFAAoAAABJACwAAAAFAAoAAABJAC0AAAAAAAAAAABJAC4AAAAIAAoAAABJAC8AAAAFAAkAAABJADAAAAAHAAkAAABJADEAAAAFAAoAAABJADIAAAAHAAoAAABJADMAAAAIAAoAAABKAPD/AAABAAsAAABKAPH/AAAFAAoAAABKAPL/AAAIAAkAAABKAPP/AAAIAAkAAABKAPT/AAAIAAkAAABKAPX/AAACAAMAAABKAPb/AAAAAAcAAABKAPf/AAABAAQAAABKAPj/AAABAAQAAABKAPn/AAABAAQAAABKAPr/AAABAAYAAABKAPv/AAAAAAUAAABKAPz/AAAHAAkAAABKAP3/AAAIAAoAAABKAP7/AAAFAAoAAABKAP//AAAFAAoAAABKAAAAAAAFAAkAAABKAAEAAAAAAAAAAABKAAIAAAAHAAkAAABKAAMAAAAIAAkAAABKAAQAAAAFAAkAAABKAAUAAAAHAAoAAABKAAYAAAAAAAAAAABKAAcAAAAIAAoAAABKAAgAAAAAAAMAAABKAAkAAAABAAcAAABKAAoAAAABAAQAAABKAAsAAAABAAQAAABKAAwAAAABAAQAAABKAA0AAAABAAQAAABKAA4AAAAAAAYAAABKAA8AAAACAAUAAABKABAAAAAAAAAAAABKABEAAAAHAAoAAABKABIAAAAAAAAAAABKABMAAAAIAAoAAABKABQAAAAHAAoAAABKABUAAAAHAAkAAABKABYAAAAAAAAAAABKABcAAAAFAAkAAABKABgAAAAFAAkAAABKABkAAAAHAAoAAABKABoAAAAAAAAAAABKABsAAAAFAAkAAABKABwAAAAIAAkAAABKAB0AAAAFAAoAAABKAB4AAAAHAAoAAABKAB8AAAAHAAoAAABKACAAAAABAAMAAABKACEAAAABAAQAAABKACIAAAABAAQAAABKACMAAAABAAUAAABKACQAAAAFAAkAAABKACUAAAAFAAkAAABKACYAAAAAAAAAAABKACcAAAAFAAoAAABKACgAAAAFAAoAAABKACkAAAAHAAoAAABKACoAAAAFAAkAAABKACsAAAAHAAoAAABKACwAAAAIAAoAAABKAC0AAAAFAAoAAABKAC4AAAAFAAkAAABKAC8AAAAFAAkAAABKADAAAAAHAAoAAABKADEAAAAHAAkAAABKADIAAAAFAAoAAABKADMAAAAHAAoAAABLAPD/AAABAAsAAABLAPH/AAAHAAkAAABLAPL/AAAHAAoAAABLAPP/AAAHAAkAAABLAPT/AAAFAAkAAABLAPX/AAAFAAoAAABLAPb/AAACAAMAAABLAPf/AAAAAAcAAABLAPj/AAABAAQAAABLAPn/AAABAAQAAABLAPr/AAABAAQAAABLAPv/AAABAAYAAABLAPz/AAAAAAUAAABLAP3/AAAIAAkAAABLAP7/AAAFAAkAAABLAP//AAAHAAkAAABLAAAAAAAFAAkAAABLAAEAAAAAAAAAAABLAAIAAAAIAAoAAABLAAMAAAAIAAkAAABLAAQAAAAIAAkAAABLAAUAAAAAAAAAAABLAAYAAAAAAAMAAABLAAcAAAAAAAQAAABLAAgAAAABAAcAAABLAAkAAAABAAQAAABLAAoAAAABAAQAAABLAAsAAAABAAQAAABLAAwAAAABAAQAAABLAA0AAAAAAAYAAABLAA4AAAACAAUAAABLAA8AAAAFAAoAAABLABAAAAAHAAkAAABLABEAAAAHAAoAAABLABIAAAAHAAkAAABLABMAAAAHAAkAAABLABQAAAAAAAAAAABLABUAAAAHAAoAAABLABYAAAAHAAkAAABLABcAAAAFAAkAAABLABgAAAAAAAAAAABLABkAAAAHAAoAAABLABoAAAAFAAkAAABLABsAAAAIAAoAAABLABwAAAAFAAkAAABLAB0AAAAAAAAAAABLAB4AAAAFAAoAAABLAB8AAAAIAAoAAABLACAAAAABAAMAAABLACEAAAABAAQAAABLACIAAAABAAQAAABLACMAAAABAAUAAABLACQAAAAFAAoAAABLACUAAAAHAAoAAABLACYAAAAFAAkAAABLACcAAAAHAAoAAABLACgAAAAHAAoAAABLACkAAAAIAAkAAABLACoAAAAFAAkAAABLACsAAAAHAAkAAABLACwAAAAAAAAAAABLAC0AAAAFAAoAAABLAC4AAAAAAAAAAABLAC8AAAAAAAAAAABLADAAAAAHAAkAAABLADEAAAAIAAoAAABLADIAAAAHAAoAAABLADMAAAAFAAoAAABMAPD/AAABAAsAAABMAPH/AAAIAAkAAABMAPL/AAAIAAkAAABMAPP/AAAFAAoAAABMAPT/AAAFAAoAAABMAPX/AAAHAAoAAABMAPb/AAAIAAoAAABMAPf/AAABAAMAAABMAPj/AAABAAQAAABMAPn/AAABAAQAAABMAPr/AAABAAQAAABMAPv/AAABAAQAAABMAPz/AAABAAYAAABMAP3/AAAAAAUAAABMAP7/AAAFAAoAAABMAP//AAAIAAkAAABMAAAAAAAHAAoAAABMAAEAAAAIAAkAAABMAAIAAAAFAAkAAABMAAMAAAAHAAkAAABMAAQAAAAAAAMAAABMAAUAAAAAAAQAAABMAAYAAAABAAcAAABMAAcAAAABAAQAAABMAAgAAAABAAQAAABMAAkAAAABAAQAAABMAAoAAAABAAQAAABMAAsAAAABAAQAAABMAAwAAAAAAAYAAABMAA0AAAACAAUAAABMAA4AAAAHAAoAAABMAA8AAAAHAAoAAABMABAAAAAIAAoAAABMABEAAAAHAAoAAABMABIAAAAIAAoAAABMABMAAAAIAAoAAABMABQAAAAFAAoAAABMABUAAAAFAAoAAABMABYAAAAFAAoAAABMABcAAAAHAAoAAABMABgAAAAFAAkAAABMABkAAAAHAAoAAABMABoAAAAIAAkAAABMABsAAAAIAAkAAABMABwAAAAIAAkAAABMAB0AAAAHAAoAAABMAB4AAAAIAAkAAABMAB8AAAAAAAAAAABMACAAAAABAAMAAABMACEAAAABAAQAAABMACIAAAABAAQAAABMACMAAAABAAUAAABMACQAAAAFAAoAAABMACUAAAAFAAkAAABMACYAAAAIAAkAAABMACcAAAAFAAoAAABMACgAAAAIAAoAAABMACkAAAAIAAoAAABMACoAAAAHAAoAAABMACsAAAAFAAkAAABMACwAAAAFAAoAAABMAC0AAAAHAAoAAABMAC4AAAAFAAoAAABMAC8AAAAIAAkAAABMADAAAAAFAAoAAABMADEAAAAHAAoAAABMADIAAAAIAAoAAABMADMAAAAHAAoAAABNAPD/AAABAAsAAABNAPH/AAAIAAoAAABNAPL/AAAFAAkAAABNAPP/AAAAAAAAAABNAPT/AAAFAAoAAABNAPX/AAAFAAkAAABNAPb/AAAHAAoAAABNAPf/AAACAAMAAABNAPj/AAAAAAcAAABNAPn/AAABAAQAAABNAPr/AAABAAQAAABNAPv/AAABAAQAAABNAPz/AAABAAQAAABNAP3/AAABAAUAAABNAP7/AAAFAAkAAABNAP//AAAHAAoAAABNAAAAAAAFAAkAAABNAAEAAAAFAAoAAABNAAIAAAAHAAkAAABNAAMAAAAAAAMAAABNAAQAAAABAAcAAABNAAUAAAABAAQAAABNAAYAAAABAAQAAABNAAcAAAABAAQAAABNAAgAAAABAAQAAABNAAkAAAABAAQAAABNAAoAAAAAAAYAAABNAAsAAAACAAQAAABNAAwAAAACAAUAAABNAA0AAAAAAAAAAABNAA4AAAAHAAkAAABNAA8AAAAIAAkAAABNABAAAAAHAAoAAABNABEAAAAFAAoAAABNABIAAAAFAAoAAABNABMAAAAFAAoAAABNABQAAAAHAAkAAABNABUAAAAFAAkAAABNABYAAAAFAAkAAABNABcAAAAFAAoAAABNABgAAAAHAAoAAABNABkAAAAHAAkAAABNABoAAAAIAAkAAABNABsAAAAIAAoAAABNABwAAAAFAAkAAABNAB0AAAAAAAAAAABNAB4AAAAFAAkAAABNAB8AAAAHAAoAAABNACAAAAABAAMAAABNACEAAAABAAQAAABNACIAAAABAAQAAABNACMAAAABAAUAAABNACQAAAAFAAoAAABNACUAAAAHAAkAAABNACYAAAAFAAoAAABNACcAAAAHAAkAAABNACgAAAAHAAkAAABNACkAAAAFAAoAAABNACoAAAAHAAkAAABNACsAAAAHAAkAAABNACwAAAAHAAoAAABNAC0AAAAFAAoAAABNAC4AAAAHAAoAAABNAC8AAAAIAAkAAABNADAAAAAFAAkAAABNADEAAAAFAAoAAABNADIAAAAHAAkAAABNADMAAAAFAAoAAABOAPD/AAABAAsAAABOAPH/AAAIAAoAAABOAPL/AAAIAAkAAABOAPP/AAAFAAkAAABOAPT/AAAFAAoAAABOAPX/AAAIAAoAAABOAPb/AAAFAAkAAABOAPf/AAAFAAoAAABOAPj/AAACAAMAAABOAPn/AAAAAAcAAABOAPr/AAABAAQAAABOAPv/AAABAAQAAABOAPz/AAABAAQAAABOAP3/AAABAAYAAABOAP7/AAAAAAQAAABOAP//AAAAAAQAAABOAAAAAAAAAAQAAABOAAEAAAAAAAQAAABOAAIAAAAAAAQAAABOAAMAAAABAAcAAABOAAQAAAABAAQAAABOAAUAAAABAAQAAABOAAYAAAABAAQAAABOAAcAAAABAAQAAABOAAgAAAAAAAYAAABOAAkAAAACAAQAAABOAAoAAAACAAUAAABOAAsAAAAIAAoAAABOAAwAAAAFAAkAAABOAA0AAAAAAAAAAABOAA4AAAAIAAoAAABOAA8AAAAFAAoAAABOABAAAAAHAAkAAABOABEAAAAHAAoAAABOABIAAAAHAAoAAABOABMAAAAFAAoAAABOABQAAAAIAAoAAABOABUAAAAFAAoAAABOABYAAAAAAAAAAABOABcAAAAAAAAAAABOABgAAAAHAAkAAABOABkAAAAIAAoAAABOABoAAAAFAAoAAABOABsAAAAIAAkAAABOABwAAAAAAAAAAABOAB0AAAAAAAAAAABOAB4AAAAHAAkAAABOAB8AAAAIAAoAAABOACAAAAABAAMAAABOACEAAAABAAQAAABOACMAAAABAAUAAABOACQAAAAIAAkAAABOACUAAAAFAAoAAABOACYAAAAFAAoAAABOACcAAAAHAAoAAABOACgAAAAIAAoAAABOACkAAAAIAAkAAABOACoAAAAIAAkAAABOACsAAAAIAAoAAABOACwAAAAAAAAAAABOAC0AAAAIAAoAAABOAC4AAAAAAAAAAABOAC8AAAAIAAkAAABOADAAAAAFAAoAAABOADEAAAAHAAoAAABOADIAAAAFAAoAAABOADMAAAAAAAAAAABPAPD/AAABAAsAAABPAPH/AAAHAAoAAABPAPL/AAAAAAAAAABPAPP/AAAFAAoAAABPAPT/AAAHAAkAAABPAPX/AAAHAAoAAABPAPb/AAAFAAkAAABPAPf/AAAIAAkAAABPAPj/AAAIAAkAAABPAPn/AAACAAMAAABPAPr/AAACAAQAAABPAPv/AAAAAAcAAABPAPz/AAABAAQAAABPAP3/AAABAAQAAABPAP7/AAABAAQAAABPAP//AAABAAQAAABPAAAAAAABAAQAAABPAAEAAAABAAQAAABPAAIAAAABAAQAAABPAAMAAAABAAQAAABPAAQAAAABAAQAAABPAAUAAAABAAQAAABPAAYAAAAAAAYAAABPAAcAAAACAAQAAABPAAgAAAACAAUAAABPAAkAAAAIAAoAAABPAAoAAAAHAAoAAABPAAsAAAAFAAkAAABPAAwAAAAIAAoAAABPAA0AAAAFAAoAAABPAA4AAAAIAAoAAABPAA8AAAAHAAkAAABPABAAAAAIAAkAAABPABEAAAAAAAAAAABPABIAAAAHAAkAAABPABMAAAAFAAkAAABPABQAAAAFAAkAAABPABUAAAAFAAkAAABPABYAAAAIAAoAAABPABcAAAAFAAkAAABPABgAAAAHAAoAAABPABkAAAAFAAoAAABPABoAAAAHAAoAAABPABsAAAAFAAoAAABPABwAAAAHAAoAAABPAB0AAAAHAAoAAABPAB4AAAAIAAoAAABPAB8AAAAFAAoAAABPACAAAAABAAMAAABPACEAAAABAAQAAABPACQAAAAAAAoAAABPACUAAAAFAAkAAABPACYAAAAHAAkAAABPACcAAAAFAAkAAABPACgAAAAAAAAAAABPACkAAAAHAAkAAABPACoAAAAFAAoAAABPACsAAAAFAAoAAABPACwAAAAHAAkAAABPAC0AAAAIAAoAAABPAC4AAAAHAAoAAABPAC8AAAAFAAoAAABPADAAAAAFAAkAAABPADEAAAAAAAAAAABPADIAAAAHAAkAAABPADMAAAAAAAkAAABQAPD/AAABAAsAAABQAPH/AAAAAAkAAABQAPL/AAAAAAoAAABQAPP/AAAIAAkAAABQAPT/AAAIAAkAAABQAPX/AAAFAAoAAABQAPb/AAAFAAkAAABQAPf/AAAIAAoAAABQAPj/AAAIAAkAAABQAPn/AAAFAAkAAABQAPr/AAAAAAAAAABQAPv/AAABAAMAAABQAPz/AAABAAQAAABQAP3/AAAPAAYAAABQAP7/AAAPAAgAAABQAP//AAAPAAcAAABQAAAAAAAPAAYAAABQAAEAAAAPAAcAAABQAAIAAAAPAAcAAABQAAMAAAAAAAYAAABQAAQAAAACAAQAAABQAAUAAAACAAQAAABQAAYAAAACAAUAAABQAAcAAAAIAAoAAABQAAgAAAAHAAkAAABQAAkAAAAFAAoAAABQAAoAAAAFAAoAAABQAAsAAAAIAAoAAABQAAwAAAAHAAoAAABQAA0AAAAIAAkAAABQAA4AAAAFAAoAAABQAA8AAAAIAAoAAABQABAAAAAIAAkAAABQABEAAAAHAAkAAABQABIAAAAHAAkAAABQABMAAAAHAAoAAABQABQAAAAIAAkAAABQABUAAAAAAAkAAABQABYAAAAAAAkAAABQABcAAAAAAAkAAABQABgAAAAAAAkAAABQABkAAAAAAAkAAABQABoAAAAAAAkAAABQABsAAAAAAAkAAABQABwAAAAAAAkAAABQAB0AAAAAAAkAAABQAB4AAAAAAAkAAABQAB8AAAAAAAkAAABQACAAAAABAAMAAABQACEAAAABAAQAAABQACQAAAACAAsAAABQACUAAAAAAAkAAABQACYAAAAAAAoAAABQACcAAAAAAAkAAABQACgAAAAAAAoAAABQACkAAAAAAAkAAABQACoAAAAAAAoAAABQACsAAAAAAAkAAABQACwAAAAAAAoAAABQAC0AAAAAAAkAAABQAC4AAAAAAAoAAABQAC8AAAAAAAoAAABQADAAAAAAAAoAAABQADEAAAAAAAoAAABQADIAAAAAAAoAAABQADMAAAAAAAkAAAAMAAYAAAAHAAoAAAAOAAYAAAAFAAoAAAAYAPj/AAADAAcAAAApAPj/AAADAAcAAAApAPn/AAADAAcAAAAqAPj/AAADAAcAAAAqAPn/AAADAAcAAAAPAAAAAAABAAMAAAAPAAEAAAABAAQAAAAPAAIAAAABAAUAAAAQAAAAAAABAAMAAAAQAAEAAAABAAQAAAAQAAIAAAABAAUAAAARAAAAAAABAAMAAAARAAEAAAABAAQAAAARAAIAAAABAAUAAAAlAAoAAAADAAcAAAAkAAoAAAADAAcAAAAkAAsAAAADAAcAAAAlAAwAAAADAAcAAAAlAAsAAAAAAAEAAAAmAAsAAAAAAAEAAAAmAAwAAAAAAAEAAAAnAAsAAAAAAAEAAAAoAAsAAAADAAcAAAAnAAoAAAAAAAEAAAAmAAoAAAAAAAEAAAAWAAwAAAADAAkAAAAEAP7/AAAAAAAAAAAIAPv/AAAIAAkAAAAKAP3/AAAIAAkAAAAHAP7/AAAAAAAAAAAHAP3/AAAGAAAAAAAIAPz/AAAOAAAAAAAGAPz/AAAAAAAAAAAKAP7/AAAIAAkAAAAHAP//AAABAAQAAAAGAAMAAAALAAAAAABOACIAAAABAAQAAABPACIAAAABAAQAAABQACIAAAAPAAcAAABPACMAAAABAAUAAABQACMAAAACAAsAAAD+/wcAAAAIAAkAAAD8////AAARACEAAAAIABQAAAAIAAkAAAA=") +tile_set = SubResource("TileSet_snsnx") + +[node name="DoorSceneManager" parent="." node_paths=PackedStringArray("player") instance=ExtResource("1_qqjfh")] +position = Vector2(120, -15) +player = NodePath("../Player") +_to_scene = 1 +push_direction = 1 + +[node name="DoorSceneManager2" parent="." node_paths=PackedStringArray("player") instance=ExtResource("1_qqjfh")] +position = Vector2(232, 305) +player = NodePath("../Player") +_to_scene = 1 +push_direction = 1 + +[node name="Player" parent="." instance=ExtResource("1_6iuf6")] +z_index = 1 +motion_mode = 1 + +[node name="Camera2D" type="Camera2D" parent="Player"] +z_index = 4096 +zoom = Vector2(2, 2) diff --git a/scripts/constants.gd b/scripts/constants.gd new file mode 100644 index 0000000..0dfc733 --- /dev/null +++ b/scripts/constants.gd @@ -0,0 +1,12 @@ +extends Node + + +enum LEVELS_NAMES { + main_level, + house_template, +} + +const LEVELS_PATHS: Array[String] = [ + "res://scenes/main_level.tscn", + "res://scenes/house_template.tscn", +] diff --git a/scripts/door_scene_manager.gd b/scripts/door_scene_manager.gd new file mode 100644 index 0000000..74bab1e --- /dev/null +++ b/scripts/door_scene_manager.gd @@ -0,0 +1,92 @@ +extends Node2D + + +enum DIRECTIONS { None, Up, Down, Left, Right } + +const scene_manager_options := { + "speed": 2, + "pattern": "circle", + "invert_on_leave": true, + "wait_time": .1, +} + + +## the player to check [br][br] +## if [b]player[/b] is null will check any [CharacterBody2D] +@export var player: CharacterBody2D + +## Current scene +@export var current_scene: Constants.LEVELS_NAMES + +## Scene to go on area entered +@export var _to_scene: Constants.LEVELS_NAMES + +## Will check if player moving in the selected direction before changing scenes [br][br] +## [b]None[/b] means it will go on area entered without checking +@export var push_direction: DIRECTIONS = DIRECTIONS.None + + +var to_scene: String +var on_area: bool = false +var changing_scene: bool = false + + +@onready var editor_icon = $editor_icon + + +func _ready(): + to_scene = Globals.get_scene_path(_to_scene) + + # check vars + assert(to_scene is String, "ERROR: You must give to_scene a valid value.") + assert(player is CharacterBody2D, "ERROR: You must set the player to use a door!") + + # remove editor icon + editor_icon.visible = false + editor_icon.queue_free() + + +func _process(_delta): + if on_area: + # check push direction + if push_direction != DIRECTIONS.None: + var velocity := Vector2(Input.get_axis("ui_left", "ui_right"), Input.get_axis("ui_up", "ui_down")) + var direction: int + if velocity.y > 0: + direction = DIRECTIONS.Down + elif velocity.y < 0: + direction = DIRECTIONS.Up + elif velocity.x > 0: + direction = DIRECTIONS.Right + elif velocity.x < 0: + direction = DIRECTIONS.Left + + if push_direction != direction: + return + + change_scene() + + +func _on_area_2d_body_entered(body): + if body != player: + return + + on_area = true + + +func _on_area_2d_body_exited(body): + if body != player: + return + + on_area = false + + +func change_scene(): + # check if scene is changing already + if changing_scene: + return + + changing_scene = true + + Globals.update_player_position(current_scene, player.position) + SceneManager.change_scene(to_scene, scene_manager_options) diff --git a/scripts/globals.gd b/scripts/globals.gd new file mode 100644 index 0000000..815bef8 --- /dev/null +++ b/scripts/globals.gd @@ -0,0 +1,67 @@ +extends Node + + +#region player position per level + + +class _PlayerPositionAt: + var scene: int + var position: Vector2 + + func _init(new_scene: Constants.LEVELS_NAMES, new_position: Vector2): + scene = new_scene + position = new_position + + +var player_positions: Array[_PlayerPositionAt] +var last_scene_updated: Constants.LEVELS_NAMES + +func update_player_position(scene: Constants.LEVELS_NAMES, new_position: Vector2): + last_scene_updated = scene + + for p_pos in player_positions: + if p_pos.scene == scene: + p_pos.position = new_position + return + + player_positions.append(_PlayerPositionAt.new(scene, new_position)) + + +func get_last_player_position_in_scene(scene: Constants.LEVELS_NAMES) -> Vector2: + for p_pos in player_positions: + if p_pos.scene == scene: + return p_pos.position + + return Vector2() + + +func get_last_scene_updated() -> Constants.LEVELS_NAMES: + return last_scene_updated + + +#endregion + +#region current scene + + +var current_scene: Constants.LEVELS_NAMES + + +func set_current_scene(scene: Constants.LEVELS_NAMES): + current_scene = scene + + +func get_current_scene() -> Constants.LEVELS_NAMES: + return current_scene + + +#endregion + +#region utils + + +func get_scene_path(scene_name: Constants.LEVELS_NAMES) -> String: + return Constants.LEVELS_PATHS[scene_name] + + +#endregion diff --git a/scripts/main_level.gd b/scripts/main_level.gd new file mode 100644 index 0000000..1dc76a9 --- /dev/null +++ b/scripts/main_level.gd @@ -0,0 +1,11 @@ +extends Node2D + +const LEVEL_NAME = "main_level" + + +@onready var player = $Player + + +func _ready(): + # get player poss + player.position = Globals.get_last_player_position_in_scene(Constants.LEVELS_NAMES[LEVEL_NAME] as Constants.LEVELS_NAMES) diff --git a/scripts/pause_menu.gd b/scripts/pause_menu.gd new file mode 100644 index 0000000..0e8206f --- /dev/null +++ b/scripts/pause_menu.gd @@ -0,0 +1,20 @@ +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 + + +func save_data(): + SaveSystem.set_var("save", SaveResource.new()) + SaveSystem.set_var("save:scene", get_scene()) + + +func get_scene() -> Constants.LEVELS_NAMES: + pass diff --git a/scripts/player.gd b/scripts/player.gd new file mode 100644 index 0000000..e353759 --- /dev/null +++ b/scripts/player.gd @@ -0,0 +1,47 @@ +extends CharacterBody2D + + +const SPEED = 200.0 + + +@onready var animated_sprite_2d = $AnimatedSprite2D + + +func _ready(): + pass + + +func _physics_process(_delta): + # Get the input direction and handle the movement/deceleration. + # As good practice, you should replace UI actions with custom gameplay actions. + var direction := Vector2(Input.get_axis("ui_left", "ui_right"), Input.get_axis("ui_up", "ui_down")) + + if direction: + velocity = direction.normalized() * SPEED + else: + velocity = Vector2(move_toward(velocity.x, 0, SPEED), move_toward(velocity.y, 0, SPEED)) + + set_walk_animation() + move_and_slide() + + +func set_walk_animation(): + animated_sprite_2d.play() + + if velocity.y > 0: + animated_sprite_2d.animation = "walk_front" + elif velocity.y < 0: + animated_sprite_2d.animation = "walk_back" + elif velocity.x > 0: + animated_sprite_2d.animation = "walk_side" + animated_sprite_2d.flip_h = false + elif velocity.x < 0: + animated_sprite_2d.animation = "walk_side" + animated_sprite_2d.flip_h = true + else: + animated_sprite_2d.frame = 0 + animated_sprite_2d.pause() + +func pick_item_animation(): + animated_sprite_2d.animation = "pick_item" + # TODO: wait till confirmation // message dismiss