From 5d801827819004099c9fa34e67190c18195bfd56 Mon Sep 17 00:00:00 2001 From: andreasimonetto Date: Thu, 6 Feb 2025 23:39:13 +0100 Subject: [PATCH] Refactor --- Level.gd | 5 ++++ Level.tscn | 13 ++++++--- MyChar.gd | 19 ++++++++++++ Player.tscn => MyChar.tscn | 4 +-- Player.gd | 28 ------------------ PlayerController.gd | 43 +++++++++++++++++++++++++++ PlayerController.tscn | 55 +++++++++++++++++++++++++++++++++++ analog_stick.png | Bin 0 -> 1166 bytes analog_stick.png.import | 34 ++++++++++++++++++++++ analog_stick_back.png | Bin 0 -> 2020 bytes analog_stick_back.png.import | 34 ++++++++++++++++++++++ docs/index.html | 2 +- docs/index.js | 2 +- docs/index.pck | Bin 65360 -> 72208 bytes docs/index.wasm | Bin 35376909 -> 43016933 bytes export_presets.cfg | 4 +-- project.godot | 4 +++ 17 files changed, 209 insertions(+), 38 deletions(-) create mode 100644 Level.gd create mode 100644 MyChar.gd rename Player.tscn => MyChar.tscn (89%) delete mode 100644 Player.gd create mode 100644 PlayerController.gd create mode 100644 PlayerController.tscn create mode 100644 analog_stick.png create mode 100644 analog_stick.png.import create mode 100644 analog_stick_back.png create mode 100644 analog_stick_back.png.import diff --git a/Level.gd b/Level.gd new file mode 100644 index 0000000..82923f7 --- /dev/null +++ b/Level.gd @@ -0,0 +1,5 @@ +extends Node2D + +func _ready() -> void: + if OS.has_feature("web_android") or OS.has_feature("web_ios"): + DisplayServer.window_set_mode(DisplayServer.WINDOW_MODE_FULLSCREEN) diff --git a/Level.tscn b/Level.tscn index 6ba0ee4..bfa0e79 100644 --- a/Level.tscn +++ b/Level.tscn @@ -1,7 +1,9 @@ -[gd_scene load_steps=9 format=4 uid="uid://bo7p216kiko7t"] +[gd_scene load_steps=11 format=4 uid="uid://bo7p216kiko7t"] [ext_resource type="Texture2D" uid="uid://b5gv12upluoes" path="res://tileset-2.png" id="1_2sdxq"] -[ext_resource type="PackedScene" uid="uid://crht8e77338ew" path="res://Player.tscn" id="2_uldju"] +[ext_resource type="Script" path="res://Level.gd" id="1_jd7hj"] +[ext_resource type="PackedScene" uid="uid://crht8e77338ew" path="res://MyChar.tscn" id="2_uldju"] +[ext_resource type="PackedScene" uid="uid://cynystnt5cwlg" path="res://PlayerController.tscn" id="3_tk158"] [sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_oct0x"] texture = ExtResource("1_2sdxq") @@ -436,6 +438,7 @@ sources/0 = SubResource("TileSetAtlasSource_lpyyf") [node name="World" type="Node2D"] y_sort_enabled = true +script = ExtResource("1_jd7hj") [node name="water" type="TileMapLayer" parent="."] texture_filter = 1 @@ -453,10 +456,10 @@ texture_filter = 1 tile_map_data = PackedByteArray("AAADAAUAAAAFAAcAAAADAA0AAAADAAcAAAAEAAgAAAAGAAgAAAAMABUAAAAGAAgAAAAOAAYAAAADAAcAAAAPABQAAAADAAcAAAAQAAsAAAAFAAcAAAAQAA4AAAAGAAgAAAASAA4AAAADAAcAAAAVAAcAAAADAAcAAAAWAAkAAAAGAAgAAAAWAA0AAAAGAAgAAAAXAAEAAAADAAcAAAAXABQAAAAFAAcAAAAZAA0AAAADAAcAAAAbAAAAAAADAAcAAAAbAAoAAAAGAAgAAAAbABkAAAADAAcAAAAcAAEAAAAFAAcAAAAjAAcAAAADAAcAAAAaABsAAAAGAAgAAAAoABYAAAAFAAgAAAAoABcAAAAGAAgAAAAoABgAAAAFAAgAAAAoABkAAAAFAAgAAAApABYAAAAFAAgAAAApABcAAAAFAAgAAAApABgAAAAFAAgAAAApABkAAAAFAAgAAAAqABYAAAAGAAgAAAAqABcAAAAFAAgAAAAqABgAAAAGAAgAAAAqABkAAAAFAAgAAAArABYAAAAFAAgAAAArABcAAAAFAAgAAAArABgAAAAFAAgAAAArABkAAAAFAAgAAAAnABgAAAAFAAgAAAAnABcAAAAFAAgAAAAnABUAAAAFAAgAAAAnABYAAAAFAAgAAAAmABcAAAAFAAgAAAAmABYAAAAFAAgAAAAmABUAAAAGAAgAAAAmABQAAAAFAAgAAAAlABYAAAAFAAgAAAAlABUAAAAFAAgAAAAlABQAAAAFAAgAAAAmABgAAAAGAAgAAAA=") tile_set = SubResource("TileSet_e07et") -[node name="Player" parent="." instance=ExtResource("2_uldju")] +[node name="MyChar" parent="." instance=ExtResource("2_uldju")] position = Vector2(314, 195) -[node name="Camera2D" type="Camera2D" parent="Player"] +[node name="Camera2D" type="Camera2D" parent="MyChar"] limit_left = 0 limit_top = 0 limit_right = 800 @@ -467,3 +470,5 @@ drag_horizontal_enabled = true drag_vertical_enabled = true editor_draw_limits = true editor_draw_drag_margin = true + +[node name="PlayerController" parent="MyChar" instance=ExtResource("3_tk158")] diff --git a/MyChar.gd b/MyChar.gd new file mode 100644 index 0000000..7b3bb53 --- /dev/null +++ b/MyChar.gd @@ -0,0 +1,19 @@ +extends CharacterBody2D + +@export var speed := 80.0 # px/s + +@onready var sprite: AnimatedSprite2D = $sprite +var input_dir := Vector2.ZERO + +func _ready() -> void: + $sprite.play("idle") + +func _physics_process(_dt: float) -> void: + velocity = speed * input_dir.normalized() + move_and_slide() + + if input_dir != Vector2.ZERO: + if sprite.animation != "walk": + sprite.play("walk") + elif sprite.animation != "idle": + sprite.play("idle") diff --git a/Player.tscn b/MyChar.tscn similarity index 89% rename from Player.tscn rename to MyChar.tscn index a288ebe..f5472bd 100644 --- a/Player.tscn +++ b/MyChar.tscn @@ -1,6 +1,6 @@ [gd_scene load_steps=6 format=3 uid="uid://crht8e77338ew"] -[ext_resource type="Script" path="res://Player.gd" id="1_nu61o"] +[ext_resource type="Script" path="res://MyChar.gd" id="1_nu61o"] [ext_resource type="Texture2D" uid="uid://dg8dggk5xu5ru" path="res://player1.png" id="2_hro3h"] [ext_resource type="Texture2D" uid="uid://cgvpelj36koye" path="res://player2.png" id="3_q8tsx"] @@ -44,6 +44,6 @@ sprite_frames = SubResource("SpriteFrames_oncqu") animation = &"idle" speed_scale = 0.5 -[node name="CollisionShape2D" type="CollisionShape2D" parent="."] +[node name="shape" type="CollisionShape2D" parent="."] rotation = 1.5708 shape = SubResource("CapsuleShape2D_i3f4t") diff --git a/Player.gd b/Player.gd deleted file mode 100644 index b2f05b7..0000000 --- a/Player.gd +++ /dev/null @@ -1,28 +0,0 @@ -extends CharacterBody2D - -@export var speed := 80.0 # px/s - -func _ready() -> void: - $sprite.play("idle") - -func _physics_process(_dt: float) -> void: - if Input.is_action_pressed("ui_left"): - velocity.x = -speed - elif Input.is_action_pressed("ui_right"): - velocity.x = speed - else: - velocity.x = 0.0 - - if Input.is_action_pressed("ui_up"): - velocity.y = -speed - elif Input.is_action_pressed("ui_down"): - velocity.y = speed - else: - velocity.y = 0.0 - - if velocity.x != 0 or velocity.y != 0: - $sprite.play("walk") - else: - $sprite.play("idle") - - move_and_slide() diff --git a/PlayerController.gd b/PlayerController.gd new file mode 100644 index 0000000..adecb8e --- /dev/null +++ b/PlayerController.gd @@ -0,0 +1,43 @@ +extends Node + +@onready var is_mobile := (OS.has_feature("mobile") or OS.has_feature("web_android") or OS.has_feature("web_ios")) +@onready var controller_overlay: CanvasLayer = $controller_overlay +@onready var analog_stick_area: Control = $controller_overlay/analog_stick_area +@onready var analog_stick: TextureRect = $controller_overlay/analog_stick_area/analog_stick +@onready var analog_stick_p0 := analog_stick.position + .5 * analog_stick.size + +var input_node: Node : get = get_input_node +var _analog_stick_pressed := false + +func _ready() -> void: + if is_mobile: + set_process_input(false) + analog_stick_area.connect("gui_input", self._on_analog_stick_area_gui_input) + + controller_overlay.visible = is_mobile + +func get_input_node() -> Node: + var node := get_parent() + if not (node and "input_dir" in node): + return null + return node + +func _input(event: InputEvent) -> void: + if event.is_action_pressed("ui_right") or event.is_action_released("ui_left"): + input_node.input_dir.x += 1 + elif event.is_action_pressed("ui_left") or event.is_action_released("ui_right"): + input_node.input_dir.x -= 1 + + if event.is_action_pressed("ui_down") or event.is_action_released("ui_up"): + input_node.input_dir.y += 1 + elif event.is_action_pressed("ui_up") or event.is_action_released("ui_down"): + input_node.input_dir.y -= 1 + +func _on_analog_stick_area_gui_input(event: InputEvent) -> void: + if event is InputEventMouse: + if event is InputEventMouseButton: + _analog_stick_pressed = event.pressed + + var dp: Vector2 = (event.position - analog_stick_p0) if _analog_stick_pressed else Vector2.ZERO + analog_stick.position = analog_stick_p0 - .5 * analog_stick.size + dp.limit_length(10.0) + input_node.input_dir = dp.normalized() diff --git a/PlayerController.tscn b/PlayerController.tscn new file mode 100644 index 0000000..605207d --- /dev/null +++ b/PlayerController.tscn @@ -0,0 +1,55 @@ +[gd_scene load_steps=4 format=3 uid="uid://cynystnt5cwlg"] + +[ext_resource type="Script" path="res://PlayerController.gd" id="1_1rp1b"] +[ext_resource type="Texture2D" uid="uid://d2xwesqf3dwgn" path="res://analog_stick_back.png" id="2_c8ft0"] +[ext_resource type="Texture2D" uid="uid://dvwlyke01vja6" path="res://analog_stick.png" id="3_y2opl"] + +[node name="PlayerController" type="Node"] +script = ExtResource("1_1rp1b") + +[node name="controller_overlay" type="CanvasLayer" parent="."] + +[node name="analog_stick_area" type="Control" parent="controller_overlay"] +modulate = Color(1, 1, 1, 0.784314) +layout_mode = 3 +anchors_preset = 3 +anchor_left = 1.0 +anchor_top = 1.0 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_left = -188.0 +offset_top = -106.0 +grow_horizontal = 0 +grow_vertical = 0 + +[node name="analog_stick_back" type="TextureRect" parent="controller_overlay/analog_stick_area"] +layout_mode = 1 +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +offset_left = -26.0 +offset_top = -26.0 +offset_right = 27.0 +offset_bottom = 29.0 +grow_horizontal = 2 +grow_vertical = 2 +pivot_offset = Vector2(26, 26) +texture = ExtResource("2_c8ft0") + +[node name="analog_stick" type="TextureRect" parent="controller_overlay/analog_stick_area"] +layout_mode = 1 +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +offset_left = -17.0 +offset_top = -17.0 +offset_right = 19.0 +offset_bottom = 19.0 +grow_horizontal = 2 +grow_vertical = 2 +pivot_offset = Vector2(18, 18) +texture = ExtResource("3_y2opl") diff --git a/analog_stick.png b/analog_stick.png new file mode 100644 index 0000000000000000000000000000000000000000..f694ec3260fd76bec63a2b12acdef8ef629dbc86 GIT binary patch literal 1166 zcmV;91abR`P)EX>4Tx04R}tkv&MmKpe$iQ>9WXf_4yb$WWc^q9Tr3g(6f4wL+^7CYOFelZGV4 z#ZhoAIQX$xb#QUk)xlK|1V2EW9h?+hq{ROvg%&X$9QWhhy~o`jaOdLbYTU_fS;F(*kW_>Ql81o(Ov=UM*e{v3U3-eN#NB%Wo4X%lY{PjA`= z=Y8TRE6FPHIq|qj7bJeGif2 zI|BN*fs5<5rtATiJHXJBA)B%*1!)R}0`PuD-;@IeZ-MZd*IR2Jrw>4ex=P&u2Zz8| zk+Ro)-rdvL+rMX8{rvz0JaT&eLOa(0000JJOGiWi_5k|;{@tTpr~m)}32;bRa{vG? zBLDy{BLR4&KXw2B00(qQO+^Rj3jzuS8UK+Jh5!Hn8FWQhbVF}#ZDnqB07G(RVRU6= zAa`kWXdp*PO;A^X4i^9b0%u7?K~z}7?by3(Q*ji)@lVpURohZje1H}e>thi?5fKEz zRb2c7#NEl=(cQ(tNpNs*Q*;ppQNc-Z5Uir2i1h*1v}#)0yj)HognLbzM@yjx4!;b! zzx(~2_wTYQ%O@H1$GWml(T-$8bLflT6_ij8tu6&n7Q@(rJ=lefSQ`L&e8U@j!VKmE zw(CIaa0sVx9J>Q97oeGVaS@Z4z&*Uc2TUyntQquXT*50Xglp=x951VBIl%IGiVJa= z{%!zm#T679Vx$I9P0@1vzliU+i6ddrwq*pDG1p*)YKvN_11sPL4!4_3eK-?AT3#eb znziz{i1qEn%{JVRjXHs;hbrP3PNv0E_CMA+8iAPYQnk&5?vK5PllIM~r2i03W3-E< zzqZdHPGEZ+JQ1j|s*d465BgBeN_#P$lyONe>yHO^_OMlLz>ct1Q=mcY3%B*EQx8V_ z8E6G)DCl!Nv`{u}G)Z&WrX`qTDoMR938;*}J%%Y^IwpapK=V;iD?J3NHQq#^M%NVZ zGS+I3fM)R}EY;LP3o*mIt1J86lG3o5h{;I(cf~>t+OdHQiGYsV_Xfl zKMdD*^`f{22V>$JkIUk4oV*%tos6`8fRAzGm}@mtGi|zXARtB}19MSOXYo7MQYTmH g<@!djDl1?90bkSosyU?_F8}}l07*qoM6N<$f}5BQLjV8( literal 0 HcmV?d00001 diff --git a/analog_stick.png.import b/analog_stick.png.import new file mode 100644 index 0000000..582193c --- /dev/null +++ b/analog_stick.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dvwlyke01vja6" +path="res://.godot/imported/analog_stick.png-5d2275d6ebe2919d5d387624cc7da419.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://analog_stick.png" +dest_files=["res://.godot/imported/analog_stick.png-5d2275d6ebe2919d5d387624cc7da419.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/analog_stick_back.png b/analog_stick_back.png new file mode 100644 index 0000000000000000000000000000000000000000..aaa0cca3b9ff8e9967eab26fa195f2a465d108ad GIT binary patch literal 2020 zcmVEX>4Tx04R}tkv&MmKpe$iQ>9WXf_4yb$WWc^q9Tr3g(6f4wL+^7CYOFelZGV4 z#ZhoAIQX$xb#QUk)xlK|1V2EW9h?+hq{ROvg%&X$9QWhhy~o`jaOdLbYTU_fS;F(*kW_>Ql81o(Ov=UM*e{v3U3-eN#NB%Wo4X%lY{PjA`= z=Y8TRE6FPHIq|qj7bJeGif2 zI|BN*fs5<5rtATiJHXJBA)B%*1!)R}0`PuD-;@IeZ-MZd*IR2Jrw>4ex=P&u2Zz8| zk+Ro)-rdvL+rMX8{rvz0JaT&eLOa(0000JJOGiWi_5k|;{@tTpr~m)}32;bRa{vG? zBLDy{BLR4&KXw2B00(qQO+^Rj3jzuRHceX}o&W#<8FWQhbVF}#ZDnqB07G(RVRU6= zAa`kWXdp*PO;A^X4i^9b1-(f`K~!ko?U`+eR8<(qf9Kwr-PN52YDxwIIpbtTBP!Y4Exv`iSkqJdCrAcLhGvr%p<_m3`nzf>? zJFn;TVV`Svud}l3%vJBQ4_tP3=5o*do&R&5=Q+=@xiqGLH-G|glwo3RKpxP*Mj#S& zpqaoKz__jsU_wxVMggyiLT)GxtP3jC5?MzYD9Yu4m4G=x1G*i^xq$M(!@!>|u+u?< z>JlI=K#Rp4H@Tor0!=}J>J^{@aHs40XFV>M3KG<(qR_3L?<2r>0#pQc4vVB^Syq!M zSdeu$JS-B4#Omtmvf*$z#)u8BCab!&w6s`CDO)KO0z!bLwbsU%qSm@tDwT>GHf%6~ zfLgX}nPuB{1em0hngL7$#si~_F#!Jp$Bi-jwbnvxF#pChON~tLD z0B{E|T_Rlwuw*PJ#CHL|0$&?rGRBxgg+k$ETU(pHBB0{&xKc_@0G^fvdxJoD$8nG4 z)PH9MZlf_~YpGP)xpwW^LZ$CySNechEH(*v8F&(Cbg81`v-^ML0jvS80b)w2$(Cgu zo;!E$@k}P8FB?=Mk!TR0$AMZGfK^5v22f8)`7{j}tCTt%jYf~9)9In-!3uzE;9lS{ znQ=7;kaA$o1k?fxfct^5mt3h8D^@6_R1@$TaI@>hDqY)QU>vYJ8jW_Q(`j8zr5b?` zr6_H)EUU5K8z^N1^MPm;fV}QFOP(D`BoeAxP))!Wz;X%4kJ`4q+;dMoum~7a#kAl& zr&g-^$wT!dFVr+(izwg>veUNhH6Ep=0JD9lNF23pl++L!DpVuzmh3|JNYX@-I)SS9t9BHa zMq^ArsA91=6KEANP5_61m!wf%|};UH-jTYrVwtupVHS%Vqtr zb3m6;s(6umriwQ`;aQ7wym{(x;30`D22jSB7d`jnC72v^wYsWh&a+MeU8z*c>kZ?9 z)v}&;i3s&B*X#hEDOXXPkjSzR_)QAd^VZthYGe@e*^2}v#yks&Nnwy)ul~P-!{t8KzZ4CgSCH$U}wetb+5%6uL z3i;B^Oe7L@;)?TSKQu#ne+>eZqwmmdpX8Jy(%kHo;B)15Xq`SFP@|M;5SV&VF9-A* zV@`{k7L75bR4V0L``K4px^$^x#71ny{Iqe>h8q{8m#zWk$yHP4_YSG;I)Vf>PjXN< zef@T~T`N^YR(9M~H_Jz`vA}5HIZsP&v;0-SA3<}!gOYH&rPzhO!vsgA6ZEx~1EW+P za1NM814;QjT~so__tF;$lr_l)GABKUi2{+APSB*FhVEAcDknkVcY)d(=vlJ z{N3Z%TDp`r8Td(p!#VmI`oqF%WRJCq3eR%~WB&n_h}*WKu|;|S0000