made the initial inventory loadout into a resource to initialize the injected dependency with

This commit is contained in:
2026-04-26 17:38:25 +02:00
parent 319cbf722e
commit cd7a230615
11 changed files with 331 additions and 247 deletions

View File

@@ -48,19 +48,13 @@ public partial class PlayerController : CharacterBody3D,
{
public override void _Notification(int what) => this.Notify(what);
#region Dependencies
[Dependency]
public InventoryManager InventoryManager => this.DependOn<InventoryManager>();
// Enums
public enum AllowedInputs
{
All,
MoveCamera,
None,
}
private bool _isUsingGamepad;
public AllowedInputs CurrentlyAllowedInputs { get; set; } = AllowedInputs.All;
#endregion
#region Enums
public enum BufferedActions
{
None,
@@ -69,22 +63,22 @@ public partial class PlayerController : CharacterBody3D,
Dash,
MantleDash
}
private BufferedActions _bufferedAction = BufferedActions.None;
///////////////////////////
// Signals and events //
///////////////////////////
#endregion
#region Signals
[Signal]
public delegate void PlayerDiedEventHandler();
public event Action<IDamageable, DamageRecord> DamageTaken = null!;
public event Action<IHealthable, HealthChangedRecord> HealthChanged = null!;
public event Action<IHealthable> HealthDepleted = null!;
///////////////////////////
// Public stuff //
///////////////////////////
#endregion
#region Publics
public HeadSystem HeadSystem = null!;
public StairsSystem StairsSystem = null!;
public MantleSystem MantleSystem = null!;
@@ -114,7 +108,9 @@ public partial class PlayerController : CharacterBody3D,
public EventManager Events { get; set; } = null!;
public Variables SharedVariables { get; }
// Inspector stuff
#endregion
#region Inspector
[Export] public bool HasSword { get; set; } = true;
[Export] public bool HasParry { get; set; } = true;
@@ -306,10 +302,10 @@ public partial class PlayerController : CharacterBody3D,
public float WallRunAltitudeLossSpeed { get; set; } = 10f;
[Export(PropertyHint.Range, "0,20,0.1,or_greater")]
public float WallRunSpeedThreshold { get; set; } = 8f;
#endregion
#region Privates
///////////////////////////
// Private stuff //
///////////////////////////
// Stairs and shit
private float _lastFrameWasOnFloor = -Mathf.Inf;
private const int NumOfHeadCollisionDetectors = 4;
@@ -317,7 +313,8 @@ public partial class PlayerController : CharacterBody3D,
private AudioStreamPlaybackInteractive _audioStream = null!;
// Basic movement
private bool _movementEnabled = true;
private bool _isUsingGamepad;
private BufferedActions _bufferedAction = BufferedActions.None;
private Vector3 _inputMove = Vector3.Zero;
private Vector3 _inputMoveKeyboard = Vector3.Zero;
private float _inputRotateY;
@@ -434,22 +431,21 @@ public partial class PlayerController : CharacterBody3D,
private AbilityHandle? _empoweredActionHandle;
#endregion
public void OnReady()
{
LoadSettings();
///////////////////////////
// Getting components /////
///////////////////////////
// General use stuff
PlayerUi = GetNode<PlayerUi>("UI");
_closeEnemyDetector = GetNode<ShapeCast3D>("%CloseEnemyDetector");
_closeEnemyDetector.TargetPosition = _closeEnemyDetector.TargetPosition.Normalized() * TargetingDistance;
_aimAssisRayCast = GetNode<RayCast3D>("AimAssistRayCast");
_aimAssisRayCast.TargetPosition = _aimAssisRayCast.TargetPosition.Normalized() * (TargetingDistance*1.5f);
#region Forge
// Forge stuff
var tagsManager = ForgeManagers.Instance.TagsManager;
var cuesManager = ForgeManagers.Instance.CuesManager;
@@ -500,6 +496,7 @@ public partial class PlayerController : CharacterBody3D,
EffectsManager.ApplyEffect(new Effect(effect.GetEffectData(), new EffectOwnership(this, this)));
});
}
#endregion
// DashIndicator = GetNode<TextureRect>("%DashIndicator");
TargetSpeed = WalkSpeed;
@@ -567,8 +564,9 @@ public partial class PlayerController : CharacterBody3D,
CDamageable.DamageTaken += (_, record) => RegisterKnockback(new KnockbackRecord(record));
CHealth.HealthChanged += PlayerUi.OnHealthChanged;
CHealth.HealthDepleted += (_) => Kill();
#region StateManagement
// State management
_playerState = StateChart.Of(GetNode("StateChart"));
_aiming = StateChartState.Of(GetNode("StateChart/Root/Aim/On"));
@@ -617,6 +615,7 @@ public partial class PlayerController : CharacterBody3D,
_airborneDashCooldownTimer = GetNode<Timer>("AirborneDashCooldown");
_invincibilityTimer = GetNode<Timer>("InvincibilityTime");
_attackCooldown = GetNode<Timer>("AttackCooldown");
#endregion
///////////////////////////
// Initialize components //
@@ -642,10 +641,9 @@ public partial class PlayerController : CharacterBody3D,
// PlaceWeaponForTutorial();
HeadSystem.SetWeaponsVisible(HasSword, HasParry);
#region SignalBinding
///////////////////////////
// Signal setup ///////////
///////////////////////////
_invincibilityTimer.Timeout += ResetInvincibility;
_attackCooldown.Timeout += ResetAttackCooldown;
@@ -723,6 +721,8 @@ public partial class PlayerController : CharacterBody3D,
_attackDash.StateEntered += OnDashAttackStarted;
_parryStandard.StateEntered += OnStandardParryStarted;
_parryDash.StateEntered += OnDashParryStarted;
#endregion
// Forge events
var weaponLeftToken = WeaponSystem.Events.Subscribe(WeaponSystem.WeaponStartedFlyingEventTag, OnWeaponLeft);
@@ -731,14 +731,28 @@ public partial class PlayerController : CharacterBody3D,
public void OnResolved()
{
// All of my dependencies are now available! Do whatever you want with
// them here.
// Initialize weapon with inventory abilities
WeaponSystem.RemoveAllEventAbilities();
foreach (var (weaponEvent, abilities) in InventoryManager.WeaponEventsInventory)
{
foreach (var ability in abilities)
{
if (ability is not ForgeAbilityBehavior abilityBehavior) continue;
WeaponSystem.GrantNewAbilityForEvent(weaponEvent, abilityBehavior);
}
}
// Inventory Management
// Inventory changes signal binding
InventoryManager.WeaponEventAbilityAdded += OnWeaponEventAbilityAdded;
InventoryManager.WeaponEventAbilityRemoved += OnWeaponEventAbilityRemoved;
}
public void OnExitTree()
{
InventoryManager.WeaponEventAbilityAdded -= OnWeaponEventAbilityAdded;
InventoryManager.WeaponEventAbilityRemoved -= OnWeaponEventAbilityRemoved;
}
public void OnWeaponLeft(EventData data)
{
var target = data.Target;
@@ -768,33 +782,17 @@ public partial class PlayerController : CharacterBody3D,
public void OnWeaponEventAbilityAdded(WeaponEventAbilityData data)
{
if (data.Ability is not ForgeAbilityBehavior abilityBehavior) return;
WeaponSystem.GrantNewAbilityForEvent(data.ForEvent, abilityBehavior);
WeaponSystem.GrantNewAbilityForEvent(data.ForEvent, data.Ability);
}
public void OnWeaponEventAbilityRemoved(WeaponEventAbilityData data)
{
if (data.Ability is not ForgeAbilityBehavior abilityBehavior) return;
WeaponSystem.RemoveAbilityForEvent(data.ForEvent, abilityBehavior);
WeaponSystem.RemoveAbilityForEvent(data.ForEvent, data.Ability);
}
///////////////////////////
// Settings & tutorial //
///////////////////////////
public void SetAllowedInputsAll()
{
CurrentlyAllowedInputs = AllowedInputs.All;
}
public void SetAllowedInputsMoveCamera()
{
CurrentlyAllowedInputs = AllowedInputs.MoveCamera;
}
public void SetAllowedInputsNone()
{
CurrentlyAllowedInputs = AllowedInputs.None;
}
public void LoadSettings()
{
var config = new ConfigFile();