From 38c61eefd6d19d70292ef0f8f3ac46f197ff9107 Mon Sep 17 00:00:00 2001 From: Jakob Feldmann Date: Sat, 25 Jun 2022 14:27:12 +0200 Subject: [PATCH] Fixed Main Menu with level select, new Tile Sizes & assets Main change is the fixed main menu The other changes include newly added resources, like the new ground tile and blobby animations/designs I also experimented with the display size and camera To adapt to the new Blobby design, the default tile size was changed to 24x24 --- assets/blobby/blobby2.png | Bin 270 -> 0 bytes assets/blobby/blobby3.png | Bin 261 -> 0 bytes assets/blobby/blobby3.png.import | 35 ------ .../neu-blobby-falllose_altitude.aseprite | Bin 0 -> 1242 bytes ...u-blobby-falllose_altitude.aseprite.import | 26 +++++ assets/blobby/{ => idle}/blobby1.png | Bin .../blobby/idle/blobby1.png.import | 6 +- assets/blobby/idle/proto-blobby.png | Bin 0 -> 366 bytes assets/blobby/idle/proto-blobby.png.import | 35 ++++++ .../neu-blobby-jumpgain_altitude.aseprite | Bin 0 -> 956 bytes ...u-blobby-jumpgain_altitude.aseprite.import | 26 +++++ .../neu-blobby-proto-walk-anm-test.aseprite | Bin 0 -> 1726 bytes ...blobby-proto-walk-anm-test.aseprite.import | 26 +++++ assets/enemy/blobby.aseprite | Bin 0 -> 300 bytes assets/enemy/blobby.aseprite.import | 26 +++++ assets/environment/blocks/24BlockBasic.png | Bin 0 -> 482 bytes .../blocks/24BlockBasic.png.import | 35 ++++++ .../background tile.png | Bin .../background tile.png.import | 6 +- .../Adventurer Sprite Sheet v1.1.aseprite | Bin 4837 -> 52389 bytes project.godot | 5 +- .../Blobby/Adventurer Sprite Sheet v1.1.png | Bin 1870 -> 0 bytes .../Adventurer Sprite Sheet v1.1.png.import | 35 ------ src/Actors/Blobby/Blobby.gd | 2 - src/Actors/Blobby/Blobby.tscn | 100 +++++++++++------- .../Blobby/{Camera2D.gd => BlobbyCam.gd} | 39 +++++-- src/Actors/Blobby/BlobbyStateMachine.gd | 1 + src/Actors/Blobby/Layer 1.png | Bin 0 -> 615 bytes .../Actors/Blobby/Layer 1.png.import | 10 +- src/Actors/Blobby/Sprite Sheet.png | Bin 1870 -> 0 bytes src/Actors/Player.gd | 12 +-- src/Levels/24TileSizeLevel.tscn | 63 +++++++++++ src/Levels/Layer 1.png | Bin 0 -> 1156 bytes .../Levels/Layer 1.png.import | 6 +- src/Levels/WalkNJumpTesterLevel.tscn | 38 +++---- src/UserInterface/Buttons/PlayButton.gd | 4 + src/UserInterface/Screens/LevelEndScreen.tscn | 40 ++++--- src/UserInterface/Screens/LevelList.gd | 46 ++++++++ .../Screens/LevelSelectButtonGroup.tres | 4 + src/UserInterface/Screens/MainScreen.tscn | 74 +++++++------ 40 files changed, 479 insertions(+), 221 deletions(-) delete mode 100644 assets/blobby/blobby2.png delete mode 100644 assets/blobby/blobby3.png delete mode 100644 assets/blobby/blobby3.png.import create mode 100644 assets/blobby/fall/neu-blobby-falllose_altitude.aseprite create mode 100644 assets/blobby/fall/neu-blobby-falllose_altitude.aseprite.import rename assets/blobby/{ => idle}/blobby1.png (100%) rename src/Actors/Blobby/Sprite Sheet.png.import => assets/blobby/idle/blobby1.png.import (69%) create mode 100644 assets/blobby/idle/proto-blobby.png create mode 100644 assets/blobby/idle/proto-blobby.png.import create mode 100644 assets/blobby/jump/neu-blobby-jumpgain_altitude.aseprite create mode 100644 assets/blobby/jump/neu-blobby-jumpgain_altitude.aseprite.import create mode 100644 assets/blobby/walk/neu-blobby-proto-walk-anm-test.aseprite create mode 100644 assets/blobby/walk/neu-blobby-proto-walk-anm-test.aseprite.import create mode 100644 assets/enemy/blobby.aseprite create mode 100644 assets/enemy/blobby.aseprite.import create mode 100644 assets/environment/blocks/24BlockBasic.png create mode 100644 assets/environment/blocks/24BlockBasic.png.import rename assets/environment/{background => blocks}/background tile.png (100%) rename assets/environment/{background => blocks}/background tile.png.import (67%) delete mode 100644 src/Actors/Blobby/Adventurer Sprite Sheet v1.1.png delete mode 100644 src/Actors/Blobby/Adventurer Sprite Sheet v1.1.png.import rename src/Actors/Blobby/{Camera2D.gd => BlobbyCam.gd} (60%) create mode 100644 src/Actors/Blobby/Layer 1.png rename assets/blobby/blobby2.png.import => src/Actors/Blobby/Layer 1.png.import (65%) delete mode 100644 src/Actors/Blobby/Sprite Sheet.png create mode 100644 src/Levels/24TileSizeLevel.tscn create mode 100644 src/Levels/Layer 1.png rename assets/blobby/blobby1.png.import => src/Levels/Layer 1.png.import (72%) create mode 100644 src/UserInterface/Screens/LevelList.gd create mode 100644 src/UserInterface/Screens/LevelSelectButtonGroup.tres diff --git a/assets/blobby/blobby2.png b/assets/blobby/blobby2.png deleted file mode 100644 index 46b46ffc94a6b7d8d1039416726e2e38de8e6c92..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 270 zcmV+p0rCEcP)Px#$Vo&&R9J=WltB&yAqYi3O>e4mD)p>%VV$C_=+HFX@Dej|6!;R9hUFlzAqhm)F6KI)W#Xne$q`^?(9@QPx-kZn zqlwP3KhT@d@rT^lj9Y-K$jq%W(FvFVfU93VzdLJVUC4NM>xss?(AG3Q)64y~gZGs35-SNT^8%$2#L*Al{U ztM#;mv4*IX+SI(w49l$U-OyvP(qKxuKRr7>dTPZPzLk;<9SrxY1wW=)Eie&_{cO8X zm$64AkyZ9*iqbTW=?r2E_jkTXR-WJDnlUeqaT-T|e%o#)<&>H3xgR!!GWPC~UcKh0 zX~wcmKQBf6{cKd-6+OAYz2n@CS&UAMTkjnYn^I~0qe0DZ0pDe#x3HW#df{-#N~m1 zthW|IHnCp>c^+Ia-rpCj*tZ?Lp5_K#{VX2Tb$<#j{k;{e(u9JEoj%|;X$r^}ZvjPo z7m&mC2Ll5$K%bbSU}VZ97+Y-tqx+}9E2C!6f<;JmQyW;6Ukr*96T$F(A~5T<5>Ub6 zfLHg&f1G|gC(id^vJGZQ1opV$UPyWp0n9tXGDZWf;>9G+n~~sh(5%j3|VMG z5NeQu4n&{;`f!Ihtf35F$Wo>j3mhQ`JE*}6QZRxJTp$7qC}2K@W3nSPm`$_3-MfGh zVUUowC2@z@zL)UBmQ4tatR@zm;NA5MaUeOeCh35E0h_sl)#qu>blHE1ksb3`+rVOB z(1^PEz)5~c$wKn!H+GeuOmNv)E53HY)ay5Hs5$Lb^Haj6X!MHny5Qnna_P_))6ALPj;QXLqC7vThx;e}v+{(Zu_p`6ifwkTJ>qkD@vWL$ zSsmVCHQ%S2D@O+-&ANcl@;?&HrLR}{HwIl?k_~+)92;uwO7bvIZEU~xwK?Glrk_E0 z?u@+buSR8hzgA%8$lXn~GZx0mu$bt|Yjd{Pwbn}%h7l)$!1OcMNA+rE^eoHaJ^lZZ zC+{WGaH{u@kVV!}$vDDp>IfBY8rz)Xj_H1Xj>Btnnq$ly(j}`SUiNgj6X4_4^uj>U zspE4?hV(t_URqA;XxOPx$C`m*?R9J=WmAwsvFc5{0C=E3d6GTylKIpX3E$oOY@K}oUS3{aUS9vM;Kw|(SKTcDU(=*0*}&KRrmn96Fl*EJbQY8P zuC*YnhXi1(F=ZM?vGZ>ndNl+GV3MMAj4?w>7UX$NNw1^Ud@8aGG6sU+Q#Y?0004NT z7j&HxwkmZv387eb0uNYHQk0NYHDpyS0*E`D)~8y|=GFkt(dTue0+E2jC`KXB6JU}_ z^Dv6ZI4+lJ!c7qKn}Nk~H%AR%3)wEWT`vJi5&_1cUlg>vn_o9h94HCUckQAP=MeU* zX-v&YkSD-FXp7Ht0q_?QeTcRW9!cCxpk5IpjodBb1`<1rb|YYX-Z7?oNSQT|#Q*>R M07*qoM6N<$g6nCIY5)KL literal 0 HcmV?d00001 diff --git a/assets/blobby/idle/proto-blobby.png.import b/assets/blobby/idle/proto-blobby.png.import new file mode 100644 index 0000000..5096bca --- /dev/null +++ b/assets/blobby/idle/proto-blobby.png.import @@ -0,0 +1,35 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/proto-blobby.png-6768aaa5a5f6a2768fc93f268f8abcbc.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/blobby/idle/proto-blobby.png" +dest_files=[ "res://.import/proto-blobby.png-6768aaa5a5f6a2768fc93f268f8abcbc.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=false +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=false +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +process/normal_map_invert_y=false +stream=false +size_limit=0 +detect_3d=false +svg/scale=1.0 diff --git a/assets/blobby/jump/neu-blobby-jumpgain_altitude.aseprite b/assets/blobby/jump/neu-blobby-jumpgain_altitude.aseprite new file mode 100644 index 0000000000000000000000000000000000000000..fd690af753bf2a09e8a3c0e24214fb7648570c23 GIT binary patch literal 956 zcmcJN|1Z>W9LL`{u}~(f)W#>f@~!2ZmYI_jGfr_g^JO+JV(y6K>s5r5O=8Wh5=Y-y zIvR}>lF~+tHOrju6xaBn({(m>K65?qYNbD**L$zW-k<7DZ&AcRcStO;{znBG5~5KV>r;&puoG=U=_5DAO<-?BQNK^@HvQ3WwS?GHhe3Zw z4w&fa23CZ7fwSoc!0~&DptA2Sxc=h^SfvOBMLjIgLy`(|g{~l<%LLgRPteCF6J!aB z!06P^V0^U}j2&74KTOh~7DY&Pa|c+QUjhn6A}}hP4`v@P1)JDxa6BR&lwa%wD{cpY zrD-g!2m>$(=B2Q~5SRe^aECaop$uQh!W5ctgdpso1}{j#2s%0!triwgKt95ej96qM z5NU|A(3?mqmJC}IQ09I%gHCi7 zGvb^{j$muY@LHko#Qf8^N^WrJYD(kD!1Br@rfr>Yx>GaYKBKN}bgq3TnBg8RD>^8j zRr@)P_dHbYn z;l(IM)YesLSFecp%dh)+8zBj+Ef>N@=VDBk2MeV^IhXwkR4w@_TGdbGw^b8zlgsG43V14;s=68VD#^TmPgn7+m0Ja>ts!=0feX;Sgjjsm*L!)$-Q zuq`jKUGXiu+aVY>Wwsvb-+W)vUci+@zk^7ZRd*&tZ)m%ZgpH HvAXmVy~9%x literal 0 HcmV?d00001 diff --git a/assets/blobby/jump/neu-blobby-jumpgain_altitude.aseprite.import b/assets/blobby/jump/neu-blobby-jumpgain_altitude.aseprite.import new file mode 100644 index 0000000..0266efb --- /dev/null +++ b/assets/blobby/jump/neu-blobby-jumpgain_altitude.aseprite.import @@ -0,0 +1,26 @@ +[remap] + +importer="aseprite.wizard.plugin" +type="SpriteFrames" +path="res://.import/neu-blobby-jumpgain_altitude.aseprite-d3e743388ba919f7b0dd56646d0f0fe2.res" + +[deps] + +source_file="res://assets/blobby/jump/neu-blobby-jumpgain_altitude.aseprite" +dest_files=[ "res://.import/neu-blobby-jumpgain_altitude.aseprite-d3e743388ba919f7b0dd56646d0f0fe2.res" ] + +[params] + +split_layers=false +exclude_layers_pattern="" +only_visible_layers=false +sheet_type="Packed" +sprite_filename_pattern="{basename}.{layer}.{extension}" +texture_strip/import_texture_strip=false +texture_strip/filename_pattern="{basename}.{layer}.Strip.{extension}" +texture_atlas/import_texture_atlas=false +texture_atlas/filename_pattern="{basename}.{layer}.Atlas.{extension}" +texture_atlas/frame_filename_pattern="{basename}.{layer}.{animation}.{frame}.Atlas.{extension}" +animated_texture/import_animated_texture=false +animated_texture/filename_pattern="{basename}.{layer}.{animation}.Texture.{extension}" +animated_texture/frame_filename_pattern="{basename}.{layer}.{animation}.{frame}.Texture.{extension}" diff --git a/assets/blobby/walk/neu-blobby-proto-walk-anm-test.aseprite b/assets/blobby/walk/neu-blobby-proto-walk-anm-test.aseprite new file mode 100644 index 0000000000000000000000000000000000000000..fcbb7a75f70c565833ce14dcdc84e53b4f126f5d GIT binary patch literal 1726 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 R&AQPK>it5={Qnbm{vSY%pEdvh delta 49 zcmV-10M7rVnFHk|2jvm~0N|w!kq3DVbOHbX`tbz-WB>pF1+k4M0khy#Z2_|n0z3h; Hn*@jslI9O> diff --git a/project.godot b/project.godot index 8aa2b57..26ba2c8 100644 --- a/project.godot +++ b/project.godot @@ -52,11 +52,10 @@ settings/fps/force_fps=144 [display] -window/size/width=1920 -window/size/height=1080 +window/size/width=640 +window/size/height=360 window/stretch/mode="2d" window/stretch/aspect="keep" -window/stretch/shrink=3.59 [editor_plugins] diff --git a/src/Actors/Blobby/Adventurer Sprite Sheet v1.1.png b/src/Actors/Blobby/Adventurer Sprite Sheet v1.1.png deleted file mode 100644 index daa432819d01591f8c197d048e94ef7794244589..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1870 zcmaJ?c{JPk7XSXlKGKAwXd)6+(NgPE+K|{vYd5Gt+T+|Rk^bMC$8ra3uS!zD42008(o8%q~K zr2b>#q5}UZC(1|=pfDF}b5PN*Fb{y3_&G~6*XV*}inBl3T7G}fz<8PBV)p>~t1>TToGD z&d(9|a^yFVI&mN6-z{524mP~{I=(dCzaN*)BLqk3M@=?uyzV1a?mE&tbfj$F(8Q{s zF`Ntdw+)o4Btp1}X2^dBR-CaM5f&zDtolTrAtj5Sp6w<5E4-K$qB5cY0}A{yjVDX9 zpGmEO$c_Om;0qhBJCgLm>?kQ4(S3@u#&>auVI`1&JPX6Mym+XUnvCbGo|!7f5H9g2 z`rW@pR(q~Ec4BLWmGhdAHIMDvY_aIW3^ue>5AGhxxAF@Z{N(p+1dS9G@Pn2hqoaE0B|GR7;mR?cdDX90>3xo{c~ zBC1gqX|nAO6zhcmwW9q7kR!A`FaCO}z^AS8cKcu~#exCU0_O0I1))z*g$HUrL9LIr zs4#p14F(t?@pZCu?^!+#s8h!v@_dZfo%eSX#itII7bAya)q?EIvGeYIk*gHID1+>< zQoyLud(ngbCAm=k4==a~i4!QQ&PEwFuphl6GiUw5LanihncH-yr3grqJQkqJ$K;V#_xO{v9l1iw7r1^(k&@2mE@|}&U z>;5GK*1S4{#{L8tTh6bh|oErU)$T6aviRgYSaw^uWk#foNN$!Zrpw^?20wa zqajqgXlky-;IVtD)61K818z?V+K=KRerlVL$jZ&Aa{X|YZE`(beVdZNV0FR+f6v#_ zZiyAv=QOwBpRyfgA^sD!91Cg;?3>Ay}`cL{(%$QgWga`o=b+G*erKh$Dl=5PP zo%+fyUGDVLl3t=ML@HVS{2V4eGp7h`8AWfg6T^wAolm|3b6#C`Nz}(y72vJiTccZHZwzCYUOT z)4P1tBjQcTai&T(^e$;KjyXV%_+PGbW%VBy{QL+jJi8yQ<+`i}+DMUhta_967` zCM8twK%6N6SK>`KdBQaQdOXl=BI3yz={wKTl#A70KsddVssDe*(d@&{nG)zSXK5bH za{WSk17U#=ec&rkQ%_O9v|Q}@-fsf$>(Z1t4Dg< zOM|4oT`^+1Q+zfd&S1$vJi<{Zd bEXzs6)i{bht10~FV}f&54we<>)TI9c>Dx(! diff --git a/src/Actors/Blobby/Adventurer Sprite Sheet v1.1.png.import b/src/Actors/Blobby/Adventurer Sprite Sheet v1.1.png.import deleted file mode 100644 index 0d24850..0000000 --- a/src/Actors/Blobby/Adventurer Sprite Sheet v1.1.png.import +++ /dev/null @@ -1,35 +0,0 @@ -[remap] - -importer="texture" -type="StreamTexture" -path="res://.import/Adventurer Sprite Sheet v1.1.png-0502b0b1561dd006fe088f5e624f97d0.stex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://src/Actors/Blobby/Adventurer Sprite Sheet v1.1.png" -dest_files=[ "res://.import/Adventurer Sprite Sheet v1.1.png-0502b0b1561dd006fe088f5e624f97d0.stex" ] - -[params] - -compress/mode=0 -compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 -compress/normal_map=0 -flags/repeat=0 -flags/filter=true -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 -process/fix_alpha_border=true -process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false -process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true -svg/scale=1.0 diff --git a/src/Actors/Blobby/Blobby.gd b/src/Actors/Blobby/Blobby.gd index d908e6b..1d10875 100644 --- a/src/Actors/Blobby/Blobby.gd +++ b/src/Actors/Blobby/Blobby.gd @@ -7,8 +7,6 @@ onready var right_wall_raycasts = $WallRaycasts/RightWallRaycast onready var player_state_machine = $BlobbyStateMachine onready var init_boost = player_state_machine.init_boost onready var init_boost_type = player_state_machine.init_boost_type -onready var camera_tween = $Camera2D/ShiftTween -onready var camera = $Camera2D # TODO Too much speed through midair boosting # TODO Walljump of of enemies/object not only walls diff --git a/src/Actors/Blobby/Blobby.tscn b/src/Actors/Blobby/Blobby.tscn index 845769f..e665df7 100644 --- a/src/Actors/Blobby/Blobby.tscn +++ b/src/Actors/Blobby/Blobby.tscn @@ -1,50 +1,68 @@ -[gd_scene load_steps=6 format=2] +[gd_scene load_steps=9 format=2] -[ext_resource path="res://assets/blobby/blobby1.png" type="Texture" id=1] -[ext_resource path="res://src/Actors/Blobby/Camera2D.gd" type="Script" id=2] +[ext_resource path="res://src/Actors/Blobby/BlobbyCam.gd" type="Script" id=2] [ext_resource path="res://src/Actors/Blobby/BlobbyStateMachine.gd" type="Script" id=3] [ext_resource path="res://src/Actors/Blobby/Blobby.gd" type="Script" id=4] [ext_resource path="res://assets/meta/new_dynamicfont.tres" type="DynamicFont" id=5] +[sub_resource type="StreamTexture" id=3] +load_path = "res://.import/Layer 1.png-0b67f940a501a482178a05e168cce974.stex" + +[sub_resource type="Animation" id=4] +resource_name = "idle" + +[sub_resource type="RectangleShape2D" id=1] +extents = Vector2( 13, 9 ) + +[sub_resource type="RectangleShape2D" id=2] +extents = Vector2( 13, 9 ) + [node name="Blobby" type="KinematicBody2D" groups=["player"]] collision_mask = 120 script = ExtResource( 4 ) -[node name="Player" type="Sprite" parent="."] -position = Vector2( -0.00490093, 0.00763269 ) -scale = Vector2( 0.668819, 1.21494 ) -texture = ExtResource( 1 ) +[node name="BlobbySprite" type="Sprite" parent="."] +position = Vector2( 0, -10 ) +texture = SubResource( 3 ) +hframes = 2 +__meta__ = { +"_editor_description_": "YXNlcHJpdGVfd2l6YXJkX2NvbmZpZwpwbGF5ZXJ8PUJsb2JieVNwcml0ZS9CbG9iYnltYXRpb25QbGF5ZXIKc291cmNlfD1yZXM6Ly9hc3NldHMvYmxvYmJ5L2p1bXAvbmV1LWJsb2JieS1qdW1wZ2Fpbl9hbHRpdHVkZS5hc2Vwcml0ZQpsYXllcnw9TGF5ZXIgMQpvcF9leHB8PUZhbHNlCm9fZm9sZGVyfD0Kb19uYW1lfD0Kb25seV92aXNpYmxlfD1GYWxzZQpvX2V4X3B8PQo=" +} -[node name="AnimationPlayer" type="AnimationPlayer" parent="Player"] +[node name="BlobbymationPlayer" type="AnimationPlayer" parent="BlobbySprite"] +pause_mode = 1 +anims/idle = SubResource( 4 ) -[node name="BlobbyBody" type="CollisionPolygon2D" parent="." groups=["player"]] -polygon = PoolVector2Array( -6.7, -3.273, -2.676, -7.3, 3.939, -7.3, 8, -1.768, 8, 4.912, 4.944, 8.5, -1.03623, 8.5, -4.213, 8.5, -6.7, 6.089 ) +[node name="BlobbyBody" type="CollisionShape2D" parent="." groups=["player"]] +position = Vector2( 0, -9 ) +shape = SubResource( 1 ) -[node name="Camera2D" type="Camera2D" parent="."] -position = Vector2( 80, 0 ) +[node name="BlobbyCam" type="Camera2D" parent="."] +position = Vector2( 70, 0 ) current = true +zoom = Vector2( 0.666, 0.666 ) limit_left = 0 limit_top = 0 limit_right = 0 limit_bottom = 0 -limit_smoothed = true drag_margin_h_enabled = true drag_margin_v_enabled = true -drag_margin_left = 0.08 -drag_margin_top = 0.08 -drag_margin_right = 0.08 -drag_margin_bottom = 0.08 +drag_margin_left = 0.05 +drag_margin_top = 0.05 +drag_margin_right = 0.05 +drag_margin_bottom = 0.05 editor_draw_screen = false script = ExtResource( 2 ) -[node name="ShiftTween" type="Tween" parent="Camera2D"] +[node name="ShiftTween" type="Tween" parent="BlobbyCam"] [node name="BlobbySkin" type="Area2D" parent="." groups=["player"]] collision_mask = 126 -[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="BlobbySkin"] -scale = Vector2( 1.04, 1.04 ) -polygon = PoolVector2Array( -6.7, -3.311, -2.676, -7.3, 3.939, -7.3, 8, -1.863, 8, 4.912, 4.944, 8.5, -1.03623, 8.5, -4.213, 8.5, -6.7, 6.089 ) +[node name="CollisionPolygon2D" type="CollisionShape2D" parent="BlobbySkin"] +position = Vector2( 0, -9 ) +scale = Vector2( 1.03, 1.03 ) +shape = SubResource( 2 ) [node name="BlobbyStateMachine" type="Node" parent="."] script = ExtResource( 3 ) @@ -58,10 +76,10 @@ wait_time = 0.067 one_shot = true [node name="StateLabel" type="Label" parent="."] -margin_left = -25.3386 -margin_top = -34.2836 -margin_right = 25.6614 -margin_bottom = -20.2836 +margin_left = -37.0 +margin_top = -44.0 +margin_right = 36.0 +margin_bottom = -30.0 custom_colors/font_color = Color( 0, 0, 0, 1 ) custom_fonts/font = ExtResource( 5 ) text = "Ihre Werbung" @@ -69,35 +87,41 @@ align = 1 valign = 1 [node name="WallRaycasts" type="Node2D" parent="."] +position = Vector2( 0, -1 ) [node name="LeftWallRaycast" type="Node2D" parent="WallRaycasts"] -position = Vector2( 3.86988, 6.34765 ) +position = Vector2( 0, -8 ) [node name="Left_Wallcast1" type="RayCast2D" parent="WallRaycasts/LeftWallRaycast"] -position = Vector2( -10.5748, -8.60978 ) +position = Vector2( -13, -4 ) enabled = true -cast_to = Vector2( -2, 0 ) -collision_mask = 9 +exclude_parent = false +cast_to = Vector2( -1, 0 ) +collision_mask = 8 [node name="Left_Wallcast2" type="RayCast2D" parent="WallRaycasts/LeftWallRaycast"] -position = Vector2( -10.5888, -1.27766 ) +position = Vector2( -13, 6 ) enabled = true -cast_to = Vector2( -2, 0 ) -collision_mask = 9 +exclude_parent = false +cast_to = Vector2( -1, 0 ) +collision_mask = 8 [node name="RightWallRaycast" type="Node2D" parent="WallRaycasts"] +position = Vector2( 0, -8 ) [node name="Right_Wallcast1" type="RayCast2D" parent="WallRaycasts/RightWallRaycast"] -position = Vector2( 8.00081, -0.776408 ) +position = Vector2( 13, -5 ) enabled = true -cast_to = Vector2( 2, 0 ) -collision_mask = 9 +exclude_parent = false +cast_to = Vector2( 1, 0 ) +collision_mask = 8 [node name="Right_Wallcast2" type="RayCast2D" parent="WallRaycasts/RightWallRaycast"] -position = Vector2( 8.01643, 3.91567 ) +position = Vector2( 13, 5 ) enabled = true -cast_to = Vector2( 2, 0 ) -collision_mask = 9 +exclude_parent = false +cast_to = Vector2( 1, 0 ) +collision_mask = 8 [connection signal="area_entered" from="BlobbySkin" to="." method="_on_BlobbySkin_area_entered"] [connection signal="body_entered" from="BlobbySkin" to="." method="_on_BlobbySkin_body_entered"] diff --git a/src/Actors/Blobby/Camera2D.gd b/src/Actors/Blobby/BlobbyCam.gd similarity index 60% rename from src/Actors/Blobby/Camera2D.gd rename to src/Actors/Blobby/BlobbyCam.gd index ca1347c..e6b113e 100644 --- a/src/Actors/Blobby/Camera2D.gd +++ b/src/Actors/Blobby/BlobbyCam.gd @@ -1,7 +1,9 @@ extends Camera2D var horizontal_facing = 0 -var camera_x_shift = 80 +var vertical_facing = 0 +var camera_horizontal_shift = 70 +var camera_vertical_shift = 90 onready var prev_camera_pos = get_camera_position() onready var tween = $ShiftTween @@ -9,6 +11,13 @@ onready var tween = $ShiftTween # Gets the camera limits from the tilemap of the level # Requires "TileMap" to be a sibling of blobby func _ready(): + _set_boundaries() + +func _process(_delta: float) -> void: + _adapt_to_movement() + prev_camera_pos = get_camera_position() + +func _set_boundaries(): # TODO Pass Reference to child and do not traverse the tree upwards # This is ok, because it only happens on initialization # But it is also quite fickle @@ -21,25 +30,33 @@ func _ready(): limit_top = rect.position.y * cell_size.y limit_bottom = rect.end.y * cell_size.y -func _process(_delta: float) -> void: - _check_facing() - prev_camera_pos = get_camera_position() - - # TODO Smoothing the camera limits in godot ruins this -func _check_facing(): +func _adapt_to_movement(): + var target_offset: Vector2 = Vector2(0,0) + var tween_v = false + var tween_h = false var new_h_facing = sign(get_camera_position().x - prev_camera_pos.x) if new_h_facing != 0 && horizontal_facing != new_h_facing: horizontal_facing = new_h_facing - var target_offset = camera_x_shift * new_h_facing + target_offset.x = camera_horizontal_shift * horizontal_facing + tween_h = true + + # var new_v_facing = sign(get_camera_position().y - prev_camera_pos.y) + # if new_v_facing != 0 && vertical_facing != new_v_facing: + # vertical_facing = new_v_facing + # target_offset.y = camera_vertical_shift * vertical_facing + # print(target_offset) + # tween_v = true + if (tween_h || tween_v): + #TODO Motion may be too complex tween.interpolate_property( self, - "transform:origin:x", - self.transform.origin.x, + "transform:origin", + self.transform.origin, target_offset, 1.2, Tween.TRANS_SINE, Tween.EASE_OUT ) - tween.start() + tween.start() \ No newline at end of file diff --git a/src/Actors/Blobby/BlobbyStateMachine.gd b/src/Actors/Blobby/BlobbyStateMachine.gd index 8bf8419..d2a2291 100644 --- a/src/Actors/Blobby/BlobbyStateMachine.gd +++ b/src/Actors/Blobby/BlobbyStateMachine.gd @@ -152,6 +152,7 @@ func _get_transition(_delta): func _enter_state(new_state, old_state): if old_state == "idle" && (new_state == "walk" || new_state == "run"): + init_boost = true init_boost_type = old_state + "_" + new_state diff --git a/src/Actors/Blobby/Layer 1.png b/src/Actors/Blobby/Layer 1.png new file mode 100644 index 0000000000000000000000000000000000000000..c3aa12a6cffdef506addda5ad71a1b28172b0900 GIT binary patch literal 615 zcmV-t0+{`YP)Px%AxT6*RA_qUW-3r*vsvvHkpaCgGY@$1#(1;i&h=mi}BEKX~Nu+sETEAT{ohjrV z6GROzbmtQQfXL4YQ`7avB6Sr^0gbq|a4TZM>LBvLp(*59}OYN=>pBRe&#T7MOZ=i14J~5k-DPF&S%jIjX zHFzo1O$&KZLSB@lUak&Pz18}8QNs1oiSA0fuxO8Z9v}AF(3wUkD`E(M;?Yh=y4F#M_=2{(I24DiJ5L2WX7xLr);^~9H!oTNpGQrQ` z0001=)ns6T3*H6*{1t)%xWs`42LU_mW4rZ=l^_~$y>x?uFsV-q0`NwS0oRGHSP4!8 zy7Ot!g1QO%e?5kPG0^jxgE5qs>;TS$P?88ILK40@Tt)%d24wryvOjyfOc;ZhFGi*Y z{fVPLjkq;B*rRYPj3}Nx2QY7Y$}~ahKI$)!?N`f~XYspsUf)5Xo3h=kQs#WZH^b<{ z9t^7s13t72)^Z*ApA7)8-yKGM!3tcLkdW|1_ywLv5siyg!r}k`002ovPDHLkV1nX= B4=n%y literal 0 HcmV?d00001 diff --git a/assets/blobby/blobby2.png.import b/src/Actors/Blobby/Layer 1.png.import similarity index 65% rename from assets/blobby/blobby2.png.import rename to src/Actors/Blobby/Layer 1.png.import index 08e5a6d..6313778 100644 --- a/assets/blobby/blobby2.png.import +++ b/src/Actors/Blobby/Layer 1.png.import @@ -2,15 +2,15 @@ importer="texture" type="StreamTexture" -path="res://.import/blobby2.png-d294ac62d2147eb34557adf70d20152f.stex" +path="res://.import/Layer 1.png-0b67f940a501a482178a05e168cce974.stex" metadata={ "vram_texture": false } [deps] -source_file="res://assets/blobby/blobby2.png" -dest_files=[ "res://.import/blobby2.png-d294ac62d2147eb34557adf70d20152f.stex" ] +source_file="res://src/Actors/Blobby/Layer 1.png" +dest_files=[ "res://.import/Layer 1.png-0b67f940a501a482178a05e168cce974.stex" ] [params] @@ -24,12 +24,12 @@ flags/filter=false flags/mipmaps=false flags/anisotropic=false flags/srgb=2 -process/fix_alpha_border=true +process/fix_alpha_border=false process/premult_alpha=false process/HDR_as_SRGB=false process/invert_color=false process/normal_map_invert_y=false stream=false size_limit=0 -detect_3d=true +detect_3d=false svg/scale=1.0 diff --git a/src/Actors/Blobby/Sprite Sheet.png b/src/Actors/Blobby/Sprite Sheet.png deleted file mode 100644 index daa432819d01591f8c197d048e94ef7794244589..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1870 zcmaJ?c{JPk7XSXlKGKAwXd)6+(NgPE+K|{vYd5Gt+T+|Rk^bMC$8ra3uS!zD42008(o8%q~K zr2b>#q5}UZC(1|=pfDF}b5PN*Fb{y3_&G~6*XV*}inBl3T7G}fz<8PBV)p>~t1>TToGD z&d(9|a^yFVI&mN6-z{524mP~{I=(dCzaN*)BLqk3M@=?uyzV1a?mE&tbfj$F(8Q{s zF`Ntdw+)o4Btp1}X2^dBR-CaM5f&zDtolTrAtj5Sp6w<5E4-K$qB5cY0}A{yjVDX9 zpGmEO$c_Om;0qhBJCgLm>?kQ4(S3@u#&>auVI`1&JPX6Mym+XUnvCbGo|!7f5H9g2 z`rW@pR(q~Ec4BLWmGhdAHIMDvY_aIW3^ue>5AGhxxAF@Z{N(p+1dS9G@Pn2hqoaE0B|GR7;mR?cdDX90>3xo{c~ zBC1gqX|nAO6zhcmwW9q7kR!A`FaCO}z^AS8cKcu~#exCU0_O0I1))z*g$HUrL9LIr zs4#p14F(t?@pZCu?^!+#s8h!v@_dZfo%eSX#itII7bAya)q?EIvGeYIk*gHID1+>< zQoyLud(ngbCAm=k4==a~i4!QQ&PEwFuphl6GiUw5LanihncH-yr3grqJQkqJ$K;V#_xO{v9l1iw7r1^(k&@2mE@|}&U z>;5GK*1S4{#{L8tTh6bh|oErU)$T6aviRgYSaw^uWk#foNN$!Zrpw^?20wa zqajqgXlky-;IVtD)61K818z?V+K=KRerlVL$jZ&Aa{X|YZE`(beVdZNV0FR+f6v#_ zZiyAv=QOwBpRyfgA^sD!91Cg;?3>Ay}`cL{(%$QgWga`o=b+G*erKh$Dl=5PP zo%+fyUGDVLl3t=ML@HVS{2V4eGp7h`8AWfg6T^wAolm|3b6#C`Nz}(y72vJiTccZHZwzCYUOT z)4P1tBjQcTai&T(^e$;KjyXV%_+PGbW%VBy{QL+jJi8yQ<+`i}+DMUhta_967` zCM8twK%6N6SK>`KdBQaQdOXl=BI3yz={wKTl#A70KsddVssDe*(d@&{nG)zSXK5bH za{WSk17U#=ec&rkQ%_O9v|Q}@-fsf$>(Z1t4Dg< zOM|4oT`^+1Q+zfd&S1$vJi<{Zd bEXzs6)i{bht10~FV}f&54we<>)TI9c>Dx(! diff --git a/src/Actors/Player.gd b/src/Actors/Player.gd index ebc52c2..6add45a 100644 --- a/src/Actors/Player.gd +++ b/src/Actors/Player.gd @@ -10,9 +10,9 @@ var wallslide_threshold := 300 # TODO Map to floor types and move to physics constants var normal_floor_friction := 0.5 var max_velocity := { - "walk": 120, "run": 160, "fall": 400, "walljump": 150, "idle": 120 + "walk": 120, "run": 160, "fall": 420, "walljump": 200, "idle": 12000 } -var velocity_jump_boost_ratio := 12 +var velocity_jump_boost_ratio := 10 # This is added to the acceleration force initially var init_acceleration_force := { "idle_walk": 4181, "idle_run": 5765, "walk_run": 1000 @@ -20,11 +20,11 @@ var init_acceleration_force := { # Oriented around deltas of 0.0166666...s # newtonmeters is the unit var acceleration_force := { - "walk": Vector2(2000, 68000), - "idle": Vector2(2000, 68000), - "run": Vector2(2000, 68000), + "walk": Vector2(2000, 56000), + "idle": Vector2(2000, 56000), + "run": Vector2(2800, 59000), "walljump": Vector2(36000, 58000), - "air_strafe": Vector2(20000, 0) + "air_strafe": Vector2(20000, 100) } # Gravity as m/s^2 var _gravity: float = PhysicsConst.gravity diff --git a/src/Levels/24TileSizeLevel.tscn b/src/Levels/24TileSizeLevel.tscn new file mode 100644 index 0000000..325d7cd --- /dev/null +++ b/src/Levels/24TileSizeLevel.tscn @@ -0,0 +1,63 @@ +[gd_scene load_steps=5 format=2] + +[ext_resource path="res://src/Actors/Blobby/Blobby.tscn" type="PackedScene" id=1] +[ext_resource path="res://assets/environment/blocks/24BlockBasic.png" type="Texture" id=2] + +[sub_resource type="ConvexPolygonShape2D" id=3] +points = PoolVector2Array( 23.7224, 24, 0, 24, 0, 0, 24, 0 ) + +[sub_resource type="TileSet" id=2] +0/name = "24BlockBasic.png 0" +0/texture = ExtResource( 2 ) +0/tex_offset = Vector2( 0, 0 ) +0/modulate = Color( 1, 1, 1, 1 ) +0/region = Rect2( 22, 23, 0, 0 ) +0/tile_mode = 0 +0/occluder_offset = Vector2( 0, 0 ) +0/navigation_offset = Vector2( 0, 0 ) +0/shape_offset = Vector2( 0, 0 ) +0/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 ) +0/shape_one_way = false +0/shape_one_way_margin = 0.0 +0/shapes = [ ] +0/z_index = 0 +1/name = "24BlockBasic.png 1" +1/texture = ExtResource( 2 ) +1/tex_offset = Vector2( 0, 0 ) +1/modulate = Color( 1, 1, 1, 1 ) +1/region = Rect2( 0, 0, 24, 24 ) +1/tile_mode = 0 +1/occluder_offset = Vector2( 0, 0 ) +1/navigation_offset = Vector2( 0, 0 ) +1/shape_offset = Vector2( 0, 0 ) +1/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 ) +1/shape = SubResource( 3 ) +1/shape_one_way = false +1/shape_one_way_margin = 1.0 +1/shapes = [ { +"autotile_coord": Vector2( 0, 0 ), +"one_way": false, +"one_way_margin": 1.0, +"shape": SubResource( 3 ), +"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 ) +} ] +1/z_index = 0 + +[node name="LevelTemplate" type="Node2D"] +__meta__ = { +"_edit_horizontal_guides_": [ 464.0 ], +"_edit_vertical_guides_": [ 2880.0 ] +} + +[node name="Blobby" parent="." instance=ExtResource( 1 )] +position = Vector2( -259.915, 710.547 ) + +[node name="TileMap" type="TileMap" parent="."] +tile_set = SubResource( 2 ) +cell_size = Vector2( 24, 24 ) +cell_quadrant_size = 12 +cell_custom_transform = Transform2D( 24, 0, 0, 24, 0, 0 ) +collision_layer = 8 +collision_mask = 0 +format = 1 +tile_data = PoolIntArray( 1179797, 1, 0, 1179798, 1, 0, 1179799, 1, 0, 1179800, 1, 0, 1179801, 1, 0, 1245311, 1, 0, 1245316, 1, 0, 1245317, 1, 0, 1245318, 1, 0, 1245319, 1, 0, 1245320, 1, 0, 1245321, 1, 0, 1245322, 1, 0, 1245323, 1, 0, 1245324, 1, 0, 1245325, 1, 0, 1245326, 1, 0, 1245327, 1, 0, 1245328, 1, 0, 1245329, 1, 0, 1245330, 1, 0, 1245331, 1, 0, 1245332, 1, 0, 1245333, 1, 0, 1245337, 1, 0, 1376242, 536870913, 0, 1310847, 1, 0, 1310864, 1, 0, 1310873, 1, 0, 1441778, 536870913, 0, 1376383, 1, 0, 1376384, 1, 0, 1376409, 1, 0, 1507314, 536870913, 0, 1441919, 1, 0, 1441945, 1, 0, 1572850, 536870913, 0, 1507455, 1, 0, 1507480, 1, 0, 1507481, 1, 0, 1638386, 536870913, 0, 1572991, 1, 0, 1572992, 1, 0, 1572993, 1, 0, 1572994, 1, 0, 1572995, 1, 0, 1572996, 1, 0, 1572997, 1, 0, 1572998, 1, 0, 1572999, 1, 0, 1573000, 1, 0, 1573001, 1, 0, 1573002, 1, 0, 1573017, 1, 0, 1703922, 536870913, 0, 1638527, 1, 0, 1638553, 1, 0, 1769458, 536870913, 0, 1704063, 1, 0, 1704077, 1, 0, 1704078, 1, 0, 1704079, 1, 0, 1704080, 1, 0, 1704081, 1, 0, 1704089, 1, 0, 1834994, 536870913, 0, 1769599, 1, 0, 1769625, 1, 0, 1900530, 536870913, 0, 1835037, 1, 0, 1835135, 1, 0, 1835157, 1, 0, 1835158, 1, 0, 1835159, 1, 0, 1835160, 1, 0, 1835161, 1, 0, 1966066, 536870913, 0, 1966069, 536870912, 0, 1966070, 536870912, 0, 1900544, 0, 0, 1900562, 1, 0, 1900573, 1, 0, 1900697, 1, 0, 2031602, 536870913, 0, 1966080, 0, 0, 1966089, 1, 0, 1966098, 1, 0, 1966109, 1, 0, 1966119, 1, 0, 1966121, 1, 0, 1966122, 1, 0, 1966125, 1, 0, 1966126, 1, 0, 1966127, 1, 0, 1966131, 1, 0, 1966132, 1, 0, 1966133, 1, 0, 1966134, 1, 0, 1966139, 1, 0, 1966140, 1, 0, 1966141, 1, 0, 1966142, 1, 0, 1966143, 1, 0, 1966149, 1, 0, 1966150, 1, 0, 1966151, 1, 0, 1966152, 1, 0, 1966153, 1, 0, 1966154, 1, 0, 1966161, 1, 0, 1966162, 1, 0, 1966163, 1, 0, 1966164, 1, 0, 1966165, 1, 0, 1966166, 1, 0, 1966167, 1, 0, 1966175, 1, 0, 1966176, 1, 0, 1966177, 1, 0, 1966178, 1, 0, 1966179, 1, 0, 1966180, 1, 0, 1966181, 1, 0, 1966182, 1, 0, 1966191, 1, 0, 1966192, 1, 0, 1966193, 1, 0, 1966194, 1, 0, 1966195, 1, 0, 1966196, 1, 0, 1966197, 1, 0, 1966198, 1, 0, 1966233, 1, 0, 2097138, 536870913, 0, 2097139, 536870913, 0, 2097140, 536870913, 0, 2097141, 536870913, 0, 2097142, 1, 0, 2097143, 1, 0, 2097144, 1, 0, 2097145, 1, 0, 2097146, 1, 0, 2097147, 1, 0, 2097148, 1, 0, 2097149, 1, 0, 2097150, 1, 0, 2097151, 1, 0, 2031616, 1, 0, 2031617, 1, 0, 2031618, 1, 0, 2031619, 1, 0, 2031620, 1, 0, 2031621, 1, 0, 2031622, 1, 0, 2031623, 1, 0, 2031624, 1, 0, 2031625, 1, 0, 2031626, 1, 0, 2031627, 1, 0, 2031628, 1, 0, 2031629, 1, 0, 2031630, 1, 0, 2031631, 1, 0, 2031632, 1, 0, 2031633, 1, 0, 2031634, 1, 0, 2031635, 1, 0, 2031636, 1, 0, 2031637, 1, 0, 2031638, 1, 0, 2031639, 1, 0, 2031640, 1, 0, 2031641, 1, 0, 2031642, 1, 0, 2031643, 1, 0, 2031644, 1, 0, 2031645, 1, 0, 2031646, 1, 0, 2031647, 1, 0, 2031648, 1, 0, 2031649, 1, 0, 2031650, 1, 0, 2031651, 1, 0, 2031652, 1, 0, 2031653, 1, 0, 2031654, 1, 0, 2031655, 1, 0, 2031656, 1, 0, 2031657, 1, 0, 2031658, 1, 0, 2031659, 1, 0, 2031660, 1, 0, 2031661, 1, 0, 2031662, 1, 0, 2031663, 1, 0, 2031664, 1, 0, 2031665, 1, 0, 2031666, 1, 0, 2031667, 1, 0, 2031668, 1, 0, 2031669, 1, 0, 2031670, 1, 0, 2031671, 1, 0, 2031672, 1, 0, 2031673, 1, 0, 2031674, 1, 0, 2031675, 1, 0, 2031676, 1, 0, 2031677, 1, 0, 2031678, 1, 0, 2031679, 1, 0, 2031680, 1, 0, 2031681, 1, 0, 2031682, 1, 0, 2031683, 1, 0, 2031684, 1, 0, 2031685, 1, 0, 2031686, 1, 0, 2031687, 1, 0, 2031688, 1, 0, 2031689, 1, 0, 2031690, 1, 0, 2031691, 1, 0, 2031692, 1, 0, 2031693, 1, 0, 2031694, 1, 0, 2031695, 1, 0, 2031696, 1, 0, 2031697, 1, 0, 2031698, 1, 0, 2031699, 1, 0, 2031700, 1, 0, 2031701, 1, 0, 2031702, 1, 0, 2031703, 1, 0, 2031704, 1, 0, 2031705, 1, 0, 2031706, 1, 0, 2031707, 1, 0, 2031708, 1, 0, 2031709, 1, 0, 2031710, 1, 0, 2031711, 1, 0, 2031712, 1, 0, 2031713, 1, 0, 2031714, 1, 0, 2031715, 1, 0, 2031716, 1, 0, 2031717, 1, 0, 2031718, 1, 0, 2031719, 1, 0, 2031720, 1, 0, 2031721, 1, 0, 2031722, 1, 0, 2031723, 1, 0, 2031724, 1, 0, 2031725, 1, 0, 2031726, 1, 0, 2031727, 1, 0, 2031728, 1, 0, 2031729, 1, 0, 2031730, 1, 0, 2031731, 1, 0, 2031732, 1, 0, 2031733, 1, 0, 2031734, 1, 0, 2031735, 1, 0, 2031736, 1, 0, 2031737, 1, 0, 2031738, 1, 0, 2031739, 1, 0, 2031740, 1, 0, 2031741, 1, 0, 2031742, 1, 0, 2031743, 1, 0, 2031744, 1, 0, 2031745, 1, 0, 2031746, 1, 0, 2031747, 1, 0, 2031748, 1, 0, 2031749, 1, 0, 2031750, 1, 0, 2031751, 1, 0, 2031752, 1, 0, 2031753, 1, 0, 2031754, 1, 0, 2031755, 1, 0, 2031756, 1, 0, 2031757, 1, 0, 2031758, 1, 0, 2031759, 1, 0, 2031760, 1, 0, 2031761, 1, 0, 2031762, 1, 0, 2031763, 1, 0, 2031764, 1, 0, 2031765, 1, 0, 2031766, 1, 0, 2031767, 1, 0, 2031768, 1, 0, 2031769, 1, 0 ) diff --git a/src/Levels/Layer 1.png b/src/Levels/Layer 1.png new file mode 100644 index 0000000000000000000000000000000000000000..58e1d2e0c728980cc7c718d927633eeaee8d8fd4 GIT binary patch literal 1156 zcmV-~1bh35P)Px(K1oDDRCt{2n>}t@F$~94i7hpFgxViW(%2 z$F%EJ)M2Ip;I01>4HEkjVS#eEl>mu-fbOgxjVI#D|NcA=qCvxMHInvAq5?PC5+`go zZBc;4KEOw(qus~pC4>;*?Ch=Cd9!@4^f&i<-B|m86GP6tbY=knISX;Q#6eZh94WI!!wwWewe9xpe_BRjKWKkK z2%7K3_OI_B#2V(!GR&K0m@OK%4EpY%{m=P;8jZbuUofk*WVb$Q&*e1C77YM&w}$Pe z-76o1GrRdzmd7a!($O zCmn~!zX5#g$5Pvg?rgnMxu^^Gzc>IyW!5+r%sETq0BjTg=A0VAdoO+~Qb4|P=lT_q z^q)dJ08t3nQ2LN6IZF%m08IIPdkX*ne_vkUE-7C*ARUJ2ziI#g^2@N}fTUbs2jFcm z+Tr+ibp^k6pYL8@S*O)t-G6of+Vu)1=NGWuw4Kq5%PZ%Ep&Srr;CIDCk$Xky z3c!P)bwaHJ+Vu)1u)lQiOF@ZR$8(b}wyEuZ4)H%?(Rf7qFlAm3MX#aQKIcqM2UT8R z-^4bjh5C*e<40Lsj2X9bCP10*Hl3Ku6GfN7fZ5k|O)qW=anY z>b|F1sQQ%s;%TT-18y&^TXhntv{|aJngEKjRQpu@PjO42zSlKT?rUFchl%fY?FG2{?Z@!j;ox$x!w=a`E{9Hc1-R zs0JX;+*41|!14J2_DLF+RHY~#GfU+Zk~Az~(^LWY_;^XiBnCU6a6DihpI?!ma8Ok5 z<0;%B9Ht^hzt void: get_tree().change_scene(next_scene_path) func _get_configuration_warning() -> String: return "next_scene_path must be set for the button to work" if next_scene_path == "" else "" + +func _level_selection_changed(button): + next_scene_path = selected_level_base_path + button.text + ".tscn" \ No newline at end of file diff --git a/src/UserInterface/Screens/LevelEndScreen.tscn b/src/UserInterface/Screens/LevelEndScreen.tscn index c764f2a..9d8cbb3 100644 --- a/src/UserInterface/Screens/LevelEndScreen.tscn +++ b/src/UserInterface/Screens/LevelEndScreen.tscn @@ -28,13 +28,12 @@ __meta__ = { [node name="EndScreenLabel" parent="." instance=ExtResource( 3 )] anchor_left = 0.5 anchor_right = 0.5 -margin_left = -169.0 -margin_top = 55.0 -margin_right = 171.0 -margin_bottom = 148.0 +margin_left = -170.0 +margin_right = 170.0 +margin_bottom = 93.0 rect_pivot_offset = Vector2( 170, 0 ) -size_flags_horizontal = 2 -size_flags_vertical = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 size_flags_stretch_ratio = 0.0 custom_fonts/font = ExtResource( 2 ) text = "Thank You For Playing!" @@ -42,27 +41,26 @@ autowrap = true [node name="StatsLabel" parent="." instance=ExtResource( 6 )] margin_left = -146.5 -margin_top = -64.5 +margin_top = -33.5 margin_right = 146.5 -margin_bottom = 2.5 +margin_bottom = 33.5 +size_flags_vertical = 1 align = 1 script = ExtResource( 8 ) [node name="MenuContainer" type="VBoxContainer" parent="."] anchor_left = 0.5 -anchor_top = 0.5 +anchor_top = 1.0 anchor_right = 0.5 -anchor_bottom = 0.5 -margin_left = -123.0 -margin_top = 72.5001 -margin_right = 123.0 -margin_bottom = 233.5 -__meta__ = { -"_edit_use_anchors_": false -} +anchor_bottom = 1.0 +margin_left = -100.0 +margin_top = -120.0 +margin_right = 100.0 +margin_bottom = -20.0 [node name="PlayButton" parent="MenuContainer" instance=ExtResource( 4 )] -margin_right = 246.0 +margin_right = 200.0 +margin_bottom = 48.0 text = "Begin Again" next_scene_path = "res://src/UserInterface/Screens/MainScreen.tscn" @@ -70,6 +68,6 @@ next_scene_path = "res://src/UserInterface/Screens/MainScreen.tscn" anchor_left = 0.0 anchor_right = 0.0 margin_left = 0.0 -margin_top = 82.0 -margin_right = 246.0 -margin_bottom = 160.0 +margin_top = 52.0 +margin_right = 200.0 +margin_bottom = 100.0 diff --git a/src/UserInterface/Screens/LevelList.gd b/src/UserInterface/Screens/LevelList.gd new file mode 100644 index 0000000..44f35f7 --- /dev/null +++ b/src/UserInterface/Screens/LevelList.gd @@ -0,0 +1,46 @@ +extends ScrollContainer + +onready var LEVELS_PATH = "res://src/Levels/" +onready var BUTTON_GROUP : ButtonGroup = load("res://src/UserInterface/Screens/LevelSelectButtonGroup.tres") +onready var vbox = $VBoxContainer + +# Declare member variables here. Examples: +# var a: int = 2 +# var b: String = "text" + + +# Called when the node enters the scene tree for the first time. +func _ready() -> void: + _fill_level_list() + pass # Replace with function body. + +func _fill_level_list(): + var levels = [] + var dir = Directory.new() + if dir.open(LEVELS_PATH) == OK: + dir.list_dir_begin() + while true: + var file_name = dir.get_next() + if file_name == "": + break + else: + if(file_name.ends_with(".tscn")): + levels.append(file_name) + if levels.size() != 0: + _spawn_level_options(levels) + +func _spawn_level_options(levels: Array): + BUTTON_GROUP.connect("pressed", get_node('../Buttons/PlayButton'), "_level_selection_changed") + for level in levels: + var check_box = CheckBox.new() + check_box.text = level.trim_suffix(".tscn") + check_box.set_button_group(BUTTON_GROUP); + vbox.add_child(check_box) + return + + + + +# Called every frame. 'delta' is the elapsed time since the previous frame. +#func _process(delta: float) -> void: +# pass diff --git a/src/UserInterface/Screens/LevelSelectButtonGroup.tres b/src/UserInterface/Screens/LevelSelectButtonGroup.tres new file mode 100644 index 0000000..64039ff --- /dev/null +++ b/src/UserInterface/Screens/LevelSelectButtonGroup.tres @@ -0,0 +1,4 @@ +[gd_resource type="ButtonGroup" format=2] + +[resource] +resource_name = "LevelSelectButtonGroup" diff --git a/src/UserInterface/Screens/MainScreen.tscn b/src/UserInterface/Screens/MainScreen.tscn index 760807e..eb03e0f 100644 --- a/src/UserInterface/Screens/MainScreen.tscn +++ b/src/UserInterface/Screens/MainScreen.tscn @@ -1,65 +1,77 @@ -[gd_scene load_steps=6 format=2] +[gd_scene load_steps=8 format=2] [ext_resource path="res://src/UserInterface/Buttons/QuitButton.tscn" type="PackedScene" id=1] [ext_resource path="res://src/UserInterface/Buttons/Titel.tscn" type="PackedScene" id=2] [ext_resource path="res://src/UserInterface/Buttons/ChangeSceneButton.tscn" type="PackedScene" id=3] [ext_resource path="res://assets/environment/background/background.png" type="Texture" id=4] [ext_resource path="res://assets/meta/ui_theme.tres" type="Theme" id=5] +[ext_resource path="res://src/UserInterface/Screens/LevelList.gd" type="Script" id=6] +[ext_resource path="res://src/UserInterface/Screens/LevelSelectButtonGroup.tres" type="ButtonGroup" id=7] [node name="MainScreen" type="Control"] anchor_right = 1.0 anchor_bottom = 1.0 -margin_right = -1493.33 -margin_bottom = -840.0 +size_flags_horizontal = 0 +size_flags_vertical = 0 theme = ExtResource( 5 ) -[node name="ViewportContainer" type="ViewportContainer" parent="."] -margin_right = 426.667 -margin_bottom = 240.0 -stretch = true - -[node name="background" type="TextureRect" parent="ViewportContainer"] +[node name="background" type="TextureRect" parent="."] anchor_right = 1.0 anchor_bottom = 1.0 texture = ExtResource( 4 ) expand = true -stretch_mode = 2 -__meta__ = { -"_edit_use_anchors_": false -} +stretch_mode = 1 -[node name="Titel" parent="ViewportContainer" instance=ExtResource( 2 )] +[node name="Titel" parent="." instance=ExtResource( 2 )] anchor_left = 0.5 anchor_right = 0.5 -margin_left = -83.3335 -margin_right = 91.6665 +margin_left = -162.5 +margin_right = 162.5 margin_bottom = 85.0 grow_horizontal = 2 size_flags_horizontal = 2 size_flags_vertical = 2 text = "Wumper" -[node name="MenuContainer" type="VBoxContainer" parent="ViewportContainer"] +[node name="MenuContainer" type="HBoxContainer" parent="."] anchor_left = 0.5 anchor_top = 0.5 anchor_right = 0.5 anchor_bottom = 0.5 -margin_left = -43.3335 -margin_right = 53.6665 -margin_bottom = 81.0 -__meta__ = { -"_edit_use_anchors_": false -} +margin_left = -144.0 +margin_top = -12.0 +margin_right = 156.0 +margin_bottom = 88.0 -[node name="PlayButton" parent="ViewportContainer/MenuContainer" instance=ExtResource( 3 )] -margin_right = 97.0 -margin_bottom = 38.0 -next_scene_path = "res://src/Levels/WalkNJumpTesterLevel.tscn" +[node name="Buttons" type="VBoxContainer" parent="MenuContainer"] +margin_right = 296.0 +margin_bottom = 100.0 +size_flags_horizontal = 3 -[node name="QuitButton" parent="ViewportContainer/MenuContainer" instance=ExtResource( 1 )] +[node name="PlayButton" parent="MenuContainer/Buttons" instance=ExtResource( 3 )] +margin_right = 296.0 +margin_bottom = 48.0 +next_scene_path = "res://src/Levels/24TileSizeLevel.tscn" + +[node name="QuitButton" parent="MenuContainer/Buttons" instance=ExtResource( 1 )] anchor_left = 0.0 anchor_right = 0.0 margin_left = 0.0 -margin_top = 42.0 -margin_right = 97.0 -margin_bottom = 81.0 +margin_top = 52.0 +margin_right = 296.0 +margin_bottom = 100.0 + +[node name="LevelList" type="ScrollContainer" parent="MenuContainer"] +margin_left = 300.0 +margin_right = 300.0 +margin_bottom = 100.0 +scroll_horizontal_enabled = false +script = ExtResource( 6 ) + +[node name="VBoxContainer" type="VBoxContainer" parent="MenuContainer/LevelList"] + +[node name="InvisibleCunt" type="CheckBox" parent="MenuContainer/LevelList/VBoxContainer"] +visible = false +margin_right = 24.0 +margin_bottom = 24.0 +group = ExtResource( 7 )