From fb52fd0ecdc9d44236ae46ef10ab4fdea1c33e77 Mon Sep 17 00:00:00 2001 From: Jakob Feldmann Date: Mon, 27 Jun 2022 00:35:12 +0200 Subject: [PATCH] Basic animations for Blobby --- assets/blobby/blobby-spritesheett.aseprite | Bin 0 -> 2536 bytes .../blobby-spritesheett.aseprite.import | 26 ++++++ .../neu-blobby-proto-walk-anm-test.aseprite | Bin 1726 -> 2536 bytes .../walk/neu-blobby-proto-walk-anm-test.png | Bin 0 -> 1560 bytes .../neu-blobby-proto-walk-anm-test.png.import | 35 +++++++ src/Actors/Blobby/Blobby.gd | 3 +- src/Actors/Blobby/Blobby.png | Bin 0 -> 1709 bytes src/Actors/Blobby/Blobby.png.import | 35 +++++++ src/Actors/Blobby/Blobby.tscn | 87 +++++++++++++++--- src/Actors/Blobby/BlobbyStateMachine.gd | 22 +++++ 10 files changed, 196 insertions(+), 12 deletions(-) create mode 100644 assets/blobby/blobby-spritesheett.aseprite create mode 100644 assets/blobby/blobby-spritesheett.aseprite.import create mode 100644 assets/blobby/walk/neu-blobby-proto-walk-anm-test.png create mode 100644 assets/blobby/walk/neu-blobby-proto-walk-anm-test.png.import create mode 100644 src/Actors/Blobby/Blobby.png create mode 100644 src/Actors/Blobby/Blobby.png.import diff --git a/assets/blobby/blobby-spritesheett.aseprite b/assets/blobby/blobby-spritesheett.aseprite new file mode 100644 index 0000000000000000000000000000000000000000..5667ae0ff3150f984f04f216ef6ce0830e01389f GIT binary patch literal 2536 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 apU-}$DZa08@B82TwSC$ShKIk_`2YYEUTLrZ delta 70 zcmaDMypNZC9~%S1gQct!*(-S`Gchpy`pC+V!oa}5y0N#5QC=R%Vo_iQk}&We$Y5vi QNvupQQZU@ShN*)E0AZ&OmjD0& diff --git a/assets/blobby/walk/neu-blobby-proto-walk-anm-test.png b/assets/blobby/walk/neu-blobby-proto-walk-anm-test.png new file mode 100644 index 0000000000000000000000000000000000000000..fc3d243084e6a8d00cf9540a236b18a017109161 GIT binary patch literal 1560 zcmV+z2Iu*SP)Px)(n&-?RCt{2Ts>|bISi(OZCo38CkTQZAXN~!$PMB$ZgYkB5W81Mo0RblwsI3z_%nm0DUuZf+J_$QL0G#mpY5{X12kw_#Gi9{liNF)-8 zL?V$$Boc{4B9TZW5{X12kw_#Gi5G~IwFO8d5+Vljb4{GO=4S#(B;pv1XFXzSxVYZ# zfBEt8JW6+X|IgR`FE?L4tMgxK0o|5u%is|8?j0T4evo}-M5$>Bto9pOlPyeP@Dv@FNw@AkWk>n-da?&0Rk=NkVL zgCFURKHXI}ZvvPYoR$|FDh*)D;8_3!TZnEl0Q|4NM}|)PhoHSFdOFLVeo3AM)_zU? zA-}_MIH#xokt6`UXnKf<4j2dkFCUdZz%=`wo^9Nd|NOjJM1}||&TxCa)b<+R-NU{3 z|D)cB>XH;-8gyR$JCwuK{CoPI`fwQF=I)>XqshpV(}y(mitGt zK`8h=juH%pZn~o!t?OSSLt_FO06^W{DLi9F6gON-ucWJ$2>4uW4YWG|ap&bbD*%YQ zFdgR&P)-(LR>F#)w8t}2ah!*LFa7zL2yeF-ED>h5pJ(D4`)vV9cZ1nfEbEyQ~!gBIjUfK8wzWmf_? zJ=^djj65Nh0B8J*uK`cbHgLJUGj~=*=`2K^7fV5!eV-n8Vi`rtFD|ooo9ekh;hEoi z#w(3Oxgz=_F1L58)A3`FCIcB~^5^INUh9uz4E<-xw-@h#?bVBKfJ5N_`{|QP;MeUf z003N_zbTgS7D`78fb!9{^xWMDL<}fCFP(+(x%UPWdD4HaS0n(_tXye$_56$cTlBAm zhrgExp%HpNy~g_Y}<$lB)+#tGc1!W3@^dprRGna-2y3 zvT>~eNJ~Mh`~m=Y`|ch5J^p<4`*+t&yq5j|ha@QJ!x}!!aW%Uzr!B$KAE4a^G|5=B zdIo%nzGTZK_-j?LHrCTm0AM75-NQX>UcH8=$DO#dSV6c{0HR_a0=t)${c5nL{>b~e zCt<2TK${ID{{!$ck)gZ(!Sy$rpjtW+0pgvQS|0%E zs^s(ro&;)mm&$j`=c7FcRSThk_MY=O(N@$5f9+$KN*Stq@GbojPDgNkfu`wAQDK9o zZxB!><6C*R?lt^1nS$R0sILM&_T$w_4gX#jnWd!b4g?Qq*B+l+@ll5NGg$RmgA8Ha zxh&HB8Yk=xrwrA+(FTp{-&Ob451|+x4=wj!zc$N!Q($>%^oS3i7JuA89KM zC7{4qiGGjo^Lu}h7LlQrH_~ri|DL)xeF|Mkr}c08X);7%^8ODRka8s&I^W3v0000< KMNUMnLSTaFpx#sf literal 0 HcmV?d00001 diff --git a/assets/blobby/walk/neu-blobby-proto-walk-anm-test.png.import b/assets/blobby/walk/neu-blobby-proto-walk-anm-test.png.import new file mode 100644 index 0000000..584fe40 --- /dev/null +++ b/assets/blobby/walk/neu-blobby-proto-walk-anm-test.png.import @@ -0,0 +1,35 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/neu-blobby-proto-walk-anm-test.png-5402131ce2ea57bd684ef66788556811.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/blobby/walk/neu-blobby-proto-walk-anm-test.png" +dest_files=[ "res://.import/neu-blobby-proto-walk-anm-test.png-5402131ce2ea57bd684ef66788556811.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/src/Actors/Blobby/Blobby.gd b/src/Actors/Blobby/Blobby.gd index f15a78b..0643147 100644 --- a/src/Actors/Blobby/Blobby.gd +++ b/src/Actors/Blobby/Blobby.gd @@ -7,7 +7,7 @@ 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 animation_player = $BlobbySprite/BlobbymationPlayer # TODO Too much speed through midair boosting # TODO Walljump of of enemies/object not only walls @@ -219,6 +219,7 @@ func calculate_fall_velocity( ) else: linear_velocity.y = max_velocity["fall"] + # TODO Gets velocity away from wall when moving against it if (-4 < velocity.x and velocity.x < 4) : # TODO This is poop linear_velocity.x += inair_velocity * direction.x diff --git a/src/Actors/Blobby/Blobby.png b/src/Actors/Blobby/Blobby.png new file mode 100644 index 0000000000000000000000000000000000000000..0d9eb20c6b36e594bd71bc3b08ecbc945f863fdd GIT binary patch literal 1709 zcmV;e22%NnP)Px*XGugsRCt{2oiT14I}AYSk2J0g>^ve%WRt~#E1B~LRzQH-ryI5 zz(9Z;U}3mO+67#@oD^BEIT}(VCC%~01cZiv_H^E!!wg0Dx|+ukV&UC_|AB{inwr zJH4zn9XltVUn~X&$NvL(o{z1v6TP$bv~s8yZNKUOrm`rUDl8exVgM?W{w*05p>r>N zDssR+a_8EGSlZ8Fb^t0OT`0XtX~y!x-2hYmfBzl;0Dj!v!A(-W&>;h+Xurz=0Qq4! zFhEkS)&O)GL^%@wzJ3k=?f-rA^QUOE5?Z%kbinT69u}8Z@btJFcn^nH&InT(0DItD z$4ybXPn6QS{iYE>o!~V>sR4Em_ppHR(4`Lr8l{GpIv-xs+x{Hp7cmr$SZ}7n zl**TkDe1wLH^^@yThfJlBX%jGv3s}|>o^zYT=J=0N}&!#ZBO-(>ZKjPtcV4&1U*`^ zE?AK?$)_??Ds*tSJ=KM)&&gL;L!CO%>!o#zRwA7;wfe3O;3&&opR4~OcIkp32!bF8 zf*=TjAP9mW2-?#!RPdNft(rbl>(Weqv&{)%W2B`a4vp6InIJb|GWn+PbVS-_lePpC zr&ML*lx!0=%91IPZ{32OWN(xzffOc5s97<&$cHKN6D;ykZcT=a%lMY40q>?fK%3Zn z)T1^(p+pBu2jJp@%*NN0q2U;g5hTWER>kM<{|S!!o)#hP%#C14e|2v}qmVT8t|CdH zSO-U$X7V-Jn%t2Cq~4#4iENlAGBBgF5FZN>MsxmdY`bG%!B^N%JG{nigF( z#57d^IX>Q!F-f5YP~Hxk$LBlq6S6O%HE-eom6`G!(jpwCAV$Ax4GMMQ>KT_Ks@K3c zouoE5%@43(Tn{RijVrK~`3X(io|D}=KfuDI=S7g~*XAd*YbcTZUwYo=--5*f?sNMWmsba8?H$p?Xv7K7>YAsfYC{G? z4W$!f3l8ocjR5JKy4;>L_pO0_6vOPC)-*`ALe@bhbwI1b@&M-R05vqx8gFR`(=a*I z5^aHDfLa-f5)*ndBnOPrawN34NGxN;68wdrT<*_H!E}VXbn>`milB8Zq2bK)zX}(9 zCPc2yZVGY-=OUKSJZczkucRZYCO0AZeRhwrVv3UV$ccu}g(m*Ey8{4#o8@&?JgDW^ zcr^vckT`Nm+^46bG2VXpVk&zKQaMui`~+VDsmAR9Em8Rm{5+ypoB-400000NkvXXu0mjf Du?8)h literal 0 HcmV?d00001 diff --git a/src/Actors/Blobby/Blobby.png.import b/src/Actors/Blobby/Blobby.png.import new file mode 100644 index 0000000..cbd72e1 --- /dev/null +++ b/src/Actors/Blobby/Blobby.png.import @@ -0,0 +1,35 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/Blobby.png-42eed5028ccb56a7415a0793b79ec61e.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://src/Actors/Blobby/Blobby.png" +dest_files=[ "res://.import/Blobby.png-42eed5028ccb56a7415a0793b79ec61e.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/src/Actors/Blobby/Blobby.tscn b/src/Actors/Blobby/Blobby.tscn index 91b5f12..31fc1a0 100644 --- a/src/Actors/Blobby/Blobby.tscn +++ b/src/Actors/Blobby/Blobby.tscn @@ -1,15 +1,76 @@ -[gd_scene load_steps=9 format=2] +[gd_scene load_steps=12 format=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="StreamTexture" id=5] +load_path = "res://.import/Blobby.png-42eed5028ccb56a7415a0793b79ec61e.stex" -[sub_resource type="Animation" id=4] -resource_name = "idle" +[sub_resource type="Animation" id=6] +length = 0.1 +loop = true +tracks/0/type = "value" +tracks/0/path = NodePath(".:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = false +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 1, +"values": [ 7.0 ] +} + +[sub_resource type="Animation" id=7] +length = 0.1 +loop = true +tracks/0/type = "value" +tracks/0/path = NodePath(".:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = false +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 1, +"values": [ 5.0 ] +} + +[sub_resource type="Animation" id=8] +length = 0.1 +loop = true +tracks/0/type = "value" +tracks/0/path = NodePath(".:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = false +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 1, +"values": [ 6.0 ] +} + +[sub_resource type="Animation" id=9] +length = 0.5 +loop = true +tracks/0/type = "value" +tracks/0/path = NodePath(".:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = false +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/keys = { +"times": PoolRealArray( 0, 0.1, 0.2, 0.3, 0.4 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ 0.0, 1.0, 2.0, 3.0, 4.0 ] +} [sub_resource type="RectangleShape2D" id=1] extents = Vector2( 13, 9 ) @@ -22,16 +83,20 @@ collision_mask = 120 script = ExtResource( 4 ) [node name="BlobbySprite" type="Sprite" parent="."] -position = Vector2( 0, -10 ) -texture = SubResource( 3 ) -hframes = 2 +position = Vector2( 0, -16 ) +texture = SubResource( 5 ) +hframes = 3 +vframes = 3 +frame = 5 __meta__ = { -"_editor_description_": "YXNlcHJpdGVfd2l6YXJkX2NvbmZpZwpwbGF5ZXJ8PUJsb2JieVNwcml0ZS9CbG9iYnltYXRpb25QbGF5ZXIKc291cmNlfD1yZXM6Ly9hc3NldHMvYmxvYmJ5L2p1bXAvbmV1LWJsb2JieS1qdW1wZ2Fpbl9hbHRpdHVkZS5hc2Vwcml0ZQpsYXllcnw9TGF5ZXIgMQpvcF9leHB8PUZhbHNlCm9fZm9sZGVyfD0Kb19uYW1lfD0Kb25seV92aXNpYmxlfD1GYWxzZQpvX2V4X3B8PQo=" +"_editor_description_": "YXNlcHJpdGVfd2l6YXJkX2NvbmZpZwpwbGF5ZXJ8PUJsb2JieVNwcml0ZS9CbG9iYnltYXRpb25QbGF5ZXIKc291cmNlfD1yZXM6Ly9hc3NldHMvYmxvYmJ5L2Jsb2JieS1zcHJpdGVzaGVldHQuYXNlcHJpdGUKbGF5ZXJ8PUJsb2JieQpvcF9leHB8PUZhbHNlCm9fZm9sZGVyfD0Kb19uYW1lfD0Kb25seV92aXNpYmxlfD1GYWxzZQpvX2V4X3B8PQo=" } [node name="BlobbymationPlayer" type="AnimationPlayer" parent="BlobbySprite"] -pause_mode = 1 -anims/idle = SubResource( 4 ) +anims/falling = SubResource( 6 ) +anims/idling = SubResource( 7 ) +anims/jumping = SubResource( 8 ) +anims/walking = SubResource( 9 ) [node name="BlobbyBody" type="CollisionShape2D" parent="." groups=["player"]] position = Vector2( 0, -9 ) diff --git a/src/Actors/Blobby/BlobbyStateMachine.gd b/src/Actors/Blobby/BlobbyStateMachine.gd index d2a2291..9fa4d1a 100644 --- a/src/Actors/Blobby/BlobbyStateMachine.gd +++ b/src/Actors/Blobby/BlobbyStateMachine.gd @@ -7,6 +7,8 @@ export var coyote_hanging = false export var init_boost = false export var init_boost_type = "idle_walk" onready var jumpBufferTimer = $JumpBufferTimer +onready var anim_player = parent.get_node("BlobbySprite/BlobbymationPlayer") +onready var sprite = parent.get_node("BlobbySprite") # Adds the intial states @@ -19,6 +21,7 @@ func _ready(): add_state("wallslide") state = states.idle set_state(states.idle) + anim_player.play("idling") # Calls the parent behaviours according to state @@ -51,8 +54,13 @@ func _state_logic(delta): print("don't panik") var direction = get_horizontal_direction() + if direction.x < 0: + sprite.flip_h = true + elif direction.x > 0: + sprite.flip_h = false parent.velocity = handle_input_ref.call_func(delta, direction) + parent.execute_movement() @@ -159,6 +167,20 @@ func _enter_state(new_state, old_state): # TODO This may be hard to keep track of if many states are added if !["run", "walk", "idle"].has(old_state) && parent.is_on_floor(): emit_signal("got_grounded") + + match new_state: + states.walk: + anim_player.play("walking") + states.idle: + anim_player.play("idling") + states.jump: + anim_player.play("jumping") + states.fall: + anim_player.get_animation("idling").loop = false + anim_player.play("idling") + anim_player.queue("falling") + states.run: + anim_player.play("walking",-1, 1.33) func _exit_state(old_state, new_state):