Example #1
0
    void Update()
    {
        for (int i = 0; i < emitters.Count; i++)
        {
            EmitterClass     emit     = emitters[i];
            EmissionSettings settings = emit.settings;
            float            travDist = (emit.lastEmissionPos - emit.emitterTransform.position).magnitude;
            int innerLoop             = Mathf.FloorToInt(travDist);

            if (settings.interpolateEmission && innerLoop > 0)
            {
                for (int j = 0; j < innerLoop; j++)
                {
                    Vector3 randomVelo  = DarkRef.RandomVector3(settings.emitVelocity[0], settings.emitVelocity[1]);
                    float   randomSize  = Random.Range(settings.emitSize.x, settings.emitSize.y);
                    float   randomLife  = Random.Range(settings.emitLifetime.x, settings.emitLifetime.y);
                    Color   randomColor = Color.Lerp(settings.emitColors[0], settings.emitColors[1], Random.value);
                    thisSystem.Emit(Vector3.Lerp(emit.lastEmissionPos, emit.emitterTransform.position, (1f / innerLoop) * j) + (Random.insideUnitSphere * settings.emissionRadius), randomVelo, randomSize, randomLife, randomColor);
                }
            }
            else if (travDist >= emit.settings.emissionDistance)
            {
                Vector3 randomVelo  = DarkRef.RandomVector3(settings.emitVelocity[0], settings.emitVelocity[1]);
                float   randomSize  = Random.Range(settings.emitSize.x, settings.emitSize.y);
                float   randomLife  = Random.Range(settings.emitLifetime.x, settings.emitLifetime.y);
                Color   randomColor = Color.Lerp(settings.emitColors[0], settings.emitColors[1], Random.value);
                thisSystem.Emit(emit.emitterTransform.position + (Random.insideUnitSphere * settings.emissionRadius), randomVelo, randomSize, randomLife, randomColor);
            }

            emit.lastEmissionPos = emit.emitterTransform.position;
        }
    }
        public EmissionSettings ToEmissionSettings(string contentManagerName)
        {
            EmissionSettings emissionSettings = new EmissionSettings();
            emissionSettings.VelocityRangeType = VelocityRangeType;

            emissionSettings.RadialVelocity = RadialVelocity;
            emissionSettings.RadialVelocityRange = RadialVelocityRange;

            emissionSettings.Billboarded = Billboarded;

            emissionSettings.XVelocity = XVelocity;
            emissionSettings.YVelocity = YVelocity;
            emissionSettings.ZVelocity = ZVelocity;
            emissionSettings.XVelocityRange = XVelocityRange;
            emissionSettings.YVelocityRange = YVelocityRange;
            emissionSettings.ZVelocityRange = ZVelocityRange;

            emissionSettings.WedgeAngle = WedgeAngle;
            emissionSettings.WedgeSpread = WedgeSpread;

            emissionSettings.RotationX = RotationX;
            emissionSettings.RotationXVelocity = RotationXVelocity;
            emissionSettings.RotationXRange = RotationXRange;
            emissionSettings.RotationXVelocityRange = RotationXVelocityRange;

            emissionSettings.RotationY = RotationY;
            emissionSettings.RotationYVelocity = RotationYVelocity;
            emissionSettings.RotationYRange = RotationYRange;
            emissionSettings.RotationYVelocityRange = RotationYVelocityRange;

            emissionSettings.RotationZ = RotationZ;
            emissionSettings.RotationZVelocity = RotationZVelocity;
            emissionSettings.RotationZRange = RotationZRange;
            emissionSettings.RotationZVelocityRange = RotationZVelocityRange;

            emissionSettings.XAcceleration = XAcceleration;
            emissionSettings.YAcceleration = YAcceleration;
            emissionSettings.ZAcceleration = ZAcceleration;

            emissionSettings.XAccelerationRange = XAccelerationRange;
            emissionSettings.YAccelerationRange = YAccelerationRange;
            emissionSettings.ZAccelerationRange = ZAccelerationRange;

            emissionSettings.Drag = Drag;

            emissionSettings.ScaleX = ScaleX;
            emissionSettings.ScaleY = ScaleY;
            emissionSettings.ScaleXRange = ScaleXRange;
            emissionSettings.ScaleYRange = ScaleYRange;

            emissionSettings.ScaleXVelocity = ScaleXVelocity;
            emissionSettings.ScaleYVelocity = ScaleYVelocity;
            emissionSettings.ScaleXVelocityRange = ScaleXVelocityRange;
            emissionSettings.ScaleYVelocityRange = ScaleYVelocityRange;

            emissionSettings.MatchScaleXToY = MatchScaleXToY;

            if (TextureScale > 0)
            {
                emissionSettings.TextureScale = TextureScale;
            }
            else
            {
                emissionSettings.TextureScale = -1;
            }


#if FRB_MDX
            float divisionValue = 1;
#else
            float divisionValue = 255;
#endif
            emissionSettings.Alpha = (255 - Fade) / divisionValue;
            emissionSettings.Red = TintRed / divisionValue;
            emissionSettings.Green = TintGreen / divisionValue;
            emissionSettings.Blue = TintBlue / divisionValue;

            emissionSettings.AlphaRate = -FadeRate / divisionValue;
            emissionSettings.RedRate = TintRedRate / divisionValue;
            emissionSettings.BlueRate = TintBlueRate / divisionValue;
            emissionSettings.GreenRate = TintGreenRate / divisionValue;

            emissionSettings.BlendOperation = 
                GraphicalEnumerations.TranslateBlendOperation(BlendOperation);
            emissionSettings.ColorOperation =
                GraphicalEnumerations.TranslateColorOperation(ColorOperation);

            emissionSettings.Animate = Animate;
            emissionSettings.CurrentChainName = CurrentChainName;

            // load the animation chains or the texture but not both
            // chains take priority over texture?
            if (!string.IsNullOrEmpty(AnimationChains))
            {
                // load the animation chain, note that this could throw an exception if file names are bad or chain doesn't exist!
                emissionSettings.AnimationChains = FlatRedBallServices.Load<AnimationChainList>(AnimationChains, contentManagerName);
                if (!string.IsNullOrEmpty(CurrentChainName))
                {
                    emissionSettings.AnimationChain = emissionSettings.AnimationChains[emissionSettings.CurrentChainName];
                }
            }
            else
            {
                if (!string.IsNullOrEmpty(Texture))
                {
                    // load the texture, 
                    emissionSettings.Texture = FlatRedBallServices.Load<Texture2D>(Texture, contentManagerName);
                }
            }

            if (Instructions != null)
            {
                emissionSettings.Instructions = Instructions.ToInstructionBlueprintList();

                foreach (InstructionBlueprint blueprint in emissionSettings.Instructions)
                {

                    if (GraphicalEnumerations.ConvertableSpriteProperties.Contains(blueprint.MemberName))
                    {
                        blueprint.MemberValue = (float)blueprint.MemberValue / divisionValue;
                    }

                    //if(blueprint.MemberName.Equals("Alpha")){

                    //}

                    //else if(blueprint.MemberName.Equals("AlphaRate")){

                    //}
                    //else if(blueprint.MemberName.Equals("Blue")){

                    //}
                    //else if(blueprint.MemberName.Equals("BlueRate")){

                    //}
                    //else if(blueprint.MemberName.Equals("Green")){

                    //}
                    //else if(blueprint.MemberName.Equals("GreenRate")){

                    //}
                    //else if(blueprint.MemberName.Equals("Red")){

                    //}
                    //else if(blueprint.MemberName.Equals("RedRate")){

                    //}
                }

            }

            // TODO:  Add support for saving AnimationChains.  Probably need to change the mAnimation
            // field from an AnimationChain to an AnimationChainSave

            return emissionSettings;
        }
        public static EmissionSettingsSave FromEmissionSettings(EmissionSettings emissionSettings)
        {
            EmissionSettingsSave emissionSettingsSave = new EmissionSettingsSave();

            emissionSettingsSave.mVelocityRangeType = emissionSettings.VelocityRangeType;
            emissionSettingsSave.mRadialVelocity = emissionSettings.RadialVelocity;
            emissionSettingsSave.mRadialVelocityRange = emissionSettings.RadialVelocityRange;

            emissionSettingsSave.mXVelocity = emissionSettings.XVelocity;
            emissionSettingsSave.mYVelocity = emissionSettings.YVelocity;
            emissionSettingsSave.mZVelocity = emissionSettings.ZVelocity;

            emissionSettingsSave.mXVelocityRange = emissionSettings.XVelocityRange;
            emissionSettingsSave.mYVelocityRange = emissionSettings.YVelocityRange;
            emissionSettingsSave.mZVelocityRange = emissionSettings.ZVelocityRange;

            emissionSettingsSave.mWedgeAngle = emissionSettings.WedgeAngle;
            emissionSettingsSave.mWedgeSpread = emissionSettings.WedgeSpread;

            emissionSettingsSave.Billboarded = emissionSettings.Billboarded;

            emissionSettingsSave.mRotationX = emissionSettings.RotationX;
            emissionSettingsSave.mRotationXVelocity = emissionSettings.RotationXVelocity;
            emissionSettingsSave.mRotationXRange = emissionSettings.RotationXRange;
            emissionSettingsSave.mRotationXVelocityRange = emissionSettings.RotationXVelocityRange;

            emissionSettingsSave.mRotationY = emissionSettings.RotationY;
            emissionSettingsSave.mRotationYVelocity = emissionSettings.RotationYVelocity;
            emissionSettingsSave.mRotationYRange = emissionSettings.RotationYRange;
            emissionSettingsSave.mRotationYVelocityRange = emissionSettings.RotationYVelocityRange;
            

            emissionSettingsSave.mRotationZ = emissionSettings.RotationZ;
            emissionSettingsSave.mRotationZVelocity = emissionSettings.RotationZVelocity;
            emissionSettingsSave.mRotationZRange = emissionSettings.RotationZRange;
            emissionSettingsSave.mRotationZVelocityRange = emissionSettings.RotationZVelocityRange;

            emissionSettingsSave.mXAcceleration = emissionSettings.XAcceleration;
            emissionSettingsSave.mYAcceleration = emissionSettings.YAcceleration;
            emissionSettingsSave.mZAcceleration = emissionSettings.ZAcceleration;

            emissionSettingsSave.mXAccelerationRange = emissionSettings.XAccelerationRange;
            emissionSettingsSave.mYAccelerationRange = emissionSettings.YAccelerationRange;
            emissionSettingsSave.mZAccelerationRange = emissionSettings.ZAccelerationRange;

            emissionSettingsSave.mScaleX = emissionSettings.ScaleX;
            emissionSettingsSave.mScaleY = emissionSettings.ScaleY;
            emissionSettingsSave.mScaleXRange = emissionSettings.ScaleXRange;
            emissionSettingsSave.mScaleYRange = emissionSettings.ScaleYRange;

            emissionSettingsSave.mMatchScaleXToY = emissionSettings.MatchScaleXToY;

            emissionSettingsSave.mScaleXVelocity = emissionSettings.ScaleXVelocity;
            emissionSettingsSave.mScaleYVelocity = emissionSettings.ScaleYVelocity;

            emissionSettingsSave.mScaleXVelocityRange = emissionSettings.ScaleXVelocityRange;
            emissionSettingsSave.mScaleYVelocityRange = emissionSettings.ScaleYVelocityRange;

            if (emissionSettings.TextureScale > 0)
            {
                emissionSettingsSave.TextureScale = emissionSettings.TextureScale;
            }
            else
            {
                emissionSettingsSave.TextureScale = -1;
            }

#if FRB_MDX
            int multiple = 1;
            emissionSettingsSave.mFade = 255 - emissionSettings.Alpha;
            emissionSettingsSave.mTintRed = emissionSettings.Red;
            emissionSettingsSave.mTintGreen = emissionSettings.Green;
            emissionSettingsSave.mTintBlue = emissionSettings.Blue;

            emissionSettingsSave.mFadeRate = -emissionSettings.AlphaRate;
            emissionSettingsSave.mTintRedRate = emissionSettings.RedRate;
            emissionSettingsSave.mTintGreenRate = emissionSettings.GreenRate;
            emissionSettingsSave.mTintBlueRate = emissionSettings.BlueRate;

#elif FRB_XNA || SILVERLIGHT
            int multiple = 255;
            emissionSettingsSave.mFade = (1 - emissionSettings.Alpha) * 255;
            emissionSettingsSave.mTintRed = emissionSettings.Red * 255;
            emissionSettingsSave.mTintGreen = emissionSettings.Green * 255;
            emissionSettingsSave.mTintBlue = emissionSettings.Blue * 255;

            emissionSettingsSave.mFadeRate = -emissionSettings.AlphaRate*255;
            emissionSettingsSave.mTintRedRate = emissionSettings.RedRate*255;
            emissionSettingsSave.mTintGreenRate = emissionSettings.GreenRate*255;
            emissionSettingsSave.mTintBlueRate = emissionSettings.BlueRate*255;
#endif
            emissionSettingsSave.mBlendOperation =
                GraphicalEnumerations.BlendOperationToFlatRedBallMdxString(emissionSettings.BlendOperation);

#if FRB_MDX
            emissionSettingsSave.mColorOperation = GraphicalEnumerations.TranslateColorOperation(emissionSettings.ColorOperation);
#else
            emissionSettingsSave.mColorOperation = GraphicalEnumerations.ColorOperationToFlatRedBallMdxString(
                emissionSettings.ColorOperation);
            
#endif

            // preserve animation  and texture settings
            emissionSettingsSave.mAnimate = emissionSettings.Animate;

            // TODO: Justin - not sure if we need to force relative here?
            emissionSettingsSave.AnimationChains = emissionSettings.AnimationChains.Name;
            emissionSettingsSave.CurrentChainName = emissionSettings.CurrentChainName;
            
            // TODO: Justin - not sure if we neet to force relative here?
            emissionSettingsSave.Texture = emissionSettings.Texture.Name;

            emissionSettingsSave.Instructions = InstructionBlueprintListSave.FromInstructionBlueprintList(emissionSettings.Instructions);
            foreach (InstructionSave blueprint in emissionSettingsSave.Instructions.Instructions)
            {
                if (GraphicalEnumerations.ConvertableSpriteProperties.Contains(blueprint.Member))
                {
                    blueprint.Value = (float)blueprint.Value * multiple;
                }
            }
            emissionSettingsSave.mDrag = emissionSettings.Drag;

            return emissionSettingsSave;

        }
Example #4
0
        public Emitter ToEmitter(string contentManagerName)
        {
            Emitter emitter = new Emitter();

            emitter.Position = new Vector3(X, Y, Z);

            emitter.ScaleX = ScaleX;
            emitter.ScaleY = ScaleY;
            emitter.ScaleZ = ScaleZ;

            emitter.RotationX = RotationX;
            emitter.RotationY = RotationY;
            emitter.RotationZ = RotationZ;


            emitter.AreaEmission =
                FlatRedBall.Graphics.GraphicalEnumerations.TranslateAreaEmissionType(
                    AreaEmissionType);

            emitter.RemovalEvent =
                FlatRedBall.Graphics.Particle.Emitter.TranslateRemovalEvent(RemovalEvent);

            //TODO: Attachments
            emitter.Name = Name;

            // Justin Johnson, 04/2015 - retiring particle blueprints
            //emitter.ParticleBlueprint = ParticleBlueprint.ToSprite(contentManagerName);

            emitter.SecondFrequency   = SecondFrequency;
            emitter.NumberPerEmission = NumberPerEmission;
            emitter.TimedEmission     = TimedEmission;

            emitter.RelativePosition =
                new Vector3(RelativeX, RelativeY, RelativeZ);

            emitter.ParentVelocityChangesEmissionVelocity =
                ParentVelocityChangesEmissionVelocity;
            emitter.RotationChangesParticleRotation =
                RotationChangesParticleRotation;
            emitter.RotationChangesParticleAcceleration =
                RotationChangesParticleAcceleration;

            emitter.SecondsLasting = SecondsLasting;

            // This handles older emix files that stored texture in a particle blueprint.
            // To keep particles working we copy the old texture value into the
            // emission settings object. But only if the emission settings
            // doesn't already have a value.
            if (ParticleBlueprint != null &&
                !string.IsNullOrEmpty(ParticleBlueprint.Texture) &&
                string.IsNullOrEmpty(EmissionSettings.Texture))
            {
                EmissionSettings.Texture = ParticleBlueprint.Texture;
            }

            // Now that we've copied the values we can inflate with a hopefully-valid
            // texture string if one existed in either place.
            emitter.EmissionSettings = EmissionSettings.ToEmissionSettings(contentManagerName);



            emitter.BoundedEmission = BoundedEmission;
            if (EmissionBoundary != null)
            {
                emitter.EmissionBoundary = EmissionBoundary.ToPolygon();
            }
            return(emitter);
        }