used DI for forge managers where possible
This commit is contained in:
@@ -39,6 +39,10 @@ public partial class PlayerController : CharacterBody3D, IForgeEntity, ICueHandl
|
||||
#region Dependencies
|
||||
[Dependency]
|
||||
public InventoryManager InventoryManager => this.DependOn<InventoryManager>();
|
||||
[Dependency]
|
||||
public TagsManager TagsManager => this.DependOn<TagsManager>();
|
||||
[Dependency]
|
||||
public CuesManager CuesManager => this.DependOn<CuesManager>();
|
||||
#endregion
|
||||
|
||||
#region Utils
|
||||
@@ -73,27 +77,31 @@ public partial class PlayerController : CharacterBody3D, IForgeEntity, ICueHandl
|
||||
|
||||
#endregion
|
||||
|
||||
#region Publics
|
||||
#region Nodes
|
||||
|
||||
[Node("HeadSystem")] public required HeadSystem HeadSystem { get; set; }
|
||||
[Node("StairsSystem")] public required StairsSystem StairsSystem { get; set; }
|
||||
[Node("HeadSystem/MantleSystem")] public required MantleSystem MantleSystem { get; set; }
|
||||
[Node("DashSystem")] public required DashSystem DashSystem { get; set; }
|
||||
[Node("HeadSystem")] public required HeadSystem HeadSystem { get; set; }
|
||||
[Node("StairsSystem")] public required StairsSystem StairsSystem { get; set; }
|
||||
[Node("HeadSystem/MantleSystem")] public required MantleSystem MantleSystem { get; set; }
|
||||
[Node("DashSystem")] public required DashSystem DashSystem { get; set; }
|
||||
[Node("StandingCollider")] public required CollisionShape3D StandingCollider { get; set; }
|
||||
[Node("SlideCollider")] public required CollisionShape3D SlideCollider { get; set; }
|
||||
[Node("WeaponSystem")] public required WeaponSystem WeaponSystem { get; set; }
|
||||
[Node("WallHugSystem")] public required WallHugSystem WallHugSystem { get; set; }
|
||||
[Node("UI")] public required PlayerUi PlayerUi { get; set; }
|
||||
[Node("GroundDetector")] public required ShapeCast3D GroundDetector { get; set; }
|
||||
[Node("CeilingDetector")] public required ShapeCast3D CeilingDetector { get; set; }
|
||||
[Node("DirectGroundDetector")] public required RayCast3D DirectGroundDetector { get; set; }
|
||||
[Node("%WeaponHitbox")] public required Area3D WeaponHitbox { get; set; }
|
||||
[Node("WeaponSystem")] public required WeaponSystem WeaponSystem { get; set; }
|
||||
[Node("WallHugSystem")] public required WallHugSystem WallHugSystem { get; set; }
|
||||
[Node("UI")] public required PlayerUi PlayerUi { get; set; }
|
||||
[Node("GroundDetector")] public required ShapeCast3D GroundDetector { get; set; }
|
||||
[Node("CeilingDetector")] public required ShapeCast3D CeilingDetector { get; set; }
|
||||
[Node("DirectGroundDetector")] public required RayCast3D DirectGroundDetector { get; set; }
|
||||
[Node("%WeaponHitbox")] public required Area3D WeaponHitbox { get; set; }
|
||||
[Node("SFXPlayer")] public required AudioStreamPlayer3D SfxPlayer { get; set; }
|
||||
[Node("DashDamage")] public required ShapeCast3D DashDamageDetector { get; set; }
|
||||
[Node("SlidingEnemyDetector")] public required Area3D SlidingEnemyDetector { get; set; }
|
||||
[Node("%CloseEnemyDetector")] public required ShapeCast3D CloseEnemyDetector { get; set; }
|
||||
[Node("AimAssistRayCast")] public required RayCast3D AimAssistRayCast { get; set; }
|
||||
[Node("HeadSystem/CameraSmooth/Camera3D")] public required Camera3D Camera { get; set; }
|
||||
|
||||
#endregion
|
||||
|
||||
#region Publics
|
||||
|
||||
public EntityAttributes Attributes { get; set; } = null!;
|
||||
public EntityTags Tags { get; set; } = null!;
|
||||
@@ -423,7 +431,6 @@ public partial class PlayerController : CharacterBody3D, IForgeEntity, ICueHandl
|
||||
InvincibleTag.GetTag().GetSingleTagContainer()!
|
||||
)
|
||||
]);
|
||||
GD.Print("Applying invincibility");
|
||||
_invincibleEffect = EffectsManager.ApplyEffect(new Effect(invincibility,
|
||||
new EffectOwnership(this, this)));
|
||||
|
||||
@@ -432,7 +439,6 @@ public partial class PlayerController : CharacterBody3D, IForgeEntity, ICueHandl
|
||||
|
||||
if (_invincibleEffect == null) return;
|
||||
EffectsManager.RemoveEffect(_invincibleEffect);
|
||||
GD.Print("Removing effect");
|
||||
_invincibleEffect = null;
|
||||
}
|
||||
|
||||
@@ -447,16 +453,6 @@ public partial class PlayerController : CharacterBody3D, IForgeEntity, ICueHandl
|
||||
LoadSettings();
|
||||
|
||||
// General use stuff
|
||||
PlayerUi = GetNode<PlayerUi>("UI");
|
||||
CloseEnemyDetector = GetNode<ShapeCast3D>("%CloseEnemyDetector");
|
||||
CloseEnemyDetector.TargetPosition = CloseEnemyDetector.TargetPosition.Normalized() * TargetingDistance;
|
||||
AimAssistRayCast = GetNode<RayCast3D>("AimAssistRayCast");
|
||||
AimAssistRayCast.TargetPosition = AimAssistRayCast.TargetPosition.Normalized() * (TargetingDistance*1.5f);
|
||||
|
||||
#region Forge
|
||||
|
||||
var tagsManager = ForgeManagers.Instance.TagsManager;
|
||||
var cuesManager = ForgeManagers.Instance.CuesManager;
|
||||
List<AttributeSet> attributeSetList = [];
|
||||
foreach (Node node in GetChildren())
|
||||
{
|
||||
@@ -471,59 +467,21 @@ public partial class PlayerController : CharacterBody3D, IForgeEntity, ICueHandl
|
||||
}
|
||||
}
|
||||
Attributes = new EntityAttributes([.. attributeSetList]);
|
||||
Tags = new(BaseTags.GetTagContainer());
|
||||
EffectsManager = new EffectsManager(this, cuesManager);
|
||||
Abilities = new(this);
|
||||
Events = new();
|
||||
|
||||
HealthAttribute = Attributes["PlayerAttributeSet.Health"];
|
||||
ManaAttribute = Attributes["PlayerAttributeSet.Mana"];
|
||||
|
||||
cuesManager.RegisterCue(Tag.RequestTag(tagsManager, "cues.resources.health"), this);
|
||||
Tags = new(BaseTags.GetTagContainer());
|
||||
Abilities = new(this);
|
||||
Events = new();
|
||||
|
||||
PlayerUi.Init(HealthAttribute, ManaAttribute);
|
||||
|
||||
CloseEnemyDetector.TargetPosition = CloseEnemyDetector.TargetPosition.Normalized() * TargetingDistance;
|
||||
AimAssistRayCast.TargetPosition = AimAssistRayCast.TargetPosition.Normalized() * (TargetingDistance*1.5f);
|
||||
|
||||
if (EmpoweredActionAbility != null)
|
||||
{
|
||||
_empoweredActionHandle = Abilities.GrantAbilityPermanently(
|
||||
EmpoweredActionAbility.GetAbilityData(),
|
||||
abilityLevel: 1,
|
||||
levelOverridePolicy: LevelComparison.None,
|
||||
sourceEntity: this);
|
||||
}
|
||||
|
||||
foreach (var defaultGrantedAbility in DefaultGrantedAbilities)
|
||||
{
|
||||
Abilities.GrantAbilityPermanently(
|
||||
defaultGrantedAbility.GetAbilityData(),
|
||||
abilityLevel: 1,
|
||||
levelOverridePolicy: LevelComparison.None,
|
||||
sourceEntity: this);
|
||||
}
|
||||
|
||||
// Apply all default effects
|
||||
foreach (var effect in DefaultPermanentEffects)
|
||||
{
|
||||
EffectsManager.ApplyEffect(new Effect(effect.GetEffectData(), new EffectOwnership(this, this)));
|
||||
}
|
||||
|
||||
// Subscribe default empowered actions effects to the Empowered Action Used event
|
||||
foreach (var effect in EmpoweredActionEffects)
|
||||
{
|
||||
Events.Subscribe<EmpoweredActionPayload>(EmpoweredActionUsed.GetTag(), data =>
|
||||
{
|
||||
EffectsManager.ApplyEffect(new Effect(effect.GetEffectData(), new EffectOwnership(this, this)));
|
||||
});
|
||||
}
|
||||
|
||||
Events.Subscribe(Tag.RequestTag(ForgeManagers.Instance.TagsManager, "events.combat.damage"), OnDamageReceived);
|
||||
Events.Subscribe(Tag.RequestTag(ForgeManagers.Instance.TagsManager, "events.combat.death"), OnDeath);
|
||||
|
||||
PlayerUi.Initialize(HealthAttribute, ManaAttribute);
|
||||
#endregion
|
||||
|
||||
// DashIndicator = GetNode<TextureRect>("%DashIndicator");
|
||||
TargetSpeed = WalkSpeed;
|
||||
|
||||
SfxPlayer = GetNode<AudioStreamPlayer3D>("SFXPlayer");
|
||||
_audioStream = (SfxPlayer.GetStreamPlayback() as AudioStreamPlaybackInteractive)!;
|
||||
|
||||
// Camera stuff
|
||||
@@ -544,7 +502,6 @@ public partial class PlayerController : CharacterBody3D, IForgeEntity, ICueHandl
|
||||
_playerRadius = playerShape.Radius;
|
||||
|
||||
// Combat stuff
|
||||
WeaponHitbox = GetNode<Area3D>("%WeaponHitbox");
|
||||
WeaponHitbox.Monitoring = false;
|
||||
WeaponHitbox.BodyEntered += RegisterHitEnnemy;
|
||||
|
||||
@@ -728,6 +685,47 @@ public partial class PlayerController : CharacterBody3D, IForgeEntity, ICueHandl
|
||||
|
||||
public void OnResolved()
|
||||
{
|
||||
#region Forge
|
||||
EffectsManager = new EffectsManager(this, CuesManager);
|
||||
CuesManager.RegisterCue(Tag.RequestTag(TagsManager, "cues.resources.health"), this);
|
||||
|
||||
if (EmpoweredActionAbility != null)
|
||||
{
|
||||
_empoweredActionHandle = Abilities.GrantAbilityPermanently(
|
||||
EmpoweredActionAbility.GetAbilityData(),
|
||||
abilityLevel: 1,
|
||||
levelOverridePolicy: LevelComparison.None,
|
||||
sourceEntity: this);
|
||||
}
|
||||
|
||||
foreach (var defaultGrantedAbility in DefaultGrantedAbilities)
|
||||
{
|
||||
Abilities.GrantAbilityPermanently(
|
||||
defaultGrantedAbility.GetAbilityData(),
|
||||
abilityLevel: 1,
|
||||
levelOverridePolicy: LevelComparison.None,
|
||||
sourceEntity: this);
|
||||
}
|
||||
|
||||
// Apply all default effects
|
||||
foreach (var effect in DefaultPermanentEffects)
|
||||
{
|
||||
EffectsManager.ApplyEffect(new Effect(effect.GetEffectData(), new EffectOwnership(this, this)));
|
||||
}
|
||||
|
||||
// Subscribe default empowered actions effects to the Empowered Action Used event
|
||||
foreach (var effect in EmpoweredActionEffects)
|
||||
{
|
||||
Events.Subscribe<EmpoweredActionPayload>(EmpoweredActionUsed.GetTag(), data =>
|
||||
{
|
||||
EffectsManager.ApplyEffect(new Effect(effect.GetEffectData(), new EffectOwnership(this, this)));
|
||||
});
|
||||
}
|
||||
|
||||
Events.Subscribe(Tag.RequestTag(TagsManager, "events.combat.damage"), OnDamageReceived);
|
||||
Events.Subscribe(Tag.RequestTag(TagsManager, "events.combat.death"), OnDeath);
|
||||
#endregion
|
||||
|
||||
// Initialize weapon with inventory abilities
|
||||
WeaponSystem.RemoveAllEventAbilities();
|
||||
foreach (var (weaponEvent, abilities) in InventoryManager.WeaponEventsInventory)
|
||||
@@ -757,7 +755,7 @@ public partial class PlayerController : CharacterBody3D, IForgeEntity, ICueHandl
|
||||
{
|
||||
var target = data.Target;
|
||||
|
||||
var tagsManager = ForgeManagers.Instance.TagsManager;
|
||||
var tagsManager = TagsManager;
|
||||
var weaponLeftTag = Tag.RequestTag(tagsManager, "abilities.weapon.left").GetSingleTagContainer();
|
||||
if (weaponLeftTag == null) return;
|
||||
Abilities.TryActivateAbilitiesByTag(weaponLeftTag, target, out var landedFailures);
|
||||
@@ -770,7 +768,7 @@ public partial class PlayerController : CharacterBody3D, IForgeEntity, ICueHandl
|
||||
var magnitude = data.EventMagnitude;
|
||||
var weaponLandPayload = data.Payload;
|
||||
|
||||
var tagsManager = ForgeManagers.Instance.TagsManager;
|
||||
var tagsManager = TagsManager;
|
||||
|
||||
var weaponLandTag = Tag.RequestTag(tagsManager, "abilities.weapon.land").GetSingleTagContainer();
|
||||
if (weaponLandTag == null) return;
|
||||
@@ -2337,11 +2335,6 @@ public partial class PlayerController : CharacterBody3D, IForgeEntity, ICueHandl
|
||||
// private float _oldMana = 100;
|
||||
public override void _Process(double delta)
|
||||
{
|
||||
if (Engine.GetProcessFrames() % 60 == 0)
|
||||
{
|
||||
GD.Print(_invincibleEffect);
|
||||
GD.Print(Tags.CombinedTags.Count);
|
||||
}
|
||||
EffectsManager.UpdateEffects(delta);
|
||||
}
|
||||
|
||||
@@ -2644,7 +2637,7 @@ public partial class PlayerController : CharacterBody3D, IForgeEntity, ICueHandl
|
||||
var newHealth = HealthAttribute.CurrentValue + data.EventMagnitude;
|
||||
if (newHealth > HealthAttribute.Min) return;
|
||||
|
||||
var tagsManager = ForgeManagers.Instance.TagsManager;
|
||||
var tagsManager = TagsManager;
|
||||
Events.Raise(new EventData
|
||||
{
|
||||
EventTags = Tag.RequestTag(tagsManager, "events.combat.death").GetSingleTagContainer()!,
|
||||
|
||||
Reference in New Issue
Block a user