/// <summary> /// Create thrusts backfire effect and attach to target gameobject. /// </summary> /// <param name="target">Object to add effect to.</param> private void AddBackfireEffect(GameObject target) { // create a particle type of the ship thrust fire effect BaseAnimatorProperties prop = BaseAnimatorProperties.Defaults; GameObject backfire = new GameObject("backfire"); // create a sphere renderer for the backfire particle ShapeRenderer renderer = backfire.AddComponent(new ShapeRenderer(ShapeMeshes.SphereSmooth)) as ShapeRenderer; renderer.RenderingQueue = GeonBit.Core.Graphics.RenderingQueue.Effects; // add animators, jitter and time-to-live backfire.AddComponent(new TimeToLive(0.5f)); backfire.AddComponent(new SpawnRandomizer(minColor: Color.Red, maxColor: Color.Yellow)); backfire.AddComponent(new FadeAnimator(prop, 1.0f, 0f, 0.5f)); backfire.AddComponent(new ScaleAnimator(prop, 0.5f, 0.1f, 0.5f)); backfire.AddComponent(new MotionAnimator(prop, Vector3.Backward * 15)); // create particles system for the backfire effect GameObject backfireSystem = new GameObject("backfire-system"); backfireSystem.SceneNode.PositionZ = 1f; ParticleSystem system = backfireSystem.AddComponent(new ParticleSystem()) as ParticleSystem; // add our backfire particle and set frequency system.AddParticleType(new ParticleType(backfire, frequency: 1.0f)); system.Interval = 0.025f; system.AddParticlesToRoot = true; // attach particle system to player backfireSystem.Parent = target; }
/// <summary> /// Create the fade animator. /// </summary> /// <param name="properties">Basic animator properties.</param> /// <param name="fromAlpha">Starting alpha.</param> /// <param name="toAlpha">Ending alpha.</param> /// <param name="fadeTime">How long to transition from starting to ending alpha.</param> /// <param name="fadeTimeJitter">If provided, will add random jitter to fading time.</param> public FadeAnimator(BaseAnimatorProperties properties, float fromAlpha, float toAlpha, float fadeTime, float fadeTimeJitter = 0f) : base(properties) { // set basic properties FromAlpha = fromAlpha; ToAlpha = toAlpha; FadingTime = fadeTime; _fadeTimeJitter = fadeTimeJitter; }
/// <summary> /// Create explosion effect object prototype. /// </summary> private void InitExplosions() { // create an explosion object BaseAnimatorProperties prop = BaseAnimatorProperties.Defaults; GameObject explosion = new GameObject("explosion"); // create a sphere renderer for the explosion effect ShapeRenderer renderer = explosion.AddComponent(new ShapeRenderer(ShapeMeshes.SphereSmooth)) as ShapeRenderer; renderer.RenderingQueue = GeonBit.Core.Graphics.RenderingQueue.Effects; // add animators, jitter and time-to-live explosion.AddComponent(new TimeToLive(0.5f)); explosion.AddComponent(new SpawnRandomizer(minColor: Color.Red, maxColor: Color.Yellow)); explosion.AddComponent(new FadeAnimator(prop, 1.0f, 0f, 0.5f)); explosion.AddComponent(new ScaleAnimator(prop, 0.5f, 2.5f, 0.5f)); // add sound when explosion spawns SoundEffect explosionSound = new SoundEffect("game/explode"); explosionSound.PlayOnSpawn = true; explosion.AddComponent(explosionSound); // register as prototype Managers.Prototypes.Register(explosion); // create particles system for multiple explosions effect explosion.AddComponent(new SpawnRandomizer(positionJitter: Vector3.One * 1.5f)); GameObject explosionsSet = new GameObject("explosions-set"); ParticleSystem system = explosionsSet.AddComponent(new ParticleSystem()) as ParticleSystem; // add our explosion particle and set frequency system.AddParticleType(new ParticleType(explosion, frequency: 1.0f, frequencyChange: -0.35f)); system.Interval = 0.05f; system.TimeToLive = 3.0f; system.DestroyParentWhenExpired = true; system.AddParticlesToRoot = true; // register as prototype Managers.Prototypes.Register(explosionsSet); }