diff --git a/addons/PageFlip/Assets/back.png b/addons/PageFlip/Assets/back.png new file mode 100644 index 0000000..62c9f31 Binary files /dev/null and b/addons/PageFlip/Assets/back.png differ diff --git a/core/game_menu/assets/page_3/quad_main.png.import b/addons/PageFlip/Assets/back.png.import similarity index 73% rename from core/game_menu/assets/page_3/quad_main.png.import rename to addons/PageFlip/Assets/back.png.import index bb8ec24..a7bc220 100644 --- a/core/game_menu/assets/page_3/quad_main.png.import +++ b/addons/PageFlip/Assets/back.png.import @@ -2,16 +2,16 @@ importer="texture" type="CompressedTexture2D" -uid="uid://d4e1lbng4uqk" -path="res://.godot/imported/quad_main.png-af26b29d5c3350fc4d75e08ad350ccc7.ctex" +uid="uid://bjowpx1ap4uxt" +path="res://.godot/imported/back.png-bddbf3418b746eb53bc79fd4d0989d41.ctex" metadata={ "vram_texture": false } [deps] -source_file="res://core/game_menu/assets/page_3/quad_main.png" -dest_files=["res://.godot/imported/quad_main.png-af26b29d5c3350fc4d75e08ad350ccc7.ctex"] +source_file="res://addons/PageFlip/Assets/back.png" +dest_files=["res://.godot/imported/back.png-bddbf3418b746eb53bc79fd4d0989d41.ctex"] [params] diff --git a/addons/PageFlip/Assets/blank_page.png b/addons/PageFlip/Assets/blank_page.png new file mode 100644 index 0000000..373520a Binary files /dev/null and b/addons/PageFlip/Assets/blank_page.png differ diff --git a/addons/PageFlip/Assets/blank_page.png.import b/addons/PageFlip/Assets/blank_page.png.import new file mode 100644 index 0000000..6d2b4c7 --- /dev/null +++ b/addons/PageFlip/Assets/blank_page.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cen51wqc15b14" +path="res://.godot/imported/blank_page.png-589b6dfce0585742cc1d305c391c9cd9.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://addons/PageFlip/Assets/blank_page.png" +dest_files=["res://.godot/imported/blank_page.png-589b6dfce0585742cc1d305c391c9cd9.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/addons/PageFlip/Assets/book_impact.ogg b/addons/PageFlip/Assets/book_impact.ogg new file mode 100644 index 0000000..2df4cf1 Binary files /dev/null and b/addons/PageFlip/Assets/book_impact.ogg differ diff --git a/addons/PageFlip/Assets/book_impact.ogg.import b/addons/PageFlip/Assets/book_impact.ogg.import new file mode 100644 index 0000000..b4c7912 --- /dev/null +++ b/addons/PageFlip/Assets/book_impact.ogg.import @@ -0,0 +1,19 @@ +[remap] + +importer="oggvorbisstr" +type="AudioStreamOggVorbis" +uid="uid://bhitebdghyhua" +path="res://.godot/imported/book_impact.ogg-ae2f194921fcd1bc549a3ddb37fab4ba.oggvorbisstr" + +[deps] + +source_file="res://addons/PageFlip/Assets/book_impact.ogg" +dest_files=["res://.godot/imported/book_impact.ogg-ae2f194921fcd1bc549a3ddb37fab4ba.oggvorbisstr"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/addons/PageFlip/Assets/front.png b/addons/PageFlip/Assets/front.png new file mode 100644 index 0000000..9c13514 Binary files /dev/null and b/addons/PageFlip/Assets/front.png differ diff --git a/addons/PageFlip/Assets/front.png.import b/addons/PageFlip/Assets/front.png.import new file mode 100644 index 0000000..3458463 --- /dev/null +++ b/addons/PageFlip/Assets/front.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dbdwbowx32d3v" +path="res://.godot/imported/front.png-76dff7071666496195badceef4e0ce67.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://addons/PageFlip/Assets/front.png" +dest_files=["res://.godot/imported/front.png-76dff7071666496195badceef4e0ce67.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/addons/PageFlip/Assets/interior.png b/addons/PageFlip/Assets/interior.png new file mode 100644 index 0000000..95b0f55 Binary files /dev/null and b/addons/PageFlip/Assets/interior.png differ diff --git a/addons/PageFlip/Assets/interior.png.import b/addons/PageFlip/Assets/interior.png.import new file mode 100644 index 0000000..6d3e150 --- /dev/null +++ b/addons/PageFlip/Assets/interior.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dt1tiecgw5rip" +path="res://.godot/imported/interior.png-d4b06daf084fdb8a90836ec57d2dd53f.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://addons/PageFlip/Assets/interior.png" +dest_files=["res://.godot/imported/interior.png-d4b06daf084fdb8a90836ec57d2dd53f.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/addons/PageFlip/Assets/page_flip.ogg b/addons/PageFlip/Assets/page_flip.ogg new file mode 100644 index 0000000..ba51f6e Binary files /dev/null and b/addons/PageFlip/Assets/page_flip.ogg differ diff --git a/addons/PageFlip/Assets/page_flip.ogg.import b/addons/PageFlip/Assets/page_flip.ogg.import new file mode 100644 index 0000000..1f82846 --- /dev/null +++ b/addons/PageFlip/Assets/page_flip.ogg.import @@ -0,0 +1,19 @@ +[remap] + +importer="oggvorbisstr" +type="AudioStreamOggVorbis" +uid="uid://bylfc3b5pmbij" +path="res://.godot/imported/page_flip.ogg-aabb6ae51ff161ae6afa52da11fe75de.oggvorbisstr" + +[deps] + +source_file="res://addons/PageFlip/Assets/page_flip.ogg" +dest_files=["res://.godot/imported/page_flip.ogg-aabb6ae51ff161ae6afa52da11fe75de.oggvorbisstr"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/addons/PageFlip/Assets/page_flip_final.gdshader b/addons/PageFlip/Assets/page_flip_final.gdshader new file mode 100644 index 0000000..7a81766 --- /dev/null +++ b/addons/PageFlip/Assets/page_flip_final.gdshader @@ -0,0 +1,49 @@ +shader_type canvas_item; + +uniform sampler2D front_texture : source_color, filter_linear_mipmap; +uniform sampler2D back_texture : source_color, filter_linear_mipmap; + +uniform sampler2D spine_shadow_gradient : source_color, filter_linear, repeat_disable; +uniform float shadow_intensity : hint_range(0.0, 1.0) = 0.0; +uniform float max_shadow_spread : hint_range(0.0, 1.0) = 0.35; + +uniform bool debug_mode = false; +uniform bool is_backward = false; + +void fragment() { + vec2 uv_dx = dFdx(UV); + vec2 uv_dy = dFdy(UV); + float face_dir = uv_dx.x * uv_dy.y - uv_dx.y * uv_dy.x; + bool is_front = face_dir > 0.0; + + vec4 base_color; + + if (is_front) { + if (is_backward) { + // Let's try flipping Y just in case they meant upside down! + // And keep X normal, since UV goes 0 to 1. + base_color = texture(front_texture, UV); + } else { + base_color = texture(front_texture, UV); + } + } else { + if (is_backward) { + base_color = texture(back_texture, vec2(1.0 - UV.x, UV.y)); + } else { + base_color = texture(back_texture, vec2(1.0 - UV.x, UV.y)); + } + } + + float current_spread = max_shadow_spread * (shadow_intensity + 0.001); + float sample_x = UV.x / current_spread; + float shadow_alpha = texture(spine_shadow_gradient, vec2(sample_x, 0.0)).a; + + if (sample_x > 1.0) { + shadow_alpha = 0.0; + } + + shadow_alpha *= shadow_intensity; + + vec3 final_rgb = mix(base_color.rgb, vec3(0.0, 0.0, 0.0), shadow_alpha); + COLOR = vec4(final_rgb, base_color.a); +} diff --git a/addons/PageFlip/Assets/page_flip_final.gdshader.uid b/addons/PageFlip/Assets/page_flip_final.gdshader.uid new file mode 100644 index 0000000..9dcf8d6 --- /dev/null +++ b/addons/PageFlip/Assets/page_flip_final.gdshader.uid @@ -0,0 +1 @@ +uid://b57sdbj15qx37 diff --git a/addons/PageFlip/Assets/page_flip_shader_material.tres b/addons/PageFlip/Assets/page_flip_shader_material.tres new file mode 100644 index 0000000..52cccb3 --- /dev/null +++ b/addons/PageFlip/Assets/page_flip_shader_material.tres @@ -0,0 +1,9 @@ +[gd_resource type="ShaderMaterial" load_steps=2 format=3 uid="uid://ddw2ie8wnrnre"] + +[ext_resource type="Shader" uid="uid://b57sdbj15qx37" path="res://addons/PageFlip/Assets/page_flip_final.gdshader" id="1_cl0rr"] + +[resource] +shader = ExtResource("1_cl0rr") +shader_parameter/shadow_intensity = 0.0 +shader_parameter/max_shadow_spread = 0.35 +shader_parameter/debug_mode = false diff --git a/addons/PageFlip/Assets/shadow_gradient.tres b/addons/PageFlip/Assets/shadow_gradient.tres new file mode 100644 index 0000000..0a0faaa --- /dev/null +++ b/addons/PageFlip/Assets/shadow_gradient.tres @@ -0,0 +1,8 @@ +[gd_resource type="GradientTexture2D" format=3 uid="uid://rm7bporlv3cf"] + +[sub_resource type="Gradient" id="Gradient_3i6i7"] +offsets = PackedFloat32Array(0, 0.2731183, 0.44731182, 1) +colors = PackedColorArray(0, 0, 0, 0.521, 0, 0, 0, 0.492, 0, 0, 0, 0.358, 0, 0, 0, 0) + +[resource] +gradient = SubResource("Gradient_3i6i7") diff --git a/addons/PageFlip/Assets/spine.png b/addons/PageFlip/Assets/spine.png new file mode 100644 index 0000000..4564747 Binary files /dev/null and b/addons/PageFlip/Assets/spine.png differ diff --git a/addons/PageFlip/Assets/spine.png.import b/addons/PageFlip/Assets/spine.png.import new file mode 100644 index 0000000..3fa8ed1 --- /dev/null +++ b/addons/PageFlip/Assets/spine.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cit41jypw2sy1" +path="res://.godot/imported/spine.png-c2fa10bef4996b84a954651c908149a7.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://addons/PageFlip/Assets/spine.png" +dest_files=["res://.godot/imported/spine.png-c2fa10bef4996b84a954651c908149a7.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/addons/PageFlip/book_api.gd b/addons/PageFlip/book_api.gd new file mode 100644 index 0000000..28db9c4 --- /dev/null +++ b/addons/PageFlip/book_api.gd @@ -0,0 +1,229 @@ +@tool +class_name BookAPI +extends RefCounted + +## Static utility class for the PageFlip2D system by Newold. +## Provides helper methods to configure the book and facilitate interaction +## from embedded scenes (UI, puzzles, maps). +## +## [b]How to use:[/b][br] +## This class is designed to be used statically. You do not need to instance it. +## Simply call [code]BookAPI.function_name()[/code] from anywhere in your project. +## It automatically tracks the active [PageFlip2D] instance. +## (When a PageFlip scene enters the tree, it registers itself as the current_book.) + +# ============================================================================== +# ENUMS (Mirrored for easy access) +# ============================================================================== + +enum JumpTarget { + ## Jump to the closed state showing the Front Cover. + FRONT_COVER, + ## Jump to the closed state showing the Back Cover. + BACK_COVER, + ## Jump to a specific content page number. + CONTENT_PAGE +} + +# Internal reference to the currently active book. +static var _current_book: PageFlip2D + + +# ============================================================================== +# SETUP & REFERENCES +# ============================================================================== + +## Registers a book instance as the currently active one. +## Automatically called by [PageFlip2D] in its [method Node._ready]. +static func set_current_book(book: PageFlip2D) -> void: + _current_book = book + + +## Returns the currently active book instance, or null if none is registered. +static func get_current_book() -> PageFlip2D: + return _current_book + + +# ============================================================================== +# NAVIGATION CONTROLS +# ============================================================================== + +## Turns the page forward (to the next page/spread). +## Does nothing if the book is animating or at the end. +static func next_page() -> void: + if is_instance_valid(_current_book): + force_release_control(_current_book) + _current_book.next_page() + + +## Turns the page backward (to the previous page/spread). +## Does nothing if the book is animating or at the beginning. +static func prev_page() -> void: + if is_instance_valid(_current_book): + force_release_control(_current_book) + _current_book.prev_page() + + +## Forces the active book to close towards a specific cover. +## [param to_front_cover]: If true, closes to the Front Cover (Right to Left). If false, closes to Back Cover. +static func force_close_book(to_front_cover: bool) -> void: + if is_instance_valid(_current_book): + force_release_control(_current_book) + _current_book.force_close_book(to_front_cover) + + +## Navigates to a specific page number (1-based index). +## Acts as a wrapper for go_to_spread, calculating the correct index automatically. +## [b]ASYNC:[/b] Must be called with 'await' if animated is true. +## [param page_num]: The 1-based page number (1 = first texture in pages_paths). +## [param target]: Specifies if the target is a content page or a cover. +static func go_to_page(page_num: int = 1, target: JumpTarget = JumpTarget.CONTENT_PAGE, animated: bool = true) -> void: + var book = _current_book + if not is_instance_valid(book): return + + var target_spread_idx: int = 0 + + match target: + JumpTarget.FRONT_COVER: + target_spread_idx = -1 + JumpTarget.BACK_COVER: + target_spread_idx = book.total_spreads + JumpTarget.CONTENT_PAGE: + # Calculate spread index: 1-2 -> Spread 0, 3-4 -> Spread 1, etc. + var safe_page = max(1, page_num) + target_spread_idx = int(safe_page / 2.0) + target_spread_idx = clampi(target_spread_idx, 0, book.total_spreads - 1) + + await go_to_spread(book, target_spread_idx, animated) + + +## Navigates to a specific spread index directly. +## [b]ASYNC:[/b] Must be called with 'await' if animated is true. +## - Animated: Fast-forwards through pages with dynamic speed. +## - Instant: Snaps to page and manually triggers the scene activation handshake. +static func go_to_spread(book: PageFlip2D, target_spread: int, animated: bool = true) -> void: + if not is_instance_valid(book): return + + # Clamp target + var final_target = clampi(target_spread, -1, book.total_spreads) + var diff = final_target - book.current_spread + + if diff == 0: + return + + force_release_control(book) + + if not animated: + # INSTANT TELEPORT + book.current_spread = final_target + book.call("_update_static_visuals_immediate") + book.call("_update_volume_visuals") + # Force check for interactive scenes after teleport + book.call("_check_scene_activation") + + else: + # ANIMATED FAST-FORWARD + if book.is_animating: return # Don't interrupt an existing animation + + var original_speed = book.anim_player.speed_scale + + # --- DYNAMIC SPEED CALCULATION --- + var steps = abs(diff) + # Base speed: 1.5x -> Max speed: 10.0x + var dynamic_speed = remap(float(steps), 0.0, float(book.total_spreads), 1.5, 10.0) + book.anim_player.speed_scale = dynamic_speed + + var going_forward = diff > 0 + + for i in range(steps): + if not is_instance_valid(book): break + + if going_forward: book.next_page() + else: book.prev_page() + + # Wait for the physical page turn to finish before starting the next one. + if book.anim_player.is_playing(): + await book.anim_player.animation_finished + else: + await book.get_tree().process_frame + + # RESTORE STATE + if is_instance_valid(book): + book.anim_player.speed_scale = original_speed + + +# ============================================================================== +# STATE & INTERACTION HELPERS +# ============================================================================== + +## Returns true if the book (active or specific) is currently animating. +static func is_busy(book_instance: PageFlip2D = null) -> bool: + var book = book_instance if book_instance else _current_book + if not is_instance_valid(book): return false + return book.is_animating + + +## Locates the PageFlip2D controller ancestor from any node inside an interactive page. +static func find_book_controller(caller_node: Node) -> PageFlip2D: + var current = caller_node + while current: + if current is PageFlip2D: + return current + current = current.get_parent() + return null + + +## Safely locks or unlocks the book's ability to turn pages manually. +## WARNING: If locked, the interactive scene MUST be responsible for unlocking it later. +static func set_interaction_lock(book: PageFlip2D, locked: bool) -> void: + if not is_instance_valid(book): return + book.call("_pageflip_set_input_enabled", not locked) + + +## Forces the book to regain input control immediately. +## Useful as a failsafe if an interactive scene closes unexpectedly. +static func force_release_control(book: PageFlip2D) -> void: + if not is_instance_valid(book): return + book.call("_pageflip_set_input_enabled", true) + + +# ============================================================================== +# CONFIGURATION HELPERS +# ============================================================================== + +## Configures the visual properties of a Book instance via a dictionary. +static func configure_visuals(book: PageFlip2D, data: Dictionary) -> void: + if not is_instance_valid(book): return + + if "pages" in data: + book.pages_paths = data["pages"] + book.call("_prepare_book_content") + + if "cover_front_out" in data: book.tex_cover_front_out = data["cover_front_out"] + if "cover_front_in" in data: book.tex_cover_front_in = data["cover_front_in"] + if "cover_back_in" in data: book.tex_cover_back_in = data["cover_back_in"] + if "cover_back_out" in data: book.tex_cover_back_out = data["cover_back_out"] + + if "spine_col" in data: book.spine_color = data["spine_col"] + if "spine_width" in data: + book.spine_width = data["spine_width"] + book.call("_build_spine") + + if "size" in data: + book.target_page_size = data["size"] + book.call("_apply_new_size") + + book.call("_update_static_visuals_immediate") + book.call("_update_volume_visuals") + + +## Configures the physics simulation of the page turning effect. +static func configure_physics(book: PageFlip2D, data: Dictionary) -> void: + if not is_instance_valid(book) or not book.dynamic_poly: return + + var rigger = book.dynamic_poly + for key in data.keys(): + rigger.set(key, data[key]) + + if rigger.has_method("rebuild"): + rigger.rebuild(book.target_page_size) diff --git a/addons/PageFlip/book_api.gd.uid b/addons/PageFlip/book_api.gd.uid new file mode 100644 index 0000000..5965f43 --- /dev/null +++ b/addons/PageFlip/book_api.gd.uid @@ -0,0 +1 @@ +uid://c2dx1dksgeey6 diff --git a/addons/PageFlip/page_flip.gd b/addons/PageFlip/page_flip.gd new file mode 100644 index 0000000..c50be7b --- /dev/null +++ b/addons/PageFlip/page_flip.gd @@ -0,0 +1,1416 @@ +@tool +class_name PageFlip2D +extends Node2D + +## Main controller for the Book system. Handles animations, volume logic, and interactive scenes. +## +## [b]ADVANCED FEATURE: INTERACTIVE PAGE SCENES (INPUT HANDSHAKE)[/b][br] +## This script supports fully interactive scenes (UI, puzzles, maps) embedded as pages.[br] +## It automatically manages an "Input Handshake" to prevent conflicts between[br] +## the Book (turning pages) and the Scene (interaction).[br] +## [br] +## [b]LOGIC FLOW:[/b][br] +## - Uses 4 internal Viewport Slots.[br] +## - Slot 1: Static Left Page.[br] +## - Slot 2: Static Right Page.[br] +## - Slot 3: Dynamic Page Face A (Front).[br] +## - Slot 4: Dynamic Page Face B (Back).[br] +## - The Shader handles the visibility of Face A vs Face B automatically. + +## Defines how textures are stretched within the page boundaries. +enum PageStretchOption { + ## Scales the texture to fit the page rect, potentially distorting aspect ratio. + SCALE = TextureRect.STRETCH_SCALE, + ## Keeps the aspect ratio and centers the texture, leaving blank space if necessary. + KEEP_ASPECT_CENTERED = TextureRect.STRETCH_KEEP_ASPECT_CENTERED, + ## Keeps the aspect ratio but covers the entire page, potentially cropping the image. + KEEP_ASPECT_COVERED = TextureRect.STRETCH_KEEP_ASPECT_COVERED +} + +## Defines the condition required to trigger the book closing sequence. +enum CloseCondition { + ## The book will never close automatically. + NEVER, + ## The book closes only when finishing the animation that shuts the back cover (Right to Left). + CLOSE_FROM_BACK, + ## The book closes only when finishing the animation that shuts the front cover (Left to Right). + CLOSE_FROM_FRONT, + ## The book closes when shutting either the front or the back cover. + ANY_CLOSE, + ## The book closes immediately when the 'ui_cancel' action (e.g., ESC) is pressed. + ON_CANCEL_INPUT, + ## The book closing logic is handled manually by an interactive scene (calling force_close_book). + DELEGATED +} + +## Defines what happens to the Book node after it closes. +enum CloseBehavior { + ## The Book node is deleted from the scene tree (queue_free). + DESTROY_BOOK, + ## The game changes to a specific scene defined in 'target_scene_on_close'. + CHANGE_SCENE +} + +## Defines the initial state of the book when the scene loads. +enum StartOption { + ## The book starts fully closed showing the front cover. + CLOSED_FROM_FRONT, + ## The book starts fully closed showing the back cover. + CLOSED_FROM_BACK, + ## The book starts open at a specific page number defined in 'start_page'. + OPEN_AT_PAGE +} + +## Defines the target destination for the go_to_page function. +enum JumpTarget { + ## Jumps to a specific content page number (using the 'page_num' parameter). + CONTENT_PAGE, + ## Jumps to the closed state showing the Front Cover. + FRONT_COVER, + ## Jumps to the closed state showing the Back Cover. + BACK_COVER +} + + +@export_category("Newold Config") +## Apply the custom configuration defined by Newold (Size, Physics, Layers). +## Clicking this will overwrite current physics and sizing settings with a beauty starting preset. +@export var apply_newold_preset: bool = false : set = _apply_newold_config + + +# ============================================================================== +# 1. REFERENCES & CONFIGURATION +# ============================================================================== +@export_category("Structure References") +## Container for all book visuals (Pages, Covers, Spine). +@export var visuals_container: Node2D +## Static polygon representing the left page (Slot 1). +@export var static_left: Polygon2D +## Static polygon representing the right page (Slot 2). +@export var static_right: Polygon2D +## Dynamic polygon used for the turning page animation (Slot 3 & 4). +@export var dynamic_poly: Polygon2D +## Animation player handling the page flip sequences. +@export var anim_player: AnimationPlayer + + +@export_category("Book Logic & Closing") +## Determines the initial state of the book (closed or open at specific page). +@export var start_option: StartOption = StartOption.CLOSED_FROM_FRONT : set = _set_start_option +## The page number to open at startup. Only visible if start_option is OPEN_AT_PAGE.[br][br] +## If any of the pages that remain open are interactive scenes, +## the script will automatically transfer control to them.[br][br] +## Note: Since an even page (Left) and the next odd page (Right) share the same spread, +## selecting either of them will result in the book opening to the same visual state. +@export var start_page: int = 1 +## Determines when the book should perform the close action (e.g., destroy or change scene). +@export var close_condition: CloseCondition = CloseCondition.NEVER +## Determines what happens when the book closes (Destroy or Change Scene). +@export var close_behavior: CloseBehavior = CloseBehavior.DESTROY_BOOK : set = _set_close_behavior +## The file path to the scene to load if 'Change Scene' is selected as behavior. +@export_file("*.tscn") var target_scene_on_close: String +## If true, pages with transparency will be composited over the 'Blank Page' texture/color. +## Useful for PNG notes or decals that need a paper background. +@export var enable_composite_pages: bool = false + + +@export_category("Styling & Spine") +## Base color for pages without texture content or the background of composite pages. +@export var blank_page_color: Color = Color.WHITE +## Texture used when a page path is invalid, empty, or for the background of composite pages. +@export var blank_page_texture: Texture2D +## Color tint for the central spine of the book. +@export var spine_color: Color = Color(1, 1, 1) : set = _set_spine_color +## Texture for the central spine of the book. +@export var spine_texture: Texture2D : set = _set_spine_texture +## Width of the central spine in pixels. +@export var spine_width: float = 40.0 : set = _set_spine_value +## Determines if the front and back covers behave as rigid bodies (hard cover) or flexible (soft cover). +@export var covers_are_rigid: bool = true + + +# ============================================================================== +# FAKE 3D TRANSFORM SETTINGS +# ============================================================================== +@export_category("Fake 3D (Transform)") +@export_group("Closed State") +## Scale of the book container when fully closed. +@export var closed_scale: Vector2 = Vector2(1.0, 0.85) +## Skew (shear) applied when closed to simulate perspective or isometric view. +@export_range(-1.0, 1.0) var closed_skew: float = 0.0 +## Rotation (degrees) of the book when closed. +@export_range(-360.0, 360.0) var closed_rotation: float = 0.0 + +@export_group("Animation") +## Speed multiplier for the page flip animation. Higher is faster. +@export var flip_speed_scale: float = 1.0 : + set(val): + flip_speed_scale = val + if anim_player: + anim_player.speed_scale = val + +@export var use_internal_camera: bool = true +@export_group("Open State") +## Scale of the book container when fully open. +@export var open_scale: Vector2 = Vector2(1.0, 1.0) +## Skew (shear) applied when open. +@export var open_skew: float = 0.0 +## Rotation (degrees) of the book when open. +@export var open_rotation: float = 0.0 + + +# ============================================================================== +# FAKE 3D VOLUME (PAGES) +# ============================================================================== +@export_category("Fake 3D Volume (Pages)") +## Minimum number of layers to generate for the page stack (visual thickness floor). +@export_range(1, 20) var min_layers: int = 3 +## Maximum number of layers to generate for the page stack (visual thickness ceiling). +@export_range(1, 100) var max_layers: int = 15 +## If true, the stack grows upwards (negative Y). If false, downwards (positive Y). +@export var invert_stack_direction: bool = false +## Offset between layers when the book is closed (max compression). +@export var layer_offset_closed: Vector2 = Vector2(0, 1.5) +## Offset between layers when the book is open (relaxed compression). +@export var layer_offset_open: Vector2 = Vector2(0, 0.2) +## Base color tint for the volume layers (paper edges). +@export var volume_color: Color = Color(0.8, 0.75, 0.6) +## Darkening factor for alternating layers to create a paper texture effect. +@export_range(0.0, 1.0) var stripe_darken_ratio: float = 0.85 +## Global positional offset for the entire volume stack. +@export var volume_stack_offset: Vector2 = Vector2.ZERO +## Time in seconds before the animation ends to "land" the page on the stack visually. +@export var landing_overlap: float = 0.15 + + +@export_category("Audio") +## Sound played when a rigid cover slams shut. +@export var sfx_book_impact: AudioStream +## Sound played when a flexible page turns. +@export var sfx_page_flip: AudioStream +## Time offset to sync the impact sound with the visual contact frame. +@export var impact_sync_offset: float = 0.15 +## AudioStreamPlayer node used for feedback. +@export var audio_player: AudioStreamPlayer + + +@export_category("Book Size Control") +## Target size (Resolution) for the book pages. Affects Viewports and Meshes. +@export var target_page_size: Vector2 = Vector2(512, 820) +## Button to apply size changes in the editor. +@export var apply_size_change: bool = false : set = _on_apply_size_pressed + + +@export_category("Content Source") +## List of paths to textures (*.png, *.jpg) or PackedScenes (*.tscn) for pages. +@export_file("*.png", "*.jpg", "*.jpeg", "*.tscn") var pages_paths: Array[String] = [] +## Determines how standard images (textures) are stretched within the page boundaries. +@export var page_stretch_mode: PageStretchOption = PageStretchOption.SCALE +## External front cover texture. +@export var tex_cover_front_out: Texture2D +## Internal front cover texture. +@export var tex_cover_front_in: Texture2D +## Internal back cover texture. +@export var tex_cover_back_in: Texture2D +## External back cover texture. +@export var tex_cover_back_out: Texture2D + + +# ============================================================================== +# 2. INTERNAL STATE +# ============================================================================== +var current_spread: int = -1 +var total_spreads: int = 0 +var is_animating: bool = false +var going_forward: bool = true +var page_width: float +var is_book_open: bool = false + +var _runtime_pages: Array[String] = [] +var _spine_poly: Polygon2D + +# Slot References (Viewports) +var _slot_1: SubViewport # Left Page +var _slot_2: SubViewport # Right Page +var _slot_3: SubViewport # Animation Face A +var _slot_4: SubViewport # Animation Face B + +var _active_interactive_is_left: bool = false +var _active_interactive_is_right: bool = false +var _scene_cache = {} + +# Internal references for volume generation +var _volume_root: Node2D +var _current_expansion_factor: float = 0.0 +var _visual_spread_index: float = -1.0 +var _stack_scale_left: float = 1.0 +var _stack_scale_right: float = 1.0 + +# Animation flags +var _is_page_flying: bool = false +var _flying_from_right: bool = false +var _force_hide_vol_left: bool = false +var _force_hide_vol_right: bool = false +var _pending_target_spread_idx: int = 0 + +# Flag to handle forced closing animation state (API force_close_book) +var _is_force_closing: bool = false + +# Flags to handle jump-to-page logic +var _is_jumping: bool = false +var _jump_target_spread: int = 0 + +## Tracks which viewports have received the mouse_entered notification. +var _active_viewports_state: Dictionary = {} + + +signal started_page_flip_animation() +signal ended_page_flip_animation() + + +func _validate_property(property: Dictionary) -> void: + if property.name == "target_scene_on_close": + if close_behavior != CloseBehavior.CHANGE_SCENE: + property.usage = PROPERTY_USAGE_NO_EDITOR + + if property.name == "start_page": + if start_option != StartOption.OPEN_AT_PAGE: + property.usage = PROPERTY_USAGE_NO_EDITOR + + +func _set_close_behavior(value): + close_behavior = value + notify_property_list_changed() + + +func _set_start_option(value): + start_option = value + notify_property_list_changed() + + +func _apply_newold_config(val): + if not val: return + apply_newold_preset = false + print("[BookController] Applying 'Newold' configuration...") + blank_page_color = Color.WHITE + blank_page_texture = preload("uid://cen51wqc15b14") + spine_color = Color.WHITE + spine_texture = preload("uid://cit41jypw2sy1") + spine_width = 12.0 + covers_are_rigid = true + closed_scale = Vector2(0.815, 0.45) + closed_skew = 0.05 + closed_rotation = 0.1 + open_scale = Vector2(1.0, 0.975) + open_skew = 0.0 + open_rotation = 0.0 + min_layers = 1 + max_layers = 15 + invert_stack_direction = false + layer_offset_closed = Vector2(3.0, 6.5) + layer_offset_open = Vector2(4.0, 2.0) + volume_color = Color("#a6978f") + stripe_darken_ratio = 0.848 + volume_stack_offset = Vector2(0, 0) + landing_overlap = 0.15 + sfx_book_impact = preload("uid://bhitebdghyhua") + sfx_page_flip = preload("uid://bylfc3b5pmbij") + impact_sync_offset = 0.15 + target_page_size = Vector2(512, 820) + page_stretch_mode = PageStretchOption.SCALE + tex_cover_front_out = preload("uid://dbdwbowx32d3v") + tex_cover_front_in = preload("uid://dt1tiecgw5rip") + tex_cover_back_in = preload("uid://dt1tiecgw5rip") + tex_cover_back_out = preload("uid://bjowpx1ap4uxt") + _apply_new_size() + dynamic_poly.animation_preset = DynamicPage.PagePreset.LIGHT_MAGAZINE + notify_property_list_changed() + + +# ============================================================================== +# BUILD & INIT +# ============================================================================== +func __init(): + var viewports_cont = __ensure_node("Viewports", Node, self) + var slots_cont = __ensure_node("Slots", Node, viewports_cont) + var visual_cont = __ensure_node("Visual", Node2D, self) + + _slot_1 = __ensure_node("Slot1", SubViewport, slots_cont) + _slot_2 = __ensure_node("Slot2", SubViewport, slots_cont) + _slot_3 = __ensure_node("Slot3", SubViewport, slots_cont) + _slot_4 = __ensure_node("Slot4", SubViewport, slots_cont) + + for slot in [_slot_1, _slot_2, _slot_3, _slot_4]: + slot.transparent_bg = true + slot.render_target_update_mode = SubViewport.UPDATE_ALWAYS + slot.size = target_page_size + if slot in [_slot_1, _slot_2]: + slot.physics_object_picking = true + + var s_left = __ensure_node("StaticPageLeft", Polygon2D, visual_cont) + s_left.z_index = 1 + var s_right = __ensure_node("StaticPageRight", Polygon2D, visual_cont) + s_right.z_index = 1 + var d_poly = __ensure_node("DynamicFlipPoly", Polygon2D, visual_cont) + d_poly.z_index = 10 + d_poly.clip_children = Control.ClipChildrenMode.CLIP_CHILDREN_AND_DRAW + + if d_poly.get_script() == null: + d_poly.set_script(load("res://addons/PageFlip/page_rigger.gd")) + + var anim = __ensure_node("AnimationPlayer", AnimationPlayer, self) + if use_internal_camera: + __ensure_node("Camera2D", Camera2D, self) + else: + var cam = get_node_or_null("Camera2D") + if cam: cam.queue_free() + var stream_player = __ensure_node("AudioStreamPlayer", AudioStreamPlayer, self) + + if not visuals_container: visuals_container = visual_cont + if not static_left: static_left = s_left + if not static_right: static_right = s_right + if not dynamic_poly: dynamic_poly = d_poly + if not anim_player: anim_player = anim + if not audio_player: audio_player = stream_player + + if dynamic_poly and anim_player: + if dynamic_poly.get("anim_player") == null: + dynamic_poly.set("anim_player", anim_player) + + __ensure_node("RuntimeSpine", Polygon2D, visual_cont) + + if Vector2(_slot_1.size) != target_page_size: + _apply_new_size() + + +func __ensure_node(target_name: String, type: Variant, parent_node: Node) -> Node: + var node = parent_node.get_node_or_null(target_name) + if node: return node + node = type.new() + node.name = target_name + if node is SubViewport: node.transparent_bg = true + parent_node.add_child(node) + if Engine.is_editor_hint(): node.owner = parent_node.owner if parent_node.owner else self + return node + + +func _enter_tree() -> void: + if not is_in_group("FlipBook2D"): + add_to_group("FlipBook2D") + BookAPI.set_current_book(self) + + +func _exit_tree() -> void: + if BookAPI.get_current_book() == self: + BookAPI.set_current_book(null) + + +func _ready(): + BookAPI.set_current_book(self) + if not _slot_1: _slot_1 = find_child("Slot1", true, false) + if not _slot_2: _slot_2 = find_child("Slot2", true, false) + if not _slot_3: _slot_3 = find_child("Slot3", true, false) + if not _slot_4: _slot_4 = find_child("Slot4", true, false) + + if Engine.is_editor_hint(): + __init() + if dynamic_poly: dynamic_poly.rebuild(target_page_size) + return + elif Vector2(_slot_1.size) != target_page_size: + _apply_new_size() + + if dynamic_poly and not dynamic_poly.material: + dynamic_poly.material = preload("uid://ddw2ie8wnrnre") + + if anim_player: + anim_player.speed_scale = flip_speed_scale + + if dynamic_poly: dynamic_poly.rebuild(target_page_size) + + if not blank_page_texture: + var w = int(target_page_size.x) + var h = int(target_page_size.y) + if w > 0 and h > 0: + var img = Image.create(w, h, false, Image.FORMAT_RGBA8) + img.fill(blank_page_color) + blank_page_texture = ImageTexture.create_from_image(img) + + _prepare_book_content() + + # Initial State Logic + if not Engine.is_editor_hint(): + match start_option: + StartOption.CLOSED_FROM_FRONT: + current_spread = -1 + StartOption.CLOSED_FROM_BACK: + current_spread = total_spreads + StartOption.OPEN_AT_PAGE: + var spread_idx = int(floor((start_page - 1) / 2.0)) + current_spread = clampi(spread_idx, 0, total_spreads - 1) + + if dynamic_poly and not dynamic_poly.is_connected("change_page_requested", _on_midpoint_signal): + dynamic_poly.connect("change_page_requested", _on_midpoint_signal) + + if anim_player and not anim_player.is_connected("animation_finished", _on_animation_finished): + anim_player.animation_finished.connect(_on_animation_finished) + + await get_tree().process_frame + + if _slot_3 and dynamic_poly: + dynamic_poly.texture = _slot_3.get_texture() + + _initial_config() + _set_flying_slots_active(false) + + +func _set_spine_color(color: Color) -> void: + spine_color = color + var node = find_child("RuntimeSpine") + if node: node.color = spine_color + + +func _set_spine_texture(texture: Texture2D) -> void: + spine_texture = texture + var node = find_child("RuntimeSpine") + if node: node.texture = spine_texture + + +func _set_spine_value(value: float) -> void: + spine_width = value + if visuals_container: + _build_spine() + + +func _initial_config(): + page_width = target_page_size.x + var screen_center = _get_screen_center() + + _set_page_visible(dynamic_poly, false) + + _build_spine() + _generate_volume_layers() + + # Add an invisible Control node to block mouse clicks passing through the book to the UI behind it + var input_blocker = visuals_container.get_node_or_null("InputBlocker") + if not input_blocker: + input_blocker = Control.new() + input_blocker.name = "InputBlocker" + input_blocker.mouse_filter = Control.MOUSE_FILTER_IGNORE + visuals_container.add_child(input_blocker) + visuals_container.move_child(input_blocker, 0) + + input_blocker.position = Vector2(-target_page_size.x, -target_page_size.y / 2.0) + input_blocker.size = Vector2(target_page_size.x * 2.0, target_page_size.y) + _visual_spread_index = float(current_spread) + + var is_closed = (current_spread == -1 or current_spread == total_spreads) + is_book_open = not is_closed + var is_back = (current_spread == total_spreads) + + if is_closed: + var offset = _get_compensation_offset(true, is_back) + var base_offset = offset - Vector2(target_page_size.x / 2, 0.0) + if use_internal_camera: + visuals_container.global_position = screen_center + base_offset + else: + visuals_container.position = base_offset + _animate_container_transform(true, is_back, 0.0) + if is_back: _update_stack_direct(1.0, float(total_spreads)) + else: _update_stack_direct(1.0, -1.0) + else: + var offset = _get_compensation_offset(false, false) + var base_offset = offset - Vector2(target_page_size.x / 2, 0.0) + if use_internal_camera: + visuals_container.global_position = screen_center + base_offset + else: + visuals_container.position = base_offset + _animate_container_transform(false, false, 0.0) + _update_stack_direct(0.0, float(current_spread)) + + _update_static_visuals_immediate() + _update_volume_visuals() + _check_scene_activation.call_deferred() + + +# ============================================================================== +# VOLUME +# ============================================================================== +func _generate_volume_layers(): + if _volume_root and is_instance_valid(_volume_root): _volume_root.queue_free() + var final_layer_count = 0 + if total_spreads > 0: final_layer_count = clampi(total_spreads, min_layers, max_layers) + if final_layer_count <= 0: return + + _volume_root = Node2D.new() + _volume_root.name = "VolumeStackPages" + visuals_container.add_child(_volume_root) + visuals_container.move_child(_volume_root, 0) + + for i in range(final_layer_count): + var layer_node = Node2D.new() + layer_node.name = "Layer_%d" % i + var layer_col = volume_color + if i % 2 != 0: + layer_col.r *= stripe_darken_ratio + layer_col.g *= stripe_darken_ratio + layer_col.b *= stripe_darken_ratio + layer_node.modulate = layer_col + var s_left = static_left.duplicate() + var s_right = static_right.duplicate() + s_left.position = Vector2.ZERO; s_right.position = Vector2.ZERO + s_left.set_script(null); s_right.set_script(null) + layer_node.add_child(s_left) + layer_node.add_child(s_right) + _volume_root.add_child(layer_node) + + +func _tween_expansion_only(factor: float): + _update_stack_direct(factor, _visual_spread_index) + + +func _update_stack_direct(expansion_factor: float, visual_spread: float): + _current_expansion_factor = expansion_factor + _visual_spread_index = visual_spread + if not _volume_root: return + var current_step = layer_offset_open.lerp(layer_offset_closed, expansion_factor) + var total_layers = _volume_root.get_child_count() + var y_dir = -1.0 if invert_stack_direction else 1.0 + + var count_left = 0 + var count_right = 0 + + if is_animating: + var layers_at_start = _get_layer_count_for_spread(current_spread, total_layers) + var layers_at_target = _get_layer_count_for_spread(_pending_target_spread_idx, total_layers) + if going_forward: + count_left = layers_at_start + count_right = total_layers - layers_at_target + else: + count_left = layers_at_target + count_right = total_layers - layers_at_start + + var L_start_is_thin = (layers_at_start == 0) + var L_target_is_thin = (layers_at_target == 0) + if L_start_is_thin != L_target_is_thin: count_left = max(layers_at_start, layers_at_target) + + var R_start_vol = total_layers - layers_at_start + var R_target_vol = total_layers - layers_at_target + var R_start_is_thin = (R_start_vol == 0) + var R_target_is_thin = (R_target_vol == 0) + if R_start_is_thin != R_target_is_thin: count_right = max(R_start_vol, R_target_vol) + else: + count_left = _get_layer_count_for_spread(visual_spread, total_layers) + count_right = total_layers - count_left + + var force_hide_left = false + var force_hide_right = false + if _stack_scale_left <= 0.001: force_hide_left = true + if _stack_scale_right <= 0.001: force_hide_right = true + if _force_hide_vol_left: force_hide_left = true + if _force_hide_vol_right: force_hide_right = true + + var left_threshold_idx = total_layers - count_left + var right_threshold_idx = total_layers - count_right + + for i in range(total_layers): + var layer = _volume_root.get_child(i) + + var depth_multiplier = float(total_layers - i) + + var base_off_x = current_step.x * depth_multiplier + var base_off_y = (current_step.y * depth_multiplier) * y_dir + + layer.position = Vector2.ZERO + var l_node = layer.get_child(0) + var r_node = layer.get_child(1) + + var final_off_left = Vector2(-base_off_x, base_off_y) * _stack_scale_left + var final_off_right = Vector2(base_off_x, base_off_y) * _stack_scale_right + + var show_l = (i >= left_threshold_idx) + var show_r = (i >= right_threshold_idx) + + if force_hide_left: show_l = false + if force_hide_right: show_r = false + + if static_left: + l_node.position = static_left.position + final_off_left + l_node.visible = show_l + if static_right: + r_node.position = static_right.position + final_off_right + r_node.visible = show_r + + +func _get_layer_count_for_spread(spread_idx: float, total_layers: int) -> int: + if total_spreads <= 2: return 0 + var effective_total = float(total_spreads - 2) + var adjusted_idx = spread_idx - 1.0 + var real_max = max(1.0, effective_total) + var safe_spread = clamp(adjusted_idx, 0.0, real_max) + var ratio = safe_spread / real_max + return int(round(ratio * total_layers)) + + +func _update_volume_visuals(): + if not _volume_root: return + _volume_root.position = volume_stack_offset + + +# ============================================================================== +# EDITOR TOOLS & SIZING +# ============================================================================== +func _on_apply_size_pressed(val): + if not val: return + apply_size_change = false + _apply_new_size() + + +func _apply_new_size(): + print("[BookController] Rebuilding Book with size: ", target_page_size) + page_width = target_page_size.x + _update_viewports_recursive(self, target_page_size) + var w = target_page_size.x + var h = target_page_size.y + var poly_shape = PackedVector2Array([Vector2(0, -h/2.0), Vector2(w, -h/2.0), Vector2(w, h/2.0), Vector2(0, h/2.0)]) + var uv_rect = PackedVector2Array([Vector2(0, 0), Vector2(w, 0), Vector2(w, h), Vector2(0, h)]) + + if static_left: + static_left.polygon = poly_shape; static_left.uv = uv_rect; static_left.position = Vector2(-w, 0); static_left.visible = false + if static_right: + static_right.polygon = poly_shape; static_right.uv = uv_rect; static_right.position = Vector2(0, 0); static_right.visible = true + if dynamic_poly: + dynamic_poly.position = Vector2(0.0, -h / 2.0); dynamic_poly.visible = false + if dynamic_poly.has_method("rebuild"): dynamic_poly.rebuild(target_page_size) + + _build_spine() + _generate_volume_layers() + _fit_camera_to_book() + + +func _update_viewports_recursive(node: Node, new_size: Vector2): + for child in node.get_children(): + if child is SubViewport: + child.size = new_size; child.render_target_update_mode = SubViewport.UPDATE_ALWAYS + if child.get_child_count() > 0: _update_viewports_recursive(child, new_size) + + +func _fit_camera_to_book(): + if not use_internal_camera: return + var cam = get_node_or_null("Camera2D") + if not cam: return + var total_book_width = target_page_size.x * 2.0 + var total_book_height = target_page_size.y * 2.0 + var margin = 1.0 + var required_width = total_book_width * margin + var required_height = total_book_height * margin + var screen_size = get_viewport_rect().size + if screen_size == Vector2.ZERO: return + var zoom_x = screen_size.x / required_width + var zoom_y = screen_size.y / required_height + var final_zoom = min(zoom_x, zoom_y) + cam.zoom = Vector2(final_zoom, final_zoom) + + +func _build_spine(): + if _spine_poly and is_instance_valid(_spine_poly): _spine_poly.queue_free() + elif visuals_container.has_node("RuntimeSpine"): + var node = visuals_container.get_node("RuntimeSpine") + node.queue_free() + visuals_container.remove_child(node) + if spine_width <= 0: return + _spine_poly = Polygon2D.new() + _spine_poly.name = "RuntimeSpine" + _spine_poly.z_index = 15 + _spine_poly.texture = spine_texture + var hw = spine_width / 2.0 + var h = target_page_size.y + _spine_poly.polygon = PackedVector2Array([Vector2(-hw, -h/2.0), Vector2(hw, -h/2.0), Vector2(hw, h/2.0), Vector2(-hw, h/2.0)]) + if spine_texture: + var tw = spine_texture.get_width() + var th = spine_texture.get_height() + _spine_poly.uv = PackedVector2Array([Vector2(0, 0), Vector2(tw, 0), Vector2(tw, th), Vector2(0, th)]) + else: _spine_poly.color = spine_color + visuals_container.add_child(_spine_poly) + _spine_poly.position = Vector2.ZERO + if Engine.is_editor_hint(): _spine_poly.owner = get_tree().edited_scene_root + + +func _set_page_visible(node: Node2D, show: bool): + if node: node.visible = show + + +func _prepare_book_content(): + _runtime_pages = pages_paths.duplicate() + if _runtime_pages.size() > 0 and _runtime_pages.size() % 2 != 0: + _runtime_pages.append("internal://blank_page") + var num = _runtime_pages.size() + if num == 0: total_spreads = 1 + else: total_spreads = (num / 2) + 1 + + +# ============================================================================== +# INPUT +# ============================================================================== +func _inject_event_to_viewport(viewport: SubViewport, is_left: bool, event: InputEvent) -> bool: + var mouse_pos = get_global_mouse_position() + var poly = static_left if is_left else static_right + var new_mouse_pos = poly.to_local(mouse_pos) + new_mouse_pos.y += target_page_size.y / 2.0 + + var rect = Rect2(0, 0, target_page_size.x, target_page_size.y) + if not rect.has_point(new_mouse_pos): + return false + + var ev = event.duplicate_deep(Resource.DEEP_DUPLICATE_ALL) + ev.position = new_mouse_pos + ev.global_position = new_mouse_pos + + var node = viewport.gui_get_hovered_control() + + if not _active_viewports_state.get(viewport, false): + viewport.notify_mouse_entered() + _active_viewports_state[viewport] = true + + viewport.push_input(ev, true) + + if node is Control: + var cursor_shape = node.get_default_cursor_shape() + DisplayServer.cursor_set_shape.call_deferred(cursor_shape) + else: + DisplayServer.cursor_set_shape.call_deferred(DisplayServer.CursorShape.CURSOR_ARROW) + + return true + +## Clears the viewport input state. Call this when interaction stops. +func _reset_viewport_input_state() -> void: + for viewport in _active_viewports_state: + if is_instance_valid(viewport): + viewport.notify_mouse_exited() + + _active_viewports_state.clear() + + +func _input(event): + if Engine.is_editor_hint(): return + if not visible or is_animating: return + if get_viewport().is_input_handled(): return + + + var handled = false + if event is InputEventMouse or event is InputEventMouseMotion: + if is_instance_valid(_slot_1): + _slot_1.physics_object_picking = true + if _inject_event_to_viewport(_slot_1, true, event): + if event is InputEventMouseButton and _slot_1.is_input_handled(): handled = true + + if is_instance_valid(_slot_2): + _slot_2.physics_object_picking = true + if _inject_event_to_viewport(_slot_2, false, event): + if event is InputEventMouseButton and _slot_2.is_input_handled(): handled = true + + elif event is InputEventKey: + if is_instance_valid(_slot_1): + _slot_1.push_input(event.duplicate(true)) + if _slot_1.is_input_handled(): handled = true + if is_instance_valid(_slot_2): + _slot_2.push_input(event.duplicate(true)) + if _slot_2.is_input_handled(): handled = true + + if handled: + get_viewport().set_input_as_handled() + + +func _unhandled_input(event): + if Engine.is_editor_hint(): return + if not visible or is_animating: return + + if event.is_action_pressed("ui_cancel") and close_condition == CloseCondition.ON_CANCEL_INPUT: + _perform_close_action() + get_viewport().set_input_as_handled() + return + + if event.is_action_pressed("ui_right"): next_page(); get_viewport().set_input_as_handled() + elif event.is_action_pressed("ui_left"): prev_page(); get_viewport().set_input_as_handled() + + if event is InputEventMouseButton and event.pressed and event.button_index == MOUSE_BUTTON_LEFT: + var local_pos = visuals_container.get_local_mouse_position() + local_pos.y /= visuals_container.scale.y + if local_pos.x > -page_width/2.0: next_page(); get_viewport().set_input_as_handled() + else: prev_page(); get_viewport().set_input_as_handled() + + +func next_page(): + if is_animating or current_spread >= total_spreads: return + _start_animation(true) + + +func prev_page(): + if is_animating or current_spread <= -1: return + _start_animation(false) + + +func _pageflip_set_input_enabled(give_control_to_book: bool): + set_process_unhandled_input(give_control_to_book) + if _slot_1.get_child_count() > 0: + var node = _slot_1.get_child(-1) + if node.has_meta("_pageflip_node") and node.has_signal("manage_pageflip"): + node.set_process_input(not give_control_to_book) + node.set_process_unhandled_input(not give_control_to_book) + _active_interactive_is_left = not give_control_to_book + if _slot_2.get_child_count() > 0: + var node = _slot_2.get_child(-1) + if node.has_meta("_pageflip_node") and node.has_signal("manage_pageflip"): + node.set_process_input(not give_control_to_book) + node.set_process_unhandled_input(not give_control_to_book) + _active_interactive_is_right = not give_control_to_book + + +## Internal function that handles the actual jump logic using specific spread indices. +func _go_to_page(target_spread_idx: int) -> void: + if is_animating: return + + if target_spread_idx == current_spread: + return + + var forward = target_spread_idx > current_spread + + _pageflip_set_input_enabled(true) + + _is_jumping = true + _jump_target_spread = target_spread_idx + + _start_animation(forward) + + +## API to jump to a specific page or cover. +## [param page_num]: The 1-based page number (1 = first texture in pages_paths). +## [param target]: Specifies if the target is a content page or a cover. +func go_to_page(page_num: int = 1, target: JumpTarget = JumpTarget.CONTENT_PAGE) -> void: + if is_animating: return + + var target_spread_idx: int = 0 + + match target: + JumpTarget.FRONT_COVER: + target_spread_idx = -1 + JumpTarget.BACK_COVER: + target_spread_idx = total_spreads + JumpTarget.CONTENT_PAGE: + var safe_page = max(1, page_num) + target_spread_idx = int(safe_page / 2.0) + + target_spread_idx = clampi(target_spread_idx, 0, total_spreads - 1) + + _go_to_page(target_spread_idx) + + +## start from the current visual state and end at the cover. +func force_close_book(to_front_cover: bool): + if is_animating: return + _pageflip_set_input_enabled(true) + + _is_force_closing = true + + if to_front_cover: + # To Front Cover = Closing Backwards (Right to Left) + _start_animation(false) + else: + # To Back Cover = Closing Forwards (Left to Right) + _start_animation(true) + + +# ============================================================================== +# ANIMATION LOGIC +# ============================================================================== +func _set_flying_slots_active(is_active: bool) -> void: + var mode = SubViewport.UPDATE_ALWAYS if is_active else SubViewport.UPDATE_DISABLED + + if _slot_3: _slot_3.render_target_update_mode = mode + if _slot_4: _slot_4.render_target_update_mode = mode + + +func _start_animation(forward: bool) -> void: + started_page_flip_animation.emit() + is_animating = true + going_forward = forward + _set_flying_slots_active(true) + + var is_rigid_motion = false + var use_tween = false + var closing_to_back = false + var closing_to_front = false + var target_is_closed = false + + var target_spread_idx = 0 + + if _is_force_closing: + if forward: # Closing to Back + target_spread_idx = total_spreads + is_rigid_motion = covers_are_rigid + use_tween = true + is_book_open = false + closing_to_back = true + target_is_closed = true + else: # Closing to Front + target_spread_idx = -1 + is_rigid_motion = covers_are_rigid + use_tween = true + is_book_open = false + closing_to_front = true + target_is_closed = true + elif _is_jumping: + target_spread_idx = _jump_target_spread + if target_spread_idx == -1: + is_rigid_motion = covers_are_rigid + use_tween = true + is_book_open = false + closing_to_front = true + target_is_closed = true + elif target_spread_idx == total_spreads: + is_rigid_motion = covers_are_rigid + use_tween = true + is_book_open = false + closing_to_back = true + target_is_closed = true + else: + is_rigid_motion = false + use_tween = false + is_book_open = true + target_is_closed = false + else: + target_spread_idx = current_spread + 1 if forward else current_spread - 1 + + if forward: + if current_spread == -1: + is_rigid_motion = covers_are_rigid + use_tween = true + is_book_open = true + target_is_closed = false + elif current_spread == total_spreads - 1: + is_rigid_motion = covers_are_rigid + use_tween = true + is_book_open = false + closing_to_back = true + target_is_closed = true + else: + if current_spread == total_spreads: + is_rigid_motion = covers_are_rigid + use_tween = true + is_book_open = true + target_is_closed = false + elif current_spread == 0: + is_rigid_motion = covers_are_rigid + use_tween = true + is_book_open = false + closing_to_front = true + target_is_closed = true + + _pending_target_spread_idx = target_spread_idx + + _force_hide_vol_left = false + _force_hide_vol_right = false + if target_is_closed and is_rigid_motion: + if forward: + _force_hide_vol_right = true + else: + _force_hide_vol_left = true + + _is_page_flying = true + _flying_from_right = forward + _visual_spread_index = float(current_spread) + + # --- SLOT PRE-CONFIGURATION --- + var idx_static_left = -999 + var idx_static_right = -999 + var idx_anim_a = -999 + var idx_anim_b = -999 + + if _is_force_closing: + if forward: + idx_static_left = _get_page_index_for_spread(current_spread, true) + idx_static_right = -999 + idx_anim_a = _get_page_index_for_spread(current_spread, false) + idx_anim_b = -103 + else: + idx_static_right = _get_page_index_for_spread(current_spread, false) + idx_static_left = -999 + idx_anim_a = _get_page_index_for_spread(current_spread, true) + idx_anim_b = -100 + elif _is_jumping: + if forward: + idx_static_left = _get_page_index_for_spread(current_spread, true) + idx_static_right = _get_page_index_for_spread(target_spread_idx, false) + idx_anim_a = _get_page_index_for_spread(current_spread, false) + idx_anim_b = _get_page_index_for_spread(target_spread_idx, true) + else: + idx_static_left = _get_page_index_for_spread(target_spread_idx, true) + idx_static_right = _get_page_index_for_spread(current_spread, false) + idx_anim_a = _get_page_index_for_spread(current_spread, true) + idx_anim_b = _get_page_index_for_spread(target_spread_idx, false) + else: + if forward: + idx_static_left = _get_page_index_for_spread(current_spread, true) + idx_static_right = _get_page_index_for_spread(target_spread_idx, false) + idx_anim_a = _get_page_index_for_spread(current_spread, false) + idx_anim_b = _get_page_index_for_spread(target_spread_idx, true) + else: + idx_static_left = _get_page_index_for_spread(target_spread_idx, true) + idx_static_right = _get_page_index_for_spread(current_spread, false) + idx_anim_a = _get_page_index_for_spread(current_spread, true) + idx_anim_b = _get_page_index_for_spread(target_spread_idx, false) + + _update_slot_content(_slot_1, idx_static_left) + _update_slot_content(_slot_2, idx_static_right) + _update_slot_content(_slot_3, idx_anim_a) + _update_slot_content(_slot_4, idx_anim_b) + + static_left.texture = _slot_1.get_texture() + static_right.texture = _slot_2.get_texture() + + var tex_front = _slot_3.get_texture() + var tex_back = _slot_4.get_texture() + + dynamic_poly.texture = tex_back + + if dynamic_poly.material is ShaderMaterial: + # Reset shader params immediately to avoid visual glitches + dynamic_poly.material.set_shader_parameter("shadow_intensity", 0.0) + dynamic_poly.material.set_shader_parameter("max_shadow_spread", 0.0) + + var shadow_tex = dynamic_poly.get("shadow_gradient") + if shadow_tex: + dynamic_poly.material.set_shader_parameter("spine_shadow_gradient", shadow_tex) + + dynamic_poly.material.set_shader_parameter("is_backward", not forward) + if forward: + dynamic_poly.material.set_shader_parameter("front_texture", tex_front) + dynamic_poly.material.set_shader_parameter("back_texture", tex_back) + else: + dynamic_poly.material.set_shader_parameter("front_texture", tex_back) + dynamic_poly.material.set_shader_parameter("back_texture", tex_front) + + if closing_to_back: + _set_page_visible.call_deferred(static_right, false) + elif closing_to_front: + _set_page_visible.call_deferred(static_left, false) + + var base_anim_name = "turn_rigid_page" if is_rigid_motion else "turn_flexible_page" + var final_anim_name = base_anim_name if forward else base_anim_name + "_mirror" + + var anim_len = 1.0 + if anim_player.has_animation(final_anim_name): + anim_len = anim_player.get_animation(final_anim_name).length + anim_player.current_animation = final_anim_name + anim_player.seek(0.0, true) + + _set_page_visible.call_deferred(dynamic_poly, true) + dynamic_poly.z_index = 10 + _update_stack_direct(_current_expansion_factor, float(current_spread)) + + await RenderingServer.frame_post_draw + + var actual_speed = flip_speed_scale if flip_speed_scale > 0.0 else 1.0 + anim_player.speed_scale = actual_speed + var motion_duration = anim_len / actual_speed + var land_time = max(0.0, motion_duration - landing_overlap) + get_tree().create_timer(land_time).timeout.connect(_on_page_landed_early) + + var start_exp = _current_expansion_factor + var end_exp = 1.0 if target_is_closed else 0.0 + var tween = create_tween().set_trans(Tween.TRANS_CUBIC).set_ease(Tween.EASE_IN_OUT).set_parallel(true) + var half_duration = motion_duration * 0.5 + + var overlap_factor = 0.8 + var delay_time = half_duration * overlap_factor + var entry_duration = motion_duration - delay_time + + # --- PAGE SHADER SHADOW ANIMATION (TWEEN) --- + # We create a separate sequential tween for the shadow "pop & fade" effect + if dynamic_poly.material is ShaderMaterial and not is_rigid_motion: + var target_spread = dynamic_poly.get("face_shadow_spread") + if target_spread == null: target_spread = 0.5 + + #var shadow_tween = create_tween().set_trans(Tween.TRANS_CUBIC).set_ease(Tween.EASE_OUT) + ## Phase 1: Expand Shadow (0 -> Peak) + #shadow_tween.tween_property(dynamic_poly.material, "shader_parameter/shadow_intensity", 0.65, half_duration) + #shadow_tween.parallel().tween_property(dynamic_poly.material, "shader_parameter/max_shadow_spread", target_spread, half_duration).set_trans(Tween.TRANS_CUBIC).set_ease(Tween.EASE_OUT) + ## Phase 2: Contract Shadow (Peak -> 0) + #var d = half_duration * 0.8 + #shadow_tween.set_ease(Tween.EASE_IN) + #shadow_tween.tween_property(dynamic_poly.material, "shadow_parameter/shadow_intensity", 0.0, d) + #shadow_tween.parallel().tween_property(dynamic_poly.material, "shader_parameter/max_shadow_spread", 0.0, d).set_trans(Tween.TRANS_SINE) + dynamic_poly.material.set_shader_parameter("shadow_intensity", 0.0) + var start_thin_L = (current_spread <= 1) + var end_thin_L = (target_spread_idx <= 1) + + if start_thin_L and not end_thin_L: + _stack_scale_left = 0.0 + tween.tween_property(self, "_stack_scale_left", 1.0, entry_duration).set_delay(delay_time).set_trans(Tween.TRANS_QUAD).set_ease(Tween.EASE_OUT) + elif not start_thin_L and end_thin_L: + _stack_scale_left = 1.0 + tween.tween_property(self, "_stack_scale_left", 0.0, half_duration * 0.8) + elif start_thin_L and end_thin_L: + _stack_scale_left = 0.0 + else: + _stack_scale_left = 1.0 + + var start_thin_R = (current_spread >= total_spreads - 2) + var end_thin_R = (target_spread_idx >= total_spreads - 2) + + if start_thin_R and not end_thin_R: + _stack_scale_right = 0.0 + tween.tween_property(self, "_stack_scale_right", 1.0, entry_duration).set_delay(delay_time).set_trans(Tween.TRANS_QUAD).set_ease(Tween.EASE_OUT) + elif not start_thin_R and end_thin_R: + _stack_scale_right = 1.0 + tween.tween_property(self, "_stack_scale_right", 0.0, half_duration * 0.8) + elif start_thin_R and end_thin_R: + _stack_scale_right = 0.0 + else: + _stack_scale_right = 1.0 + + if use_tween: + var compensation_offset = _get_compensation_offset(target_is_closed, closing_to_back) + var base_offset = compensation_offset - Vector2(target_page_size.x / 2, 0.0) + _animate_container_transform(target_is_closed, closing_to_back, motion_duration) + if use_internal_camera: + var screen_center = _get_screen_center() + var final_pos = screen_center + base_offset + tween.tween_property(visuals_container, "global_position", final_pos, motion_duration) + else: + tween.tween_property(visuals_container, "position", base_offset, motion_duration) + + tween.tween_method(_tween_expansion_only.bind(), start_exp, end_exp, motion_duration) + + anim_player.play(final_anim_name) + + if is_rigid_motion: + var trigger_time = max(0.0, motion_duration - impact_sync_offset) + get_tree().create_timer(trigger_time).timeout.connect(func(): _play_sound(sfx_book_impact)) + else: + _play_sound(sfx_page_flip) + + +func _on_page_landed_early(): + _is_page_flying = false + _visual_spread_index = float(_pending_target_spread_idx) + _update_stack_direct(_current_expansion_factor, _visual_spread_index) + + +# ============================================================================== +# PROCESS +# ============================================================================== +func _process(_delta): + if visuals_container and is_animating: + _update_stack_direct(_current_expansion_factor, _visual_spread_index) + _update_volume_visuals() + + +func _get_screen_center() -> Vector2: + if use_internal_camera: + var cam = get_viewport().get_camera_2d() + if cam: return cam.get_screen_center_position() + + # Se non usiamo la camera, torniamo la nostra global_position per non distaccarci dalla UI + return global_position + +func _get_compensation_offset(is_closed: bool, is_back: bool) -> Vector2: + var target_local_x = 0.0 + if is_closed: + if is_back: target_local_x = -page_width + else: target_local_x = 0.0 + else: target_local_x = -page_width * 0.5 + var target_vec = Vector2(target_local_x, 0) + var t_scale = closed_scale if is_closed else open_scale + var t_rot = closed_rotation if is_closed else open_rotation + if is_closed and is_back: t_rot *= -1.0 + target_vec *= t_scale + target_vec = target_vec.rotated(deg_to_rad(t_rot)) + return -target_vec + + +func _animate_container_transform(target_is_closed: bool, is_back: bool, duration: float): + if not visuals_container: return + var t_scale = closed_scale if target_is_closed else open_scale + var t_skew = closed_skew if target_is_closed else open_skew + var t_rot = closed_rotation if target_is_closed else open_rotation + if target_is_closed and is_back: t_skew *= -1.0; t_rot *= -1.0 + if duration <= 0.0: + visuals_container.scale = t_scale; visuals_container.skew = t_skew; visuals_container.rotation = deg_to_rad(t_rot) + else: + var tween = create_tween().set_parallel(true).set_trans(Tween.TRANS_CUBIC).set_ease(Tween.EASE_IN_OUT) + tween.tween_property(visuals_container, "scale", t_scale, duration) + tween.tween_property(visuals_container, "skew", t_skew, duration) + tween.tween_property(visuals_container, "rotation", deg_to_rad(t_rot), duration) + + +func _play_sound(stream: AudioStream): + if not audio_player or not stream: return + audio_player.stream = stream; audio_player.pitch_scale = randf_range(0.95, 1.05); audio_player.play() + + +# ============================================================================== +# CORE SIGNALS +# ============================================================================== +func _on_midpoint_signal(): + # Shader handles visual flipping now. + pass + + +func _on_animation_finished(_anim_name: String): + _set_page_visible(dynamic_poly, false) + _set_flying_slots_active(false) + dynamic_poly.z_index = 10 + + _force_hide_vol_left = false; _force_hide_vol_right = false + _is_page_flying = false + + if _is_force_closing: + _is_force_closing = false + if going_forward: current_spread = total_spreads + else: current_spread = -1 + elif _is_jumping: + _is_jumping = false + current_spread = _jump_target_spread + else: + if going_forward and current_spread == -1: current_spread = 0 + elif going_forward and current_spread == total_spreads - 1: current_spread = total_spreads + elif !going_forward and current_spread == total_spreads: current_spread = total_spreads - 1 + elif !going_forward and current_spread == 0: current_spread = -1 + else: + if going_forward: current_spread += 1 + else: current_spread -= 1 + + _update_static_visuals_immediate() + is_animating = false + _visual_spread_index = float(current_spread) + _update_stack_direct(_current_expansion_factor, _visual_spread_index) + _update_volume_visuals() + + if current_spread == total_spreads: + if close_condition == CloseCondition.CLOSE_FROM_BACK or close_condition == CloseCondition.ANY_CLOSE: + _perform_close_action() + return + if current_spread == -1: + if close_condition == CloseCondition.CLOSE_FROM_FRONT or close_condition == CloseCondition.ANY_CLOSE: + _perform_close_action() + return + _check_scene_activation.call_deferred() + ended_page_flip_animation.emit() + + +func _perform_close_action(): + if close_behavior == CloseBehavior.DESTROY_BOOK: queue_free() + elif close_behavior == CloseBehavior.CHANGE_SCENE: + if target_scene_on_close != "": get_tree().change_scene_to_file(target_scene_on_close) + + +func _check_scene_activation() -> void: + var scene_found = false + if _slot_1.get_child_count() > 0: + var node = _slot_1.get_child(-1) + if node.has_meta("_pageflip_node") and node.has_signal("manage_pageflip"): + node.emit_signal("manage_pageflip", false) + node.set_process_input(true); node.set_process_unhandled_input(true); scene_found = true + if _slot_2.get_child_count() > 0: + var node = _slot_2.get_child(-1) + if node.has_meta("_pageflip_node") and node.has_signal("manage_pageflip"): + node.emit_signal("manage_pageflip", false) + node.set_process_input(true); node.set_process_unhandled_input(true); scene_found = true + if not scene_found: _pageflip_set_input_enabled(true) + + +# ============================================================================== +# ASSET LOADING & SLOT MANAGEMENT +# ============================================================================== +func _get_page_index_for_spread(spread_idx: int, is_left: bool) -> int: + if spread_idx == -1: return -999 if is_left else -100 # Front Cover Out + if spread_idx == total_spreads: return -103 if is_left else -999 # Back Cover Out + if spread_idx == 0: + if is_left: return -101 # Front Cover In + if _runtime_pages.size() == 0: return -102 # Back Cover In + return 0 # Page 1 + if is_left: return (spread_idx * 2) - 1 + else: + var content_idx = spread_idx * 2 + if content_idx >= _runtime_pages.size(): return -102 # Back Cover In + return content_idx + + +func _update_slot_content(slot: SubViewport, content_index: int) -> void: + if not slot: return + for child in slot.get_children(): + if child is TextureRect: child.queue_free() + else: slot.remove_child(child) + var resource_path = "" + var cover_tex: Texture2D = null + if content_index == -100: cover_tex = tex_cover_front_out + elif content_index == -101: cover_tex = tex_cover_front_in + elif content_index == -102: cover_tex = tex_cover_back_in + elif content_index == -103: cover_tex = tex_cover_back_out + elif content_index >= 0 and content_index < _runtime_pages.size(): resource_path = _runtime_pages[content_index] + + if cover_tex: _setup_texture_in_slot(slot, cover_tex) + elif resource_path != "": + if resource_path == "internal://blank_page": _setup_texture_in_slot(slot, blank_page_texture) + elif ResourceLoader.exists(resource_path): + var res = load(resource_path) + if res is PackedScene: _setup_scene_in_slot(slot, res, content_index) + elif res is Texture2D: _setup_texture_in_slot(slot, res) + else: _setup_texture_in_slot(slot, blank_page_texture) + else: _setup_texture_in_slot(slot, blank_page_texture) + + +func _setup_texture_in_slot(slot: SubViewport, tex: Texture2D): + if enable_composite_pages: _add_composite_blank_bg(slot) + if not tex: + tex = blank_page_texture + if not tex: return + var rect = TextureRect.new() + rect.texture = tex + rect.expand_mode = TextureRect.EXPAND_IGNORE_SIZE + rect.stretch_mode = page_stretch_mode as TextureRect.StretchMode + rect.size = slot.size + rect.position = Vector2.ZERO + slot.add_child(rect) + + +func _setup_scene_in_slot(slot: SubViewport, scene_pkg: PackedScene, texture_index: int): + if enable_composite_pages: _add_composite_blank_bg(slot) + var cache_key = scene_pkg.get_path() + "#" + str(texture_index) + var instance + if not cache_key in _scene_cache: + instance = scene_pkg.instantiate() + instance.set_meta("_pageflip_node", self) + instance.position = Vector2.ZERO + if instance.has_signal("manage_pageflip"): instance.connect("manage_pageflip", _pageflip_set_input_enabled) + slot.add_child(instance) + _scene_cache[cache_key] = instance + else: + instance = _scene_cache[cache_key] + if instance.is_inside_tree(): instance.reparent(slot) + else: slot.add_child(instance) + instance.set_process_input(false); instance.set_process_unhandled_input(false) + + +func _add_composite_blank_bg(slot: SubViewport): + if not blank_page_texture: return + var bg = TextureRect.new() + bg.texture = blank_page_texture + bg.expand_mode = TextureRect.EXPAND_IGNORE_SIZE + bg.stretch_mode = page_stretch_mode as TextureRect.StretchMode + bg.size = slot.size + bg.position = Vector2.ZERO + slot.add_child(bg) + + +func _update_static_visuals_immediate(): + var idx_l = _get_page_index_for_spread(current_spread, true) + var idx_r = _get_page_index_for_spread(current_spread, false) + _update_slot_content(_slot_1, idx_l) + _update_slot_content(_slot_2, idx_r) + static_left.texture = _slot_1.get_texture() + static_right.texture = _slot_2.get_texture() + var valid_l = (idx_l != -999) + var valid_r = (idx_r != -999) + _set_page_visible(static_left, valid_l) + _set_page_visible(static_right, valid_r) diff --git a/addons/PageFlip/page_flip.gd.uid b/addons/PageFlip/page_flip.gd.uid new file mode 100644 index 0000000..7b02f96 --- /dev/null +++ b/addons/PageFlip/page_flip.gd.uid @@ -0,0 +1 @@ +uid://ctw83iqgqxjjt diff --git a/addons/PageFlip/page_flip.tscn b/addons/PageFlip/page_flip.tscn new file mode 100644 index 0000000..ca066b0 --- /dev/null +++ b/addons/PageFlip/page_flip.tscn @@ -0,0 +1,1980 @@ +[gd_scene load_steps=17 format=3 uid="uid://btnw7ojjf5s3s"] + +[ext_resource type="Script" uid="uid://ctw83iqgqxjjt" path="res://addons/PageFlip/page_flip.gd" id="1_h83wc"] +[ext_resource type="Script" uid="uid://ce5ib2f4qff24" path="res://addons/PageFlip/page_rigger.gd" id="1_jnpse"] +[ext_resource type="AudioStream" uid="uid://bhitebdghyhua" path="res://addons/PageFlip/Assets/book_impact.ogg" id="2_7r0mx"] +[ext_resource type="Texture2D" uid="uid://cen51wqc15b14" path="res://addons/PageFlip/Assets/blank_page.png" id="2_71hrr"] +[ext_resource type="Texture2D" uid="uid://cit41jypw2sy1" path="res://addons/PageFlip/Assets/spine.png" id="2_c7gpb"] +[ext_resource type="Texture2D" uid="uid://dbdwbowx32d3v" path="res://addons/PageFlip/Assets/front.png" id="2_gkj0d"] +[ext_resource type="AudioStream" uid="uid://bylfc3b5pmbij" path="res://addons/PageFlip/Assets/page_flip.ogg" id="3_c7gpb"] +[ext_resource type="Texture2D" uid="uid://dt1tiecgw5rip" path="res://addons/PageFlip/Assets/interior.png" id="3_hqhik"] +[ext_resource type="Texture2D" uid="uid://bjowpx1ap4uxt" path="res://addons/PageFlip/Assets/back.png" id="4_7r0mx"] + +[sub_resource type="Shader" id="Shader_cuh5i"] +code = " + shader_type canvas_item; + uniform bool flip_h = false; + void fragment() { + vec2 uv = UV; + if (flip_h) { uv.x = 1.0 - uv.x; } + COLOR = texture(TEXTURE, uv); + } + " + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_gkj0d"] +shader = SubResource("Shader_cuh5i") +shader_parameter/flip_h = true + +[sub_resource type="ViewportTexture" id="ViewportTexture_7r0mx"] +viewport_path = NodePath("Viewports/Covers/CoverFrontIn") + +[sub_resource type="Animation" id="Animation_cuh5i"] +length = 0.001 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Visual/DynamicFlipPoly:texture") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [SubResource("ViewportTexture_7r0mx")] +} + +[sub_resource type="Animation" id="Animation_71hrr"] +length = 0.7 +step = 0.01 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Visual/DynamicFlipPoly:z_index") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.35, 0.595), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [10, 25, 10] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("Visual/DynamicFlipPoly/AutoShadow:scale") +tracks/1/interp = 2 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0, 0.35, 0.7), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(0.01, 1), Vector2(-1, 1)] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("Visual/DynamicFlipPoly/AutoShadow:modulate") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0, 0.15, 0.35, 0.693), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 0, +"values": [Color(0, 0, 0, 0), Color(0, 0, 0, 0.3), Color(0, 0, 0, 0.15), Color(0, 0, 0, 0)] +} +tracks/3/type = "value" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_0:rotation_degrees") +tracks/3/interp = 2 +tracks/3/loop_wrap = true +tracks/3/keys = { +"times": PackedFloat32Array(0, 0.105, 0.35, 0.595, 0.7), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, -15.0, -90.0, -166.5, -179.9] +} +tracks/4/type = "value" +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_0/Bone_1_0:rotation_degrees") +tracks/4/interp = 2 +tracks/4/loop_wrap = true +tracks/4/keys = { +"times": PackedFloat32Array(0, 0.105, 0.35, 0.595, 0.7), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, -0.20191963271432253, 0.0, -0.21544376100323298, 0.0] +} +tracks/5/type = "value" +tracks/5/imported = false +tracks/5/enabled = true +tracks/5/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_0/Bone_1_0/Bone_2_0:rotation_degrees") +tracks/5/interp = 2 +tracks/5/loop_wrap = true +tracks/5/keys = { +"times": PackedFloat32Array(0, 0.105, 0.35, 0.595, 0.7), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, -1.2242117296351744, 0.0, -1.3062067108156283, 0.0] +} +tracks/6/type = "value" +tracks/6/imported = false +tracks/6/enabled = true +tracks/6/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_0/Bone_1_0/Bone_2_0/Bone_3_0:rotation_degrees") +tracks/6/interp = 2 +tracks/6/loop_wrap = true +tracks/6/keys = { +"times": PackedFloat32Array(0, 0.105, 0.35, 0.595, 0.7), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, -3.5131266763429005, 0.0, -3.7484280941761794, 0.0] +} +tracks/7/type = "value" +tracks/7/imported = false +tracks/7/enabled = true +tracks/7/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_0/Bone_1_0/Bone_2_0/Bone_3_0/Bone_4_0:rotation_degrees") +tracks/7/interp = 2 +tracks/7/loop_wrap = true +tracks/7/keys = { +"times": PackedFloat32Array(0, 0.105, 0.35, 0.595, 0.7), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, -7.42223199809753, 0.0, -7.919356603481219, 0.0] +} +tracks/8/type = "value" +tracks/8/imported = false +tracks/8/enabled = true +tracks/8/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_0/Bone_1_0/Bone_2_0/Bone_3_0/Bone_4_0/Bone_5_0:rotation_degrees") +tracks/8/interp = 2 +tracks/8/loop_wrap = true +tracks/8/keys = { +"times": PackedFloat32Array(0, 0.105, 0.35, 0.595, 0.7), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, -13.258688239479119, 0.0, -14.146725714007788, 0.0] +} +tracks/9/type = "value" +tracks/9/imported = false +tracks/9/enabled = true +tracks/9/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_0/Bone_1_0/Bone_2_0/Bone_3_0/Bone_4_0/Bone_5_0/Bone_6_0:rotation_degrees") +tracks/9/interp = 2 +tracks/9/loop_wrap = true +tracks/9/keys = { +"times": PackedFloat32Array(0, 0.105, 0.35, 0.595, 0.7), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, -21.299617214330194, 0.0, -22.726218242863336, 0.0] +} +tracks/10/type = "value" +tracks/10/imported = false +tracks/10/enabled = true +tracks/10/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_0/Bone_1_0/Bone_2_0/Bone_3_0/Bone_4_0/Bone_5_0/Bone_6_0/Bone_7_0:rotation_degrees") +tracks/10/interp = 2 +tracks/10/loop_wrap = true +tracks/10/keys = { +"times": PackedFloat32Array(0, 0.105, 0.35, 0.595, 0.7), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, -31.80046362068126, 0.0, -33.93038800629756, 0.0] +} +tracks/11/type = "value" +tracks/11/imported = false +tracks/11/enabled = true +tracks/11/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_0/Bone_1_0/Bone_2_0/Bone_3_0/Bone_4_0/Bone_5_0/Bone_6_0/Bone_7_0/Bone_8_0:rotation_degrees") +tracks/11/interp = 2 +tracks/11/loop_wrap = true +tracks/11/keys = { +"times": PackedFloat32Array(0, 0.105, 0.35, 0.595, 0.7), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, -45.0, 0.0, -48.01400000000001, 0.0] +} +tracks/12/type = "value" +tracks/12/imported = false +tracks/12/enabled = true +tracks/12/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_1:rotation_degrees") +tracks/12/interp = 2 +tracks/12/loop_wrap = true +tracks/12/keys = { +"times": PackedFloat32Array(0, 0.119, 0.35, 0.581, 0.7), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, -12.0, -90.0, -166.5, -179.9] +} +tracks/13/type = "value" +tracks/13/imported = false +tracks/13/enabled = true +tracks/13/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_1/Bone_1_1:rotation_degrees") +tracks/13/interp = 2 +tracks/13/loop_wrap = true +tracks/13/keys = { +"times": PackedFloat32Array(0, 0.119, 0.35, 0.581, 0.7), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, -0.16153570617145802, 0.0, -0.1723550088025864, 0.0] +} +tracks/14/type = "value" +tracks/14/imported = false +tracks/14/enabled = true +tracks/14/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_1/Bone_1_1/Bone_2_1:rotation_degrees") +tracks/14/interp = 2 +tracks/14/loop_wrap = true +tracks/14/keys = { +"times": PackedFloat32Array(0, 0.119, 0.35, 0.581, 0.7), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, -0.9793693837081395, 0.0, -1.0449653686525027, 0.0] +} +tracks/15/type = "value" +tracks/15/imported = false +tracks/15/enabled = true +tracks/15/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_1/Bone_1_1/Bone_2_1/Bone_3_1:rotation_degrees") +tracks/15/interp = 2 +tracks/15/loop_wrap = true +tracks/15/keys = { +"times": PackedFloat32Array(0, 0.119, 0.35, 0.581, 0.7), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, -2.8105013410743203, 0.0, -2.9987424753409435, 0.0] +} +tracks/16/type = "value" +tracks/16/imported = false +tracks/16/enabled = true +tracks/16/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_1/Bone_1_1/Bone_2_1/Bone_3_1/Bone_4_1:rotation_degrees") +tracks/16/interp = 2 +tracks/16/loop_wrap = true +tracks/16/keys = { +"times": PackedFloat32Array(0, 0.119, 0.35, 0.581, 0.7), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, -5.937785598478024, 0.0, -6.335485282784975, 0.0] +} +tracks/17/type = "value" +tracks/17/imported = false +tracks/17/enabled = true +tracks/17/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_1/Bone_1_1/Bone_2_1/Bone_3_1/Bone_4_1/Bone_5_1:rotation_degrees") +tracks/17/interp = 2 +tracks/17/loop_wrap = true +tracks/17/keys = { +"times": PackedFloat32Array(0, 0.119, 0.35, 0.581, 0.7), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, -10.606950591583294, 0.0, -11.31738057120623, 0.0] +} +tracks/18/type = "value" +tracks/18/imported = false +tracks/18/enabled = true +tracks/18/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_1/Bone_1_1/Bone_2_1/Bone_3_1/Bone_4_1/Bone_5_1/Bone_6_1:rotation_degrees") +tracks/18/interp = 2 +tracks/18/loop_wrap = true +tracks/18/keys = { +"times": PackedFloat32Array(0, 0.119, 0.35, 0.581, 0.7), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, -17.039693771464155, 0.0, -18.180974594290667, 0.0] +} +tracks/19/type = "value" +tracks/19/imported = false +tracks/19/enabled = true +tracks/19/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_1/Bone_1_1/Bone_2_1/Bone_3_1/Bone_4_1/Bone_5_1/Bone_6_1/Bone_7_1:rotation_degrees") +tracks/19/interp = 2 +tracks/19/loop_wrap = true +tracks/19/keys = { +"times": PackedFloat32Array(0, 0.119, 0.35, 0.581, 0.7), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, -25.44037089654501, 0.0, -27.144310405038052, 0.0] +} +tracks/20/type = "value" +tracks/20/imported = false +tracks/20/enabled = true +tracks/20/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_1/Bone_1_1/Bone_2_1/Bone_3_1/Bone_4_1/Bone_5_1/Bone_6_1/Bone_7_1/Bone_8_1:rotation_degrees") +tracks/20/interp = 2 +tracks/20/loop_wrap = true +tracks/20/keys = { +"times": PackedFloat32Array(0, 0.119, 0.35, 0.581, 0.7), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, -36.0, 0.0, -38.41120000000001, 0.0] +} +tracks/21/type = "value" +tracks/21/imported = false +tracks/21/enabled = true +tracks/21/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_2:rotation_degrees") +tracks/21/interp = 2 +tracks/21/loop_wrap = true +tracks/21/keys = { +"times": PackedFloat32Array(0, 0.133, 0.35, 0.567, 0.7), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, -9.0, -90.0, -166.5, -179.9] +} +tracks/22/type = "value" +tracks/22/imported = false +tracks/22/enabled = true +tracks/22/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_2/Bone_1_2:rotation_degrees") +tracks/22/interp = 2 +tracks/22/loop_wrap = true +tracks/22/keys = { +"times": PackedFloat32Array(0, 0.133, 0.35, 0.567, 0.7), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, -0.12115177962859353, 0.0, -0.1292662566019398, 0.0] +} +tracks/23/type = "value" +tracks/23/imported = false +tracks/23/enabled = true +tracks/23/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_2/Bone_1_2/Bone_2_2:rotation_degrees") +tracks/23/interp = 2 +tracks/23/loop_wrap = true +tracks/23/keys = { +"times": PackedFloat32Array(0, 0.133, 0.35, 0.567, 0.7), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, -0.7345270377811046, 0.0, -0.783724026489377, 0.0] +} +tracks/24/type = "value" +tracks/24/imported = false +tracks/24/enabled = true +tracks/24/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_2/Bone_1_2/Bone_2_2/Bone_3_2:rotation_degrees") +tracks/24/interp = 2 +tracks/24/loop_wrap = true +tracks/24/keys = { +"times": PackedFloat32Array(0, 0.133, 0.35, 0.567, 0.7), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, -2.1078760058057404, 0.0, -2.2490568565057076, 0.0] +} +tracks/25/type = "value" +tracks/25/imported = false +tracks/25/enabled = true +tracks/25/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_2/Bone_1_2/Bone_2_2/Bone_3_2/Bone_4_2:rotation_degrees") +tracks/25/interp = 2 +tracks/25/loop_wrap = true +tracks/25/keys = { +"times": PackedFloat32Array(0, 0.133, 0.35, 0.567, 0.7), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, -4.453339198858518, 0.0, -4.751613962088731, 0.0] +} +tracks/26/type = "value" +tracks/26/imported = false +tracks/26/enabled = true +tracks/26/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_2/Bone_1_2/Bone_2_2/Bone_3_2/Bone_4_2/Bone_5_2:rotation_degrees") +tracks/26/interp = 2 +tracks/26/loop_wrap = true +tracks/26/keys = { +"times": PackedFloat32Array(0, 0.133, 0.35, 0.567, 0.7), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, -7.955212943687471, 0.0, -8.488035428404674, 0.0] +} +tracks/27/type = "value" +tracks/27/imported = false +tracks/27/enabled = true +tracks/27/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_2/Bone_1_2/Bone_2_2/Bone_3_2/Bone_4_2/Bone_5_2/Bone_6_2:rotation_degrees") +tracks/27/interp = 2 +tracks/27/loop_wrap = true +tracks/27/keys = { +"times": PackedFloat32Array(0, 0.133, 0.35, 0.567, 0.7), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, -12.779770328598117, 0.0, -13.635730945718002, 0.0] +} +tracks/28/type = "value" +tracks/28/imported = false +tracks/28/enabled = true +tracks/28/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_2/Bone_1_2/Bone_2_2/Bone_3_2/Bone_4_2/Bone_5_2/Bone_6_2/Bone_7_2:rotation_degrees") +tracks/28/interp = 2 +tracks/28/loop_wrap = true +tracks/28/keys = { +"times": PackedFloat32Array(0, 0.133, 0.35, 0.567, 0.7), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, -19.080278172408757, 0.0, -20.358232803778538, 0.0] +} +tracks/29/type = "value" +tracks/29/imported = false +tracks/29/enabled = true +tracks/29/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_2/Bone_1_2/Bone_2_2/Bone_3_2/Bone_4_2/Bone_5_2/Bone_6_2/Bone_7_2/Bone_8_2:rotation_degrees") +tracks/29/interp = 2 +tracks/29/loop_wrap = true +tracks/29/keys = { +"times": PackedFloat32Array(0, 0.133, 0.35, 0.567, 0.7), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, -27.0, 0.0, -28.808400000000006, 0.0] +} +tracks/30/type = "value" +tracks/30/imported = false +tracks/30/enabled = true +tracks/30/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_3:rotation_degrees") +tracks/30/interp = 2 +tracks/30/loop_wrap = true +tracks/30/keys = { +"times": PackedFloat32Array(0, 0.147, 0.35, 0.553, 0.7), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, -6.0, -90.0, -166.5, -179.9] +} +tracks/31/type = "value" +tracks/31/imported = false +tracks/31/enabled = true +tracks/31/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_3/Bone_1_3:rotation_degrees") +tracks/31/interp = 2 +tracks/31/loop_wrap = true +tracks/31/keys = { +"times": PackedFloat32Array(0, 0.147, 0.35, 0.553, 0.7), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, -0.08076785308572901, 0.0, -0.0861775044012932, 0.0] +} +tracks/32/type = "value" +tracks/32/imported = false +tracks/32/enabled = true +tracks/32/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_3/Bone_1_3/Bone_2_3:rotation_degrees") +tracks/32/interp = 2 +tracks/32/loop_wrap = true +tracks/32/keys = { +"times": PackedFloat32Array(0, 0.147, 0.35, 0.553, 0.7), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, -0.48968469185406976, 0.0, -0.5224826843262513, 0.0] +} +tracks/33/type = "value" +tracks/33/imported = false +tracks/33/enabled = true +tracks/33/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_3/Bone_1_3/Bone_2_3/Bone_3_3:rotation_degrees") +tracks/33/interp = 2 +tracks/33/loop_wrap = true +tracks/33/keys = { +"times": PackedFloat32Array(0, 0.147, 0.35, 0.553, 0.7), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, -1.4052506705371601, 0.0, -1.4993712376704718, 0.0] +} +tracks/34/type = "value" +tracks/34/imported = false +tracks/34/enabled = true +tracks/34/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_3/Bone_1_3/Bone_2_3/Bone_3_3/Bone_4_3:rotation_degrees") +tracks/34/interp = 2 +tracks/34/loop_wrap = true +tracks/34/keys = { +"times": PackedFloat32Array(0, 0.147, 0.35, 0.553, 0.7), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, -2.968892799239012, 0.0, -3.1677426413924876, 0.0] +} +tracks/35/type = "value" +tracks/35/imported = false +tracks/35/enabled = true +tracks/35/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_3/Bone_1_3/Bone_2_3/Bone_3_3/Bone_4_3/Bone_5_3:rotation_degrees") +tracks/35/interp = 2 +tracks/35/loop_wrap = true +tracks/35/keys = { +"times": PackedFloat32Array(0, 0.147, 0.35, 0.553, 0.7), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, -5.303475295791647, 0.0, -5.658690285603115, 0.0] +} +tracks/36/type = "value" +tracks/36/imported = false +tracks/36/enabled = true +tracks/36/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_3/Bone_1_3/Bone_2_3/Bone_3_3/Bone_4_3/Bone_5_3/Bone_6_3:rotation_degrees") +tracks/36/interp = 2 +tracks/36/loop_wrap = true +tracks/36/keys = { +"times": PackedFloat32Array(0, 0.147, 0.35, 0.553, 0.7), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, -8.519846885732077, 0.0, -9.090487297145334, 0.0] +} +tracks/37/type = "value" +tracks/37/imported = false +tracks/37/enabled = true +tracks/37/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_3/Bone_1_3/Bone_2_3/Bone_3_3/Bone_4_3/Bone_5_3/Bone_6_3/Bone_7_3:rotation_degrees") +tracks/37/interp = 2 +tracks/37/loop_wrap = true +tracks/37/keys = { +"times": PackedFloat32Array(0, 0.147, 0.35, 0.553, 0.7), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, -12.720185448272504, 0.0, -13.572155202519026, 0.0] +} +tracks/38/type = "value" +tracks/38/imported = false +tracks/38/enabled = true +tracks/38/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_3/Bone_1_3/Bone_2_3/Bone_3_3/Bone_4_3/Bone_5_3/Bone_6_3/Bone_7_3/Bone_8_3:rotation_degrees") +tracks/38/interp = 2 +tracks/38/loop_wrap = true +tracks/38/keys = { +"times": PackedFloat32Array(0, 0.147, 0.35, 0.553, 0.7), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, -18.0, 0.0, -19.205600000000004, 0.0] +} +tracks/39/type = "value" +tracks/39/imported = false +tracks/39/enabled = true +tracks/39/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_4:rotation_degrees") +tracks/39/interp = 2 +tracks/39/loop_wrap = true +tracks/39/keys = { +"times": PackedFloat32Array(0, 0.161, 0.35, 0.539, 0.7), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, -2.999999999999999, -90.0, -166.5, -179.9] +} +tracks/40/type = "value" +tracks/40/imported = false +tracks/40/enabled = true +tracks/40/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_4/Bone_1_4:rotation_degrees") +tracks/40/interp = 2 +tracks/40/loop_wrap = true +tracks/40/keys = { +"times": PackedFloat32Array(0, 0.161, 0.35, 0.539, 0.7), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, -0.0403839265428645, 0.0, -0.04308875220064659, 0.0] +} +tracks/41/type = "value" +tracks/41/imported = false +tracks/41/enabled = true +tracks/41/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_4/Bone_1_4/Bone_2_4:rotation_degrees") +tracks/41/interp = 2 +tracks/41/loop_wrap = true +tracks/41/keys = { +"times": PackedFloat32Array(0, 0.161, 0.35, 0.539, 0.7), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, -0.24484234592703483, 0.0, -0.2612413421631256, 0.0] +} +tracks/42/type = "value" +tracks/42/imported = false +tracks/42/enabled = true +tracks/42/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_4/Bone_1_4/Bone_2_4/Bone_3_4:rotation_degrees") +tracks/42/interp = 2 +tracks/42/loop_wrap = true +tracks/42/keys = { +"times": PackedFloat32Array(0, 0.161, 0.35, 0.539, 0.7), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, -0.70262533526858, 0.0, -0.7496856188352357, 0.0] +} +tracks/43/type = "value" +tracks/43/imported = false +tracks/43/enabled = true +tracks/43/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_4/Bone_1_4/Bone_2_4/Bone_3_4/Bone_4_4:rotation_degrees") +tracks/43/interp = 2 +tracks/43/loop_wrap = true +tracks/43/keys = { +"times": PackedFloat32Array(0, 0.161, 0.35, 0.539, 0.7), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, -1.4844463996195056, 0.0, -1.5838713206962436, 0.0] +} +tracks/44/type = "value" +tracks/44/imported = false +tracks/44/enabled = true +tracks/44/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_4/Bone_1_4/Bone_2_4/Bone_3_4/Bone_4_4/Bone_5_4:rotation_degrees") +tracks/44/interp = 2 +tracks/44/loop_wrap = true +tracks/44/keys = { +"times": PackedFloat32Array(0, 0.161, 0.35, 0.539, 0.7), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, -2.651737647895823, 0.0, -2.8293451428015572, 0.0] +} +tracks/45/type = "value" +tracks/45/imported = false +tracks/45/enabled = true +tracks/45/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_4/Bone_1_4/Bone_2_4/Bone_3_4/Bone_4_4/Bone_5_4/Bone_6_4:rotation_degrees") +tracks/45/interp = 2 +tracks/45/loop_wrap = true +tracks/45/keys = { +"times": PackedFloat32Array(0, 0.161, 0.35, 0.539, 0.7), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, -4.259923442866038, 0.0, -4.545243648572666, 0.0] +} +tracks/46/type = "value" +tracks/46/imported = false +tracks/46/enabled = true +tracks/46/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_4/Bone_1_4/Bone_2_4/Bone_3_4/Bone_4_4/Bone_5_4/Bone_6_4/Bone_7_4:rotation_degrees") +tracks/46/interp = 2 +tracks/46/loop_wrap = true +tracks/46/keys = { +"times": PackedFloat32Array(0, 0.161, 0.35, 0.539, 0.7), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, -6.360092724136251, 0.0, -6.786077601259511, 0.0] +} +tracks/47/type = "value" +tracks/47/imported = false +tracks/47/enabled = true +tracks/47/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_4/Bone_1_4/Bone_2_4/Bone_3_4/Bone_4_4/Bone_5_4/Bone_6_4/Bone_7_4/Bone_8_4:rotation_degrees") +tracks/47/interp = 2 +tracks/47/loop_wrap = true +tracks/47/keys = { +"times": PackedFloat32Array(0, 0.161, 0.35, 0.539, 0.7), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, -8.999999999999998, 0.0, -9.6028, 0.0] +} +tracks/48/type = "value" +tracks/48/imported = false +tracks/48/enabled = true +tracks/48/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_5:rotation_degrees") +tracks/48/interp = 2 +tracks/48/loop_wrap = true +tracks/48/keys = { +"times": PackedFloat32Array(0, 0.175, 0.35, 0.525, 0.7), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, 0.0, -90.0, -166.5, -179.9] +} +tracks/49/type = "value" +tracks/49/imported = false +tracks/49/enabled = true +tracks/49/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_5/Bone_1_5:rotation_degrees") +tracks/49/interp = 2 +tracks/49/loop_wrap = true +tracks/49/keys = { +"times": PackedFloat32Array(0, 0.175, 0.35, 0.525, 0.7), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, 0.0, 0.0, 0.0, 0.0] +} +tracks/50/type = "value" +tracks/50/imported = false +tracks/50/enabled = true +tracks/50/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_5/Bone_1_5/Bone_2_5:rotation_degrees") +tracks/50/interp = 2 +tracks/50/loop_wrap = true +tracks/50/keys = { +"times": PackedFloat32Array(0, 0.175, 0.35, 0.525, 0.7), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, 0.0, 0.0, 0.0, 0.0] +} +tracks/51/type = "value" +tracks/51/imported = false +tracks/51/enabled = true +tracks/51/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_5/Bone_1_5/Bone_2_5/Bone_3_5:rotation_degrees") +tracks/51/interp = 2 +tracks/51/loop_wrap = true +tracks/51/keys = { +"times": PackedFloat32Array(0, 0.175, 0.35, 0.525, 0.7), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, 0.0, 0.0, 0.0, 0.0] +} +tracks/52/type = "value" +tracks/52/imported = false +tracks/52/enabled = true +tracks/52/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_5/Bone_1_5/Bone_2_5/Bone_3_5/Bone_4_5:rotation_degrees") +tracks/52/interp = 2 +tracks/52/loop_wrap = true +tracks/52/keys = { +"times": PackedFloat32Array(0, 0.175, 0.35, 0.525, 0.7), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, 0.0, 0.0, 0.0, 0.0] +} +tracks/53/type = "value" +tracks/53/imported = false +tracks/53/enabled = true +tracks/53/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_5/Bone_1_5/Bone_2_5/Bone_3_5/Bone_4_5/Bone_5_5:rotation_degrees") +tracks/53/interp = 2 +tracks/53/loop_wrap = true +tracks/53/keys = { +"times": PackedFloat32Array(0, 0.175, 0.35, 0.525, 0.7), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, 0.0, 0.0, 0.0, 0.0] +} +tracks/54/type = "value" +tracks/54/imported = false +tracks/54/enabled = true +tracks/54/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_5/Bone_1_5/Bone_2_5/Bone_3_5/Bone_4_5/Bone_5_5/Bone_6_5:rotation_degrees") +tracks/54/interp = 2 +tracks/54/loop_wrap = true +tracks/54/keys = { +"times": PackedFloat32Array(0, 0.175, 0.35, 0.525, 0.7), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, 0.0, 0.0, 0.0, 0.0] +} +tracks/55/type = "value" +tracks/55/imported = false +tracks/55/enabled = true +tracks/55/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_5/Bone_1_5/Bone_2_5/Bone_3_5/Bone_4_5/Bone_5_5/Bone_6_5/Bone_7_5:rotation_degrees") +tracks/55/interp = 2 +tracks/55/loop_wrap = true +tracks/55/keys = { +"times": PackedFloat32Array(0, 0.175, 0.35, 0.525, 0.7), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, 0.0, 0.0, 0.0, 0.0] +} +tracks/56/type = "value" +tracks/56/imported = false +tracks/56/enabled = true +tracks/56/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_5/Bone_1_5/Bone_2_5/Bone_3_5/Bone_4_5/Bone_5_5/Bone_6_5/Bone_7_5/Bone_8_5:rotation_degrees") +tracks/56/interp = 2 +tracks/56/loop_wrap = true +tracks/56/keys = { +"times": PackedFloat32Array(0, 0.175, 0.35, 0.525, 0.7), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, 0.0, 0.0, 0.0, 0.0] +} +tracks/57/type = "method" +tracks/57/imported = false +tracks/57/enabled = true +tracks/57/path = NodePath("Visual/DynamicFlipPoly") +tracks/57/interp = 1 +tracks/57/loop_wrap = true +tracks/57/keys = { +"times": PackedFloat32Array(0.35, 0.7), +"transitions": PackedFloat32Array(1, 1), +"values": [{ +"args": [], +"method": &"_trigger_midpoint" +}, { +"args": [], +"method": &"_trigger_end" +}] +} + +[sub_resource type="Animation" id="Animation_15rl4"] +length = 0.7 +step = 0.01 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Visual/DynamicFlipPoly:z_index") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.35, 0.595), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [10, 25, 10] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("Visual/DynamicFlipPoly/AutoShadow:scale") +tracks/1/interp = 2 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0, 0.35, 0.7), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(0.01, 1), Vector2(-1, 1)] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("Visual/DynamicFlipPoly/AutoShadow:modulate") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0, 0.15, 0.35, 0.693), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 0, +"values": [Color(0, 0, 0, 0), Color(0, 0, 0, 0.3), Color(0, 0, 0, 0.15), Color(0, 0, 0, 0)] +} +tracks/3/type = "value" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_0:rotation_degrees") +tracks/3/interp = 2 +tracks/3/loop_wrap = true +tracks/3/keys = { +"times": PackedFloat32Array(0, 0.35, 0.7), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [0.0, -90.0, -179.9] +} +tracks/4/type = "value" +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_0/Bone_1_0:rotation_degrees") +tracks/4/interp = 2 +tracks/4/loop_wrap = true +tracks/4/keys = { +"times": PackedFloat32Array(0, 0.7), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/5/type = "value" +tracks/5/imported = false +tracks/5/enabled = true +tracks/5/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_0/Bone_1_0/Bone_2_0:rotation_degrees") +tracks/5/interp = 2 +tracks/5/loop_wrap = true +tracks/5/keys = { +"times": PackedFloat32Array(0, 0.7), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/6/type = "value" +tracks/6/imported = false +tracks/6/enabled = true +tracks/6/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_0/Bone_1_0/Bone_2_0/Bone_3_0:rotation_degrees") +tracks/6/interp = 2 +tracks/6/loop_wrap = true +tracks/6/keys = { +"times": PackedFloat32Array(0, 0.7), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/7/type = "value" +tracks/7/imported = false +tracks/7/enabled = true +tracks/7/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_0/Bone_1_0/Bone_2_0/Bone_3_0/Bone_4_0:rotation_degrees") +tracks/7/interp = 2 +tracks/7/loop_wrap = true +tracks/7/keys = { +"times": PackedFloat32Array(0, 0.7), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/8/type = "value" +tracks/8/imported = false +tracks/8/enabled = true +tracks/8/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_0/Bone_1_0/Bone_2_0/Bone_3_0/Bone_4_0/Bone_5_0:rotation_degrees") +tracks/8/interp = 2 +tracks/8/loop_wrap = true +tracks/8/keys = { +"times": PackedFloat32Array(0, 0.7), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/9/type = "value" +tracks/9/imported = false +tracks/9/enabled = true +tracks/9/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_0/Bone_1_0/Bone_2_0/Bone_3_0/Bone_4_0/Bone_5_0/Bone_6_0:rotation_degrees") +tracks/9/interp = 2 +tracks/9/loop_wrap = true +tracks/9/keys = { +"times": PackedFloat32Array(0, 0.7), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/10/type = "value" +tracks/10/imported = false +tracks/10/enabled = true +tracks/10/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_0/Bone_1_0/Bone_2_0/Bone_3_0/Bone_4_0/Bone_5_0/Bone_6_0/Bone_7_0:rotation_degrees") +tracks/10/interp = 2 +tracks/10/loop_wrap = true +tracks/10/keys = { +"times": PackedFloat32Array(0, 0.7), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/11/type = "value" +tracks/11/imported = false +tracks/11/enabled = true +tracks/11/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_0/Bone_1_0/Bone_2_0/Bone_3_0/Bone_4_0/Bone_5_0/Bone_6_0/Bone_7_0/Bone_8_0:rotation_degrees") +tracks/11/interp = 2 +tracks/11/loop_wrap = true +tracks/11/keys = { +"times": PackedFloat32Array(0, 0.7), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/12/type = "value" +tracks/12/imported = false +tracks/12/enabled = true +tracks/12/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_1:rotation_degrees") +tracks/12/interp = 2 +tracks/12/loop_wrap = true +tracks/12/keys = { +"times": PackedFloat32Array(0, 0.35, 0.7), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [0.0, -90.0, -179.9] +} +tracks/13/type = "value" +tracks/13/imported = false +tracks/13/enabled = true +tracks/13/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_1/Bone_1_1:rotation_degrees") +tracks/13/interp = 2 +tracks/13/loop_wrap = true +tracks/13/keys = { +"times": PackedFloat32Array(0, 0.7), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/14/type = "value" +tracks/14/imported = false +tracks/14/enabled = true +tracks/14/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_1/Bone_1_1/Bone_2_1:rotation_degrees") +tracks/14/interp = 2 +tracks/14/loop_wrap = true +tracks/14/keys = { +"times": PackedFloat32Array(0, 0.7), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/15/type = "value" +tracks/15/imported = false +tracks/15/enabled = true +tracks/15/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_1/Bone_1_1/Bone_2_1/Bone_3_1:rotation_degrees") +tracks/15/interp = 2 +tracks/15/loop_wrap = true +tracks/15/keys = { +"times": PackedFloat32Array(0, 0.7), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/16/type = "value" +tracks/16/imported = false +tracks/16/enabled = true +tracks/16/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_1/Bone_1_1/Bone_2_1/Bone_3_1/Bone_4_1:rotation_degrees") +tracks/16/interp = 2 +tracks/16/loop_wrap = true +tracks/16/keys = { +"times": PackedFloat32Array(0, 0.7), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/17/type = "value" +tracks/17/imported = false +tracks/17/enabled = true +tracks/17/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_1/Bone_1_1/Bone_2_1/Bone_3_1/Bone_4_1/Bone_5_1:rotation_degrees") +tracks/17/interp = 2 +tracks/17/loop_wrap = true +tracks/17/keys = { +"times": PackedFloat32Array(0, 0.7), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/18/type = "value" +tracks/18/imported = false +tracks/18/enabled = true +tracks/18/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_1/Bone_1_1/Bone_2_1/Bone_3_1/Bone_4_1/Bone_5_1/Bone_6_1:rotation_degrees") +tracks/18/interp = 2 +tracks/18/loop_wrap = true +tracks/18/keys = { +"times": PackedFloat32Array(0, 0.7), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/19/type = "value" +tracks/19/imported = false +tracks/19/enabled = true +tracks/19/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_1/Bone_1_1/Bone_2_1/Bone_3_1/Bone_4_1/Bone_5_1/Bone_6_1/Bone_7_1:rotation_degrees") +tracks/19/interp = 2 +tracks/19/loop_wrap = true +tracks/19/keys = { +"times": PackedFloat32Array(0, 0.7), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/20/type = "value" +tracks/20/imported = false +tracks/20/enabled = true +tracks/20/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_1/Bone_1_1/Bone_2_1/Bone_3_1/Bone_4_1/Bone_5_1/Bone_6_1/Bone_7_1/Bone_8_1:rotation_degrees") +tracks/20/interp = 2 +tracks/20/loop_wrap = true +tracks/20/keys = { +"times": PackedFloat32Array(0, 0.7), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/21/type = "value" +tracks/21/imported = false +tracks/21/enabled = true +tracks/21/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_2:rotation_degrees") +tracks/21/interp = 2 +tracks/21/loop_wrap = true +tracks/21/keys = { +"times": PackedFloat32Array(0, 0.35, 0.7), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [0.0, -90.0, -179.9] +} +tracks/22/type = "value" +tracks/22/imported = false +tracks/22/enabled = true +tracks/22/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_2/Bone_1_2:rotation_degrees") +tracks/22/interp = 2 +tracks/22/loop_wrap = true +tracks/22/keys = { +"times": PackedFloat32Array(0, 0.7), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/23/type = "value" +tracks/23/imported = false +tracks/23/enabled = true +tracks/23/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_2/Bone_1_2/Bone_2_2:rotation_degrees") +tracks/23/interp = 2 +tracks/23/loop_wrap = true +tracks/23/keys = { +"times": PackedFloat32Array(0, 0.7), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/24/type = "value" +tracks/24/imported = false +tracks/24/enabled = true +tracks/24/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_2/Bone_1_2/Bone_2_2/Bone_3_2:rotation_degrees") +tracks/24/interp = 2 +tracks/24/loop_wrap = true +tracks/24/keys = { +"times": PackedFloat32Array(0, 0.7), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/25/type = "value" +tracks/25/imported = false +tracks/25/enabled = true +tracks/25/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_2/Bone_1_2/Bone_2_2/Bone_3_2/Bone_4_2:rotation_degrees") +tracks/25/interp = 2 +tracks/25/loop_wrap = true +tracks/25/keys = { +"times": PackedFloat32Array(0, 0.7), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/26/type = "value" +tracks/26/imported = false +tracks/26/enabled = true +tracks/26/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_2/Bone_1_2/Bone_2_2/Bone_3_2/Bone_4_2/Bone_5_2:rotation_degrees") +tracks/26/interp = 2 +tracks/26/loop_wrap = true +tracks/26/keys = { +"times": PackedFloat32Array(0, 0.7), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/27/type = "value" +tracks/27/imported = false +tracks/27/enabled = true +tracks/27/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_2/Bone_1_2/Bone_2_2/Bone_3_2/Bone_4_2/Bone_5_2/Bone_6_2:rotation_degrees") +tracks/27/interp = 2 +tracks/27/loop_wrap = true +tracks/27/keys = { +"times": PackedFloat32Array(0, 0.7), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/28/type = "value" +tracks/28/imported = false +tracks/28/enabled = true +tracks/28/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_2/Bone_1_2/Bone_2_2/Bone_3_2/Bone_4_2/Bone_5_2/Bone_6_2/Bone_7_2:rotation_degrees") +tracks/28/interp = 2 +tracks/28/loop_wrap = true +tracks/28/keys = { +"times": PackedFloat32Array(0, 0.7), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/29/type = "value" +tracks/29/imported = false +tracks/29/enabled = true +tracks/29/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_2/Bone_1_2/Bone_2_2/Bone_3_2/Bone_4_2/Bone_5_2/Bone_6_2/Bone_7_2/Bone_8_2:rotation_degrees") +tracks/29/interp = 2 +tracks/29/loop_wrap = true +tracks/29/keys = { +"times": PackedFloat32Array(0, 0.7), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/30/type = "value" +tracks/30/imported = false +tracks/30/enabled = true +tracks/30/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_3:rotation_degrees") +tracks/30/interp = 2 +tracks/30/loop_wrap = true +tracks/30/keys = { +"times": PackedFloat32Array(0, 0.35, 0.7), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [0.0, -90.0, -179.9] +} +tracks/31/type = "value" +tracks/31/imported = false +tracks/31/enabled = true +tracks/31/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_3/Bone_1_3:rotation_degrees") +tracks/31/interp = 2 +tracks/31/loop_wrap = true +tracks/31/keys = { +"times": PackedFloat32Array(0, 0.7), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/32/type = "value" +tracks/32/imported = false +tracks/32/enabled = true +tracks/32/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_3/Bone_1_3/Bone_2_3:rotation_degrees") +tracks/32/interp = 2 +tracks/32/loop_wrap = true +tracks/32/keys = { +"times": PackedFloat32Array(0, 0.7), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/33/type = "value" +tracks/33/imported = false +tracks/33/enabled = true +tracks/33/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_3/Bone_1_3/Bone_2_3/Bone_3_3:rotation_degrees") +tracks/33/interp = 2 +tracks/33/loop_wrap = true +tracks/33/keys = { +"times": PackedFloat32Array(0, 0.7), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/34/type = "value" +tracks/34/imported = false +tracks/34/enabled = true +tracks/34/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_3/Bone_1_3/Bone_2_3/Bone_3_3/Bone_4_3:rotation_degrees") +tracks/34/interp = 2 +tracks/34/loop_wrap = true +tracks/34/keys = { +"times": PackedFloat32Array(0, 0.7), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/35/type = "value" +tracks/35/imported = false +tracks/35/enabled = true +tracks/35/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_3/Bone_1_3/Bone_2_3/Bone_3_3/Bone_4_3/Bone_5_3:rotation_degrees") +tracks/35/interp = 2 +tracks/35/loop_wrap = true +tracks/35/keys = { +"times": PackedFloat32Array(0, 0.7), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/36/type = "value" +tracks/36/imported = false +tracks/36/enabled = true +tracks/36/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_3/Bone_1_3/Bone_2_3/Bone_3_3/Bone_4_3/Bone_5_3/Bone_6_3:rotation_degrees") +tracks/36/interp = 2 +tracks/36/loop_wrap = true +tracks/36/keys = { +"times": PackedFloat32Array(0, 0.7), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/37/type = "value" +tracks/37/imported = false +tracks/37/enabled = true +tracks/37/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_3/Bone_1_3/Bone_2_3/Bone_3_3/Bone_4_3/Bone_5_3/Bone_6_3/Bone_7_3:rotation_degrees") +tracks/37/interp = 2 +tracks/37/loop_wrap = true +tracks/37/keys = { +"times": PackedFloat32Array(0, 0.7), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/38/type = "value" +tracks/38/imported = false +tracks/38/enabled = true +tracks/38/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_3/Bone_1_3/Bone_2_3/Bone_3_3/Bone_4_3/Bone_5_3/Bone_6_3/Bone_7_3/Bone_8_3:rotation_degrees") +tracks/38/interp = 2 +tracks/38/loop_wrap = true +tracks/38/keys = { +"times": PackedFloat32Array(0, 0.7), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/39/type = "value" +tracks/39/imported = false +tracks/39/enabled = true +tracks/39/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_4:rotation_degrees") +tracks/39/interp = 2 +tracks/39/loop_wrap = true +tracks/39/keys = { +"times": PackedFloat32Array(0, 0.35, 0.7), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [0.0, -90.0, -179.9] +} +tracks/40/type = "value" +tracks/40/imported = false +tracks/40/enabled = true +tracks/40/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_4/Bone_1_4:rotation_degrees") +tracks/40/interp = 2 +tracks/40/loop_wrap = true +tracks/40/keys = { +"times": PackedFloat32Array(0, 0.7), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/41/type = "value" +tracks/41/imported = false +tracks/41/enabled = true +tracks/41/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_4/Bone_1_4/Bone_2_4:rotation_degrees") +tracks/41/interp = 2 +tracks/41/loop_wrap = true +tracks/41/keys = { +"times": PackedFloat32Array(0, 0.7), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/42/type = "value" +tracks/42/imported = false +tracks/42/enabled = true +tracks/42/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_4/Bone_1_4/Bone_2_4/Bone_3_4:rotation_degrees") +tracks/42/interp = 2 +tracks/42/loop_wrap = true +tracks/42/keys = { +"times": PackedFloat32Array(0, 0.7), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/43/type = "value" +tracks/43/imported = false +tracks/43/enabled = true +tracks/43/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_4/Bone_1_4/Bone_2_4/Bone_3_4/Bone_4_4:rotation_degrees") +tracks/43/interp = 2 +tracks/43/loop_wrap = true +tracks/43/keys = { +"times": PackedFloat32Array(0, 0.7), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/44/type = "value" +tracks/44/imported = false +tracks/44/enabled = true +tracks/44/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_4/Bone_1_4/Bone_2_4/Bone_3_4/Bone_4_4/Bone_5_4:rotation_degrees") +tracks/44/interp = 2 +tracks/44/loop_wrap = true +tracks/44/keys = { +"times": PackedFloat32Array(0, 0.7), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/45/type = "value" +tracks/45/imported = false +tracks/45/enabled = true +tracks/45/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_4/Bone_1_4/Bone_2_4/Bone_3_4/Bone_4_4/Bone_5_4/Bone_6_4:rotation_degrees") +tracks/45/interp = 2 +tracks/45/loop_wrap = true +tracks/45/keys = { +"times": PackedFloat32Array(0, 0.7), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/46/type = "value" +tracks/46/imported = false +tracks/46/enabled = true +tracks/46/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_4/Bone_1_4/Bone_2_4/Bone_3_4/Bone_4_4/Bone_5_4/Bone_6_4/Bone_7_4:rotation_degrees") +tracks/46/interp = 2 +tracks/46/loop_wrap = true +tracks/46/keys = { +"times": PackedFloat32Array(0, 0.7), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/47/type = "value" +tracks/47/imported = false +tracks/47/enabled = true +tracks/47/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_4/Bone_1_4/Bone_2_4/Bone_3_4/Bone_4_4/Bone_5_4/Bone_6_4/Bone_7_4/Bone_8_4:rotation_degrees") +tracks/47/interp = 2 +tracks/47/loop_wrap = true +tracks/47/keys = { +"times": PackedFloat32Array(0, 0.7), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/48/type = "value" +tracks/48/imported = false +tracks/48/enabled = true +tracks/48/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_5:rotation_degrees") +tracks/48/interp = 2 +tracks/48/loop_wrap = true +tracks/48/keys = { +"times": PackedFloat32Array(0, 0.35, 0.7), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [0.0, -90.0, -179.9] +} +tracks/49/type = "value" +tracks/49/imported = false +tracks/49/enabled = true +tracks/49/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_5/Bone_1_5:rotation_degrees") +tracks/49/interp = 2 +tracks/49/loop_wrap = true +tracks/49/keys = { +"times": PackedFloat32Array(0, 0.7), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/50/type = "value" +tracks/50/imported = false +tracks/50/enabled = true +tracks/50/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_5/Bone_1_5/Bone_2_5:rotation_degrees") +tracks/50/interp = 2 +tracks/50/loop_wrap = true +tracks/50/keys = { +"times": PackedFloat32Array(0, 0.7), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/51/type = "value" +tracks/51/imported = false +tracks/51/enabled = true +tracks/51/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_5/Bone_1_5/Bone_2_5/Bone_3_5:rotation_degrees") +tracks/51/interp = 2 +tracks/51/loop_wrap = true +tracks/51/keys = { +"times": PackedFloat32Array(0, 0.7), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/52/type = "value" +tracks/52/imported = false +tracks/52/enabled = true +tracks/52/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_5/Bone_1_5/Bone_2_5/Bone_3_5/Bone_4_5:rotation_degrees") +tracks/52/interp = 2 +tracks/52/loop_wrap = true +tracks/52/keys = { +"times": PackedFloat32Array(0, 0.7), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/53/type = "value" +tracks/53/imported = false +tracks/53/enabled = true +tracks/53/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_5/Bone_1_5/Bone_2_5/Bone_3_5/Bone_4_5/Bone_5_5:rotation_degrees") +tracks/53/interp = 2 +tracks/53/loop_wrap = true +tracks/53/keys = { +"times": PackedFloat32Array(0, 0.7), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/54/type = "value" +tracks/54/imported = false +tracks/54/enabled = true +tracks/54/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_5/Bone_1_5/Bone_2_5/Bone_3_5/Bone_4_5/Bone_5_5/Bone_6_5:rotation_degrees") +tracks/54/interp = 2 +tracks/54/loop_wrap = true +tracks/54/keys = { +"times": PackedFloat32Array(0, 0.7), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/55/type = "value" +tracks/55/imported = false +tracks/55/enabled = true +tracks/55/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_5/Bone_1_5/Bone_2_5/Bone_3_5/Bone_4_5/Bone_5_5/Bone_6_5/Bone_7_5:rotation_degrees") +tracks/55/interp = 2 +tracks/55/loop_wrap = true +tracks/55/keys = { +"times": PackedFloat32Array(0, 0.7), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/56/type = "value" +tracks/56/imported = false +tracks/56/enabled = true +tracks/56/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_5/Bone_1_5/Bone_2_5/Bone_3_5/Bone_4_5/Bone_5_5/Bone_6_5/Bone_7_5/Bone_8_5:rotation_degrees") +tracks/56/interp = 2 +tracks/56/loop_wrap = true +tracks/56/keys = { +"times": PackedFloat32Array(0, 0.7), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/57/type = "method" +tracks/57/imported = false +tracks/57/enabled = true +tracks/57/path = NodePath("Visual/DynamicFlipPoly") +tracks/57/interp = 1 +tracks/57/loop_wrap = true +tracks/57/keys = { +"times": PackedFloat32Array(0.35, 0.7), +"transitions": PackedFloat32Array(1, 1), +"values": [{ +"args": [], +"method": &"_trigger_midpoint" +}, { +"args": [], +"method": &"_trigger_end" +}] +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_hqhik"] +_data = { +&"RESET": SubResource("Animation_cuh5i"), +&"turn_flexible_page": SubResource("Animation_71hrr"), +&"turn_rigid_page": SubResource("Animation_15rl4") +} + +[node name="PageFlip" type="Node2D" node_paths=PackedStringArray("visuals_container", "static_left", "static_right", "dynamic_poly", "anim_player", "vp_compositor", "compositor_sprite", "audio_player")] +script = ExtResource("1_h83wc") +visuals_container = NodePath("Visual") +static_left = NodePath("Visual/StaticPageLeft") +static_right = NodePath("Visual/StaticPageRight") +dynamic_poly = NodePath("Visual/DynamicFlipPoly") +anim_player = NodePath("AnimationPlayer") +vp_compositor = NodePath("Viewports/Slots/Compositor") +compositor_sprite = NodePath("Viewports/Slots/Compositor/CompositorTexture") +blank_page_texture = ExtResource("2_71hrr") +spine_texture = ExtResource("2_c7gpb") +spine_width = 12.0 +closed_scale = Vector2(0.815, 0.23) +closed_skew = 0.19999999999999996 +closed_rotation = 0.10000000000002274 +min_layers = 1 +layer_offset_closed = Vector2(0.7, 12) +layer_offset_open = Vector2(0.6, 2) +volume_color = Color(0.6521577, 0.5921, 0.5600391, 1) +stripe_darken_ratio = 0.848 +sfx_book_impact = ExtResource("2_7r0mx") +sfx_page_flip = ExtResource("3_c7gpb") +audio_player = NodePath("AudioStreamPlayer") +pages_paths = Array[String](["uid://bblt4uih5pvaq", "uid://cjuuqqpxyvn1a", "uid://dnh24tb3nt53d"]) +tex_cover_front_out = ExtResource("2_gkj0d") +tex_cover_front_in = ExtResource("3_hqhik") +tex_cover_back_in = ExtResource("3_hqhik") +tex_cover_back_out = ExtResource("4_7r0mx") + +[node name="Viewports" type="Node" parent="."] + +[node name="Covers" type="Node" parent="Viewports"] + +[node name="CoverFrontIn" type="SubViewport" parent="Viewports/Covers"] +transparent_bg = true +size = Vector2i(512, 820) +render_target_update_mode = 4 + +[node name="Sprite2D" type="Sprite2D" parent="Viewports/Covers/CoverFrontIn"] +texture = ExtResource("2_gkj0d") +centered = false + +[node name="CoverFrontOut" type="SubViewport" parent="Viewports/Covers"] +transparent_bg = true +size = Vector2i(512, 820) +render_target_update_mode = 4 + +[node name="CoverBackIn" type="SubViewport" parent="Viewports/Covers"] +transparent_bg = true +size = Vector2i(512, 820) +render_target_update_mode = 4 + +[node name="CoverBackOut" type="SubViewport" parent="Viewports/Covers"] +transparent_bg = true +size = Vector2i(512, 820) +render_target_update_mode = 4 + +[node name="Slots" type="Node" parent="Viewports"] + +[node name="Slot1" type="SubViewport" parent="Viewports/Slots"] +transparent_bg = true +size = Vector2i(512, 820) +render_target_update_mode = 4 + +[node name="Slot2" type="SubViewport" parent="Viewports/Slots"] +transparent_bg = true +size = Vector2i(512, 820) +render_target_update_mode = 4 + +[node name="Slot3" type="SubViewport" parent="Viewports/Slots"] +transparent_bg = true +size = Vector2i(512, 820) +render_target_update_mode = 4 + +[node name="Slot4" type="SubViewport" parent="Viewports/Slots"] +transparent_bg = true +size = Vector2i(512, 820) +render_target_update_mode = 4 + +[node name="Compositor" type="SubViewport" parent="Viewports/Slots"] +transparent_bg = true +size = Vector2i(512, 820) +render_target_update_mode = 4 + +[node name="CompositorTexture" type="Sprite2D" parent="Viewports/Slots/Compositor"] +centered = false + +[node name="Visual" type="Node2D" parent="."] + +[node name="StaticPageLeft" type="Polygon2D" parent="Visual"] +visible = false +z_index = 1 +position = Vector2(-512, 0) +polygon = PackedVector2Array(0, -410, 512, -410, 512, 410, 0, 410) +uv = PackedVector2Array(0, 0, 512, 0, 512, 820, 0, 820) +polygons = [PackedInt32Array(0, 1, 2, 3)] + +[node name="StaticPageRight" type="Polygon2D" parent="Visual"] +z_index = 1 +polygon = PackedVector2Array(0, -410, 512, -410, 512, 410, 0, 410) +uv = PackedVector2Array(0, 0, 512, 0, 512, 820, 0, 820) +polygons = [PackedInt32Array(0, 1, 2, 3)] + +[node name="DynamicFlipPoly" type="Polygon2D" parent="Visual" node_paths=PackedStringArray("anim_player")] +z_index = 10 +material = SubResource("ShaderMaterial_gkj0d") +position = Vector2(0, -410) +texture = SubResource("ViewportTexture_7r0mx") +skeleton = NodePath("AutoSkeleton") +polygon = PackedVector2Array(0, 0, 64, 0, 128, 0, 192, 0, 256, 0, 320, 0, 384, 0, 448, 0, 512, 0, 0, 164, 64, 164, 128, 164, 192, 164, 256, 164, 320, 164, 384, 164, 448, 164, 512, 164, 0, 328, 64, 328, 128, 328, 192, 328, 256, 328, 320, 328, 384, 328, 448, 328, 512, 328, 0, 492, 64, 492, 128, 492, 192, 492, 256, 492, 320, 492, 384, 492, 448, 492, 512, 492, 0, 656, 64, 656, 128, 656, 192, 656, 256, 656, 320, 656, 384, 656, 448, 656, 512, 656, 0, 820, 64, 820, 128, 820, 192, 820, 256, 820, 320, 820, 384, 820, 448, 820, 512, 820) +uv = PackedVector2Array(0, 0, 64, 0, 128, 0, 192, 0, 256, 0, 320, 0, 384, 0, 448, 0, 512, 0, 0, 164, 64, 164, 128, 164, 192, 164, 256, 164, 320, 164, 384, 164, 448, 164, 512, 164, 0, 328, 64, 328, 128, 328, 192, 328, 256, 328, 320, 328, 384, 328, 448, 328, 512, 328, 0, 492, 64, 492, 128, 492, 192, 492, 256, 492, 320, 492, 384, 492, 448, 492, 512, 492, 0, 656, 64, 656, 128, 656, 192, 656, 256, 656, 320, 656, 384, 656, 448, 656, 512, 656, 0, 820, 64, 820, 128, 820, 192, 820, 256, 820, 320, 820, 384, 820, 448, 820, 512, 820) +polygons = [PackedInt32Array(0, 1, 10, 9), PackedInt32Array(1, 2, 11, 10), PackedInt32Array(2, 3, 12, 11), PackedInt32Array(3, 4, 13, 12), PackedInt32Array(4, 5, 14, 13), PackedInt32Array(5, 6, 15, 14), PackedInt32Array(6, 7, 16, 15), PackedInt32Array(7, 8, 17, 16), PackedInt32Array(9, 10, 19, 18), PackedInt32Array(10, 11, 20, 19), PackedInt32Array(11, 12, 21, 20), PackedInt32Array(12, 13, 22, 21), PackedInt32Array(13, 14, 23, 22), PackedInt32Array(14, 15, 24, 23), PackedInt32Array(15, 16, 25, 24), PackedInt32Array(16, 17, 26, 25), PackedInt32Array(18, 19, 28, 27), PackedInt32Array(19, 20, 29, 28), PackedInt32Array(20, 21, 30, 29), PackedInt32Array(21, 22, 31, 30), PackedInt32Array(22, 23, 32, 31), PackedInt32Array(23, 24, 33, 32), PackedInt32Array(24, 25, 34, 33), PackedInt32Array(25, 26, 35, 34), PackedInt32Array(27, 28, 37, 36), PackedInt32Array(28, 29, 38, 37), PackedInt32Array(29, 30, 39, 38), PackedInt32Array(30, 31, 40, 39), PackedInt32Array(31, 32, 41, 40), PackedInt32Array(32, 33, 42, 41), PackedInt32Array(33, 34, 43, 42), PackedInt32Array(34, 35, 44, 43), PackedInt32Array(36, 37, 46, 45), PackedInt32Array(37, 38, 47, 46), PackedInt32Array(38, 39, 48, 47), PackedInt32Array(39, 40, 49, 48), PackedInt32Array(40, 41, 50, 49), PackedInt32Array(41, 42, 51, 50), PackedInt32Array(42, 43, 52, 51), PackedInt32Array(43, 44, 53, 52)] +bones = ["/root/@EditorNode@20438/@Panel@14/@VBoxContainer@15/DockHSplitLeftL/DockHSplitLeftR/DockHSplitMain/@VBoxContainer@26/DockVSplitCenter/@VSplitContainer@62/@VBoxContainer@63/@EditorMainScreen@103/MainScreen/@CanvasItemEditor@10871/@VSplitContainer@10516/@HSplitContainer@10518/@HSplitContainer@10520/@Control@10521/@SubViewportContainer@10522/@SubViewport@10523/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_0", PackedFloat32Array(1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@20438/@Panel@14/@VBoxContainer@15/DockHSplitLeftL/DockHSplitLeftR/DockHSplitMain/@VBoxContainer@26/DockVSplitCenter/@VSplitContainer@62/@VBoxContainer@63/@EditorMainScreen@103/MainScreen/@CanvasItemEditor@10871/@VSplitContainer@10516/@HSplitContainer@10518/@HSplitContainer@10520/@Control@10521/@SubViewportContainer@10522/@SubViewport@10523/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_0/Bone_1_0", PackedFloat32Array(0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@20438/@Panel@14/@VBoxContainer@15/DockHSplitLeftL/DockHSplitLeftR/DockHSplitMain/@VBoxContainer@26/DockVSplitCenter/@VSplitContainer@62/@VBoxContainer@63/@EditorMainScreen@103/MainScreen/@CanvasItemEditor@10871/@VSplitContainer@10516/@HSplitContainer@10518/@HSplitContainer@10520/@Control@10521/@SubViewportContainer@10522/@SubViewport@10523/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_0/Bone_1_0/Bone_2_0", PackedFloat32Array(0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@20438/@Panel@14/@VBoxContainer@15/DockHSplitLeftL/DockHSplitLeftR/DockHSplitMain/@VBoxContainer@26/DockVSplitCenter/@VSplitContainer@62/@VBoxContainer@63/@EditorMainScreen@103/MainScreen/@CanvasItemEditor@10871/@VSplitContainer@10516/@HSplitContainer@10518/@HSplitContainer@10520/@Control@10521/@SubViewportContainer@10522/@SubViewport@10523/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_0/Bone_1_0/Bone_2_0/Bone_3_0", PackedFloat32Array(0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@20438/@Panel@14/@VBoxContainer@15/DockHSplitLeftL/DockHSplitLeftR/DockHSplitMain/@VBoxContainer@26/DockVSplitCenter/@VSplitContainer@62/@VBoxContainer@63/@EditorMainScreen@103/MainScreen/@CanvasItemEditor@10871/@VSplitContainer@10516/@HSplitContainer@10518/@HSplitContainer@10520/@Control@10521/@SubViewportContainer@10522/@SubViewport@10523/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_0/Bone_1_0/Bone_2_0/Bone_3_0/Bone_4_0", PackedFloat32Array(0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@20438/@Panel@14/@VBoxContainer@15/DockHSplitLeftL/DockHSplitLeftR/DockHSplitMain/@VBoxContainer@26/DockVSplitCenter/@VSplitContainer@62/@VBoxContainer@63/@EditorMainScreen@103/MainScreen/@CanvasItemEditor@10871/@VSplitContainer@10516/@HSplitContainer@10518/@HSplitContainer@10520/@Control@10521/@SubViewportContainer@10522/@SubViewport@10523/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_0/Bone_1_0/Bone_2_0/Bone_3_0/Bone_4_0/Bone_5_0", PackedFloat32Array(0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@20438/@Panel@14/@VBoxContainer@15/DockHSplitLeftL/DockHSplitLeftR/DockHSplitMain/@VBoxContainer@26/DockVSplitCenter/@VSplitContainer@62/@VBoxContainer@63/@EditorMainScreen@103/MainScreen/@CanvasItemEditor@10871/@VSplitContainer@10516/@HSplitContainer@10518/@HSplitContainer@10520/@Control@10521/@SubViewportContainer@10522/@SubViewport@10523/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_0/Bone_1_0/Bone_2_0/Bone_3_0/Bone_4_0/Bone_5_0/Bone_6_0", PackedFloat32Array(0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@20438/@Panel@14/@VBoxContainer@15/DockHSplitLeftL/DockHSplitLeftR/DockHSplitMain/@VBoxContainer@26/DockVSplitCenter/@VSplitContainer@62/@VBoxContainer@63/@EditorMainScreen@103/MainScreen/@CanvasItemEditor@10871/@VSplitContainer@10516/@HSplitContainer@10518/@HSplitContainer@10520/@Control@10521/@SubViewportContainer@10522/@SubViewport@10523/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_0/Bone_1_0/Bone_2_0/Bone_3_0/Bone_4_0/Bone_5_0/Bone_6_0/Bone_7_0", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@20438/@Panel@14/@VBoxContainer@15/DockHSplitLeftL/DockHSplitLeftR/DockHSplitMain/@VBoxContainer@26/DockVSplitCenter/@VSplitContainer@62/@VBoxContainer@63/@EditorMainScreen@103/MainScreen/@CanvasItemEditor@10871/@VSplitContainer@10516/@HSplitContainer@10518/@HSplitContainer@10520/@Control@10521/@SubViewportContainer@10522/@SubViewport@10523/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_0/Bone_1_0/Bone_2_0/Bone_3_0/Bone_4_0/Bone_5_0/Bone_6_0/Bone_7_0/Bone_8_0", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@20438/@Panel@14/@VBoxContainer@15/DockHSplitLeftL/DockHSplitLeftR/DockHSplitMain/@VBoxContainer@26/DockVSplitCenter/@VSplitContainer@62/@VBoxContainer@63/@EditorMainScreen@103/MainScreen/@CanvasItemEditor@10871/@VSplitContainer@10516/@HSplitContainer@10518/@HSplitContainer@10520/@Control@10521/@SubViewportContainer@10522/@SubViewport@10523/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_1", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@20438/@Panel@14/@VBoxContainer@15/DockHSplitLeftL/DockHSplitLeftR/DockHSplitMain/@VBoxContainer@26/DockVSplitCenter/@VSplitContainer@62/@VBoxContainer@63/@EditorMainScreen@103/MainScreen/@CanvasItemEditor@10871/@VSplitContainer@10516/@HSplitContainer@10518/@HSplitContainer@10520/@Control@10521/@SubViewportContainer@10522/@SubViewport@10523/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_1/Bone_1_1", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@20438/@Panel@14/@VBoxContainer@15/DockHSplitLeftL/DockHSplitLeftR/DockHSplitMain/@VBoxContainer@26/DockVSplitCenter/@VSplitContainer@62/@VBoxContainer@63/@EditorMainScreen@103/MainScreen/@CanvasItemEditor@10871/@VSplitContainer@10516/@HSplitContainer@10518/@HSplitContainer@10520/@Control@10521/@SubViewportContainer@10522/@SubViewport@10523/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_1/Bone_1_1/Bone_2_1", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@20438/@Panel@14/@VBoxContainer@15/DockHSplitLeftL/DockHSplitLeftR/DockHSplitMain/@VBoxContainer@26/DockVSplitCenter/@VSplitContainer@62/@VBoxContainer@63/@EditorMainScreen@103/MainScreen/@CanvasItemEditor@10871/@VSplitContainer@10516/@HSplitContainer@10518/@HSplitContainer@10520/@Control@10521/@SubViewportContainer@10522/@SubViewport@10523/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_1/Bone_1_1/Bone_2_1/Bone_3_1", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@20438/@Panel@14/@VBoxContainer@15/DockHSplitLeftL/DockHSplitLeftR/DockHSplitMain/@VBoxContainer@26/DockVSplitCenter/@VSplitContainer@62/@VBoxContainer@63/@EditorMainScreen@103/MainScreen/@CanvasItemEditor@10871/@VSplitContainer@10516/@HSplitContainer@10518/@HSplitContainer@10520/@Control@10521/@SubViewportContainer@10522/@SubViewport@10523/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_1/Bone_1_1/Bone_2_1/Bone_3_1/Bone_4_1", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@20438/@Panel@14/@VBoxContainer@15/DockHSplitLeftL/DockHSplitLeftR/DockHSplitMain/@VBoxContainer@26/DockVSplitCenter/@VSplitContainer@62/@VBoxContainer@63/@EditorMainScreen@103/MainScreen/@CanvasItemEditor@10871/@VSplitContainer@10516/@HSplitContainer@10518/@HSplitContainer@10520/@Control@10521/@SubViewportContainer@10522/@SubViewport@10523/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_1/Bone_1_1/Bone_2_1/Bone_3_1/Bone_4_1/Bone_5_1", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@20438/@Panel@14/@VBoxContainer@15/DockHSplitLeftL/DockHSplitLeftR/DockHSplitMain/@VBoxContainer@26/DockVSplitCenter/@VSplitContainer@62/@VBoxContainer@63/@EditorMainScreen@103/MainScreen/@CanvasItemEditor@10871/@VSplitContainer@10516/@HSplitContainer@10518/@HSplitContainer@10520/@Control@10521/@SubViewportContainer@10522/@SubViewport@10523/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_1/Bone_1_1/Bone_2_1/Bone_3_1/Bone_4_1/Bone_5_1/Bone_6_1", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@20438/@Panel@14/@VBoxContainer@15/DockHSplitLeftL/DockHSplitLeftR/DockHSplitMain/@VBoxContainer@26/DockVSplitCenter/@VSplitContainer@62/@VBoxContainer@63/@EditorMainScreen@103/MainScreen/@CanvasItemEditor@10871/@VSplitContainer@10516/@HSplitContainer@10518/@HSplitContainer@10520/@Control@10521/@SubViewportContainer@10522/@SubViewport@10523/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_1/Bone_1_1/Bone_2_1/Bone_3_1/Bone_4_1/Bone_5_1/Bone_6_1/Bone_7_1", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@20438/@Panel@14/@VBoxContainer@15/DockHSplitLeftL/DockHSplitLeftR/DockHSplitMain/@VBoxContainer@26/DockVSplitCenter/@VSplitContainer@62/@VBoxContainer@63/@EditorMainScreen@103/MainScreen/@CanvasItemEditor@10871/@VSplitContainer@10516/@HSplitContainer@10518/@HSplitContainer@10520/@Control@10521/@SubViewportContainer@10522/@SubViewport@10523/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_1/Bone_1_1/Bone_2_1/Bone_3_1/Bone_4_1/Bone_5_1/Bone_6_1/Bone_7_1/Bone_8_1", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@20438/@Panel@14/@VBoxContainer@15/DockHSplitLeftL/DockHSplitLeftR/DockHSplitMain/@VBoxContainer@26/DockVSplitCenter/@VSplitContainer@62/@VBoxContainer@63/@EditorMainScreen@103/MainScreen/@CanvasItemEditor@10871/@VSplitContainer@10516/@HSplitContainer@10518/@HSplitContainer@10520/@Control@10521/@SubViewportContainer@10522/@SubViewport@10523/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_2", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@20438/@Panel@14/@VBoxContainer@15/DockHSplitLeftL/DockHSplitLeftR/DockHSplitMain/@VBoxContainer@26/DockVSplitCenter/@VSplitContainer@62/@VBoxContainer@63/@EditorMainScreen@103/MainScreen/@CanvasItemEditor@10871/@VSplitContainer@10516/@HSplitContainer@10518/@HSplitContainer@10520/@Control@10521/@SubViewportContainer@10522/@SubViewport@10523/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_2/Bone_1_2", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@20438/@Panel@14/@VBoxContainer@15/DockHSplitLeftL/DockHSplitLeftR/DockHSplitMain/@VBoxContainer@26/DockVSplitCenter/@VSplitContainer@62/@VBoxContainer@63/@EditorMainScreen@103/MainScreen/@CanvasItemEditor@10871/@VSplitContainer@10516/@HSplitContainer@10518/@HSplitContainer@10520/@Control@10521/@SubViewportContainer@10522/@SubViewport@10523/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_2/Bone_1_2/Bone_2_2", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@20438/@Panel@14/@VBoxContainer@15/DockHSplitLeftL/DockHSplitLeftR/DockHSplitMain/@VBoxContainer@26/DockVSplitCenter/@VSplitContainer@62/@VBoxContainer@63/@EditorMainScreen@103/MainScreen/@CanvasItemEditor@10871/@VSplitContainer@10516/@HSplitContainer@10518/@HSplitContainer@10520/@Control@10521/@SubViewportContainer@10522/@SubViewport@10523/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_2/Bone_1_2/Bone_2_2/Bone_3_2", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@20438/@Panel@14/@VBoxContainer@15/DockHSplitLeftL/DockHSplitLeftR/DockHSplitMain/@VBoxContainer@26/DockVSplitCenter/@VSplitContainer@62/@VBoxContainer@63/@EditorMainScreen@103/MainScreen/@CanvasItemEditor@10871/@VSplitContainer@10516/@HSplitContainer@10518/@HSplitContainer@10520/@Control@10521/@SubViewportContainer@10522/@SubViewport@10523/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_2/Bone_1_2/Bone_2_2/Bone_3_2/Bone_4_2", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@20438/@Panel@14/@VBoxContainer@15/DockHSplitLeftL/DockHSplitLeftR/DockHSplitMain/@VBoxContainer@26/DockVSplitCenter/@VSplitContainer@62/@VBoxContainer@63/@EditorMainScreen@103/MainScreen/@CanvasItemEditor@10871/@VSplitContainer@10516/@HSplitContainer@10518/@HSplitContainer@10520/@Control@10521/@SubViewportContainer@10522/@SubViewport@10523/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_2/Bone_1_2/Bone_2_2/Bone_3_2/Bone_4_2/Bone_5_2", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@20438/@Panel@14/@VBoxContainer@15/DockHSplitLeftL/DockHSplitLeftR/DockHSplitMain/@VBoxContainer@26/DockVSplitCenter/@VSplitContainer@62/@VBoxContainer@63/@EditorMainScreen@103/MainScreen/@CanvasItemEditor@10871/@VSplitContainer@10516/@HSplitContainer@10518/@HSplitContainer@10520/@Control@10521/@SubViewportContainer@10522/@SubViewport@10523/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_2/Bone_1_2/Bone_2_2/Bone_3_2/Bone_4_2/Bone_5_2/Bone_6_2", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@20438/@Panel@14/@VBoxContainer@15/DockHSplitLeftL/DockHSplitLeftR/DockHSplitMain/@VBoxContainer@26/DockVSplitCenter/@VSplitContainer@62/@VBoxContainer@63/@EditorMainScreen@103/MainScreen/@CanvasItemEditor@10871/@VSplitContainer@10516/@HSplitContainer@10518/@HSplitContainer@10520/@Control@10521/@SubViewportContainer@10522/@SubViewport@10523/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_2/Bone_1_2/Bone_2_2/Bone_3_2/Bone_4_2/Bone_5_2/Bone_6_2/Bone_7_2", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@20438/@Panel@14/@VBoxContainer@15/DockHSplitLeftL/DockHSplitLeftR/DockHSplitMain/@VBoxContainer@26/DockVSplitCenter/@VSplitContainer@62/@VBoxContainer@63/@EditorMainScreen@103/MainScreen/@CanvasItemEditor@10871/@VSplitContainer@10516/@HSplitContainer@10518/@HSplitContainer@10520/@Control@10521/@SubViewportContainer@10522/@SubViewport@10523/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_2/Bone_1_2/Bone_2_2/Bone_3_2/Bone_4_2/Bone_5_2/Bone_6_2/Bone_7_2/Bone_8_2", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@20438/@Panel@14/@VBoxContainer@15/DockHSplitLeftL/DockHSplitLeftR/DockHSplitMain/@VBoxContainer@26/DockVSplitCenter/@VSplitContainer@62/@VBoxContainer@63/@EditorMainScreen@103/MainScreen/@CanvasItemEditor@10871/@VSplitContainer@10516/@HSplitContainer@10518/@HSplitContainer@10520/@Control@10521/@SubViewportContainer@10522/@SubViewport@10523/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_3", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@20438/@Panel@14/@VBoxContainer@15/DockHSplitLeftL/DockHSplitLeftR/DockHSplitMain/@VBoxContainer@26/DockVSplitCenter/@VSplitContainer@62/@VBoxContainer@63/@EditorMainScreen@103/MainScreen/@CanvasItemEditor@10871/@VSplitContainer@10516/@HSplitContainer@10518/@HSplitContainer@10520/@Control@10521/@SubViewportContainer@10522/@SubViewport@10523/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_3/Bone_1_3", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@20438/@Panel@14/@VBoxContainer@15/DockHSplitLeftL/DockHSplitLeftR/DockHSplitMain/@VBoxContainer@26/DockVSplitCenter/@VSplitContainer@62/@VBoxContainer@63/@EditorMainScreen@103/MainScreen/@CanvasItemEditor@10871/@VSplitContainer@10516/@HSplitContainer@10518/@HSplitContainer@10520/@Control@10521/@SubViewportContainer@10522/@SubViewport@10523/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_3/Bone_1_3/Bone_2_3", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@20438/@Panel@14/@VBoxContainer@15/DockHSplitLeftL/DockHSplitLeftR/DockHSplitMain/@VBoxContainer@26/DockVSplitCenter/@VSplitContainer@62/@VBoxContainer@63/@EditorMainScreen@103/MainScreen/@CanvasItemEditor@10871/@VSplitContainer@10516/@HSplitContainer@10518/@HSplitContainer@10520/@Control@10521/@SubViewportContainer@10522/@SubViewport@10523/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_3/Bone_1_3/Bone_2_3/Bone_3_3", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@20438/@Panel@14/@VBoxContainer@15/DockHSplitLeftL/DockHSplitLeftR/DockHSplitMain/@VBoxContainer@26/DockVSplitCenter/@VSplitContainer@62/@VBoxContainer@63/@EditorMainScreen@103/MainScreen/@CanvasItemEditor@10871/@VSplitContainer@10516/@HSplitContainer@10518/@HSplitContainer@10520/@Control@10521/@SubViewportContainer@10522/@SubViewport@10523/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_3/Bone_1_3/Bone_2_3/Bone_3_3/Bone_4_3", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@20438/@Panel@14/@VBoxContainer@15/DockHSplitLeftL/DockHSplitLeftR/DockHSplitMain/@VBoxContainer@26/DockVSplitCenter/@VSplitContainer@62/@VBoxContainer@63/@EditorMainScreen@103/MainScreen/@CanvasItemEditor@10871/@VSplitContainer@10516/@HSplitContainer@10518/@HSplitContainer@10520/@Control@10521/@SubViewportContainer@10522/@SubViewport@10523/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_3/Bone_1_3/Bone_2_3/Bone_3_3/Bone_4_3/Bone_5_3", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@20438/@Panel@14/@VBoxContainer@15/DockHSplitLeftL/DockHSplitLeftR/DockHSplitMain/@VBoxContainer@26/DockVSplitCenter/@VSplitContainer@62/@VBoxContainer@63/@EditorMainScreen@103/MainScreen/@CanvasItemEditor@10871/@VSplitContainer@10516/@HSplitContainer@10518/@HSplitContainer@10520/@Control@10521/@SubViewportContainer@10522/@SubViewport@10523/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_3/Bone_1_3/Bone_2_3/Bone_3_3/Bone_4_3/Bone_5_3/Bone_6_3", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@20438/@Panel@14/@VBoxContainer@15/DockHSplitLeftL/DockHSplitLeftR/DockHSplitMain/@VBoxContainer@26/DockVSplitCenter/@VSplitContainer@62/@VBoxContainer@63/@EditorMainScreen@103/MainScreen/@CanvasItemEditor@10871/@VSplitContainer@10516/@HSplitContainer@10518/@HSplitContainer@10520/@Control@10521/@SubViewportContainer@10522/@SubViewport@10523/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_3/Bone_1_3/Bone_2_3/Bone_3_3/Bone_4_3/Bone_5_3/Bone_6_3/Bone_7_3", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@20438/@Panel@14/@VBoxContainer@15/DockHSplitLeftL/DockHSplitLeftR/DockHSplitMain/@VBoxContainer@26/DockVSplitCenter/@VSplitContainer@62/@VBoxContainer@63/@EditorMainScreen@103/MainScreen/@CanvasItemEditor@10871/@VSplitContainer@10516/@HSplitContainer@10518/@HSplitContainer@10520/@Control@10521/@SubViewportContainer@10522/@SubViewport@10523/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_3/Bone_1_3/Bone_2_3/Bone_3_3/Bone_4_3/Bone_5_3/Bone_6_3/Bone_7_3/Bone_8_3", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@20438/@Panel@14/@VBoxContainer@15/DockHSplitLeftL/DockHSplitLeftR/DockHSplitMain/@VBoxContainer@26/DockVSplitCenter/@VSplitContainer@62/@VBoxContainer@63/@EditorMainScreen@103/MainScreen/@CanvasItemEditor@10871/@VSplitContainer@10516/@HSplitContainer@10518/@HSplitContainer@10520/@Control@10521/@SubViewportContainer@10522/@SubViewport@10523/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_4", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@20438/@Panel@14/@VBoxContainer@15/DockHSplitLeftL/DockHSplitLeftR/DockHSplitMain/@VBoxContainer@26/DockVSplitCenter/@VSplitContainer@62/@VBoxContainer@63/@EditorMainScreen@103/MainScreen/@CanvasItemEditor@10871/@VSplitContainer@10516/@HSplitContainer@10518/@HSplitContainer@10520/@Control@10521/@SubViewportContainer@10522/@SubViewport@10523/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_4/Bone_1_4", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@20438/@Panel@14/@VBoxContainer@15/DockHSplitLeftL/DockHSplitLeftR/DockHSplitMain/@VBoxContainer@26/DockVSplitCenter/@VSplitContainer@62/@VBoxContainer@63/@EditorMainScreen@103/MainScreen/@CanvasItemEditor@10871/@VSplitContainer@10516/@HSplitContainer@10518/@HSplitContainer@10520/@Control@10521/@SubViewportContainer@10522/@SubViewport@10523/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_4/Bone_1_4/Bone_2_4", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@20438/@Panel@14/@VBoxContainer@15/DockHSplitLeftL/DockHSplitLeftR/DockHSplitMain/@VBoxContainer@26/DockVSplitCenter/@VSplitContainer@62/@VBoxContainer@63/@EditorMainScreen@103/MainScreen/@CanvasItemEditor@10871/@VSplitContainer@10516/@HSplitContainer@10518/@HSplitContainer@10520/@Control@10521/@SubViewportContainer@10522/@SubViewport@10523/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_4/Bone_1_4/Bone_2_4/Bone_3_4", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@20438/@Panel@14/@VBoxContainer@15/DockHSplitLeftL/DockHSplitLeftR/DockHSplitMain/@VBoxContainer@26/DockVSplitCenter/@VSplitContainer@62/@VBoxContainer@63/@EditorMainScreen@103/MainScreen/@CanvasItemEditor@10871/@VSplitContainer@10516/@HSplitContainer@10518/@HSplitContainer@10520/@Control@10521/@SubViewportContainer@10522/@SubViewport@10523/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_4/Bone_1_4/Bone_2_4/Bone_3_4/Bone_4_4", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@20438/@Panel@14/@VBoxContainer@15/DockHSplitLeftL/DockHSplitLeftR/DockHSplitMain/@VBoxContainer@26/DockVSplitCenter/@VSplitContainer@62/@VBoxContainer@63/@EditorMainScreen@103/MainScreen/@CanvasItemEditor@10871/@VSplitContainer@10516/@HSplitContainer@10518/@HSplitContainer@10520/@Control@10521/@SubViewportContainer@10522/@SubViewport@10523/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_4/Bone_1_4/Bone_2_4/Bone_3_4/Bone_4_4/Bone_5_4", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@20438/@Panel@14/@VBoxContainer@15/DockHSplitLeftL/DockHSplitLeftR/DockHSplitMain/@VBoxContainer@26/DockVSplitCenter/@VSplitContainer@62/@VBoxContainer@63/@EditorMainScreen@103/MainScreen/@CanvasItemEditor@10871/@VSplitContainer@10516/@HSplitContainer@10518/@HSplitContainer@10520/@Control@10521/@SubViewportContainer@10522/@SubViewport@10523/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_4/Bone_1_4/Bone_2_4/Bone_3_4/Bone_4_4/Bone_5_4/Bone_6_4", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@20438/@Panel@14/@VBoxContainer@15/DockHSplitLeftL/DockHSplitLeftR/DockHSplitMain/@VBoxContainer@26/DockVSplitCenter/@VSplitContainer@62/@VBoxContainer@63/@EditorMainScreen@103/MainScreen/@CanvasItemEditor@10871/@VSplitContainer@10516/@HSplitContainer@10518/@HSplitContainer@10520/@Control@10521/@SubViewportContainer@10522/@SubViewport@10523/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_4/Bone_1_4/Bone_2_4/Bone_3_4/Bone_4_4/Bone_5_4/Bone_6_4/Bone_7_4", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@20438/@Panel@14/@VBoxContainer@15/DockHSplitLeftL/DockHSplitLeftR/DockHSplitMain/@VBoxContainer@26/DockVSplitCenter/@VSplitContainer@62/@VBoxContainer@63/@EditorMainScreen@103/MainScreen/@CanvasItemEditor@10871/@VSplitContainer@10516/@HSplitContainer@10518/@HSplitContainer@10520/@Control@10521/@SubViewportContainer@10522/@SubViewport@10523/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_4/Bone_1_4/Bone_2_4/Bone_3_4/Bone_4_4/Bone_5_4/Bone_6_4/Bone_7_4/Bone_8_4", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@20438/@Panel@14/@VBoxContainer@15/DockHSplitLeftL/DockHSplitLeftR/DockHSplitMain/@VBoxContainer@26/DockVSplitCenter/@VSplitContainer@62/@VBoxContainer@63/@EditorMainScreen@103/MainScreen/@CanvasItemEditor@10871/@VSplitContainer@10516/@HSplitContainer@10518/@HSplitContainer@10520/@Control@10521/@SubViewportContainer@10522/@SubViewport@10523/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_5", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@20438/@Panel@14/@VBoxContainer@15/DockHSplitLeftL/DockHSplitLeftR/DockHSplitMain/@VBoxContainer@26/DockVSplitCenter/@VSplitContainer@62/@VBoxContainer@63/@EditorMainScreen@103/MainScreen/@CanvasItemEditor@10871/@VSplitContainer@10516/@HSplitContainer@10518/@HSplitContainer@10520/@Control@10521/@SubViewportContainer@10522/@SubViewport@10523/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_5/Bone_1_5", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@20438/@Panel@14/@VBoxContainer@15/DockHSplitLeftL/DockHSplitLeftR/DockHSplitMain/@VBoxContainer@26/DockVSplitCenter/@VSplitContainer@62/@VBoxContainer@63/@EditorMainScreen@103/MainScreen/@CanvasItemEditor@10871/@VSplitContainer@10516/@HSplitContainer@10518/@HSplitContainer@10520/@Control@10521/@SubViewportContainer@10522/@SubViewport@10523/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_5/Bone_1_5/Bone_2_5", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@20438/@Panel@14/@VBoxContainer@15/DockHSplitLeftL/DockHSplitLeftR/DockHSplitMain/@VBoxContainer@26/DockVSplitCenter/@VSplitContainer@62/@VBoxContainer@63/@EditorMainScreen@103/MainScreen/@CanvasItemEditor@10871/@VSplitContainer@10516/@HSplitContainer@10518/@HSplitContainer@10520/@Control@10521/@SubViewportContainer@10522/@SubViewport@10523/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_5/Bone_1_5/Bone_2_5/Bone_3_5", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0), "/root/@EditorNode@20438/@Panel@14/@VBoxContainer@15/DockHSplitLeftL/DockHSplitLeftR/DockHSplitMain/@VBoxContainer@26/DockVSplitCenter/@VSplitContainer@62/@VBoxContainer@63/@EditorMainScreen@103/MainScreen/@CanvasItemEditor@10871/@VSplitContainer@10516/@HSplitContainer@10518/@HSplitContainer@10520/@Control@10521/@SubViewportContainer@10522/@SubViewport@10523/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_5/Bone_1_5/Bone_2_5/Bone_3_5/Bone_4_5", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0), "/root/@EditorNode@20438/@Panel@14/@VBoxContainer@15/DockHSplitLeftL/DockHSplitLeftR/DockHSplitMain/@VBoxContainer@26/DockVSplitCenter/@VSplitContainer@62/@VBoxContainer@63/@EditorMainScreen@103/MainScreen/@CanvasItemEditor@10871/@VSplitContainer@10516/@HSplitContainer@10518/@HSplitContainer@10520/@Control@10521/@SubViewportContainer@10522/@SubViewport@10523/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_5/Bone_1_5/Bone_2_5/Bone_3_5/Bone_4_5/Bone_5_5", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0), "/root/@EditorNode@20438/@Panel@14/@VBoxContainer@15/DockHSplitLeftL/DockHSplitLeftR/DockHSplitMain/@VBoxContainer@26/DockVSplitCenter/@VSplitContainer@62/@VBoxContainer@63/@EditorMainScreen@103/MainScreen/@CanvasItemEditor@10871/@VSplitContainer@10516/@HSplitContainer@10518/@HSplitContainer@10520/@Control@10521/@SubViewportContainer@10522/@SubViewport@10523/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_5/Bone_1_5/Bone_2_5/Bone_3_5/Bone_4_5/Bone_5_5/Bone_6_5", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0), "/root/@EditorNode@20438/@Panel@14/@VBoxContainer@15/DockHSplitLeftL/DockHSplitLeftR/DockHSplitMain/@VBoxContainer@26/DockVSplitCenter/@VSplitContainer@62/@VBoxContainer@63/@EditorMainScreen@103/MainScreen/@CanvasItemEditor@10871/@VSplitContainer@10516/@HSplitContainer@10518/@HSplitContainer@10520/@Control@10521/@SubViewportContainer@10522/@SubViewport@10523/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_5/Bone_1_5/Bone_2_5/Bone_3_5/Bone_4_5/Bone_5_5/Bone_6_5/Bone_7_5", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0), "/root/@EditorNode@20438/@Panel@14/@VBoxContainer@15/DockHSplitLeftL/DockHSplitLeftR/DockHSplitMain/@VBoxContainer@26/DockVSplitCenter/@VSplitContainer@62/@VBoxContainer@63/@EditorMainScreen@103/MainScreen/@CanvasItemEditor@10871/@VSplitContainer@10516/@HSplitContainer@10518/@HSplitContainer@10520/@Control@10521/@SubViewportContainer@10522/@SubViewport@10523/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_5/Bone_1_5/Bone_2_5/Bone_3_5/Bone_4_5/Bone_5_5/Bone_6_5/Bone_7_5/Bone_8_5", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1)] +script = ExtResource("1_jnpse") +anim_player = NodePath("../../AnimationPlayer") + +[node name="AutoShadow" type="Polygon2D" parent="Visual/DynamicFlipPoly"] +z_index = -1 +color = Color(0, 0, 0, 0.3) +polygon = PackedVector2Array(0, 0, 512, 0, 512, 820, 0, 820) +uv = PackedVector2Array(0, 0, 512, 0, 512, 820, 0, 820) + +[node name="AutoSkeleton" type="Skeleton2D" parent="Visual/DynamicFlipPoly"] + +[node name="Bone_0_0" type="Bone2D" parent="Visual/DynamicFlipPoly/AutoSkeleton"] +rest = Transform2D(1, 0, 0, 1, 0, 0) +auto_calculate_length_and_angle = false +length = 64.0 +bone_angle = 0.0 + +[node name="Bone_1_0" type="Bone2D" parent="Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_0"] +position = Vector2(64, 0) +rest = Transform2D(1, 0, 0, 1, 64, 0) +auto_calculate_length_and_angle = false +length = 64.0 +bone_angle = 0.0 + +[node name="Bone_2_0" type="Bone2D" parent="Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_0/Bone_1_0"] +position = Vector2(64, 0) +rest = Transform2D(1, 0, 0, 1, 64, 0) +auto_calculate_length_and_angle = false +length = 64.0 +bone_angle = 0.0 + +[node name="Bone_3_0" type="Bone2D" parent="Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_0/Bone_1_0/Bone_2_0"] +position = Vector2(64, 0) +rest = Transform2D(1, 0, 0, 1, 64, 0) +auto_calculate_length_and_angle = false +length = 64.0 +bone_angle = 0.0 + +[node name="Bone_4_0" type="Bone2D" parent="Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_0/Bone_1_0/Bone_2_0/Bone_3_0"] +position = Vector2(64, 0) +rest = Transform2D(1, 0, 0, 1, 64, 0) +auto_calculate_length_and_angle = false +length = 64.0 +bone_angle = 0.0 + +[node name="Bone_5_0" type="Bone2D" parent="Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_0/Bone_1_0/Bone_2_0/Bone_3_0/Bone_4_0"] +position = Vector2(64, 0) +rest = Transform2D(1, 0, 0, 1, 64, 0) +auto_calculate_length_and_angle = false +length = 64.0 +bone_angle = 0.0 + +[node name="Bone_6_0" type="Bone2D" parent="Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_0/Bone_1_0/Bone_2_0/Bone_3_0/Bone_4_0/Bone_5_0"] +position = Vector2(64, 0) +rest = Transform2D(1, 0, 0, 1, 64, 0) +auto_calculate_length_and_angle = false +length = 64.0 +bone_angle = 0.0 + +[node name="Bone_7_0" type="Bone2D" parent="Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_0/Bone_1_0/Bone_2_0/Bone_3_0/Bone_4_0/Bone_5_0/Bone_6_0"] +position = Vector2(64, 0) +rest = Transform2D(1, 0, 0, 1, 64, 0) +auto_calculate_length_and_angle = false +length = 64.0 +bone_angle = 0.0 + +[node name="Bone_8_0" type="Bone2D" parent="Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_0/Bone_1_0/Bone_2_0/Bone_3_0/Bone_4_0/Bone_5_0/Bone_6_0/Bone_7_0"] +position = Vector2(64, 0) +rest = Transform2D(1, 0, 0, 1, 64, 0) +auto_calculate_length_and_angle = false +length = 64.0 +bone_angle = 0.0 + +[node name="Bone_0_1" type="Bone2D" parent="Visual/DynamicFlipPoly/AutoSkeleton"] +position = Vector2(0, 164) +rest = Transform2D(1, 0, 0, 1, 0, 164) +auto_calculate_length_and_angle = false +length = 64.0 +bone_angle = 0.0 + +[node name="Bone_1_1" type="Bone2D" parent="Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_1"] +position = Vector2(64, 0) +rest = Transform2D(1, 0, 0, 1, 64, 0) +auto_calculate_length_and_angle = false +length = 64.0 +bone_angle = 0.0 + +[node name="Bone_2_1" type="Bone2D" parent="Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_1/Bone_1_1"] +position = Vector2(64, 0) +rest = Transform2D(1, 0, 0, 1, 64, 0) +auto_calculate_length_and_angle = false +length = 64.0 +bone_angle = 0.0 + +[node name="Bone_3_1" type="Bone2D" parent="Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_1/Bone_1_1/Bone_2_1"] +position = Vector2(64, 0) +rest = Transform2D(1, 0, 0, 1, 64, 0) +auto_calculate_length_and_angle = false +length = 64.0 +bone_angle = 0.0 + +[node name="Bone_4_1" type="Bone2D" parent="Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_1/Bone_1_1/Bone_2_1/Bone_3_1"] +position = Vector2(64, 0) +rest = Transform2D(1, 0, 0, 1, 64, 0) +auto_calculate_length_and_angle = false +length = 64.0 +bone_angle = 0.0 + +[node name="Bone_5_1" type="Bone2D" parent="Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_1/Bone_1_1/Bone_2_1/Bone_3_1/Bone_4_1"] +position = Vector2(64, 0) +rest = Transform2D(1, 0, 0, 1, 64, 0) +auto_calculate_length_and_angle = false +length = 64.0 +bone_angle = 0.0 + +[node name="Bone_6_1" type="Bone2D" parent="Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_1/Bone_1_1/Bone_2_1/Bone_3_1/Bone_4_1/Bone_5_1"] +position = Vector2(64, 0) +rest = Transform2D(1, 0, 0, 1, 64, 0) +auto_calculate_length_and_angle = false +length = 64.0 +bone_angle = 0.0 + +[node name="Bone_7_1" type="Bone2D" parent="Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_1/Bone_1_1/Bone_2_1/Bone_3_1/Bone_4_1/Bone_5_1/Bone_6_1"] +position = Vector2(64, 0) +rest = Transform2D(1, 0, 0, 1, 64, 0) +auto_calculate_length_and_angle = false +length = 64.0 +bone_angle = 0.0 + +[node name="Bone_8_1" type="Bone2D" parent="Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_1/Bone_1_1/Bone_2_1/Bone_3_1/Bone_4_1/Bone_5_1/Bone_6_1/Bone_7_1"] +position = Vector2(64, 0) +rest = Transform2D(1, 0, 0, 1, 64, 0) +auto_calculate_length_and_angle = false +length = 64.0 +bone_angle = 0.0 + +[node name="Bone_0_2" type="Bone2D" parent="Visual/DynamicFlipPoly/AutoSkeleton"] +position = Vector2(0, 328) +rest = Transform2D(1, 0, 0, 1, 0, 328) +auto_calculate_length_and_angle = false +length = 64.0 +bone_angle = 0.0 + +[node name="Bone_1_2" type="Bone2D" parent="Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_2"] +position = Vector2(64, 0) +rest = Transform2D(1, 0, 0, 1, 64, 0) +auto_calculate_length_and_angle = false +length = 64.0 +bone_angle = 0.0 + +[node name="Bone_2_2" type="Bone2D" parent="Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_2/Bone_1_2"] +position = Vector2(64, 0) +rest = Transform2D(1, 0, 0, 1, 64, 0) +auto_calculate_length_and_angle = false +length = 64.0 +bone_angle = 0.0 + +[node name="Bone_3_2" type="Bone2D" parent="Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_2/Bone_1_2/Bone_2_2"] +position = Vector2(64, 0) +rest = Transform2D(1, 0, 0, 1, 64, 0) +auto_calculate_length_and_angle = false +length = 64.0 +bone_angle = 0.0 + +[node name="Bone_4_2" type="Bone2D" parent="Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_2/Bone_1_2/Bone_2_2/Bone_3_2"] +position = Vector2(64, 0) +rest = Transform2D(1, 0, 0, 1, 64, 0) +auto_calculate_length_and_angle = false +length = 64.0 +bone_angle = 0.0 + +[node name="Bone_5_2" type="Bone2D" parent="Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_2/Bone_1_2/Bone_2_2/Bone_3_2/Bone_4_2"] +position = Vector2(64, 0) +rest = Transform2D(1, 0, 0, 1, 64, 0) +auto_calculate_length_and_angle = false +length = 64.0 +bone_angle = 0.0 + +[node name="Bone_6_2" type="Bone2D" parent="Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_2/Bone_1_2/Bone_2_2/Bone_3_2/Bone_4_2/Bone_5_2"] +position = Vector2(64, 0) +rest = Transform2D(1, 0, 0, 1, 64, 0) +auto_calculate_length_and_angle = false +length = 64.0 +bone_angle = 0.0 + +[node name="Bone_7_2" type="Bone2D" parent="Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_2/Bone_1_2/Bone_2_2/Bone_3_2/Bone_4_2/Bone_5_2/Bone_6_2"] +position = Vector2(64, 0) +rest = Transform2D(1, 0, 0, 1, 64, 0) +auto_calculate_length_and_angle = false +length = 64.0 +bone_angle = 0.0 + +[node name="Bone_8_2" type="Bone2D" parent="Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_2/Bone_1_2/Bone_2_2/Bone_3_2/Bone_4_2/Bone_5_2/Bone_6_2/Bone_7_2"] +position = Vector2(64, 0) +rest = Transform2D(1, 0, 0, 1, 64, 0) +auto_calculate_length_and_angle = false +length = 64.0 +bone_angle = 0.0 + +[node name="Bone_0_3" type="Bone2D" parent="Visual/DynamicFlipPoly/AutoSkeleton"] +position = Vector2(0, 492) +rest = Transform2D(1, 0, 0, 1, 0, 492) +auto_calculate_length_and_angle = false +length = 64.0 +bone_angle = 0.0 + +[node name="Bone_1_3" type="Bone2D" parent="Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_3"] +position = Vector2(64, 0) +rest = Transform2D(1, 0, 0, 1, 64, 0) +auto_calculate_length_and_angle = false +length = 64.0 +bone_angle = 0.0 + +[node name="Bone_2_3" type="Bone2D" parent="Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_3/Bone_1_3"] +position = Vector2(64, 0) +rest = Transform2D(1, 0, 0, 1, 64, 0) +auto_calculate_length_and_angle = false +length = 64.0 +bone_angle = 0.0 + +[node name="Bone_3_3" type="Bone2D" parent="Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_3/Bone_1_3/Bone_2_3"] +position = Vector2(64, 0) +rest = Transform2D(1, 0, 0, 1, 64, 0) +auto_calculate_length_and_angle = false +length = 64.0 +bone_angle = 0.0 + +[node name="Bone_4_3" type="Bone2D" parent="Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_3/Bone_1_3/Bone_2_3/Bone_3_3"] +position = Vector2(64, 0) +rest = Transform2D(1, 0, 0, 1, 64, 0) +auto_calculate_length_and_angle = false +length = 64.0 +bone_angle = 0.0 + +[node name="Bone_5_3" type="Bone2D" parent="Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_3/Bone_1_3/Bone_2_3/Bone_3_3/Bone_4_3"] +position = Vector2(64, 0) +rest = Transform2D(1, 0, 0, 1, 64, 0) +auto_calculate_length_and_angle = false +length = 64.0 +bone_angle = 0.0 + +[node name="Bone_6_3" type="Bone2D" parent="Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_3/Bone_1_3/Bone_2_3/Bone_3_3/Bone_4_3/Bone_5_3"] +position = Vector2(64, 0) +rest = Transform2D(1, 0, 0, 1, 64, 0) +auto_calculate_length_and_angle = false +length = 64.0 +bone_angle = 0.0 + +[node name="Bone_7_3" type="Bone2D" parent="Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_3/Bone_1_3/Bone_2_3/Bone_3_3/Bone_4_3/Bone_5_3/Bone_6_3"] +position = Vector2(64, 0) +rest = Transform2D(1, 0, 0, 1, 64, 0) +auto_calculate_length_and_angle = false +length = 64.0 +bone_angle = 0.0 + +[node name="Bone_8_3" type="Bone2D" parent="Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_3/Bone_1_3/Bone_2_3/Bone_3_3/Bone_4_3/Bone_5_3/Bone_6_3/Bone_7_3"] +position = Vector2(64, 0) +rest = Transform2D(1, 0, 0, 1, 64, 0) +auto_calculate_length_and_angle = false +length = 64.0 +bone_angle = 0.0 + +[node name="Bone_0_4" type="Bone2D" parent="Visual/DynamicFlipPoly/AutoSkeleton"] +position = Vector2(0, 656) +rest = Transform2D(1, 0, 0, 1, 0, 656) +auto_calculate_length_and_angle = false +length = 64.0 +bone_angle = 0.0 + +[node name="Bone_1_4" type="Bone2D" parent="Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_4"] +position = Vector2(64, 0) +rest = Transform2D(1, 0, 0, 1, 64, 0) +auto_calculate_length_and_angle = false +length = 64.0 +bone_angle = 0.0 + +[node name="Bone_2_4" type="Bone2D" parent="Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_4/Bone_1_4"] +position = Vector2(64, 0) +rest = Transform2D(1, 0, 0, 1, 64, 0) +auto_calculate_length_and_angle = false +length = 64.0 +bone_angle = 0.0 + +[node name="Bone_3_4" type="Bone2D" parent="Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_4/Bone_1_4/Bone_2_4"] +position = Vector2(64, 0) +rest = Transform2D(1, 0, 0, 1, 64, 0) +auto_calculate_length_and_angle = false +length = 64.0 +bone_angle = 0.0 + +[node name="Bone_4_4" type="Bone2D" parent="Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_4/Bone_1_4/Bone_2_4/Bone_3_4"] +position = Vector2(64, 0) +rest = Transform2D(1, 0, 0, 1, 64, 0) +auto_calculate_length_and_angle = false +length = 64.0 +bone_angle = 0.0 + +[node name="Bone_5_4" type="Bone2D" parent="Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_4/Bone_1_4/Bone_2_4/Bone_3_4/Bone_4_4"] +position = Vector2(64, 0) +rest = Transform2D(1, 0, 0, 1, 64, 0) +auto_calculate_length_and_angle = false +length = 64.0 +bone_angle = 0.0 + +[node name="Bone_6_4" type="Bone2D" parent="Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_4/Bone_1_4/Bone_2_4/Bone_3_4/Bone_4_4/Bone_5_4"] +position = Vector2(64, 0) +rest = Transform2D(1, 0, 0, 1, 64, 0) +auto_calculate_length_and_angle = false +length = 64.0 +bone_angle = 0.0 + +[node name="Bone_7_4" type="Bone2D" parent="Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_4/Bone_1_4/Bone_2_4/Bone_3_4/Bone_4_4/Bone_5_4/Bone_6_4"] +position = Vector2(64, 0) +rest = Transform2D(1, 0, 0, 1, 64, 0) +auto_calculate_length_and_angle = false +length = 64.0 +bone_angle = 0.0 + +[node name="Bone_8_4" type="Bone2D" parent="Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_4/Bone_1_4/Bone_2_4/Bone_3_4/Bone_4_4/Bone_5_4/Bone_6_4/Bone_7_4"] +position = Vector2(64, 0) +rest = Transform2D(1, 0, 0, 1, 64, 0) +auto_calculate_length_and_angle = false +length = 64.0 +bone_angle = 0.0 + +[node name="Bone_0_5" type="Bone2D" parent="Visual/DynamicFlipPoly/AutoSkeleton"] +position = Vector2(0, 820) +rest = Transform2D(1, 0, 0, 1, 0, 820) +auto_calculate_length_and_angle = false +length = 64.0 +bone_angle = 0.0 + +[node name="Bone_1_5" type="Bone2D" parent="Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_5"] +position = Vector2(64, 0) +rest = Transform2D(1, 0, 0, 1, 64, 0) +auto_calculate_length_and_angle = false +length = 64.0 +bone_angle = 0.0 + +[node name="Bone_2_5" type="Bone2D" parent="Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_5/Bone_1_5"] +position = Vector2(64, 0) +rest = Transform2D(1, 0, 0, 1, 64, 0) +auto_calculate_length_and_angle = false +length = 64.0 +bone_angle = 0.0 + +[node name="Bone_3_5" type="Bone2D" parent="Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_5/Bone_1_5/Bone_2_5"] +position = Vector2(64, 0) +rest = Transform2D(1, 0, 0, 1, 64, 0) +auto_calculate_length_and_angle = false +length = 64.0 +bone_angle = 0.0 + +[node name="Bone_4_5" type="Bone2D" parent="Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_5/Bone_1_5/Bone_2_5/Bone_3_5"] +position = Vector2(64, 0) +rest = Transform2D(1, 0, 0, 1, 64, 0) +auto_calculate_length_and_angle = false +length = 64.0 +bone_angle = 0.0 + +[node name="Bone_5_5" type="Bone2D" parent="Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_5/Bone_1_5/Bone_2_5/Bone_3_5/Bone_4_5"] +position = Vector2(64, 0) +rest = Transform2D(1, 0, 0, 1, 64, 0) +auto_calculate_length_and_angle = false +length = 64.0 +bone_angle = 0.0 + +[node name="Bone_6_5" type="Bone2D" parent="Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_5/Bone_1_5/Bone_2_5/Bone_3_5/Bone_4_5/Bone_5_5"] +position = Vector2(64, 0) +rest = Transform2D(1, 0, 0, 1, 64, 0) +auto_calculate_length_and_angle = false +length = 64.0 +bone_angle = 0.0 + +[node name="Bone_7_5" type="Bone2D" parent="Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_5/Bone_1_5/Bone_2_5/Bone_3_5/Bone_4_5/Bone_5_5/Bone_6_5"] +position = Vector2(64, 0) +rest = Transform2D(1, 0, 0, 1, 64, 0) +auto_calculate_length_and_angle = false +length = 64.0 +bone_angle = 0.0 + +[node name="Bone_8_5" type="Bone2D" parent="Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_5/Bone_1_5/Bone_2_5/Bone_3_5/Bone_4_5/Bone_5_5/Bone_6_5/Bone_7_5"] +position = Vector2(64, 0) +rest = Transform2D(1, 0, 0, 1, 64, 0) +auto_calculate_length_and_angle = false +length = 64.0 +bone_angle = 0.0 + +[node name="RuntimeSpine" type="Polygon2D" parent="Visual"] +z_index = 15 +texture = ExtResource("2_c7gpb") +polygon = PackedVector2Array(-6, -410, 6, -410, 6, 410, -6, 410) +uv = PackedVector2Array(0, 0, 4, 0, 4, 820, 0, 820) + +[node name="AnimationPlayer" type="AnimationPlayer" parent="."] +libraries = { +&"": SubResource("AnimationLibrary_hqhik") +} +autoplay = "turn_page_left" + +[node name="Camera2D" type="Camera2D" parent="."] +position = Vector2(-256, 0) +zoom = Vector2(0.4390244, 0.4390244) + +[node name="AudioStreamPlayer" type="AudioStreamPlayer" parent="."] diff --git a/addons/PageFlip/page_rigger.gd b/addons/PageFlip/page_rigger.gd new file mode 100644 index 0000000..62564cf --- /dev/null +++ b/addons/PageFlip/page_rigger.gd @@ -0,0 +1,587 @@ +@tool +class_name DynamicPage +extends Polygon2D + +# ============================================================================== +# ENUMS & CONSTANTS +# ============================================================================== + +## Defines the material physical properties for the page simulation. +enum PagePreset { + CUSTOM, + DEFAULT, + STANDARD_PAPER, + HEAVY_GRIMOIRE, + LIGHT_MAGAZINE, + OLD_SCROLL, + RIGID_BOARD, + WET_CLOTH, + PLASTIC_SHEET, + METAL_PLATE +} + +## Determines the direction of the page turn curve. +enum CurlMode { + STRAIGHT, + TOP_CORNER_FIRST, + BOTTOM_CORNER_FIRST +} + +const SKELETON_NAME = "AutoSkeleton" +const SHADOW_NAME = "AutoShadow" + + +# ============================================================================== +# SIGNALS +# ============================================================================== + +signal change_page_requested +signal end_animation + + +# ============================================================================== +# INTERNAL CACHE +# ============================================================================== + +var _custom_cache: Dictionary = {} + + +# ============================================================================== +# CONFIGURATION +# ============================================================================== + +@export_category("Rig Generator") + +## Horizontal mesh subdivision. Higher values create smoother bends. +@export_range(1, 20) var subdivision_x: int = 8 +## Vertical mesh subdivision. Higher values allow for better corner curling. +@export_range(1, 10) var subdivision_y: int = 5 +## Generates the mesh, skeleton, weights and animations. +@export var rebuild_all: bool = false : set = _on_generate_pressed + + +@export_category("Animation Generator") + +@export_group("Quick Presets") +## Select a material style to auto-configure physics. +@export var animation_preset: PagePreset = PagePreset.CUSTOM : set = _on_preset_changed + + +@export_group("Manual Configuration") +## The AnimationPlayer node to store the generated animations. +@export var anim_player: AnimationPlayer +## Duration of the page turn animation in seconds. +@export var anim_duration: float = 0.75 + + +@export_subgroup("Paper Physics") +## Stiffness of the material. 0.5 = Rubber, 5.0 = Wood. +@export_range(0.5, 5.0, 0.1) var paper_stiffness: float = 2.0 +## Bend angle during the lift phase (Negative = Tip drags down). +@export_range(-180.0, 180.0) var lift_bend: float = -10.0 +## Bend angle during the landing phase (Negative = Tip floats up). +@export_range(-180.0, 180.0) var land_bend: float = -8.0 + + +@export_subgroup("Curl Effect") +## Which part of the page initiates the movement. +@export var curl_mode: CurlMode = CurlMode.TOP_CORNER_FIRST +## Time delay for the trailing corner (0.0 = None, 1.0 = High lag). +@export_range(0.0, 1.0, 0.05) var curl_lag: float = 0.8 + + +@export_subgroup("Shadow FX") +## Create a dynamic shadow behind the page (Background Shadow). +@export var enable_shadow: bool = false +## The gradient texture used for the back shadow. +@export var shadow_gradient: GradientTexture2D + + +@export_subgroup("Fine Timing") +## Normalized time (0.0 - 1.0) for the peak lift position. +@export_range(0.05, 0.45, 0.01) var timing_peak_lift: float = 0.15 +## Normalized time (0.0 - 1.0) for the landing contact. +@export_range(0.55, 0.95, 0.01) var timing_peak_land: float = 0.85 + +@export var generate_anims_btn: bool = false : set = _on_anim_pressed + + +# ============================================================================== +# RUNTIME INITIALIZATION +# ============================================================================== + +func _ready(): + self.z_index = 10 + if animation_preset == PagePreset.CUSTOM: + _save_state_to_cache() + + +func rebuild(current_page_size: Vector2 = Vector2.ZERO) -> void: + if not anim_player: return + _clean_previous_rig() + _create_rig_logic(current_page_size) + _generate_animations_logic() + + +# ============================================================================== +# PRESET LOGIC +# ============================================================================== + +func _on_preset_changed(val): + if animation_preset == PagePreset.CUSTOM: + _save_state_to_cache() + + animation_preset = val + + if val == PagePreset.CUSTOM: + if not _custom_cache.is_empty(): + _load_state_from_cache() + print("[PageRigger] Restored Custom Settings.") + notify_property_list_changed() + return + + # Defaults + curl_mode = CurlMode.BOTTOM_CORNER_FIRST + curl_lag = 0.3 + enable_shadow = false + anim_duration = 0.75 + + match val: + PagePreset.DEFAULT: + paper_stiffness = 2.0; lift_bend = -15.0; land_bend = 5.0 + curl_mode = CurlMode.TOP_CORNER_FIRST; curl_lag = 0.5 + anim_duration = 0.75; timing_peak_lift = 0.15; timing_peak_land = 0.85 + + PagePreset.STANDARD_PAPER: + paper_stiffness = 2.5; lift_bend = -12.0; land_bend = 3.0 + curl_mode = CurlMode.TOP_CORNER_FIRST; curl_lag = 0.4 + anim_duration = 0.65; timing_peak_lift = 0.12; timing_peak_land = 0.88 + + PagePreset.HEAVY_GRIMOIRE: + paper_stiffness = 4.0; lift_bend = -3.0; land_bend = 1.0 + curl_mode = CurlMode.STRAIGHT; curl_lag = 0.1 + anim_duration = 1.1; timing_peak_lift = 0.25; timing_peak_land = 0.75 + + PagePreset.LIGHT_MAGAZINE: + paper_stiffness = 0.8; lift_bend = -16.0; land_bend = 0.0 + curl_mode = CurlMode.BOTTOM_CORNER_FIRST; curl_lag = 0.6 + anim_duration = 0.8; timing_peak_lift = 0.10; timing_peak_land = 0.92 + + PagePreset.OLD_SCROLL: + paper_stiffness = 1.8; lift_bend = -20.0; land_bend = 8.0 + curl_mode = CurlMode.TOP_CORNER_FIRST; curl_lag = 0.9 + anim_duration = 0.9; timing_peak_lift = 0.18; timing_peak_land = 0.82 + + PagePreset.RIGID_BOARD: + paper_stiffness = 5.0; lift_bend = 0.0; land_bend = 0.0 + curl_mode = CurlMode.STRAIGHT; curl_lag = 0.0 + anim_duration = 0.8; timing_peak_lift = 0.2; timing_peak_land = 0.8 + + PagePreset.WET_CLOTH: + paper_stiffness = 0.3; lift_bend = -28.0; land_bend = -0.0 + curl_mode = CurlMode.BOTTOM_CORNER_FIRST; curl_lag = 0.6 + anim_duration = 1.3; timing_peak_lift = 0.2; timing_peak_land = 0.95 + + PagePreset.PLASTIC_SHEET: + paper_stiffness = 3.5; lift_bend = -12.0; land_bend = 12.0 + curl_mode = CurlMode.TOP_CORNER_FIRST; curl_lag = 0.2 + anim_duration = 0.5; timing_peak_lift = 0.08; timing_peak_land = 0.92 + + PagePreset.METAL_PLATE: + paper_stiffness = 5.0; lift_bend = 0.0; land_bend = 0.0 + curl_mode = CurlMode.STRAIGHT; curl_lag = 0.0 + anim_duration = 1.4; timing_peak_lift = 0.15; timing_peak_land = 0.98 + + notify_property_list_changed() + if anim_player and skeleton != NodePath(""): + _generate_animations_logic() + print("[PageRigger] Preset Applied: ", PagePreset.keys()[val]) + + +func _save_state_to_cache(): + _custom_cache = { + "stiffness": paper_stiffness, "lift": lift_bend, "land": land_bend, + "curl_m": curl_mode, "curl_l": curl_lag, + "t_lift": timing_peak_lift, "t_land": timing_peak_land, + "dur": anim_duration, "shadow": enable_shadow + } + + +func _load_state_from_cache(): + paper_stiffness = _custom_cache.get("stiffness", 1.5) + lift_bend = _custom_cache.get("lift", -30.0) + land_bend = _custom_cache.get("land", -15.0) + curl_mode = _custom_cache.get("curl_m", CurlMode.BOTTOM_CORNER_FIRST) + curl_lag = _custom_cache.get("curl_l", 0.3) + timing_peak_lift = _custom_cache.get("t_lift", 0.15) + timing_peak_land = _custom_cache.get("t_land", 0.85) + anim_duration = _custom_cache.get("dur", 1.0) + enable_shadow = false # Force disable shadow + + +# ============================================================================== +# RIGGING LOGIC +# ============================================================================== + +func _calculate_polygon_rect() -> Rect2: + if polygon.size() == 0: + return Rect2(0,0,0,0) + + var min_v = polygon[0] + var max_v = polygon[0] + + for v in polygon: + min_v.x = min(min_v.x, v.x) + min_v.y = min(min_v.y, v.y) + max_v.x = max(max_v.x, v.x) + max_v.y = max(max_v.y, v.y) + + return Rect2(min_v, max_v - min_v) + + +func _create_rig_logic(current_page_size: Vector2 = Vector2.ZERO): + self.z_index = 10 + + var original_size = Vector2(512, 820) + var tex_size: Vector2 = Vector2.ZERO + if current_page_size != Vector2.ZERO: + tex_size = current_page_size + elif texture: + tex_size = texture.get_size() + if tex_size == Vector2.ZERO: + tex_size = original_size + + var step_x = tex_size.x / subdivision_x + var step_y = tex_size.y / subdivision_y + + # Prepare Gradient Texture for Background Shadow + var applied_shadow_tex: Texture2D = null + if not shadow_gradient: + shadow_gradient = preload("uid://rm7bporlv3cf") + var dup = shadow_gradient.duplicate() + if dup is GradientTexture2D: + dup.width = int(tex_size.x) + applied_shadow_tex = dup + + # --- 0. BACKGROUND SHADOW --- + if enable_shadow: + var shadow = Polygon2D.new() + shadow.name = SHADOW_NAME + shadow.z_index = -1 + + if applied_shadow_tex: + shadow.texture = applied_shadow_tex + shadow.color = Color.WHITE + else: + shadow.color = Color(0, 0, 0, 0.5) + + var margin = 4.0 + shadow.polygon = PackedVector2Array([ + Vector2(margin, margin), Vector2(tex_size.x - margin, margin), + Vector2(tex_size.x - margin, tex_size.y - margin), Vector2(margin, tex_size.y - margin) + ]) + shadow.uv = shadow.polygon + add_child(shadow) + + # --- 1. MESH & UV --- + var new_uvs = PackedVector2Array() + for y in range(subdivision_y + 1): + for x in range(subdivision_x + 1): + new_uvs.append(Vector2(x * step_x, y * step_y)) + self.uv = new_uvs + self.polygon = new_uvs + + var new_polygons = [] + var rc = subdivision_x + 1 + for y in range(subdivision_y): + for x in range(subdivision_x): + var i = y * rc + x + new_polygons.append(PackedInt32Array([i, i + 1, i + rc + 1, i + rc])) + self.polygons = new_polygons + + # --- 2. SKELETON --- + var sk = Skeleton2D.new() + sk.name = SKELETON_NAME + add_child(sk) + self.skeleton = NodePath(SKELETON_NAME) + + # --- 3. BONES (Structured Hierarchy) --- + for y in range(subdivision_y + 1): + var parent_bone: Bone2D = null + + for x in range(subdivision_x + 1): + var b = Bone2D.new() + b.name = "Bone_%d_%d" % [x, y] + b.set_autocalculate_length_and_angle(false) + b.set_length(step_x) + + if x == 0: + # Root bone (Spine) + sk.add_child(b) + b.position = Vector2(0, y * step_y) + else: + # Child bone + if parent_bone: + parent_bone.add_child(b) + b.position = Vector2(step_x, 0) + + b.set_rest(b.transform) + parent_bone = b + + # --- 4. WEIGHTS (Gradient Skinning) --- + _apply_weights_to_polygon(self, sk) + + queue_redraw() + notify_property_list_changed() + + +func _apply_weights_to_polygon(poly: Polygon2D, sk: Skeleton2D): + poly.clear_bones() + + var bone_map = {} + for y in range(subdivision_y + 1): + for x in range(subdivision_x + 1): + var bname = "Bone_%d_%d" % [x, y] + var bone_node = sk.find_child(bname, true, false) + if bone_node: + bone_map[bname] = bone_node.get_path() + + var vertex_count = poly.polygon.size() + + var weights_per_bone = {} + + for bpath in bone_map.values(): + var w_arr = PackedFloat32Array() + w_arr.resize(vertex_count) + w_arr.fill(0.0) + weights_per_bone[bpath] = w_arr + + var vert_idx = 0 + for y in range(subdivision_y + 1): + for x in range(subdivision_x + 1): + var primary_name = "Bone_%d_%d" % [x, y] + var prev_name = "Bone_%d_%d" % [x - 1, y] + var next_name = "Bone_%d_%d" % [x + 1, y] + + var primary_path = bone_map.get(primary_name) + var prev_path = bone_map.get(prev_name) + var next_path = bone_map.get(next_name) + + var w_center = 0.7 + var w_neighbor = 0.15 + + if primary_path: weights_per_bone[primary_path][vert_idx] += w_center + if prev_path: weights_per_bone[prev_path][vert_idx] += w_neighbor + else: weights_per_bone[primary_path][vert_idx] += w_neighbor + if next_path: weights_per_bone[next_path][vert_idx] += w_neighbor + else: weights_per_bone[primary_path][vert_idx] += w_neighbor + + vert_idx += 1 + + for bpath in weights_per_bone: + poly.add_bone(bpath, weights_per_bone[bpath]) + + +# ============================================================================== +# ANIMATION LOGIC +# ============================================================================== + +func _generate_animations_logic(): + var library: AnimationLibrary + if anim_player.has_animation_library(""): library = anim_player.get_animation_library("") + else: library = AnimationLibrary.new(); anim_player.add_animation_library("", library) + + _create_single_anim(library, "turn_flexible_page", false, false) + _create_single_anim(library, "turn_rigid_page", true, false) + _create_single_anim(library, "turn_flexible_page_mirror", false, true) + _create_single_anim(library, "turn_rigid_page_mirror", true, true) + notify_property_list_changed() + + +func _create_single_anim(library: AnimationLibrary, anim_name: String, is_rigid: bool, is_mirror: bool): + var anim = Animation.new() + anim.length = anim_duration + anim.step = 0.01 + + if library.has_animation(anim_name): library.remove_animation(anim_name) + library.add_animation(anim_name, anim) + + var sk_node = find_child(SKELETON_NAME, true, false) + if not sk_node: return + + var my_path = anim_player.get_node(anim_player.root_node).get_path_to(self) + + var visible_col = Color(1, 1, 1, 1) + var invisible_col = Color(1, 1, 1, 0) + var faded_col = Color(1, 1, 1, 0.6) + + var t_mid = anim_duration * 0.5 + var t_end_snap = anim_duration * 0.95 + + # ========================================================================== + # 1. VISIBILITY & Z-INDEX + # ========================================================================== + var z_track = anim.add_track(Animation.TYPE_VALUE) + anim.track_set_path(z_track, str(my_path) + ":z_index") + anim.track_set_interpolation_type(z_track, Animation.INTERPOLATION_NEAREST) + anim.track_insert_key(z_track, 0.0, 10) + anim.track_insert_key(z_track, anim_duration * 0.15, 25) + anim.track_insert_key(z_track, anim_duration * 0.65, 10) + + # ========================================================================== + # 2. BACKGROUND SHADOW + # ========================================================================== + var shadow_node = find_child(SHADOW_NAME, true, false) + if shadow_node and enable_shadow: + var shadow_path = anim_player.get_node(anim_player.root_node).get_path_to(shadow_node) + var t_scale = anim.add_track(Animation.TYPE_VALUE) + anim.track_set_path(t_scale, str(shadow_path) + ":scale") + anim.track_set_interpolation_type(t_scale, Animation.INTERPOLATION_CUBIC) + var t_mod = anim.add_track(Animation.TYPE_VALUE) + anim.track_set_path(t_mod, str(shadow_path) + ":modulate") + + var s_start = Vector2(-1.0, 1.0) if is_mirror else Vector2(1.0, 1.0) + var s_end = Vector2(1.0, 1.0) if is_mirror else Vector2(-1.0, 1.0) + + anim.track_insert_key(t_scale, 0.0, s_start) + anim.track_insert_key(t_mod, 0.0, invisible_col) + anim.track_insert_key(t_mod, anim_duration * 0.1, visible_col) + + anim.track_insert_key(t_scale, t_mid, Vector2(0.01, 1.0)) + anim.track_insert_key(t_mod, t_mid, faded_col) + + anim.track_insert_key(t_scale, t_end_snap, s_end) + anim.track_insert_key(t_scale, anim_duration, s_end) + anim.track_insert_key(t_mod, t_end_snap, invisible_col) + anim.track_insert_key(t_mod, anim_duration, invisible_col) + + # ========================================================================== + # 3. BONE ANIMATION + # ========================================================================== + for y in range(subdivision_y + 1): + var row_factor = 1.0 + if not is_rigid and curl_mode != CurlMode.STRAIGHT: + var y_ratio = float(y) / float(max(1, subdivision_y)) + if curl_mode == CurlMode.TOP_CORNER_FIRST: + row_factor = lerp(1.0, 1.0 - curl_lag, y_ratio) + elif curl_mode == CurlMode.BOTTOM_CORNER_FIRST: + row_factor = lerp(1.0 - curl_lag, 1.0, y_ratio) + + var time_offset = (1.0 - row_factor) * (anim_duration * 0.1) + + for x in range(subdivision_x + 1): + var bone_name = "Bone_%d_%d" % [x, y] + var bone = sk_node.find_child(bone_name, true, false) + if not bone: continue + + var t_idx = anim.add_track(Animation.TYPE_VALUE) + var path = anim_player.get_node(anim_player.root_node).get_path_to(bone) + anim.track_set_path(t_idx, str(path) + ":rotation_degrees") + anim.track_set_interpolation_type(t_idx, Animation.INTERPOLATION_CUBIC) + + var deg_flat_right = 0.0; var deg_flat_left = -179.9; var deg_mid = -90.0 + + if is_rigid: + if x == 0: + var s = deg_flat_left if is_mirror else deg_flat_right + var e = deg_flat_right if is_mirror else deg_flat_left + anim.track_insert_key(t_idx, 0.0, s) + anim.track_insert_key(t_idx, anim_duration * 0.5, deg_mid) + anim.track_insert_key(t_idx, anim_duration, e) + else: + anim.track_insert_key(t_idx, 0.0, 0.0) + anim.track_insert_key(t_idx, anim_duration, 0.0) + else: + var x_ratio = float(x) / float(subdivision_x) + var influence = pow(x_ratio, paper_stiffness) + var t_lift = clamp((anim_duration * timing_peak_lift) + time_offset, 0.0, (anim_duration * 0.5) - 0.05) + var t_mid_bone = anim_duration * 0.5 + var t_land = clamp((anim_duration * timing_peak_land) - time_offset, t_mid_bone + 0.05, anim_duration) + + if x == 0: + # ROOT BONE + var s = deg_flat_left if is_mirror else deg_flat_right + var e = deg_flat_right if is_mirror else deg_flat_left + var sl = -15.0 * row_factor + if is_mirror: sl = deg_flat_left - sl + var slt = lerp(-90.0, -180.0, timing_peak_land) + if is_mirror: slt = lerp(-90.0, 0.0, timing_peak_land) + + anim.track_insert_key(t_idx, 0.0, s) + anim.track_insert_key(t_idx, t_lift, sl) + anim.track_insert_key(t_idx, t_mid_bone, deg_mid) + anim.track_insert_key(t_idx, t_land, slt) + + var t_settle = lerp(t_land, anim_duration, 0.7) + var s_settle = lerp(slt, e, 0.85) + anim.track_insert_key(t_idx, t_settle, s_settle) + + anim.track_insert_key(t_idx, anim_duration, e) + else: + # SURFACE BONES (CURVED) + var bm = -1.0 if is_mirror else 1.0 + + anim.track_insert_key(t_idx, 0.0, 0.0) + anim.track_insert_key(t_idx, t_lift, lift_bend * row_factor * bm * influence) + # REMOVED FORCED 0.0 AT MIDPOINT FOR ORGANIC CURVE + + var val_land = land_bend * row_factor * bm * influence + anim.track_insert_key(t_idx, t_land, val_land) + + var t_settle = lerp(t_land, anim_duration, 0.75) + anim.track_insert_key(t_idx, t_settle, val_land * 0.15) + + anim.track_insert_key(t_idx, anim_duration, 0.0) + + # ========================================================================== + # 4. MAIN POLYGON SCALE ("SQUASH & STRETCH") + # ========================================================================== + if not is_rigid: + var t_main_scale = anim.add_track(Animation.TYPE_VALUE) + anim.track_set_path(t_main_scale, str(my_path) + ":scale") + anim.track_set_interpolation_type(t_main_scale, Animation.INTERPOLATION_LINEAR) + var squash_x = 0.88 + + anim.track_insert_key(t_main_scale, 0.0, Vector2(1, 1)) + anim.track_insert_key(t_main_scale, t_mid, Vector2(1, 1)) + anim.track_insert_key(t_main_scale, t_mid + (anim_duration * 0.1), Vector2(squash_x, 1)) + anim.track_insert_key(t_main_scale, anim_duration * 0.85, Vector2(1, 1)) + anim.track_insert_key(t_main_scale, anim_duration, Vector2(1, 1)) + + var method_track = anim.add_track(Animation.TYPE_METHOD) + anim.track_set_path(method_track, str(my_path)) + anim.track_insert_key(method_track, anim_duration * 0.5, {"method": "_trigger_midpoint", "args": []}) + anim.track_insert_key(method_track, anim_duration, {"method": "_trigger_end", "args": []}) + + +# ============================================================================== +# HELPER FUNCTIONS +# ============================================================================== + +func _trigger_midpoint(): emit_signal("change_page_requested") +func _trigger_end(): emit_signal("end_animation") + + +func _on_generate_pressed(val): + if val: + rebuild_all=false + _clean_previous_rig() + _create_rig_logic() + _generate_animations_logic() + + +func _on_anim_pressed(val): + if val: + generate_anims_btn=false + if anim_player and skeleton!=NodePath(""): + _generate_animations_logic() + + +func _clean_previous_rig(): + for c in get_children(): + remove_child(c) + c.free() + var old_shadow = find_child(SHADOW_NAME, true, false) + if old_shadow: old_shadow.free() + clear_bones() + skeleton = NodePath("") diff --git a/addons/PageFlip/page_rigger.gd.uid b/addons/PageFlip/page_rigger.gd.uid new file mode 100644 index 0000000..646bf98 --- /dev/null +++ b/addons/PageFlip/page_rigger.gd.uid @@ -0,0 +1 @@ +uid://ce5ib2f4qff24 diff --git a/addons/godotsteam/win64/~libgodotsteam.windows.template_debug.x86_64.dll~RF2112c.TMP b/addons/godotsteam/win64/~libgodotsteam.windows.template_debug.x86_64.dll~RF2112c.TMP new file mode 100644 index 0000000..2d345af Binary files /dev/null and b/addons/godotsteam/win64/~libgodotsteam.windows.template_debug.x86_64.dll~RF2112c.TMP differ diff --git a/core/daynight/day_night_controller.gd b/core/daynight/day_night_controller.gd index e582b9f..c4d4170 100644 --- a/core/daynight/day_night_controller.gd +++ b/core/daynight/day_night_controller.gd @@ -12,6 +12,10 @@ var environment_config: EnvironmentConfig @export var time_scale: float = 1.0 @export var paused: bool = false +var _time_tween: Tween + +var time_transition_duration: float = 2 + signal time_changed(time: float) var current_time: float = 0.0 @@ -67,16 +71,30 @@ func get_time_option_index(currtime: float) -> int: return TIME_OPTION_DAY return TIME_OPTION_SUNSET + + func _time_option_changed(index: int) -> void: + var target_time: float = 0.0 match index: TIME_OPTION_SUNRISE: - set_time(environment_config.sunrise) + target_time = environment_config.sunrise TIME_OPTION_DAY: - set_time(environment_config.day) + target_time = environment_config.day TIME_OPTION_SUNSET: - set_time(environment_config.sunset) + target_time = environment_config.sunset TIME_OPTION_NIGHT: - set_time(environment_config.night) + target_time = environment_config.night + + if _time_tween: + _time_tween.kill() + + _time_tween = create_tween() + + # Always move forward in time for a natural transition + if target_time < current_time: + target_time += 1.0 + + _time_tween.tween_method(set_time, current_time, target_time, time_transition_duration) func _on_set_day_time(value: float) -> void: set_time(value) diff --git a/core/game_menu/assets/page.png b/core/game_menu/assets/page.png new file mode 100644 index 0000000..936a2be Binary files /dev/null and b/core/game_menu/assets/page.png differ diff --git a/core/game_menu/assets/page.png.import b/core/game_menu/assets/page.png.import new file mode 100644 index 0000000..c25b335 --- /dev/null +++ b/core/game_menu/assets/page.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://kvn5l0n11a3q" +path="res://.godot/imported/page.png-6c8405fbc970a849a62cab2019c549ca.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://core/game_menu/assets/page.png" +dest_files=["res://.godot/imported/page.png-6c8405fbc970a849a62cab2019c549ca.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/core/game_menu/assets/page_1/1_dx.png b/core/game_menu/assets/page_1/1_dx.png new file mode 100644 index 0000000..ff26a1a Binary files /dev/null and b/core/game_menu/assets/page_1/1_dx.png differ diff --git a/core/game_menu/assets/page_1/1_dx.png.import b/core/game_menu/assets/page_1/1_dx.png.import new file mode 100644 index 0000000..3ad8944 --- /dev/null +++ b/core/game_menu/assets/page_1/1_dx.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dyvwywse5raqt" +path="res://.godot/imported/1_dx.png-72d52e4e36c6fed20f7226414ff0abd6.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://core/game_menu/assets/page_1/1_dx.png" +dest_files=["res://.godot/imported/1_dx.png-72d52e4e36c6fed20f7226414ff0abd6.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/core/game_menu/assets/page_1/1_sx.png b/core/game_menu/assets/page_1/1_sx.png new file mode 100644 index 0000000..9df82db Binary files /dev/null and b/core/game_menu/assets/page_1/1_sx.png differ diff --git a/core/game_menu/assets/page_1/1_sx.png.import b/core/game_menu/assets/page_1/1_sx.png.import new file mode 100644 index 0000000..3c7830f --- /dev/null +++ b/core/game_menu/assets/page_1/1_sx.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dbpfa1xgxxn8s" +path="res://.godot/imported/1_sx.png-f04965d63490ae436799d59856936013.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://core/game_menu/assets/page_1/1_sx.png" +dest_files=["res://.godot/imported/1_sx.png-f04965d63490ae436799d59856936013.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/core/game_menu/assets/page_1/quad_main.png b/core/game_menu/assets/page_1/quad_main.png index db661ea..a6f9481 100644 Binary files a/core/game_menu/assets/page_1/quad_main.png and b/core/game_menu/assets/page_1/quad_main.png differ diff --git a/core/game_menu/assets/page_1/rings.png b/core/game_menu/assets/page_1/rings.png new file mode 100644 index 0000000..206866a Binary files /dev/null and b/core/game_menu/assets/page_1/rings.png differ diff --git a/core/game_menu/assets/page_1/rings.png.import b/core/game_menu/assets/page_1/rings.png.import new file mode 100644 index 0000000..c12cf03 --- /dev/null +++ b/core/game_menu/assets/page_1/rings.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://clvc6nlbgyvp1" +path="res://.godot/imported/rings.png-21117a64acb1855b44e3ce941dd421bd.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://core/game_menu/assets/page_1/rings.png" +dest_files=["res://.godot/imported/rings.png-21117a64acb1855b44e3ce941dd421bd.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/core/game_menu/assets/page_2/2_dx.png b/core/game_menu/assets/page_2/2_dx.png new file mode 100644 index 0000000..4bf9307 Binary files /dev/null and b/core/game_menu/assets/page_2/2_dx.png differ diff --git a/core/game_menu/assets/page_2/2_dx.png.import b/core/game_menu/assets/page_2/2_dx.png.import new file mode 100644 index 0000000..365d7fd --- /dev/null +++ b/core/game_menu/assets/page_2/2_dx.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://drwe2xcnp8vs1" +path="res://.godot/imported/2_dx.png-1c9a95db875176635d05c1084fc67cb1.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://core/game_menu/assets/page_2/2_dx.png" +dest_files=["res://.godot/imported/2_dx.png-1c9a95db875176635d05c1084fc67cb1.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/core/game_menu/assets/page_2/2_sx.png b/core/game_menu/assets/page_2/2_sx.png new file mode 100644 index 0000000..567a53a Binary files /dev/null and b/core/game_menu/assets/page_2/2_sx.png differ diff --git a/core/game_menu/assets/page_2/2_sx.png.import b/core/game_menu/assets/page_2/2_sx.png.import new file mode 100644 index 0000000..f3266d3 --- /dev/null +++ b/core/game_menu/assets/page_2/2_sx.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cgllgxrstcoy7" +path="res://.godot/imported/2_sx.png-396d61afe82f03c22efe87c2626240ae.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://core/game_menu/assets/page_2/2_sx.png" +dest_files=["res://.godot/imported/2_sx.png-396d61afe82f03c22efe87c2626240ae.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/core/game_menu/assets/page_3/3_dx.png b/core/game_menu/assets/page_3/3_dx.png new file mode 100644 index 0000000..ab2b4ce Binary files /dev/null and b/core/game_menu/assets/page_3/3_dx.png differ diff --git a/core/game_menu/assets/page_3/3_dx.png.import b/core/game_menu/assets/page_3/3_dx.png.import new file mode 100644 index 0000000..ca7cddb --- /dev/null +++ b/core/game_menu/assets/page_3/3_dx.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://b6ae0kp1m0x74" +path="res://.godot/imported/3_dx.png-c85d01f060ffa9993163c423a29a54fc.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://core/game_menu/assets/page_3/3_dx.png" +dest_files=["res://.godot/imported/3_dx.png-c85d01f060ffa9993163c423a29a54fc.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/core/game_menu/assets/page_3/3_sx.png b/core/game_menu/assets/page_3/3_sx.png new file mode 100644 index 0000000..3cb9b81 Binary files /dev/null and b/core/game_menu/assets/page_3/3_sx.png differ diff --git a/core/game_menu/assets/page_3/3_sx.png.import b/core/game_menu/assets/page_3/3_sx.png.import new file mode 100644 index 0000000..1e9f0bb --- /dev/null +++ b/core/game_menu/assets/page_3/3_sx.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://diuai5vtjx23l" +path="res://.godot/imported/3_sx.png-537fe112f093326f28478c136b142922.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://core/game_menu/assets/page_3/3_sx.png" +dest_files=["res://.godot/imported/3_sx.png-537fe112f093326f28478c136b142922.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/core/game_menu/assets/page_3/coming_soon_01.png b/core/game_menu/assets/page_3/coming_soon_01.png new file mode 100644 index 0000000..5c76367 Binary files /dev/null and b/core/game_menu/assets/page_3/coming_soon_01.png differ diff --git a/core/game_menu/assets/page_3/coming_soon_01.png.import b/core/game_menu/assets/page_3/coming_soon_01.png.import new file mode 100644 index 0000000..d2395de --- /dev/null +++ b/core/game_menu/assets/page_3/coming_soon_01.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://vg5y4qgc26ko" +path="res://.godot/imported/coming_soon_01.png-25c9049aaff7242878eb6f73c7097db7.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://core/game_menu/assets/page_3/coming_soon_01.png" +dest_files=["res://.godot/imported/coming_soon_01.png-25c9049aaff7242878eb6f73c7097db7.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/core/game_menu/assets/page_3/coming_soon_02.png b/core/game_menu/assets/page_3/coming_soon_02.png new file mode 100644 index 0000000..547c57c Binary files /dev/null and b/core/game_menu/assets/page_3/coming_soon_02.png differ diff --git a/core/game_menu/assets/page_3/coming_soon_02.png.import b/core/game_menu/assets/page_3/coming_soon_02.png.import new file mode 100644 index 0000000..21df036 --- /dev/null +++ b/core/game_menu/assets/page_3/coming_soon_02.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bmatlcouch6jm" +path="res://.godot/imported/coming_soon_02.png-3a0cf6d408d00a891bcda63b2e091de2.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://core/game_menu/assets/page_3/coming_soon_02.png" +dest_files=["res://.godot/imported/coming_soon_02.png-3a0cf6d408d00a891bcda63b2e091de2.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/core/game_menu/assets/page_3/coming_soon_03.png b/core/game_menu/assets/page_3/coming_soon_03.png new file mode 100644 index 0000000..c250434 Binary files /dev/null and b/core/game_menu/assets/page_3/coming_soon_03.png differ diff --git a/core/game_menu/assets/page_3/coming_soon_03.png.import b/core/game_menu/assets/page_3/coming_soon_03.png.import new file mode 100644 index 0000000..cb7812b --- /dev/null +++ b/core/game_menu/assets/page_3/coming_soon_03.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bm55xiv8jgnni" +path="res://.godot/imported/coming_soon_03.png-57925084415215faf6655b4afb668ed8.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://core/game_menu/assets/page_3/coming_soon_03.png" +dest_files=["res://.godot/imported/coming_soon_03.png-57925084415215faf6655b4afb668ed8.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/core/game_menu/assets/page_3/coming_soon_04.png b/core/game_menu/assets/page_3/coming_soon_04.png new file mode 100644 index 0000000..5c29f9c Binary files /dev/null and b/core/game_menu/assets/page_3/coming_soon_04.png differ diff --git a/core/game_menu/assets/page_3/coming_soon_04.png.import b/core/game_menu/assets/page_3/coming_soon_04.png.import new file mode 100644 index 0000000..2783bb2 --- /dev/null +++ b/core/game_menu/assets/page_3/coming_soon_04.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cj81qdlrulal2" +path="res://.godot/imported/coming_soon_04.png-8f40cb1c6984110b3c2b3d9c3c9c8658.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://core/game_menu/assets/page_3/coming_soon_04.png" +dest_files=["res://.godot/imported/coming_soon_04.png-8f40cb1c6984110b3c2b3d9c3c9c8658.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/core/game_menu/assets/page_3/coming_soon_05.png b/core/game_menu/assets/page_3/coming_soon_05.png new file mode 100644 index 0000000..d79b9e7 Binary files /dev/null and b/core/game_menu/assets/page_3/coming_soon_05.png differ diff --git a/core/game_menu/assets/page_3/coming_soon_05.png.import b/core/game_menu/assets/page_3/coming_soon_05.png.import new file mode 100644 index 0000000..6c9ad37 --- /dev/null +++ b/core/game_menu/assets/page_3/coming_soon_05.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://biu4i40ck272q" +path="res://.godot/imported/coming_soon_05.png-ac2ff567503cb2e314861075714ac8fb.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://core/game_menu/assets/page_3/coming_soon_05.png" +dest_files=["res://.godot/imported/coming_soon_05.png-ac2ff567503cb2e314861075714ac8fb.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/core/game_menu/assets/page_3/quad_main.png b/core/game_menu/assets/page_3/quad_main.png deleted file mode 100644 index db661ea..0000000 Binary files a/core/game_menu/assets/page_3/quad_main.png and /dev/null differ diff --git a/core/game_menu/collectible_gallery.gd b/core/game_menu/collectible_gallery.gd index ea1a87b..3f530ad 100644 --- a/core/game_menu/collectible_gallery.gd +++ b/core/game_menu/collectible_gallery.gd @@ -19,6 +19,8 @@ func setup() -> void: _add_collectible(collectible) if unlocked_collectible_ids.has(collectible.id): _unlock_collectible(collectible.id) + if is_inside_tree(): + await get_tree().process_frame func on_collectible_unlocked(collectible_id: StringName) -> void: _unlock_collectible(collectible_id) diff --git a/core/game_menu/game_menu.gd b/core/game_menu/game_menu.gd index fe85df5..362d5a6 100644 --- a/core/game_menu/game_menu.gd +++ b/core/game_menu/game_menu.gd @@ -1,8 +1,6 @@ extends Control @onready var tabs: Array[GameMenuTab] = [$%Tab1, $%Tab2, $%Tab3] -@onready var pages: Array[GameMenuPage] = [$%Page1, $%Page2, $%Page3] -var current_index = 0 func _ready() -> void: for tab: GameMenuTab in tabs: @@ -10,10 +8,12 @@ func _ready() -> void: on_tab_pressed(0, true) + + func on_tab_pressed(index: int, disable_animation: bool = false) -> void: - for page in pages: - page.hide_page() - + if BookAPI.is_busy() and not disable_animation: + return + for tab in tabs: if tab.index == index: if disable_animation: @@ -25,9 +25,5 @@ func on_tab_pressed(index: int, disable_animation: bool = false) -> void: tab.deselect_without_animation() else: tab.deselect() - - pages[index].show_page() - current_index = index -func open() -> void: - pages[current_index].show_page() + BookAPI.go_to_page((index + 1) * 2) diff --git a/core/game_menu/game_menu.tscn b/core/game_menu/game_menu.tscn index c4c3faa..92177a0 100644 --- a/core/game_menu/game_menu.tscn +++ b/core/game_menu/game_menu.tscn @@ -8,13 +8,2801 @@ [ext_resource type="Texture2D" uid="uid://bdfsfteuwk5bu" path="res://core/game_menu/assets/page_1/ticket3.png" id="4_y36g7"] [ext_resource type="Texture2D" uid="uid://dq7owenentst2" path="res://core/game_menu/assets/page_1/ticket2.png" id="5_7d256"] [ext_resource type="PackedScene" uid="uid://c8b5sqnocx8dr" path="res://core/game_menu/page_3.tscn" id="5_yq2ch"] +[ext_resource type="Script" uid="uid://ctw83iqgqxjjt" path="res://addons/PageFlip/page_flip.gd" id="9_hr6qm"] +[ext_resource type="Texture2D" uid="uid://clvc6nlbgyvp1" path="res://core/game_menu/assets/page_1/rings.png" id="9_nq5sp"] +[ext_resource type="Texture2D" uid="uid://cen51wqc15b14" path="res://addons/PageFlip/Assets/blank_page.png" id="10_35sf4"] +[ext_resource type="Texture2D" uid="uid://cit41jypw2sy1" path="res://addons/PageFlip/Assets/spine.png" id="11_5shjh"] +[ext_resource type="Texture2D" uid="uid://dbdwbowx32d3v" path="res://addons/PageFlip/Assets/front.png" id="14_3hj3t"] +[ext_resource type="Script" uid="uid://ce5ib2f4qff24" path="res://addons/PageFlip/page_rigger.gd" id="15_5d0t0"] +[ext_resource type="PackedScene" uid="uid://c7t3p8sp54apy" path="res://core/game_menu/highlighted_photo.tscn" id="16_hr6qm"] +[ext_resource type="Texture2D" uid="uid://rm7bporlv3cf" path="res://addons/PageFlip/Assets/shadow_gradient.tres" id="16_pjwsa"] + +[sub_resource type="ViewportTexture" id="ViewportTexture_7r0mx"] +viewport_path = NodePath("Viewports/Covers/CoverFrontIn") + +[sub_resource type="Animation" id="Animation_cuh5i"] +length = 0.001 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Visual/DynamicFlipPoly:texture") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [SubResource("ViewportTexture_7r0mx")] +} + +[sub_resource type="Animation" id="Animation_hr6qm"] +length = 1.3 +step = 0.01 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Visual/DynamicFlipPoly:z_index") +tracks/0/interp = 0 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.195, 0.845), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [10, 25, 10] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_0:rotation_degrees") +tracks/1/interp = 2 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0, 0.338, 0.65, 1.157, 1.2571, 1.3), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, -6.0, -90.0, -175.5, -179.24, -179.9] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_0/Bone_1_0:rotation_degrees") +tracks/2/interp = 2 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0, 0.338, 1.157, 1.26425, 1.3), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, -6.001931390203242, 0.0, 0.0, 0.0] +} +tracks/3/type = "value" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_0/Bone_1_0/Bone_2_0:rotation_degrees") +tracks/3/interp = 2 +tracks/3/loop_wrap = true +tracks/3/keys = { +"times": PackedFloat32Array(0, 0.338, 1.157, 1.26425, 1.3), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, -7.389244300328208, 0.0, 0.0, 0.0] +} +tracks/4/type = "value" +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_0/Bone_1_0/Bone_2_0/Bone_3_0:rotation_degrees") +tracks/4/interp = 2 +tracks/4/loop_wrap = true +tracks/4/keys = { +"times": PackedFloat32Array(0, 0.338, 1.157, 1.26425, 1.3), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, -8.345020405917698, 0.0, 0.0, 0.0] +} +tracks/5/type = "value" +tracks/5/imported = false +tracks/5/enabled = true +tracks/5/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_0/Bone_1_0/Bone_2_0/Bone_3_0/Bone_4_0:rotation_degrees") +tracks/5/interp = 2 +tracks/5/loop_wrap = true +tracks/5/keys = { +"times": PackedFloat32Array(0, 0.338, 1.157, 1.26425, 1.3), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, -9.097226839189839, 0.0, 0.0, 0.0] +} +tracks/6/type = "value" +tracks/6/imported = false +tracks/6/enabled = true +tracks/6/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_0/Bone_1_0/Bone_2_0/Bone_3_0/Bone_4_0/Bone_5_0:rotation_degrees") +tracks/6/interp = 2 +tracks/6/loop_wrap = true +tracks/6/keys = { +"times": PackedFloat32Array(0, 0.338, 1.157, 1.26425, 1.3), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, -9.727069700430247, 0.0, 0.0, 0.0] +} +tracks/7/type = "value" +tracks/7/imported = false +tracks/7/enabled = true +tracks/7/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_0/Bone_1_0/Bone_2_0/Bone_3_0/Bone_4_0/Bone_5_0/Bone_6_0:rotation_degrees") +tracks/7/interp = 2 +tracks/7/loop_wrap = true +tracks/7/keys = { +"times": PackedFloat32Array(0, 0.338, 1.157, 1.26425, 1.3), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, -10.2739252519949, 0.0, 0.0, 0.0] +} +tracks/8/type = "value" +tracks/8/imported = false +tracks/8/enabled = true +tracks/8/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_0/Bone_1_0/Bone_2_0/Bone_3_0/Bone_4_0/Bone_5_0/Bone_6_0/Bone_7_0:rotation_degrees") +tracks/8/interp = 2 +tracks/8/loop_wrap = true +tracks/8/keys = { +"times": PackedFloat32Array(0, 0.338, 1.157, 1.26425, 1.3), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, -10.760202352096067, 0.0, 0.0, 0.0] +} +tracks/9/type = "value" +tracks/9/imported = false +tracks/9/enabled = true +tracks/9/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_0/Bone_1_0/Bone_2_0/Bone_3_0/Bone_4_0/Bone_5_0/Bone_6_0/Bone_7_0/Bone_8_0:rotation_degrees") +tracks/9/interp = 2 +tracks/9/loop_wrap = true +tracks/9/keys = { +"times": PackedFloat32Array(0, 0.338, 1.157, 1.26425, 1.3), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, -11.200000000000001, 0.0, 0.0, 0.0] +} +tracks/10/type = "value" +tracks/10/imported = false +tracks/10/enabled = true +tracks/10/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_1:rotation_degrees") +tracks/10/interp = 2 +tracks/10/loop_wrap = true +tracks/10/keys = { +"times": PackedFloat32Array(0, 0.3224, 0.65, 1.1726, 1.26178, 1.3), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, -7.800000000000001, -90.0, -175.5, -179.24, -179.9] +} +tracks/11/type = "value" +tracks/11/imported = false +tracks/11/enabled = true +tracks/11/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_1/Bone_1_1:rotation_degrees") +tracks/11/interp = 2 +tracks/11/loop_wrap = true +tracks/11/keys = { +"times": PackedFloat32Array(0, 0.3224, 1.1726, 1.26815, 1.3), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, -7.802510807264214, 0.0, 0.0, 0.0] +} +tracks/12/type = "value" +tracks/12/imported = false +tracks/12/enabled = true +tracks/12/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_1/Bone_1_1/Bone_2_1:rotation_degrees") +tracks/12/interp = 2 +tracks/12/loop_wrap = true +tracks/12/keys = { +"times": PackedFloat32Array(0, 0.3224, 1.1726, 1.26815, 1.3), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, -9.60601759042667, 0.0, 0.0, 0.0] +} +tracks/13/type = "value" +tracks/13/imported = false +tracks/13/enabled = true +tracks/13/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_1/Bone_1_1/Bone_2_1/Bone_3_1:rotation_degrees") +tracks/13/interp = 2 +tracks/13/loop_wrap = true +tracks/13/keys = { +"times": PackedFloat32Array(0, 0.3224, 1.1726, 1.26815, 1.3), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, -10.848526527693007, 0.0, 0.0, 0.0] +} +tracks/14/type = "value" +tracks/14/imported = false +tracks/14/enabled = true +tracks/14/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_1/Bone_1_1/Bone_2_1/Bone_3_1/Bone_4_1:rotation_degrees") +tracks/14/interp = 2 +tracks/14/loop_wrap = true +tracks/14/keys = { +"times": PackedFloat32Array(0, 0.3224, 1.1726, 1.26815, 1.3), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, -11.82639489094679, 0.0, 0.0, 0.0] +} +tracks/15/type = "value" +tracks/15/imported = false +tracks/15/enabled = true +tracks/15/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_1/Bone_1_1/Bone_2_1/Bone_3_1/Bone_4_1/Bone_5_1:rotation_degrees") +tracks/15/interp = 2 +tracks/15/loop_wrap = true +tracks/15/keys = { +"times": PackedFloat32Array(0, 0.3224, 1.1726, 1.26815, 1.3), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, -12.64519061055932, 0.0, 0.0, 0.0] +} +tracks/16/type = "value" +tracks/16/imported = false +tracks/16/enabled = true +tracks/16/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_1/Bone_1_1/Bone_2_1/Bone_3_1/Bone_4_1/Bone_5_1/Bone_6_1:rotation_degrees") +tracks/16/interp = 2 +tracks/16/loop_wrap = true +tracks/16/keys = { +"times": PackedFloat32Array(0, 0.3224, 1.1726, 1.26815, 1.3), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, -13.356102827593368, 0.0, 0.0, 0.0] +} +tracks/17/type = "value" +tracks/17/imported = false +tracks/17/enabled = true +tracks/17/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_1/Bone_1_1/Bone_2_1/Bone_3_1/Bone_4_1/Bone_5_1/Bone_6_1/Bone_7_1:rotation_degrees") +tracks/17/interp = 2 +tracks/17/loop_wrap = true +tracks/17/keys = { +"times": PackedFloat32Array(0, 0.3224, 1.1726, 1.26815, 1.3), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, -13.988263057724888, 0.0, 0.0, 0.0] +} +tracks/18/type = "value" +tracks/18/imported = false +tracks/18/enabled = true +tracks/18/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_1/Bone_1_1/Bone_2_1/Bone_3_1/Bone_4_1/Bone_5_1/Bone_6_1/Bone_7_1/Bone_8_1:rotation_degrees") +tracks/18/interp = 2 +tracks/18/loop_wrap = true +tracks/18/keys = { +"times": PackedFloat32Array(0, 0.3224, 1.1726, 1.26815, 1.3), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, -14.56, 0.0, 0.0, 0.0] +} +tracks/19/type = "value" +tracks/19/imported = false +tracks/19/enabled = true +tracks/19/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_2:rotation_degrees") +tracks/19/interp = 2 +tracks/19/loop_wrap = true +tracks/19/keys = { +"times": PackedFloat32Array(0, 0.3068, 0.65, 1.1882, 1.26646, 1.3), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, -9.6, -90.0, -175.5, -179.24, -179.9] +} +tracks/20/type = "value" +tracks/20/imported = false +tracks/20/enabled = true +tracks/20/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_2/Bone_1_2:rotation_degrees") +tracks/20/interp = 2 +tracks/20/loop_wrap = true +tracks/20/keys = { +"times": PackedFloat32Array(0, 0.3068, 1.1882, 1.27205, 1.3), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, -9.603090224325188, 0.0, 0.0, 0.0] +} +tracks/21/type = "value" +tracks/21/imported = false +tracks/21/enabled = true +tracks/21/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_2/Bone_1_2/Bone_2_2:rotation_degrees") +tracks/21/interp = 2 +tracks/21/loop_wrap = true +tracks/21/keys = { +"times": PackedFloat32Array(0, 0.3068, 1.1882, 1.27205, 1.3), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, -11.822790880525133, 0.0, 0.0, 0.0] +} +tracks/22/type = "value" +tracks/22/imported = false +tracks/22/enabled = true +tracks/22/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_2/Bone_1_2/Bone_2_2/Bone_3_2:rotation_degrees") +tracks/22/interp = 2 +tracks/22/loop_wrap = true +tracks/22/keys = { +"times": PackedFloat32Array(0, 0.3068, 1.1882, 1.27205, 1.3), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, -13.352032649468317, 0.0, 0.0, 0.0] +} +tracks/23/type = "value" +tracks/23/imported = false +tracks/23/enabled = true +tracks/23/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_2/Bone_1_2/Bone_2_2/Bone_3_2/Bone_4_2:rotation_degrees") +tracks/23/interp = 2 +tracks/23/loop_wrap = true +tracks/23/keys = { +"times": PackedFloat32Array(0, 0.3068, 1.1882, 1.27205, 1.3), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, -14.555562942703743, 0.0, 0.0, 0.0] +} +tracks/24/type = "value" +tracks/24/imported = false +tracks/24/enabled = true +tracks/24/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_2/Bone_1_2/Bone_2_2/Bone_3_2/Bone_4_2/Bone_5_2:rotation_degrees") +tracks/24/interp = 2 +tracks/24/loop_wrap = true +tracks/24/keys = { +"times": PackedFloat32Array(0, 0.3068, 1.1882, 1.27205, 1.3), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, -15.563311520688394, 0.0, 0.0, 0.0] +} +tracks/25/type = "value" +tracks/25/imported = false +tracks/25/enabled = true +tracks/25/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_2/Bone_1_2/Bone_2_2/Bone_3_2/Bone_4_2/Bone_5_2/Bone_6_2:rotation_degrees") +tracks/25/interp = 2 +tracks/25/loop_wrap = true +tracks/25/keys = { +"times": PackedFloat32Array(0, 0.3068, 1.1882, 1.27205, 1.3), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, -16.43828040319184, 0.0, 0.0, 0.0] +} +tracks/26/type = "value" +tracks/26/imported = false +tracks/26/enabled = true +tracks/26/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_2/Bone_1_2/Bone_2_2/Bone_3_2/Bone_4_2/Bone_5_2/Bone_6_2/Bone_7_2:rotation_degrees") +tracks/26/interp = 2 +tracks/26/loop_wrap = true +tracks/26/keys = { +"times": PackedFloat32Array(0, 0.3068, 1.1882, 1.27205, 1.3), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, -17.216323763353707, 0.0, 0.0, 0.0] +} +tracks/27/type = "value" +tracks/27/imported = false +tracks/27/enabled = true +tracks/27/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_2/Bone_1_2/Bone_2_2/Bone_3_2/Bone_4_2/Bone_5_2/Bone_6_2/Bone_7_2/Bone_8_2:rotation_degrees") +tracks/27/interp = 2 +tracks/27/loop_wrap = true +tracks/27/keys = { +"times": PackedFloat32Array(0, 0.3068, 1.1882, 1.27205, 1.3), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, -17.92, 0.0, 0.0, 0.0] +} +tracks/28/type = "value" +tracks/28/imported = false +tracks/28/enabled = true +tracks/28/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_3:rotation_degrees") +tracks/28/interp = 2 +tracks/28/loop_wrap = true +tracks/28/keys = { +"times": PackedFloat32Array(0, 0.2912, 0.65, 1.2038, 1.27114, 1.3), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, -11.4, -90.0, -175.5, -179.24, -179.9] +} +tracks/29/type = "value" +tracks/29/imported = false +tracks/29/enabled = true +tracks/29/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_3/Bone_1_3:rotation_degrees") +tracks/29/interp = 2 +tracks/29/loop_wrap = true +tracks/29/keys = { +"times": PackedFloat32Array(0, 0.2912, 1.2038, 1.27595, 1.3), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, -11.40366964138616, 0.0, 0.0, 0.0] +} +tracks/30/type = "value" +tracks/30/imported = false +tracks/30/enabled = true +tracks/30/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_3/Bone_1_3/Bone_2_3:rotation_degrees") +tracks/30/interp = 2 +tracks/30/loop_wrap = true +tracks/30/keys = { +"times": PackedFloat32Array(0, 0.2912, 1.2038, 1.27595, 1.3), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, -14.039564170623596, 0.0, 0.0, 0.0] +} +tracks/31/type = "value" +tracks/31/imported = false +tracks/31/enabled = true +tracks/31/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_3/Bone_1_3/Bone_2_3/Bone_3_3:rotation_degrees") +tracks/31/interp = 2 +tracks/31/loop_wrap = true +tracks/31/keys = { +"times": PackedFloat32Array(0, 0.2912, 1.2038, 1.27595, 1.3), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, -15.855538771243626, 0.0, 0.0, 0.0] +} +tracks/32/type = "value" +tracks/32/imported = false +tracks/32/enabled = true +tracks/32/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_3/Bone_1_3/Bone_2_3/Bone_3_3/Bone_4_3:rotation_degrees") +tracks/32/interp = 2 +tracks/32/loop_wrap = true +tracks/32/keys = { +"times": PackedFloat32Array(0, 0.2912, 1.2038, 1.27595, 1.3), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, -17.284730994460695, 0.0, 0.0, 0.0] +} +tracks/33/type = "value" +tracks/33/imported = false +tracks/33/enabled = true +tracks/33/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_3/Bone_1_3/Bone_2_3/Bone_3_3/Bone_4_3/Bone_5_3:rotation_degrees") +tracks/33/interp = 2 +tracks/33/loop_wrap = true +tracks/33/keys = { +"times": PackedFloat32Array(0, 0.2912, 1.2038, 1.27595, 1.3), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, -18.481432430817467, 0.0, 0.0, 0.0] +} +tracks/34/type = "value" +tracks/34/imported = false +tracks/34/enabled = true +tracks/34/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_3/Bone_1_3/Bone_2_3/Bone_3_3/Bone_4_3/Bone_5_3/Bone_6_3:rotation_degrees") +tracks/34/interp = 2 +tracks/34/loop_wrap = true +tracks/34/keys = { +"times": PackedFloat32Array(0, 0.2912, 1.2038, 1.27595, 1.3), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, -19.520457978790308, 0.0, 0.0, 0.0] +} +tracks/35/type = "value" +tracks/35/imported = false +tracks/35/enabled = true +tracks/35/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_3/Bone_1_3/Bone_2_3/Bone_3_3/Bone_4_3/Bone_5_3/Bone_6_3/Bone_7_3:rotation_degrees") +tracks/35/interp = 2 +tracks/35/loop_wrap = true +tracks/35/keys = { +"times": PackedFloat32Array(0, 0.2912, 1.2038, 1.27595, 1.3), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, -20.444384468982527, 0.0, 0.0, 0.0] +} +tracks/36/type = "value" +tracks/36/imported = false +tracks/36/enabled = true +tracks/36/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_3/Bone_1_3/Bone_2_3/Bone_3_3/Bone_4_3/Bone_5_3/Bone_6_3/Bone_7_3/Bone_8_3:rotation_degrees") +tracks/36/interp = 2 +tracks/36/loop_wrap = true +tracks/36/keys = { +"times": PackedFloat32Array(0, 0.2912, 1.2038, 1.27595, 1.3), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, -21.28, 0.0, 0.0, 0.0] +} +tracks/37/type = "value" +tracks/37/imported = false +tracks/37/enabled = true +tracks/37/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_4:rotation_degrees") +tracks/37/interp = 2 +tracks/37/loop_wrap = true +tracks/37/keys = { +"times": PackedFloat32Array(0, 0.2756, 0.65, 1.2194, 1.27582, 1.3), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, -13.2, -90.0, -175.5, -179.24, -179.9] +} +tracks/38/type = "value" +tracks/38/imported = false +tracks/38/enabled = true +tracks/38/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_4/Bone_1_4:rotation_degrees") +tracks/38/interp = 2 +tracks/38/loop_wrap = true +tracks/38/keys = { +"times": PackedFloat32Array(0, 0.2756, 1.2194, 1.27985, 1.3), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, -13.204249058447132, 0.0, 0.0, 0.0] +} +tracks/39/type = "value" +tracks/39/imported = false +tracks/39/enabled = true +tracks/39/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_4/Bone_1_4/Bone_2_4:rotation_degrees") +tracks/39/interp = 2 +tracks/39/loop_wrap = true +tracks/39/keys = { +"times": PackedFloat32Array(0, 0.2756, 1.2194, 1.27985, 1.3), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, -16.256337460722058, 0.0, 0.0, 0.0] +} +tracks/40/type = "value" +tracks/40/imported = false +tracks/40/enabled = true +tracks/40/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_4/Bone_1_4/Bone_2_4/Bone_3_4:rotation_degrees") +tracks/40/interp = 2 +tracks/40/loop_wrap = true +tracks/40/keys = { +"times": PackedFloat32Array(0, 0.2756, 1.2194, 1.27985, 1.3), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, -18.359044893018936, 0.0, 0.0, 0.0] +} +tracks/41/type = "value" +tracks/41/imported = false +tracks/41/enabled = true +tracks/41/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_4/Bone_1_4/Bone_2_4/Bone_3_4/Bone_4_4:rotation_degrees") +tracks/41/interp = 2 +tracks/41/loop_wrap = true +tracks/41/keys = { +"times": PackedFloat32Array(0, 0.2756, 1.2194, 1.27985, 1.3), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, -20.013899046217645, 0.0, 0.0, 0.0] +} +tracks/42/type = "value" +tracks/42/imported = false +tracks/42/enabled = true +tracks/42/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_4/Bone_1_4/Bone_2_4/Bone_3_4/Bone_4_4/Bone_5_4:rotation_degrees") +tracks/42/interp = 2 +tracks/42/loop_wrap = true +tracks/42/keys = { +"times": PackedFloat32Array(0, 0.2756, 1.2194, 1.27985, 1.3), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, -21.39955334094654, 0.0, 0.0, 0.0] +} +tracks/43/type = "value" +tracks/43/imported = false +tracks/43/enabled = true +tracks/43/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_4/Bone_1_4/Bone_2_4/Bone_3_4/Bone_4_4/Bone_5_4/Bone_6_4:rotation_degrees") +tracks/43/interp = 2 +tracks/43/loop_wrap = true +tracks/43/keys = { +"times": PackedFloat32Array(0, 0.2756, 1.2194, 1.27985, 1.3), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, -22.602635554388776, 0.0, 0.0, 0.0] +} +tracks/44/type = "value" +tracks/44/imported = false +tracks/44/enabled = true +tracks/44/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_4/Bone_1_4/Bone_2_4/Bone_3_4/Bone_4_4/Bone_5_4/Bone_6_4/Bone_7_4:rotation_degrees") +tracks/44/interp = 2 +tracks/44/loop_wrap = true +tracks/44/keys = { +"times": PackedFloat32Array(0, 0.2756, 1.2194, 1.27985, 1.3), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, -23.672445174611347, 0.0, 0.0, 0.0] +} +tracks/45/type = "value" +tracks/45/imported = false +tracks/45/enabled = true +tracks/45/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_4/Bone_1_4/Bone_2_4/Bone_3_4/Bone_4_4/Bone_5_4/Bone_6_4/Bone_7_4/Bone_8_4:rotation_degrees") +tracks/45/interp = 2 +tracks/45/loop_wrap = true +tracks/45/keys = { +"times": PackedFloat32Array(0, 0.2756, 1.2194, 1.27985, 1.3), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, -24.64, 0.0, 0.0, 0.0] +} +tracks/46/type = "value" +tracks/46/imported = false +tracks/46/enabled = true +tracks/46/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_5:rotation_degrees") +tracks/46/interp = 2 +tracks/46/loop_wrap = true +tracks/46/keys = { +"times": PackedFloat32Array(0, 0.26, 0.65, 1.235, 1.2805, 1.3), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, -15.0, -90.0, -175.5, -179.24, -179.9] +} +tracks/47/type = "value" +tracks/47/imported = false +tracks/47/enabled = true +tracks/47/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_5/Bone_1_5:rotation_degrees") +tracks/47/interp = 2 +tracks/47/loop_wrap = true +tracks/47/keys = { +"times": PackedFloat32Array(0, 0.26, 1.235, 1.28375, 1.3), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, -15.004828475508104, 0.0, 0.0, 0.0] +} +tracks/48/type = "value" +tracks/48/imported = false +tracks/48/enabled = true +tracks/48/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_5/Bone_1_5/Bone_2_5:rotation_degrees") +tracks/48/interp = 2 +tracks/48/loop_wrap = true +tracks/48/keys = { +"times": PackedFloat32Array(0, 0.26, 1.235, 1.28375, 1.3), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, -18.473110750820517, 0.0, 0.0, 0.0] +} +tracks/49/type = "value" +tracks/49/imported = false +tracks/49/enabled = true +tracks/49/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_5/Bone_1_5/Bone_2_5/Bone_3_5:rotation_degrees") +tracks/49/interp = 2 +tracks/49/loop_wrap = true +tracks/49/keys = { +"times": PackedFloat32Array(0, 0.26, 1.235, 1.28375, 1.3), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, -20.862551014794242, 0.0, 0.0, 0.0] +} +tracks/50/type = "value" +tracks/50/imported = false +tracks/50/enabled = true +tracks/50/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_5/Bone_1_5/Bone_2_5/Bone_3_5/Bone_4_5:rotation_degrees") +tracks/50/interp = 2 +tracks/50/loop_wrap = true +tracks/50/keys = { +"times": PackedFloat32Array(0, 0.26, 1.235, 1.28375, 1.3), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, -22.743067097974595, 0.0, 0.0, 0.0] +} +tracks/51/type = "value" +tracks/51/imported = false +tracks/51/enabled = true +tracks/51/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_5/Bone_1_5/Bone_2_5/Bone_3_5/Bone_4_5/Bone_5_5:rotation_degrees") +tracks/51/interp = 2 +tracks/51/loop_wrap = true +tracks/51/keys = { +"times": PackedFloat32Array(0, 0.26, 1.235, 1.28375, 1.3), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, -24.317674251075616, 0.0, 0.0, 0.0] +} +tracks/52/type = "value" +tracks/52/imported = false +tracks/52/enabled = true +tracks/52/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_5/Bone_1_5/Bone_2_5/Bone_3_5/Bone_4_5/Bone_5_5/Bone_6_5:rotation_degrees") +tracks/52/interp = 2 +tracks/52/loop_wrap = true +tracks/52/keys = { +"times": PackedFloat32Array(0, 0.26, 1.235, 1.28375, 1.3), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, -25.684813129987248, 0.0, 0.0, 0.0] +} +tracks/53/type = "value" +tracks/53/imported = false +tracks/53/enabled = true +tracks/53/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_5/Bone_1_5/Bone_2_5/Bone_3_5/Bone_4_5/Bone_5_5/Bone_6_5/Bone_7_5:rotation_degrees") +tracks/53/interp = 2 +tracks/53/loop_wrap = true +tracks/53/keys = { +"times": PackedFloat32Array(0, 0.26, 1.235, 1.28375, 1.3), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, -26.900505880240168, 0.0, 0.0, 0.0] +} +tracks/54/type = "value" +tracks/54/imported = false +tracks/54/enabled = true +tracks/54/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_5/Bone_1_5/Bone_2_5/Bone_3_5/Bone_4_5/Bone_5_5/Bone_6_5/Bone_7_5/Bone_8_5:rotation_degrees") +tracks/54/interp = 2 +tracks/54/loop_wrap = true +tracks/54/keys = { +"times": PackedFloat32Array(0, 0.26, 1.235, 1.28375, 1.3), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, -28.0, 0.0, 0.0, 0.0] +} +tracks/55/type = "value" +tracks/55/imported = false +tracks/55/enabled = true +tracks/55/path = NodePath("Visual/DynamicFlipPoly:scale") +tracks/55/interp = 1 +tracks/55/loop_wrap = true +tracks/55/keys = { +"times": PackedFloat32Array(0, 0.65, 0.78, 1.105, 1.3), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(1, 1), Vector2(0.88, 1), Vector2(1, 1), Vector2(1, 1)] +} +tracks/56/type = "method" +tracks/56/imported = false +tracks/56/enabled = true +tracks/56/path = NodePath("Visual/DynamicFlipPoly") +tracks/56/interp = 1 +tracks/56/loop_wrap = true +tracks/56/keys = { +"times": PackedFloat32Array(0.65, 1.3), +"transitions": PackedFloat32Array(1, 1), +"values": [{ +"args": [], +"method": &"_trigger_midpoint" +}, { +"args": [], +"method": &"_trigger_end" +}] +} + +[sub_resource type="Animation" id="Animation_35sf4"] +length = 1.3 +step = 0.01 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Visual/DynamicFlipPoly:z_index") +tracks/0/interp = 0 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.195, 0.845), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [10, 25, 10] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_0:rotation_degrees") +tracks/1/interp = 2 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0, 0.338, 0.65, 1.157, 1.2571, 1.3), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1), +"update": 0, +"values": [-179.9, -173.9, -90.0, -4.5, -0.6750000000000003, 0.0] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_0/Bone_1_0:rotation_degrees") +tracks/2/interp = 2 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0, 0.338, 1.157, 1.26425, 1.3), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, 6.001931390203242, 0.0, 0.0, 0.0] +} +tracks/3/type = "value" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_0/Bone_1_0/Bone_2_0:rotation_degrees") +tracks/3/interp = 2 +tracks/3/loop_wrap = true +tracks/3/keys = { +"times": PackedFloat32Array(0, 0.338, 1.157, 1.26425, 1.3), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, 7.389244300328208, 0.0, 0.0, 0.0] +} +tracks/4/type = "value" +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_0/Bone_1_0/Bone_2_0/Bone_3_0:rotation_degrees") +tracks/4/interp = 2 +tracks/4/loop_wrap = true +tracks/4/keys = { +"times": PackedFloat32Array(0, 0.338, 1.157, 1.26425, 1.3), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, 8.345020405917698, 0.0, 0.0, 0.0] +} +tracks/5/type = "value" +tracks/5/imported = false +tracks/5/enabled = true +tracks/5/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_0/Bone_1_0/Bone_2_0/Bone_3_0/Bone_4_0:rotation_degrees") +tracks/5/interp = 2 +tracks/5/loop_wrap = true +tracks/5/keys = { +"times": PackedFloat32Array(0, 0.338, 1.157, 1.26425, 1.3), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, 9.097226839189839, 0.0, 0.0, 0.0] +} +tracks/6/type = "value" +tracks/6/imported = false +tracks/6/enabled = true +tracks/6/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_0/Bone_1_0/Bone_2_0/Bone_3_0/Bone_4_0/Bone_5_0:rotation_degrees") +tracks/6/interp = 2 +tracks/6/loop_wrap = true +tracks/6/keys = { +"times": PackedFloat32Array(0, 0.338, 1.157, 1.26425, 1.3), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, 9.727069700430247, 0.0, 0.0, 0.0] +} +tracks/7/type = "value" +tracks/7/imported = false +tracks/7/enabled = true +tracks/7/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_0/Bone_1_0/Bone_2_0/Bone_3_0/Bone_4_0/Bone_5_0/Bone_6_0:rotation_degrees") +tracks/7/interp = 2 +tracks/7/loop_wrap = true +tracks/7/keys = { +"times": PackedFloat32Array(0, 0.338, 1.157, 1.26425, 1.3), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, 10.2739252519949, 0.0, 0.0, 0.0] +} +tracks/8/type = "value" +tracks/8/imported = false +tracks/8/enabled = true +tracks/8/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_0/Bone_1_0/Bone_2_0/Bone_3_0/Bone_4_0/Bone_5_0/Bone_6_0/Bone_7_0:rotation_degrees") +tracks/8/interp = 2 +tracks/8/loop_wrap = true +tracks/8/keys = { +"times": PackedFloat32Array(0, 0.338, 1.157, 1.26425, 1.3), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, 10.760202352096067, 0.0, 0.0, 0.0] +} +tracks/9/type = "value" +tracks/9/imported = false +tracks/9/enabled = true +tracks/9/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_0/Bone_1_0/Bone_2_0/Bone_3_0/Bone_4_0/Bone_5_0/Bone_6_0/Bone_7_0/Bone_8_0:rotation_degrees") +tracks/9/interp = 2 +tracks/9/loop_wrap = true +tracks/9/keys = { +"times": PackedFloat32Array(0, 0.338, 1.157, 1.26425, 1.3), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, 11.200000000000001, 0.0, 0.0, 0.0] +} +tracks/10/type = "value" +tracks/10/imported = false +tracks/10/enabled = true +tracks/10/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_1:rotation_degrees") +tracks/10/interp = 2 +tracks/10/loop_wrap = true +tracks/10/keys = { +"times": PackedFloat32Array(0, 0.3224, 0.65, 1.1726, 1.26178, 1.3), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1), +"update": 0, +"values": [-179.9, -172.1, -90.0, -4.5, -0.6750000000000003, 0.0] +} +tracks/11/type = "value" +tracks/11/imported = false +tracks/11/enabled = true +tracks/11/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_1/Bone_1_1:rotation_degrees") +tracks/11/interp = 2 +tracks/11/loop_wrap = true +tracks/11/keys = { +"times": PackedFloat32Array(0, 0.3224, 1.1726, 1.26815, 1.3), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, 7.802510807264214, 0.0, 0.0, 0.0] +} +tracks/12/type = "value" +tracks/12/imported = false +tracks/12/enabled = true +tracks/12/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_1/Bone_1_1/Bone_2_1:rotation_degrees") +tracks/12/interp = 2 +tracks/12/loop_wrap = true +tracks/12/keys = { +"times": PackedFloat32Array(0, 0.3224, 1.1726, 1.26815, 1.3), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, 9.60601759042667, 0.0, 0.0, 0.0] +} +tracks/13/type = "value" +tracks/13/imported = false +tracks/13/enabled = true +tracks/13/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_1/Bone_1_1/Bone_2_1/Bone_3_1:rotation_degrees") +tracks/13/interp = 2 +tracks/13/loop_wrap = true +tracks/13/keys = { +"times": PackedFloat32Array(0, 0.3224, 1.1726, 1.26815, 1.3), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, 10.848526527693007, 0.0, 0.0, 0.0] +} +tracks/14/type = "value" +tracks/14/imported = false +tracks/14/enabled = true +tracks/14/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_1/Bone_1_1/Bone_2_1/Bone_3_1/Bone_4_1:rotation_degrees") +tracks/14/interp = 2 +tracks/14/loop_wrap = true +tracks/14/keys = { +"times": PackedFloat32Array(0, 0.3224, 1.1726, 1.26815, 1.3), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, 11.82639489094679, 0.0, 0.0, 0.0] +} +tracks/15/type = "value" +tracks/15/imported = false +tracks/15/enabled = true +tracks/15/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_1/Bone_1_1/Bone_2_1/Bone_3_1/Bone_4_1/Bone_5_1:rotation_degrees") +tracks/15/interp = 2 +tracks/15/loop_wrap = true +tracks/15/keys = { +"times": PackedFloat32Array(0, 0.3224, 1.1726, 1.26815, 1.3), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, 12.64519061055932, 0.0, 0.0, 0.0] +} +tracks/16/type = "value" +tracks/16/imported = false +tracks/16/enabled = true +tracks/16/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_1/Bone_1_1/Bone_2_1/Bone_3_1/Bone_4_1/Bone_5_1/Bone_6_1:rotation_degrees") +tracks/16/interp = 2 +tracks/16/loop_wrap = true +tracks/16/keys = { +"times": PackedFloat32Array(0, 0.3224, 1.1726, 1.26815, 1.3), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, 13.356102827593368, 0.0, 0.0, 0.0] +} +tracks/17/type = "value" +tracks/17/imported = false +tracks/17/enabled = true +tracks/17/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_1/Bone_1_1/Bone_2_1/Bone_3_1/Bone_4_1/Bone_5_1/Bone_6_1/Bone_7_1:rotation_degrees") +tracks/17/interp = 2 +tracks/17/loop_wrap = true +tracks/17/keys = { +"times": PackedFloat32Array(0, 0.3224, 1.1726, 1.26815, 1.3), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, 13.988263057724888, 0.0, 0.0, 0.0] +} +tracks/18/type = "value" +tracks/18/imported = false +tracks/18/enabled = true +tracks/18/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_1/Bone_1_1/Bone_2_1/Bone_3_1/Bone_4_1/Bone_5_1/Bone_6_1/Bone_7_1/Bone_8_1:rotation_degrees") +tracks/18/interp = 2 +tracks/18/loop_wrap = true +tracks/18/keys = { +"times": PackedFloat32Array(0, 0.3224, 1.1726, 1.26815, 1.3), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, 14.56, 0.0, 0.0, 0.0] +} +tracks/19/type = "value" +tracks/19/imported = false +tracks/19/enabled = true +tracks/19/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_2:rotation_degrees") +tracks/19/interp = 2 +tracks/19/loop_wrap = true +tracks/19/keys = { +"times": PackedFloat32Array(0, 0.3068, 0.65, 1.1882, 1.26646, 1.3), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1), +"update": 0, +"values": [-179.9, -170.3, -90.0, -4.5, -0.6750000000000003, 0.0] +} +tracks/20/type = "value" +tracks/20/imported = false +tracks/20/enabled = true +tracks/20/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_2/Bone_1_2:rotation_degrees") +tracks/20/interp = 2 +tracks/20/loop_wrap = true +tracks/20/keys = { +"times": PackedFloat32Array(0, 0.3068, 1.1882, 1.27205, 1.3), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, 9.603090224325188, 0.0, 0.0, 0.0] +} +tracks/21/type = "value" +tracks/21/imported = false +tracks/21/enabled = true +tracks/21/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_2/Bone_1_2/Bone_2_2:rotation_degrees") +tracks/21/interp = 2 +tracks/21/loop_wrap = true +tracks/21/keys = { +"times": PackedFloat32Array(0, 0.3068, 1.1882, 1.27205, 1.3), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, 11.822790880525133, 0.0, 0.0, 0.0] +} +tracks/22/type = "value" +tracks/22/imported = false +tracks/22/enabled = true +tracks/22/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_2/Bone_1_2/Bone_2_2/Bone_3_2:rotation_degrees") +tracks/22/interp = 2 +tracks/22/loop_wrap = true +tracks/22/keys = { +"times": PackedFloat32Array(0, 0.3068, 1.1882, 1.27205, 1.3), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, 13.352032649468317, 0.0, 0.0, 0.0] +} +tracks/23/type = "value" +tracks/23/imported = false +tracks/23/enabled = true +tracks/23/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_2/Bone_1_2/Bone_2_2/Bone_3_2/Bone_4_2:rotation_degrees") +tracks/23/interp = 2 +tracks/23/loop_wrap = true +tracks/23/keys = { +"times": PackedFloat32Array(0, 0.3068, 1.1882, 1.27205, 1.3), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, 14.555562942703743, 0.0, 0.0, 0.0] +} +tracks/24/type = "value" +tracks/24/imported = false +tracks/24/enabled = true +tracks/24/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_2/Bone_1_2/Bone_2_2/Bone_3_2/Bone_4_2/Bone_5_2:rotation_degrees") +tracks/24/interp = 2 +tracks/24/loop_wrap = true +tracks/24/keys = { +"times": PackedFloat32Array(0, 0.3068, 1.1882, 1.27205, 1.3), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, 15.563311520688394, 0.0, 0.0, 0.0] +} +tracks/25/type = "value" +tracks/25/imported = false +tracks/25/enabled = true +tracks/25/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_2/Bone_1_2/Bone_2_2/Bone_3_2/Bone_4_2/Bone_5_2/Bone_6_2:rotation_degrees") +tracks/25/interp = 2 +tracks/25/loop_wrap = true +tracks/25/keys = { +"times": PackedFloat32Array(0, 0.3068, 1.1882, 1.27205, 1.3), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, 16.43828040319184, 0.0, 0.0, 0.0] +} +tracks/26/type = "value" +tracks/26/imported = false +tracks/26/enabled = true +tracks/26/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_2/Bone_1_2/Bone_2_2/Bone_3_2/Bone_4_2/Bone_5_2/Bone_6_2/Bone_7_2:rotation_degrees") +tracks/26/interp = 2 +tracks/26/loop_wrap = true +tracks/26/keys = { +"times": PackedFloat32Array(0, 0.3068, 1.1882, 1.27205, 1.3), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, 17.216323763353707, 0.0, 0.0, 0.0] +} +tracks/27/type = "value" +tracks/27/imported = false +tracks/27/enabled = true +tracks/27/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_2/Bone_1_2/Bone_2_2/Bone_3_2/Bone_4_2/Bone_5_2/Bone_6_2/Bone_7_2/Bone_8_2:rotation_degrees") +tracks/27/interp = 2 +tracks/27/loop_wrap = true +tracks/27/keys = { +"times": PackedFloat32Array(0, 0.3068, 1.1882, 1.27205, 1.3), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, 17.92, 0.0, 0.0, 0.0] +} +tracks/28/type = "value" +tracks/28/imported = false +tracks/28/enabled = true +tracks/28/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_3:rotation_degrees") +tracks/28/interp = 2 +tracks/28/loop_wrap = true +tracks/28/keys = { +"times": PackedFloat32Array(0, 0.2912, 0.65, 1.2038, 1.27114, 1.3), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1), +"update": 0, +"values": [-179.9, -168.5, -90.0, -4.5, -0.6750000000000003, 0.0] +} +tracks/29/type = "value" +tracks/29/imported = false +tracks/29/enabled = true +tracks/29/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_3/Bone_1_3:rotation_degrees") +tracks/29/interp = 2 +tracks/29/loop_wrap = true +tracks/29/keys = { +"times": PackedFloat32Array(0, 0.2912, 1.2038, 1.27595, 1.3), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, 11.40366964138616, 0.0, 0.0, 0.0] +} +tracks/30/type = "value" +tracks/30/imported = false +tracks/30/enabled = true +tracks/30/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_3/Bone_1_3/Bone_2_3:rotation_degrees") +tracks/30/interp = 2 +tracks/30/loop_wrap = true +tracks/30/keys = { +"times": PackedFloat32Array(0, 0.2912, 1.2038, 1.27595, 1.3), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, 14.039564170623596, 0.0, 0.0, 0.0] +} +tracks/31/type = "value" +tracks/31/imported = false +tracks/31/enabled = true +tracks/31/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_3/Bone_1_3/Bone_2_3/Bone_3_3:rotation_degrees") +tracks/31/interp = 2 +tracks/31/loop_wrap = true +tracks/31/keys = { +"times": PackedFloat32Array(0, 0.2912, 1.2038, 1.27595, 1.3), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, 15.855538771243626, 0.0, 0.0, 0.0] +} +tracks/32/type = "value" +tracks/32/imported = false +tracks/32/enabled = true +tracks/32/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_3/Bone_1_3/Bone_2_3/Bone_3_3/Bone_4_3:rotation_degrees") +tracks/32/interp = 2 +tracks/32/loop_wrap = true +tracks/32/keys = { +"times": PackedFloat32Array(0, 0.2912, 1.2038, 1.27595, 1.3), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, 17.284730994460695, 0.0, 0.0, 0.0] +} +tracks/33/type = "value" +tracks/33/imported = false +tracks/33/enabled = true +tracks/33/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_3/Bone_1_3/Bone_2_3/Bone_3_3/Bone_4_3/Bone_5_3:rotation_degrees") +tracks/33/interp = 2 +tracks/33/loop_wrap = true +tracks/33/keys = { +"times": PackedFloat32Array(0, 0.2912, 1.2038, 1.27595, 1.3), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, 18.481432430817467, 0.0, 0.0, 0.0] +} +tracks/34/type = "value" +tracks/34/imported = false +tracks/34/enabled = true +tracks/34/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_3/Bone_1_3/Bone_2_3/Bone_3_3/Bone_4_3/Bone_5_3/Bone_6_3:rotation_degrees") +tracks/34/interp = 2 +tracks/34/loop_wrap = true +tracks/34/keys = { +"times": PackedFloat32Array(0, 0.2912, 1.2038, 1.27595, 1.3), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, 19.520457978790308, 0.0, 0.0, 0.0] +} +tracks/35/type = "value" +tracks/35/imported = false +tracks/35/enabled = true +tracks/35/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_3/Bone_1_3/Bone_2_3/Bone_3_3/Bone_4_3/Bone_5_3/Bone_6_3/Bone_7_3:rotation_degrees") +tracks/35/interp = 2 +tracks/35/loop_wrap = true +tracks/35/keys = { +"times": PackedFloat32Array(0, 0.2912, 1.2038, 1.27595, 1.3), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, 20.444384468982527, 0.0, 0.0, 0.0] +} +tracks/36/type = "value" +tracks/36/imported = false +tracks/36/enabled = true +tracks/36/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_3/Bone_1_3/Bone_2_3/Bone_3_3/Bone_4_3/Bone_5_3/Bone_6_3/Bone_7_3/Bone_8_3:rotation_degrees") +tracks/36/interp = 2 +tracks/36/loop_wrap = true +tracks/36/keys = { +"times": PackedFloat32Array(0, 0.2912, 1.2038, 1.27595, 1.3), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, 21.28, 0.0, 0.0, 0.0] +} +tracks/37/type = "value" +tracks/37/imported = false +tracks/37/enabled = true +tracks/37/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_4:rotation_degrees") +tracks/37/interp = 2 +tracks/37/loop_wrap = true +tracks/37/keys = { +"times": PackedFloat32Array(0, 0.2756, 0.65, 1.2194, 1.27582, 1.3), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1), +"update": 0, +"values": [-179.9, -166.70000000000002, -90.0, -4.5, -0.6750000000000003, 0.0] +} +tracks/38/type = "value" +tracks/38/imported = false +tracks/38/enabled = true +tracks/38/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_4/Bone_1_4:rotation_degrees") +tracks/38/interp = 2 +tracks/38/loop_wrap = true +tracks/38/keys = { +"times": PackedFloat32Array(0, 0.2756, 1.2194, 1.27985, 1.3), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, 13.204249058447132, 0.0, 0.0, 0.0] +} +tracks/39/type = "value" +tracks/39/imported = false +tracks/39/enabled = true +tracks/39/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_4/Bone_1_4/Bone_2_4:rotation_degrees") +tracks/39/interp = 2 +tracks/39/loop_wrap = true +tracks/39/keys = { +"times": PackedFloat32Array(0, 0.2756, 1.2194, 1.27985, 1.3), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, 16.256337460722058, 0.0, 0.0, 0.0] +} +tracks/40/type = "value" +tracks/40/imported = false +tracks/40/enabled = true +tracks/40/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_4/Bone_1_4/Bone_2_4/Bone_3_4:rotation_degrees") +tracks/40/interp = 2 +tracks/40/loop_wrap = true +tracks/40/keys = { +"times": PackedFloat32Array(0, 0.2756, 1.2194, 1.27985, 1.3), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, 18.359044893018936, 0.0, 0.0, 0.0] +} +tracks/41/type = "value" +tracks/41/imported = false +tracks/41/enabled = true +tracks/41/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_4/Bone_1_4/Bone_2_4/Bone_3_4/Bone_4_4:rotation_degrees") +tracks/41/interp = 2 +tracks/41/loop_wrap = true +tracks/41/keys = { +"times": PackedFloat32Array(0, 0.2756, 1.2194, 1.27985, 1.3), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, 20.013899046217645, 0.0, 0.0, 0.0] +} +tracks/42/type = "value" +tracks/42/imported = false +tracks/42/enabled = true +tracks/42/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_4/Bone_1_4/Bone_2_4/Bone_3_4/Bone_4_4/Bone_5_4:rotation_degrees") +tracks/42/interp = 2 +tracks/42/loop_wrap = true +tracks/42/keys = { +"times": PackedFloat32Array(0, 0.2756, 1.2194, 1.27985, 1.3), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, 21.39955334094654, 0.0, 0.0, 0.0] +} +tracks/43/type = "value" +tracks/43/imported = false +tracks/43/enabled = true +tracks/43/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_4/Bone_1_4/Bone_2_4/Bone_3_4/Bone_4_4/Bone_5_4/Bone_6_4:rotation_degrees") +tracks/43/interp = 2 +tracks/43/loop_wrap = true +tracks/43/keys = { +"times": PackedFloat32Array(0, 0.2756, 1.2194, 1.27985, 1.3), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, 22.602635554388776, 0.0, 0.0, 0.0] +} +tracks/44/type = "value" +tracks/44/imported = false +tracks/44/enabled = true +tracks/44/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_4/Bone_1_4/Bone_2_4/Bone_3_4/Bone_4_4/Bone_5_4/Bone_6_4/Bone_7_4:rotation_degrees") +tracks/44/interp = 2 +tracks/44/loop_wrap = true +tracks/44/keys = { +"times": PackedFloat32Array(0, 0.2756, 1.2194, 1.27985, 1.3), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, 23.672445174611347, 0.0, 0.0, 0.0] +} +tracks/45/type = "value" +tracks/45/imported = false +tracks/45/enabled = true +tracks/45/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_4/Bone_1_4/Bone_2_4/Bone_3_4/Bone_4_4/Bone_5_4/Bone_6_4/Bone_7_4/Bone_8_4:rotation_degrees") +tracks/45/interp = 2 +tracks/45/loop_wrap = true +tracks/45/keys = { +"times": PackedFloat32Array(0, 0.2756, 1.2194, 1.27985, 1.3), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, 24.64, 0.0, 0.0, 0.0] +} +tracks/46/type = "value" +tracks/46/imported = false +tracks/46/enabled = true +tracks/46/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_5:rotation_degrees") +tracks/46/interp = 2 +tracks/46/loop_wrap = true +tracks/46/keys = { +"times": PackedFloat32Array(0, 0.26, 0.65, 1.235, 1.2805, 1.3), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1), +"update": 0, +"values": [-179.9, -164.9, -90.0, -4.5, -0.6750000000000003, 0.0] +} +tracks/47/type = "value" +tracks/47/imported = false +tracks/47/enabled = true +tracks/47/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_5/Bone_1_5:rotation_degrees") +tracks/47/interp = 2 +tracks/47/loop_wrap = true +tracks/47/keys = { +"times": PackedFloat32Array(0, 0.26, 1.235, 1.28375, 1.3), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, 15.004828475508104, 0.0, 0.0, 0.0] +} +tracks/48/type = "value" +tracks/48/imported = false +tracks/48/enabled = true +tracks/48/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_5/Bone_1_5/Bone_2_5:rotation_degrees") +tracks/48/interp = 2 +tracks/48/loop_wrap = true +tracks/48/keys = { +"times": PackedFloat32Array(0, 0.26, 1.235, 1.28375, 1.3), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, 18.473110750820517, 0.0, 0.0, 0.0] +} +tracks/49/type = "value" +tracks/49/imported = false +tracks/49/enabled = true +tracks/49/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_5/Bone_1_5/Bone_2_5/Bone_3_5:rotation_degrees") +tracks/49/interp = 2 +tracks/49/loop_wrap = true +tracks/49/keys = { +"times": PackedFloat32Array(0, 0.26, 1.235, 1.28375, 1.3), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, 20.862551014794242, 0.0, 0.0, 0.0] +} +tracks/50/type = "value" +tracks/50/imported = false +tracks/50/enabled = true +tracks/50/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_5/Bone_1_5/Bone_2_5/Bone_3_5/Bone_4_5:rotation_degrees") +tracks/50/interp = 2 +tracks/50/loop_wrap = true +tracks/50/keys = { +"times": PackedFloat32Array(0, 0.26, 1.235, 1.28375, 1.3), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, 22.743067097974595, 0.0, 0.0, 0.0] +} +tracks/51/type = "value" +tracks/51/imported = false +tracks/51/enabled = true +tracks/51/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_5/Bone_1_5/Bone_2_5/Bone_3_5/Bone_4_5/Bone_5_5:rotation_degrees") +tracks/51/interp = 2 +tracks/51/loop_wrap = true +tracks/51/keys = { +"times": PackedFloat32Array(0, 0.26, 1.235, 1.28375, 1.3), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, 24.317674251075616, 0.0, 0.0, 0.0] +} +tracks/52/type = "value" +tracks/52/imported = false +tracks/52/enabled = true +tracks/52/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_5/Bone_1_5/Bone_2_5/Bone_3_5/Bone_4_5/Bone_5_5/Bone_6_5:rotation_degrees") +tracks/52/interp = 2 +tracks/52/loop_wrap = true +tracks/52/keys = { +"times": PackedFloat32Array(0, 0.26, 1.235, 1.28375, 1.3), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, 25.684813129987248, 0.0, 0.0, 0.0] +} +tracks/53/type = "value" +tracks/53/imported = false +tracks/53/enabled = true +tracks/53/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_5/Bone_1_5/Bone_2_5/Bone_3_5/Bone_4_5/Bone_5_5/Bone_6_5/Bone_7_5:rotation_degrees") +tracks/53/interp = 2 +tracks/53/loop_wrap = true +tracks/53/keys = { +"times": PackedFloat32Array(0, 0.26, 1.235, 1.28375, 1.3), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, 26.900505880240168, 0.0, 0.0, 0.0] +} +tracks/54/type = "value" +tracks/54/imported = false +tracks/54/enabled = true +tracks/54/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_5/Bone_1_5/Bone_2_5/Bone_3_5/Bone_4_5/Bone_5_5/Bone_6_5/Bone_7_5/Bone_8_5:rotation_degrees") +tracks/54/interp = 2 +tracks/54/loop_wrap = true +tracks/54/keys = { +"times": PackedFloat32Array(0, 0.26, 1.235, 1.28375, 1.3), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, 28.0, 0.0, 0.0, 0.0] +} +tracks/55/type = "value" +tracks/55/imported = false +tracks/55/enabled = true +tracks/55/path = NodePath("Visual/DynamicFlipPoly:scale") +tracks/55/interp = 1 +tracks/55/loop_wrap = true +tracks/55/keys = { +"times": PackedFloat32Array(0, 0.65, 0.78, 1.105, 1.3), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(1, 1), Vector2(0.88, 1), Vector2(1, 1), Vector2(1, 1)] +} +tracks/56/type = "method" +tracks/56/imported = false +tracks/56/enabled = true +tracks/56/path = NodePath("Visual/DynamicFlipPoly") +tracks/56/interp = 1 +tracks/56/loop_wrap = true +tracks/56/keys = { +"times": PackedFloat32Array(0.65, 1.3), +"transitions": PackedFloat32Array(1, 1), +"values": [{ +"args": [], +"method": &"_trigger_midpoint" +}, { +"args": [], +"method": &"_trigger_end" +}] +} + +[sub_resource type="Animation" id="Animation_5shjh"] +length = 1.3 +step = 0.01 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Visual/DynamicFlipPoly:z_index") +tracks/0/interp = 0 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.195, 0.845), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [10, 25, 10] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_0:rotation_degrees") +tracks/1/interp = 2 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0, 0.65, 1.3), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [0.0, -90.0, -179.9] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_0/Bone_1_0:rotation_degrees") +tracks/2/interp = 2 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0, 1.3), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/3/type = "value" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_0/Bone_1_0/Bone_2_0:rotation_degrees") +tracks/3/interp = 2 +tracks/3/loop_wrap = true +tracks/3/keys = { +"times": PackedFloat32Array(0, 1.3), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/4/type = "value" +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_0/Bone_1_0/Bone_2_0/Bone_3_0:rotation_degrees") +tracks/4/interp = 2 +tracks/4/loop_wrap = true +tracks/4/keys = { +"times": PackedFloat32Array(0, 1.3), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/5/type = "value" +tracks/5/imported = false +tracks/5/enabled = true +tracks/5/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_0/Bone_1_0/Bone_2_0/Bone_3_0/Bone_4_0:rotation_degrees") +tracks/5/interp = 2 +tracks/5/loop_wrap = true +tracks/5/keys = { +"times": PackedFloat32Array(0, 1.3), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/6/type = "value" +tracks/6/imported = false +tracks/6/enabled = true +tracks/6/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_0/Bone_1_0/Bone_2_0/Bone_3_0/Bone_4_0/Bone_5_0:rotation_degrees") +tracks/6/interp = 2 +tracks/6/loop_wrap = true +tracks/6/keys = { +"times": PackedFloat32Array(0, 1.3), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/7/type = "value" +tracks/7/imported = false +tracks/7/enabled = true +tracks/7/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_0/Bone_1_0/Bone_2_0/Bone_3_0/Bone_4_0/Bone_5_0/Bone_6_0:rotation_degrees") +tracks/7/interp = 2 +tracks/7/loop_wrap = true +tracks/7/keys = { +"times": PackedFloat32Array(0, 1.3), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/8/type = "value" +tracks/8/imported = false +tracks/8/enabled = true +tracks/8/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_0/Bone_1_0/Bone_2_0/Bone_3_0/Bone_4_0/Bone_5_0/Bone_6_0/Bone_7_0:rotation_degrees") +tracks/8/interp = 2 +tracks/8/loop_wrap = true +tracks/8/keys = { +"times": PackedFloat32Array(0, 1.3), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/9/type = "value" +tracks/9/imported = false +tracks/9/enabled = true +tracks/9/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_0/Bone_1_0/Bone_2_0/Bone_3_0/Bone_4_0/Bone_5_0/Bone_6_0/Bone_7_0/Bone_8_0:rotation_degrees") +tracks/9/interp = 2 +tracks/9/loop_wrap = true +tracks/9/keys = { +"times": PackedFloat32Array(0, 1.3), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/10/type = "value" +tracks/10/imported = false +tracks/10/enabled = true +tracks/10/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_1:rotation_degrees") +tracks/10/interp = 2 +tracks/10/loop_wrap = true +tracks/10/keys = { +"times": PackedFloat32Array(0, 0.65, 1.3), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [0.0, -90.0, -179.9] +} +tracks/11/type = "value" +tracks/11/imported = false +tracks/11/enabled = true +tracks/11/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_1/Bone_1_1:rotation_degrees") +tracks/11/interp = 2 +tracks/11/loop_wrap = true +tracks/11/keys = { +"times": PackedFloat32Array(0, 1.3), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/12/type = "value" +tracks/12/imported = false +tracks/12/enabled = true +tracks/12/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_1/Bone_1_1/Bone_2_1:rotation_degrees") +tracks/12/interp = 2 +tracks/12/loop_wrap = true +tracks/12/keys = { +"times": PackedFloat32Array(0, 1.3), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/13/type = "value" +tracks/13/imported = false +tracks/13/enabled = true +tracks/13/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_1/Bone_1_1/Bone_2_1/Bone_3_1:rotation_degrees") +tracks/13/interp = 2 +tracks/13/loop_wrap = true +tracks/13/keys = { +"times": PackedFloat32Array(0, 1.3), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/14/type = "value" +tracks/14/imported = false +tracks/14/enabled = true +tracks/14/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_1/Bone_1_1/Bone_2_1/Bone_3_1/Bone_4_1:rotation_degrees") +tracks/14/interp = 2 +tracks/14/loop_wrap = true +tracks/14/keys = { +"times": PackedFloat32Array(0, 1.3), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/15/type = "value" +tracks/15/imported = false +tracks/15/enabled = true +tracks/15/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_1/Bone_1_1/Bone_2_1/Bone_3_1/Bone_4_1/Bone_5_1:rotation_degrees") +tracks/15/interp = 2 +tracks/15/loop_wrap = true +tracks/15/keys = { +"times": PackedFloat32Array(0, 1.3), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/16/type = "value" +tracks/16/imported = false +tracks/16/enabled = true +tracks/16/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_1/Bone_1_1/Bone_2_1/Bone_3_1/Bone_4_1/Bone_5_1/Bone_6_1:rotation_degrees") +tracks/16/interp = 2 +tracks/16/loop_wrap = true +tracks/16/keys = { +"times": PackedFloat32Array(0, 1.3), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/17/type = "value" +tracks/17/imported = false +tracks/17/enabled = true +tracks/17/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_1/Bone_1_1/Bone_2_1/Bone_3_1/Bone_4_1/Bone_5_1/Bone_6_1/Bone_7_1:rotation_degrees") +tracks/17/interp = 2 +tracks/17/loop_wrap = true +tracks/17/keys = { +"times": PackedFloat32Array(0, 1.3), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/18/type = "value" +tracks/18/imported = false +tracks/18/enabled = true +tracks/18/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_1/Bone_1_1/Bone_2_1/Bone_3_1/Bone_4_1/Bone_5_1/Bone_6_1/Bone_7_1/Bone_8_1:rotation_degrees") +tracks/18/interp = 2 +tracks/18/loop_wrap = true +tracks/18/keys = { +"times": PackedFloat32Array(0, 1.3), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/19/type = "value" +tracks/19/imported = false +tracks/19/enabled = true +tracks/19/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_2:rotation_degrees") +tracks/19/interp = 2 +tracks/19/loop_wrap = true +tracks/19/keys = { +"times": PackedFloat32Array(0, 0.65, 1.3), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [0.0, -90.0, -179.9] +} +tracks/20/type = "value" +tracks/20/imported = false +tracks/20/enabled = true +tracks/20/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_2/Bone_1_2:rotation_degrees") +tracks/20/interp = 2 +tracks/20/loop_wrap = true +tracks/20/keys = { +"times": PackedFloat32Array(0, 1.3), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/21/type = "value" +tracks/21/imported = false +tracks/21/enabled = true +tracks/21/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_2/Bone_1_2/Bone_2_2:rotation_degrees") +tracks/21/interp = 2 +tracks/21/loop_wrap = true +tracks/21/keys = { +"times": PackedFloat32Array(0, 1.3), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/22/type = "value" +tracks/22/imported = false +tracks/22/enabled = true +tracks/22/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_2/Bone_1_2/Bone_2_2/Bone_3_2:rotation_degrees") +tracks/22/interp = 2 +tracks/22/loop_wrap = true +tracks/22/keys = { +"times": PackedFloat32Array(0, 1.3), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/23/type = "value" +tracks/23/imported = false +tracks/23/enabled = true +tracks/23/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_2/Bone_1_2/Bone_2_2/Bone_3_2/Bone_4_2:rotation_degrees") +tracks/23/interp = 2 +tracks/23/loop_wrap = true +tracks/23/keys = { +"times": PackedFloat32Array(0, 1.3), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/24/type = "value" +tracks/24/imported = false +tracks/24/enabled = true +tracks/24/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_2/Bone_1_2/Bone_2_2/Bone_3_2/Bone_4_2/Bone_5_2:rotation_degrees") +tracks/24/interp = 2 +tracks/24/loop_wrap = true +tracks/24/keys = { +"times": PackedFloat32Array(0, 1.3), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/25/type = "value" +tracks/25/imported = false +tracks/25/enabled = true +tracks/25/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_2/Bone_1_2/Bone_2_2/Bone_3_2/Bone_4_2/Bone_5_2/Bone_6_2:rotation_degrees") +tracks/25/interp = 2 +tracks/25/loop_wrap = true +tracks/25/keys = { +"times": PackedFloat32Array(0, 1.3), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/26/type = "value" +tracks/26/imported = false +tracks/26/enabled = true +tracks/26/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_2/Bone_1_2/Bone_2_2/Bone_3_2/Bone_4_2/Bone_5_2/Bone_6_2/Bone_7_2:rotation_degrees") +tracks/26/interp = 2 +tracks/26/loop_wrap = true +tracks/26/keys = { +"times": PackedFloat32Array(0, 1.3), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/27/type = "value" +tracks/27/imported = false +tracks/27/enabled = true +tracks/27/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_2/Bone_1_2/Bone_2_2/Bone_3_2/Bone_4_2/Bone_5_2/Bone_6_2/Bone_7_2/Bone_8_2:rotation_degrees") +tracks/27/interp = 2 +tracks/27/loop_wrap = true +tracks/27/keys = { +"times": PackedFloat32Array(0, 1.3), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/28/type = "value" +tracks/28/imported = false +tracks/28/enabled = true +tracks/28/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_3:rotation_degrees") +tracks/28/interp = 2 +tracks/28/loop_wrap = true +tracks/28/keys = { +"times": PackedFloat32Array(0, 0.65, 1.3), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [0.0, -90.0, -179.9] +} +tracks/29/type = "value" +tracks/29/imported = false +tracks/29/enabled = true +tracks/29/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_3/Bone_1_3:rotation_degrees") +tracks/29/interp = 2 +tracks/29/loop_wrap = true +tracks/29/keys = { +"times": PackedFloat32Array(0, 1.3), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/30/type = "value" +tracks/30/imported = false +tracks/30/enabled = true +tracks/30/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_3/Bone_1_3/Bone_2_3:rotation_degrees") +tracks/30/interp = 2 +tracks/30/loop_wrap = true +tracks/30/keys = { +"times": PackedFloat32Array(0, 1.3), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/31/type = "value" +tracks/31/imported = false +tracks/31/enabled = true +tracks/31/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_3/Bone_1_3/Bone_2_3/Bone_3_3:rotation_degrees") +tracks/31/interp = 2 +tracks/31/loop_wrap = true +tracks/31/keys = { +"times": PackedFloat32Array(0, 1.3), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/32/type = "value" +tracks/32/imported = false +tracks/32/enabled = true +tracks/32/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_3/Bone_1_3/Bone_2_3/Bone_3_3/Bone_4_3:rotation_degrees") +tracks/32/interp = 2 +tracks/32/loop_wrap = true +tracks/32/keys = { +"times": PackedFloat32Array(0, 1.3), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/33/type = "value" +tracks/33/imported = false +tracks/33/enabled = true +tracks/33/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_3/Bone_1_3/Bone_2_3/Bone_3_3/Bone_4_3/Bone_5_3:rotation_degrees") +tracks/33/interp = 2 +tracks/33/loop_wrap = true +tracks/33/keys = { +"times": PackedFloat32Array(0, 1.3), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/34/type = "value" +tracks/34/imported = false +tracks/34/enabled = true +tracks/34/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_3/Bone_1_3/Bone_2_3/Bone_3_3/Bone_4_3/Bone_5_3/Bone_6_3:rotation_degrees") +tracks/34/interp = 2 +tracks/34/loop_wrap = true +tracks/34/keys = { +"times": PackedFloat32Array(0, 1.3), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/35/type = "value" +tracks/35/imported = false +tracks/35/enabled = true +tracks/35/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_3/Bone_1_3/Bone_2_3/Bone_3_3/Bone_4_3/Bone_5_3/Bone_6_3/Bone_7_3:rotation_degrees") +tracks/35/interp = 2 +tracks/35/loop_wrap = true +tracks/35/keys = { +"times": PackedFloat32Array(0, 1.3), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/36/type = "value" +tracks/36/imported = false +tracks/36/enabled = true +tracks/36/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_3/Bone_1_3/Bone_2_3/Bone_3_3/Bone_4_3/Bone_5_3/Bone_6_3/Bone_7_3/Bone_8_3:rotation_degrees") +tracks/36/interp = 2 +tracks/36/loop_wrap = true +tracks/36/keys = { +"times": PackedFloat32Array(0, 1.3), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/37/type = "value" +tracks/37/imported = false +tracks/37/enabled = true +tracks/37/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_4:rotation_degrees") +tracks/37/interp = 2 +tracks/37/loop_wrap = true +tracks/37/keys = { +"times": PackedFloat32Array(0, 0.65, 1.3), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [0.0, -90.0, -179.9] +} +tracks/38/type = "value" +tracks/38/imported = false +tracks/38/enabled = true +tracks/38/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_4/Bone_1_4:rotation_degrees") +tracks/38/interp = 2 +tracks/38/loop_wrap = true +tracks/38/keys = { +"times": PackedFloat32Array(0, 1.3), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/39/type = "value" +tracks/39/imported = false +tracks/39/enabled = true +tracks/39/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_4/Bone_1_4/Bone_2_4:rotation_degrees") +tracks/39/interp = 2 +tracks/39/loop_wrap = true +tracks/39/keys = { +"times": PackedFloat32Array(0, 1.3), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/40/type = "value" +tracks/40/imported = false +tracks/40/enabled = true +tracks/40/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_4/Bone_1_4/Bone_2_4/Bone_3_4:rotation_degrees") +tracks/40/interp = 2 +tracks/40/loop_wrap = true +tracks/40/keys = { +"times": PackedFloat32Array(0, 1.3), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/41/type = "value" +tracks/41/imported = false +tracks/41/enabled = true +tracks/41/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_4/Bone_1_4/Bone_2_4/Bone_3_4/Bone_4_4:rotation_degrees") +tracks/41/interp = 2 +tracks/41/loop_wrap = true +tracks/41/keys = { +"times": PackedFloat32Array(0, 1.3), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/42/type = "value" +tracks/42/imported = false +tracks/42/enabled = true +tracks/42/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_4/Bone_1_4/Bone_2_4/Bone_3_4/Bone_4_4/Bone_5_4:rotation_degrees") +tracks/42/interp = 2 +tracks/42/loop_wrap = true +tracks/42/keys = { +"times": PackedFloat32Array(0, 1.3), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/43/type = "value" +tracks/43/imported = false +tracks/43/enabled = true +tracks/43/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_4/Bone_1_4/Bone_2_4/Bone_3_4/Bone_4_4/Bone_5_4/Bone_6_4:rotation_degrees") +tracks/43/interp = 2 +tracks/43/loop_wrap = true +tracks/43/keys = { +"times": PackedFloat32Array(0, 1.3), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/44/type = "value" +tracks/44/imported = false +tracks/44/enabled = true +tracks/44/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_4/Bone_1_4/Bone_2_4/Bone_3_4/Bone_4_4/Bone_5_4/Bone_6_4/Bone_7_4:rotation_degrees") +tracks/44/interp = 2 +tracks/44/loop_wrap = true +tracks/44/keys = { +"times": PackedFloat32Array(0, 1.3), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/45/type = "value" +tracks/45/imported = false +tracks/45/enabled = true +tracks/45/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_4/Bone_1_4/Bone_2_4/Bone_3_4/Bone_4_4/Bone_5_4/Bone_6_4/Bone_7_4/Bone_8_4:rotation_degrees") +tracks/45/interp = 2 +tracks/45/loop_wrap = true +tracks/45/keys = { +"times": PackedFloat32Array(0, 1.3), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/46/type = "value" +tracks/46/imported = false +tracks/46/enabled = true +tracks/46/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_5:rotation_degrees") +tracks/46/interp = 2 +tracks/46/loop_wrap = true +tracks/46/keys = { +"times": PackedFloat32Array(0, 0.65, 1.3), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [0.0, -90.0, -179.9] +} +tracks/47/type = "value" +tracks/47/imported = false +tracks/47/enabled = true +tracks/47/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_5/Bone_1_5:rotation_degrees") +tracks/47/interp = 2 +tracks/47/loop_wrap = true +tracks/47/keys = { +"times": PackedFloat32Array(0, 1.3), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/48/type = "value" +tracks/48/imported = false +tracks/48/enabled = true +tracks/48/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_5/Bone_1_5/Bone_2_5:rotation_degrees") +tracks/48/interp = 2 +tracks/48/loop_wrap = true +tracks/48/keys = { +"times": PackedFloat32Array(0, 1.3), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/49/type = "value" +tracks/49/imported = false +tracks/49/enabled = true +tracks/49/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_5/Bone_1_5/Bone_2_5/Bone_3_5:rotation_degrees") +tracks/49/interp = 2 +tracks/49/loop_wrap = true +tracks/49/keys = { +"times": PackedFloat32Array(0, 1.3), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/50/type = "value" +tracks/50/imported = false +tracks/50/enabled = true +tracks/50/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_5/Bone_1_5/Bone_2_5/Bone_3_5/Bone_4_5:rotation_degrees") +tracks/50/interp = 2 +tracks/50/loop_wrap = true +tracks/50/keys = { +"times": PackedFloat32Array(0, 1.3), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/51/type = "value" +tracks/51/imported = false +tracks/51/enabled = true +tracks/51/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_5/Bone_1_5/Bone_2_5/Bone_3_5/Bone_4_5/Bone_5_5:rotation_degrees") +tracks/51/interp = 2 +tracks/51/loop_wrap = true +tracks/51/keys = { +"times": PackedFloat32Array(0, 1.3), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/52/type = "value" +tracks/52/imported = false +tracks/52/enabled = true +tracks/52/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_5/Bone_1_5/Bone_2_5/Bone_3_5/Bone_4_5/Bone_5_5/Bone_6_5:rotation_degrees") +tracks/52/interp = 2 +tracks/52/loop_wrap = true +tracks/52/keys = { +"times": PackedFloat32Array(0, 1.3), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/53/type = "value" +tracks/53/imported = false +tracks/53/enabled = true +tracks/53/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_5/Bone_1_5/Bone_2_5/Bone_3_5/Bone_4_5/Bone_5_5/Bone_6_5/Bone_7_5:rotation_degrees") +tracks/53/interp = 2 +tracks/53/loop_wrap = true +tracks/53/keys = { +"times": PackedFloat32Array(0, 1.3), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/54/type = "value" +tracks/54/imported = false +tracks/54/enabled = true +tracks/54/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_5/Bone_1_5/Bone_2_5/Bone_3_5/Bone_4_5/Bone_5_5/Bone_6_5/Bone_7_5/Bone_8_5:rotation_degrees") +tracks/54/interp = 2 +tracks/54/loop_wrap = true +tracks/54/keys = { +"times": PackedFloat32Array(0, 1.3), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/55/type = "method" +tracks/55/imported = false +tracks/55/enabled = true +tracks/55/path = NodePath("Visual/DynamicFlipPoly") +tracks/55/interp = 1 +tracks/55/loop_wrap = true +tracks/55/keys = { +"times": PackedFloat32Array(0.65, 1.3), +"transitions": PackedFloat32Array(1, 1), +"values": [{ +"args": [], +"method": &"_trigger_midpoint" +}, { +"args": [], +"method": &"_trigger_end" +}] +} + +[sub_resource type="Animation" id="Animation_8vea8"] +length = 1.3 +step = 0.01 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Visual/DynamicFlipPoly:z_index") +tracks/0/interp = 0 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.195, 0.845), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [10, 25, 10] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_0:rotation_degrees") +tracks/1/interp = 2 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0, 0.65, 1.3), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [-179.9, -90.0, 0.0] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_0/Bone_1_0:rotation_degrees") +tracks/2/interp = 2 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0, 1.3), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/3/type = "value" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_0/Bone_1_0/Bone_2_0:rotation_degrees") +tracks/3/interp = 2 +tracks/3/loop_wrap = true +tracks/3/keys = { +"times": PackedFloat32Array(0, 1.3), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/4/type = "value" +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_0/Bone_1_0/Bone_2_0/Bone_3_0:rotation_degrees") +tracks/4/interp = 2 +tracks/4/loop_wrap = true +tracks/4/keys = { +"times": PackedFloat32Array(0, 1.3), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/5/type = "value" +tracks/5/imported = false +tracks/5/enabled = true +tracks/5/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_0/Bone_1_0/Bone_2_0/Bone_3_0/Bone_4_0:rotation_degrees") +tracks/5/interp = 2 +tracks/5/loop_wrap = true +tracks/5/keys = { +"times": PackedFloat32Array(0, 1.3), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/6/type = "value" +tracks/6/imported = false +tracks/6/enabled = true +tracks/6/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_0/Bone_1_0/Bone_2_0/Bone_3_0/Bone_4_0/Bone_5_0:rotation_degrees") +tracks/6/interp = 2 +tracks/6/loop_wrap = true +tracks/6/keys = { +"times": PackedFloat32Array(0, 1.3), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/7/type = "value" +tracks/7/imported = false +tracks/7/enabled = true +tracks/7/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_0/Bone_1_0/Bone_2_0/Bone_3_0/Bone_4_0/Bone_5_0/Bone_6_0:rotation_degrees") +tracks/7/interp = 2 +tracks/7/loop_wrap = true +tracks/7/keys = { +"times": PackedFloat32Array(0, 1.3), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/8/type = "value" +tracks/8/imported = false +tracks/8/enabled = true +tracks/8/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_0/Bone_1_0/Bone_2_0/Bone_3_0/Bone_4_0/Bone_5_0/Bone_6_0/Bone_7_0:rotation_degrees") +tracks/8/interp = 2 +tracks/8/loop_wrap = true +tracks/8/keys = { +"times": PackedFloat32Array(0, 1.3), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/9/type = "value" +tracks/9/imported = false +tracks/9/enabled = true +tracks/9/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_0/Bone_1_0/Bone_2_0/Bone_3_0/Bone_4_0/Bone_5_0/Bone_6_0/Bone_7_0/Bone_8_0:rotation_degrees") +tracks/9/interp = 2 +tracks/9/loop_wrap = true +tracks/9/keys = { +"times": PackedFloat32Array(0, 1.3), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/10/type = "value" +tracks/10/imported = false +tracks/10/enabled = true +tracks/10/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_1:rotation_degrees") +tracks/10/interp = 2 +tracks/10/loop_wrap = true +tracks/10/keys = { +"times": PackedFloat32Array(0, 0.65, 1.3), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [-179.9, -90.0, 0.0] +} +tracks/11/type = "value" +tracks/11/imported = false +tracks/11/enabled = true +tracks/11/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_1/Bone_1_1:rotation_degrees") +tracks/11/interp = 2 +tracks/11/loop_wrap = true +tracks/11/keys = { +"times": PackedFloat32Array(0, 1.3), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/12/type = "value" +tracks/12/imported = false +tracks/12/enabled = true +tracks/12/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_1/Bone_1_1/Bone_2_1:rotation_degrees") +tracks/12/interp = 2 +tracks/12/loop_wrap = true +tracks/12/keys = { +"times": PackedFloat32Array(0, 1.3), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/13/type = "value" +tracks/13/imported = false +tracks/13/enabled = true +tracks/13/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_1/Bone_1_1/Bone_2_1/Bone_3_1:rotation_degrees") +tracks/13/interp = 2 +tracks/13/loop_wrap = true +tracks/13/keys = { +"times": PackedFloat32Array(0, 1.3), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/14/type = "value" +tracks/14/imported = false +tracks/14/enabled = true +tracks/14/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_1/Bone_1_1/Bone_2_1/Bone_3_1/Bone_4_1:rotation_degrees") +tracks/14/interp = 2 +tracks/14/loop_wrap = true +tracks/14/keys = { +"times": PackedFloat32Array(0, 1.3), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/15/type = "value" +tracks/15/imported = false +tracks/15/enabled = true +tracks/15/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_1/Bone_1_1/Bone_2_1/Bone_3_1/Bone_4_1/Bone_5_1:rotation_degrees") +tracks/15/interp = 2 +tracks/15/loop_wrap = true +tracks/15/keys = { +"times": PackedFloat32Array(0, 1.3), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/16/type = "value" +tracks/16/imported = false +tracks/16/enabled = true +tracks/16/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_1/Bone_1_1/Bone_2_1/Bone_3_1/Bone_4_1/Bone_5_1/Bone_6_1:rotation_degrees") +tracks/16/interp = 2 +tracks/16/loop_wrap = true +tracks/16/keys = { +"times": PackedFloat32Array(0, 1.3), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/17/type = "value" +tracks/17/imported = false +tracks/17/enabled = true +tracks/17/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_1/Bone_1_1/Bone_2_1/Bone_3_1/Bone_4_1/Bone_5_1/Bone_6_1/Bone_7_1:rotation_degrees") +tracks/17/interp = 2 +tracks/17/loop_wrap = true +tracks/17/keys = { +"times": PackedFloat32Array(0, 1.3), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/18/type = "value" +tracks/18/imported = false +tracks/18/enabled = true +tracks/18/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_1/Bone_1_1/Bone_2_1/Bone_3_1/Bone_4_1/Bone_5_1/Bone_6_1/Bone_7_1/Bone_8_1:rotation_degrees") +tracks/18/interp = 2 +tracks/18/loop_wrap = true +tracks/18/keys = { +"times": PackedFloat32Array(0, 1.3), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/19/type = "value" +tracks/19/imported = false +tracks/19/enabled = true +tracks/19/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_2:rotation_degrees") +tracks/19/interp = 2 +tracks/19/loop_wrap = true +tracks/19/keys = { +"times": PackedFloat32Array(0, 0.65, 1.3), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [-179.9, -90.0, 0.0] +} +tracks/20/type = "value" +tracks/20/imported = false +tracks/20/enabled = true +tracks/20/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_2/Bone_1_2:rotation_degrees") +tracks/20/interp = 2 +tracks/20/loop_wrap = true +tracks/20/keys = { +"times": PackedFloat32Array(0, 1.3), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/21/type = "value" +tracks/21/imported = false +tracks/21/enabled = true +tracks/21/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_2/Bone_1_2/Bone_2_2:rotation_degrees") +tracks/21/interp = 2 +tracks/21/loop_wrap = true +tracks/21/keys = { +"times": PackedFloat32Array(0, 1.3), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/22/type = "value" +tracks/22/imported = false +tracks/22/enabled = true +tracks/22/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_2/Bone_1_2/Bone_2_2/Bone_3_2:rotation_degrees") +tracks/22/interp = 2 +tracks/22/loop_wrap = true +tracks/22/keys = { +"times": PackedFloat32Array(0, 1.3), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/23/type = "value" +tracks/23/imported = false +tracks/23/enabled = true +tracks/23/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_2/Bone_1_2/Bone_2_2/Bone_3_2/Bone_4_2:rotation_degrees") +tracks/23/interp = 2 +tracks/23/loop_wrap = true +tracks/23/keys = { +"times": PackedFloat32Array(0, 1.3), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/24/type = "value" +tracks/24/imported = false +tracks/24/enabled = true +tracks/24/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_2/Bone_1_2/Bone_2_2/Bone_3_2/Bone_4_2/Bone_5_2:rotation_degrees") +tracks/24/interp = 2 +tracks/24/loop_wrap = true +tracks/24/keys = { +"times": PackedFloat32Array(0, 1.3), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/25/type = "value" +tracks/25/imported = false +tracks/25/enabled = true +tracks/25/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_2/Bone_1_2/Bone_2_2/Bone_3_2/Bone_4_2/Bone_5_2/Bone_6_2:rotation_degrees") +tracks/25/interp = 2 +tracks/25/loop_wrap = true +tracks/25/keys = { +"times": PackedFloat32Array(0, 1.3), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/26/type = "value" +tracks/26/imported = false +tracks/26/enabled = true +tracks/26/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_2/Bone_1_2/Bone_2_2/Bone_3_2/Bone_4_2/Bone_5_2/Bone_6_2/Bone_7_2:rotation_degrees") +tracks/26/interp = 2 +tracks/26/loop_wrap = true +tracks/26/keys = { +"times": PackedFloat32Array(0, 1.3), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/27/type = "value" +tracks/27/imported = false +tracks/27/enabled = true +tracks/27/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_2/Bone_1_2/Bone_2_2/Bone_3_2/Bone_4_2/Bone_5_2/Bone_6_2/Bone_7_2/Bone_8_2:rotation_degrees") +tracks/27/interp = 2 +tracks/27/loop_wrap = true +tracks/27/keys = { +"times": PackedFloat32Array(0, 1.3), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/28/type = "value" +tracks/28/imported = false +tracks/28/enabled = true +tracks/28/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_3:rotation_degrees") +tracks/28/interp = 2 +tracks/28/loop_wrap = true +tracks/28/keys = { +"times": PackedFloat32Array(0, 0.65, 1.3), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [-179.9, -90.0, 0.0] +} +tracks/29/type = "value" +tracks/29/imported = false +tracks/29/enabled = true +tracks/29/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_3/Bone_1_3:rotation_degrees") +tracks/29/interp = 2 +tracks/29/loop_wrap = true +tracks/29/keys = { +"times": PackedFloat32Array(0, 1.3), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/30/type = "value" +tracks/30/imported = false +tracks/30/enabled = true +tracks/30/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_3/Bone_1_3/Bone_2_3:rotation_degrees") +tracks/30/interp = 2 +tracks/30/loop_wrap = true +tracks/30/keys = { +"times": PackedFloat32Array(0, 1.3), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/31/type = "value" +tracks/31/imported = false +tracks/31/enabled = true +tracks/31/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_3/Bone_1_3/Bone_2_3/Bone_3_3:rotation_degrees") +tracks/31/interp = 2 +tracks/31/loop_wrap = true +tracks/31/keys = { +"times": PackedFloat32Array(0, 1.3), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/32/type = "value" +tracks/32/imported = false +tracks/32/enabled = true +tracks/32/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_3/Bone_1_3/Bone_2_3/Bone_3_3/Bone_4_3:rotation_degrees") +tracks/32/interp = 2 +tracks/32/loop_wrap = true +tracks/32/keys = { +"times": PackedFloat32Array(0, 1.3), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/33/type = "value" +tracks/33/imported = false +tracks/33/enabled = true +tracks/33/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_3/Bone_1_3/Bone_2_3/Bone_3_3/Bone_4_3/Bone_5_3:rotation_degrees") +tracks/33/interp = 2 +tracks/33/loop_wrap = true +tracks/33/keys = { +"times": PackedFloat32Array(0, 1.3), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/34/type = "value" +tracks/34/imported = false +tracks/34/enabled = true +tracks/34/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_3/Bone_1_3/Bone_2_3/Bone_3_3/Bone_4_3/Bone_5_3/Bone_6_3:rotation_degrees") +tracks/34/interp = 2 +tracks/34/loop_wrap = true +tracks/34/keys = { +"times": PackedFloat32Array(0, 1.3), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/35/type = "value" +tracks/35/imported = false +tracks/35/enabled = true +tracks/35/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_3/Bone_1_3/Bone_2_3/Bone_3_3/Bone_4_3/Bone_5_3/Bone_6_3/Bone_7_3:rotation_degrees") +tracks/35/interp = 2 +tracks/35/loop_wrap = true +tracks/35/keys = { +"times": PackedFloat32Array(0, 1.3), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/36/type = "value" +tracks/36/imported = false +tracks/36/enabled = true +tracks/36/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_3/Bone_1_3/Bone_2_3/Bone_3_3/Bone_4_3/Bone_5_3/Bone_6_3/Bone_7_3/Bone_8_3:rotation_degrees") +tracks/36/interp = 2 +tracks/36/loop_wrap = true +tracks/36/keys = { +"times": PackedFloat32Array(0, 1.3), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/37/type = "value" +tracks/37/imported = false +tracks/37/enabled = true +tracks/37/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_4:rotation_degrees") +tracks/37/interp = 2 +tracks/37/loop_wrap = true +tracks/37/keys = { +"times": PackedFloat32Array(0, 0.65, 1.3), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [-179.9, -90.0, 0.0] +} +tracks/38/type = "value" +tracks/38/imported = false +tracks/38/enabled = true +tracks/38/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_4/Bone_1_4:rotation_degrees") +tracks/38/interp = 2 +tracks/38/loop_wrap = true +tracks/38/keys = { +"times": PackedFloat32Array(0, 1.3), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/39/type = "value" +tracks/39/imported = false +tracks/39/enabled = true +tracks/39/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_4/Bone_1_4/Bone_2_4:rotation_degrees") +tracks/39/interp = 2 +tracks/39/loop_wrap = true +tracks/39/keys = { +"times": PackedFloat32Array(0, 1.3), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/40/type = "value" +tracks/40/imported = false +tracks/40/enabled = true +tracks/40/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_4/Bone_1_4/Bone_2_4/Bone_3_4:rotation_degrees") +tracks/40/interp = 2 +tracks/40/loop_wrap = true +tracks/40/keys = { +"times": PackedFloat32Array(0, 1.3), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/41/type = "value" +tracks/41/imported = false +tracks/41/enabled = true +tracks/41/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_4/Bone_1_4/Bone_2_4/Bone_3_4/Bone_4_4:rotation_degrees") +tracks/41/interp = 2 +tracks/41/loop_wrap = true +tracks/41/keys = { +"times": PackedFloat32Array(0, 1.3), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/42/type = "value" +tracks/42/imported = false +tracks/42/enabled = true +tracks/42/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_4/Bone_1_4/Bone_2_4/Bone_3_4/Bone_4_4/Bone_5_4:rotation_degrees") +tracks/42/interp = 2 +tracks/42/loop_wrap = true +tracks/42/keys = { +"times": PackedFloat32Array(0, 1.3), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/43/type = "value" +tracks/43/imported = false +tracks/43/enabled = true +tracks/43/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_4/Bone_1_4/Bone_2_4/Bone_3_4/Bone_4_4/Bone_5_4/Bone_6_4:rotation_degrees") +tracks/43/interp = 2 +tracks/43/loop_wrap = true +tracks/43/keys = { +"times": PackedFloat32Array(0, 1.3), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/44/type = "value" +tracks/44/imported = false +tracks/44/enabled = true +tracks/44/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_4/Bone_1_4/Bone_2_4/Bone_3_4/Bone_4_4/Bone_5_4/Bone_6_4/Bone_7_4:rotation_degrees") +tracks/44/interp = 2 +tracks/44/loop_wrap = true +tracks/44/keys = { +"times": PackedFloat32Array(0, 1.3), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/45/type = "value" +tracks/45/imported = false +tracks/45/enabled = true +tracks/45/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_4/Bone_1_4/Bone_2_4/Bone_3_4/Bone_4_4/Bone_5_4/Bone_6_4/Bone_7_4/Bone_8_4:rotation_degrees") +tracks/45/interp = 2 +tracks/45/loop_wrap = true +tracks/45/keys = { +"times": PackedFloat32Array(0, 1.3), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/46/type = "value" +tracks/46/imported = false +tracks/46/enabled = true +tracks/46/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_5:rotation_degrees") +tracks/46/interp = 2 +tracks/46/loop_wrap = true +tracks/46/keys = { +"times": PackedFloat32Array(0, 0.65, 1.3), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [-179.9, -90.0, 0.0] +} +tracks/47/type = "value" +tracks/47/imported = false +tracks/47/enabled = true +tracks/47/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_5/Bone_1_5:rotation_degrees") +tracks/47/interp = 2 +tracks/47/loop_wrap = true +tracks/47/keys = { +"times": PackedFloat32Array(0, 1.3), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/48/type = "value" +tracks/48/imported = false +tracks/48/enabled = true +tracks/48/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_5/Bone_1_5/Bone_2_5:rotation_degrees") +tracks/48/interp = 2 +tracks/48/loop_wrap = true +tracks/48/keys = { +"times": PackedFloat32Array(0, 1.3), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/49/type = "value" +tracks/49/imported = false +tracks/49/enabled = true +tracks/49/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_5/Bone_1_5/Bone_2_5/Bone_3_5:rotation_degrees") +tracks/49/interp = 2 +tracks/49/loop_wrap = true +tracks/49/keys = { +"times": PackedFloat32Array(0, 1.3), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/50/type = "value" +tracks/50/imported = false +tracks/50/enabled = true +tracks/50/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_5/Bone_1_5/Bone_2_5/Bone_3_5/Bone_4_5:rotation_degrees") +tracks/50/interp = 2 +tracks/50/loop_wrap = true +tracks/50/keys = { +"times": PackedFloat32Array(0, 1.3), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/51/type = "value" +tracks/51/imported = false +tracks/51/enabled = true +tracks/51/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_5/Bone_1_5/Bone_2_5/Bone_3_5/Bone_4_5/Bone_5_5:rotation_degrees") +tracks/51/interp = 2 +tracks/51/loop_wrap = true +tracks/51/keys = { +"times": PackedFloat32Array(0, 1.3), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/52/type = "value" +tracks/52/imported = false +tracks/52/enabled = true +tracks/52/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_5/Bone_1_5/Bone_2_5/Bone_3_5/Bone_4_5/Bone_5_5/Bone_6_5:rotation_degrees") +tracks/52/interp = 2 +tracks/52/loop_wrap = true +tracks/52/keys = { +"times": PackedFloat32Array(0, 1.3), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/53/type = "value" +tracks/53/imported = false +tracks/53/enabled = true +tracks/53/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_5/Bone_1_5/Bone_2_5/Bone_3_5/Bone_4_5/Bone_5_5/Bone_6_5/Bone_7_5:rotation_degrees") +tracks/53/interp = 2 +tracks/53/loop_wrap = true +tracks/53/keys = { +"times": PackedFloat32Array(0, 1.3), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/54/type = "value" +tracks/54/imported = false +tracks/54/enabled = true +tracks/54/path = NodePath("Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_5/Bone_1_5/Bone_2_5/Bone_3_5/Bone_4_5/Bone_5_5/Bone_6_5/Bone_7_5/Bone_8_5:rotation_degrees") +tracks/54/interp = 2 +tracks/54/loop_wrap = true +tracks/54/keys = { +"times": PackedFloat32Array(0, 1.3), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/55/type = "method" +tracks/55/imported = false +tracks/55/enabled = true +tracks/55/path = NodePath("Visual/DynamicFlipPoly") +tracks/55/interp = 1 +tracks/55/loop_wrap = true +tracks/55/keys = { +"times": PackedFloat32Array(0.65, 1.3), +"transitions": PackedFloat32Array(1, 1), +"values": [{ +"args": [], +"method": &"_trigger_midpoint" +}, { +"args": [], +"method": &"_trigger_end" +}] +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_hqhik"] +_data = { +&"RESET": SubResource("Animation_cuh5i"), +&"turn_flexible_page": SubResource("Animation_hr6qm"), +&"turn_flexible_page_mirror": SubResource("Animation_35sf4"), +&"turn_rigid_page": SubResource("Animation_5shjh"), +&"turn_rigid_page_mirror": SubResource("Animation_8vea8") +} [node name="GameMenu" type="Control" unique_id=2124096517] -process_mode = 3 layout_mode = 3 -anchors_preset = 15 -anchor_right = 1.0 -anchor_bottom = 1.0 +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +offset_left = -960.0 +offset_top = -540.0 +offset_right = 960.0 +offset_bottom = 540.0 grow_horizontal = 2 grow_vertical = 2 pivot_offset_ratio = Vector2(0.5, 0.5) @@ -55,6 +2843,7 @@ mouse_filter = 2 texture = ExtResource("1_0ojv5") [node name="Pages" type="Control" parent="." unique_id=1744911944] +visible = false layout_mode = 1 anchors_preset = 15 anchor_right = 1.0 @@ -77,5 +2866,165 @@ unique_name_in_owner = true visible = false layout_mode = 1 -[editable path="Pages/Page3"] -[editable path="Pages/Page3/OptionMenu"] +[node name="Rings" type="TextureRect" parent="." unique_id=1905177535] +z_index = 2 +layout_mode = 1 +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +offset_left = -60.0 +offset_top = -190.0 +offset_right = 58.0 +offset_bottom = 260.0 +grow_horizontal = 2 +grow_vertical = 2 +mouse_filter = 2 +texture = ExtResource("9_nq5sp") +stretch_mode = 2 + +[node name="PageFlip" type="Node2D" parent="." unique_id=651485928 node_paths=PackedStringArray("visuals_container", "static_left", "static_right", "dynamic_poly", "anim_player", "audio_player")] +position = Vector2(960, 574) +script = ExtResource("9_hr6qm") +visuals_container = NodePath("Visual") +static_left = NodePath("Visual/StaticPageLeft") +static_right = NodePath("Visual/StaticPageRight") +dynamic_poly = NodePath("Visual/DynamicFlipPoly") +anim_player = NodePath("AnimationPlayer") +start_option = 2 +start_page = 2 +blank_page_texture = ExtResource("10_35sf4") +spine_texture = ExtResource("11_5shjh") +spine_width = 0.0 +closed_scale = Vector2(0.815, 0.23) +closed_skew = 0.19999999999999996 +closed_rotation = 0.10000000000002274 +flip_speed_scale = 2.0 +use_internal_camera = false +min_layers = 1 +layer_offset_closed = Vector2(0.7, 12) +layer_offset_open = Vector2(0.6, 2) +volume_color = Color(0.6521577, 0.5921, 0.5600391, 1) +stripe_darken_ratio = 0.848 +audio_player = NodePath("AudioStreamPlayer") +target_page_size = Vector2(794, 574) +pages_paths = Array[String](["", "res://core/game_menu/page_1_left.tscn", "uid://d06kfd33fgepf", "res://core/game_menu/page_2_left.tscn", "res://core/game_menu/page_2_right.tscn", "res://core/game_menu/page_3_left.tscn", "res://core/game_menu/page_3_right.tscn"]) + +[node name="Viewports" type="Node" parent="PageFlip" unique_id=759540274] + +[node name="Covers" type="Node" parent="PageFlip/Viewports" unique_id=1771272970] + +[node name="CoverFrontIn" type="SubViewport" parent="PageFlip/Viewports/Covers" unique_id=533672822] +transparent_bg = true +size = Vector2i(794, 574) +render_target_update_mode = 4 + +[node name="Sprite2D" type="Sprite2D" parent="PageFlip/Viewports/Covers/CoverFrontIn" unique_id=1172591743] +texture = ExtResource("14_3hj3t") +centered = false + +[node name="CoverFrontOut" type="SubViewport" parent="PageFlip/Viewports/Covers" unique_id=507622395] +transparent_bg = true +size = Vector2i(794, 574) +render_target_update_mode = 4 + +[node name="CoverBackIn" type="SubViewport" parent="PageFlip/Viewports/Covers" unique_id=733451190] +transparent_bg = true +size = Vector2i(794, 574) +render_target_update_mode = 4 + +[node name="CoverBackOut" type="SubViewport" parent="PageFlip/Viewports/Covers" unique_id=1328875611] +transparent_bg = true +size = Vector2i(794, 574) +render_target_update_mode = 4 + +[node name="Slots" type="Node" parent="PageFlip/Viewports" unique_id=1246724997] + +[node name="Slot1" type="SubViewport" parent="PageFlip/Viewports/Slots" unique_id=953007041] +transparent_bg = true +physics_object_picking = true +size = Vector2i(794, 574) +render_target_update_mode = 4 + +[node name="Slot2" type="SubViewport" parent="PageFlip/Viewports/Slots" unique_id=531554528] +transparent_bg = true +physics_object_picking = true +size = Vector2i(794, 574) +render_target_update_mode = 4 + +[node name="Slot3" type="SubViewport" parent="PageFlip/Viewports/Slots" unique_id=474632868] +transparent_bg = true +size = Vector2i(794, 574) +render_target_update_mode = 4 + +[node name="Slot4" type="SubViewport" parent="PageFlip/Viewports/Slots" unique_id=65293429] +transparent_bg = true +size = Vector2i(794, 574) +render_target_update_mode = 4 + +[node name="Compositor" type="SubViewport" parent="PageFlip/Viewports/Slots" unique_id=1727025554] +transparent_bg = true +size = Vector2i(794, 574) +render_target_update_mode = 4 + +[node name="CompositorTexture" type="Sprite2D" parent="PageFlip/Viewports/Slots/Compositor" unique_id=671514618] +centered = false + +[node name="Visual" type="Node2D" parent="PageFlip" unique_id=205659491] + +[node name="StaticPageLeft" type="Polygon2D" parent="PageFlip/Visual" unique_id=845228795] +visible = false +z_index = 1 +position = Vector2(-794, 0) +polygon = PackedVector2Array(0, -287, 794, -287, 794, 287, 0, 287) +uv = PackedVector2Array(0, 0, 794, 0, 794, 574, 0, 574) +polygons = [PackedInt32Array(0, 1, 2, 3)] + +[node name="StaticPageRight" type="Polygon2D" parent="PageFlip/Visual" unique_id=1167108681] +z_index = 1 +polygon = PackedVector2Array(0, -287, 794, -287, 794, 287, 0, 287) +uv = PackedVector2Array(0, 0, 794, 0, 794, 574, 0, 574) +polygons = [PackedInt32Array(0, 1, 2, 3)] + +[node name="DynamicFlipPoly" type="Polygon2D" parent="PageFlip/Visual" unique_id=1994837824 node_paths=PackedStringArray("anim_player")] +visible = false +clip_children = 2 +z_index = 10 +position = Vector2(0, -287) +texture = SubResource("ViewportTexture_7r0mx") +skeleton = NodePath("AutoSkeleton") +polygon = PackedVector2Array(0, 0, 99.25, 0, 198.5, 0, 297.75, 0, 397, 0, 496.25, 0, 595.5, 0, 694.75, 0, 794, 0, 0, 114.8, 99.25, 114.8, 198.5, 114.8, 297.75, 114.8, 397, 114.8, 496.25, 114.8, 595.5, 114.8, 694.75, 114.8, 794, 114.8, 0, 229.6, 99.25, 229.6, 198.5, 229.6, 297.75, 229.6, 397, 229.6, 496.25, 229.6, 595.5, 229.6, 694.75, 229.6, 794, 229.6, 0, 344.4, 99.25, 344.4, 198.5, 344.4, 297.75, 344.4, 397, 344.4, 496.25, 344.4, 595.5, 344.4, 694.75, 344.4, 794, 344.4, 0, 459.2, 99.25, 459.2, 198.5, 459.2, 297.75, 459.2, 397, 459.2, 496.25, 459.2, 595.5, 459.2, 694.75, 459.2, 794, 459.2, 0, 574, 99.25, 574, 198.5, 574, 297.75, 574, 397, 574, 496.25, 574, 595.5, 574, 694.75, 574, 794, 574) +uv = PackedVector2Array(0, 0, 99.25, 0, 198.5, 0, 297.75, 0, 397, 0, 496.25, 0, 595.5, 0, 694.75, 0, 794, 0, 0, 114.8, 99.25, 114.8, 198.5, 114.8, 297.75, 114.8, 397, 114.8, 496.25, 114.8, 595.5, 114.8, 694.75, 114.8, 794, 114.8, 0, 229.6, 99.25, 229.6, 198.5, 229.6, 297.75, 229.6, 397, 229.6, 496.25, 229.6, 595.5, 229.6, 694.75, 229.6, 794, 229.6, 0, 344.4, 99.25, 344.4, 198.5, 344.4, 297.75, 344.4, 397, 344.4, 496.25, 344.4, 595.5, 344.4, 694.75, 344.4, 794, 344.4, 0, 459.2, 99.25, 459.2, 198.5, 459.2, 297.75, 459.2, 397, 459.2, 496.25, 459.2, 595.5, 459.2, 694.75, 459.2, 794, 459.2, 0, 574, 99.25, 574, 198.5, 574, 297.75, 574, 397, 574, 496.25, 574, 595.5, 574, 694.75, 574, 794, 574) +polygons = [PackedInt32Array(0, 1, 10, 9), PackedInt32Array(1, 2, 11, 10), PackedInt32Array(2, 3, 12, 11), PackedInt32Array(3, 4, 13, 12), PackedInt32Array(4, 5, 14, 13), PackedInt32Array(5, 6, 15, 14), PackedInt32Array(6, 7, 16, 15), PackedInt32Array(7, 8, 17, 16), PackedInt32Array(9, 10, 19, 18), PackedInt32Array(10, 11, 20, 19), PackedInt32Array(11, 12, 21, 20), PackedInt32Array(12, 13, 22, 21), PackedInt32Array(13, 14, 23, 22), PackedInt32Array(14, 15, 24, 23), PackedInt32Array(15, 16, 25, 24), PackedInt32Array(16, 17, 26, 25), PackedInt32Array(18, 19, 28, 27), PackedInt32Array(19, 20, 29, 28), PackedInt32Array(20, 21, 30, 29), PackedInt32Array(21, 22, 31, 30), PackedInt32Array(22, 23, 32, 31), PackedInt32Array(23, 24, 33, 32), PackedInt32Array(24, 25, 34, 33), PackedInt32Array(25, 26, 35, 34), PackedInt32Array(27, 28, 37, 36), PackedInt32Array(28, 29, 38, 37), PackedInt32Array(29, 30, 39, 38), PackedInt32Array(30, 31, 40, 39), PackedInt32Array(31, 32, 41, 40), PackedInt32Array(32, 33, 42, 41), PackedInt32Array(33, 34, 43, 42), PackedInt32Array(34, 35, 44, 43), PackedInt32Array(36, 37, 46, 45), PackedInt32Array(37, 38, 47, 46), PackedInt32Array(38, 39, 48, 47), PackedInt32Array(39, 40, 49, 48), PackedInt32Array(40, 41, 50, 49), PackedInt32Array(41, 42, 51, 50), PackedInt32Array(42, 43, 52, 51), PackedInt32Array(43, 44, 53, 52)] +bones = ["/root/@EditorNode@18065/@Panel@14/@VBoxContainer@15/DockHSplitMain/@VBoxContainer@28/DockVSplitCenter/@VSplitContainer@70/@VBoxContainer@71/@EditorMainScreen@125/MainScreen/@CanvasItemEditor@9318/@VSplitContainer@9101/@HSplitContainer@9103/@HSplitContainer@9105/@Control@9106/@SubViewportContainer@9107/@SubViewport@9108/GameMenu/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_0", PackedFloat32Array(0.84999996, 0.15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@18065/@Panel@14/@VBoxContainer@15/DockHSplitMain/@VBoxContainer@28/DockVSplitCenter/@VSplitContainer@70/@VBoxContainer@71/@EditorMainScreen@125/MainScreen/@CanvasItemEditor@9318/@VSplitContainer@9101/@HSplitContainer@9103/@HSplitContainer@9105/@Control@9106/@SubViewportContainer@9107/@SubViewport@9108/GameMenu/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_0/Bone_1_0", PackedFloat32Array(0.15, 0.7, 0.15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@18065/@Panel@14/@VBoxContainer@15/DockHSplitMain/@VBoxContainer@28/DockVSplitCenter/@VSplitContainer@70/@VBoxContainer@71/@EditorMainScreen@125/MainScreen/@CanvasItemEditor@9318/@VSplitContainer@9101/@HSplitContainer@9103/@HSplitContainer@9105/@Control@9106/@SubViewportContainer@9107/@SubViewport@9108/GameMenu/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_0/Bone_1_0/Bone_2_0", PackedFloat32Array(0, 0.15, 0.7, 0.15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@18065/@Panel@14/@VBoxContainer@15/DockHSplitMain/@VBoxContainer@28/DockVSplitCenter/@VSplitContainer@70/@VBoxContainer@71/@EditorMainScreen@125/MainScreen/@CanvasItemEditor@9318/@VSplitContainer@9101/@HSplitContainer@9103/@HSplitContainer@9105/@Control@9106/@SubViewportContainer@9107/@SubViewport@9108/GameMenu/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_0/Bone_1_0/Bone_2_0/Bone_3_0", PackedFloat32Array(0, 0, 0.15, 0.7, 0.15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@18065/@Panel@14/@VBoxContainer@15/DockHSplitMain/@VBoxContainer@28/DockVSplitCenter/@VSplitContainer@70/@VBoxContainer@71/@EditorMainScreen@125/MainScreen/@CanvasItemEditor@9318/@VSplitContainer@9101/@HSplitContainer@9103/@HSplitContainer@9105/@Control@9106/@SubViewportContainer@9107/@SubViewport@9108/GameMenu/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_0/Bone_1_0/Bone_2_0/Bone_3_0/Bone_4_0", PackedFloat32Array(0, 0, 0, 0.15, 0.7, 0.15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@18065/@Panel@14/@VBoxContainer@15/DockHSplitMain/@VBoxContainer@28/DockVSplitCenter/@VSplitContainer@70/@VBoxContainer@71/@EditorMainScreen@125/MainScreen/@CanvasItemEditor@9318/@VSplitContainer@9101/@HSplitContainer@9103/@HSplitContainer@9105/@Control@9106/@SubViewportContainer@9107/@SubViewport@9108/GameMenu/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_0/Bone_1_0/Bone_2_0/Bone_3_0/Bone_4_0/Bone_5_0", PackedFloat32Array(0, 0, 0, 0, 0.15, 0.7, 0.15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@18065/@Panel@14/@VBoxContainer@15/DockHSplitMain/@VBoxContainer@28/DockVSplitCenter/@VSplitContainer@70/@VBoxContainer@71/@EditorMainScreen@125/MainScreen/@CanvasItemEditor@9318/@VSplitContainer@9101/@HSplitContainer@9103/@HSplitContainer@9105/@Control@9106/@SubViewportContainer@9107/@SubViewport@9108/GameMenu/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_0/Bone_1_0/Bone_2_0/Bone_3_0/Bone_4_0/Bone_5_0/Bone_6_0", PackedFloat32Array(0, 0, 0, 0, 0, 0.15, 0.7, 0.15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@18065/@Panel@14/@VBoxContainer@15/DockHSplitMain/@VBoxContainer@28/DockVSplitCenter/@VSplitContainer@70/@VBoxContainer@71/@EditorMainScreen@125/MainScreen/@CanvasItemEditor@9318/@VSplitContainer@9101/@HSplitContainer@9103/@HSplitContainer@9105/@Control@9106/@SubViewportContainer@9107/@SubViewport@9108/GameMenu/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_0/Bone_1_0/Bone_2_0/Bone_3_0/Bone_4_0/Bone_5_0/Bone_6_0/Bone_7_0", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0.15, 0.7, 0.15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@18065/@Panel@14/@VBoxContainer@15/DockHSplitMain/@VBoxContainer@28/DockVSplitCenter/@VSplitContainer@70/@VBoxContainer@71/@EditorMainScreen@125/MainScreen/@CanvasItemEditor@9318/@VSplitContainer@9101/@HSplitContainer@9103/@HSplitContainer@9105/@Control@9106/@SubViewportContainer@9107/@SubViewport@9108/GameMenu/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_0/Bone_1_0/Bone_2_0/Bone_3_0/Bone_4_0/Bone_5_0/Bone_6_0/Bone_7_0/Bone_8_0", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0.15, 0.84999996, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@18065/@Panel@14/@VBoxContainer@15/DockHSplitMain/@VBoxContainer@28/DockVSplitCenter/@VSplitContainer@70/@VBoxContainer@71/@EditorMainScreen@125/MainScreen/@CanvasItemEditor@9318/@VSplitContainer@9101/@HSplitContainer@9103/@HSplitContainer@9105/@Control@9106/@SubViewportContainer@9107/@SubViewport@9108/GameMenu/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_1", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0.84999996, 0.15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@18065/@Panel@14/@VBoxContainer@15/DockHSplitMain/@VBoxContainer@28/DockVSplitCenter/@VSplitContainer@70/@VBoxContainer@71/@EditorMainScreen@125/MainScreen/@CanvasItemEditor@9318/@VSplitContainer@9101/@HSplitContainer@9103/@HSplitContainer@9105/@Control@9106/@SubViewportContainer@9107/@SubViewport@9108/GameMenu/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_1/Bone_1_1", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0.15, 0.7, 0.15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@18065/@Panel@14/@VBoxContainer@15/DockHSplitMain/@VBoxContainer@28/DockVSplitCenter/@VSplitContainer@70/@VBoxContainer@71/@EditorMainScreen@125/MainScreen/@CanvasItemEditor@9318/@VSplitContainer@9101/@HSplitContainer@9103/@HSplitContainer@9105/@Control@9106/@SubViewportContainer@9107/@SubViewport@9108/GameMenu/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_1/Bone_1_1/Bone_2_1", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.15, 0.7, 0.15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@18065/@Panel@14/@VBoxContainer@15/DockHSplitMain/@VBoxContainer@28/DockVSplitCenter/@VSplitContainer@70/@VBoxContainer@71/@EditorMainScreen@125/MainScreen/@CanvasItemEditor@9318/@VSplitContainer@9101/@HSplitContainer@9103/@HSplitContainer@9105/@Control@9106/@SubViewportContainer@9107/@SubViewport@9108/GameMenu/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_1/Bone_1_1/Bone_2_1/Bone_3_1", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.15, 0.7, 0.15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@18065/@Panel@14/@VBoxContainer@15/DockHSplitMain/@VBoxContainer@28/DockVSplitCenter/@VSplitContainer@70/@VBoxContainer@71/@EditorMainScreen@125/MainScreen/@CanvasItemEditor@9318/@VSplitContainer@9101/@HSplitContainer@9103/@HSplitContainer@9105/@Control@9106/@SubViewportContainer@9107/@SubViewport@9108/GameMenu/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_1/Bone_1_1/Bone_2_1/Bone_3_1/Bone_4_1", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.15, 0.7, 0.15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@18065/@Panel@14/@VBoxContainer@15/DockHSplitMain/@VBoxContainer@28/DockVSplitCenter/@VSplitContainer@70/@VBoxContainer@71/@EditorMainScreen@125/MainScreen/@CanvasItemEditor@9318/@VSplitContainer@9101/@HSplitContainer@9103/@HSplitContainer@9105/@Control@9106/@SubViewportContainer@9107/@SubViewport@9108/GameMenu/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_1/Bone_1_1/Bone_2_1/Bone_3_1/Bone_4_1/Bone_5_1", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.15, 0.7, 0.15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@18065/@Panel@14/@VBoxContainer@15/DockHSplitMain/@VBoxContainer@28/DockVSplitCenter/@VSplitContainer@70/@VBoxContainer@71/@EditorMainScreen@125/MainScreen/@CanvasItemEditor@9318/@VSplitContainer@9101/@HSplitContainer@9103/@HSplitContainer@9105/@Control@9106/@SubViewportContainer@9107/@SubViewport@9108/GameMenu/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_1/Bone_1_1/Bone_2_1/Bone_3_1/Bone_4_1/Bone_5_1/Bone_6_1", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.15, 0.7, 0.15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@18065/@Panel@14/@VBoxContainer@15/DockHSplitMain/@VBoxContainer@28/DockVSplitCenter/@VSplitContainer@70/@VBoxContainer@71/@EditorMainScreen@125/MainScreen/@CanvasItemEditor@9318/@VSplitContainer@9101/@HSplitContainer@9103/@HSplitContainer@9105/@Control@9106/@SubViewportContainer@9107/@SubViewport@9108/GameMenu/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_1/Bone_1_1/Bone_2_1/Bone_3_1/Bone_4_1/Bone_5_1/Bone_6_1/Bone_7_1", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.15, 0.7, 0.15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@18065/@Panel@14/@VBoxContainer@15/DockHSplitMain/@VBoxContainer@28/DockVSplitCenter/@VSplitContainer@70/@VBoxContainer@71/@EditorMainScreen@125/MainScreen/@CanvasItemEditor@9318/@VSplitContainer@9101/@HSplitContainer@9103/@HSplitContainer@9105/@Control@9106/@SubViewportContainer@9107/@SubViewport@9108/GameMenu/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_1/Bone_1_1/Bone_2_1/Bone_3_1/Bone_4_1/Bone_5_1/Bone_6_1/Bone_7_1/Bone_8_1", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.15, 0.84999996, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@18065/@Panel@14/@VBoxContainer@15/DockHSplitMain/@VBoxContainer@28/DockVSplitCenter/@VSplitContainer@70/@VBoxContainer@71/@EditorMainScreen@125/MainScreen/@CanvasItemEditor@9318/@VSplitContainer@9101/@HSplitContainer@9103/@HSplitContainer@9105/@Control@9106/@SubViewportContainer@9107/@SubViewport@9108/GameMenu/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_2", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.84999996, 0.15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@18065/@Panel@14/@VBoxContainer@15/DockHSplitMain/@VBoxContainer@28/DockVSplitCenter/@VSplitContainer@70/@VBoxContainer@71/@EditorMainScreen@125/MainScreen/@CanvasItemEditor@9318/@VSplitContainer@9101/@HSplitContainer@9103/@HSplitContainer@9105/@Control@9106/@SubViewportContainer@9107/@SubViewport@9108/GameMenu/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_2/Bone_1_2", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.15, 0.7, 0.15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@18065/@Panel@14/@VBoxContainer@15/DockHSplitMain/@VBoxContainer@28/DockVSplitCenter/@VSplitContainer@70/@VBoxContainer@71/@EditorMainScreen@125/MainScreen/@CanvasItemEditor@9318/@VSplitContainer@9101/@HSplitContainer@9103/@HSplitContainer@9105/@Control@9106/@SubViewportContainer@9107/@SubViewport@9108/GameMenu/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_2/Bone_1_2/Bone_2_2", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.15, 0.7, 0.15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@18065/@Panel@14/@VBoxContainer@15/DockHSplitMain/@VBoxContainer@28/DockVSplitCenter/@VSplitContainer@70/@VBoxContainer@71/@EditorMainScreen@125/MainScreen/@CanvasItemEditor@9318/@VSplitContainer@9101/@HSplitContainer@9103/@HSplitContainer@9105/@Control@9106/@SubViewportContainer@9107/@SubViewport@9108/GameMenu/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_2/Bone_1_2/Bone_2_2/Bone_3_2", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.15, 0.7, 0.15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@18065/@Panel@14/@VBoxContainer@15/DockHSplitMain/@VBoxContainer@28/DockVSplitCenter/@VSplitContainer@70/@VBoxContainer@71/@EditorMainScreen@125/MainScreen/@CanvasItemEditor@9318/@VSplitContainer@9101/@HSplitContainer@9103/@HSplitContainer@9105/@Control@9106/@SubViewportContainer@9107/@SubViewport@9108/GameMenu/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_2/Bone_1_2/Bone_2_2/Bone_3_2/Bone_4_2", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.15, 0.7, 0.15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@18065/@Panel@14/@VBoxContainer@15/DockHSplitMain/@VBoxContainer@28/DockVSplitCenter/@VSplitContainer@70/@VBoxContainer@71/@EditorMainScreen@125/MainScreen/@CanvasItemEditor@9318/@VSplitContainer@9101/@HSplitContainer@9103/@HSplitContainer@9105/@Control@9106/@SubViewportContainer@9107/@SubViewport@9108/GameMenu/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_2/Bone_1_2/Bone_2_2/Bone_3_2/Bone_4_2/Bone_5_2", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.15, 0.7, 0.15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@18065/@Panel@14/@VBoxContainer@15/DockHSplitMain/@VBoxContainer@28/DockVSplitCenter/@VSplitContainer@70/@VBoxContainer@71/@EditorMainScreen@125/MainScreen/@CanvasItemEditor@9318/@VSplitContainer@9101/@HSplitContainer@9103/@HSplitContainer@9105/@Control@9106/@SubViewportContainer@9107/@SubViewport@9108/GameMenu/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_2/Bone_1_2/Bone_2_2/Bone_3_2/Bone_4_2/Bone_5_2/Bone_6_2", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.15, 0.7, 0.15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@18065/@Panel@14/@VBoxContainer@15/DockHSplitMain/@VBoxContainer@28/DockVSplitCenter/@VSplitContainer@70/@VBoxContainer@71/@EditorMainScreen@125/MainScreen/@CanvasItemEditor@9318/@VSplitContainer@9101/@HSplitContainer@9103/@HSplitContainer@9105/@Control@9106/@SubViewportContainer@9107/@SubViewport@9108/GameMenu/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_2/Bone_1_2/Bone_2_2/Bone_3_2/Bone_4_2/Bone_5_2/Bone_6_2/Bone_7_2", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.15, 0.7, 0.15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@18065/@Panel@14/@VBoxContainer@15/DockHSplitMain/@VBoxContainer@28/DockVSplitCenter/@VSplitContainer@70/@VBoxContainer@71/@EditorMainScreen@125/MainScreen/@CanvasItemEditor@9318/@VSplitContainer@9101/@HSplitContainer@9103/@HSplitContainer@9105/@Control@9106/@SubViewportContainer@9107/@SubViewport@9108/GameMenu/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_2/Bone_1_2/Bone_2_2/Bone_3_2/Bone_4_2/Bone_5_2/Bone_6_2/Bone_7_2/Bone_8_2", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.15, 0.84999996, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@18065/@Panel@14/@VBoxContainer@15/DockHSplitMain/@VBoxContainer@28/DockVSplitCenter/@VSplitContainer@70/@VBoxContainer@71/@EditorMainScreen@125/MainScreen/@CanvasItemEditor@9318/@VSplitContainer@9101/@HSplitContainer@9103/@HSplitContainer@9105/@Control@9106/@SubViewportContainer@9107/@SubViewport@9108/GameMenu/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_3", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.84999996, 0.15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@18065/@Panel@14/@VBoxContainer@15/DockHSplitMain/@VBoxContainer@28/DockVSplitCenter/@VSplitContainer@70/@VBoxContainer@71/@EditorMainScreen@125/MainScreen/@CanvasItemEditor@9318/@VSplitContainer@9101/@HSplitContainer@9103/@HSplitContainer@9105/@Control@9106/@SubViewportContainer@9107/@SubViewport@9108/GameMenu/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_3/Bone_1_3", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.15, 0.7, 0.15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@18065/@Panel@14/@VBoxContainer@15/DockHSplitMain/@VBoxContainer@28/DockVSplitCenter/@VSplitContainer@70/@VBoxContainer@71/@EditorMainScreen@125/MainScreen/@CanvasItemEditor@9318/@VSplitContainer@9101/@HSplitContainer@9103/@HSplitContainer@9105/@Control@9106/@SubViewportContainer@9107/@SubViewport@9108/GameMenu/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_3/Bone_1_3/Bone_2_3", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.15, 0.7, 0.15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@18065/@Panel@14/@VBoxContainer@15/DockHSplitMain/@VBoxContainer@28/DockVSplitCenter/@VSplitContainer@70/@VBoxContainer@71/@EditorMainScreen@125/MainScreen/@CanvasItemEditor@9318/@VSplitContainer@9101/@HSplitContainer@9103/@HSplitContainer@9105/@Control@9106/@SubViewportContainer@9107/@SubViewport@9108/GameMenu/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_3/Bone_1_3/Bone_2_3/Bone_3_3", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.15, 0.7, 0.15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@18065/@Panel@14/@VBoxContainer@15/DockHSplitMain/@VBoxContainer@28/DockVSplitCenter/@VSplitContainer@70/@VBoxContainer@71/@EditorMainScreen@125/MainScreen/@CanvasItemEditor@9318/@VSplitContainer@9101/@HSplitContainer@9103/@HSplitContainer@9105/@Control@9106/@SubViewportContainer@9107/@SubViewport@9108/GameMenu/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_3/Bone_1_3/Bone_2_3/Bone_3_3/Bone_4_3", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.15, 0.7, 0.15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@18065/@Panel@14/@VBoxContainer@15/DockHSplitMain/@VBoxContainer@28/DockVSplitCenter/@VSplitContainer@70/@VBoxContainer@71/@EditorMainScreen@125/MainScreen/@CanvasItemEditor@9318/@VSplitContainer@9101/@HSplitContainer@9103/@HSplitContainer@9105/@Control@9106/@SubViewportContainer@9107/@SubViewport@9108/GameMenu/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_3/Bone_1_3/Bone_2_3/Bone_3_3/Bone_4_3/Bone_5_3", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.15, 0.7, 0.15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@18065/@Panel@14/@VBoxContainer@15/DockHSplitMain/@VBoxContainer@28/DockVSplitCenter/@VSplitContainer@70/@VBoxContainer@71/@EditorMainScreen@125/MainScreen/@CanvasItemEditor@9318/@VSplitContainer@9101/@HSplitContainer@9103/@HSplitContainer@9105/@Control@9106/@SubViewportContainer@9107/@SubViewport@9108/GameMenu/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_3/Bone_1_3/Bone_2_3/Bone_3_3/Bone_4_3/Bone_5_3/Bone_6_3", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.15, 0.7, 0.15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@18065/@Panel@14/@VBoxContainer@15/DockHSplitMain/@VBoxContainer@28/DockVSplitCenter/@VSplitContainer@70/@VBoxContainer@71/@EditorMainScreen@125/MainScreen/@CanvasItemEditor@9318/@VSplitContainer@9101/@HSplitContainer@9103/@HSplitContainer@9105/@Control@9106/@SubViewportContainer@9107/@SubViewport@9108/GameMenu/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_3/Bone_1_3/Bone_2_3/Bone_3_3/Bone_4_3/Bone_5_3/Bone_6_3/Bone_7_3", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.15, 0.7, 0.15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@18065/@Panel@14/@VBoxContainer@15/DockHSplitMain/@VBoxContainer@28/DockVSplitCenter/@VSplitContainer@70/@VBoxContainer@71/@EditorMainScreen@125/MainScreen/@CanvasItemEditor@9318/@VSplitContainer@9101/@HSplitContainer@9103/@HSplitContainer@9105/@Control@9106/@SubViewportContainer@9107/@SubViewport@9108/GameMenu/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_3/Bone_1_3/Bone_2_3/Bone_3_3/Bone_4_3/Bone_5_3/Bone_6_3/Bone_7_3/Bone_8_3", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.15, 0.84999996, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@18065/@Panel@14/@VBoxContainer@15/DockHSplitMain/@VBoxContainer@28/DockVSplitCenter/@VSplitContainer@70/@VBoxContainer@71/@EditorMainScreen@125/MainScreen/@CanvasItemEditor@9318/@VSplitContainer@9101/@HSplitContainer@9103/@HSplitContainer@9105/@Control@9106/@SubViewportContainer@9107/@SubViewport@9108/GameMenu/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_4", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.84999996, 0.15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@18065/@Panel@14/@VBoxContainer@15/DockHSplitMain/@VBoxContainer@28/DockVSplitCenter/@VSplitContainer@70/@VBoxContainer@71/@EditorMainScreen@125/MainScreen/@CanvasItemEditor@9318/@VSplitContainer@9101/@HSplitContainer@9103/@HSplitContainer@9105/@Control@9106/@SubViewportContainer@9107/@SubViewport@9108/GameMenu/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_4/Bone_1_4", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.15, 0.7, 0.15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@18065/@Panel@14/@VBoxContainer@15/DockHSplitMain/@VBoxContainer@28/DockVSplitCenter/@VSplitContainer@70/@VBoxContainer@71/@EditorMainScreen@125/MainScreen/@CanvasItemEditor@9318/@VSplitContainer@9101/@HSplitContainer@9103/@HSplitContainer@9105/@Control@9106/@SubViewportContainer@9107/@SubViewport@9108/GameMenu/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_4/Bone_1_4/Bone_2_4", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.15, 0.7, 0.15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@18065/@Panel@14/@VBoxContainer@15/DockHSplitMain/@VBoxContainer@28/DockVSplitCenter/@VSplitContainer@70/@VBoxContainer@71/@EditorMainScreen@125/MainScreen/@CanvasItemEditor@9318/@VSplitContainer@9101/@HSplitContainer@9103/@HSplitContainer@9105/@Control@9106/@SubViewportContainer@9107/@SubViewport@9108/GameMenu/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_4/Bone_1_4/Bone_2_4/Bone_3_4", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.15, 0.7, 0.15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@18065/@Panel@14/@VBoxContainer@15/DockHSplitMain/@VBoxContainer@28/DockVSplitCenter/@VSplitContainer@70/@VBoxContainer@71/@EditorMainScreen@125/MainScreen/@CanvasItemEditor@9318/@VSplitContainer@9101/@HSplitContainer@9103/@HSplitContainer@9105/@Control@9106/@SubViewportContainer@9107/@SubViewport@9108/GameMenu/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_4/Bone_1_4/Bone_2_4/Bone_3_4/Bone_4_4", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.15, 0.7, 0.15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@18065/@Panel@14/@VBoxContainer@15/DockHSplitMain/@VBoxContainer@28/DockVSplitCenter/@VSplitContainer@70/@VBoxContainer@71/@EditorMainScreen@125/MainScreen/@CanvasItemEditor@9318/@VSplitContainer@9101/@HSplitContainer@9103/@HSplitContainer@9105/@Control@9106/@SubViewportContainer@9107/@SubViewport@9108/GameMenu/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_4/Bone_1_4/Bone_2_4/Bone_3_4/Bone_4_4/Bone_5_4", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.15, 0.7, 0.15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@18065/@Panel@14/@VBoxContainer@15/DockHSplitMain/@VBoxContainer@28/DockVSplitCenter/@VSplitContainer@70/@VBoxContainer@71/@EditorMainScreen@125/MainScreen/@CanvasItemEditor@9318/@VSplitContainer@9101/@HSplitContainer@9103/@HSplitContainer@9105/@Control@9106/@SubViewportContainer@9107/@SubViewport@9108/GameMenu/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_4/Bone_1_4/Bone_2_4/Bone_3_4/Bone_4_4/Bone_5_4/Bone_6_4", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.15, 0.7, 0.15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@18065/@Panel@14/@VBoxContainer@15/DockHSplitMain/@VBoxContainer@28/DockVSplitCenter/@VSplitContainer@70/@VBoxContainer@71/@EditorMainScreen@125/MainScreen/@CanvasItemEditor@9318/@VSplitContainer@9101/@HSplitContainer@9103/@HSplitContainer@9105/@Control@9106/@SubViewportContainer@9107/@SubViewport@9108/GameMenu/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_4/Bone_1_4/Bone_2_4/Bone_3_4/Bone_4_4/Bone_5_4/Bone_6_4/Bone_7_4", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.15, 0.7, 0.15, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@18065/@Panel@14/@VBoxContainer@15/DockHSplitMain/@VBoxContainer@28/DockVSplitCenter/@VSplitContainer@70/@VBoxContainer@71/@EditorMainScreen@125/MainScreen/@CanvasItemEditor@9318/@VSplitContainer@9101/@HSplitContainer@9103/@HSplitContainer@9105/@Control@9106/@SubViewportContainer@9107/@SubViewport@9108/GameMenu/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_4/Bone_1_4/Bone_2_4/Bone_3_4/Bone_4_4/Bone_5_4/Bone_6_4/Bone_7_4/Bone_8_4", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.15, 0.84999996, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@18065/@Panel@14/@VBoxContainer@15/DockHSplitMain/@VBoxContainer@28/DockVSplitCenter/@VSplitContainer@70/@VBoxContainer@71/@EditorMainScreen@125/MainScreen/@CanvasItemEditor@9318/@VSplitContainer@9101/@HSplitContainer@9103/@HSplitContainer@9105/@Control@9106/@SubViewportContainer@9107/@SubViewport@9108/GameMenu/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_5", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.84999996, 0.15, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@18065/@Panel@14/@VBoxContainer@15/DockHSplitMain/@VBoxContainer@28/DockVSplitCenter/@VSplitContainer@70/@VBoxContainer@71/@EditorMainScreen@125/MainScreen/@CanvasItemEditor@9318/@VSplitContainer@9101/@HSplitContainer@9103/@HSplitContainer@9105/@Control@9106/@SubViewportContainer@9107/@SubViewport@9108/GameMenu/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_5/Bone_1_5", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.15, 0.7, 0.15, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@18065/@Panel@14/@VBoxContainer@15/DockHSplitMain/@VBoxContainer@28/DockVSplitCenter/@VSplitContainer@70/@VBoxContainer@71/@EditorMainScreen@125/MainScreen/@CanvasItemEditor@9318/@VSplitContainer@9101/@HSplitContainer@9103/@HSplitContainer@9105/@Control@9106/@SubViewportContainer@9107/@SubViewport@9108/GameMenu/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_5/Bone_1_5/Bone_2_5", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.15, 0.7, 0.15, 0, 0, 0, 0, 0), "/root/@EditorNode@18065/@Panel@14/@VBoxContainer@15/DockHSplitMain/@VBoxContainer@28/DockVSplitCenter/@VSplitContainer@70/@VBoxContainer@71/@EditorMainScreen@125/MainScreen/@CanvasItemEditor@9318/@VSplitContainer@9101/@HSplitContainer@9103/@HSplitContainer@9105/@Control@9106/@SubViewportContainer@9107/@SubViewport@9108/GameMenu/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_5/Bone_1_5/Bone_2_5/Bone_3_5", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.15, 0.7, 0.15, 0, 0, 0, 0), "/root/@EditorNode@18065/@Panel@14/@VBoxContainer@15/DockHSplitMain/@VBoxContainer@28/DockVSplitCenter/@VSplitContainer@70/@VBoxContainer@71/@EditorMainScreen@125/MainScreen/@CanvasItemEditor@9318/@VSplitContainer@9101/@HSplitContainer@9103/@HSplitContainer@9105/@Control@9106/@SubViewportContainer@9107/@SubViewport@9108/GameMenu/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_5/Bone_1_5/Bone_2_5/Bone_3_5/Bone_4_5", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.15, 0.7, 0.15, 0, 0, 0), "/root/@EditorNode@18065/@Panel@14/@VBoxContainer@15/DockHSplitMain/@VBoxContainer@28/DockVSplitCenter/@VSplitContainer@70/@VBoxContainer@71/@EditorMainScreen@125/MainScreen/@CanvasItemEditor@9318/@VSplitContainer@9101/@HSplitContainer@9103/@HSplitContainer@9105/@Control@9106/@SubViewportContainer@9107/@SubViewport@9108/GameMenu/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_5/Bone_1_5/Bone_2_5/Bone_3_5/Bone_4_5/Bone_5_5", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.15, 0.7, 0.15, 0, 0), "/root/@EditorNode@18065/@Panel@14/@VBoxContainer@15/DockHSplitMain/@VBoxContainer@28/DockVSplitCenter/@VSplitContainer@70/@VBoxContainer@71/@EditorMainScreen@125/MainScreen/@CanvasItemEditor@9318/@VSplitContainer@9101/@HSplitContainer@9103/@HSplitContainer@9105/@Control@9106/@SubViewportContainer@9107/@SubViewport@9108/GameMenu/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_5/Bone_1_5/Bone_2_5/Bone_3_5/Bone_4_5/Bone_5_5/Bone_6_5", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.15, 0.7, 0.15, 0), "/root/@EditorNode@18065/@Panel@14/@VBoxContainer@15/DockHSplitMain/@VBoxContainer@28/DockVSplitCenter/@VSplitContainer@70/@VBoxContainer@71/@EditorMainScreen@125/MainScreen/@CanvasItemEditor@9318/@VSplitContainer@9101/@HSplitContainer@9103/@HSplitContainer@9105/@Control@9106/@SubViewportContainer@9107/@SubViewport@9108/GameMenu/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_5/Bone_1_5/Bone_2_5/Bone_3_5/Bone_4_5/Bone_5_5/Bone_6_5/Bone_7_5", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.15, 0.7, 0.15), "/root/@EditorNode@18065/@Panel@14/@VBoxContainer@15/DockHSplitMain/@VBoxContainer@28/DockVSplitCenter/@VSplitContainer@70/@VBoxContainer@71/@EditorMainScreen@125/MainScreen/@CanvasItemEditor@9318/@VSplitContainer@9101/@HSplitContainer@9103/@HSplitContainer@9105/@Control@9106/@SubViewportContainer@9107/@SubViewport@9108/GameMenu/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_5/Bone_1_5/Bone_2_5/Bone_3_5/Bone_4_5/Bone_5_5/Bone_6_5/Bone_7_5/Bone_8_5", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.15, 0.84999996)] +script = ExtResource("15_5d0t0") +animation_preset = 7 +anim_player = NodePath("../../AnimationPlayer") +anim_duration = 1.3 +paper_stiffness = 0.3 +lift_bend = -28.0 +land_bend = 0.0 +curl_mode = 2 +curl_lag = 0.6 +shadow_gradient = ExtResource("16_pjwsa") +timing_peak_lift = 0.2 +timing_peak_land = 0.95 + +[node name="RuntimeSpine" type="Polygon2D" parent="PageFlip/Visual" unique_id=1249095225] +z_index = 15 +texture = ExtResource("11_5shjh") +polygon = PackedVector2Array(-6, -287, 6, -287, 6, 287, -6, 287) +uv = PackedVector2Array(0, 0, 4, 0, 4, 820, 0, 820) + +[node name="AnimationPlayer" type="AnimationPlayer" parent="PageFlip" unique_id=508278521] +libraries/ = SubResource("AnimationLibrary_hqhik") +autoplay = &"turn_page_left" +speed_scale = 10.0 + +[node name="AudioStreamPlayer" type="AudioStreamPlayer" parent="PageFlip" unique_id=1072226159] + +[node name="HighlightedPhoto" parent="." unique_id=888465569 instance=ExtResource("16_hr6qm")] +visible = false +z_index = 2 +layout_mode = 1 diff --git a/core/game_menu/highlighted_photo.gd b/core/game_menu/highlighted_photo.gd index f820ba2..c2c85cf 100644 --- a/core/game_menu/highlighted_photo.gd +++ b/core/game_menu/highlighted_photo.gd @@ -3,7 +3,7 @@ extends Control @onready var photo: Photo = $%Photo @onready var panel: Panel = $%Panel - +var is_closing: bool = false func _ready() -> void: GameState.on_photo_highlighted.connect(_on_photo_highlighted) @@ -15,10 +15,13 @@ func _on_photo_highlighted(texture: Texture) -> void: TweenFX.fold_in(photo) photo.setup(texture) - -var is_closing: bool = false - -func _on_panel_gui_input(event: InputEvent) -> void: +func _input(event: InputEvent) -> void: + if not visible: + return + + if event is InputEventMouse: + get_viewport().set_input_as_handled() + if is_closing: return if event is InputEventMouseButton and event.button_index == MOUSE_BUTTON_LEFT and event.pressed: diff --git a/core/game_menu/highlighted_photo.tscn b/core/game_menu/highlighted_photo.tscn index fb44250..d8bf1ff 100644 --- a/core/game_menu/highlighted_photo.tscn +++ b/core/game_menu/highlighted_photo.tscn @@ -45,6 +45,4 @@ theme_override_constants/margin_top = 30 theme_override_constants/margin_right = 20 theme_override_constants/margin_bottom = 185 -[connection signal="gui_input" from="Panel" to="." method="_on_panel_gui_input"] - [editable path="Photo"] diff --git a/core/game_menu/option_menu.gd b/core/game_menu/option_menu.gd index dae796a..cf1c308 100644 --- a/core/game_menu/option_menu.gd +++ b/core/game_menu/option_menu.gd @@ -17,6 +17,7 @@ func _ready() -> void: play_button.pressed.connect(_on_play_button_pressed) save_button.pressed.connect(_on_save_button_pressed) quit_button.pressed.connect(_on_quit_button_pressed) + resume_button.pressed.connect(func(): UIEvents.resume_game_requested.emit()) func _on_play_button_pressed() -> void: _play_train_horn() diff --git a/core/game_menu/page_1.tscn b/core/game_menu/page_1.tscn index 7f41ec4..01b9233 100644 --- a/core/game_menu/page_1.tscn +++ b/core/game_menu/page_1.tscn @@ -2,8 +2,6 @@ [ext_resource type="PackedScene" uid="uid://id854u4gh12f" path="res://core/game_menu/page.tscn" id="1_uxih6"] [ext_resource type="Texture2D" uid="uid://bd80xo2id3xdm" path="res://core/game_menu/assets/decoration_page1.png" id="2_3i50p"] -[ext_resource type="PackedScene" uid="uid://bh1kxsp5jyxfx" path="res://core/game_menu/train_selector.tscn" id="3_ijm38"] -[ext_resource type="PackedScene" uid="uid://bc60gon7fmvbr" path="res://core/game_menu/biome_selector.tscn" id="12_7yi8x"] [node name="Page1" unique_id=2037261222 instance=ExtResource("1_uxih6")] anchors_preset = 15 @@ -16,6 +14,7 @@ grow_vertical = 2 mouse_filter = 2 [node name="Background" parent="." index="0" unique_id=1203110384] +visible = true layout_mode = 1 anchors_preset = 15 anchor_right = 1.0 @@ -36,17 +35,3 @@ pivot_offset_ratio = Vector2(0.5, 0.5) mouse_filter = 2 texture = ExtResource("2_3i50p") expand_mode = 1 - -[node name="TrainSelector" parent="." index="2" unique_id=1039769375 instance=ExtResource("3_ijm38")] -layout_mode = 0 -offset_left = 211.0 -offset_top = 365.0 -offset_right = 871.0 -offset_bottom = 758.0 - -[node name="BiomeSelector" parent="." index="3" unique_id=1957954960 instance=ExtResource("12_7yi8x")] -layout_mode = 0 -offset_left = 1038.0 -offset_top = 365.0 -offset_right = 1738.0 -offset_bottom = 783.0 diff --git a/core/game_menu/page_1_left.tscn b/core/game_menu/page_1_left.tscn new file mode 100644 index 0000000..aeac6a2 --- /dev/null +++ b/core/game_menu/page_1_left.tscn @@ -0,0 +1,52 @@ +[gd_scene format=3 uid="uid://h8hbdm1uno7q"] + +[ext_resource type="Script" uid="uid://0yyr318wl7co" path="res://core/game_menu/page_interactive.gd" id="1_script"] +[ext_resource type="PackedScene" uid="uid://bh1kxsp5jyxfx" path="res://core/game_menu/train_selector.tscn" id="2_train"] +[ext_resource type="Texture2D" uid="uid://kvn5l0n11a3q" path="res://core/game_menu/assets/page.png" id="3_page_bg"] +[ext_resource type="Texture2D" uid="uid://dbpfa1xgxxn8s" path="res://core/game_menu/assets/page_1/1_sx.png" id="3_sm65a"] + +[node name="Page1Left" type="Control" unique_id=1881242741] +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_right = -1160.0 +offset_bottom = -506.0 +grow_horizontal = 2 +grow_vertical = 2 +mouse_filter = 2 +script = ExtResource("1_script") + +[node name="PageBackground" type="TextureRect" parent="." unique_id=820333238] +layout_mode = 1 +anchors_preset = 9 +anchor_bottom = 1.0 +offset_right = 760.0 +grow_vertical = 2 +mouse_filter = 2 +texture = ExtResource("3_page_bg") +expand_mode = 1 +flip_h = true + +[node name="PageBackground2" type="TextureRect" parent="." unique_id=1693418558] +layout_mode = 1 +anchors_preset = 9 +anchor_bottom = 1.0 +offset_right = 760.0 +grow_vertical = 2 +mouse_filter = 2 +texture = ExtResource("3_sm65a") + +[node name="TrainSelector" parent="." unique_id=2114418660 instance=ExtResource("2_train")] +layout_mode = 1 +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +offset_left = -346.0 +offset_top = -154.5 +offset_right = 279.0 +offset_bottom = 154.5 +grow_horizontal = 2 +grow_vertical = 2 diff --git a/core/game_menu/page_1_right.tscn b/core/game_menu/page_1_right.tscn new file mode 100644 index 0000000..7613698 --- /dev/null +++ b/core/game_menu/page_1_right.tscn @@ -0,0 +1,58 @@ +[gd_scene format=3 uid="uid://d06kfd33fgepf"] + +[ext_resource type="Script" uid="uid://0yyr318wl7co" path="res://core/game_menu/page_interactive.gd" id="1_script"] +[ext_resource type="PackedScene" uid="uid://bc60gon7fmvbr" path="res://core/game_menu/biome_selector.tscn" id="2_biome"] +[ext_resource type="Texture2D" uid="uid://dyvwywse5raqt" path="res://core/game_menu/assets/page_1/1_dx.png" id="3_6tfbo"] +[ext_resource type="Texture2D" uid="uid://kvn5l0n11a3q" path="res://core/game_menu/assets/page.png" id="3_page_bg"] + +[node name="Page1Right" type="Control" unique_id=2093612752] +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_right = -1160.0 +offset_bottom = -506.0 +grow_horizontal = 2 +grow_vertical = 2 +mouse_filter = 2 +script = ExtResource("1_script") + +[node name="PageBackground" type="TextureRect" parent="." unique_id=1432670109] +layout_mode = 1 +anchors_preset = 11 +anchor_left = 1.0 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_left = -760.0 +grow_horizontal = 0 +grow_vertical = 2 +mouse_filter = 2 +texture = ExtResource("3_page_bg") +expand_mode = 1 + +[node name="PageBackground2" type="TextureRect" parent="." unique_id=1327230938] +layout_mode = 1 +anchors_preset = 11 +anchor_left = 1.0 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_left = -760.0 +grow_horizontal = 0 +grow_vertical = 2 +mouse_filter = 2 +texture = ExtResource("3_6tfbo") +stretch_mode = 2 + +[node name="BiomeSelector" parent="." unique_id=679177937 instance=ExtResource("2_biome")] +layout_mode = 1 +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +offset_left = -301.0 +offset_top = -158.0 +offset_right = 368.0 +offset_bottom = 158.0 +grow_horizontal = 2 +grow_vertical = 2 diff --git a/core/game_menu/page_2.tscn b/core/game_menu/page_2.tscn index 596ffc8..2ee6b0f 100644 --- a/core/game_menu/page_2.tscn +++ b/core/game_menu/page_2.tscn @@ -1,13 +1,7 @@ [gd_scene format=3 uid="uid://4bamw5busnvc"] [ext_resource type="PackedScene" uid="uid://id854u4gh12f" path="res://core/game_menu/page.tscn" id="1_ka6tx"] -[ext_resource type="Texture2D" uid="uid://xgx0211eo8hi" path="res://core/game_menu/assets/page_2/photocollections_text.png" id="2_4uwhd"] [ext_resource type="Texture2D" uid="uid://d3qq4ho24phyw" path="res://core/game_menu/assets/decoration_page2.png" id="2_xqdsh"] -[ext_resource type="Texture2D" uid="uid://xfl3ks4dbfaw" path="res://core/game_menu/assets/page_2/achievements_text.png" id="3_4uwhd"] -[ext_resource type="PackedScene" uid="uid://b6r787sik5yil" path="res://core/game_menu/photo_gallery.tscn" id="4_3tfra"] -[ext_resource type="PackedScene" uid="uid://bvw086glfpcba" path="res://core/game_menu/collectible_gallery.tscn" id="5_w0bcg"] -[ext_resource type="PackedScene" uid="uid://c7t3p8sp54apy" path="res://core/game_menu/highlighted_photo.tscn" id="6_2273a"] -[ext_resource type="Texture2D" uid="uid://bx6gsh5uchkge" path="res://core/game_menu/assets/lock.png" id="8_48jk0"] [node name="Page2" unique_id=2037261222 instance=ExtResource("1_ka6tx")] anchors_preset = 15 @@ -31,49 +25,4 @@ mouse_filter = 2 texture = ExtResource("2_xqdsh") expand_mode = 1 -[node name="PhotoCollectionText" type="TextureRect" parent="." index="2" unique_id=240014191] -layout_mode = 0 -offset_left = 260.0 -offset_top = 330.0 -offset_right = 827.0 -offset_bottom = 415.0 -texture = ExtResource("2_4uwhd") -stretch_mode = 3 -[node name="AchievementsText" type="TextureRect" parent="." index="3" unique_id=1478291812] -layout_mode = 0 -offset_left = 1184.0 -offset_top = 330.0 -offset_right = 1579.0 -offset_bottom = 401.0 -texture = ExtResource("3_4uwhd") -stretch_mode = 3 - -[node name="PhotoGallery" parent="." index="4" unique_id=354419843 instance=ExtResource("4_3tfra")] -layout_mode = 1 -offset_left = 244.0 -offset_top = 410.0 -offset_right = 844.0 -offset_bottom = 850.0 - -[node name="CollectibleGallery" parent="." index="5" unique_id=708445500 instance=ExtResource("5_w0bcg")] -visible = false -layout_mode = 1 -offset_left = 1050.0 -offset_top = 425.0 -offset_right = 1690.0 -offset_bottom = 835.0011 - -[node name="HighlightedPhoto" parent="." index="6" unique_id=888465569 instance=ExtResource("6_2273a")] -visible = false -layout_mode = 1 - -[node name="LockTexture" type="TextureRect" parent="." index="7" unique_id=1369712242] -layout_mode = 0 -offset_left = 1265.0 -offset_top = 449.0 -offset_right = 1547.0 -offset_bottom = 809.6977 -texture = ExtResource("8_48jk0") -expand_mode = 1 -stretch_mode = 5 diff --git a/core/game_menu/page_2_left.tscn b/core/game_menu/page_2_left.tscn new file mode 100644 index 0000000..389033e --- /dev/null +++ b/core/game_menu/page_2_left.tscn @@ -0,0 +1,57 @@ +[gd_scene format=3 uid="uid://ct0pbs1nyi3d1"] + +[ext_resource type="Script" uid="uid://0yyr318wl7co" path="res://core/game_menu/page_interactive.gd" id="1_script"] +[ext_resource type="Texture2D" uid="uid://xgx0211eo8hi" path="res://core/game_menu/assets/page_2/photocollections_text.png" id="2_text"] +[ext_resource type="PackedScene" uid="uid://b6r787sik5yil" path="res://core/game_menu/photo_gallery.tscn" id="3_gallery"] +[ext_resource type="Texture2D" uid="uid://cgllgxrstcoy7" path="res://core/game_menu/assets/page_2/2_sx.png" id="3_sfb5f"] +[ext_resource type="Texture2D" uid="uid://kvn5l0n11a3q" path="res://core/game_menu/assets/page.png" id="4_page_bg"] + +[node name="Page2Left" type="Control" unique_id=922443654] +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_right = -1160.0 +offset_bottom = -506.0 +grow_horizontal = 2 +grow_vertical = 2 +mouse_filter = 2 +script = ExtResource("1_script") + +[node name="PageBackground" type="TextureRect" parent="." unique_id=1425677666] +layout_mode = 1 +anchors_preset = 9 +anchor_bottom = 1.0 +offset_right = 760.0 +grow_vertical = 2 +mouse_filter = 2 +texture = ExtResource("4_page_bg") +expand_mode = 1 +flip_h = true + +[node name="PageBackground2" type="TextureRect" parent="." unique_id=1817272886] +layout_mode = 1 +anchors_preset = 9 +anchor_bottom = 1.0 +offset_right = 760.0 +grow_vertical = 2 +mouse_filter = 2 +texture = ExtResource("3_sfb5f") +stretch_mode = 2 + +[node name="PhotoCollectionText" type="TextureRect" parent="." unique_id=643307421] +layout_mode = 0 +offset_left = 96.0 +offset_top = 27.0 +offset_right = 663.0 +offset_bottom = 112.0 +mouse_filter = 2 +texture = ExtResource("2_text") +stretch_mode = 3 + +[node name="PhotoGallery" parent="." unique_id=1823812771 instance=ExtResource("3_gallery")] +layout_mode = 1 +offset_left = 80.0 +offset_top = 107.0 +offset_right = 680.0 +offset_bottom = 547.0 diff --git a/core/game_menu/page_2_right.tscn b/core/game_menu/page_2_right.tscn new file mode 100644 index 0000000..7999b53 --- /dev/null +++ b/core/game_menu/page_2_right.tscn @@ -0,0 +1,103 @@ +[gd_scene format=3 uid="uid://clno1ahv2byng"] + +[ext_resource type="Script" uid="uid://0yyr318wl7co" path="res://core/game_menu/page_interactive.gd" id="1_script"] +[ext_resource type="Texture2D" uid="uid://xfl3ks4dbfaw" path="res://core/game_menu/assets/page_2/achievements_text.png" id="3_4uwhd"] +[ext_resource type="Texture2D" uid="uid://drwe2xcnp8vs1" path="res://core/game_menu/assets/page_2/2_dx.png" id="3_msl27"] +[ext_resource type="PackedScene" uid="uid://bvw086glfpcba" path="res://core/game_menu/collectible_gallery.tscn" id="5_w0bcg"] +[ext_resource type="Texture2D" uid="uid://bx6gsh5uchkge" path="res://core/game_menu/assets/lock.png" id="8_48jk0"] +[ext_resource type="Texture2D" uid="uid://vg5y4qgc26ko" path="res://core/game_menu/assets/page_3/coming_soon_01.png" id="8_71v1w"] +[ext_resource type="Texture2D" uid="uid://bmatlcouch6jm" path="res://core/game_menu/assets/page_3/coming_soon_02.png" id="9_g7kul"] +[ext_resource type="Texture2D" uid="uid://kvn5l0n11a3q" path="res://core/game_menu/assets/page.png" id="9_page_bg"] +[ext_resource type="Texture2D" uid="uid://bm55xiv8jgnni" path="res://core/game_menu/assets/page_3/coming_soon_03.png" id="10_h6k52"] +[ext_resource type="Texture2D" uid="uid://cj81qdlrulal2" path="res://core/game_menu/assets/page_3/coming_soon_04.png" id="11_7aajs"] +[ext_resource type="Texture2D" uid="uid://biu4i40ck272q" path="res://core/game_menu/assets/page_3/coming_soon_05.png" id="12_dn2di"] + +[sub_resource type="AnimatedTexture" id="AnimatedTexture_0x02d"] +frames = 5 +frame_0/texture = ExtResource("8_71v1w") +frame_0/duration = 0.15 +frame_1/texture = ExtResource("9_g7kul") +frame_1/duration = 0.15 +frame_2/texture = ExtResource("10_h6k52") +frame_2/duration = 0.15 +frame_3/texture = ExtResource("11_7aajs") +frame_3/duration = 0.15 +frame_4/texture = ExtResource("12_dn2di") +frame_4/duration = 0.15 + +[node name="Page2Right" type="Control" unique_id=944053844] +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_right = -1160.0 +offset_bottom = -506.0 +grow_horizontal = 2 +grow_vertical = 2 +mouse_filter = 2 +script = ExtResource("1_script") + +[node name="PageBackground" type="TextureRect" parent="." unique_id=1387851649] +layout_mode = 1 +anchors_preset = 11 +anchor_left = 1.0 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_left = -760.0 +grow_horizontal = 0 +grow_vertical = 2 +mouse_filter = 2 +texture = ExtResource("9_page_bg") +expand_mode = 1 + +[node name="PageBackground2" type="TextureRect" parent="." unique_id=1602066462] +layout_mode = 1 +anchors_preset = 11 +anchor_left = 1.0 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_left = -760.0 +grow_horizontal = 0 +grow_vertical = 2 +mouse_filter = 2 +texture = ExtResource("3_msl27") +stretch_mode = 2 + +[node name="AchievementsText" type="TextureRect" parent="." unique_id=766898810] +layout_mode = 0 +offset_left = 261.0 +offset_top = 34.5 +offset_right = 656.0 +offset_bottom = 105.5 +mouse_filter = 2 +texture = ExtResource("3_4uwhd") +stretch_mode = 3 + +[node name="CollectibleGallery" parent="." unique_id=916407522 instance=ExtResource("5_w0bcg")] +visible = false +layout_mode = 1 +offset_left = 127.0 +offset_top = 129.5 +offset_right = 767.0 +offset_bottom = 539.5 + +[node name="LockTexture" type="TextureRect" parent="." unique_id=535700029] +layout_mode = 0 +offset_left = 342.0 +offset_top = 153.5 +offset_right = 624.0 +offset_bottom = 514.2 +mouse_filter = 2 +texture = ExtResource("8_48jk0") +expand_mode = 1 +stretch_mode = 5 + +[node name="TextureRect" type="TextureRect" parent="." unique_id=1942592146] +layout_mode = 0 +offset_left = 596.0 +offset_top = 86.0 +offset_right = 743.0 +offset_bottom = 233.0 +texture = SubResource("AnimatedTexture_0x02d") +expand_mode = 1 +stretch_mode = 5 diff --git a/core/game_menu/page_3.tscn b/core/game_menu/page_3.tscn index 58aeaae..4170afc 100644 --- a/core/game_menu/page_3.tscn +++ b/core/game_menu/page_3.tscn @@ -2,9 +2,7 @@ [ext_resource type="PackedScene" uid="uid://id854u4gh12f" path="res://core/game_menu/page.tscn" id="1_ua8fn"] [ext_resource type="Texture2D" uid="uid://fpnhk1ygcrmu" path="res://core/game_menu/assets/page_3/bg_timbri.png" id="2_ckqcb"] -[ext_resource type="PackedScene" uid="uid://cxf8s80ivwj1p" path="res://core/game_menu/option_menu.tscn" id="2_tymfi"] [ext_resource type="Texture2D" uid="uid://db2yhovnqq4cp" path="res://core/game_menu/assets/decoration_page3.png" id="2_yx6jr"] -[ext_resource type="PackedScene" uid="uid://caqf471x0kttc" path="res://core/game_menu/settings_menu.tscn" id="4_twko7"] [node name="Page3" unique_id=2037261222 instance=ExtResource("1_ua8fn")] anchors_preset = 15 @@ -37,33 +35,4 @@ anchor_bottom = 0.7740741 texture = ExtResource("2_ckqcb") metadata/_edit_use_anchors_ = true -[node name="OptionMenu" parent="." index="3" unique_id=1055457221 instance=ExtResource("2_tymfi")] -layout_mode = 0 -anchors_preset = 0 -anchor_left = 0.7213542 -anchor_top = 0.5212963 -anchor_right = 0.7213542 -anchor_bottom = 0.5212963 -grow_horizontal = 1 -grow_vertical = 1 -metadata/_edit_use_anchors_ = true -[node name="PlayButton" parent="OptionMenu/VBoxContainer" parent_id_path=PackedInt32Array(1055457221, 508055524) index="0" unique_id=1990327704] -visible = false - -[node name="SettingsButton" parent="OptionMenu/VBoxContainer" parent_id_path=PackedInt32Array(1055457221, 508055524) index="2" unique_id=1931222561] -visible = false - -[node name="SettingsMenu" parent="." index="4" unique_id=1639777294 instance=ExtResource("4_twko7")] -layout_mode = 1 -anchor_top = 0.5388889 -anchor_right = 0.0 -anchor_bottom = 0.5388889 -offset_left = 278.11 -offset_top = -240.0 -offset_right = 902.11 -offset_bottom = 285.0 -grow_vertical = 2 -size_flags_horizontal = 6 - -[editable path="OptionMenu"] diff --git a/core/game_menu/page_3_left.tscn b/core/game_menu/page_3_left.tscn new file mode 100644 index 0000000..cd32841 --- /dev/null +++ b/core/game_menu/page_3_left.tscn @@ -0,0 +1,50 @@ +[gd_scene format=3 uid="uid://dhjocrxlqosyr"] + +[ext_resource type="Script" uid="uid://0yyr318wl7co" path="res://core/game_menu/page_interactive.gd" id="1_script"] +[ext_resource type="PackedScene" uid="uid://caqf471x0kttc" path="res://core/game_menu/settings_menu.tscn" id="2_settings"] +[ext_resource type="Texture2D" uid="uid://diuai5vtjx23l" path="res://core/game_menu/assets/page_3/3_sx.png" id="3_jdqrf"] +[ext_resource type="Texture2D" uid="uid://kvn5l0n11a3q" path="res://core/game_menu/assets/page.png" id="3_page_bg"] + +[node name="Page3Left" type="Control" unique_id=1419303211] +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_right = -1160.0 +offset_bottom = -506.0 +grow_horizontal = 2 +grow_vertical = 2 +mouse_filter = 2 +script = ExtResource("1_script") + +[node name="PageBackground" type="TextureRect" parent="." unique_id=1048771500] +layout_mode = 1 +anchors_preset = 9 +anchor_bottom = 1.0 +offset_right = 760.0 +grow_vertical = 2 +mouse_filter = 2 +texture = ExtResource("3_page_bg") +expand_mode = 1 +flip_h = true + +[node name="PageBackground2" type="TextureRect" parent="." unique_id=1869708897] +layout_mode = 1 +anchors_preset = 9 +anchor_bottom = 1.0 +offset_right = 760.0 +grow_vertical = 2 +mouse_filter = 2 +texture = ExtResource("3_jdqrf") +stretch_mode = 2 + +[node name="SettingsMenu" parent="." unique_id=1402645746 instance=ExtResource("2_settings")] +layout_mode = 0 +anchors_preset = 0 +anchor_right = 0.0 +anchor_bottom = 0.0 +offset_left = 68.0 +offset_top = 24.5 +offset_right = 692.0 +offset_bottom = 549.5 +size_flags_horizontal = 6 diff --git a/core/game_menu/page_3_right.tscn b/core/game_menu/page_3_right.tscn new file mode 100644 index 0000000..877e496 --- /dev/null +++ b/core/game_menu/page_3_right.tscn @@ -0,0 +1,64 @@ +[gd_scene format=3 uid="uid://cnaguqaowck52"] + +[ext_resource type="Script" uid="uid://0yyr318wl7co" path="res://core/game_menu/page_interactive.gd" id="1_script"] +[ext_resource type="PackedScene" uid="uid://cxf8s80ivwj1p" path="res://core/game_menu/option_menu.tscn" id="2_option"] +[ext_resource type="Texture2D" uid="uid://b6ae0kp1m0x74" path="res://core/game_menu/assets/page_3/3_dx.png" id="3_j1o0h"] +[ext_resource type="Texture2D" uid="uid://kvn5l0n11a3q" path="res://core/game_menu/assets/page.png" id="3_page_bg"] + +[node name="Page3Right" type="Control" unique_id=1670917406] +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_right = -1160.0 +offset_bottom = -506.0 +grow_horizontal = 2 +grow_vertical = 2 +mouse_filter = 2 +script = ExtResource("1_script") + +[node name="PageBackground" type="TextureRect" parent="." unique_id=957141621] +layout_mode = 1 +anchors_preset = 11 +anchor_left = 1.0 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_left = -760.0 +grow_horizontal = 0 +grow_vertical = 2 +mouse_filter = 2 +texture = ExtResource("3_page_bg") +expand_mode = 1 + +[node name="PageBackground2" type="TextureRect" parent="." unique_id=409054633] +layout_mode = 1 +anchors_preset = 11 +anchor_left = 1.0 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_left = -760.0 +grow_horizontal = 0 +grow_vertical = 2 +mouse_filter = 2 +texture = ExtResource("3_j1o0h") +stretch_mode = 2 + +[node name="OptionMenu" parent="." unique_id=537721615 instance=ExtResource("2_option")] +layout_mode = 1 +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +offset_left = -181.5 +offset_top = -212.0 +offset_right = 248.5 +offset_bottom = 212.0 + +[node name="PlayButton" parent="OptionMenu/VBoxContainer" parent_id_path=PackedInt32Array(537721615, 508055524) index="0" unique_id=1990327704] +visible = false + +[node name="SettingsButton" parent="OptionMenu/VBoxContainer" parent_id_path=PackedInt32Array(537721615, 508055524) index="2" unique_id=1931222561] +visible = false + +[editable path="OptionMenu"] diff --git a/core/game_menu/page_interactive.gd b/core/game_menu/page_interactive.gd new file mode 100644 index 0000000..79038f5 --- /dev/null +++ b/core/game_menu/page_interactive.gd @@ -0,0 +1,14 @@ +extends Control + +signal manage_pageflip(give_control: bool) + +func _ready() -> void: + manage_pageflip.connect(_on_manage_pageflip) + +func _on_manage_pageflip(give_control: bool) -> void: + var tweens = find_children("*", "ContainerTween", true, false) + for tween in tweens: + if give_control: + tween.start_tween() + else: + tween.stop_tween() diff --git a/core/game_menu/page_interactive.gd.uid b/core/game_menu/page_interactive.gd.uid new file mode 100644 index 0000000..ca87be5 --- /dev/null +++ b/core/game_menu/page_interactive.gd.uid @@ -0,0 +1 @@ +uid://0yyr318wl7co diff --git a/core/game_menu/photo_gallery.gd b/core/game_menu/photo_gallery.gd index 26d8801..ca12631 100644 --- a/core/game_menu/photo_gallery.gd +++ b/core/game_menu/photo_gallery.gd @@ -17,6 +17,8 @@ func load_gallery() -> void: for file_path in saved_photos: if FileAccess.file_exists(file_path): _create_photo_thumbnail(file_path) + if is_inside_tree(): + await get_tree().process_frame func _create_photo_thumbnail(file_path: String) -> void: var image = Image.load_from_file(file_path) diff --git a/core/main_scene_ui/assets/button_choochoo_on.png b/core/main_scene_ui/assets/button_choochoo_on.png new file mode 100644 index 0000000..e584a3f Binary files /dev/null and b/core/main_scene_ui/assets/button_choochoo_on.png differ diff --git a/core/main_scene_ui/assets/button_choochoo_on.png.import b/core/main_scene_ui/assets/button_choochoo_on.png.import new file mode 100644 index 0000000..227d7bd --- /dev/null +++ b/core/main_scene_ui/assets/button_choochoo_on.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://clmbvd7ilhra2" +path="res://.godot/imported/button_choochoo_on.png-e06955044ec386fd4f20a50236119841.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://core/main_scene_ui/assets/button_choochoo_on.png" +dest_files=["res://.godot/imported/button_choochoo_on.png-e06955044ec386fd4f20a50236119841.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/core/main_scene_ui/assets/button_visibility_on.png b/core/main_scene_ui/assets/button_visibility_on.png new file mode 100644 index 0000000..0765e71 Binary files /dev/null and b/core/main_scene_ui/assets/button_visibility_on.png differ diff --git a/core/main_scene_ui/assets/button_visibility_on.png.import b/core/main_scene_ui/assets/button_visibility_on.png.import new file mode 100644 index 0000000..a81c32c --- /dev/null +++ b/core/main_scene_ui/assets/button_visibility_on.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://qq84r14df2ix" +path="res://.godot/imported/button_visibility_on.png-32e35f3ae7b88f431f03c78dc0b29e6c.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://core/main_scene_ui/assets/button_visibility_on.png" +dest_files=["res://.godot/imported/button_visibility_on.png-32e35f3ae7b88f431f03c78dc0b29e6c.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/core/main_scene_ui/main_scene_ui.gd b/core/main_scene_ui/main_scene_ui.gd index 9b6d0f1..2da4352 100644 --- a/core/main_scene_ui/main_scene_ui.gd +++ b/core/main_scene_ui/main_scene_ui.gd @@ -8,7 +8,6 @@ extends Control @onready var photo_icon_button: Button = $%PhotoIconButton @onready var choo_choo_button: Button = $%ChooChooButton @onready var collectible_icon_button: Button = $%CollectibleIconButton -@onready var resume_button: Button = $GameMenuPanel/GameMenu/Pages/Page3/OptionMenu/VBoxContainer/ResumeButton @onready var weather_row: HBoxContainer = $%WeatherRow @onready var time_of_day_row: HBoxContainer = $%TimeOfDayRow @onready var photo_mode_texture_panel: Panel = $%PhotoModeTexturePanel @@ -40,7 +39,7 @@ func _ready() -> void: menu_icon_button.pressed.connect(_open_game_menu_on_page.bind(2)) photo_icon_button.pressed.connect(_on_photo_icon_button_pressed) choo_choo_button.pressed.connect(_on_choo_choo_button_pressed) - resume_button.pressed.connect(_on_resume_button_pressed) + UIEvents.resume_game_requested.connect(_on_resume_button_pressed) func _process(_delta: float) -> void: if time_label and dist_label and GameState.is_loaded: diff --git a/core/main_scene_ui/main_scene_ui.tscn b/core/main_scene_ui/main_scene_ui.tscn index 2f75c39..35e839e 100644 --- a/core/main_scene_ui/main_scene_ui.tscn +++ b/core/main_scene_ui/main_scene_ui.tscn @@ -26,8 +26,10 @@ [ext_resource type="Texture2D" uid="uid://cq65xyg4wsctm" path="res://core/main_scene_ui/assets/button_weather_nowind.png" id="12_fjfwt"] [ext_resource type="Texture2D" uid="uid://tex06svipyg4" path="res://core/main_scene_ui/assets/button_random.png" id="14_gcgq4"] [ext_resource type="Texture2D" uid="uid://1n3paucfsovj" path="res://core/main_scene_ui/assets/button_photomode.png" id="15_th1nj"] +[ext_resource type="Texture2D" uid="uid://qq84r14df2ix" path="res://core/main_scene_ui/assets/button_visibility_on.png" id="19_dyo0w"] [ext_resource type="Texture2D" uid="uid://c31yut8p24t8g" path="res://core/main_scene_ui/assets/button_customize.png" id="19_vywaj"] [ext_resource type="Texture2D" uid="uid://b03si5ir3ypp7" path="res://core/main_scene_ui/assets/button_collection03.png" id="19_yggu7"] +[ext_resource type="Texture2D" uid="uid://clmbvd7ilhra2" path="res://core/main_scene_ui/assets/button_choochoo_on.png" id="22_x1iix"] [ext_resource type="FontFile" uid="uid://bclja5no1qteh" path="res://core/font/Kestila.ttf" id="29_jn6vt"] [sub_resource type="ShaderMaterial" id="ShaderMaterial_hole"] @@ -156,7 +158,7 @@ image = ExtResource("10_6016m") [node name="HideUIButton" parent="TopButtons" unique_id=1621140689 instance=ExtResource("3_t1xop")] unique_name_in_owner = true layout_mode = 2 -image = ExtResource("10_6016m") +image = ExtResource("19_dyo0w") [node name="MiddleButtons" type="VBoxContainer" parent="." unique_id=542153805] layout_mode = 1 @@ -191,7 +193,7 @@ image = ExtResource("15_th1nj") [node name="ChooChooButton" parent="MiddleButtons" unique_id=774819903 instance=ExtResource("3_t1xop")] unique_name_in_owner = true layout_mode = 2 -image = ExtResource("15_th1nj") +image = ExtResource("22_x1iix") [node name="InfoLabels" type="VBoxContainer" parent="." unique_id=234435566] custom_minimum_size = Vector2(400, 0) @@ -241,6 +243,9 @@ pivot_offset_ratio = Vector2(0.5, 0.5) unique_name_in_owner = true layout_mode = 1 +[node name="DynamicFlipPoly" parent="GameMenuPanel/GameMenu/PageFlip/Visual" parent_id_path=PackedInt32Array(2124096517, 205659491) index="2" unique_id=1994837824] +bones = ["/root/@EditorNode@18065/@Panel@14/@VBoxContainer@15/DockHSplitMain/@VBoxContainer@28/DockVSplitCenter/@VSplitContainer@70/@VBoxContainer@71/@EditorMainScreen@125/MainScreen/@CanvasItemEditor@9318/@VSplitContainer@9101/@HSplitContainer@9103/@HSplitContainer@9105/@Control@9106/@SubViewportContainer@9107/@SubViewport@9108/MainSceneUi/GameMenuPanel/GameMenu/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_0", PackedFloat32Array(0.84999996, 0.15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@18065/@Panel@14/@VBoxContainer@15/DockHSplitMain/@VBoxContainer@28/DockVSplitCenter/@VSplitContainer@70/@VBoxContainer@71/@EditorMainScreen@125/MainScreen/@CanvasItemEditor@9318/@VSplitContainer@9101/@HSplitContainer@9103/@HSplitContainer@9105/@Control@9106/@SubViewportContainer@9107/@SubViewport@9108/MainSceneUi/GameMenuPanel/GameMenu/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_0/Bone_1_0", PackedFloat32Array(0.15, 0.7, 0.15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@18065/@Panel@14/@VBoxContainer@15/DockHSplitMain/@VBoxContainer@28/DockVSplitCenter/@VSplitContainer@70/@VBoxContainer@71/@EditorMainScreen@125/MainScreen/@CanvasItemEditor@9318/@VSplitContainer@9101/@HSplitContainer@9103/@HSplitContainer@9105/@Control@9106/@SubViewportContainer@9107/@SubViewport@9108/MainSceneUi/GameMenuPanel/GameMenu/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_0/Bone_1_0/Bone_2_0", PackedFloat32Array(0, 0.15, 0.7, 0.15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@18065/@Panel@14/@VBoxContainer@15/DockHSplitMain/@VBoxContainer@28/DockVSplitCenter/@VSplitContainer@70/@VBoxContainer@71/@EditorMainScreen@125/MainScreen/@CanvasItemEditor@9318/@VSplitContainer@9101/@HSplitContainer@9103/@HSplitContainer@9105/@Control@9106/@SubViewportContainer@9107/@SubViewport@9108/MainSceneUi/GameMenuPanel/GameMenu/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_0/Bone_1_0/Bone_2_0/Bone_3_0", PackedFloat32Array(0, 0, 0.15, 0.7, 0.15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@18065/@Panel@14/@VBoxContainer@15/DockHSplitMain/@VBoxContainer@28/DockVSplitCenter/@VSplitContainer@70/@VBoxContainer@71/@EditorMainScreen@125/MainScreen/@CanvasItemEditor@9318/@VSplitContainer@9101/@HSplitContainer@9103/@HSplitContainer@9105/@Control@9106/@SubViewportContainer@9107/@SubViewport@9108/MainSceneUi/GameMenuPanel/GameMenu/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_0/Bone_1_0/Bone_2_0/Bone_3_0/Bone_4_0", PackedFloat32Array(0, 0, 0, 0.15, 0.7, 0.15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@18065/@Panel@14/@VBoxContainer@15/DockHSplitMain/@VBoxContainer@28/DockVSplitCenter/@VSplitContainer@70/@VBoxContainer@71/@EditorMainScreen@125/MainScreen/@CanvasItemEditor@9318/@VSplitContainer@9101/@HSplitContainer@9103/@HSplitContainer@9105/@Control@9106/@SubViewportContainer@9107/@SubViewport@9108/MainSceneUi/GameMenuPanel/GameMenu/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_0/Bone_1_0/Bone_2_0/Bone_3_0/Bone_4_0/Bone_5_0", PackedFloat32Array(0, 0, 0, 0, 0.15, 0.7, 0.15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@18065/@Panel@14/@VBoxContainer@15/DockHSplitMain/@VBoxContainer@28/DockVSplitCenter/@VSplitContainer@70/@VBoxContainer@71/@EditorMainScreen@125/MainScreen/@CanvasItemEditor@9318/@VSplitContainer@9101/@HSplitContainer@9103/@HSplitContainer@9105/@Control@9106/@SubViewportContainer@9107/@SubViewport@9108/MainSceneUi/GameMenuPanel/GameMenu/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_0/Bone_1_0/Bone_2_0/Bone_3_0/Bone_4_0/Bone_5_0/Bone_6_0", PackedFloat32Array(0, 0, 0, 0, 0, 0.15, 0.7, 0.15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@18065/@Panel@14/@VBoxContainer@15/DockHSplitMain/@VBoxContainer@28/DockVSplitCenter/@VSplitContainer@70/@VBoxContainer@71/@EditorMainScreen@125/MainScreen/@CanvasItemEditor@9318/@VSplitContainer@9101/@HSplitContainer@9103/@HSplitContainer@9105/@Control@9106/@SubViewportContainer@9107/@SubViewport@9108/MainSceneUi/GameMenuPanel/GameMenu/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_0/Bone_1_0/Bone_2_0/Bone_3_0/Bone_4_0/Bone_5_0/Bone_6_0/Bone_7_0", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0.15, 0.7, 0.15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@18065/@Panel@14/@VBoxContainer@15/DockHSplitMain/@VBoxContainer@28/DockVSplitCenter/@VSplitContainer@70/@VBoxContainer@71/@EditorMainScreen@125/MainScreen/@CanvasItemEditor@9318/@VSplitContainer@9101/@HSplitContainer@9103/@HSplitContainer@9105/@Control@9106/@SubViewportContainer@9107/@SubViewport@9108/MainSceneUi/GameMenuPanel/GameMenu/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_0/Bone_1_0/Bone_2_0/Bone_3_0/Bone_4_0/Bone_5_0/Bone_6_0/Bone_7_0/Bone_8_0", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0.15, 0.84999996, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@18065/@Panel@14/@VBoxContainer@15/DockHSplitMain/@VBoxContainer@28/DockVSplitCenter/@VSplitContainer@70/@VBoxContainer@71/@EditorMainScreen@125/MainScreen/@CanvasItemEditor@9318/@VSplitContainer@9101/@HSplitContainer@9103/@HSplitContainer@9105/@Control@9106/@SubViewportContainer@9107/@SubViewport@9108/MainSceneUi/GameMenuPanel/GameMenu/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_1", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0.84999996, 0.15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@18065/@Panel@14/@VBoxContainer@15/DockHSplitMain/@VBoxContainer@28/DockVSplitCenter/@VSplitContainer@70/@VBoxContainer@71/@EditorMainScreen@125/MainScreen/@CanvasItemEditor@9318/@VSplitContainer@9101/@HSplitContainer@9103/@HSplitContainer@9105/@Control@9106/@SubViewportContainer@9107/@SubViewport@9108/MainSceneUi/GameMenuPanel/GameMenu/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_1/Bone_1_1", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0.15, 0.7, 0.15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@18065/@Panel@14/@VBoxContainer@15/DockHSplitMain/@VBoxContainer@28/DockVSplitCenter/@VSplitContainer@70/@VBoxContainer@71/@EditorMainScreen@125/MainScreen/@CanvasItemEditor@9318/@VSplitContainer@9101/@HSplitContainer@9103/@HSplitContainer@9105/@Control@9106/@SubViewportContainer@9107/@SubViewport@9108/MainSceneUi/GameMenuPanel/GameMenu/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_1/Bone_1_1/Bone_2_1", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.15, 0.7, 0.15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@18065/@Panel@14/@VBoxContainer@15/DockHSplitMain/@VBoxContainer@28/DockVSplitCenter/@VSplitContainer@70/@VBoxContainer@71/@EditorMainScreen@125/MainScreen/@CanvasItemEditor@9318/@VSplitContainer@9101/@HSplitContainer@9103/@HSplitContainer@9105/@Control@9106/@SubViewportContainer@9107/@SubViewport@9108/MainSceneUi/GameMenuPanel/GameMenu/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_1/Bone_1_1/Bone_2_1/Bone_3_1", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.15, 0.7, 0.15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@18065/@Panel@14/@VBoxContainer@15/DockHSplitMain/@VBoxContainer@28/DockVSplitCenter/@VSplitContainer@70/@VBoxContainer@71/@EditorMainScreen@125/MainScreen/@CanvasItemEditor@9318/@VSplitContainer@9101/@HSplitContainer@9103/@HSplitContainer@9105/@Control@9106/@SubViewportContainer@9107/@SubViewport@9108/MainSceneUi/GameMenuPanel/GameMenu/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_1/Bone_1_1/Bone_2_1/Bone_3_1/Bone_4_1", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.15, 0.7, 0.15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@18065/@Panel@14/@VBoxContainer@15/DockHSplitMain/@VBoxContainer@28/DockVSplitCenter/@VSplitContainer@70/@VBoxContainer@71/@EditorMainScreen@125/MainScreen/@CanvasItemEditor@9318/@VSplitContainer@9101/@HSplitContainer@9103/@HSplitContainer@9105/@Control@9106/@SubViewportContainer@9107/@SubViewport@9108/MainSceneUi/GameMenuPanel/GameMenu/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_1/Bone_1_1/Bone_2_1/Bone_3_1/Bone_4_1/Bone_5_1", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.15, 0.7, 0.15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@18065/@Panel@14/@VBoxContainer@15/DockHSplitMain/@VBoxContainer@28/DockVSplitCenter/@VSplitContainer@70/@VBoxContainer@71/@EditorMainScreen@125/MainScreen/@CanvasItemEditor@9318/@VSplitContainer@9101/@HSplitContainer@9103/@HSplitContainer@9105/@Control@9106/@SubViewportContainer@9107/@SubViewport@9108/MainSceneUi/GameMenuPanel/GameMenu/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_1/Bone_1_1/Bone_2_1/Bone_3_1/Bone_4_1/Bone_5_1/Bone_6_1", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.15, 0.7, 0.15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@18065/@Panel@14/@VBoxContainer@15/DockHSplitMain/@VBoxContainer@28/DockVSplitCenter/@VSplitContainer@70/@VBoxContainer@71/@EditorMainScreen@125/MainScreen/@CanvasItemEditor@9318/@VSplitContainer@9101/@HSplitContainer@9103/@HSplitContainer@9105/@Control@9106/@SubViewportContainer@9107/@SubViewport@9108/MainSceneUi/GameMenuPanel/GameMenu/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_1/Bone_1_1/Bone_2_1/Bone_3_1/Bone_4_1/Bone_5_1/Bone_6_1/Bone_7_1", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.15, 0.7, 0.15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@18065/@Panel@14/@VBoxContainer@15/DockHSplitMain/@VBoxContainer@28/DockVSplitCenter/@VSplitContainer@70/@VBoxContainer@71/@EditorMainScreen@125/MainScreen/@CanvasItemEditor@9318/@VSplitContainer@9101/@HSplitContainer@9103/@HSplitContainer@9105/@Control@9106/@SubViewportContainer@9107/@SubViewport@9108/MainSceneUi/GameMenuPanel/GameMenu/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_1/Bone_1_1/Bone_2_1/Bone_3_1/Bone_4_1/Bone_5_1/Bone_6_1/Bone_7_1/Bone_8_1", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.15, 0.84999996, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@18065/@Panel@14/@VBoxContainer@15/DockHSplitMain/@VBoxContainer@28/DockVSplitCenter/@VSplitContainer@70/@VBoxContainer@71/@EditorMainScreen@125/MainScreen/@CanvasItemEditor@9318/@VSplitContainer@9101/@HSplitContainer@9103/@HSplitContainer@9105/@Control@9106/@SubViewportContainer@9107/@SubViewport@9108/MainSceneUi/GameMenuPanel/GameMenu/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_2", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.84999996, 0.15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@18065/@Panel@14/@VBoxContainer@15/DockHSplitMain/@VBoxContainer@28/DockVSplitCenter/@VSplitContainer@70/@VBoxContainer@71/@EditorMainScreen@125/MainScreen/@CanvasItemEditor@9318/@VSplitContainer@9101/@HSplitContainer@9103/@HSplitContainer@9105/@Control@9106/@SubViewportContainer@9107/@SubViewport@9108/MainSceneUi/GameMenuPanel/GameMenu/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_2/Bone_1_2", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.15, 0.7, 0.15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@18065/@Panel@14/@VBoxContainer@15/DockHSplitMain/@VBoxContainer@28/DockVSplitCenter/@VSplitContainer@70/@VBoxContainer@71/@EditorMainScreen@125/MainScreen/@CanvasItemEditor@9318/@VSplitContainer@9101/@HSplitContainer@9103/@HSplitContainer@9105/@Control@9106/@SubViewportContainer@9107/@SubViewport@9108/MainSceneUi/GameMenuPanel/GameMenu/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_2/Bone_1_2/Bone_2_2", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.15, 0.7, 0.15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@18065/@Panel@14/@VBoxContainer@15/DockHSplitMain/@VBoxContainer@28/DockVSplitCenter/@VSplitContainer@70/@VBoxContainer@71/@EditorMainScreen@125/MainScreen/@CanvasItemEditor@9318/@VSplitContainer@9101/@HSplitContainer@9103/@HSplitContainer@9105/@Control@9106/@SubViewportContainer@9107/@SubViewport@9108/MainSceneUi/GameMenuPanel/GameMenu/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_2/Bone_1_2/Bone_2_2/Bone_3_2", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.15, 0.7, 0.15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@18065/@Panel@14/@VBoxContainer@15/DockHSplitMain/@VBoxContainer@28/DockVSplitCenter/@VSplitContainer@70/@VBoxContainer@71/@EditorMainScreen@125/MainScreen/@CanvasItemEditor@9318/@VSplitContainer@9101/@HSplitContainer@9103/@HSplitContainer@9105/@Control@9106/@SubViewportContainer@9107/@SubViewport@9108/MainSceneUi/GameMenuPanel/GameMenu/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_2/Bone_1_2/Bone_2_2/Bone_3_2/Bone_4_2", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.15, 0.7, 0.15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@18065/@Panel@14/@VBoxContainer@15/DockHSplitMain/@VBoxContainer@28/DockVSplitCenter/@VSplitContainer@70/@VBoxContainer@71/@EditorMainScreen@125/MainScreen/@CanvasItemEditor@9318/@VSplitContainer@9101/@HSplitContainer@9103/@HSplitContainer@9105/@Control@9106/@SubViewportContainer@9107/@SubViewport@9108/MainSceneUi/GameMenuPanel/GameMenu/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_2/Bone_1_2/Bone_2_2/Bone_3_2/Bone_4_2/Bone_5_2", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.15, 0.7, 0.15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@18065/@Panel@14/@VBoxContainer@15/DockHSplitMain/@VBoxContainer@28/DockVSplitCenter/@VSplitContainer@70/@VBoxContainer@71/@EditorMainScreen@125/MainScreen/@CanvasItemEditor@9318/@VSplitContainer@9101/@HSplitContainer@9103/@HSplitContainer@9105/@Control@9106/@SubViewportContainer@9107/@SubViewport@9108/MainSceneUi/GameMenuPanel/GameMenu/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_2/Bone_1_2/Bone_2_2/Bone_3_2/Bone_4_2/Bone_5_2/Bone_6_2", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.15, 0.7, 0.15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@18065/@Panel@14/@VBoxContainer@15/DockHSplitMain/@VBoxContainer@28/DockVSplitCenter/@VSplitContainer@70/@VBoxContainer@71/@EditorMainScreen@125/MainScreen/@CanvasItemEditor@9318/@VSplitContainer@9101/@HSplitContainer@9103/@HSplitContainer@9105/@Control@9106/@SubViewportContainer@9107/@SubViewport@9108/MainSceneUi/GameMenuPanel/GameMenu/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_2/Bone_1_2/Bone_2_2/Bone_3_2/Bone_4_2/Bone_5_2/Bone_6_2/Bone_7_2", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.15, 0.7, 0.15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@18065/@Panel@14/@VBoxContainer@15/DockHSplitMain/@VBoxContainer@28/DockVSplitCenter/@VSplitContainer@70/@VBoxContainer@71/@EditorMainScreen@125/MainScreen/@CanvasItemEditor@9318/@VSplitContainer@9101/@HSplitContainer@9103/@HSplitContainer@9105/@Control@9106/@SubViewportContainer@9107/@SubViewport@9108/MainSceneUi/GameMenuPanel/GameMenu/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_2/Bone_1_2/Bone_2_2/Bone_3_2/Bone_4_2/Bone_5_2/Bone_6_2/Bone_7_2/Bone_8_2", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.15, 0.84999996, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@18065/@Panel@14/@VBoxContainer@15/DockHSplitMain/@VBoxContainer@28/DockVSplitCenter/@VSplitContainer@70/@VBoxContainer@71/@EditorMainScreen@125/MainScreen/@CanvasItemEditor@9318/@VSplitContainer@9101/@HSplitContainer@9103/@HSplitContainer@9105/@Control@9106/@SubViewportContainer@9107/@SubViewport@9108/MainSceneUi/GameMenuPanel/GameMenu/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_3", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.84999996, 0.15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@18065/@Panel@14/@VBoxContainer@15/DockHSplitMain/@VBoxContainer@28/DockVSplitCenter/@VSplitContainer@70/@VBoxContainer@71/@EditorMainScreen@125/MainScreen/@CanvasItemEditor@9318/@VSplitContainer@9101/@HSplitContainer@9103/@HSplitContainer@9105/@Control@9106/@SubViewportContainer@9107/@SubViewport@9108/MainSceneUi/GameMenuPanel/GameMenu/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_3/Bone_1_3", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.15, 0.7, 0.15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@18065/@Panel@14/@VBoxContainer@15/DockHSplitMain/@VBoxContainer@28/DockVSplitCenter/@VSplitContainer@70/@VBoxContainer@71/@EditorMainScreen@125/MainScreen/@CanvasItemEditor@9318/@VSplitContainer@9101/@HSplitContainer@9103/@HSplitContainer@9105/@Control@9106/@SubViewportContainer@9107/@SubViewport@9108/MainSceneUi/GameMenuPanel/GameMenu/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_3/Bone_1_3/Bone_2_3", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.15, 0.7, 0.15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@18065/@Panel@14/@VBoxContainer@15/DockHSplitMain/@VBoxContainer@28/DockVSplitCenter/@VSplitContainer@70/@VBoxContainer@71/@EditorMainScreen@125/MainScreen/@CanvasItemEditor@9318/@VSplitContainer@9101/@HSplitContainer@9103/@HSplitContainer@9105/@Control@9106/@SubViewportContainer@9107/@SubViewport@9108/MainSceneUi/GameMenuPanel/GameMenu/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_3/Bone_1_3/Bone_2_3/Bone_3_3", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.15, 0.7, 0.15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@18065/@Panel@14/@VBoxContainer@15/DockHSplitMain/@VBoxContainer@28/DockVSplitCenter/@VSplitContainer@70/@VBoxContainer@71/@EditorMainScreen@125/MainScreen/@CanvasItemEditor@9318/@VSplitContainer@9101/@HSplitContainer@9103/@HSplitContainer@9105/@Control@9106/@SubViewportContainer@9107/@SubViewport@9108/MainSceneUi/GameMenuPanel/GameMenu/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_3/Bone_1_3/Bone_2_3/Bone_3_3/Bone_4_3", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.15, 0.7, 0.15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@18065/@Panel@14/@VBoxContainer@15/DockHSplitMain/@VBoxContainer@28/DockVSplitCenter/@VSplitContainer@70/@VBoxContainer@71/@EditorMainScreen@125/MainScreen/@CanvasItemEditor@9318/@VSplitContainer@9101/@HSplitContainer@9103/@HSplitContainer@9105/@Control@9106/@SubViewportContainer@9107/@SubViewport@9108/MainSceneUi/GameMenuPanel/GameMenu/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_3/Bone_1_3/Bone_2_3/Bone_3_3/Bone_4_3/Bone_5_3", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.15, 0.7, 0.15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@18065/@Panel@14/@VBoxContainer@15/DockHSplitMain/@VBoxContainer@28/DockVSplitCenter/@VSplitContainer@70/@VBoxContainer@71/@EditorMainScreen@125/MainScreen/@CanvasItemEditor@9318/@VSplitContainer@9101/@HSplitContainer@9103/@HSplitContainer@9105/@Control@9106/@SubViewportContainer@9107/@SubViewport@9108/MainSceneUi/GameMenuPanel/GameMenu/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_3/Bone_1_3/Bone_2_3/Bone_3_3/Bone_4_3/Bone_5_3/Bone_6_3", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.15, 0.7, 0.15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@18065/@Panel@14/@VBoxContainer@15/DockHSplitMain/@VBoxContainer@28/DockVSplitCenter/@VSplitContainer@70/@VBoxContainer@71/@EditorMainScreen@125/MainScreen/@CanvasItemEditor@9318/@VSplitContainer@9101/@HSplitContainer@9103/@HSplitContainer@9105/@Control@9106/@SubViewportContainer@9107/@SubViewport@9108/MainSceneUi/GameMenuPanel/GameMenu/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_3/Bone_1_3/Bone_2_3/Bone_3_3/Bone_4_3/Bone_5_3/Bone_6_3/Bone_7_3", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.15, 0.7, 0.15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@18065/@Panel@14/@VBoxContainer@15/DockHSplitMain/@VBoxContainer@28/DockVSplitCenter/@VSplitContainer@70/@VBoxContainer@71/@EditorMainScreen@125/MainScreen/@CanvasItemEditor@9318/@VSplitContainer@9101/@HSplitContainer@9103/@HSplitContainer@9105/@Control@9106/@SubViewportContainer@9107/@SubViewport@9108/MainSceneUi/GameMenuPanel/GameMenu/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_3/Bone_1_3/Bone_2_3/Bone_3_3/Bone_4_3/Bone_5_3/Bone_6_3/Bone_7_3/Bone_8_3", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.15, 0.84999996, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@18065/@Panel@14/@VBoxContainer@15/DockHSplitMain/@VBoxContainer@28/DockVSplitCenter/@VSplitContainer@70/@VBoxContainer@71/@EditorMainScreen@125/MainScreen/@CanvasItemEditor@9318/@VSplitContainer@9101/@HSplitContainer@9103/@HSplitContainer@9105/@Control@9106/@SubViewportContainer@9107/@SubViewport@9108/MainSceneUi/GameMenuPanel/GameMenu/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_4", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.84999996, 0.15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@18065/@Panel@14/@VBoxContainer@15/DockHSplitMain/@VBoxContainer@28/DockVSplitCenter/@VSplitContainer@70/@VBoxContainer@71/@EditorMainScreen@125/MainScreen/@CanvasItemEditor@9318/@VSplitContainer@9101/@HSplitContainer@9103/@HSplitContainer@9105/@Control@9106/@SubViewportContainer@9107/@SubViewport@9108/MainSceneUi/GameMenuPanel/GameMenu/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_4/Bone_1_4", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.15, 0.7, 0.15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@18065/@Panel@14/@VBoxContainer@15/DockHSplitMain/@VBoxContainer@28/DockVSplitCenter/@VSplitContainer@70/@VBoxContainer@71/@EditorMainScreen@125/MainScreen/@CanvasItemEditor@9318/@VSplitContainer@9101/@HSplitContainer@9103/@HSplitContainer@9105/@Control@9106/@SubViewportContainer@9107/@SubViewport@9108/MainSceneUi/GameMenuPanel/GameMenu/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_4/Bone_1_4/Bone_2_4", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.15, 0.7, 0.15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@18065/@Panel@14/@VBoxContainer@15/DockHSplitMain/@VBoxContainer@28/DockVSplitCenter/@VSplitContainer@70/@VBoxContainer@71/@EditorMainScreen@125/MainScreen/@CanvasItemEditor@9318/@VSplitContainer@9101/@HSplitContainer@9103/@HSplitContainer@9105/@Control@9106/@SubViewportContainer@9107/@SubViewport@9108/MainSceneUi/GameMenuPanel/GameMenu/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_4/Bone_1_4/Bone_2_4/Bone_3_4", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.15, 0.7, 0.15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@18065/@Panel@14/@VBoxContainer@15/DockHSplitMain/@VBoxContainer@28/DockVSplitCenter/@VSplitContainer@70/@VBoxContainer@71/@EditorMainScreen@125/MainScreen/@CanvasItemEditor@9318/@VSplitContainer@9101/@HSplitContainer@9103/@HSplitContainer@9105/@Control@9106/@SubViewportContainer@9107/@SubViewport@9108/MainSceneUi/GameMenuPanel/GameMenu/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_4/Bone_1_4/Bone_2_4/Bone_3_4/Bone_4_4", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.15, 0.7, 0.15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@18065/@Panel@14/@VBoxContainer@15/DockHSplitMain/@VBoxContainer@28/DockVSplitCenter/@VSplitContainer@70/@VBoxContainer@71/@EditorMainScreen@125/MainScreen/@CanvasItemEditor@9318/@VSplitContainer@9101/@HSplitContainer@9103/@HSplitContainer@9105/@Control@9106/@SubViewportContainer@9107/@SubViewport@9108/MainSceneUi/GameMenuPanel/GameMenu/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_4/Bone_1_4/Bone_2_4/Bone_3_4/Bone_4_4/Bone_5_4", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.15, 0.7, 0.15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@18065/@Panel@14/@VBoxContainer@15/DockHSplitMain/@VBoxContainer@28/DockVSplitCenter/@VSplitContainer@70/@VBoxContainer@71/@EditorMainScreen@125/MainScreen/@CanvasItemEditor@9318/@VSplitContainer@9101/@HSplitContainer@9103/@HSplitContainer@9105/@Control@9106/@SubViewportContainer@9107/@SubViewport@9108/MainSceneUi/GameMenuPanel/GameMenu/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_4/Bone_1_4/Bone_2_4/Bone_3_4/Bone_4_4/Bone_5_4/Bone_6_4", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.15, 0.7, 0.15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@18065/@Panel@14/@VBoxContainer@15/DockHSplitMain/@VBoxContainer@28/DockVSplitCenter/@VSplitContainer@70/@VBoxContainer@71/@EditorMainScreen@125/MainScreen/@CanvasItemEditor@9318/@VSplitContainer@9101/@HSplitContainer@9103/@HSplitContainer@9105/@Control@9106/@SubViewportContainer@9107/@SubViewport@9108/MainSceneUi/GameMenuPanel/GameMenu/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_4/Bone_1_4/Bone_2_4/Bone_3_4/Bone_4_4/Bone_5_4/Bone_6_4/Bone_7_4", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.15, 0.7, 0.15, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@18065/@Panel@14/@VBoxContainer@15/DockHSplitMain/@VBoxContainer@28/DockVSplitCenter/@VSplitContainer@70/@VBoxContainer@71/@EditorMainScreen@125/MainScreen/@CanvasItemEditor@9318/@VSplitContainer@9101/@HSplitContainer@9103/@HSplitContainer@9105/@Control@9106/@SubViewportContainer@9107/@SubViewport@9108/MainSceneUi/GameMenuPanel/GameMenu/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_4/Bone_1_4/Bone_2_4/Bone_3_4/Bone_4_4/Bone_5_4/Bone_6_4/Bone_7_4/Bone_8_4", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.15, 0.84999996, 0, 0, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@18065/@Panel@14/@VBoxContainer@15/DockHSplitMain/@VBoxContainer@28/DockVSplitCenter/@VSplitContainer@70/@VBoxContainer@71/@EditorMainScreen@125/MainScreen/@CanvasItemEditor@9318/@VSplitContainer@9101/@HSplitContainer@9103/@HSplitContainer@9105/@Control@9106/@SubViewportContainer@9107/@SubViewport@9108/MainSceneUi/GameMenuPanel/GameMenu/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_5", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.84999996, 0.15, 0, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@18065/@Panel@14/@VBoxContainer@15/DockHSplitMain/@VBoxContainer@28/DockVSplitCenter/@VSplitContainer@70/@VBoxContainer@71/@EditorMainScreen@125/MainScreen/@CanvasItemEditor@9318/@VSplitContainer@9101/@HSplitContainer@9103/@HSplitContainer@9105/@Control@9106/@SubViewportContainer@9107/@SubViewport@9108/MainSceneUi/GameMenuPanel/GameMenu/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_5/Bone_1_5", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.15, 0.7, 0.15, 0, 0, 0, 0, 0, 0), "/root/@EditorNode@18065/@Panel@14/@VBoxContainer@15/DockHSplitMain/@VBoxContainer@28/DockVSplitCenter/@VSplitContainer@70/@VBoxContainer@71/@EditorMainScreen@125/MainScreen/@CanvasItemEditor@9318/@VSplitContainer@9101/@HSplitContainer@9103/@HSplitContainer@9105/@Control@9106/@SubViewportContainer@9107/@SubViewport@9108/MainSceneUi/GameMenuPanel/GameMenu/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_5/Bone_1_5/Bone_2_5", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.15, 0.7, 0.15, 0, 0, 0, 0, 0), "/root/@EditorNode@18065/@Panel@14/@VBoxContainer@15/DockHSplitMain/@VBoxContainer@28/DockVSplitCenter/@VSplitContainer@70/@VBoxContainer@71/@EditorMainScreen@125/MainScreen/@CanvasItemEditor@9318/@VSplitContainer@9101/@HSplitContainer@9103/@HSplitContainer@9105/@Control@9106/@SubViewportContainer@9107/@SubViewport@9108/MainSceneUi/GameMenuPanel/GameMenu/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_5/Bone_1_5/Bone_2_5/Bone_3_5", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.15, 0.7, 0.15, 0, 0, 0, 0), "/root/@EditorNode@18065/@Panel@14/@VBoxContainer@15/DockHSplitMain/@VBoxContainer@28/DockVSplitCenter/@VSplitContainer@70/@VBoxContainer@71/@EditorMainScreen@125/MainScreen/@CanvasItemEditor@9318/@VSplitContainer@9101/@HSplitContainer@9103/@HSplitContainer@9105/@Control@9106/@SubViewportContainer@9107/@SubViewport@9108/MainSceneUi/GameMenuPanel/GameMenu/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_5/Bone_1_5/Bone_2_5/Bone_3_5/Bone_4_5", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.15, 0.7, 0.15, 0, 0, 0), "/root/@EditorNode@18065/@Panel@14/@VBoxContainer@15/DockHSplitMain/@VBoxContainer@28/DockVSplitCenter/@VSplitContainer@70/@VBoxContainer@71/@EditorMainScreen@125/MainScreen/@CanvasItemEditor@9318/@VSplitContainer@9101/@HSplitContainer@9103/@HSplitContainer@9105/@Control@9106/@SubViewportContainer@9107/@SubViewport@9108/MainSceneUi/GameMenuPanel/GameMenu/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_5/Bone_1_5/Bone_2_5/Bone_3_5/Bone_4_5/Bone_5_5", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.15, 0.7, 0.15, 0, 0), "/root/@EditorNode@18065/@Panel@14/@VBoxContainer@15/DockHSplitMain/@VBoxContainer@28/DockVSplitCenter/@VSplitContainer@70/@VBoxContainer@71/@EditorMainScreen@125/MainScreen/@CanvasItemEditor@9318/@VSplitContainer@9101/@HSplitContainer@9103/@HSplitContainer@9105/@Control@9106/@SubViewportContainer@9107/@SubViewport@9108/MainSceneUi/GameMenuPanel/GameMenu/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_5/Bone_1_5/Bone_2_5/Bone_3_5/Bone_4_5/Bone_5_5/Bone_6_5", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.15, 0.7, 0.15, 0), "/root/@EditorNode@18065/@Panel@14/@VBoxContainer@15/DockHSplitMain/@VBoxContainer@28/DockVSplitCenter/@VSplitContainer@70/@VBoxContainer@71/@EditorMainScreen@125/MainScreen/@CanvasItemEditor@9318/@VSplitContainer@9101/@HSplitContainer@9103/@HSplitContainer@9105/@Control@9106/@SubViewportContainer@9107/@SubViewport@9108/MainSceneUi/GameMenuPanel/GameMenu/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_5/Bone_1_5/Bone_2_5/Bone_3_5/Bone_4_5/Bone_5_5/Bone_6_5/Bone_7_5", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.15, 0.7, 0.15), "/root/@EditorNode@18065/@Panel@14/@VBoxContainer@15/DockHSplitMain/@VBoxContainer@28/DockVSplitCenter/@VSplitContainer@70/@VBoxContainer@71/@EditorMainScreen@125/MainScreen/@CanvasItemEditor@9318/@VSplitContainer@9101/@HSplitContainer@9103/@HSplitContainer@9105/@Control@9106/@SubViewportContainer@9107/@SubViewport@9108/MainSceneUi/GameMenuPanel/GameMenu/PageFlip/Visual/DynamicFlipPoly/AutoSkeleton/Bone_0_5/Bone_1_5/Bone_2_5/Bone_3_5/Bone_4_5/Bone_5_5/Bone_6_5/Bone_7_5/Bone_8_5", PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.15, 0.84999996)] + [node name="PhotoModeTexturePanel" type="Panel" parent="." unique_id=901556197] unique_name_in_owner = true visible = false @@ -300,4 +305,3 @@ playlist = Array[AudioStream]([ExtResource("6_kd244")]) [editable path="Rows/WeatherRow"] [editable path="GameMenuPanel/GameMenu"] [editable path="GameMenuPanel/GameMenu/Pages/Page3"] -[editable path="GameMenuPanel/GameMenu/Pages/Page3/OptionMenu"] diff --git a/core/ui_events.gd b/core/ui_events.gd index 9f35f97..d227aff 100644 --- a/core/ui_events.gd +++ b/core/ui_events.gd @@ -47,3 +47,5 @@ signal day_time_option_changed(index: int) #train signals @warning_ignore("unused_signal") signal toot_toot(update_stats: bool) +@warning_ignore("unused_signal") +signal resume_game_requested diff --git a/tgcc/main_scene.tscn b/tgcc/main_scene.tscn index 9d6e8e9..9b1b87e 100644 --- a/tgcc/main_scene.tscn +++ b/tgcc/main_scene.tscn @@ -224,11 +224,6 @@ transform = Transform3D(0.57785755, -0.57709646, 0.5770964, 0, 0.7071067, 0.7071 rotation_target = NodePath("../pivot") iso_camera = NodePath("../camera_iso") -[node name="MainSceneUi" parent="cameras" unique_id=1359391222 instance=ExtResource("49_exdk1")] -offset_left = 3.0 -offset_right = 3.0 -mouse_filter = 2 - [node name="DayNight" parent="." unique_id=1611939731 node_paths=PackedStringArray("camera_pivot") instance=ExtResource("36_qwsp8")] camera_pivot = NodePath("../cameras") thunder_sounds = Array[AudioStream]([SubResource("AudioStreamMP3_ra0ar"), SubResource("AudioStreamMP3_j8mxr"), ExtResource("37_pdfkp"), ExtResource("38_fpbvh"), ExtResource("39_hxtdl")]) @@ -555,6 +550,9 @@ theme_override_colors/font_hover_pressed_color = Color(1, 1, 1, 1) theme_override_colors/font_outline_color = Color(1, 1, 1, 1) text = "Update Rails" +[node name="MainSceneUi" parent="." unique_id=1359391222 instance=ExtResource("49_exdk1")] +mouse_filter = 2 + [connection signal="toggled" from="Control/Snow" to="Control" method="_on_snow_toggled"] [connection signal="toggled" from="Control/Rain" to="Control" method="_on_rain_toggled"] [connection signal="toggled" from="Control/Wind" to="Control" method="_on_wind_toggled"]