Пример #1
0
        public WaveParticle Clone(Vector2 position)
        {
            WaveParticle waveParticle = WaveParticle.Create(position, this.Direction, this.BaseFrequency, this.BaseAmplitude, this.Lifetime, this.IsShoreWave);

            if (waveParticle == null)
            {
                return(null);
            }
            waveParticle.Amplitude     = this.Amplitude;
            waveParticle.Frequency     = this.Frequency;
            waveParticle.Speed         = this.Speed;
            waveParticle.TargetSpeed   = this.TargetSpeed;
            waveParticle.EnergyBalance = this.EnergyBalance;
            waveParticle.Shoaling      = this.Shoaling;
            waveParticle.Group         = this.Group;
            return(waveParticle);
        }
 public void UpdateParticles(float time, float deltaTime)
 {
     if (!base.isActiveAndEnabled)
     {
         return;
     }
     ComplexWavesEmitter.WavesSource wavesSource = this._WavesSource;
     if (wavesSource != ComplexWavesEmitter.WavesSource.CustomWaveFrequency)
     {
         if (wavesSource != ComplexWavesEmitter.WavesSource.WindWavesSpectrum)
         {
             if (wavesSource == ComplexWavesEmitter.WavesSource.Shoaling)
             {
                 if (this._SpawnPoints == null)
                 {
                     this.CreateShoalingSpawnPoints();
                 }
                 this.UpdateSpawnPoints(deltaTime);
             }
         }
         else
         {
             if (this._SpawnPoints == null)
             {
                 this.CreateSpectralWavesSpawnPoints();
             }
             this.UpdateSpawnPoints(deltaTime);
         }
     }
     else if (time > this._NextSpawnTime)
     {
         Vector3      position     = base.transform.position;
         Vector3      forward      = base.transform.forward;
         Vector2      position2    = new Vector2(position.x, position.z);
         Vector2      vector       = new Vector2(forward.x, forward.z);
         WaveParticle waveParticle = WaveParticle.Create(position2, vector.normalized, 6.28318548f / this._Wavelength, this._Amplitude, this._Lifetime, this._ShoreWaves);
         if (waveParticle != null)
         {
             this._WavesParticleSystem.Spawn(waveParticle, this._Width, this._WaveShapeIrregularity, 2f, 0.35f);
             waveParticle.Destroy();
             waveParticle.AddToCache();
         }
         this._NextSpawnTime += this._TimeStep;
     }
 }
Пример #3
0
        private void Subdivide(WaveParticlesQuadtree quadtree, WaveParticle left, WaveParticle right, ref int numSubdivisions)
        {
            Vector2 a         = left._Position - right._Position;
            float   magnitude = a.magnitude;

            if (magnitude * this.Frequency > 1f && magnitude > 1f && quadtree.FreeSpace != 0)
            {
                WaveParticle waveParticle = WaveParticle.Create(right._Position + a * 0.5f, (left.Direction + right.Direction) * 0.5f, (left.BaseFrequency + right.BaseFrequency) * 0.5f, (left.BaseAmplitude + right.BaseAmplitude) * 0.5f, (left.Lifetime + right.Lifetime) * 0.5f, left.IsShoreWave);
                if (waveParticle != null)
                {
                    waveParticle.Group               = left.Group;
                    waveParticle.Amplitude           = (left.Amplitude + right.Amplitude) * 0.5f;
                    waveParticle.Frequency           = (left.Frequency + right.Frequency) * 0.5f;
                    waveParticle.Speed               = (left.Speed + right.Speed) * 0.5f;
                    waveParticle.TargetSpeed         = (left.TargetSpeed + right.TargetSpeed) * 0.5f;
                    waveParticle.EnergyBalance       = (left.EnergyBalance + right.EnergyBalance) * 0.5f;
                    waveParticle.Shoaling            = (left.Shoaling + right.Shoaling) * 0.5f;
                    waveParticle.TargetInvKh         = (left.TargetInvKh + right.TargetInvKh) * 0.5f;
                    waveParticle.Lifetime            = (left.Lifetime + right.Lifetime) * 0.5f;
                    waveParticle.TargetEnergyBalance = (left.TargetEnergyBalance + right.TargetEnergyBalance) * 0.5f;
                    waveParticle.AmplitudeModifiers  = (left.AmplitudeModifiers + right.AmplitudeModifiers) * 0.5f;
                    waveParticle.AmplitudeModifiers2 = (left.AmplitudeModifiers2 + right.AmplitudeModifiers2) * 0.5f;
                    waveParticle.Invkh               = (left.Invkh + right.Invkh) * 0.5f;
                    waveParticle.BaseSpeed           = (left.BaseSpeed + right.BaseSpeed) * 0.5f;
                    waveParticle.ExpansionEnergyLoss = (left.ExpansionEnergyLoss + right.ExpansionEnergyLoss) * 0.5f;
                    waveParticle.Direction           = left.Direction;
                    if (quadtree.AddElement(waveParticle))
                    {
                        waveParticle.LeftNeighbour  = left;
                        waveParticle.RightNeighbour = right;
                        left.RightNeighbour         = waveParticle;
                        right.LeftNeighbour         = waveParticle;
                    }
                    numSubdivisions++;
                }
            }
        }
Пример #4
0
 public static WaveParticle Create(Vector3 position, Vector2 direction, float baseFrequency, float baseAmplitude, float lifetime, bool isShoreWave)
 {
     return(WaveParticle.Create(new Vector2(position.x, position.z), direction, baseFrequency, baseAmplitude, lifetime, isShoreWave));
 }