From d6bfe92c00e7448e78651c1b88eb708d8036c264 Mon Sep 17 00:00:00 2001 From: Dustin Date: Sat, 8 Mar 2025 15:51:56 -0800 Subject: [PATCH] Importing a player --- assets | 0 assets/actors/players/playerD/Mega.png | Bin 0 -> 92692 bytes assets/actors/players/playerD/Mega.png.import | 35 + .../Actor/resources/Smiley.png.import | 6 +- project.godot | 68 +- src/actors/players/playerD/Player.gd | 71 ++ src/actors/players/playerD/Player.tscn | 711 ++++++++++++++++++ .../players/playerD/movement_component.gd | 140 ++++ src/actors/players/playerD/states/attack.gd | 140 ++++ src/actors/players/playerD/states/climb.gd | 51 ++ src/actors/players/playerD/states/dash.gd | 78 ++ src/actors/players/playerD/states/die.gd | 12 + src/actors/players/playerD/states/fall.gd | 50 ++ src/actors/players/playerD/states/hurt.gd | 57 ++ src/actors/players/playerD/states/idle.gd | 52 ++ src/actors/players/playerD/states/jump.gd | 45 ++ src/actors/players/playerD/states/move.gd | 34 + src/actors/players/playerD/states/roll.gd | 46 ++ 18 files changed, 1592 insertions(+), 4 deletions(-) delete mode 100644 assets create mode 100644 assets/actors/players/playerD/Mega.png create mode 100644 assets/actors/players/playerD/Mega.png.import create mode 100644 src/actors/players/playerD/Player.gd create mode 100644 src/actors/players/playerD/Player.tscn create mode 100644 src/actors/players/playerD/movement_component.gd create mode 100644 src/actors/players/playerD/states/attack.gd create mode 100644 src/actors/players/playerD/states/climb.gd create mode 100644 src/actors/players/playerD/states/dash.gd create mode 100644 src/actors/players/playerD/states/die.gd create mode 100644 src/actors/players/playerD/states/fall.gd create mode 100644 src/actors/players/playerD/states/hurt.gd create mode 100644 src/actors/players/playerD/states/idle.gd create mode 100644 src/actors/players/playerD/states/jump.gd create mode 100644 src/actors/players/playerD/states/move.gd create mode 100644 src/actors/players/playerD/states/roll.gd diff --git a/assets b/assets deleted file mode 100644 index e69de29..0000000 diff --git a/assets/actors/players/playerD/Mega.png b/assets/actors/players/playerD/Mega.png new file mode 100644 index 0000000000000000000000000000000000000000..4175bd288222db2c98a265a483b6bb1a179fbda4 GIT binary patch literal 92692 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�}ssI^y_TJ0=eV#C_>1tLOyWPlE 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 void: + PlayerInfo.player_health = $Health_Component.health + global_position = LevelInfo.player_start_position.transform.origin + movement_component.player_number = player_number + + +var portrait = preload("res://assets/MManPortrait.png") + + +func hit_Receiver(damage): + $Hurtbox_Component.set_hurtbox(false) + $Health_Component.take_damage(damage) + if $Health_Component.health > 0: + movement_state_machine.change_state($movement_state_machine/hurt) + PlayerInfo.player_health = $Health_Component.health + if PlayerInfo.player_health <= 0: + return + yield( get_tree().create_timer(2 + $movement_state_machine/hurt.timeout_seconds), "timeout") + $Hurtbox_Component.set_hurtbox(true) + +func receive_modifier(incomming_modifier :StateModifier, is_adding_modifier_operation: bool): + #var mod :StateModifier + if is_adding_modifier_operation: + print("Player Received modifier:", incomming_modifier.name) + if movement_state_machine.current_state is StateAnimatedActor: + movement_state_machine.current_state.physics_modifier = incomming_modifier + else: + print("Player Removed modifier:", incomming_modifier.name) + if movement_state_machine.current_state is StateAnimatedActor: + movement_state_machine.current_state.physics_modifier = null + +func touch_the_thing(the_thing: Interactable) -> bool: + print("You see! a THING...", the_thing.name) + if the_thing is HealthPickup: + # Do some healthy stuff. + the_thing.trigger_interaction() + return false + return true + +func _on_attack_do_attack(): + var is_shooting = false + print("Direction: ", transform.x.x) + is_shooting = gun.shoot(int(transform.x.x)) + + + +func _on_Health_Component_health_depleted(): + $Hurtbox_Component.set_hurtbox(false) + movement_state_machine.change_state($movement_state_machine/die) + yield( get_tree().create_timer(10), "timeout") + #queue_free() + +func _on_roll_frame_reached(state_name, animation_name, frame_number): + print("I'm invincible!!!") + $Hurtbox_Component.set_hurtbox(false) + +func _on_roll_state_exited(): + print("Nevermind. I'm vulnerable.") + $Hurtbox_Component.set_hurtbox(true) + +func _on_die_state_entered(): + pass # Replace with function body. diff --git a/src/actors/players/playerD/Player.tscn b/src/actors/players/playerD/Player.tscn new file mode 100644 index 0000000..e998bfa --- /dev/null +++ b/src/actors/players/playerD/Player.tscn @@ -0,0 +1,711 @@ +[gd_scene load_steps=127 format=2] + +[ext_resource path="res://lib/templates/Actor/ActorTemplate.tscn" type="PackedScene" id=1] +[ext_resource path="res://actors/players/playerD/movement_component.gd" type="Script" id=2] +[ext_resource path="res://actors/players/playerD/Player.gd" type="Script" id=3] +[ext_resource path="res://actors/players/playerD/states/idle.gd" type="Script" id=4] +[ext_resource path="res://actors/players/playerD/states/move.gd" type="Script" id=5] +[ext_resource path="res://actors/players/playerD/states/fall.gd" type="Script" id=6] +[ext_resource path="res://lib/components/Health_Component.tscn" type="PackedScene" id=7] +[ext_resource path="res://actors/players/playerD/states/jump.gd" type="Script" id=8] +[ext_resource path="res://lib/components/Modifier_Receiver.tscn" type="PackedScene" id=9] +[ext_resource path="res://actors/players/playerD/states/attack.gd" type="Script" id=10] +[ext_resource path="res://actors/players/playerD/states/dash.gd" type="Script" id=11] +[ext_resource path="res://actors/players/playerD/states/hurt.gd" type="Script" id=12] +[ext_resource path="res://actors/players/playerD/states/roll.gd" type="Script" id=14] +[ext_resource path="res://actors/players/playerD/states/die.gd" type="Script" id=15] +[ext_resource path="res://lib/templates/Interactable/Interactable_Receiver.gd" type="Script" id=16] +[ext_resource path="res://actors/players/playerD/states/climb.gd" type="Script" id=17] + +[sub_resource type="RectangleShape2D" id=197] +extents = Vector2( 13, 18.5 ) + +[sub_resource type="StreamTexture" id=90] +load_path = "res://.import/Mega.png-93dfe0790902b932f7b46f7b23c5d4e7.stex" + +[sub_resource type="AtlasTexture" id=91] +atlas = SubResource( 90 ) +region = Rect2( 1680, 960, 240, 160 ) + +[sub_resource type="AtlasTexture" id=92] +atlas = SubResource( 90 ) +region = Rect2( 1920, 960, 240, 160 ) + +[sub_resource type="AtlasTexture" id=93] +atlas = SubResource( 90 ) +region = Rect2( 2160, 960, 240, 160 ) + +[sub_resource type="AtlasTexture" id=94] +atlas = SubResource( 90 ) +region = Rect2( 2400, 960, 240, 160 ) + +[sub_resource type="AtlasTexture" id=95] +atlas = SubResource( 90 ) +region = Rect2( 0, 1120, 240, 160 ) + +[sub_resource type="AtlasTexture" id=96] +atlas = SubResource( 90 ) +region = Rect2( 240, 1120, 240, 160 ) + +[sub_resource type="AtlasTexture" id=97] +atlas = SubResource( 90 ) +region = Rect2( 1440, 960, 240, 160 ) + +[sub_resource type="AtlasTexture" id=98] +atlas = SubResource( 90 ) +region = Rect2( 480, 1120, 240, 160 ) + +[sub_resource type="AtlasTexture" id=99] +atlas = SubResource( 90 ) +region = Rect2( 480, 160, 240, 160 ) + +[sub_resource type="AtlasTexture" id=100] +atlas = SubResource( 90 ) +region = Rect2( 720, 160, 240, 160 ) + +[sub_resource type="AtlasTexture" id=101] +atlas = SubResource( 90 ) +region = Rect2( 960, 160, 240, 160 ) + +[sub_resource type="AtlasTexture" id=102] +atlas = SubResource( 90 ) +region = Rect2( 1200, 160, 240, 160 ) + +[sub_resource type="AtlasTexture" id=103] +atlas = SubResource( 90 ) +region = Rect2( 1440, 160, 240, 160 ) + +[sub_resource type="AtlasTexture" id=104] +atlas = SubResource( 90 ) +region = Rect2( 240, 1440, 240, 160 ) + +[sub_resource type="AtlasTexture" id=105] +atlas = SubResource( 90 ) +region = Rect2( 480, 1440, 240, 160 ) + +[sub_resource type="AtlasTexture" id=106] +atlas = SubResource( 90 ) +region = Rect2( 720, 1440, 240, 160 ) + +[sub_resource type="AtlasTexture" id=107] +atlas = SubResource( 90 ) +region = Rect2( 960, 1440, 240, 160 ) + +[sub_resource type="AtlasTexture" id=108] +atlas = SubResource( 90 ) +region = Rect2( 1200, 1440, 240, 160 ) + +[sub_resource type="AtlasTexture" id=109] +atlas = SubResource( 90 ) +region = Rect2( 1440, 1440, 240, 160 ) + +[sub_resource type="AtlasTexture" id=110] +atlas = SubResource( 90 ) +region = Rect2( 1680, 1440, 240, 160 ) + +[sub_resource type="AtlasTexture" id=111] +atlas = SubResource( 90 ) +region = Rect2( 1920, 1440, 240, 160 ) + +[sub_resource type="AtlasTexture" id=112] +atlas = SubResource( 90 ) +region = Rect2( 2160, 1440, 240, 160 ) + +[sub_resource type="AtlasTexture" id=113] +atlas = SubResource( 90 ) +region = Rect2( 2400, 1440, 240, 160 ) + +[sub_resource type="AtlasTexture" id=114] +atlas = SubResource( 90 ) +region = Rect2( 0, 1600, 240, 160 ) + +[sub_resource type="AtlasTexture" id=115] +atlas = SubResource( 90 ) +region = Rect2( 960, 960, 240, 160 ) + +[sub_resource type="AtlasTexture" id=116] +atlas = SubResource( 90 ) +region = Rect2( 1200, 960, 240, 160 ) + +[sub_resource type="AtlasTexture" id=117] +atlas = SubResource( 90 ) +region = Rect2( 1200, 0, 240, 160 ) + +[sub_resource type="AtlasTexture" id=118] +atlas = SubResource( 90 ) +region = Rect2( 0, 0, 240, 160 ) + +[sub_resource type="AtlasTexture" id=119] +atlas = SubResource( 90 ) +region = Rect2( 1440, 0, 240, 160 ) + +[sub_resource type="AtlasTexture" id=120] +atlas = SubResource( 90 ) +region = Rect2( 1680, 0, 240, 160 ) + +[sub_resource type="AtlasTexture" id=121] +atlas = SubResource( 90 ) +region = Rect2( 1920, 0, 240, 160 ) + +[sub_resource type="AtlasTexture" id=122] +atlas = SubResource( 90 ) +region = Rect2( 2160, 0, 240, 160 ) + +[sub_resource type="AtlasTexture" id=123] +atlas = SubResource( 90 ) +region = Rect2( 240, 1600, 240, 160 ) + +[sub_resource type="AtlasTexture" id=124] +atlas = SubResource( 90 ) +region = Rect2( 480, 1600, 240, 160 ) + +[sub_resource type="AtlasTexture" id=125] +atlas = SubResource( 90 ) +region = Rect2( 720, 1600, 240, 160 ) + +[sub_resource type="AtlasTexture" id=126] +atlas = SubResource( 90 ) +region = Rect2( 240, 160, 240, 160 ) + +[sub_resource type="AtlasTexture" id=127] +atlas = SubResource( 90 ) +region = Rect2( 1680, 160, 240, 160 ) + +[sub_resource type="AtlasTexture" id=128] +atlas = SubResource( 90 ) +region = Rect2( 1920, 160, 240, 160 ) + +[sub_resource type="AtlasTexture" id=129] +atlas = SubResource( 90 ) +region = Rect2( 2160, 160, 240, 160 ) + +[sub_resource type="AtlasTexture" id=130] +atlas = SubResource( 90 ) +region = Rect2( 2400, 160, 240, 160 ) + +[sub_resource type="AtlasTexture" id=131] +atlas = SubResource( 90 ) +region = Rect2( 0, 320, 240, 160 ) + +[sub_resource type="AtlasTexture" id=132] +atlas = SubResource( 90 ) +region = Rect2( 240, 320, 240, 160 ) + +[sub_resource type="AtlasTexture" id=133] +atlas = SubResource( 90 ) +region = Rect2( 480, 320, 240, 160 ) + +[sub_resource type="AtlasTexture" id=134] +atlas = SubResource( 90 ) +region = Rect2( 720, 320, 240, 160 ) + +[sub_resource type="AtlasTexture" id=135] +atlas = SubResource( 90 ) +region = Rect2( 960, 320, 240, 160 ) + +[sub_resource type="AtlasTexture" id=136] +atlas = SubResource( 90 ) +region = Rect2( 1200, 320, 240, 160 ) + +[sub_resource type="AtlasTexture" id=137] +atlas = SubResource( 90 ) +region = Rect2( 1680, 640, 240, 160 ) + +[sub_resource type="AtlasTexture" id=138] +atlas = SubResource( 90 ) +region = Rect2( 1920, 640, 240, 160 ) + +[sub_resource type="AtlasTexture" id=139] +atlas = SubResource( 90 ) +region = Rect2( 2160, 640, 240, 160 ) + +[sub_resource type="AtlasTexture" id=140] +atlas = SubResource( 90 ) +region = Rect2( 2400, 640, 240, 160 ) + +[sub_resource type="AtlasTexture" id=141] +atlas = SubResource( 90 ) +region = Rect2( 0, 800, 240, 160 ) + +[sub_resource type="AtlasTexture" id=142] +atlas = SubResource( 90 ) +region = Rect2( 240, 800, 240, 160 ) + +[sub_resource type="AtlasTexture" id=143] +atlas = SubResource( 90 ) +region = Rect2( 480, 800, 240, 160 ) + +[sub_resource type="AtlasTexture" id=144] +atlas = SubResource( 90 ) +region = Rect2( 720, 800, 240, 160 ) + +[sub_resource type="AtlasTexture" id=145] +atlas = SubResource( 90 ) +region = Rect2( 960, 800, 240, 160 ) + +[sub_resource type="AtlasTexture" id=146] +atlas = SubResource( 90 ) +region = Rect2( 1200, 800, 240, 160 ) + +[sub_resource type="AtlasTexture" id=147] +atlas = SubResource( 90 ) +region = Rect2( 1440, 800, 240, 160 ) + +[sub_resource type="AtlasTexture" id=148] +atlas = SubResource( 90 ) +region = Rect2( 1920, 320, 240, 160 ) + +[sub_resource type="AtlasTexture" id=149] +atlas = SubResource( 90 ) +region = Rect2( 2160, 320, 240, 160 ) + +[sub_resource type="AtlasTexture" id=150] +atlas = SubResource( 90 ) +region = Rect2( 2400, 320, 240, 160 ) + +[sub_resource type="AtlasTexture" id=151] +atlas = SubResource( 90 ) +region = Rect2( 0, 480, 240, 160 ) + +[sub_resource type="AtlasTexture" id=152] +atlas = SubResource( 90 ) +region = Rect2( 240, 480, 240, 160 ) + +[sub_resource type="AtlasTexture" id=153] +atlas = SubResource( 90 ) +region = Rect2( 480, 480, 240, 160 ) + +[sub_resource type="AtlasTexture" id=154] +atlas = SubResource( 90 ) +region = Rect2( 720, 480, 240, 160 ) + +[sub_resource type="AtlasTexture" id=155] +atlas = SubResource( 90 ) +region = Rect2( 960, 480, 240, 160 ) + +[sub_resource type="AtlasTexture" id=156] +atlas = SubResource( 90 ) +region = Rect2( 1200, 480, 240, 160 ) + +[sub_resource type="AtlasTexture" id=157] +atlas = SubResource( 90 ) +region = Rect2( 1440, 480, 240, 160 ) + +[sub_resource type="AtlasTexture" id=158] +atlas = SubResource( 90 ) +region = Rect2( 1920, 480, 240, 160 ) + +[sub_resource type="AtlasTexture" id=159] +atlas = SubResource( 90 ) +region = Rect2( 2160, 480, 240, 160 ) + +[sub_resource type="AtlasTexture" id=160] +atlas = SubResource( 90 ) +region = Rect2( 2400, 480, 240, 160 ) + +[sub_resource type="AtlasTexture" id=161] +atlas = SubResource( 90 ) +region = Rect2( 0, 640, 240, 160 ) + +[sub_resource type="AtlasTexture" id=162] +atlas = SubResource( 90 ) +region = Rect2( 240, 640, 240, 160 ) + +[sub_resource type="AtlasTexture" id=163] +atlas = SubResource( 90 ) +region = Rect2( 480, 640, 240, 160 ) + +[sub_resource type="AtlasTexture" id=164] +atlas = SubResource( 90 ) +region = Rect2( 720, 640, 240, 160 ) + +[sub_resource type="AtlasTexture" id=165] +atlas = SubResource( 90 ) +region = Rect2( 960, 640, 240, 160 ) + +[sub_resource type="AtlasTexture" id=166] +atlas = SubResource( 90 ) +region = Rect2( 1200, 640, 240, 160 ) + +[sub_resource type="AtlasTexture" id=167] +atlas = SubResource( 90 ) +region = Rect2( 1440, 640, 240, 160 ) + +[sub_resource type="AtlasTexture" id=168] +atlas = SubResource( 90 ) +region = Rect2( 2400, 0, 240, 160 ) + +[sub_resource type="AtlasTexture" id=169] +atlas = SubResource( 90 ) +region = Rect2( 0, 160, 240, 160 ) + +[sub_resource type="AtlasTexture" id=170] +atlas = SubResource( 90 ) +region = Rect2( 720, 1120, 240, 160 ) + +[sub_resource type="AtlasTexture" id=171] +atlas = SubResource( 90 ) +region = Rect2( 960, 1120, 240, 160 ) + +[sub_resource type="AtlasTexture" id=172] +atlas = SubResource( 90 ) +region = Rect2( 1200, 1120, 240, 160 ) + +[sub_resource type="AtlasTexture" id=173] +atlas = SubResource( 90 ) +region = Rect2( 1440, 1120, 240, 160 ) + +[sub_resource type="AtlasTexture" id=174] +atlas = SubResource( 90 ) +region = Rect2( 1680, 1120, 240, 160 ) + +[sub_resource type="AtlasTexture" id=175] +atlas = SubResource( 90 ) +region = Rect2( 1920, 1120, 240, 160 ) + +[sub_resource type="AtlasTexture" id=176] +atlas = SubResource( 90 ) +region = Rect2( 2160, 1120, 240, 160 ) + +[sub_resource type="AtlasTexture" id=177] +atlas = SubResource( 90 ) +region = Rect2( 2400, 1120, 240, 160 ) + +[sub_resource type="AtlasTexture" id=178] +atlas = SubResource( 90 ) +region = Rect2( 0, 1280, 240, 160 ) + +[sub_resource type="AtlasTexture" id=179] +atlas = SubResource( 90 ) +region = Rect2( 240, 1280, 240, 160 ) + +[sub_resource type="AtlasTexture" id=180] +atlas = SubResource( 90 ) +region = Rect2( 480, 1280, 240, 160 ) + +[sub_resource type="AtlasTexture" id=181] +atlas = SubResource( 90 ) +region = Rect2( 720, 1280, 240, 160 ) + +[sub_resource type="AtlasTexture" id=182] +atlas = SubResource( 90 ) +region = Rect2( 960, 1280, 240, 160 ) + +[sub_resource type="AtlasTexture" id=183] +atlas = SubResource( 90 ) +region = Rect2( 1200, 1280, 240, 160 ) + +[sub_resource type="AtlasTexture" id=184] +atlas = SubResource( 90 ) +region = Rect2( 1440, 1280, 240, 160 ) + +[sub_resource type="AtlasTexture" id=185] +atlas = SubResource( 90 ) +region = Rect2( 1680, 1280, 240, 160 ) + +[sub_resource type="AtlasTexture" id=186] +atlas = SubResource( 90 ) +region = Rect2( 1920, 1280, 240, 160 ) + +[sub_resource type="AtlasTexture" id=187] +atlas = SubResource( 90 ) +region = Rect2( 2160, 1280, 240, 160 ) + +[sub_resource type="AtlasTexture" id=188] +atlas = SubResource( 90 ) +region = Rect2( 2400, 1280, 240, 160 ) + +[sub_resource type="AtlasTexture" id=189] +atlas = SubResource( 90 ) +region = Rect2( 0, 1440, 240, 160 ) + +[sub_resource type="AtlasTexture" id=190] +atlas = SubResource( 90 ) +region = Rect2( 240, 0, 240, 160 ) + +[sub_resource type="AtlasTexture" id=191] +atlas = SubResource( 90 ) +region = Rect2( 480, 0, 240, 160 ) + +[sub_resource type="AtlasTexture" id=192] +atlas = SubResource( 90 ) +region = Rect2( 720, 0, 240, 160 ) + +[sub_resource type="AtlasTexture" id=193] +atlas = SubResource( 90 ) +region = Rect2( 960, 0, 240, 160 ) + +[sub_resource type="AtlasTexture" id=194] +atlas = SubResource( 90 ) +region = Rect2( 1680, 320, 240, 160 ) + +[sub_resource type="AtlasTexture" id=195] +atlas = SubResource( 90 ) +region = Rect2( 1680, 480, 240, 160 ) + +[sub_resource type="SpriteFrames" id=196] +animations = [ { +"frames": [ SubResource( 91 ), SubResource( 92 ), SubResource( 93 ), SubResource( 94 ), SubResource( 95 ), SubResource( 96 ) ], +"loop": true, +"name": "climb", +"speed": 10.0 +}, { +"frames": [ SubResource( 97 ) ], +"loop": false, +"name": "climb_step", +"speed": 10.0 +}, { +"frames": [ SubResource( 98 ) ], +"loop": false, +"name": "climb_upstep", +"speed": 10.0 +}, { +"frames": [ SubResource( 99 ), SubResource( 99 ), SubResource( 99 ), SubResource( 100 ), SubResource( 101 ), SubResource( 102 ), SubResource( 103 ), SubResource( 103 ), SubResource( 103 ) ], +"loop": false, +"name": "dash", +"speed": 10.0 +}, { +"frames": [ SubResource( 104 ), SubResource( 105 ), SubResource( 106 ), SubResource( 107 ), SubResource( 108 ), SubResource( 109 ), SubResource( 110 ), SubResource( 111 ), SubResource( 112 ), SubResource( 113 ), SubResource( 112 ), SubResource( 114 ) ], +"loop": false, +"name": "die", +"speed": 10.0 +}, { +"frames": [ SubResource( 115 ), SubResource( 116 ) ], +"loop": true, +"name": "hurt", +"speed": 4.0 +}, { +"frames": [ SubResource( 117 ), SubResource( 117 ), SubResource( 117 ), SubResource( 117 ), SubResource( 117 ), SubResource( 117 ), SubResource( 117 ), SubResource( 117 ), SubResource( 117 ), SubResource( 117 ), SubResource( 117 ), SubResource( 117 ), SubResource( 117 ), SubResource( 117 ), SubResource( 117 ), SubResource( 117 ), SubResource( 117 ), SubResource( 117 ), SubResource( 117 ), SubResource( 117 ), SubResource( 117 ), SubResource( 117 ), SubResource( 117 ), SubResource( 117 ), SubResource( 117 ), SubResource( 117 ), SubResource( 117 ), SubResource( 117 ), SubResource( 117 ), SubResource( 117 ), SubResource( 118 ), SubResource( 119 ), SubResource( 120 ), SubResource( 121 ), SubResource( 122 ) ], +"loop": true, +"name": "idle", +"speed": 10.0 +}, { +"frames": [ SubResource( 123 ), SubResource( 124 ), SubResource( 125 ) ], +"loop": true, +"name": "idle_shield", +"speed": 10.0 +}, { +"frames": [ SubResource( 126 ) ], +"loop": true, +"name": "idle_shoot", +"speed": 10.0 +}, { +"frames": [ SubResource( 127 ), SubResource( 128 ), SubResource( 129 ), SubResource( 130 ), SubResource( 128 ), SubResource( 131 ), SubResource( 132 ), SubResource( 133 ) ], +"loop": false, +"name": "jump", +"speed": 10.0 +}, { +"frames": [ SubResource( 134 ), SubResource( 134 ), SubResource( 134 ), SubResource( 134 ), SubResource( 134 ), SubResource( 134 ), SubResource( 135 ), SubResource( 136 ) ], +"loop": false, +"name": "jump_shoot", +"speed": 10.0 +}, { +"frames": [ SubResource( 137 ), SubResource( 138 ), SubResource( 139 ), SubResource( 140 ), SubResource( 141 ), SubResource( 142 ), SubResource( 143 ), SubResource( 144 ), SubResource( 145 ), SubResource( 146 ), SubResource( 147 ) ], +"loop": false, +"name": "roll", +"speed": 10.0 +}, { +"frames": [ SubResource( 148 ), SubResource( 149 ), SubResource( 150 ), SubResource( 151 ), SubResource( 152 ), SubResource( 153 ), SubResource( 154 ), SubResource( 155 ), SubResource( 156 ), SubResource( 157 ) ], +"loop": true, +"name": "run", +"speed": 10.0 +}, { +"frames": [ SubResource( 158 ), SubResource( 159 ), SubResource( 160 ), SubResource( 161 ), SubResource( 162 ), SubResource( 163 ), SubResource( 164 ), SubResource( 165 ), SubResource( 166 ), SubResource( 167 ) ], +"loop": true, +"name": "run_shoot", +"speed": 10.0 +}, { +"frames": [ SubResource( 168 ), SubResource( 169 ), SubResource( 126 ) ], +"loop": false, +"name": "shoot", +"speed": 10.0 +}, { +"frames": [ SubResource( 170 ), SubResource( 171 ), SubResource( 172 ), SubResource( 172 ), SubResource( 173 ), SubResource( 174 ), SubResource( 175 ), SubResource( 176 ), SubResource( 176 ), SubResource( 177 ), SubResource( 178 ), SubResource( 179 ), SubResource( 180 ), SubResource( 181 ), SubResource( 182 ), SubResource( 183 ), SubResource( 184 ), SubResource( 185 ), SubResource( 186 ), SubResource( 187 ), SubResource( 188 ), SubResource( 189 ) ], +"loop": true, +"name": "slash", +"speed": 10.0 +}, { +"frames": [ SubResource( 118 ), SubResource( 190 ), SubResource( 191 ), SubResource( 192 ), SubResource( 193 ) ], +"loop": false, +"name": "stand", +"speed": 10.0 +}, { +"frames": [ SubResource( 194 ) ], +"loop": false, +"name": "step", +"speed": 10.0 +}, { +"frames": [ SubResource( 195 ) ], +"loop": false, +"name": "step_shoot", +"speed": 10.0 +} ] + +[sub_resource type="RectangleShape2D" id=89] +extents = Vector2( 12, 16 ) + +[node name="Player" instance=ExtResource( 1 )] +script = ExtResource( 3 ) +actor_type = "Player" +player_number = 1 + +[node name="CollisionShape2D" type="CollisionShape2D" parent="." index="0"] +position = Vector2( 0, -3.5 ) +shape = SubResource( 197 ) + +[node name="AnimatedSprite" parent="." index="1"] +position = Vector2( -1, -51 ) +frames = SubResource( 196 ) +animation = "idle_shoot" +frame = 0 +flip_h = false +__meta__ = { +"_aseprite_wizard_config_": { +"layer": "", +"o_ex_p": "_+", +"o_folder": "res://assets", +"o_name": "", +"only_visible": true, +"op_exp": false, +"slice": "", +"source": "D:/Sync/Assets/Library/Mega.ase" +} +} + +[node name="movement_component" parent="." index="2"] +script = ExtResource( 2 ) +player_number = 1 +interactable_node = NodePath("../Interactable_Receiver") + +[node name="idle" parent="movement_state_machine" index="0"] +script = ExtResource( 4 ) +debug_state = true +move_speed = 0.0 +animation_sequence = [ "idle" ] +jump_node = NodePath("../jump") +attack_node = NodePath("../attack") +dash_node = NodePath("../dash") +roll_node = NodePath("../roll") +climb_node = NodePath("../climb") + +[node name="fall" parent="movement_state_machine" index="1"] +script = ExtResource( 6 ) +move_speed = 90.0 +animation_sequence = [ "jump" ] +landing_node = NodePath("") + +[node name="move" parent="movement_state_machine" index="2"] +script = ExtResource( 5 ) +move_speed = 90.0 +animation_sequence = [ "step", "run" ] +jump_node = NodePath("../jump") +attack_node = NodePath("../attack") + +[node name="jump" type="Node" parent="movement_state_machine" index="3"] +script = ExtResource( 8 ) +move_speed = 90.0 +move_modifier_move_acceleration = -100.0 +animation_sequence = [ "jump" ] +idle_node = NodePath("../idle") +fall_node = NodePath("../fall") +attack_node = NodePath("../attack") +jump_force = 250.0 + +[node name="attack" type="Node" parent="movement_state_machine" index="4"] +script = ExtResource( 10 ) +timeout_seconds = 1.5 +move_speed = 90.0 +animation_sequence = [ "shoot" ] +jump_node = NodePath("../jump") +idle_node = NodePath("../idle") +fall_node = NodePath("../fall") +move_node = NodePath("../move") + +[node name="hurt" type="Node" parent="movement_state_machine" index="5"] +script = ExtResource( 12 ) +timeout_seconds = 2.0 +move_speed = -10.0 +animation_sequence = [ "hurt" ] +idle_node = NodePath("../idle") + +[node name="dash" type="Node" parent="movement_state_machine" index="6"] +script = ExtResource( 11 ) +move_speed = 90.0 +move_speed_modifier = 90.0 +move_modifier_move_acceleration = -100.0 +jerk_factor = -20.0 +animation_sequence = [ "dash" ] +fall_node = NodePath("../fall") +idle_node = NodePath("../idle") +attack_node = NodePath("../attack") +jump_node = NodePath("../jump") + +[node name="roll" type="Node" parent="movement_state_machine" index="7"] +script = ExtResource( 14 ) +move_speed = 150.0 +animation_sequence = [ "roll" ] +emitter_frame_subscriptions = { +2: "roll" +} +fall_node = NodePath("../fall") +idle_node = NodePath("../idle") + +[node name="die" type="Node" parent="movement_state_machine" index="8"] +script = ExtResource( 15 ) +animation_sequence = [ "die" ] + +[node name="climb" type="Node" parent="movement_state_machine" index="9"] +script = ExtResource( 17 ) +debug_state = true +animation_sequence = [ "climb_step", "climb", "climb_upstep" ] +idle_node = NodePath("../idle") + +[node name="Hurtbox_Component" parent="." index="4"] +collision_layer = 16 +collision_mask = 128 +hurtbox_entered_function = "hit_Receiver" + +[node name="CollisionShape2D" parent="Hurtbox_Component" index="0"] +position = Vector2( 0, -2 ) +shape = SubResource( 89 ) + +[node name="Health_Component" parent="." index="6" instance=ExtResource( 7 )] +max_health = 100 + +[node name="Gun" type="Position2D" parent="." index="7"] +physics_interpolation_mode = 1 +position = Vector2( 23, -9 ) +script = ExtResource( 13 ) + +[node name="Cooldown" type="Timer" parent="Gun" index="0"] +wait_time = 0.5 +one_shot = true + +[node name="Line2D" type="Line2D" parent="Gun" index="1"] +position = Vector2( -3, 0 ) +points = PoolVector2Array( -5, 0, 1.25483, 0, 5, 0 ) +width = 2.0 +default_color = Color( 1, 0.607843, 0, 1 ) + +[node name="Interactable_Receiver" type="Node2D" parent="." index="8"] +script = ExtResource( 16 ) +interactable_parent_callback = "touch_the_thing" + +[node name="Modifier_Receiver" parent="." index="9" instance=ExtResource( 9 )] +modifier_parent_callback = "receive_modifier" +debug_receiver = true + +[node name="Ladder_Detection" type="RayCast2D" parent="." index="10"] +modulate = Color( 0.247059, 0.92549, 0.0313726, 1 ) +position = Vector2( 0, 5 ) +enabled = true +cast_to = Vector2( 0, 15 ) +collision_mask = 1024 +collide_with_areas = true +collide_with_bodies = false + +[connection signal="do_attack" from="movement_state_machine/attack" to="." method="_on_attack_do_attack"] +[connection signal="frame_reached" from="movement_state_machine/roll" to="." method="_on_roll_frame_reached"] +[connection signal="state_exited" from="movement_state_machine/roll" to="." method="_on_roll_state_exited"] +[connection signal="state_entered" from="movement_state_machine/die" to="." method="_on_die_state_entered"] +[connection signal="health_depleted" from="Health_Component" to="." method="_on_Health_Component_health_depleted"] diff --git a/src/actors/players/playerD/movement_component.gd b/src/actors/players/playerD/movement_component.gd new file mode 100644 index 0000000..613acc5 --- /dev/null +++ b/src/actors/players/playerD/movement_component.gd @@ -0,0 +1,140 @@ +extends MovementComponent + +## Constants available to you +# UP = -1.0 +# DOWN = 1.0 +# LEFT = -1.0 +# RIGHT = 1.0 + +# Avalable functions to call +# A Series of helper functions +# go_up(): +# go_down(): +# go_left(): +# go_right(): +# stop(): + + +export var player_number: int = 1 + +export (NodePath) var interactable_node + +onready var interactable_receiver_node: Interactable_Receiver = get_node(interactable_node) +onready var ladder_detection:RayCast2D = $"../Ladder_Detection" + +var ladder_collision: RayCast2D + +func _ready(): + ladder_collision = ladder_detection + # Guess there isn't a hit from inside in 3.5 + # Remember to make raycast as tall as needed for the player + #ladder_collision.hit_from_inside = true + +func process_physics(delta): + PlayerInfo.player_position = owner.global_position + +func process_input(event: InputEvent): + var interactables = interactable_receiver_node.interactable_function_callables + for interactable in interactables: # Iterate through the interactable collection + if interactable is Interactable: # Make sure we didn't push something dumb in there. + if (Input.is_action_pressed("ui_up")): # We pressed up? + interactable.trigger_interaction() + get_movement_direction() + + +# Return the desired direction of movement for the character +# in the range [-1, 1], where positive values indicate a desire +# to move to the right and negative values to the left. +func get_movement_direction() -> float: + #return Input.get_axis('move_left', 'move_right') + desired_movement_vector.x = Input.get_axis("move_left_" + str(player_number), "move_right_" + str(player_number)) + return Input.get_axis("move_left_" + str(player_number), "move_right_" + str(player_number)) + +# Return a boolean indicating if the character wants to jump +func wants_jump() -> bool: + + if Input.is_action_just_pressed("jump_" + str(player_number)): + desired_movement_vector.y = 1 + return true + else: + return false + +# Return a boolean indicating if the character wants to jump +func wants_shoot() -> bool: + if Input.is_action_just_pressed("shoot_" + str(player_number)): + return true + else: + return false + +func wants_dash() -> bool: + if Input.is_action_just_pressed("dash_" + str(player_number)): + return true + else: + return false + +func wants_roll() -> bool: + if Input.is_action_just_pressed("dash_" + str(player_number)) and Input.is_action_pressed("ui_up"): + return true + else: + return false + +func wants_climb() -> bool: + if ladder_detection.is_colliding() and Input.is_action_pressed("ui_up"): + #print("betcha wanna climb though!") + return true + else: + return false + +func get_climb_shape_location() -> Vector2: + if ladder_detection.is_colliding(): + var point: Vector2 = ladder_collision.get_collision_point() + var shape_id = ladder_collision.get_collider_shape() + var object = ladder_collision.get_collider() + + # This works but doesn't get the shapes location. +# if object is Area2D: +# print("You got an area bro!" , object.global_position) + + + # This appears to get the shapes location! + var area = Physics2DServer.area_get_transform(object) + var areashape = Physics2DServer.area_get_shape_transform(object, shape_id) + + + var y_dir = Input.get_axis("ui_up" , "ui_down") +#var target = get_collider() # A CollisionObject2D. +#var shape_id = get_collider_shape() # The shape index in the collider. +#var owner_id = target.shape_find_owner(shape_id) # The owner ID in the collider. +#var shape = target.shape_owner_get_owner(owner_id) + + #UiManager.debug_text = str(round(point.x)) + ' ' + str(round(point.y)) #( "Mod(" + str(sign(_move_speed_modifier)) + ") Dir(" + str(move_direction) + ") Vel(" + str(sign(current_x_velocity)) + ") Mov(" + str(sign(move_component.desired_movement_vector.x)) + + + return Vector2(areashape.origin.x, y_dir) + else: + return Vector2(-1,-1) + +## Other needed variables +# desired_movement_vector: Vector2 - Used to store desired movement depending on the state +# current_movement_state:String - The name of the current State + +# Since animactor state machine can actually view properties from this type +# I'm thinking about moving the velocity tracker in here instead of player. +# velocity: Vector2 - Current velocity, you can change this at will but state may modify it + +# Declare any other member variables here. Examples: +# var a = 2 +# var b = "text" + + +# Called every frame. 'delta' is the elapsed time since the previous frame. +# you do not normally need to define this for Actor +#func process(delta): +# pass + +# For Enemy and NPC Actors: +# should be called on the frame process. + +# For Player Actors: +# Should be called on the input process + + diff --git a/src/actors/players/playerD/states/attack.gd b/src/actors/players/playerD/states/attack.gd new file mode 100644 index 0000000..cfbff07 --- /dev/null +++ b/src/actors/players/playerD/states/attack.gd @@ -0,0 +1,140 @@ +extends StateAnimatedActor + +export (NodePath) var jump_node +export (NodePath) var idle_node +export (NodePath) var fall_node +export (NodePath) var move_node +export (NodePath) var draw_weapon_node + +onready var jump_state: StateAnimatedActor = get_node(jump_node) +onready var idle_state: StateAnimatedActor = get_node(idle_node) +onready var fall_state: StateAnimatedActor = get_node(fall_node) +onready var move_state: StateAnimatedActor = get_node(move_node) +#onready var weapon_state_modifier: StateModifier = get_node(draw_weapon_node) + + +var can_fire = true +signal do_attack() + +var draw_weapon_modifier: StateModifier + +func _ready(): + state_timeout.connect("timeout", self, "disable_cooldown") + draw_weapon_modifier = StateModifier.new() + var mod_timer :Timer = draw_weapon_modifier.ready( "draw_weapon", "_shoot" , draw_weapon_modifier.TYPE.ANIMATION_SUFFIX, 2.0) + add_child(mod_timer) + + +func disable_cooldown(): + if debug_state: + print("Attack state cooldown timeout. Can attack again.") + state_ready = true + +func enter() -> void: + if modifier: + if modifier.get_instance_id() == draw_weapon_modifier.get_instance_id(): + #print ("They the same cannot apply modifier: ", draw_weapon_modifier.get_instance_id()) + modifier = null + .enter() + ##TODO: Turn this to clear only the animation modifiers. +# modifier_stack_ref.clear() +# mod_animation_sequence.clear() +# #mod_animation_sequence = animation_sequence.duplicate(true) +# mod_animation_sequence.append_array(animation_sequence) +# # Reset animation suffix in case there isn't one +# animation_suffix = '_shoot' +# animation_index = 0 +# current_animation_sequence = 0 +# #var enter_animation = '' +# var enter_frame = 0 +# +# if debug_state: +# print(parent.name, " entering State: ", self.name) +# move_component.current_movement_state = self.name +# emit_signal("state_entered") + + can_fire = true +# if modifier_stack_ref.has($"../draw_weapon") == false: +# $"../draw_weapon".enter() +# modifier_stack_ref.push_front($"../draw_weapon") + if debug_state: + print("Previous State Info: ", previous_animation_name, " ", + previous_state_frame_number, " ", previous_state_name) + match previous_animation_name: + "idle": + #animations.play("idle_shoot") + if debug_state: + print("no need to change idle animation") + "run": + animations.play("run_shoot") + animations.frame = previous_state_frame_number + "jump": + animations.play("jump_shoot") + animations.frame = previous_state_frame_number + if debug_state: + print("Starting Animation: jump_shoot at frame ", animations.animation , animations.frame) + _: + print("Warning!: Attack state encountered unhandled prev animation: ", previous_animation_name) + + # An example where the modifier is left to alert on a timeout + #mod_timer.connect("timeout", draw_weapon_modifier, "_on_Timer_timeout") + # An example where the current node subscribes + #mod_timer.connect("timeout", self, "_on_Timer_timeout") + + state_timeout.start() + draw_weapon_modifier.state_timeout.start() + state_ready = false + animation_finished = false + +func _on_Timer_timeout(): + print("Modifier Timeout from attack! Forcing animation recall") + #animations.stop() + +func process_frame(delta: float) -> State: + if animation_finished: + draw_weapon_modifier.state_timeout.start() + modifier = draw_weapon_modifier + return idle_state +# if animations.frame == 2: +# animations.stop() +# if state_timeout.time_left == 0 and animations.animation == "shoot": +# return idle_state + return null + + +func process_physics(delta: float) -> State: + + if can_fire: # trying to do this in the physics because irrecular behavior + emit_signal("do_attack") + can_fire = false + + if move_component.wants_jump() and parent.is_on_floor(): + draw_weapon_modifier.state_timeout.start() + jump_state.modifier = draw_weapon_modifier + return jump_state + + move_actor_as_desired(delta) + +# if previous_state_name == "move" and move_component.velocity.x == 0.0: +# return idle_state + + if move_component.velocity.x != 0.0: + draw_weapon_modifier.state_timeout.start() + move_state.modifier = draw_weapon_modifier + #draw_weapon_modifier.transfer_owner(move_state) + return move_state + + if move_component.get_movement_direction() != 0.0: + parent.transform.x.x = move_component.get_movement_direction() + +# if move_component.velocity.x != 0.0: +# return move_state + + if !parent.is_on_floor(): + draw_weapon_modifier.state_timeout.start() + fall_state.modifier = draw_weapon_modifier + return fall_state + + + return null + diff --git a/src/actors/players/playerD/states/climb.gd b/src/actors/players/playerD/states/climb.gd new file mode 100644 index 0000000..ef1aa33 --- /dev/null +++ b/src/actors/players/playerD/states/climb.gd @@ -0,0 +1,51 @@ +extends StateAnimatedActor + +export (NodePath) var idle_node + +onready var idle_state: StateAnimatedActor = get_node(idle_node) +#onready var landing_mod: StateModifier = get_node(landing_node) + +var climbing_modifier: StateModifier + +func _ready(): + climbing_modifier= StateModifier.new() + #add_child(modifier) + #modifier.init_ref() +# climbing_modifier.ready( "landing", "jump" , climbing_modifier.TYPE.EXIT_ANIMATION) +# climbing_modifier.starting_frame = 6 + #print("ready! MOD") + + +func enter() -> void: + .enter() + animations.frame = 5 + +func process_physics(delta: float) -> State: + + # First allow horizontal movement. + #move_actor_as_desired(delta) + # Make wure we still want to climb + var ladder_location = move_component.get_climb_shape_location() + if ladder_location != Vector2(-1,-1): + UiManager.debug_text = str(ladder_location) + '\n' + str(ladder_location - parent.global_position) #+ '\n' + str(parent.global_position.distance_to(ladder_location)) + # An attempt to snap to the ladder location + if parent.global_position.x != round(ladder_location.x): + parent.global_translate(Vector2(round((ladder_location.x - parent.global_position.x)),(ladder_location.y * move_speed) * delta)) + if ladder_location.y != 0: + animations.play() + else: + # Make sure we hopped the step index + if animation_index > 0: + animations.stop() + else: + return idle_state + #parent.move_local_x() + #Flip the character before tha actual move maybe. + if move_component.get_movement_direction() != 0.0: + parent.transform.x.x = move_component.get_movement_direction() + +# if parent.is_on_floor(): +# #modifier.reference() +# idle_state.modifier = climbing_modifier +# return idle_state + return null diff --git a/src/actors/players/playerD/states/dash.gd b/src/actors/players/playerD/states/dash.gd new file mode 100644 index 0000000..ed56282 --- /dev/null +++ b/src/actors/players/playerD/states/dash.gd @@ -0,0 +1,78 @@ +extends StateAnimatedActor + +export (NodePath) var fall_node +export (NodePath) var idle_node +export (NodePath) var attack_node +export (NodePath) var jump_node + +onready var jump_state: State = get_node(jump_node) +onready var fall_state: State = get_node(fall_node) +onready var idle_state: State = get_node(idle_node) +onready var attack_state: State = get_node(attack_node) + +#var speed_decay_rate := 1.0 + +func process_physics(delta: float) -> State: + +# if move_component.wants_shoot(): +# return attack_state + + if move_component.wants_jump(): + return jump_state + + # Move the last direction we were facing. + move_actor_as_desired(delta, parent.transform.x.x) +# # Assuming adjusted_move_speed is set to the mood speed modifier on state entry +# # Move speed is the base speed plus the modifier minus the decay adjusted for time +# jerk += jerk_factor * delta +# adjusted_move_speed += move_modifier_move_acceleration * delta +# var new_move_speed = move_speed + (move_acceleration * delta) + adjusted_move_speed + jerk +# +# # A really crappy normalization to prevent modifying past the base move speed. +# if move_speed_modifier > 0 and new_move_speed < move_speed: # positive modifier +# #print("nope1") +# new_move_speed = move_speed +# elif move_speed_modifier < 0 and new_move_speed > move_speed: # negative modifier +# #print("nope2") +# new_move_speed = move_speed +# else: +# UiManager.debug_text = str(round(adjusted_move_speed)) + "," + str(round(new_move_speed)) + "," + str(round(jerk)) +# #print(adjusted_move_speed, ",", new_move_speed, ",", jerk) +# +# #print(new_move_speed, " ", adjusted_move_speed) +# +# move_component.velocity.y += gravity * delta +# #parent.velocity = parent.move_and_slide(parent.velocity, Vector2(0, -1)) +# #print(speed_multiplier) +# move_component.velocity.x = parent.transform.x.x * new_move_speed +# move_component.velocity = parent.move_and_slide(move_component.velocity, Vector2(0, -1)) + + ## Trying a whole new model +# var new_move_speed = move_speed * speed_multiplier +# if speed_multiplier > 1.0: +# print("PPS: ", new_move_speed * delta) +# speed_multiplier -= delta * (speed_decay_rate * speed_multiplier) +# #speed_decay_rate += delta * speed_decay_rate +# +# elif speed_multiplier < 1.0: +# speed_multiplier += delta * (speed_decay_rate * speed_multiplier) +# #speed_decay_rate += delta * speed_decay_rate +# +# # Deadzone +# if speed_multiplier < 1.1 and speed_multiplier > 0.9: +# speed_multiplier = 1.0 +# +# move_component.velocity.y += gravity * delta +# #parent.velocity = parent.move_and_slide(parent.velocity, Vector2(0, -1)) +# #print(speed_multiplier) +# move_component.velocity.x = parent.transform.x.x * new_move_speed +# move_component.velocity = parent.move_and_slide(move_component.velocity, Vector2(0, -1)) + + + if move_component.velocity.x == 0.0 or animations.playing == false: + if !parent.is_on_floor(): + return fall_state + else: + return idle_state + + return null diff --git a/src/actors/players/playerD/states/die.gd b/src/actors/players/playerD/states/die.gd new file mode 100644 index 0000000..6ce3602 --- /dev/null +++ b/src/actors/players/playerD/states/die.gd @@ -0,0 +1,12 @@ +extends StateAnimatedActor + +func enter() -> void: +# modifier_stack_ref.clear() + .enter() + move_component.velocity.x = 0 + + +func process_physics(_delta: float) -> State: + #Dead Dead dead. + #move_actor_as_desired(_delta) + return null diff --git a/src/actors/players/playerD/states/fall.gd b/src/actors/players/playerD/states/fall.gd new file mode 100644 index 0000000..78f2ed3 --- /dev/null +++ b/src/actors/players/playerD/states/fall.gd @@ -0,0 +1,50 @@ +extends StateAnimatedActor + +export (NodePath) var idle_node +export (NodePath) var landing_node + +onready var idle_state: StateAnimatedActor = get_node(idle_node) +#onready var landing_mod: StateModifier = get_node(landing_node) + +var landing_modifier: StateModifier + +func _ready(): + landing_modifier= StateModifier.new() + #add_child(modifier) + #modifier.init_ref() + landing_modifier.ready( "landing", "jump" , landing_modifier.TYPE.EXIT_ANIMATION) + landing_modifier.starting_frame = 6 + #print("ready! MOD") + + +func enter() -> void: +# var landing_mod_index = modifier_stack_ref.rfind(landing_mod) +# if landing_mod_index != -1: +# #print("You're Supposed to be dead!?: ", landing_mod_index) +# modifier_stack_ref.remove(landing_mod_index) + .enter() + # Jump to fall frame + animations.frame = 5 + animations.stop() + +func process_physics(delta: float) -> State: + + # First allow horizontal movement. + move_actor_as_desired(delta) + + #Flip the character before tha actual move maybe. + if move_component.get_movement_direction() != 0.0: + parent.transform.x.x = move_component.get_movement_direction() + + if parent.is_on_floor(): + #modifier.reference() + idle_state.modifier = landing_modifier + return idle_state + return null + +#func exit() -> void: +# .exit() +## push_animation_state_modifier(landing_mod) +## $"../landing".enter() +## modifier_stack_ref.push_front($"../landing") +# return diff --git a/src/actors/players/playerD/states/hurt.gd b/src/actors/players/playerD/states/hurt.gd new file mode 100644 index 0000000..c044e78 --- /dev/null +++ b/src/actors/players/playerD/states/hurt.gd @@ -0,0 +1,57 @@ +extends StateAnimatedActor + +export (NodePath) var idle_node + +onready var idle_state: State = get_node(idle_node) + +var flash_color = Color.yellow + +var store_modifier: StateModifier + +func enter() -> void: + if modifier: + if debug_state: + print(name, " skipping modifier and holding for next state.") + store_modifier = modifier + modifier = null +# modifier_stack_ref.clear() + .enter() + move_component.velocity.x = 0 + #parent.set_hurtbox(false) + #TODO: Error check if timer was actually instanced + state_timeout.start() + +func exit() -> void: + modifier = store_modifier + .exit() + animations.modulate = Color.white + +func process_input(_event: InputEvent) -> State: +# move_component.wants_jump() + move_component.get_movement_direction() + + return null + + +func process_frame(delta: float) -> State: + + # Apply a little effect when damage taken. + #UiManager.debug_text = str(abs(sin((ceil(state_timeout.time_left) - state_timeout.time_left)/.5))) + animations.modulate = flash_color.linear_interpolate(Color.white, abs(sin((ceil(state_timeout.time_left) - state_timeout.time_left)/.5))) + + if state_timeout.time_left == 0: + return idle_state + return null + + +func process_physics(delta: float) -> State: + move_component.velocity.y += gravity * delta + #parent.velocity = parent.move_and_slide(parent.velocity, Vector2(0, -1)) + move_component.velocity.x = parent.transform.x.x * move_speed +# if (parent.direction.x > 0): +# parent.velocity.x = 1 * move_speed +# else: +# parent.velocity.x = -1 * move_speed + move_component.velocity = parent.move_and_slide(move_component.velocity, Vector2(0, -1)) + + return null diff --git a/src/actors/players/playerD/states/idle.gd b/src/actors/players/playerD/states/idle.gd new file mode 100644 index 0000000..76bc192 --- /dev/null +++ b/src/actors/players/playerD/states/idle.gd @@ -0,0 +1,52 @@ +extends StateAnimatedActor + +export (NodePath) var fall_node +export (NodePath) var move_node +export (NodePath) var jump_node +export (NodePath) var attack_node +export (NodePath) var dash_node +export (NodePath) var roll_node +export (NodePath) var climb_node + +onready var fall_state: State = get_node(fall_node) +onready var move_state: State = get_node(move_node) +onready var jump_state: State = get_node(jump_node) +onready var attack_state: State = get_node(attack_node) +onready var dash_state: State = get_node(dash_node) +onready var roll_state: State = get_node(roll_node) +onready var climb_state: State = get_node(climb_node) + +func enter() -> void: + .enter() +# parent.set_hurtbox(true) + #move_component.velocity.x = 0 + #move_component.momentum.x *= -1 + if debug_state: + print(owner.name, " Move Component: ", move_component.desired_movement_vector.x) + +func process_physics(delta: float) -> State: + + if move_component.wants_jump() and parent.is_on_floor(): + return jump_state + + # We need to offer roll before dash because the inputs are the same + if move_component.wants_roll() and parent.is_on_floor(): + return roll_state + + if move_component.wants_dash() and parent.is_on_floor(): + return dash_state + + if move_component.wants_climb(): + return climb_state + + if move_component.wants_shoot(): + return attack_state + + move_actor_as_desired(delta) + + if move_component.desired_movement_vector.x != 0 and move_component.velocity.x != 0: + return move_state + + if !parent.is_on_floor(): + return fall_state + return null diff --git a/src/actors/players/playerD/states/jump.gd b/src/actors/players/playerD/states/jump.gd new file mode 100644 index 0000000..2012508 --- /dev/null +++ b/src/actors/players/playerD/states/jump.gd @@ -0,0 +1,45 @@ +extends StateAnimatedActor + + +export (NodePath) var idle_node +export (NodePath) var fall_node +export (NodePath) var attack_node +export (NodePath) var landing_node + +onready var idle_state: State = get_node(idle_node) +onready var fall_state: State = get_node(fall_node) +onready var attack_state: State = get_node(attack_node) +#onready var landing_mod: StateModifier = get_node(landing_node) + +export var jump_force: float = 200.0 + +func enter() -> void: +# var landing_mod_index = modifier_stack_ref.rfind(landing_mod) +# if landing_mod_index != -1: +# #print("You're Supposed to be dead!?: ", landing_mod_index) +# modifier_stack_ref.remove(landing_mod_index) +# if modifier_stack_ref.has(landing_mod): +# print("Jump from Landing Mod at: ", modifier_stack_ref.rfind(landing_mod)) + .enter() + # Apply initial jump velocity on state enter + move_component.velocity.y = -jump_force + +func process_physics(delta: float) -> State: + + if move_component.velocity.y > 0: + return fall_state + + if move_component.wants_shoot(): + return attack_state + + # First allow horizontal movement. + move_actor_as_desired(delta) + + #Flip the character before tha actual move maybe. + if move_component.get_movement_direction() != 0.0: + parent.transform.x.x = move_component.get_movement_direction() + + if parent.is_on_floor(): + return idle_state + + return null diff --git a/src/actors/players/playerD/states/move.gd b/src/actors/players/playerD/states/move.gd new file mode 100644 index 0000000..1eee763 --- /dev/null +++ b/src/actors/players/playerD/states/move.gd @@ -0,0 +1,34 @@ +extends StateAnimatedActor + +export (NodePath) var fall_node +export (NodePath) var idle_node +export (NodePath) var jump_node +export (NodePath) var attack_node + +onready var fall_state: State = get_node(fall_node) +onready var idle_state: State = get_node(idle_node) +onready var jump_state: State = get_node(jump_node) +onready var attack_state: State = get_node(attack_node) + +func process_physics(delta: float) -> State: + if move_component.wants_jump() and parent.is_on_floor(): + return jump_state + + if move_component.wants_shoot(): + return attack_state + + move_actor_as_desired(delta) + +# if move_component.velocity.x == 0.0: +# return idle_state + + #Flip the character before tha actual move maybe. + if move_component.get_movement_direction() != 0.0: + parent.transform.x.x = move_component.get_movement_direction() + + if move_component.desired_movement_vector.x == 0: + return idle_state + + if !parent.is_on_floor(): + return fall_state + return null diff --git a/src/actors/players/playerD/states/roll.gd b/src/actors/players/playerD/states/roll.gd new file mode 100644 index 0000000..0a83708 --- /dev/null +++ b/src/actors/players/playerD/states/roll.gd @@ -0,0 +1,46 @@ +extends StateAnimatedActor + +export (NodePath) var fall_node +export (NodePath) var idle_node + +onready var fall_state: State = get_node(fall_node) +onready var idle_state: State = get_node(idle_node) + +var speed_decay_rate := 1.0 + +func enter(): + #remove_animation_state_modifiers() + .enter() + + +func process_physics(delta: float) -> State: + +# if move_component.wants_shoot(): +# return attack_state + + if speed_multiplier > 1.0: + #print(speed_multiplier,", ", delta) + speed_multiplier -= delta * speed_decay_rate + speed_decay_rate += delta + elif speed_multiplier < 1.0: + speed_multiplier += delta * speed_decay_rate + speed_decay_rate += delta + + # Deadzone + if speed_multiplier < 1.1 and speed_multiplier > 0.9: + speed_multiplier = 1.0 + + move_component.velocity.y += gravity * delta + #parent.velocity = parent.move_and_slide(parent.velocity, Vector2(0, -1)) + #print(speed_multiplier) + move_component.velocity.x = parent.transform.x.x * move_speed * speed_multiplier + move_component.velocity = parent.move_and_slide(move_component.velocity, Vector2(0, -1)) + + if animations.frame >= 10: + #print("WTF - ", animations.frame, " ,", move_component.velocity.x) + if !parent.is_on_floor(): + return fall_state + else: + return idle_state + + return null