From 8a7a6b2d9e73e68c195b718c12942354abee2dd9 Mon Sep 17 00:00:00 2001 From: HumanoidSandvichDispenser Date: Wed, 2 Aug 2023 01:59:37 -0700 Subject: [PATCH] emoting --- Assets/Sprites/Characters/forsen2.ase | Bin 5402 -> 9689 bytes Assets/Sprites/Characters/forsen2.png | Bin 1064 -> 1766 bytes Characters/Player.tscn | 44 ++++++++++++++++++++++++-- State/Character/PlayerEmoteState.cs | 36 +++++++++++++++++++++ State/Character/PlayerIdleState.cs | 12 +++++++ project.godot | 5 +++ 6 files changed, 94 insertions(+), 3 deletions(-) create mode 100644 State/Character/PlayerEmoteState.cs diff --git a/Assets/Sprites/Characters/forsen2.ase b/Assets/Sprites/Characters/forsen2.ase index 7db4bd5732e3c663a2e7c815c302c83ddd2dae7a..7798bf21ccfb1ac5fbc964d3a5634be2979bab34 100644 GIT binary patch delta 3339 zcmc&%Yfuzd7C!x$e#`@VMj4ulnjRRDMWT%wge01t5vLTj))%X2jDrrCikJ}D)M}D) z9w;Ja1Jac&Oi@upB1Mb~Vjd>D#u;BQfjmqZW6TOGu32kMcC%rq7H4=x#{dPH(_YwD|8K=-mLo3zYmS;U8&%1hg9Pu~6{% zy5juD<`ovVrjr*q?27C+j+LgMEjj@M2F!2+kM3uHhV`|pM4F&nOeeD^K3=Eulf_A(%0J2=}2wnmT)!4fC`7<;r;l(a?}F^ zx|bagM-O@wXKo~9IxKRyBTHBG!r8hT`vb4cY~NT-AAS>?5V`u{p;NZC`=3qz@ad$g z%k{HPcEJwck#~s|vGhkL(4}90Ny=M{HiJ_QfS~|p`C*#(y2&&?&&bKS4Q+As60@nc?yUFp>$@s4 z=3yyE+2UDE4dz|XuefWG>ss#%Jt5j-$EW7VLG#G_er~n_le;ZRS=0MT4aK670=!s+ z7M_fEK*ws24=b*H#$lgE%uB4oDZ8(mfJ+X>CdocstT#r5k4l5oLs`N`P9Ve5c#dJ& z5a~!=G`fUyP9@;COR@h%#ls-E+!X0A6c3K8e7tvnkET8RM|D=jw8}k*Ah)l%nVU0@ zZ?gt^rBr^Hyc~yoA8!3sC^8yDP3sua_P`!DXg#i}kfK~Jmnd)do0B5RjAwd{c5baNxzrKi947T0yThbZu`w=m`eD;}J9 zkL;Gc73)9S*lW*RT#q|`cS{bMJ>1)&+`%~KpC`-nMqRu6<&O{CxDv*8PI=>t6W`@l z?He)Qyf}Z%+?@QRSrt90&e?(H$$i@>Lad|OK2sh@c3OX(XheYbx{4_(`G~X9JU*eV zjk(}!5crTAdU-ha3^gG`-HM~!4eT>U)!cBa)ruZTWCm2)&dJp_yPaIkgyLc1r?_5w zCT?8=q*V&1M6MJ_!%?eH5NMrW;}oDk@2CljNtH(+ZTQgwA1)Z+z6@Q_1qJd0_eUWQ z!lBos)vRfY`n|PYAQI<1>&LQowelS{9v*m^uFX{1BvFHmLL+0wDaw=0XR$1c{l+F9 zg9aWZZN~NT+uY2kgWiUe#kF}@e)S|V9521J^PrHJNDwn^%%sC2aEWwG)LRBWDW?8r zML9!L1y=wTF1^fZv6hyV_$$Rgr$AP1dcyanZ+TTwJgg*eY2i=l;J7klFk~n;_Hf;r z6W{(Rwy0`@>3zeY!oEMO?pvNUqhnd-xYu`g?EP=nYX0cE7lYOGxQ$esrsAQ)h48`!3(I_E_NdriaW46su8E6&AiL{^=GUA~f{x0un;jJfZ@Jd#N0&i`jY%@&V%iLAMSxl7WVgJYKSd zvHhK$ouR@;aS8r>C+N_S`qcYG!ks2S=oG`hsx+lTGl$z9v`25HY!r0gPd_cGqW*tR z+E);Y{z)5~B5ya1N}w^9h}ry;>xFvM&zpu(Mu~*db-KPmfbF;QYoJV}89#R_{T^Ug B&Dj6| delta 38 ucmccVJxhySN|b@&!BU}#?3IkGH#X`rvv)8sFi0q{PTtDgxH*XBi2wlL#S3Zx diff --git a/Assets/Sprites/Characters/forsen2.png b/Assets/Sprites/Characters/forsen2.png index 83295c96afad4c46f8c080e4af24c0f2511a2ecb..256a7dd8b49095223c4593fdd7eb6d25e9529093 100644 GIT binary patch delta 1489 zcmV;?1upui2<8nTiBL{Q4GJ0x0000DNk~Le0009>0000O2m=5B0QX-lgRvnh0e=OB zNklKCQv}x0(O`A4t+O%oYrcIkR?T?sC_V>j3H_}e~U#y!zWP)?I1K)~6%O90C4*_`T zOEAhh*Y))S?!F%4Pr~!Wte(eZ4u8W3^IwfPhX)A!8D|4s@=LtqxciJCr z@Y6V->LLCtJS*q%gx>y)>L(=-gx%TH$d-)G_(Gh|-r`x<$>Y62lXNKgPEdUTil zwZ80Xw0Z9tKO?AWe$T?FS7dYOge zu<%=k_f{FXXJdo}+uzxrQGfj;{O1A_Nc716fX5@f355MW;5v>Fe^UOGSId`Y_|1e~X2Cct{1&h}$Wm5^}%kH|M|LbIWVm&8!1Xi0e{1pkBYwXZFiI} z&u}`>%ODbmh2H`eMu3na9Hr5uU8M*~ed)mdyWD@hkDdJ))lWwW#CeVd6Mto3ocZ^~ z!FgFVbX~msi0{ZB3#m-lX`SkD9b!lHhd7_m%Pbs+<_%aF(Ta&^gj@ZtwbNH2vHq8X z8??W#Kco5?*3(HiMt}75N`QW1Q-Kk@FAnB^U6&eQ>y6=K{9VOKha`Bt2@?cm&UFU7 zrAk>GmX{BPaP3bwxK~J{@LM72He`J{L8Mm&-TPWM+c8d zX@lEqFmlu938xWjg1s+J2XPhOqr}dc2z!N_boId3yxpsND)k^M>53K|sn$eKzoSP} z*oSVM^|?+!2WuFD2QK6T5lmUGW+D@qV8QS>OkkPk_`RROWW8_#6Ot>Dv^zToPIkim z*&g^uM(YIxK7Z#3=IR`DQE(A^8VLuzPr@+QD85`@=2L$SK#*ML9Fo;+L zCxXfRU-Xg>|E2Y>4PCV9i~R5h?pb_`7E-DS>r3AxCnaf=2nih!a9O=VDqezxgbv(; zSk2bk<9{YG?Ke}!&4r2r@etn{EeNZ2``vw065`WV+B@@%o00000NkvXXu0mjfE&0=g delta 781 zcmV+o1M>Xl4X6kqiBL{Q4GJ0x0000DNk~Le000570000O2m=5B0IaB3FR>vi0e=F= zNkl`HvFAD|D)_Uh8rahs9qj?Di3Y{sj~eD&|$2=Q~0IM?nD(I5c)mO4u;xi z2H!6m9xCt@#`Mu6+(~MnPkbQH`+xT7{&*gh<%{)pv&NYT;6rxU6wacj5_eX-FPu zWPP9{&t4obzLt$v7U)0?OI11WKuHNW{}71I+(?0fn$DHC6+I=w@o#vaM}J5>Y5!s_ z@<1=UoZIh{)pY@e$+ARH*$Mz7A3_@d=u8I-Tu>>cF4w(y&Ig=_7^z%mJ{N8WmetKL zafVe6SAKQ$kjdDG)G4?Hhc@{sG2iIlY(7AZ~#upTi4ci_lv`_iSy+b4n4#os+ zw*~Z7ON}J_SRSnNK9@US^M6`;%U@icc0EFuK2brHd!LoBr99a6F;^fSUr*tl1ga+# z)W))^==O^ZAiR(~BwiE>-Rfp^pm5%O0Pr3)yMUVQLJJoc7uXMxWx3;4yfuX0Ucq&V zF>Nd)G&54LF+2}5vg?U|CNY}K3m;&H>6Xcdvwb_@z~>`w#0!~#@PACu-Iw#0T*U*v zeF8Dxu@cg)bbGtgAW=q+(LBAfi`FfXa_>FHO+UpLJIp4YsW1FG0Zu3sQSaPpM3_b z&=o%nV!>Dr<|FBo@nh{|ssq`d(5?Sw-20`k1kkVkzj?O*rZDyk_9^Fad=nJm00000 LNkvXXu0mjf*#&J8 diff --git a/Characters/Player.tscn b/Characters/Player.tscn index 22b49c0..e2a9c1e 100644 --- a/Characters/Player.tscn +++ b/Characters/Player.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=58 format=3 uid="uid://b2254pup8k161"] +[gd_scene load_steps=60 format=3 uid="uid://b2254pup8k161"] [ext_resource type="Script" path="res://Characters/Player.cs" id="1_flygr"] [ext_resource type="Shader" path="res://Shaders/Flash.gdshader" id="2_ngsgt"] @@ -12,6 +12,7 @@ [ext_resource type="Script" path="res://Utils/AnimationManager.cs" id="7_sdgvb"] [ext_resource type="Script" path="res://Items/Inventory.cs" id="7_xyenu"] [ext_resource type="Script" path="res://State/Character/PlayerRollState.cs" id="8_fy0v5"] +[ext_resource type="Script" path="res://State/Character/PlayerEmoteState.cs" id="8_hd2lw"] [ext_resource type="Animation" uid="uid://8e8r3y1imvsx" path="res://Assets/Animations/stun.res" id="8_m08fh"] [ext_resource type="Material" uid="uid://x5qcq5muvc3g" path="res://Assets/Sprites/Particles/PlayerDamageProcessMaterial.tres" id="8_yf112"] [ext_resource type="Texture2D" uid="uid://c1a7lvb4uuwfy" path="res://Assets/Sprites/Particles/circle-16.png" id="9_7gumm"] @@ -59,6 +60,18 @@ tracks/1/keys = { "update": 0, "values": [0.0] } +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("%Sprites/Node2D/Character:frame") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [0] +} [sub_resource type="Animation" id="Animation_mg66i"] resource_name = "idle" @@ -144,9 +157,28 @@ tracks/0/keys = { "values": [10, 0] } +[sub_resource type="Animation" id="Animation_xt1sg"] +resource_name = "emote" +length = 2.12501 +loop_mode = 1 +step = 0.125 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("%Sprites/Node2D/Character:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.125, 0.25, 0.375, 0.5, 0.625, 0.75, 0.875, 1, 1.125, 1.25, 1.375, 1.5, 1.625, 1.75, 1.875, 2), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1), +"update": 1, +"values": [18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34] +} + [sub_resource type="AnimationLibrary" id="AnimationLibrary_0tohi"] _data = { "RESET": SubResource("Animation_imqdv"), +"emote": SubResource("Animation_xt1sg"), "idle": SubResource("Animation_mg66i"), "move": SubResource("Animation_iyr4r"), "roll": SubResource("Animation_vobpw"), @@ -300,9 +332,10 @@ script = ExtResource("5_rgckv") InitialState = NodePath("Idle") Character = NodePath("..") -[node name="Idle" type="Node" parent="StateMachine" node_paths=PackedStringArray("MoveState", "IdleState", "Character")] +[node name="Idle" type="Node" parent="StateMachine" node_paths=PackedStringArray("MoveState", "EmoteState", "IdleState", "Character")] script = ExtResource("6_wkfdm") MoveState = NodePath("../Move") +EmoteState = NodePath("../Emote") IdleState = NodePath(".") Character = NodePath("../..") @@ -325,6 +358,11 @@ script = ExtResource("8_fy0v5") IdleState = NodePath("../Idle") Character = NodePath("../..") +[node name="Emote" type="Node" parent="StateMachine" node_paths=PackedStringArray("IdleState", "Character")] +script = ExtResource("8_hd2lw") +IdleState = NodePath("../Idle") +Character = NodePath("../..") + [node name="Animations" type="Node" parent="."] unique_name_in_owner = true script = ExtResource("7_sdgvb") @@ -416,7 +454,7 @@ use_parent_material = true position = Vector2(0, -8) texture = ExtResource("4_5vird") offset = Vector2(0, -4) -hframes = 18 +hframes = 35 [node name="CollisionShape2D" type="CollisionShape2D" parent="."] position = Vector2(0, -4) diff --git a/State/Character/PlayerEmoteState.cs b/State/Character/PlayerEmoteState.cs new file mode 100644 index 0000000..8fdcdf6 --- /dev/null +++ b/State/Character/PlayerEmoteState.cs @@ -0,0 +1,36 @@ +using Godot; + +namespace SupaLidlGame.State.Character; + +public partial class PlayerEmoteState : PlayerState +{ + public override IState Enter(IState prevState) + { + if (prevState != this) + { + _player.MovementAnimation.Play("emote"); + } + + if (!CanEmote(_player)) + { + return IdleState; + } + + return base.Enter(prevState); + } + + public override CharacterState Process(double delta) + { + if (!CanEmote(_player)) + { + return IdleState; + } + + return base.Process(delta); + } + + protected static bool CanEmote(Characters.Player player) + { + return !player.Inventory.IsUsingItem && player.Velocity.IsZeroApprox(); + } +} diff --git a/State/Character/PlayerIdleState.cs b/State/Character/PlayerIdleState.cs index e6eff0e..b9796f5 100644 --- a/State/Character/PlayerIdleState.cs +++ b/State/Character/PlayerIdleState.cs @@ -7,6 +7,9 @@ public partial class PlayerIdleState : PlayerState [Export] public CharacterState MoveState { get; set; } + [Export] + public PlayerEmoteState EmoteState { get; set; } + public override IState Enter(IState previousState) { if (previousState is not PlayerMoveState) @@ -43,6 +46,15 @@ public partial class PlayerIdleState : PlayerState return base.Enter(previousState); } + public override CharacterState Input(InputEvent @event) + { + if (@event.IsActionPressed("emote")) + { + return EmoteState; + } + return base.Input(@event); + } + public override CharacterState Process(double delta) { base.Process(delta); diff --git a/project.godot b/project.godot index 32dc158..66f36bc 100644 --- a/project.godot +++ b/project.godot @@ -104,6 +104,11 @@ equip_3={ "events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":51,"key_label":0,"unicode":51,"echo":false,"script":null) ] } +emote={ +"deadzone": 0.5, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":71,"key_label":0,"unicode":0,"echo":false,"script":null) +] +} [internationalization]