token manager for projectile

This commit is contained in:
2026-05-16 01:29:02 +02:00
parent afa335e7bf
commit 4cd67023d9
7 changed files with 83 additions and 7 deletions

View File

@@ -15,6 +15,7 @@ using Gamesmiths.Forge.Tags;
using Godot;
using Movementtests.forge.abilities;
using Movementtests.interfaces;
using Movementtests.managers;
using Movementtests.scenes.components.knockback;
using Movementtests.systems;
using Movementtests.tools;
@@ -38,6 +39,8 @@ public partial class Enemy : CharacterBody3D,
public TagsManager TagsManager => this.DependOn<TagsManager>();
[Dependency]
public CuesManager CuesManager => this.DependOn<CuesManager>();
[Dependency]
public TokenManager TokenManager => this.DependOn<TokenManager>();
#endregion
@@ -140,13 +143,16 @@ public partial class Enemy : CharacterBody3D,
private void ProjectileTokenRequested(EventData obj)
{
if (IsStunned()) return;
// TODO: replace with token manager
var token = TokenManager.RequestToken(this);
if (token == null) return;
Events.Raise(new EventData<OnProjectileSpawned>
{
EventTags = Tag.RequestTag(TagsManager, "events.enemy.launch_projectile").GetSingleTagContainer()!,
Source = this,
Target = Target as IForgeEntity,
Payload = new OnProjectileSpawned(Vector3.Up, 20, Vector3.Up)
Payload = new OnProjectileSpawned(Vector3.Up, 20, Vector3.Up, Token: token)
});
}

View File

@@ -11,6 +11,7 @@ using Gamesmiths.Forge.Godot.Resources.Abilities;
using Gamesmiths.Forge.Statescript;
using Gamesmiths.Forge.Tags;
using Movementtests.interfaces;
using Movementtests.managers;
using Movementtests.tools;
using Node = Godot.Node;
@@ -73,6 +74,7 @@ public partial class Projectile : RigidBody3D, IForgeEntity, ITargetable, IKilla
public Node3D? Target { get; set; }
public Vector3? ImpulseDirection { get; set; }
public TokenManager.Token? Token { get; set; }
public void Init()
{
@@ -148,6 +150,7 @@ public partial class Projectile : RigidBody3D, IForgeEntity, ITargetable, IKilla
public void Kill()
{
Token?.OnUse.Invoke();
QueueFree(); // If thrown offmap
}
}