From 7e9227064b7d159452db030cba9eb1db4b3e0782 Mon Sep 17 00:00:00 2001 From: Dustin Date: Sun, 30 Mar 2025 11:15:07 -0700 Subject: [PATCH] Level transition improvments. --- assets/UI/transition_screen.png | Bin 2665 -> 2901 bytes lib/singleton_autoloads/LevelInfo.gd | 4 +++- src/Interactables/LevelTransition.gd | 1 + .../playerE/PlayerE-Movement_StateReceiver.gd | 6 ++++-- src/actors/players/playerE/PlayerE.gd | 10 +++++++--- src/actors/players/playerE/PlayerE.tscn | 1 + .../players/playerE/states/enter_right.tres | 2 +- src/classes/Level.gd | 7 +++++-- src/levels/CloneBox.tscn | 5 ++++- src/levels/TestBox.tscn | 3 +++ src/ui/scene_transition.gd | 1 + src/ui/scene_transition.tscn | 2 +- 12 files changed, 31 insertions(+), 11 deletions(-) diff --git a/assets/UI/transition_screen.png b/assets/UI/transition_screen.png index a3eca504aac7683ef93cd1cde009e3b6948401cb..92639fe44b372e0163f1105c77bee00634123068 100644 GIT binary patch literal 2901 zcmeHJ`8yMi1K!NceT1B)KFLw|#7ARcDa4RtlB2P8xa}Zpj@as(%2_NWQ;tZExsN$l zl2A&H#T+Zg3Y*ChA|L<8_jx|QywCeQ@B7pHywCH#_gtK8rNmXm0RVs$!p<5A001rb z__(OZ9s;dMT6;(dva)iyj|?K zPUrTOyZ;{V7}=NlL)`Pp|GE|3`^22ZK9+MYWD;+iJ-lXmEY83@uLpd4>AVH65u!tRw+ue)D+oek93ge>kBJ(3$fpX&pCKs&ECv=b8s0KA+)jl4f8}Sj--6W z(O|J>c43%AF{2LvfLJ=h`pg9q zjmO5`RVMCp^>uHGB&x7q3q`G@x2opQm^ntWjcvRyZ?sv0Pbk z^)}eGC%Lpj20ZXdwQz%sp(2HbN9q)hj42$^FMyuIK2eoNZxeeWYGNCSjb^ni9ZQhJ z8ULlI-OZ2vM6SQqAw_T-7~b9nP~tBEDWYMO%SRJq3-g-wuoBFa}5z}#fLB-F?HO=EM8=CaOVn~ zeeM3Q*N*9UZxPfvnDB&1`N0jv-)6$&171-e=lAO$3S*`}7#^+!(uEDc{b-JZdeOGG zzzqYbZS@*w?8j&E7{VI>0!WY&4d*#w%mg{UGFsTivF&)(4NnIvm~=TN4YyjokEBbG zBU}!Mh6_SOQ3~Ub5G2E zUp(QbW^T!t-UY_cSUkV1LOF6JfF=3UT;H>+N5VHm=LL?A#hYH=vY54KsQox?g2dTB zjmcDI(r+*&bnmSF!#qOGjrK-?<7$7~RLV-rGE{o+bg7Y9pqxaLR-0JSjmrU>VmpVP z_Y`qK>Vb50vw&2EK7f6aAK+-05jo?E%75~IvHV}uA@w?77l`__en|6tWteoHX6jHA zSP+KMKLIj7@MUWAcNbPVxEJM^J?PGq*H8B|u%!evScvX<#W->tbqrW=g1I%k;Mo!5 z^J}?{n!D~%k%Bw5ondq*)(ov7@>IOFxdQm%D-r_}cwi8HR}t6EX4}G>c$Ac}Agc3d z@dU8E*zu<%;gmp>wy%AQ^(dl!SMj`b)ay2yQ9$L*%oVTfK{O%U>^*?ZR=&oKESvt~ z7QILcnDEk1DGNG1J)<61ozF5C4W+m8FP&QO0HOl}C6kwZIQuyrD?6{UL3gC1cH5_7`!2L+KB6GFk3<;kd9B`Hdr3Ti^DQzY1LlJaVf0c~`dgs>@%GS@K&8i5*+ zKb}6Lcv^imFF#J%DTj;9Nl*GEq;Z9$B!UOS&vH%Z^!aU%xj2ZR{cszC*Z2yD2x@rz(&T*a?f%HjrF)wx)lj-VGd&mN{@F(YpXsSgC=MTQnM0`N@8_h9Mj^1%8Xbcl#V*% zl==&N1+Vg#;+SDQF3?wU{LKu_dJ2SsY&WxRW!9{uct7K{9cXI*nm=S=w~3u0u0gcI z*lUlu70h3@+ckKhD0dIZ5PmU~+_pN3=m*0^Q4+L)?_{Sn4Nf1Gt?>tyK-foo+_3s( z1P_8kXe?&mlq2KyR^xnc5Iepe27mUGJ+hLxx|)!O>YAAHF-+QA`Rnd;Pgh%VmL806LVCABon(nSt zZ3|6$yRF7ta(vWlZ`7Voc)W(v{Nf)Wac`z9vswISF6;MxA5WOH;bvtuyY^p>06+{& wW2^Q>r65kE@D>`(htG0{8B|Tg=fE8e$-qazEF*B^-dzSDY@Dp=XE8Vb1svWYQ~&?~ literal 2665 zcmeHJ`8(8&9{tWtMocr4kcO;{P?peZDU>y1>{%vR23^vGvBmU~8B6t2WTfP^#UQc_ z8Yb%$DHJzlxz=w9$!-i&W4Yb`;r{skaL#j{^TYY!^L(D?oWC6HFCaywMF9Xn;;b#4 z0RVFTw|=o7{+nmM@x*=`v>F>B&4|i)i8nVrc&8of z9dpnWfk-X<*kkRof0Tf|D)CwAFK`g6_4vW`nzu!#8xyH|SI;|nS7=mpD4|d_fsn!~ zx_^7F1^YlD;L(46ZZ@9nSXL*Pt0`9vzf{cY4uZ4~*D~4PuEv%?Wb!sX$+$&E=^0>( zO5==)+S7Txm9B#E_Mt=f=S2xQNpB@xdqo^X`YY#LGNY5vW?eBj5vyrb*e#U2VrT69 zRX{f$NI#ZZNobH^LLeXw5}5(^lwKFM%h)o#dcYycU#x`ZtjKp@c8e@ z&f!ld|-KqYrDEXgjd)kGY#!K9T1F7iUIwJ^;Y} zVw{DkOHA(4DCw?epe%JQ&{kTUl!L4qtp23q7)%oPZzZNWR@^;QrR|Iu^<#m_9vkLj z7Qvk+KN=X^-9R`NN0-1CFGH|)w_)|VdFPsdk?h6@+MV^yQ>UhO9jeL$ zEXDJC0Gl6p)a2<^SC9pp95-6k2J0QYB#?!Sd`a&aFOfyez{Dc70gC8AeJO%0uG1Sr zquSnkrJ2fe*+zZ)e@#4I?zlL^@XFCKVFh7OO_-%73fp4Bi**un2E15-y~k+iwYuyR!xX91CsdyTGeG>}4d;n!Tt}}Ojp;k@7Fx5Sr zJ0W+0ss&xZwK5wH(ZRJHEBp#Z7srSkZ|MX9fUZ&>u4Fjo>^G#OaYGm#C&alJtzq&7Ro}`X% zC=Rgt44rdltp%Xiz*eiAqR-Ix&kNJN_3;>Xd700%$ustzD_#ya=fWf6rq$=sjJc7% zP4uWhsfHKKsA1T)gdHG`nShpzdJh=?8}lU`jbTNR!A<6Z<%oDJ!_lj)-^X*R6n zB^RSbwqg|{C)8(R5vD(SfVA{psxWt|M%nA0&*dqD0lrLDYPZKIEDEh)mlM_+pooL% zQt7XC{=q*t_&@)E^bD|zV6&GMv3Au?2vCtIef33YPGDncj(`RyQ>rf7J?h1gnotJL zTy?zR0i)(+#nUgXl&M?}g_ASn!X=U_DBJSuQ(JV@sLznj#1+0!5OS-bH0O6p1m_dY zedx^Kyq8cVd>3B%jPmH}@^NGL*&lLOMx=!U0#O;Lq!Sac78qauXu78Z>U|&J3E94O zB+;($B-KZY)kX1wm_V+}tlLgp7d8={C_q!%BB<@|XIy!=;4R1ZcDNkDNp?R5L~;_z zemmTpcoe%N0Rvz20&(C?@ZQX}U-4>ZC{%xT>GgU54E&QbOr79B)wOQsiR!jL*#M&| zNVtWzMV4meN;2bAE9?EMy3ovoE!7P@f8T0jPL_Fgc}PD@ZfU>cSThanI2pCpOhrS4 zziccN1dc#j$`}HTF%(!jZJ;v?G7$J zGq7!HiypYtay`*Vr6*UdzZS!H3exvTkK-KwzL59tI$k|`J+2DtrR)6yBk2LSK`sc# z*dF5&Z8GFPpCGD`qgp??1n85IWJZd3pQ@S#QD(kMVDM9G9+qF$^{@6BUYmH#pC5|H zMaBtTO?EE8n5eK7f)8OnZScK4tw=1S9W9YUKkzP3pAk7(!#lnD zIL9g*j(WtpA&%jMhzfV(sbiP|lJ%d~QcvSyUDZ;_ajmj!R+keXcdS+Br?G9{?#arv z!=T`Qr2=g(+~y&~IYns;Ds!18LCqM0`bRYTm_z(St3qJ^lDvJ7=|xuB&h}wYmm?%O z&XZ-JkL*G++xOPb_*mR*aoWie`egB7Ys0tf52ogK;NR$yrf3#vFe7B_HkTOOOi3S$fVqkm6G0B31$QEf&{ F_%DEFA@~3Q diff --git a/lib/singleton_autoloads/LevelInfo.gd b/lib/singleton_autoloads/LevelInfo.gd index 5cf46b5..7641558 100644 --- a/lib/singleton_autoloads/LevelInfo.gd +++ b/lib/singleton_autoloads/LevelInfo.gd @@ -4,7 +4,8 @@ extends Node # Declare member variables here. Examples: # var a = 2 # var b = "text" -var player_start_position: Position2D +##TODO: Should be based on screen position for starter +onready var player_start_position := Vector2(50,50) func change_level(_level_name :String): print("res://src/levels/" + _level_name + ".tscn" ) @@ -21,6 +22,7 @@ func change_level(_level_name :String): get_node("/root/Main").remove_child(l) get_node("/root/Main").add_child(new_level) get_node("/root/Main").move_child(new_level,1) + ##TODO: Probably set start position print (get_node("/root/Main").get_children()) SceneTransition.reset() #get_node("/root/Main").add_child_below_node(SceneTransition,new_level) diff --git a/src/Interactables/LevelTransition.gd b/src/Interactables/LevelTransition.gd index bc8c610..ea95708 100644 --- a/src/Interactables/LevelTransition.gd +++ b/src/Interactables/LevelTransition.gd @@ -5,6 +5,7 @@ extends Interactable ## helps the Player object pick an appropriate animation export var _transition_type := 'door_right' +export var _destination_position_name := 'PlayerStart' # Declare member variables here. Examples: # var a = 2 # var b = "text" diff --git a/src/actors/players/playerE/PlayerE-Movement_StateReceiver.gd b/src/actors/players/playerE/PlayerE-Movement_StateReceiver.gd index e0062ab..b288c77 100644 --- a/src/actors/players/playerE/PlayerE-Movement_StateReceiver.gd +++ b/src/actors/players/playerE/PlayerE-Movement_StateReceiver.gd @@ -169,8 +169,10 @@ func _state_process_physics_enter_right(): #flip_sprite_to_movement_direction() if current_state.state_timeout.time_left == 0 and level_transition_latch == false: - #desired_movement_vector.x = LEFT - parent.transform.x.x = LEFT + ##TODO: Optionally flip direction + #parent.transform.x.x = LEFT + ## Reset global position. + parent.global_position = LevelInfo.player_start_position current_state.state_timeout.start() level_transition_latch = true elif current_state.state_timeout.time_left == 0 and level_transition_latch == true: diff --git a/src/actors/players/playerE/PlayerE.gd b/src/actors/players/playerE/PlayerE.gd index 81b78e1..87da986 100644 --- a/src/actors/players/playerE/PlayerE.gd +++ b/src/actors/players/playerE/PlayerE.gd @@ -1,5 +1,6 @@ extends Actor +export var player_number: int = 1 # Declare member variables here. Examples: # var a = 2 @@ -9,6 +10,8 @@ extends Actor # Called when the node enters the scene tree for the first time. func _ready(): PlayerInfo.player_health = $Health_Component.health + # Set initial player position in world. + global_position = LevelInfo.player_start_position # Called every frame. 'delta' is the elapsed time since the previous frame. @@ -32,7 +35,8 @@ func touch_the_thing(the_thing: Interactable) -> bool: the_thing.trigger_interaction() return false if the_thing is LevelTransition: - if the_thing._transition_type == 'door_right': - movement_state_machine.change_to_known_state('enter_right') - the_thing.trigger_interaction() + if movement_state_machine.current_state.name != 'enter_right': + if the_thing._transition_type == 'door_right': + movement_state_machine.change_to_known_state('enter_right') + the_thing.trigger_interaction() return true diff --git a/src/actors/players/playerE/PlayerE.tscn b/src/actors/players/playerE/PlayerE.tscn index e53c749..faec529 100644 --- a/src/actors/players/playerE/PlayerE.tscn +++ b/src/actors/players/playerE/PlayerE.tscn @@ -46,6 +46,7 @@ extents = Vector2( 9, 15 ) [node name="PlayerE" instance=ExtResource( 1 )] script = ExtResource( 3 ) actor_type = "Player" +player_number = 1 [node name="Movement_StateMachine" parent="." index="0"] starting_state_name = "idle" diff --git a/src/actors/players/playerE/states/enter_right.tres b/src/actors/players/playerE/states/enter_right.tres index 8416804..b437daf 100644 --- a/src/actors/players/playerE/states/enter_right.tres +++ b/src/actors/players/playerE/states/enter_right.tres @@ -6,7 +6,7 @@ resource_local_to_scene = true script = ExtResource( 1 ) debug_state = false -timeout_seconds = 1.5 +timeout_seconds = 1.0 name = "enter_right" horizontal_speed = 30.0 horizontal_acceleration = 0.0 diff --git a/src/classes/Level.gd b/src/classes/Level.gd index 367ce33..a039c23 100644 --- a/src/classes/Level.gd +++ b/src/classes/Level.gd @@ -7,12 +7,15 @@ extends Node2D # var b = "text" onready var player_start = $PlayerStart - +var entrances:Dictionary # Called when the node enters the scene tree for the first time. func _ready(): - LevelInfo.player_start_position = player_start + LevelInfo.player_start_position = player_start.transform.origin + for ent in get_children(): + if ent is Position2D: + entrances[ent.name] = ent # Called every frame. 'delta' is the elapsed time since the previous frame. #func _process(delta): diff --git a/src/levels/CloneBox.tscn b/src/levels/CloneBox.tscn index f78906c..ce72f98 100644 --- a/src/levels/CloneBox.tscn +++ b/src/levels/CloneBox.tscn @@ -11,7 +11,7 @@ radius = 5.09902 [node name="TileMap Collision" parent="." index="1"] tile_set = ExtResource( 2 ) -tile_data = PoolIntArray( 0, 4, 65536, 19, 4, 65536, 65536, 4, 65536, 65555, 4, 65536, 131072, 4, 65536, 131091, 4, 65536, 196608, 4, 65536, 196620, 2, 0, 196621, 2, 1, 196622, 2, 2, 196627, 4, 65536, 262144, 4, 0, 262156, 2, 65536, 262157, 2, 65537, 262158, 2, 65538, 262163, 4, 0, 327680, 4, 65536, 327699, 4, 65536, 393216, 4, 65536, 458752, 4, 65536, 589823, 0, 1, 524288, 4, 131072, 524289, 0, 3, 524290, 0, 1, 524291, 0, 2, 524292, 0, 3, 524293, 0, 1, 524294, 0, 2, 524295, 0, 3, 524296, 0, 1, 524297, 0, 2, 524298, 0, 3, 524299, 0, 1, 524300, 0, 2, 524301, 0, 3, 524302, 0, 1, 524303, 0, 2, 524304, 0, 3, 524305, 0, 1, 524306, 0, 2, 524308, 0, 1, 524309, 0, 2, 524310, 0, 3, 655359, 0, 65537, 589824, 0, 65538, 589825, 0, 65539, 589826, 0, 65537, 589827, 0, 65538, 589828, 0, 65539, 589829, 0, 65537, 589830, 0, 65538, 589831, 0, 65539, 589832, 0, 65537, 589833, 0, 65538, 589834, 0, 65539, 589835, 0, 65537, 589836, 0, 65538, 589837, 0, 65539, 589838, 0, 65537, 589839, 0, 65538, 589840, 0, 65539, 589841, 0, 65537, 589842, 0, 65538, 589843, 0, 65539, 589844, 0, 65537, 589845, 0, 65538, 589846, 0, 65539, 720895, 0, 131073, 655360, 0, 131074, 655361, 0, 131075, 655362, 0, 131073, 655363, 0, 131074, 655364, 0, 131075, 655365, 0, 131073, 655366, 0, 131074, 655367, 0, 131075, 655368, 0, 131073, 655369, 0, 131074, 655370, 0, 131075, 655371, 0, 131073, 655372, 0, 131074, 655373, 0, 131075, 655374, 0, 131073, 655375, 0, 131074, 655376, 0, 131075, 655377, 0, 131073, 655378, 0, 131074, 655379, 0, 131075, 655380, 0, 131073, 655381, 0, 131074, 655382, 0, 131075, 786431, 0, 196609, 720896, 0, 196610, 720897, 0, 196611, 720898, 0, 196609, 720899, 0, 196610, 720900, 0, 196611, 720901, 0, 196609, 720902, 0, 196610, 720903, 0, 196611, 720904, 0, 196609, 720905, 0, 196610, 720906, 0, 196611, 720907, 0, 196609, 720908, 0, 196610, 720909, 0, 196611, 720910, 0, 196609, 720911, 0, 196610, 720912, 0, 196611, 720913, 0, 196609, 720914, 0, 196610, 720915, 0, 196611, 720916, 0, 196609, 720917, 0, 196610, 720918, 0, 196611, 851967, 0, 262145, 786432, 0, 262146, 786433, 0, 262147, 786434, 0, 262145, 786435, 0, 262146, 786436, 0, 262147, 786437, 0, 262145, 786438, 0, 262146, 786439, 0, 262147, 786440, 0, 262145, 786441, 0, 262146, 786442, 0, 262147, 786443, 0, 262145, 786444, 0, 262146, 786445, 0, 262147, 786446, 0, 262145, 786447, 0, 262146, 786448, 0, 262147, 786449, 0, 262145, 786450, 0, 262146, 786451, 0, 262147, 786452, 0, 262145, 786453, 0, 262146, 786454, 0, 262147 ) +tile_data = PoolIntArray( -196609, 4, 0, -131073, 4, 0, -65537, 4, 0, -3, 4, 0, -2, 4, 0, -1, 4, 0, -65517, 4, 0, 65533, 4, 0, 19, 4, 65536, 131069, 4, 0, 65555, 4, 65536, 196605, 4, 0, 131073, 2, 1, 131074, 2, 2, 131091, 4, 65536, 262141, 4, 0, 262142, 4, 0, 262143, 4, 0, 196608, 4, 65536, 196609, 2, 65537, 196610, 2, 65538, 196627, 4, 65536, 262144, 4, 0, 262163, 4, 0, 327680, 4, 65536, 327699, 4, 65536, 393216, 4, 65536, 393235, 4, 65536, 458752, 4, 65536, 458771, 4, 65536, 589823, 0, 1, 524288, 4, 131072, 524289, 0, 3, 524290, 0, 1, 524291, 0, 2, 524292, 0, 3, 524293, 0, 1, 524294, 0, 2, 524295, 0, 3, 524296, 0, 1, 524297, 0, 2, 524298, 0, 3, 524299, 0, 1, 524300, 0, 2, 524301, 0, 3, 524302, 0, 1, 524303, 0, 2, 524304, 0, 3, 524305, 0, 1, 524306, 0, 2, 524307, 4, 0, 524308, 0, 1, 524309, 0, 2, 524310, 0, 3, 655359, 0, 65537, 589824, 0, 65538, 589825, 0, 65539, 589826, 0, 65537, 589827, 0, 65538, 589828, 0, 65539, 589829, 0, 65537, 589830, 0, 65538, 589831, 0, 65539, 589832, 0, 65537, 589833, 0, 65538, 589834, 0, 65539, 589835, 0, 65537, 589836, 0, 65538, 589837, 0, 65539, 589838, 0, 65537, 589839, 0, 65538, 589840, 0, 65539, 589841, 0, 65537, 589842, 0, 65538, 589843, 0, 65539, 589844, 0, 65537, 589845, 0, 65538, 589846, 0, 65539, 720895, 0, 131073, 655360, 0, 131074, 655361, 0, 131075, 655362, 0, 131073, 655363, 0, 131074, 655364, 0, 131075, 655365, 0, 131073, 655366, 0, 131074, 655367, 0, 131075, 655368, 0, 131073, 655369, 0, 131074, 655370, 0, 131075, 655371, 0, 131073, 655372, 0, 131074, 655373, 0, 131075, 655374, 0, 131073, 655375, 0, 131074, 655376, 0, 131075, 655377, 0, 131073, 655378, 0, 131074, 655379, 0, 131075, 655380, 0, 131073, 655381, 0, 131074, 655382, 0, 131075, 786431, 0, 196609, 720896, 0, 196610, 720897, 0, 196611, 720898, 0, 196609, 720899, 0, 196610, 720900, 0, 196611, 720901, 0, 196609, 720902, 0, 196610, 720903, 0, 196611, 720904, 0, 196609, 720905, 0, 196610, 720906, 0, 196611, 720907, 0, 196609, 720908, 0, 196610, 720909, 0, 196611, 720910, 0, 196609, 720911, 0, 196610, 720912, 0, 196611, 720913, 0, 196609, 720914, 0, 196610, 720915, 0, 196611, 720916, 0, 196609, 720917, 0, 196610, 720918, 0, 196611, 851967, 0, 262145, 786432, 0, 262146, 786433, 0, 262147, 786434, 0, 262145, 786435, 0, 262146, 786436, 0, 262147, 786437, 0, 262145, 786438, 0, 262146, 786439, 0, 262147, 786440, 0, 262145, 786441, 0, 262146, 786442, 0, 262147, 786443, 0, 262145, 786444, 0, 262146, 786445, 0, 262147, 786446, 0, 262145, 786447, 0, 262146, 786448, 0, 262147, 786449, 0, 262145, 786450, 0, 262146, 786451, 0, 262147, 786452, 0, 262145, 786453, 0, 262146, 786454, 0, 262147 ) [node name="TileMap Foreground" parent="." index="2"] tile_set = ExtResource( 2 ) @@ -19,6 +19,9 @@ collision_layer = 0 collision_mask = 0 tile_data = PoolIntArray( 524288, 0, 2, 524307, 0, 3 ) +[node name="PlayerStart" parent="." index="3"] +position = Vector2( -7, 28 ) + [node name="Hitbox_Component" parent="." index="4" instance=ExtResource( 3 )] damage_amount = 10 diff --git a/src/levels/TestBox.tscn b/src/levels/TestBox.tscn index f9bae29..12d0efa 100644 --- a/src/levels/TestBox.tscn +++ b/src/levels/TestBox.tscn @@ -23,6 +23,9 @@ collision_layer = 0 collision_mask = 0 tile_data = PoolIntArray( 524288, 0, 2, 524307, 0, 3 ) +[node name="PlayerStart" parent="." index="3"] +position = Vector2( 80, 131 ) + [node name="Hitbox_Component" parent="." index="4" instance=ExtResource( 3 )] damage_amount = 10 diff --git a/src/ui/scene_transition.gd b/src/ui/scene_transition.gd index c8e5ed2..5e9efb7 100644 --- a/src/ui/scene_transition.gd +++ b/src/ui/scene_transition.gd @@ -12,6 +12,7 @@ var animation_name = '' func reset(): $AnimationPlayer.play_backwards(animation_name) + emit_signal("done") func transition_dissolve(target: String) -> void: animation_name = 'dissolve' diff --git a/src/ui/scene_transition.tscn b/src/ui/scene_transition.tscn index 7586552..ac9c45b 100644 --- a/src/ui/scene_transition.tscn +++ b/src/ui/scene_transition.tscn @@ -96,5 +96,5 @@ anims/dissolve = SubResource( 4 ) [node name="clouds" type="TextureRect" parent="."] margin_top = 180.0 margin_right = 320.0 -margin_bottom = 360.0 +margin_bottom = 400.0 texture = ExtResource( 2 )