WIP: integrating forge systems into the game, now trying periodic abilities

This commit is contained in:
2026-03-28 11:43:34 +01:00
parent 7bf19868e7
commit cc70fb361b
12 changed files with 242 additions and 43 deletions

View File

@@ -6,7 +6,10 @@ using Gamesmiths.Forge.Effects;
using Gamesmiths.Forge.Effects.Components;
using Gamesmiths.Forge.Effects.Duration;
using Gamesmiths.Forge.Effects.Magnitudes;
using Gamesmiths.Forge.Effects.Modifiers;
using Gamesmiths.Forge.Effects.Periodic;
using Gamesmiths.Forge.Events;
using Gamesmiths.Forge.Godot.Resources.Abilities;
using Gamesmiths.Forge.Tags;
using Godot;
@@ -707,25 +710,83 @@ public partial class PlayerController : CharacterBody3D,
foreach (var weaponLandAbility in AbilityLoadout)
{
var grantAbilityConfig = new GrantAbilityConfig(
weaponLandAbility.Ability(tagsManager, WeaponSystem),
// var weaponLeftTag = Tag.RequestTag(tagsManager,"abilities.weapon.left").GetSingleTagContainer();
// var leftGrantAbilityConfig = new GrantAbilityConfig(
// weaponLandAbility.Ability(tagsManager, weaponLeftTag, WeaponSystem),
// ScalableLevel: new ScalableInt(1),
// RemovalPolicy: AbilityDeactivationPolicy.CancelImmediately,
// InhibitionPolicy: AbilityDeactivationPolicy.CancelImmediately,
// TryActivateOnGrant: false,
// TryActivateOnEnable: false,
// LevelOverridePolicy: LevelComparison.Higher);
//
// var leftGrantComponent = new GrantAbilityEffectComponent([leftGrantAbilityConfig]);
// var leftGrantEffect = new EffectData(
// "Grant Weapon Left Ability",
// new DurationData(DurationType.Infinite),
// effectComponents: [leftGrantComponent]);
// EffectsManager.ApplyEffect(new Effect(leftGrantEffect, new EffectOwnership(this, this)));
//
// var weaponLandedTag = Tag.RequestTag(tagsManager, "abilities.weapon.land").GetSingleTagContainer();
// var landGrantAbilityConfig = new GrantAbilityConfig(
// weaponLandAbility.Ability(tagsManager, weaponLandedTag, WeaponSystem),
// ScalableLevel: new ScalableInt(1),
// RemovalPolicy: AbilityDeactivationPolicy.CancelImmediately,
// InhibitionPolicy: AbilityDeactivationPolicy.CancelImmediately,
// TryActivateOnGrant: false,
// TryActivateOnEnable: false,
// LevelOverridePolicy: LevelComparison.Higher);
//
// var landGrantComponent = new GrantAbilityEffectComponent([landGrantAbilityConfig]);
// var landGrantEffect = new EffectData(
// "Grant Weapon Land Ability",
// new DurationData(DurationType.Infinite),
// effectComponents: [landGrantComponent]);
// EffectsManager.ApplyEffect(new Effect(landGrantEffect, new EffectOwnership(this, this)));
//
//////////////////////////////////////////////
var weaponFlyingTag = Tag.RequestTag(tagsManager,"abilities.weapon.flying").GetSingleTagContainer();
var weaponFlyingAbilityData = new AbilityData(
name: "Exploding Flying Sword",
abilityTags: weaponFlyingTag,
instancingPolicy: AbilityInstancingPolicy.PerEntity,
abilityTriggerData: AbilityTriggerData.ForEvent<WeaponFlyingPayload>(WeaponSystem.WeaponFlyingTickTag),
behaviorFactory: () => new ExplodingSwordThrowBehavior<WeaponFlyingPayload>(WeaponSystem, Explosion));
var flyingGrantAbilityConfig = new GrantAbilityConfig(
weaponFlyingAbilityData,
ScalableLevel: new ScalableInt(1),
RemovalPolicy: AbilityDeactivationPolicy.CancelImmediately,
InhibitionPolicy: AbilityDeactivationPolicy.CancelImmediately,
TryActivateOnGrant: false,
TryActivateOnEnable: false,
TryActivateOnEnable: true,
LevelOverridePolicy: LevelComparison.Higher);
var grantComponent = new GrantAbilityEffectComponent([grantAbilityConfig]);
var grantEffect = new EffectData(
"Grant Weapon Land Ability",
var flyingGrantComponent = new GrantAbilityEffectComponent([flyingGrantAbilityConfig]);
var flyingGrantEffect = new EffectData(
"Grant Weapon Flying Ability",
new DurationData(DurationType.Infinite),
effectComponents: [grantComponent]);
EffectsManager.ApplyEffect(new Effect(grantEffect, new EffectOwnership(this, this)));
effectComponents: [flyingGrantComponent]
);
EffectsManager.ApplyEffect(new Effect(flyingGrantEffect, new EffectOwnership(this, this)));
}
// Forge events
EventSubscriptionToken token = WeaponSystem.Events.Subscribe<WeaponLandPayload>(WeaponSystem.WeaponLandTag, OnWeaponLanded);
var weaponLeftToken = WeaponSystem.Events.Subscribe<WeaponLeftPayload>(WeaponSystem.WeaponLeftTag, OnWeaponLeft);
var weaponFlyingToken = WeaponSystem.Events.Subscribe<WeaponFlyingPayload>(WeaponSystem.WeaponFlyingTickTag, data => Events.Raise(data));
var weaponLandedToken = WeaponSystem.Events.Subscribe<WeaponLandPayload>(WeaponSystem.WeaponLandTag, OnWeaponLanded);
}
public void OnWeaponLeft(EventData<WeaponLeftPayload> data)
{
var target = data.Target;
var tagsManager = ForgeManager.GetTagsManager(this);
var weaponLeftTag = Tag.RequestTag(tagsManager, "abilities.weapon.left").GetSingleTagContainer();
if (weaponLeftTag == null) return;
Abilities.TryActivateAbilitiesByTag(weaponLeftTag, target, out var landedFailures);
}
public void OnWeaponLanded(EventData<WeaponLandPayload> data)
@@ -736,15 +797,13 @@ public partial class PlayerController : CharacterBody3D,
var weaponLandPayload = data.Payload;
var tagsManager = ForgeManager.GetTagsManager(this);
var weaponLandTag = Tag.RequestTag(tagsManager, "abilities.weapon.land").GetSingleTagContainer();
if (weaponLandTag == null) return;
var anyActivated = Abilities.TryActivateAbilitiesByTag(
weaponLandTag,
target,
out var failures);
if (anyActivated)
{
}
}
///////////////////////////