From 5a59c64780509bddbc977a7a0cacc652c1eba79f Mon Sep 17 00:00:00 2001 From: Paul Joannon <437025+paulloz@users.noreply.github.com> Date: Sun, 17 Apr 2022 10:00:55 +0200 Subject: [PATCH] =?UTF-8?q?Decoupling=20code=20from=20Player=20even=20furt?= =?UTF-8?q?her=20+=20bonus=20=F0=9F=A6=8E=20(#359)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- project.godot | 4 +- scenes/BallPlayer.tscn | 3 +- scenes/levels/CameraFollow.gd | 5 +- scenes/levels/Default/Level03.tscn | 3 +- scenes/levels/paulloz/002.tscn | 8 +- .../platformer/characters}/AxisMotion.gd | 0 .../platformer/characters}/BlockBuilder.gd | 0 .../platformer/characters}/Bus.gd | 4 +- .../platformer/characters}/Player.gd | 41 +++-- .../{ => platformer/characters}/Player.tscn | 73 ++++----- scenes/platformer/characters/PlayerAnims.gd | 6 + scenes/platformer/characters/RunParticles.gd | 16 ++ .../platformer/characters}/Shooter.gd | 0 .../platformer/characters}/Trail.gd | 4 +- scenes/platformer/characters/gex/Gex.tscn | 153 ++++++++++++++++++ scripts/BoucyMoustache.gd | 10 +- scripts/Main.gd | 5 - scripts/PlayerAnims.gd | 15 -- scripts/SpawnPoint.gd | 27 ++-- scripts/autoload/Settings.gd | 4 - scripts/mariocontroller/StarCollector.gd | 14 -- .../characters}/Gex.png | Bin sprites/characters/Gex.png.import | 35 ++++ 23 files changed, 303 insertions(+), 127 deletions(-) rename {scripts => scenes/platformer/characters}/AxisMotion.gd (100%) rename {scripts/mariocontroller => scenes/platformer/characters}/BlockBuilder.gd (100%) rename {scripts/mariocontroller => scenes/platformer/characters}/Bus.gd (91%) rename {scripts => scenes/platformer/characters}/Player.gd (90%) rename scenes/{ => platformer/characters}/Player.tscn (82%) create mode 100644 scenes/platformer/characters/PlayerAnims.gd create mode 100644 scenes/platformer/characters/RunParticles.gd rename {scripts/mariocontroller => scenes/platformer/characters}/Shooter.gd (100%) rename {scripts => scenes/platformer/characters}/Trail.gd (76%) create mode 100644 scenes/platformer/characters/gex/Gex.tscn delete mode 100644 scripts/PlayerAnims.gd delete mode 100755 scripts/mariocontroller/StarCollector.gd rename {.asset_donations => sprites/characters}/Gex.png (100%) create mode 100644 sprites/characters/Gex.png.import diff --git a/project.godot b/project.godot index 6e05509a2..3c57a5fec 100644 --- a/project.godot +++ b/project.godot @@ -17,7 +17,7 @@ _global_script_classes=[ { "base": "Object", "class": "AxisMotion", "language": "GDScript", -"path": "res://scripts/AxisMotion.gd" +"path": "res://scenes/platformer/characters/AxisMotion.gd" }, { "base": "KinematicBody2D", "class": "BallPlayer", @@ -137,7 +137,7 @@ _global_script_classes=[ { "base": "KinematicBody2D", "class": "Player", "language": "GDScript", -"path": "res://scripts/Player.gd" +"path": "res://scenes/platformer/characters/Player.gd" }, { "base": "RigidBody2D", "class": "PlayerFlying", diff --git a/scenes/BallPlayer.tscn b/scenes/BallPlayer.tscn index 8b8f89da9..4b34638b6 100644 --- a/scenes/BallPlayer.tscn +++ b/scenes/BallPlayer.tscn @@ -3,9 +3,10 @@ [ext_resource path="res://scripts/BallPlayer.gd" type="Script" id=1] [ext_resource path="res://sprites/ballmario.png" type="Texture" id=2] [ext_resource path="res://scenes/CoinInventoryHandle.tscn" type="PackedScene" id=3] -[ext_resource path="res://scripts/Trail.gd" type="Script" id=4] +[ext_resource path="res://scenes/platformer/characters/Trail.gd" type="Script" id=4] [ext_resource path="res://sprites/flag.jpg" type="Texture" id=5] + [sub_resource type="CircleShape2D" id=1] radius = 12.0 diff --git a/scenes/levels/CameraFollow.gd b/scenes/levels/CameraFollow.gd index 2db6008e2..7e2eb24cd 100644 --- a/scenes/levels/CameraFollow.gd +++ b/scenes/levels/CameraFollow.gd @@ -49,11 +49,10 @@ func _exit_tree() -> void: func _get_follow_candidates() -> void: follow_candidates = get_tree().get_nodes_in_group("CameraFCandidates") - print(follow_candidates.size()) - + func _get_camera_candidates() -> Array: return get_tree().get_nodes_in_group("Cameras") - + func _find_current_camera() -> void: var camera_candidates = _get_camera_candidates() if camera_candidates.size()>0: diff --git a/scenes/levels/Default/Level03.tscn b/scenes/levels/Default/Level03.tscn index 133f98e3e..9e1ef73b9 100644 --- a/scenes/levels/Default/Level03.tscn +++ b/scenes/levels/Default/Level03.tscn @@ -2,13 +2,14 @@ [ext_resource path="res://scenes/levels/TileSet.tres" type="TileSet" id=1] [ext_resource path="res://scenes/Coin/Coin.tscn" type="PackedScene" id=2] -[ext_resource path="res://scenes/Player.tscn" type="PackedScene" id=3] +[ext_resource path="res://scenes/platformer/characters/Player.tscn" type="PackedScene" id=3] [ext_resource path="res://scenes/EndPortal.tscn" type="PackedScene" id=4] [ext_resource path="res://scenes/enemies/GassyRandal.tscn" type="PackedScene" id=6] [ext_resource path="res://scenes/SpawnPoint.tscn" type="PackedScene" id=7] [ext_resource path="res://fonts/ALittleNameCalle.ttf" type="DynamicFontData" id=8] [ext_resource path="res://scripts/QuickText.gd" type="Script" id=9] + [sub_resource type="DynamicFont" id=1] font_data = ExtResource( 8 ) diff --git a/scenes/levels/paulloz/002.tscn b/scenes/levels/paulloz/002.tscn index a651a5cf4..5cea92c19 100644 --- a/scenes/levels/paulloz/002.tscn +++ b/scenes/levels/paulloz/002.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=13 format=2] +[gd_scene load_steps=14 format=2] [ext_resource path="res://scenes/levels/TileSet.tres" type="TileSet" id=1] [ext_resource path="res://scenes/CameraFollow.tscn" type="PackedScene" id=2] @@ -9,6 +9,7 @@ [ext_resource path="res://scenes/SpawnPoint.tscn" type="PackedScene" id=7] [ext_resource path="res://scenes/boxes/CoinBox.tscn" type="PackedScene" id=8] [ext_resource path="res://scenes/Star/Star.tscn" type="PackedScene" id=9] +[ext_resource path="res://scenes/platformer/characters/gex/Gex.tscn" type="PackedScene" id=10] [sub_resource type="RectangleShape2D" id=2] extents = Vector2( 64, 96 ) @@ -30,6 +31,7 @@ follow_vertically = true [node name="SpawnPoint" parent="." instance=ExtResource( 7 )] position = Vector2( 96, 480 ) +player_scene = ExtResource( 10 ) [node name="EndPortal2" parent="." instance=ExtResource( 4 )] position = Vector2( 3296, 1184 ) @@ -46,6 +48,7 @@ position = Vector2( 1760, 1888 ) shape = SubResource( 1 ) [node name="GravityZone3" parent="GravityZones" instance=ExtResource( 5 )] +modulate = Color( 1, 1, 1, 0.3 ) position = Vector2( 1952, 1536 ) gravity_vec = Vector2( 0, 1 ) shape = SubResource( 1 ) @@ -55,6 +58,7 @@ position = Vector2( 2144, 1888 ) shape = SubResource( 1 ) [node name="GravityZone5" parent="GravityZones" instance=ExtResource( 5 )] +modulate = Color( 1, 1, 1, 0.3 ) position = Vector2( 2336, 928 ) gravity_vec = Vector2( 0, 1 ) shape = SubResource( 1 ) @@ -64,11 +68,13 @@ position = Vector2( 2656, 1472 ) shape = SubResource( 1 ) [node name="GravityZone7" parent="GravityZones" instance=ExtResource( 5 )] +modulate = Color( 1, 1, 1, 0.3 ) position = Vector2( 3296, 304 ) gravity_vec = Vector2( 0, 1 ) shape = SubResource( 1 ) [node name="GravityZone9" parent="GravityZones" instance=ExtResource( 5 )] +modulate = Color( 1, 1, 1, 0.3 ) position = Vector2( 1440, 416 ) gravity_vec = Vector2( 0, 1 ) shape = SubResource( 3 ) diff --git a/scripts/AxisMotion.gd b/scenes/platformer/characters/AxisMotion.gd similarity index 100% rename from scripts/AxisMotion.gd rename to scenes/platformer/characters/AxisMotion.gd diff --git a/scripts/mariocontroller/BlockBuilder.gd b/scenes/platformer/characters/BlockBuilder.gd similarity index 100% rename from scripts/mariocontroller/BlockBuilder.gd rename to scenes/platformer/characters/BlockBuilder.gd diff --git a/scripts/mariocontroller/Bus.gd b/scenes/platformer/characters/Bus.gd similarity index 91% rename from scripts/mariocontroller/Bus.gd rename to scenes/platformer/characters/Bus.gd index 18dfba1d3..f8bf0dbee 100644 --- a/scripts/mariocontroller/Bus.gd +++ b/scenes/platformer/characters/Bus.gd @@ -39,4 +39,6 @@ func _activate_bus() -> void: func _update_player() -> void: player.sprite.visible = false player.get_node("CollisionShape2D").set_deferred("disabled", true) - player.trail.height = 15 + var trail: Line2D = player.get_node_or_null("Trail") + if trail != null: + trail.height = 15 diff --git a/scripts/Player.gd b/scenes/platformer/characters/Player.gd similarity index 90% rename from scripts/Player.gd rename to scenes/platformer/characters/Player.gd index eaf5f9814..a52b80a8c 100644 --- a/scripts/Player.gd +++ b/scenes/platformer/characters/Player.gd @@ -37,9 +37,6 @@ var powerupaccel = 1 onready var sprite = $Sprite onready var anim = $Sprite/Anims onready var tween = $Tween -onready var trail: Line2D = $Trail -onready var run_particles: CPUParticles2D = $RunParticles -onready var moustache = $BouncyMoustache # Gorgeous bouncy moustache! onready var original_scale = sprite.scale onready var squash_scale = Vector2(original_scale.x * 1.4, original_scale.y * 0.4) @@ -87,12 +84,10 @@ func _physics_process(delta: float) -> void: jerk_right(JERK * jerk_modifier) anim.playAnim("Run") # pointing the character in the direction he's running - run_particles.emitting = true look_right() elif Input.is_action_pressed("left"): jerk_left(JERK * jerk_modifier) anim.playAnim("Run") - run_particles.emitting = true look_left() else: anim.playAnim("Idle") @@ -104,7 +99,6 @@ func _physics_process(delta: float) -> void: x_motion.set_speed(0) x_motion.set_jerk(0) x_motion.set_accel(0) - run_particles.emitting = false jump_buffer_timer -= delta if Input.is_action_just_pressed("jump") and not super_jumping: @@ -152,12 +146,10 @@ func _physics_process(delta: float) -> void: else: gravity_multiplier = 1 anim.playAnim("Jump") - run_particles.emitting = false if crouching and not Input.is_action_pressed("down"): crouching = false set_hitbox_crouching(false) - moustache.position.y = 0 unsquash() y_motion.set_accel(gravity.strength * gravity_multiplier) @@ -199,7 +191,6 @@ func try_slip(angle: float): func crouch(): crouching = true set_hitbox_crouching(true) - moustache.position.y = 17.5 # Moves gorgeous bouncy moustache lower when rouching squash() @@ -240,12 +231,10 @@ func land(): func look_right(): sprite.flip_h = false - moustache.position.x = 0 # Moves gorgeous bouncy moustache to the mouth func look_left(): sprite.flip_h = true - moustache.position.x = -10 # Moves gorgeous bouncy moustache to the mouth func squash(time = 0.1, _returnDelay = 0, squash_modifier = 1.0): @@ -259,9 +248,11 @@ func squash(time = 0.1, _returnDelay = 0, squash_modifier = 1.0): Tween.TRANS_BACK, Tween.EASE_OUT ) - tween.interpolate_property( - trail, "height", trail.height, 20 * squash_modifier, time, Tween.TRANS_BACK, Tween.EASE_OUT - ) + var trail: Line2D = get_node_or_null("Trail") + if trail != null: + tween.interpolate_property( + trail, "height", trail.height, 20 * squash_modifier, time, Tween.TRANS_BACK, Tween.EASE_OUT + ) tween.start() @@ -300,9 +291,11 @@ func unsquash(time = 0.1, _returnDelay = 0, squash_modifier = 1.0): Tween.TRANS_BACK, Tween.EASE_OUT ) - tween.interpolate_property( - trail, "height", trail.height, 0, time, Tween.TRANS_BACK, Tween.EASE_OUT - ) + var trail: Line2D = get_node_or_null("Trail") + if trail != null: + tween.interpolate_property( + trail, "height", trail.height, 0, time, Tween.TRANS_BACK, Tween.EASE_OUT + ) tween.start() @@ -320,9 +313,9 @@ func jerk_right(jerk: float): func reset() -> void: look_right() - run_particles.emitting = false - run_particles.restart() - trail.reset() + for child in get_children(): + if child.has_method("reset"): + child.reset() _end_flash_sprite() @@ -364,13 +357,17 @@ func _on_enemy_hit_fireball(): func flash_sprite(duration: float = 0.05) -> void: - $Sprite.material.set_shader_param("flash_modifier", 1.0) + var material: ShaderMaterial = sprite.material as ShaderMaterial + if material != null: + $Sprite.material.set_shader_param("flash_modifier", 1.0) $HitFlashTimer.wait_time = duration $HitFlashTimer.start() func _end_flash_sprite() -> void: - $Sprite.material.set_shader_param("flash_modifier", 0.0) + var material: ShaderMaterial = sprite.material as ShaderMaterial + if material != null: + material.set_shader_param("flash_modifier", 0.0) func set_hitbox_crouching(value: bool): diff --git a/scenes/Player.tscn b/scenes/platformer/characters/Player.tscn similarity index 82% rename from scenes/Player.tscn rename to scenes/platformer/characters/Player.tscn index 19425a854..b1f1de0a8 100644 --- a/scenes/Player.tscn +++ b/scenes/platformer/characters/Player.tscn @@ -1,20 +1,18 @@ -[gd_scene load_steps=42 format=2] +[gd_scene load_steps=40 format=2] -[ext_resource path="res://audio/sfx/jump.wav" type="AudioStream" id=1] +[ext_resource path="res://scenes/platformer/characters/RunParticles.gd" type="Script" id=1] [ext_resource path="res://sprites/mario.png" type="Texture" id=2] -[ext_resource path="res://scripts/Player.gd" type="Script" id=3] -[ext_resource path="res://scripts/Trail.gd" type="Script" id=4] -[ext_resource path="res://sprites/flag.jpg" type="Texture" id=5] +[ext_resource path="res://scenes/platformer/characters/Player.gd" type="Script" id=3] +[ext_resource path="res://scenes/platformer/characters/Trail.gd" type="Script" id=4] +[ext_resource path="res://scenes/platformer/characters/PlayerAnims.gd" type="Script" id=5] [ext_resource path="res://sprites/dustparticle.png" type="Texture" id=6] -[ext_resource path="res://sprites/bus.png" type="Texture" id=7] -[ext_resource path="res://scripts/mariocontroller/Shooter.gd" type="Script" id=8] +[ext_resource path="res://sprites/flag.jpg" type="Texture" id=7] +[ext_resource path="res://scenes/platformer/characters/Shooter.gd" type="Script" id=8] [ext_resource path="res://scenes/CoinInventoryHandle.tscn" type="PackedScene" id=9] -[ext_resource path="res://scripts/mariocontroller/BlockBuilder.gd" type="Script" id=10] -[ext_resource path="res://scripts/mariocontroller/Bus.gd" type="Script" id=11] -[ext_resource path="res://audio/sfx/player-hurt.wav" type="AudioStream" id=12] +[ext_resource path="res://scenes/platformer/characters/BlockBuilder.gd" type="Script" id=10] +[ext_resource path="res://scenes/platformer/characters/Bus.gd" type="Script" id=11] +[ext_resource path="res://sprites/bus.png" type="Texture" id=12] [ext_resource path="res://shaders/hit_flash.gdshader" type="Shader" id=13] -[ext_resource path="res://scripts/PlayerAnims.gd" type="Script" id=14] -[ext_resource path="res://scripts/mariocontroller/StarCollector.gd" type="Script" id=15] [ext_resource path="res://scripts/BoucyMoustache.gd" type="Script" id=16] [ext_resource path="res://scenes/CameraFCandidate.gd" type="Script" id=17] @@ -32,41 +30,41 @@ shader = ExtResource( 13 ) shader_param/flash_color = Color( 1, 1, 1, 1 ) shader_param/flash_modifier = 0.0 -[sub_resource type="AtlasTexture" id=16] +[sub_resource type="AtlasTexture" id=31] atlas = ExtResource( 2 ) region = Rect2( 0, 0, 32, 32 ) -[sub_resource type="AtlasTexture" id=17] +[sub_resource type="AtlasTexture" id=32] atlas = ExtResource( 2 ) region = Rect2( 32, 0, 32, 32 ) -[sub_resource type="AtlasTexture" id=18] +[sub_resource type="AtlasTexture" id=33] atlas = ExtResource( 2 ) region = Rect2( 0, 32, 32, 32 ) -[sub_resource type="AtlasTexture" id=19] +[sub_resource type="AtlasTexture" id=34] atlas = ExtResource( 2 ) region = Rect2( 32, 32, 32, 32 ) -[sub_resource type="AtlasTexture" id=20] +[sub_resource type="AtlasTexture" id=35] atlas = ExtResource( 2 ) region = Rect2( 64, 32, 32, 32 ) -[sub_resource type="AtlasTexture" id=21] +[sub_resource type="AtlasTexture" id=36] atlas = ExtResource( 2 ) region = Rect2( 96, 32, 32, 32 ) -[sub_resource type="AtlasTexture" id=22] +[sub_resource type="AtlasTexture" id=37] atlas = ExtResource( 2 ) region = Rect2( 128, 32, 32, 32 ) -[sub_resource type="AtlasTexture" id=23] +[sub_resource type="AtlasTexture" id=38] atlas = ExtResource( 2 ) region = Rect2( 160, 32, 32, 32 ) [sub_resource type="SpriteFrames" id=10] animations = [ { -"frames": [ SubResource( 16 ), SubResource( 17 ), SubResource( 18 ), SubResource( 19 ), SubResource( 20 ), SubResource( 21 ), SubResource( 22 ), SubResource( 23 ) ], +"frames": [ SubResource( 31 ), SubResource( 32 ), SubResource( 33 ), SubResource( 34 ), SubResource( 35 ), SubResource( 36 ), SubResource( 37 ), SubResource( 38 ) ], "loop": true, "name": "default", "speed": 5.0 @@ -135,7 +133,6 @@ tracks/0/keys = { } [sub_resource type="AudioStreamRandomPitch" id=14] -audio_stream = ExtResource( 12 ) random_pitch = 1.5 [sub_resource type="RectangleShape2D" id=13] @@ -149,11 +146,10 @@ radius = 4.0 [sub_resource type="Curve" id=30] _data = [ Vector2( 0, 1 ), 0.0, 0.0, 0, 0, Vector2( 1, 0.527273 ), 0.0, 0.0, 0, 0 ] -[sub_resource type="Gradient" id=33] -colors = PoolColorArray( 0, 0, 0, 1, 0, 0, 0, 1 ) +[sub_resource type="Gradient" id=40] -[sub_resource type="GradientTexture" id=34] -gradient = SubResource( 33 ) +[sub_resource type="GradientTexture" id=39] +gradient = SubResource( 40 ) width = 128 [node name="Player" type="KinematicBody2D" groups=["Player"]] @@ -166,7 +162,7 @@ width = 30.0 width_curve = SubResource( 11 ) default_color = Color( 1, 1, 1, 1 ) gradient = SubResource( 12 ) -texture = ExtResource( 5 ) +texture = ExtResource( 7 ) texture_mode = 2 joint_mode = 2 end_cap_mode = 2 @@ -194,10 +190,9 @@ anims/Idle = SubResource( 24 ) anims/Jump = SubResource( 25 ) anims/RESET = SubResource( 26 ) anims/Run = SubResource( 27 ) -script = ExtResource( 14 ) +script = ExtResource( 5 ) [node name="JumpSFX" type="AudioStreamPlayer2D" parent="."] -stream = ExtResource( 1 ) volume_db = -12.0 bus = "sfx" @@ -223,9 +218,7 @@ angle = 90.0 angle_random = 1.0 scale_amount = 0.75 color = Color( 1, 1, 1, 0.784314 ) - -[node name="StarCollector" type="Node" parent="."] -script = ExtResource( 15 ) +script = ExtResource( 1 ) [node name="BlockBuilder" type="Node" parent="."] script = ExtResource( 10 ) @@ -238,7 +231,7 @@ visible = false material = SubResource( 15 ) position = Vector2( 7, 13 ) scale = Vector2( 0.0602623, 0.0602623 ) -texture = ExtResource( 7 ) +texture = ExtResource( 12 ) flip_h = true [node name="BusCollision" type="CollisionShape2D" parent="."] @@ -251,11 +244,6 @@ disabled = true wait_time = 0.05 one_shot = true -[node name="CoinInventoryHandle" parent="." instance=ExtResource( 9 )] - -[node name="CameraFCandidate" type="Node" parent="."] -script = ExtResource( 17 ) - [node name="BouncyMoustache" type="Node2D" parent="."] material = SubResource( 15 ) script = ExtResource( 16 ) @@ -285,7 +273,7 @@ disabled = true material = SubResource( 15 ) width = 13.066 width_curve = SubResource( 30 ) -texture = SubResource( 34 ) +texture = SubResource( 39 ) [node name="point2" type="RigidBody2D" parent="BouncyMoustache/DampedSpringJoint2D"] position = Vector2( 0.150002, 12.635 ) @@ -323,7 +311,7 @@ disabled = true material = SubResource( 15 ) width = 13.066 width_curve = SubResource( 30 ) -texture = SubResource( 34 ) +texture = SubResource( 39 ) [node name="point2" type="RigidBody2D" parent="BouncyMoustache/DampedSpringJoint2D2"] position = Vector2( 0.150002, 12.635 ) @@ -337,4 +325,9 @@ mesh = SubResource( 28 ) shape = SubResource( 29 ) disabled = true +[node name="CoinInventoryHandle" parent="." instance=ExtResource( 9 )] + +[node name="CameraFCandidate" type="Node" parent="."] +script = ExtResource( 17 ) + [connection signal="timeout" from="HitFlashTimer" to="." method="_end_flash_sprite"] diff --git a/scenes/platformer/characters/PlayerAnims.gd b/scenes/platformer/characters/PlayerAnims.gd new file mode 100644 index 000000000..fb995c95e --- /dev/null +++ b/scenes/platformer/characters/PlayerAnims.gd @@ -0,0 +1,6 @@ +extends AnimationPlayer + + +func playAnim(strIn = "Idle"): + if strIn != self.current_animation: + self.play(strIn) diff --git a/scenes/platformer/characters/RunParticles.gd b/scenes/platformer/characters/RunParticles.gd new file mode 100644 index 000000000..3ce304644 --- /dev/null +++ b/scenes/platformer/characters/RunParticles.gd @@ -0,0 +1,16 @@ +extends CPUParticles2D + + +const EMISSION_THRESHOLD: float = 50.0 + +onready var player: Player = owner + + +func _process(_delta: float) -> void: + emitting = player._is_on_floor() && player.x_motion.get_motion().length_squared() > EMISSION_THRESHOLD + + +func reset() -> void: + emitting = false + restart() + diff --git a/scripts/mariocontroller/Shooter.gd b/scenes/platformer/characters/Shooter.gd similarity index 100% rename from scripts/mariocontroller/Shooter.gd rename to scenes/platformer/characters/Shooter.gd diff --git a/scripts/Trail.gd b/scenes/platformer/characters/Trail.gd similarity index 76% rename from scripts/Trail.gd rename to scenes/platformer/characters/Trail.gd index d6d665e1b..0b139da85 100644 --- a/scripts/Trail.gd +++ b/scenes/platformer/characters/Trail.gd @@ -4,7 +4,7 @@ export(int) var trail_length = 5 var positions = [] var height = 0.0 -onready var parent = get_parent() +onready var player: Player = owner func _process(_delta): @@ -12,7 +12,7 @@ func _process(_delta): while len(positions) > trail_length: positions.pop_front() - positions.push_back(parent.global_position + Vector2(0, height)) + positions.push_back(player.global_position + Vector2(0, height)) points = PoolVector2Array(positions) diff --git a/scenes/platformer/characters/gex/Gex.tscn b/scenes/platformer/characters/gex/Gex.tscn new file mode 100644 index 000000000..b52bc4c34 --- /dev/null +++ b/scenes/platformer/characters/gex/Gex.tscn @@ -0,0 +1,153 @@ +[gd_scene load_steps=18 format=2] + +[ext_resource path="res://scenes/platformer/characters/RunParticles.gd" type="Script" id=1] +[ext_resource path="res://sprites/dustparticle.png" type="Texture" id=2] +[ext_resource path="res://audio/sfx/jump.wav" type="AudioStream" id=3] +[ext_resource path="res://scenes/platformer/characters/Player.gd" type="Script" id=4] +[ext_resource path="res://scenes/CameraFCandidate.gd" type="Script" id=5] +[ext_resource path="res://scenes/platformer/characters/PlayerAnims.gd" type="Script" id=7] +[ext_resource path="res://sprites/characters/Gex.png" type="Texture" id=9] +[ext_resource path="res://audio/sfx/player-hurt.wav" type="AudioStream" id=10] +[ext_resource path="res://scenes/CoinInventoryHandle.tscn" type="PackedScene" id=11] +[ext_resource path="res://shaders/hit_flash.gdshader" type="Shader" id=12] + +[sub_resource type="RectangleShape2D" id=1] +extents = Vector2( 23.5, 27 ) + +[sub_resource type="ShaderMaterial" id=15] +shader = ExtResource( 12 ) +shader_param/flash_color = Color( 1, 1, 1, 1 ) +shader_param/flash_modifier = 0.0 + +[sub_resource type="Animation" id=18] +resource_name = "Idle" +length = 0.001 +tracks/0/type = "value" +tracks/0/path = NodePath(".:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 1, +"values": [ 0 ] +} + +[sub_resource type="Animation" id=19] +resource_name = "Jump" +length = 0.001 +tracks/0/type = "value" +tracks/0/path = NodePath(".:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 1, +"values": [ 1 ] +} + +[sub_resource type="Animation" id=16] +length = 0.001 +tracks/0/type = "value" +tracks/0/path = NodePath(".:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 0, +"values": [ 0 ] +} + +[sub_resource type="Animation" id=17] +resource_name = "Run" +length = 0.6 +loop = true +tracks/0/type = "value" +tracks/0/path = NodePath(".:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/keys = { +"times": PoolRealArray( 0, 0.1, 0.2, 0.3, 0.4, 0.5 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ 0, 7, 8, 9, 10, 11 ] +} + +[sub_resource type="AudioStreamRandomPitch" id=14] +audio_stream = ExtResource( 10 ) +random_pitch = 1.5 + +[node name="Gex" type="KinematicBody2D" groups=["Player"]] +z_index = 1 +collision_mask = 15 +script = ExtResource( 4 ) + +[node name="CollisionShape2D" type="CollisionShape2D" parent="."] +position = Vector2( -0.5, 5 ) +shape = SubResource( 1 ) + +[node name="Sprite" type="Sprite" parent="."] +material = SubResource( 15 ) +scale = Vector2( 2, 2 ) +texture = ExtResource( 9 ) +hframes = 6 +vframes = 2 + +[node name="Anims" type="AnimationPlayer" parent="Sprite"] +autoplay = "Idle" +anims/Idle = SubResource( 18 ) +anims/Jump = SubResource( 19 ) +anims/RESET = SubResource( 16 ) +anims/Run = SubResource( 17 ) +script = ExtResource( 7 ) + +[node name="JumpSFX" type="AudioStreamPlayer2D" parent="."] +visible = false +stream = ExtResource( 3 ) +volume_db = -12.0 +bus = "sfx" + +[node name="HurtSFX" type="AudioStreamPlayer2D" parent="."] +visible = false +stream = SubResource( 14 ) + +[node name="Tween" type="Tween" parent="."] + +[node name="HitFlashTimer" type="Timer" parent="."] +wait_time = 0.05 +one_shot = true + +[node name="CoinInventoryHandle" parent="." instance=ExtResource( 11 )] + +[node name="RunParticles" type="CPUParticles2D" parent="."] +position = Vector2( 0, 30 ) +amount = 6 +lifetime = 0.6 +local_coords = false +texture = ExtResource( 2 ) +spread = 180.0 +gravity = Vector2( 0, -80 ) +initial_velocity = 40.0 +initial_velocity_random = 0.2 +angular_velocity = 30.0 +angular_velocity_random = 1.0 +angle = 90.0 +angle_random = 1.0 +scale_amount = 0.75 +color = Color( 1, 1, 1, 0.784314 ) +script = ExtResource( 1 ) + +[node name="CameraFollower" type="Node" parent="."] +script = ExtResource( 5 ) + +[connection signal="timeout" from="HitFlashTimer" to="." method="_end_flash_sprite"] diff --git a/scripts/BoucyMoustache.gd b/scripts/BoucyMoustache.gd index 05da75797..95de191e3 100644 --- a/scripts/BoucyMoustache.gd +++ b/scripts/BoucyMoustache.gd @@ -1,6 +1,8 @@ extends Node2D class_name BouncyMoustache +onready var player: Player = owner + onready var line1 = $DampedSpringJoint2D/point1/Line2D onready var segment2 = $DampedSpringJoint2D/point2 onready var rightSegment = $DampedSpringJoint2D @@ -11,15 +13,17 @@ onready var leftSegment = $DampedSpringJoint2D2 func _process(_delta): - # line1.global_position = Vector2.ZERO + position.x = 0.0 if not player.sprite.flip_h else -10.0 + position.y = 0.0 if not player.crouching else 17.5 + line1.global_rotation = rightSegment.rotation - for p in range(len(line1.points)): + for _p in range(len(line1.points)): line1.remove_point(0) line1.add_point(line1.position) line1.add_point(segment2.position) line2.global_rotation = leftSegment.rotation - for p in range(len(line2.points)): + for _p in range(len(line2.points)): line2.remove_point(0) line2.add_point(line2.position) line2.add_point(segment22.position) diff --git a/scripts/Main.gd b/scripts/Main.gd index 1d6dc463e..dbb496c17 100644 --- a/scripts/Main.gd +++ b/scripts/Main.gd @@ -104,11 +104,6 @@ func _finish_level(next_level: PackedScene = null) -> void: level.queue_free() yield(level, "tree_exited") level = new_level - if level == hub: - for c in level.get_children(): - if c is SpawnPoint: - c.spawn_mario() - break # Do not forget to hook the new portals _hook_portals() diff --git a/scripts/PlayerAnims.gd b/scripts/PlayerAnims.gd deleted file mode 100644 index 0645da740..000000000 --- a/scripts/PlayerAnims.gd +++ /dev/null @@ -1,15 +0,0 @@ -extends AnimationPlayer - -# Declare member variables here. Examples: -# var a = 2 -# var b = "text" - - -# Called when the node enters the scene tree for the first time. -func _ready(): - pass # Replace with function body. - - -func playAnim(strIn = "Idle"): - if strIn != self.current_animation: - self.play(strIn) diff --git a/scripts/SpawnPoint.gd b/scripts/SpawnPoint.gd index 5a5244e30..660c35237 100644 --- a/scripts/SpawnPoint.gd +++ b/scripts/SpawnPoint.gd @@ -1,24 +1,25 @@ class_name SpawnPoint extends Position2D -var player_scene = load("res://scenes/Player.tscn") +export(PackedScene) var player_scene: PackedScene +var fallback_player: PackedScene = preload("res://scenes/platformer/characters/Player.tscn") -func _ready(): - spawn_mario() +func _enter_tree(): + spawn() -func spawn_mario(): - var player = null - for c in get_node("..").get_children(): - if c is Player: - player = c - break - if not player: - player = player_scene.instance() - player.set_name("Player") - get_node("..").call_deferred("add_child", player) +func spawn(): + for node in get_parent().get_children(): + if node is Player: + node.queue_free() + + var player: Player = (player_scene if player_scene != null else fallback_player).instance() + if not player is Player: + player = fallback_player.instance() + player.set_name("Player") + get_parent().call_deferred("add_child", player) player.position = self.position player.visible = true diff --git a/scripts/autoload/Settings.gd b/scripts/autoload/Settings.gd index 7505a4f01..924e256a2 100644 --- a/scripts/autoload/Settings.gd +++ b/scripts/autoload/Settings.gd @@ -43,9 +43,6 @@ func load_data(): if not settings_file.file_exists(settings_name) or settings_file.open(settings_name, File.READ) != OK: # set settings to default values set_to_default() - screen_shake = true - crt_filter = false - # access settings.mario and read settings else: while settings_file.get_position() < settings_file.get_len(): @@ -69,7 +66,6 @@ func load_data(): settings_file.close() set_to_default() # catch any settings that were added since the last time cookie was saved settings_loaded = true - # emit any relevant signals EventBus.emit_signal("crt_filter_toggle", crt_filter) diff --git a/scripts/mariocontroller/StarCollector.gd b/scripts/mariocontroller/StarCollector.gd deleted file mode 100755 index 1a43553b2..000000000 --- a/scripts/mariocontroller/StarCollector.gd +++ /dev/null @@ -1,14 +0,0 @@ -extends Node - -onready var player : Player = owner - -func _ready() -> void: - EventBus.connect("star_collected", self, "_on_star_collected") - - -func _on_star_collected(data: Dictionary) -> void: - if data.has("name"): - player.inventory.stars[data["name"]] = true; - -func _exit_tree(): - EventBus.disconnect("star_collected", self, "_on_star_collected") diff --git a/.asset_donations/Gex.png b/sprites/characters/Gex.png similarity index 100% rename from .asset_donations/Gex.png rename to sprites/characters/Gex.png diff --git a/sprites/characters/Gex.png.import b/sprites/characters/Gex.png.import new file mode 100644 index 000000000..faa4e08ad --- /dev/null +++ b/sprites/characters/Gex.png.import @@ -0,0 +1,35 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/Gex.png-c2e03052bd8845381b4a9ecf2a768143.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://sprites/characters/Gex.png" +dest_files=[ "res://.import/Gex.png-c2e03052bd8845381b4a9ecf2a768143.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=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=false +svg/scale=1.0