Files
Project-M/Assets/_Project/Scripts/Client/Presentation/VFXConfig.cs
T
kronic a482a9c4ed Phase 1 A/C/D: void room fixed, authored portal + spawn FX, verbs finally taught
SLICE A - rooms become places: ExpeditionBiome duplicated to sub-slot 1
(X+1500) - ground, 205 decor children, rim cliffs, ambience; collider ring +
3 landmark colliders duplicated in the subscene; NEW in-room cover at BOTH
slots (4 collidable rocks each: Environment-layer box colliders in the
subscene + matching Synty rock meshes in Game.unity, placed clear of the
landing point, portal spot, spawn ring and boss spawn). Half of all rooms
previously played on a literal void.

SLICE C - owned FX wired: VFXConfig gains Portal + EnemySpawn slots
(FX_Portal_Round_01 / FX_Dust_Big_01 from PolygonParticleFX); the portal
beacon prefers the authored effect (procedural pillar stays as fallback);
enemies get a spawn-emerge cue on the ghost add-edge (primed-scan guard
skips the connect flood).

SLICE D (teaching) - the two undiscoverable verbs are now taught: dash on
the Move step, class ability + attack on the Rooms step (scheme-aware
glyphs); How-to-Play Controls adds Class ability + Dash rows and fixes the
wrong RT glyph; Loop step 1 mentions class pick + prep; the stale '50
starting Ore' now interpolates Tuning.StartingOre.

456/456 EditMode.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 12:45:25 -07:00

42 lines
1.7 KiB
C#

using UnityEngine;
namespace ProjectM.Client
{
/// <summary>
/// Client-side bridge that hands authored VFX prefabs (GabrielAguiar Shuriken systems) to
/// <see cref="CombatFeedbackSystem"/>. Mirrors the <see cref="PrototypeCameraRig"/> pattern: a MonoBehaviour
/// in the bootstrap scene exposes a static <see cref="Instance"/> the client presentation system reads.
/// Any field left null falls back to the procedural particle burst, so the game still runs without it.
/// </summary>
public class VFXConfig : MonoBehaviour
{
public static VFXConfig Instance { get; private set; }
[Header("Combat VFX (one-shot Shuriken prefabs)")]
[Tooltip("Spawned at the player muzzle on each shot.")]
public GameObject Muzzle;
[Tooltip("Follows each in-flight projectile ghost; destroyed when the projectile despawns.")]
public GameObject ProjectileTrail;
[Tooltip("Spawned at a damaged target on each hit.")]
public GameObject Hit;
[Tooltip("Spawned at a Husk's last position when it dies.")]
public GameObject EnemyDeath;
[Tooltip("Spawned when the local player drops to 0 HP (falls back to EnemyDeath if null).")]
public GameObject PlayerDeath;
[Tooltip("Looping portal effect anchored at the room-exit during RoomExplore (falls back to the procedural pillar if null).")]
public GameObject Portal;
[Tooltip("One-shot at each enemy's spawn position (first sighting of a fresh ghost).")]
public GameObject EnemySpawn;
void Awake()
{
Instance = this;
}
void OnDestroy()
{
if (Instance == this) Instance = null;
}
}
}