Add PlayerGraphicsComponent to manage player sprite visibility based on movement abilities
This commit is contained in:
@@ -1,5 +1,6 @@
|
|||||||
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
|
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
|
||||||
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ACanvasItem_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FSourcesCache_003Fef7b819b226fab796d1dfe66d415dd7510bcac87675020ddb8f03a828e763_003FCanvasItem_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
|
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ACanvasItem_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FSourcesCache_003Fef7b819b226fab796d1dfe66d415dd7510bcac87675020ddb8f03a828e763_003FCanvasItem_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
|
||||||
|
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ACecovym_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002E_002E_003F_002E_002E_003Ftmp_003FJetBrainsPerUserTemp_002D1000_002D1_003FSandboxFiles_003FSadijuw_003FCecovym_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
|
||||||
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ACollisionShape2D_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FSourcesCache_003F2ca9b7334678f5c97c7c2a9fbe4837be71cae11b6a30408dd4791b18f997e4a_003FCollisionShape2D_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
|
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ACollisionShape2D_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FSourcesCache_003F2ca9b7334678f5c97c7c2a9fbe4837be71cae11b6a30408dd4791b18f997e4a_003FCollisionShape2D_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
|
||||||
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ACSharpInstanceBridge_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E2_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F94701b444afa4c3d9a7a53ebcaa35fd1583c00_003F14_003F4b4ade3f_003FCSharpInstanceBridge_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
|
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ACSharpInstanceBridge_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E2_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F94701b444afa4c3d9a7a53ebcaa35fd1583c00_003F14_003F4b4ade3f_003FCSharpInstanceBridge_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
|
||||||
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ADelegateUtils_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E2_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F94701b444afa4c3d9a7a53ebcaa35fd1583c00_003F08_003F45f75e10_003FDelegateUtils_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
|
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ADelegateUtils_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E2_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F94701b444afa4c3d9a7a53ebcaa35fd1583c00_003F08_003F45f75e10_003FDelegateUtils_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
[gd_scene load_steps=59 format=3 uid="uid://bqi5s710xb1ju"]
|
[gd_scene load_steps=60 format=3 uid="uid://bqi5s710xb1ju"]
|
||||||
|
|
||||||
[ext_resource type="Script" uid="uid://csel4s0e4g5uf" path="res://scripts/components/PlayerController.cs" id="1_yysbb"]
|
[ext_resource type="Script" uid="uid://csel4s0e4g5uf" path="res://scripts/components/PlayerController.cs" id="1_yysbb"]
|
||||||
[ext_resource type="Shader" uid="uid://bs4xvm4qkurpr" path="res://shaders/hit_flash.tres" id="2_lgb3u"]
|
[ext_resource type="Shader" uid="uid://bs4xvm4qkurpr" path="res://shaders/hit_flash.tres" id="2_lgb3u"]
|
||||||
@@ -49,6 +49,7 @@
|
|||||||
[ext_resource type="Script" uid="uid://dssa2taiwktis" path="res://scripts/components/Movement/PlayerInputHandler.cs" id="42_e5pae"]
|
[ext_resource type="Script" uid="uid://dssa2taiwktis" path="res://scripts/components/Movement/PlayerInputHandler.cs" id="42_e5pae"]
|
||||||
[ext_resource type="Script" uid="uid://ceoxet1nqws8w" path="res://scripts/components/SpriteTilterComponent.cs" id="43_xuhvf"]
|
[ext_resource type="Script" uid="uid://ceoxet1nqws8w" path="res://scripts/components/SpriteTilterComponent.cs" id="43_xuhvf"]
|
||||||
[ext_resource type="Script" uid="uid://b1h8r5irryxcx" path="res://scripts/components/PlayerSfxComponent.cs" id="49_qec3q"]
|
[ext_resource type="Script" uid="uid://b1h8r5irryxcx" path="res://scripts/components/PlayerSfxComponent.cs" id="49_qec3q"]
|
||||||
|
[ext_resource type="Script" uid="uid://b2aanqykvdnev" path="res://scripts/components/PlayerGraphicsComponent.cs" id="50_dhjci"]
|
||||||
|
|
||||||
[sub_resource type="ShaderMaterial" id="ShaderMaterial_xoue7"]
|
[sub_resource type="ShaderMaterial" id="ShaderMaterial_xoue7"]
|
||||||
shader = ExtResource("2_lgb3u")
|
shader = ExtResource("2_lgb3u")
|
||||||
@@ -312,3 +313,9 @@ metadata/_custom_type_script = "uid://ceoxet1nqws8w"
|
|||||||
script = ExtResource("49_qec3q")
|
script = ExtResource("49_qec3q")
|
||||||
JumpSfx = NodePath("../sfx_jump")
|
JumpSfx = NodePath("../sfx_jump")
|
||||||
metadata/_custom_type_script = "uid://b1h8r5irryxcx"
|
metadata/_custom_type_script = "uid://b1h8r5irryxcx"
|
||||||
|
|
||||||
|
[node name="PlayerGraphicsComponent" type="Node" parent="." node_paths=PackedStringArray("DefaultSprite", "SpaceshipSprite")]
|
||||||
|
script = ExtResource("50_dhjci")
|
||||||
|
DefaultSprite = NodePath("../Graphics/Root")
|
||||||
|
SpaceshipSprite = NodePath("../Graphics/Ship")
|
||||||
|
metadata/_custom_type_script = "uid://b2aanqykvdnev"
|
||||||
|
@@ -193,8 +193,6 @@ process_mode = 4
|
|||||||
process_material = SubResource("ParticleProcessMaterial_lgb3u")
|
process_material = SubResource("ParticleProcessMaterial_lgb3u")
|
||||||
|
|
||||||
[node name="Enemies" type="Node2D" parent="."]
|
[node name="Enemies" type="Node2D" parent="."]
|
||||||
process_mode = 4
|
|
||||||
visible = false
|
|
||||||
|
|
||||||
[node name="Flying Enemy" parent="Enemies" instance=ExtResource("18_162yw")]
|
[node name="Flying Enemy" parent="Enemies" instance=ExtResource("18_162yw")]
|
||||||
position = Vector2(1122, -33)
|
position = Vector2(1122, -33)
|
||||||
|
@@ -19,6 +19,7 @@ public partial class PlayerController : CharacterBody2D
|
|||||||
[Export] public PackedScene WallJumpScene { get; set; }
|
[Export] public PackedScene WallJumpScene { get; set; }
|
||||||
|
|
||||||
[Signal] public delegate void JumpInitiatedEventHandler();
|
[Signal] public delegate void JumpInitiatedEventHandler();
|
||||||
|
[Signal] public delegate void MovementAbilitiesChangedEventHandler();
|
||||||
|
|
||||||
public Vector2 LastDirection { get; private set; } = Vector2.Right;
|
public Vector2 LastDirection { get; private set; } = Vector2.Right;
|
||||||
public Vector2 PreviousVelocity { get; private set; } = Vector2.Zero;
|
public Vector2 PreviousVelocity { get; private set; } = Vector2.Zero;
|
||||||
@@ -26,6 +27,8 @@ public partial class PlayerController : CharacterBody2D
|
|||||||
private List<MovementAbility> _abilities = [];
|
private List<MovementAbility> _abilities = [];
|
||||||
private PlayerInputHandler _inputHandler;
|
private PlayerInputHandler _inputHandler;
|
||||||
|
|
||||||
|
public IReadOnlyList<MovementAbility> GetActiveAbilities() => _abilities;
|
||||||
|
|
||||||
public override void _Ready()
|
public override void _Ready()
|
||||||
{
|
{
|
||||||
_inputHandler = GetNode<PlayerInputHandler>("PlayerInputHandler");
|
_inputHandler = GetNode<PlayerInputHandler>("PlayerInputHandler");
|
||||||
@@ -39,6 +42,7 @@ public partial class PlayerController : CharacterBody2D
|
|||||||
}
|
}
|
||||||
|
|
||||||
_ = ConnectJumpAndGravityAbilities();
|
_ = ConnectJumpAndGravityAbilities();
|
||||||
|
EmitSignalMovementAbilitiesChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void _PhysicsProcess(double delta)
|
public override void _PhysicsProcess(double delta)
|
||||||
@@ -100,6 +104,7 @@ public partial class PlayerController : CharacterBody2D
|
|||||||
if (OneWayPlatformScene != null) AddAbility(OneWayPlatformScene.Instantiate<MovementAbility>());
|
if (OneWayPlatformScene != null) AddAbility(OneWayPlatformScene.Instantiate<MovementAbility>());
|
||||||
|
|
||||||
_ = ConnectJumpAndGravityAbilities();
|
_ = ConnectJumpAndGravityAbilities();
|
||||||
|
EmitSignalMovementAbilitiesChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SetSpaceshipMovement()
|
public void SetSpaceshipMovement()
|
||||||
@@ -107,6 +112,7 @@ public partial class PlayerController : CharacterBody2D
|
|||||||
ClearMovementAbilities();
|
ClearMovementAbilities();
|
||||||
|
|
||||||
if (SpaceshipMovementScene != null) AddAbility(SpaceshipMovementScene.Instantiate<MovementAbility>());
|
if (SpaceshipMovementScene != null) AddAbility(SpaceshipMovementScene.Instantiate<MovementAbility>());
|
||||||
|
EmitSignalMovementAbilitiesChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task ConnectJumpAndGravityAbilities()
|
private async Task ConnectJumpAndGravityAbilities()
|
||||||
|
43
scripts/components/PlayerGraphicsComponent.cs
Normal file
43
scripts/components/PlayerGraphicsComponent.cs
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
using System.Linq;
|
||||||
|
using Godot;
|
||||||
|
|
||||||
|
namespace Mr.BrickAdventures.scripts.components;
|
||||||
|
|
||||||
|
[GlobalClass]
|
||||||
|
public partial class PlayerGraphicsComponent : Node
|
||||||
|
{
|
||||||
|
[Export] public Node2D DefaultSprite { get; set; }
|
||||||
|
[Export] public Node2D SpaceshipSprite { get; set; }
|
||||||
|
|
||||||
|
private PlayerController _playerController;
|
||||||
|
|
||||||
|
public override void _Ready()
|
||||||
|
{
|
||||||
|
_playerController = GetOwner<PlayerController>();
|
||||||
|
if (_playerController == null)
|
||||||
|
{
|
||||||
|
GD.PrintErr("PlayerGraphicsComponent must be a child of a PlayerController.");
|
||||||
|
SetProcess(false);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
_playerController.MovementAbilitiesChanged += OnMovementAbilitiesChanged;
|
||||||
|
|
||||||
|
UpdateGraphics();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnMovementAbilitiesChanged()
|
||||||
|
{
|
||||||
|
UpdateGraphics();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void UpdateGraphics()
|
||||||
|
{
|
||||||
|
var isSpaceship = _playerController.GetActiveAbilities().Any(ability => ability is SpaceshipMovementAbility);
|
||||||
|
|
||||||
|
if (SpaceshipSprite != null)
|
||||||
|
{
|
||||||
|
SpaceshipSprite.Visible = isSpaceship;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
1
scripts/components/PlayerGraphicsComponent.cs.uid
Normal file
1
scripts/components/PlayerGraphicsComponent.cs.uid
Normal file
@@ -0,0 +1 @@
|
|||||||
|
uid://b2aanqykvdnev
|
Reference in New Issue
Block a user