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; } }
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++; } } }
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)); }