WIP: integrating forge systems into the game, now trying periodic abilities
This commit is contained in:
@@ -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)
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
///////////////////////////
|
||||
|
||||
Reference in New Issue
Block a user